<?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>152816</bug_id>
          
          <creation_ts>2016-01-06 16:41:55 -0800</creation_ts>
          <short_desc>Initial implementation files for display-list recording and playback</short_desc>
          <delta_ts>2021-05-05 11:36:44 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225380</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=225381</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>152808</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>dbates</cc>
    
    <cc>hyatt</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1153272</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 16:41:55 -0800</bug_when>
    <thetext>Initial implementation files for display-list recording and playback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153301</commentid>
    <comment_count>1</comment_count>
      <attachid>268429</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 17:39:23 -0800</bug_when>
    <thetext>Created attachment 268429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153305</commentid>
    <comment_count>2</comment_count>
      <attachid>268430</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 17:54:55 -0800</bug_when>
    <thetext>Created attachment 268430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153306</commentid>
    <comment_count>3</comment_count>
      <attachid>268431</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 18:09:50 -0800</bug_when>
    <thetext>Created attachment 268431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153309</commentid>
    <comment_count>4</comment_count>
      <attachid>268432</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 18:31:54 -0800</bug_when>
    <thetext>Created attachment 268432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153317</commentid>
    <comment_count>5</comment_count>
      <attachid>268433</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 18:52:25 -0800</bug_when>
    <thetext>Created attachment 268433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153346</commentid>
    <comment_count>6</comment_count>
      <attachid>268440</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 20:22:12 -0800</bug_when>
    <thetext>Created attachment 268440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153353</commentid>
    <comment_count>7</comment_count>
      <attachid>268442</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 20:43:35 -0800</bug_when>
    <thetext>Created attachment 268442
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153357</commentid>
    <comment_count>8</comment_count>
      <attachid>268433</attachid>
    <who name="alan">zalan</who>
    <bug_when>2016-01-06 20:56:49 -0800</bug_when>
    <thetext>Comment on attachment 268433
Patch

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

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:168
&gt; +    bool extentKnown() const { return static_cast&lt;bool&gt;(m_extent); }

m_extent.isValid()?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:493
&gt; +    Path m_path;

It would be great to have them as const Path m_path;

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

2016

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp:58
&gt; +    if (item.isDrawingItem() || item.type() == ItemType::ApplyStrokePattern || item.type() == ItemType::ApplyStrokePattern) {

early return instead?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

2016

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:30
&gt; +#include &quot;GraphicsContext.h&quot; // For InterpolationQuality.

I don&apos;t think the comment has much value here.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.cpp:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

2016

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.h:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

2016

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListReplayer.h:33
&gt; +class AffineTransform;

Not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153359</commentid>
    <comment_count>9</comment_count>
      <attachid>268443</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-06 21:03:42 -0800</bug_when>
    <thetext>Created attachment 268443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153368</commentid>
    <comment_count>10</comment_count>
      <attachid>268443</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-01-06 23:01:57 -0800</bug_when>
    <thetext>Comment on attachment 268443
Patch

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

I briefly looked over this patch and noticed some minor nits.

&gt; Source/WebCore/ChangeLog:9
&gt; +        - DisplayList, a class that holds a vector of display items, and in future will hold metadata

Nit: in =&gt; &quot;in the&quot;

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:109
&gt; +    GraphicsContextState::StateChangeFlags changeFlags = 0;

Would it make sense to initialize this to GraphicsContextState::NoChange?

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:147
&gt; +    // FIXME: this code should move to GraphicsContextState.

Nit: The t in &quot;this&quot; should be capitalized so that this comment is a proper sentence.

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:161
&gt; +        // FIXME: deal with state.shadowsUseLegacyRadius)

Nit: The d in &quot;deal&quot; should be capitalized so that this comment is a proper sentence.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:225
&gt; +struct GraphicsContextStateChange {

I know that you are debating whether to keep this data structure standalone or combine it with GraphicsContextState. Although it is unwritten convention, we tend to reserve the prefix &quot;m_&quot; for private instance variables of a class and omit the prefix &quot;m_&quot; from the name the instance variables in a struct. One such example of this style can be seen in the struct State defined in file Source/WebCore/html/canvas/CanvasRenderingContext2D.h: &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.h?rev=192140#L268&gt;. Another example of this style can be seen in the struct CompositionEventInit defined in file Source/WebCore/dom/CompositionEvent.h: &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/dom/CompositionEvent.h?rev=194688#L34&gt;.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:241
&gt; +    GraphicsContextState::StateChangeFlags m_changeFlags { 0 };

Would it make sense to initialize this to GraphicsContextState::NoChange?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:71
&gt; +

Nit (OK as-is): I don&apos;t feel that this empty line improves the readability of the code.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:36
&gt; +// Should match RenderTheme::platformFocusRingWidth()
&gt; +static const float platformFocusRingWidth = 3;

I wish we could find a better way to keep this value in sync with RenderTheme.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:164
&gt; +    

Nit (OK as-is): I don&apos;t feel that this empty line improves the readability of this function and its presence makes the formatting for the end of this function asymmetric with the beginning of this function given that there is no empty line under  &quot;ts.startGroup();&quot;.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:194
&gt; +

Nit (OK as-is): I don&apos;t feel that this empty line improves the readability of this function.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:206
&gt; +

Ditto.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:218
&gt; +

Ditto.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:236
&gt; +

Ditto.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:390
&gt; +    for (unsigned i = 0; i &lt; m_glyphs.size(); ++i) {

Although it is OK to use unsigned as the data type for i given the context of this code, I would suggest using size_t to be consistent with the return value data type of Vector::size(). I&apos;m unclear if the compiler is smart enough to cache m_glyphs.size(). (This would also make the notation of this for-loop consistent with the notation you used in the for-loop on line 413). I suggest that we cache m_glyphs.size() in a local variable and reference this local variable in the for-loop condition instead of evaluating m_glyphs.size() on each iteration.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:403
&gt; +    UNUSED_PARAM(m_smoothingMode);

I assume that we do this because clang is unhappy that m_smoothingMode is never used in a meaningful way.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:409
&gt; +    // the glyph lies entirely within its (ascent+descent x advance) rect.

&quot;ascent+descent x advance&quot; =&gt; &quot;(ascent + descent) * advance&quot;

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:413
&gt; +    for (size_t i = 0; i &lt; m_glyphs.size(); ++i) {

I&apos;m unclear if the compiler is smart enough to cache m_glyphs.size(). I suggest that we cache m_glyphs.size() in a local variable and reference this local variable in the for-loop condition instead of evaluating m_glyphs.size() on each iteration.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:679
&gt; +// FIXME: share this code.

Nit: The s in &quot;share&quot; should be capitalized so that this comment is a proper sentence.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:680
&gt; +void addConvexPolygonToPath(Path&amp; path, size_t numPoints, const FloatPoint* points)

Nit: This patch alternates between numPoints and numberOfPoints (one example is on line 690). I suggest that we use numberOfPoints throughout this patch to conform to the naming conventions in the WebKit Code Style Guideline.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp:45
&gt; +    // FIXME: hook up recorder in the GraphicsContext.

Nit: The h in &quot;hook&quot; should be capitalized so that this comment is a proper sentence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153492</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-01-07 11:54:04 -0800</bug_when>
    <thetext>https://trac.webkit.org/r194708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153770</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-01-07 21:36:52 -0800</bug_when>
    <thetext>👍</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268429</attachid>
            <date>2016-01-06 17:39:23 -0800</date>
            <delta_ts>2016-01-06 17:54:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106173851.patch</filename>
            <type>text/plain</type>
            <size>160977</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWUyODk5YTRmZjZiNjlk
MDU1NDI3MzRiMTcxNmFiYjQxZTNjMDBhMy4uMDg2NWEyOGU1MjMxY2FlNjVjMmFjN2MzOGQ4MWU5
YTUzNmFiYmNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmUwMjExYzI5NTExY2ZlNGUxNTFkZTNmOWFjMTEyOGQ5MjRlMmViYTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY1IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VM
ZWdhY3lSYWRpdXMpOworICAgIH0KKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2Rl
Q2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2luZy1tb2RlIiwgbV9z
dGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpCisgICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3RhdGUuZmlsbENvbG9yKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hh
bmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1zdHlsZSIsIG1fc3RhdGUuc3Ry
b2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1ydWxlIiwg
bV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSIs
IG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpOworCisg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hh
bmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBtX3N0YXRlLmJsZW5k
TW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFu
dGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKQorICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9udHMiLCBtX3N0YXRlLnNob3Vs
ZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0aW9uLWVuYWJsZWQiLCBtX3N0YXRl
LmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFu
Z2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZv
bnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy1pZ25vcmUtdHJhbnNm
b3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Up
CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1pbmFuY2UtbWFzayIsIG1fc3RhdGUu
ZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCit7
CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCisKIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRpbmdDb250cm9sVGludHMoZmFsc2Up
CiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDUyYjFhZDgyYjJmOGE1ODcw
OGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEyOTMzYzBmMjM3OGEzYzEzN2ZjZjYz
YWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0gQ2hhbmdlIDogdWludDMyX3Qgewor
ICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAg
ICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisg
ICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwK
KyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAz
LAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEg
PDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xvckNoYW5nZSAgICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5n
ZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25DaGFu
Z2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAgICBCbGVuZE1vZGVDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBUZXh0RHJhd2luZ01vZGVD
aGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRBbnRpYWxp
YXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3LAorICAgICAgICBTaG91bGRTbW9v
dGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAorICAgICAgICBBbnRpYWxp
YXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAxIDw8IDE5LAorICAgICAgICBTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAgPSAxIDw8IDIwLAorICAgICAgICBE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIxLAorICAgICAg
ICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDIyLAorICAg
IH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5nZUZsYWdzOworCiAgICAgUmVmUHRy
PEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0
dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRp
b25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxlOwogfTsKIAorc3RydWN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSgp
ID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgICAgICwgbV9jaGFuZ2VG
bGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFncyB7IDAg
fTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0L0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0L0Rpc3BsYXlMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmY3
YWVmMTE1M2IyNmQ0NDdkOWI1MzJlNGQ2YjI1OGI2YTMwYThmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3QvRGlzcGxheUxpc3Qu
Y3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5o
IgorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QoKQorICAgIDogbV9jYXBhY2l0eSgxMCkKKyAgICAsIG1fZGF0YShz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhtX2NhcGFjaXR5KSkpCit7Cit9CisKK0Rp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCYmIG90aGVyKQorICAgIDogbV9jYXBh
Y2l0eShvdGhlci5tX2NhcGFjaXR5KQorICAgICwgbV91c2VkKG90aGVyLm1fdXNlZCkKKyAgICAs
IG1fZGF0YShvdGhlci5tX2RhdGEpCit7CisgICAgb3RoZXIubV9kYXRhID0gbnVsbHB0cjsKK30K
KworRGlzcGxheUxpc3Q6On5EaXNwbGF5TGlzdCgpCit7CisgICAgaWYgKCFtX2RhdGEpCisgICAg
ICAgIHJldHVybjsKKworICAgIGRlc3Ryb3koKTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6ZGVz
dHJveSgpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisKKyAgICB1aW50OF90KiBwdHIgPSBtX2Rh
dGE7CisgICAgd2hpbGUgKHN0YXRpY19jYXN0PHNpemVfdD4ocHRyIC0gbV9kYXRhKSA8IG1fdXNl
ZCkgeworICAgICAgICBjb25zdCBJdGVtJiBpdGVtID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SXRlbSo+
KHB0cik7CisgICAgICAgIHNpemVfdCBpdGVtU2l6ZSA9IGl0ZW0uc2l6ZSgpOworICAgICAgICBp
dGVtLn5JdGVtKCk7CisgICAgICAgIHB0ciArPSBpdGVtU2l6ZTsKKyAgICB9CisgICAgZmFzdEZy
ZWUobV9kYXRhKTsKK30KKworRGlzcGxheUxpc3QmIERpc3BsYXlMaXN0OjpvcGVyYXRvcj0oRGlz
cGxheUxpc3QmJiBvdGhlcikKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKworICAgIGRlc3Ryb3ko
KTsKKworICAgIG1fY2FwYWNpdHkgPSBvdGhlci5tX2NhcGFjaXR5OworICAgIG1fdXNlZCA9IG90
aGVyLm1fdXNlZDsKKyAgICBtX2RhdGEgPSBvdGhlci5tX2RhdGE7CisKKyAgICBvdGhlci5tX2Rh
dGEgPSBudWxscHRyOworCisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIERpc3BsYXlMaXN0
OjphZGRDYXBhY2l0eShzaXplX3QgbWluaW11bUFkZGl0aW9uYWxTaXplKQoreworICAgIEFTU0VS
VChtX2RhdGEpOworICAgIAorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSBiZXR0ZXIgZ3Jvd3Ro
IHBvbGljeS4KKyAgICBzaXplX3QgaW5jcmVtZW50ID0gMS41ICogbV9jYXBhY2l0eTsKKyAgICBz
aXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ICsgc3RkOjptYXgobWluaW11bUFkZGl0aW9u
YWxTaXplLCBpbmNyZW1lbnQpOworICAgIHVpbnQ4X3QqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihmYXN0TWFsbG9jKG5ld0NhcGFjaXR5KSk7CisKKyAgICBmb3IgKHNpemVfdCBv
ZmZzZXQgPSAwOyBvZmZzZXQgPCBtX3VzZWQ7ICkgeworICAgICAgICBJdGVtJiBpdGVtID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8SXRlbSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgb2Zm
c2V0KTsKKyAgICAgICAgc2l6ZV90IGl0ZW1TaXplID0gaXRlbS5zaXplKCk7CisgICAgICAgIAor
ICAgICAgICBjb3B5SXRlbShpdGVtLCBuZXdCdWZmZXIgKyBvZmZzZXQpOworCisgICAgICAgIGl0
ZW0ufkl0ZW0oKTsKKyAgICAgICAgb2Zmc2V0ICs9IGl0ZW1TaXplOworICAgIH0KKworICAgIGZh
c3RGcmVlKG1fZGF0YSk7CisgICAgbV9kYXRhID0gbmV3QnVmZmVyOworICAgIG1fY2FwYWNpdHkg
PSBuZXdDYXBhY2l0eTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6cmVwbGF5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwKSBjb25zdAoreworICAgIEFTU0VS
VChtX2RhdGEpOworICAgIAorICAgIExPRyhEaXNwbGF5TGlzdCwgIkRpc3BsYXlMaXN0ICVwIHJl
cGxheSB3aXRoIGNsaXAgJS4yZiwgJS4yZiwgJS4yZnglLjJmIiwgdGhpcywgY2xpcC54KCksIGNs
aXAueSgpLCBjbGlwLndpZHRoKCksIGNsaXAuaGVpZ2h0KCkpOworCisgICAgdWludDhfdCogcHRy
ID0gbV9kYXRhOworICAgIHdoaWxlIChzdGF0aWNfY2FzdDxzaXplX3Q+KHB0ciAtIG1fZGF0YSkg
PCBtX3VzZWQpIHsKKyAgICAgICAgY29uc3QgSXRlbSYgaXRlbSA9ICpyZWludGVycHJldF9jYXN0
PEl0ZW0qPihwdHIpOworICAgICAgICBpdGVtLmFwcGx5KGNvbnRleHQpOworICAgICAgICBwdHIg
Kz0gaXRlbS5zaXplKCk7CisgICAgfQorfQorCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9H
X0RJU0FCTEVECitXVEY6OkNTdHJpbmcgRGlzcGxheUxpc3Q6OmRlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIHRzIDw8ICp0aGlzOworICAgIHJldHVybiB0cy5y
ZWxlYXNlKCkudXRmOCgpOworfQorCit2b2lkIERpc3BsYXlMaXN0OjpkdW1wKCkgY29uc3QKK3sK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZGVzY3JpcHRpb24oKS5kYXRhKCkpOworfQorI2Vu
ZGlmCisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fZGF0YSk7CisKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRz
KTsKKyAgICB0cyA8PCAiZGlzcGxheSBsaXN0IjsKKworICAgIHVpbnQ4X3QqIHB0ciA9IG1fZGF0
YTsKKyAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihwdHIgLSBtX2RhdGEpIDwgbV91c2Vk
KSB7CisgICAgICAgIGNvbnN0IEl0ZW0mIGl0ZW0gPSAqcmVpbnRlcnByZXRfY2FzdDxJdGVtKj4o
cHRyKTsKKyAgICAgICAgdHMgPDwgaXRlbTsKKyAgICAgICAgcHRyICs9IGl0ZW0uc2l6ZSgpOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKKworVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCkKK3sKKyAgICBkaXNwbGF5TGlzdC5kdW1wKHRzKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3QvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODhjNjU5NTljOGZmN2Y2MGM1Mjc3MmI4YzVjMjFiMGI0
M2Q4NDdhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0wLDAgKzEsMjQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisKKyNpbmNsdWRl
ICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK1JlY29yZGVyOjpSZWNvcmRlcihE
aXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0
KQoreworfQorCitSZWNvcmRlcjo6flJlY29yZGVyKCkKK3sKKyAgICBMT0coRGlzcGxheUxpc3Qs
ICIlcyIsIG1fZGlzcGxheUxpc3QuZGVzY3JpcHRpb24oKS5kYXRhKCkpOworfQorCit2b2lkIFJl
Y29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCit7
CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU3RhdGUoc3RhdGUpKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6c2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwIGxpbmVDYXApCit7CisgICAgbV9kaXNw
bGF5TGlzdC5hcHBlbmQoTGluZUNhcChsaW5lQ2FwKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQor
eworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNl
dCkpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbiBs
aW5lSm9pbikKK3sKKyAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChMaW5lSm9pbihsaW5lSm9pbikp
OworfQorCit2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCit7
CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoTWl0ZXJMaW1pdChtaXRlckxpbWl0KSk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAg
ICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChUZXh0KGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9t
KSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgc3RhcnRQb2ludCwgc21v
b3RoaW5nTW9kZSkpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2UoV2ViQ29yZTo6SW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25z
KQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3
VGlsZWRJbWFnZShXZWJDb3JlOjpJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoVGlsZWRJ
bWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdl
UGFpbnRpbmdPcHRpb25zKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKFdl
YkNvcmU6OkltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBXZWJD
b3JlOjpJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIFdlYkNvcmU6OkltYWdlOjpUaWxlUnVsZSB2UnVs
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorewor
ICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFRpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5n
T3B0aW9ucykpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihXZWJDb3JlOjpJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQo
RHJhd1BhdHRlcm4oaW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2F2
ZSgpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU2F2ZSgpKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6cmVzdG9yZSgpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoUmVzdG9yZSgpKTsK
K30KKwordm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSkpOworfQorCit2b2lkIFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7Cisg
ICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKERyYXdSZWN0KHJlY3QsIGJv
cmRlclRoaWNrbmVzcykpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3sKKyAgICBtX2Rpc3Bs
YXlMaXN0LmFwcGVuZChEcmF3TGluZShwb2ludDEsIHBvaW50MikpOworfQorCit2b2lkIFJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAgICBt
X2Rpc3BsYXlMaXN0LmFwcGVuZChEcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50
aW5nLCBkb3VibGVMaW5lcykpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3ND
b250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBtX2Rpc3BsYXlM
aXN0LmFwcGVuZChEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKHBvaW50LCB3aWR0aCwgc3R5bGUp
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKERyYXdFbGxpcHNlKHJlY3QpKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCit7CisgICAgbV9kaXNw
bGF5TGlzdC5hcHBlbmQoRHJhd0NvbnZleFBvbHlnb24obnVtYmVyT2ZQb2ludHMsIHBvaW50cywg
YW50aWFsaWFzZWQpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sK
KyAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcikpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKERyYXdGb2N1c1JpbmdSZWN0
cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5k
KEZpbGxSZWN0KHJlY3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgbV9kaXNwbGF5TGlzdC5h
cHBlbmQoRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7
CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3Jh
ZGllbnQpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKEZpbGxDb21wb3NpdGVkUmVj
dChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKEZp
bGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBl
bmQoRmlsbFBhdGgocGF0aCkpOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoRmlsbEVsbGlw
c2UocmVjdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFN0
cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChTdHJva2VQ
YXRoKHBhdGgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU3Ryb2tlRWxsaXBzZShy
ZWN0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoQ2xlYXJSZWN0KHJlY3QpKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9kaXNw
bGF5TGlzdC5hcHBlbmQoQ2xpcChyZWN0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKENsaXBP
dXQocmVjdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
Cit7CisgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoQ2xpcE91dFRvUGF0aChwYXRoKSk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKENsaXBQYXRoKHBhdGgsIHdpbmRSdWxl
KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2lu
dHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXMpCit7CisgICAgbV9k
aXNwbGF5TGlzdC5hcHBlbmQoQ2xpcENvbnZleFBvbHlnb24obnVtUG9pbnRzLCBwb2ludHMsIGFu
dGlhbGlhcykpOworfQorCit2b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKQoreworICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpKTsKK30KKworfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ2MmJkZWJlZDdiYjVhZDY5MjhmMjk5NTUy
ZDAwYWY2YWU5NzY3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTAsMCArMSwyMzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisKKyNpbmNsdWRlICJMb2dnaW5n
LmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworI2lm
ICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorV1RGOjpDU3RyaW5nIERpc3BsYXlM
aXN0OjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICB0cyA8
PCAqdGhpczsKKyAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKK30KKwordm9pZCBEaXNw
bGF5TGlzdDo6ZHVtcCgpIGNvbnN0Cit7CisgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIGRlc2Ny
aXB0aW9uKCkuZGF0YSgpKTsKK30KKyNlbmRpZgorCit2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAo
dHMpOworICAgIHRzIDw8ICJkaXNwbGF5IGxpc3QiOworCisgICAgc2l6ZV90IG51bUl0ZW1zID0g
bV9saXN0LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kp
IHsKKyAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7CisgICAgICAgIHRz
IDw8IGkgPDwgIiAiIDw8IG1fbGlzdFtpXS5nZXQoKTsKKyAgICB9CisgICAgdHMuc3RhcnRHcm91
cCgpOworICAgIHRzIDw8ICJzaXplIGluIGJ5dGVzOiAiIDw8IHNpemVJbkJ5dGVzKCk7CisgICAg
dHMuZW5kR3JvdXAoKTsKK30KKworc2l6ZV90IERpc3BsYXlMaXN0OjpzaXplSW5CeXRlcygpIGNv
bnN0Cit7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yIChhdXRvJiByZWYgOiBtX2xp
c3QpIHsKKyAgICAgICAgc3dpdGNoIChyZWYtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTYXZlPihy
ZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxSZXN0b3JlPihy
ZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpU
cmFuc2xhdGU6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0
ZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxSb3RhdGU+
KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTY2FsZT4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Q29u
Y2F0ZW5hdGVDVE06CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENvbmNh
dGVuYXRlQ1RNPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8U2V0U3RhdGU+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PFNldExpbmVDYXA+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxTZXRMaW5lRGFzaD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgICAgICByZXN1
bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVKb2luPihyZWYuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTZXRNaXRlckxpbWl0PihyZWYuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRv
dzoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KHJl
Zi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsaXA+KHJlZi5nZXQo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXQ+KHJlZi5nZXQo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRU
b1BhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXRUb1Bh
dGg+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlw
UGF0aD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcENvbnZleFBvbHlnb246CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PENsaXBDb252ZXhQb2x5Z29uPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICAgICAgcmVzdWx0
ICs9IHNpemVvZihkb3duY2FzdDxEcmF3R2x5cGhzPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgICAgICBy
ZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFnZT4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAg
ICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGls
ZWRTY2FsZWRJbWFnZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJh
d1RpbGVkU2NhbGVkSW1hZ2U+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBzaXplb2YoZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdHRlcm4+KHJlZi5nZXQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgorICAg
ICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3UmVjdD4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Cisg
ICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihyZWYuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNG
b3JUZXh0OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3TGluZXNG
b3JUZXh0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOgorICAgICAgICAgICAgcmVzdWx0ICs9
IHNpemVvZihkb3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0VsbGlwc2U+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdD
b252ZXhQb2x5Z29uOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3
Q29udmV4UG9seWdvbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KHJlZi5nZXQoKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3Rz
PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJl
Y3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3du
Y2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aEdyYWRpZW50PihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29t
cG9zaXRlZFJlY3Q6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxD
b21wb3NpdGVkUmVjdD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFBhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZp
bGxQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8RmlsbEVsbGlwc2U+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9m
KGRvd25jYXN0PFN0cm9rZVJlY3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0g
c2l6ZW9mKGRvd25jYXN0PFN0cm9rZVBhdGg+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgICAgICBy
ZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KHJlZi5nZXQoKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKKyAgICAg
ICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Q2xlYXJSZWN0PihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxCZWdpblRy
YW5zcGFyZW5jeUxheWVyPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KHJlZi5nZXQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0
dGVybjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QXBwbHlTdHJva2VQ
YXR0ZXJuPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihk
b3duY2FzdDxBcHBseUZpbGxQYXR0ZXJuPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihy
ZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CisKK1RleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgZGlzcGxheUxpc3QuZHVtcCh0cyk7CisgICAgcmV0
dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmEzNDM0MTQwZWZhZTUxNThhNzMyOTliYzdmNGIzZjhmMWZhZWFmZjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlzcGxheUxpc3RfaAorI2RlZmlu
ZSBEaXNwbGF5TGlzdF9oCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBUZXh0U3RyZWFtOwor
CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEaXNwbGF5TGlzdCB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRGlzcGxheUxpc3QpOworICAgIGZyaWVuZCBjbGFzcyBSZWNvcmRl
cjsKK3B1YmxpYzoKKyAgICBEaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsKKyAgICBEaXNwbGF5TGlz
dChEaXNwbGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisKKyAgICBEaXNwbGF5TGlzdCYgb3BlcmF0b3I9
KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikg
Y29uc3Q7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdDsgfQorICAgIEl0ZW0mIGl0ZW1BdChzaXplX3QgaW5kZXgpCisgICAgeworICAg
ICAgICBBU1NFUlQoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fbGlz
dFtpbmRleF0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fbGlzdC5j
bGVhcigpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgp
OyB9CisKKyAgICB2b2lkIHJlbW92ZUl0ZW1zRnJvbUluZGV4KHNpemVfdCBpbmRleCkKKyAgICB7
CisgICAgICAgIG1fbGlzdC5yZXNpemUoaW5kZXgpOworICAgIH0KKworICAgIHNpemVfdCBzaXpl
SW5CeXRlcygpIGNvbnN0OworCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVE
CisgICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBkdW1wKCkg
Y29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBJdGVtJiBhcHBlbmQoUmVmPEl0ZW0+JiYg
aXRlbSkKKyAgICB7CisgICAgICAgIG1fbGlzdC5hcHBlbmQoV1RGTW92ZShpdGVtKSk7CisgICAg
ICAgIHJldHVybiBtX2xpc3QubGFzdCgpLmdldCgpOworICAgIH0KKworICAgIFZlY3RvcjxSZWY8
SXRlbT4+JiBsaXN0KCkgeyByZXR1cm4gbV9saXN0OyB9CisKKyAgICBWZWN0b3I8UmVmPEl0ZW0+
PiBtX2xpc3Q7Cit9OworCit9IC8vIERpc3BsYXlMaXN0CisKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworCit9IC8v
IFdlYkNvcmUKKwordXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OworCisj
ZW5kaWYgLyogRGlzcGxheUxpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA5ZDQzMDY5N2JmNzM2NzkwNWUyNTcyODMwYTAzZjAxM2ZhOTZiNzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTAsMCArMSwxMDg4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisKKyNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIERpc3BsYXlMaXN0IHsKKworLy8gU2hvdWxkIG1hdGNoIFJlbmRlclRoZW1lOjpwbGF0
Zm9ybUZvY3VzUmluZ1dpZHRoKCkKK3N0YXRpYyBjb25zdCBmbG9hdCBwbGF0Zm9ybUZvY3VzUmlu
Z1dpZHRoID0gMzsKKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorV1RG
OjpDU3RyaW5nIEl0ZW06OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRz
OworICAgIHRzIDw8ICp0aGlzOworICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOworfQor
I2VuZGlmCisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3aW5nSXRlbSYgaXRlbSkKK3sKKyAgICB0cy5zdGFydEdyb3VwKCk7CisgICAgdHMg
PDwgImV4dGVudCAiOworICAgIGlmIChpdGVtLmV4dGVudEtub3duKCkpCisgICAgICAgIHRzIDw8
IGl0ZW0uZXh0ZW50KCk7CisgICAgZWxzZQorICAgICAgICB0cyA8PCAidW5rbm93biI7CisgICAg
CisgICAgdHMuZW5kR3JvdXAoKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2F2ZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2F2ZSgp
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2F2ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlc3RvcmUtaW5kZXgiLCBp
dGVtLnJlc3RvcmVJbmRleCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgUmVzdG9yZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQucmVz
dG9yZSgpOworfQorCit2b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0
ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIngiLCBpdGVtLngoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJ5IiwgaXRlbS55KCkpOworCisgICAgcmV0dXJuIHRzOworfQorCit2b2lk
IFJvdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQucm90YXRlKG1fYW5nbGUpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYW5nbGUiLCBpdGVtLmFuZ2xlKCkpOworCisgICAgcmV0dXJuIHRzOworfQorCit2b2lk
IFNjYWxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29u
dGV4dC5zY2FsZShtX3NpemUpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJzaXplIiwgaXRlbS5hbW91bnQoKSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK0NvbmNhdGVu
YXRlQ1RNOjpDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
KyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNKQorICAgICwgbV90cmFuc2Zvcm0o
dHJhbnNmb3JtKQoreworfQorCit2b2lkIENvbmNhdGVuYXRlQ1RNOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jb25jYXRDVE0obV90cmFuc2Zv
cm0pOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjdG0i
LCBpdGVtLnRyYW5zZm9ybSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTZXRTdGF0
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIG1fc3RhdGUu
YXBwbHkoY29udGV4dCk7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFjY3VtdWxhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBmbGFncykKK3sKKyAgICBtX3N0YXRlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsK
K30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldFN0YXRlJiBzdGF0ZSkKK3sKKyAgICB0cyA8PCBzdGF0ZS5zdGF0ZSgpOworICAgIHJldHVy
biB0czsKK30KKwordm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Cit9CisKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5l
Q2FwJiBsaW5lQ2FwKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5lQ2Fw
LmxpbmVDYXAoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNldExpbmVEYXNoOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5zZXRMaW5l
RGFzaChtX2Rhc2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkK
K3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJyYXko
KSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hPZmZz
ZXQoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNldExpbmVKb2luOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5zZXRMaW5lSm9pbiht
X2xpbmVKb2luKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKK3sKKyAgICB0cy5kdW1wUHJvcGVy
dHkoImxpbmUtam9pbiIsIGxpbmVKb2luLmxpbmVKb2luKCkpOworICAgIHJldHVybiB0czsKK30K
Kwordm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Cit9CisKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRl
ckxpbWl0JiBtaXRlckxpbWl0KQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGltaXQi
LCBtaXRlckxpbWl0Lm1pdGVyTGltaXQoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIENs
ZWFyU2hhZG93OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
Y29udGV4dC5jbGVhclNoYWRvdygpOworfQorCit2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAm
IGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBDbGlwT3V0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwT3V0KG1fcmVjdCk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0JiBp
dGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICBy
ZXR1cm4gdHM7Cit9CisKK3ZvaWQgQ2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91
dFRvUGF0aCYpCit7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7
IC8vIEZJWE1FOiBwYXRoIGxvZ2dpbmcuCisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIENsaXBQ
YXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4
dC5jbGlwUGF0aChtX3BhdGgsIG1fd2luZFJ1bGUpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFBhdGgmIGl0ZW0pCit7CisvLyAg
ICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBwYXRoIGxv
Z2dpbmcuCisgICAgdHMuZHVtcFByb3BlcnR5KCJ3aW5kLXJ1bGUiLCBpdGVtLndpbmRSdWxlKCkp
OworICAgIHJldHVybiB0czsKK30KKworQ2xpcENvbnZleFBvbHlnb246OkNsaXBDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29s
IGFudGlhbGlhc2VkKQorICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcENvbnZleFBvbHlnb24pCisg
ICAgLCBtX2FudGlhbGlhcyhhbnRpYWxpYXNlZCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mUG9pbnRzOyArK2kpCisgICAgICAgIG1fcG9pbnRzLmFwcGVuZChwb2ludHNb
aV0pOworfQorCit2b2lkIENsaXBDb252ZXhQb2x5Z29uOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwQ29udmV4UG9seWdvbihtX3BvaW50
cy5zaXplKCksIG1fcG9pbnRzLmRhdGEoKSwgbV9hbnRpYWxpYXMpOworfQorCitzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcENvbnZleFBvbHln
b24mIGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludHMiLCBpdGVtLnBvaW50cygp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImFudGlhbGlhcyIsIGl0ZW0uYW50aWFsaWFzKCkpOwor
ICAgIHJldHVybiB0czsKK30KKworRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xv
Y2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCisg
ICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgLCBtX2Jsb2NrTG9jYXRp
b24oYmxvY2tMb2NhdGlvbikKKyAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCisgICAg
LCBtX3Ntb290aGluZ01vZGUoc21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX2dseXBocy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGNvdW50KTsKKyAgICBtX2FkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoY291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgIG1fZ2x5cGhzLnVuY2hlY2tlZEFwcGVuZChnbHlwaHNbaV0pOworICAgICAgICBt
X2FkdmFuY2VzLnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7CisgICAgfQorICAgIGNvbXB1
dGVCb3VuZHMoKTsKK30KKworaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRl
R2x5cGhCdWZmZXIoKSBjb25zdAoreworICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3Vs
dC5hZGQobV9nbHlwaHNbaV0sICZtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIFVOVVNFRF9QQVJBTSht
X3Ntb290aGluZ01vZGUpOworfQorCit2b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQor
eworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lc24ndCBhY3R1YWxseSB0YWtlIHRoZSBleHRl
bnRzIG9mIHRoZSBnbHlwaHMgaW50byBjb25zaWRlcmF0aW9uLiBJdCBhc3N1bWVzIHRoYXQKKyAg
ICAvLyB0aGUgZ2x5cGggbGllcyBlbnRpcmVseSB3aXRoaW4gaXRzIChhc2NlbnQrZGVzY2VudCB4
IGFkdmFuY2UpIHJlY3QuCisgICAgZmxvYXQgYXNjZW50ID0gbV9mb250LT5mb250TWV0cmljcygp
LmZsb2F0QXNjZW50KCk7CisgICAgZmxvYXQgZGVzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3Mo
KS5mbG9hdERlc2NlbnQoKTsKKyAgICBGbG9hdFBvaW50IGN1cnJlbnQgPSB0b0Zsb2F0UG9pbnQo
bG9jYWxBbmNob3IoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXpl
KCk7ICsraSkgeworICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5j
ZXNbaV07CisgICAgICAgIEZsb2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54
KCksIGN1cnJlbnQueSgpIC0gYXNjZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2Nl
bnQpOworICAgICAgICBtX2JvdW5kcy51bml0ZShnbHlwaFJlY3QpOworCisgICAgICAgIGN1cnJl
bnQgKz0gRmxvYXRTaXplKGFkdmFuY2UpOworICAgIH0KK30KKworT3B0aW9uYWw8RmxvYXRSZWN0
PiBEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAor
eworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IG1fYm91bmRzOworICAgIGxvY2FsQm91bmRz
Lm1vdmUobV9ibG9ja0xvY2F0aW9uLngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7CisgICAgcmV0
dXJuIGxvY2FsQm91bmRzOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUg
c3R1ZmYuCisgICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tM
b2NhdGlvbigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9j
YWxBbmNob3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFu
Y2hvclBvaW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMo
KS5zaXplKCkpOworCisgICAgcmV0dXJuIHRzOworfQorCitEcmF3SW1hZ2U6OkRyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQorICAgICwgbV9pbWFn
ZShpbWFnZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCisgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQoreworfQorCit2b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVz
dGluYXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYg
aXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOwor
fQorCitEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBt
X3RpbGVTaXplKHRpbGVTaXplKQorICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgLCBtX2lt
YWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lkIERy
YXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBt
X3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsK
K30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdUaWxlZEltYWdlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1h
Z2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK0RyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2Nh
bGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQorICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAsIG1f
dlJ1bGUodlJ1bGUpCisgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdP
cHRpb25zKQoreworfQorCit2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZSht
X2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3Is
IG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOworfQorCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJl
dHVybiB0czsKK30KKworRHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2
ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2UpCisgICAgLCBt
X2ltYWdlUHRyKGltYWdlUHRyKQorICAgICwgbV9pbWFnZVNpemUoaW1hZ2VTaXplKQorICAgICwg
bV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKKyAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQorICAgICwg
bV9vcChvcCkKKyAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKKyAgICAsIG1fb3JpZW50YXRp
b24ob3JpZW50YXRpb24pCit7Cit9CisKK3ZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIGF1dG8gaW1h
Z2VQdHIgPSBtX2ltYWdlUHRyLmdldCgpOworI2VuZGlmCisgICAgY29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoaW1hZ2VQdHIsIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBtX3NyY1JlY3QsIG1f
b3AsIG1fYmxlbmRNb2RlLCBtX29yaWVudGF0aW9uKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkK
K3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAg
IC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCisgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2Ut
cmVjdCIsIGl0ZW0uc291cmNlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0Iiwg
aXRlbS5kZXN0aW5hdGlvbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdQYXR0ZXJuOjpE
cmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd1BhdHRlcm4pCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwg
bV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCisgICAgLCBtX3RpbGVSZWN0KHRp
bGVSZWN0KQorICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKKyAgICAsIG1fcGhhc2UocGhh
c2UpCisgICAgLCBtX3NwYWNpbmcoc3BhY2luZykKKyAgICAsIG1fb3Aob3ApCisgICAgLCBtX2Js
ZW5kTW9kZShibGVuZE1vZGUpCit7Cit9CisKK3ZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1f
aW1hZ2UuZ2V0KCksIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9z
cGFjaW5nLCBtX29wLCBtX2Rlc3RpbmF0aW9uLCBtX2JsZW5kTW9kZSk7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYg
aXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zvcm0oKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoInBoYXNlIiwgaXRlbS5waGFzZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InNwYWNpbmciLCBpdGVtLnNwYWNpbmcoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIERy
YXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29u
dGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVt
KQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYm9yZGVyLXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOworICAgIHJl
dHVybiB0czsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzOwor
ICAgIGJvdW5kcy5maXRUb1BvaW50cyhtX3BvaW50MSwgbV9wb2ludDIpOworICAgIHJldHVybiBi
b3VuZHM7Cit9CisKK3ZvaWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdMaW5lKG1fcG9pbnQxLCBtX3BvaW50Mik7Cit9
CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3TGluZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkpOworICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50
KCksIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKK30KKworT3B0aW9uYWw8
RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEg
dmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRl
TGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4KKworICAgIGlm
ICghbV93aWR0aHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBG
bG9hdFJlY3QgcmVzdWx0KHBvaW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCksIG1fc3Ry
b2tlV2lkdGgpKTsKKyAgICByZXN1bHQuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBmb3IgcGl4ZWwg
c25hcHBpbmcuIEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNuJ3QgdGFrZSB0
aGUgQ1RNIGludG8gYWNjb3VudC4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4
dCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9j
YXRpb24oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2Fs
QW5jaG9yKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoIndpZHRocyIsIGl0ZW0ud2lkdGhzKCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiaXMtcHJpbnRpbmciLCBpdGVtLmlzUHJpbnRpbmcoKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJkb3VibGUiLCBpdGVtLmRvdWJsZUxpbmVzKCkpOworICAgIHJldHVybiB0czsKK30KKwor
dm9pZCBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKG1f
cG9pbnQsIG1fd2lkdGgsIG1fc3R5bGUpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBl
cXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIoKSByZXR1cm5zLgorCisgICAgRmxvYXRSZWN0IHJlc3VsdChtX3BvaW50LCBG
bG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOworICAgIHJlc3Vs
dC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZvciAibWlz
c3BlbGxpbmcgZG90IiBzbmFwcGluZy4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlciYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOworICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdF
bGxpcHNlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgp
KTsKKyAgICByZXR1cm4gdHM7Cit9CisKKy8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUuCit2b2lk
IGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwgc2l6ZV90IG51bVBvaW50cywgY29u
c3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIEFTU0VSVChudW1Qb2ludHMgPiAwKTsKKwor
ICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBu
dW1Qb2ludHM7ICsraSkKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKKyAgICBw
YXRoLmNsb3NlU3VicGF0aCgpOworfQorCitEcmF3Q29udmV4UG9seWdvbjo6RHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJv
b2wgYW50aWFsaWFzZWQpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0NvbnZleFBv
bHlnb24pCisgICAgLCBtX2FudGlhbGlhc2VkKGFudGlhbGlhc2VkKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZQb2ludHM7ICsraSkKKyAgICAgICAgbV9wb2ludHMuYXBw
ZW5kKHBvaW50c1tpXSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0NvbnZleFBvbHln
b246OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgRmxv
YXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHBvaW50IDogbV9wb2ludHMpCisgICAgICAg
IHJlc3VsdC5leHRlbmQocG9pbnQpOworICAgIHJlc3VsdC5pbmZsYXRlKG1fYW50aWFsaWFzZWQg
PyAxIDogMCk7IC8vIEFjY291bnQgZm9yIGFudGlhbGlhc2luZworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgRHJhd0NvbnZleFBvbHlnb246OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdDb252ZXhQb2x5Z29uKG1fcG9pbnRzLnNp
emUoKSwgbV9wb2ludHMuZGF0YSgpLCBtX2FudGlhbGlhc2VkKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdDb252ZXhQb2x5Z29u
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludHMiLCBpdGVtLnBvaW50cygpKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoImFudGlhbGlhc2VkIiwgaXRlbS5hbnRpYWxpYXNlZCgpKTsKKyAgICBy
ZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0aCYg
aXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTog
YWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3Rm9j
dXNSaW5nUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9y
KTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgcmVzdWx0
ID0gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKKyAgICByZXN1bHQuaW5mbGF0ZShwbGF0Zm9y
bUZvY3VzUmluZ1dpZHRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgm
IGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKKy8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6
IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KKyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRl
bS53aWR0aCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVy
biB0czsKK30KKwordm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywg
bV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3IpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERy
YXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QKK3sKKyAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgIGZvciAoYXV0byYgcmVjdCA6IG1fcmVj
dHMpCisgICAgICAgIHJlc3VsdC51bml0ZShyZWN0KTsKKyAgICByZXN1bHQuaW5mbGF0ZShwbGF0
Zm9ybUZvY3VzUmluZ1dpZHRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1Jl
Y3RzJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0ZW0ucmVjdHMoKSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9y
IiwgaXRlbS5jb2xvcigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJlY3Q6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0
ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZp
bGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhDb2xvciYgaXRlbSkKK3sKKyAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNv
bG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJlY3RX
aXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9ncmFkaWVudC5nZXQoKSk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdp
dGhHcmFkaWVudCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBsb2cgZ3JhZGllbnQuCisgICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBG
aWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1v
ZGUpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9z
aXRlT3BlcmF0b3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5i
bGVuZE1vZGUoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSb3VuZGVkUmVjdDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmls
bFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVuZE1vZGUpOworfQorCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRS
ZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK3ZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIsIGl0ZW0ucm91bmRlZEhvbGVSZWN0
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFBhdGgobV9wYXRoKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBw
YXRoIGxvZ2dpbmcuCisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxFbGxpcHNlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsRWxs
aXBzZShtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+
IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7
CisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKKyAgICBib3VuZHMuZXhwYW5kKG1fbGlu
ZVdpZHRoLCBtX2xpbmVXaWR0aCk7CisgICAgcmV0dXJuIGJvdW5kczsKK30KKwordm9pZCBTdHJv
a2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29u
dGV4dC5zdHJva2VSZWN0KG1fcmVjdCwgbV9saW5lV2lkdGgpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUmVjdCYgaXRlbSkK
K3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoImxpbmUtd2lkdGgiLCBpdGVtLmxpbmVXaWR0aCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K09wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHRha2Ug
c3Ryb2tlIHRoaWNrbmVzcyBpbnRvIGFjY291bnQgY29ycmVjdGx5LCB2aWEgQ0dQYXRoQnlTdHJv
a2luZ1BhdGgoKS4KKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRo
aWNrbmVzcygpOworCisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcGF0aC5ib3VuZGluZ1JlY3Qo
KTsKKyAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsK
KyAgICBib3VuZHMubW92ZUJ5KG1fYmxvY2tMb2NhdGlvbik7CisgICAgcmV0dXJuIGJvdW5kczsK
K30KKwordm9pZCBTdHJva2VQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IHRvRmxvYXRTaXplKG1fYmxvY2tMb2NhdGlv
bik7CisgICAgbV9wYXRoLnRyYW5zbGF0ZShvZmZzZXQpOworICAgIGNvbnRleHQuc3Ryb2tlUGF0
aChtX3BhdGgpOworICAgIG1fcGF0aC50cmFuc2xhdGUoLW9mZnNldCk7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VQYXRoJiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlv
bigpKTsKKy8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklY
TUU6IHBhdGggbG9nZ2luZy4KKyAgICByZXR1cm4gdHM7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVj
dD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tl
VGhpY2tuZXNzKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OworICAgIGJvdW5k
cy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOworICAgIHJldHVybiBi
b3VuZHM7Cit9CisKK3ZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc3Ryb2tlRWxsaXBzZShtX3JlY3QpOworfQor
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ry
b2tlRWxsaXBzZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsK
KyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jbGVhclJlY3QobV9yZWN0KTsKK30K
Kworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENs
ZWFyUmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihtX29wYWNpdHkpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciYgaXRlbSkKK3sK
KyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgib3BhY2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK3ZvaWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Cit9
CisKK3ZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKK30KKwordm9p
ZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7Cit9CisKK3ZvaWQgQXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3ImIGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzY2FsZS1m
YWN0b3IiLCBpdGVtLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiB0czsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRz
IDw8ICJzYXZlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogdHMgPDwgInJl
c3RvcmUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRzIDw8ICJ0cmFu
c2xhdGUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8ICJyb3RhdGUi
OyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxlIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUt
Y3RtIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3Rh
dGUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxp
bmUtY2FwIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJz
ZXQtbGluZS1kYXNoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRz
IDw8ICJzZXQtbGluZS1qb2luIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJM
aW1pdDogdHMgPDwgInNldC1taXRlci1saW1pdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXA6IHRzIDw8ICJjbGlwIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDog
dHMgPDwgImNsaXAtb3V0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0
aDogdHMgPDwgImNsaXAtb3V0LXRvLXBhdGgiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwUGF0aDogdHMgPDwgImNsaXAtcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBDb252ZXhQb2x5Z29uOiB0cyA8PCAiY2xpcC1jb252ZXgtcG9seWdvbiI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHRzIDw8ICJkcmF3LWdseXBocyI7IGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogdHMgPDwgImRyYXctaW1hZ2UiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTogdHMgPDwgImRyYXctdGlsZWQtaW1h
Z2UiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZTogdHMg
PDwgImRyYXctdGlsZWQtc2NhbGVkLWltYWdlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd05hdGl2ZUltYWdlOiB0cyA8PCAiZHJhdy1uYXRpdmUtaW1hZ2UiOyBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogdHMgPDwgImRyYXctcGF0dGVybiI7IGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB0cyA8PCAiZHJhdy1yZWN0IjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHRzIDw8ICJkcmF3LWxpbmUiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB0cyA8PCAiZHJhdy1saW5lcy1mb3It
dGV4dCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXI6IHRzIDw8ICJkcmF3LWxpbmVzLWZvci1kb2N1bWVudC1tYXJrZXIiOyBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTogdHMgPDwgImRyYXctZWxsaXBzZSI7IGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdDb252ZXhQb2x5Z29uOiB0cyA8PCAiZHJhdy1jb252ZXgt
cG9sZ29uIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHRzIDw8ICJkcmF3
LXBhdGgiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogdHMg
PDwgImRyYXctZm9jdXMtcmluZy1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1JlY3RzOiB0cyA8PCAiZHJhdy1mb2N1cy1yaW5nLXJlY3RzIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHRzIDw8ICJmaWxsLXJlY3QiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogdHMgPDwgImZpbGwtcmVjdC13aXRo
LWNvbG9yIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6
IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1ncmFkaWVudCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogdHMgPDwgImZpbGwtY29tcG9zaXRlZC1yZWN0IjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB0cyA8PCAiZmlsbC1yb3Vu
ZGVkLXJlY3QiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTogdHMgPDwgImZpbGwtcmVjdC13aXRoLXJvdW5kZWQtaG9sZSI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB0cyA8PCAiZmlsbC1wYXRoIjsgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHRzIDw8ICJmaWxsLWVsbGlwc2UiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB0cyA8PCAic3Ryb2tlLXJlY3QiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB0cyA8PCAic3Ryb2tlLXBhdGgiOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOiB0cyA8PCAic3Ryb2tlLWVsbGlw
c2UiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHRzIDw8ICJjbGVhci1y
ZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjog
dHMgPDwgImJlZ2luLXRyYW5zcGFyZW5jeS1sYXllciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB0cyA8PCAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciI7
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjogdHMgPDwgImFw
cGx5LXN0cm9rZS1wYXR0ZXJuIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxs
UGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUt
ZmFjdG9yIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJj
bGVhci1zaGFkb3ciOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQoreworICAg
IFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgIHRzIDw8IGl0ZW0udHlwZSgp
OworCisgICAgLy8gRklYTUU6IE1ha2UgYSBtYWNybyB3aGljaCB0YWtlcyBhIG1hY3JvIGZvciBh
bGwgdGhlc2UgZW51bWVyYXRpb24gc3dpdGNoZXMKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2F2ZT4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxSb3RhdGU+
KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U2NhbGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0
ZW5hdGVDVE0+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dGF0ZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZURhc2g6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVt
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
U2V0TWl0ZXJMaW1pdD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXA6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXA+KGl0ZW0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxD
bGlwT3V0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dFRvUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICB0cyA8
PCBkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwQ29u
dmV4UG9seWdvbj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdHbHlwaHM6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdHbHlwaHM+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRJ
bWFnZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRTY2FsZWRJbWFn
ZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJ
bWFnZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgIHRz
IDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0Pihp
dGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0VsbGlw
c2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4
UG9seWdvbjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0NvbnZleFBvbHlnb24+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d0ZvY3VzUmluZ1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1Jp
bmdSZWN0cz4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdD4oaXRlbSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICB0cyA8
PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICB0cyA8PCBkb3du
Y2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUm91bmRl
ZFJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0PihpdGVt
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFN0
cm9rZUVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgor
ICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0aW9uYWwgZGF0YS4KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
U2hhZG93OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCit9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2UyZGMzZDIwN2E1
ZGFjOWM0NzJlYTc5MDAyMWM0N2EwOTI2MDg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApA
QCAtMCwwICsxLDE0MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBEaXNwbGF5TGlzdEl0ZW1zX2gKKyNkZWZpbmUgRGlzcGxheUxpc3RJ
dGVtc19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VHlwZUNhc3RzLmg+CisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ0cuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFRleHRTdHJlYW07CitzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CisKK25hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CisKK2VudW0gY2xhc3MgSXRlbVR5cGUgeworICAgIFNhdmUsCisgICAgUmVz
dG9yZSwKKyAgICBUcmFuc2xhdGUsCisgICAgUm90YXRlLAorICAgIFNjYWxlLAorICAgIENvbmNh
dGVuYXRlQ1RNLAorICAgIFNldFN0YXRlLAorICAgIFNldExpbmVDYXAsCisgICAgU2V0TGluZURh
c2gsCisgICAgU2V0TGluZUpvaW4sCisgICAgU2V0TWl0ZXJMaW1pdCwKKyAgICBDbGVhclNoYWRv
dywKKyAgICBDbGlwLAorICAgIENsaXBPdXQsCisgICAgQ2xpcE91dFRvUGF0aCwKKyAgICBDbGlw
UGF0aCwKKyAgICBDbGlwQ29udmV4UG9seWdvbiwKKyAgICBEcmF3R2x5cGhzLAorICAgIERyYXdJ
bWFnZSwKKyAgICBEcmF3VGlsZWRJbWFnZSwKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKKyAg
ICBEcmF3TmF0aXZlSW1hZ2UsCisgICAgRHJhd1BhdHRlcm4sCisgICAgRHJhd1JlY3QsCisgICAg
RHJhd0xpbmUsCisgICAgRHJhd0xpbmVzRm9yVGV4dCwKKyAgICBEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyLAorICAgIERyYXdFbGxpcHNlLAorICAgIERyYXdDb252ZXhQb2x5Z29uLAorICAgIERy
YXdQYXRoLAorICAgIERyYXdGb2N1c1JpbmdQYXRoLAorICAgIERyYXdGb2N1c1JpbmdSZWN0cywK
KyAgICBGaWxsUmVjdCwKKyAgICBGaWxsUmVjdFdpdGhDb2xvciwKKyAgICBGaWxsUmVjdFdpdGhH
cmFkaWVudCwKKyAgICBGaWxsQ29tcG9zaXRlZFJlY3QsCisgICAgRmlsbFJvdW5kZWRSZWN0LAor
ICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAorICAgIEZpbGxQYXRoLAorICAgIEZpbGxFbGxp
cHNlLAorICAgIFN0cm9rZVJlY3QsCisgICAgU3Ryb2tlUGF0aCwKKyAgICBTdHJva2VFbGxpcHNl
LAorICAgIENsZWFyUmVjdCwKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyLAorICAgIEVuZFRy
YW5zcGFyZW5jeUxheWVyLAorICAgIEFwcGx5U3Ryb2tlUGF0dGVybiwgLy8gRklYTUU6IHNob3Vs
ZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorICAgIEFwcGx5RmlsbFBhdHRlcm4sIC8vIEZJWE1F
OiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KKyAgICBBcHBseURldmljZVNjYWxlRmFj
dG9yLAorfTsKKworY2xhc3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKK3B1Ymxp
YzoKKyAgICBJdGVtKCkgPSBkZWxldGU7CisKKyAgICBJdGVtKEl0ZW1UeXBlIHR5cGUpCisgICAg
ICAgIDogbV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkl0ZW0oKSB7
IH0KKworICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dHlwZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgPSAwOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRGlzcGxheUxpc3RJdGVt
ID0gdHJ1ZTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAKKyAgICAvLyBBIHN0YXRlIGl0ZW0gaXMgb25lIHByZXNlcnZlZCBi
eSBTYXZlL1Jlc3RvcmUuCisgICAgYm9vbCBpc1N0YXRlSXRlbSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNTdGF0ZUl0ZW1UeXBlKG1fdHlwZSk7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNTdGF0ZUl0ZW1UeXBlKEl0ZW1UeXBlIGl0ZW1UeXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChpdGVtVHlwZSkgeworICAgICAgICBjYXNlIEl0ZW1UeXBlOjogVHJhbnNsYXRlOgor
ICAgICAgICBjYXNlIEl0ZW1UeXBlOjogUm90YXRlOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjog
U2NhbGU6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBDb25jYXRlbmF0ZUNUTToKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6IFNldFN0YXRlOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TGlu
ZUNhcDoKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVEYXNoOgorICAgICAgICBjYXNl
IEl0ZW1UeXBlOjogU2V0TGluZUpvaW46CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRNaXRl
ckxpbWl0OgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogQ2xlYXJTaGFkb3c6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWYgIWRlZmlu
ZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECisgICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBJdGVtVHlwZSBtX3R5cGU7Cit9Owor
CitjbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBEcmF3aW5n
SXRlbShJdGVtVHlwZSB0eXBlKQorICAgICAgICA6IEl0ZW0odHlwZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fZXh0ZW50ID0gcjsg
fQorICAgIGNvbnN0IEZsb2F0UmVjdCYgZXh0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQu
dmFsdWUoKTsgfQorCisgICAgYm9vbCBleHRlbnRLbm93bigpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGJvb2w+KG1fZXh0ZW50KTsgfQorCisgICAgLy8gUmV0dXJuIGJvdW5kcyBvZiB0aGlz
IGRyYXdpbmcgb3BlcmF0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgorICAgIC8vIERvZXMgbm90
IGluY2x1ZGUgZWZmZXRzIG9mIHRyYW5zZm9ybSwgc2hhZG93IGV0YyBpbiB0aGUgc3RhdGUuCisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIE51bGxvcHQ7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbV9leHRlbnQ7IC8vIEluIGJhc2UgY29vcmRpbmF0ZXMsIHRha2lu
ZyBzaGFkb3dzIGFuZCB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KK307CisKK2NsYXNzIFNhdmUg
OiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTYXZlPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2F2ZSk7CisgICAgfQorCisgICAg
Ly8gSW5kZXggaW4gdGhlIGRpc3BsYXkgbGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBSZXN0b3Jl
IGl0ZW0uIDAgaWYgdW5tYXRjaGVkLgorICAgIHNpemVfdCByZXN0b3JlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3Jlc3RvcmVJbmRleDsgfQorICAgIHZvaWQgc2V0UmVzdG9yZUluZGV4KHNpemVf
dCBpbmRleCkgeyBtX3Jlc3RvcmVJbmRleCA9IGluZGV4OyB9CisKK3ByaXZhdGU6CisgICAgU2F2
ZSgpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2F2ZSkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IAorICAgIHNpemVfdCBtX3Jlc3RvcmVJbmRleCB7IDAgfTsKK307CisKK2NsYXNzIFJlc3RvcmUg
OiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZXN0b3JlPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVzdG9yZSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIFJlc3RvcmUoKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlJlc3Rv
cmUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKK2NsYXNzIFRyYW5zbGF0ZSA6IHB1YmxpYyBJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFRyYW5zbGF0ZT4gY3JlYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwg
eSkpOworICAgIH0KKworICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBm
bG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKK3ByaXZhdGU6CisgICAgVHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQor
ICAgICAgICAsIG1feCh4KQorICAgICAgICAsIG1feSh5KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBmbG9hdCBtX3g7CisgICAgZmxvYXQgbV95OworfTsKKworY2xhc3MgUm90YXRlIDogcHVibGlj
IEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSb3RhdGUo
YW5nbGVJblJhZGlhbnMpKTsKKyAgICB9CisKKyAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGU7IH0KKworcHJpdmF0ZToKKyAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCisgICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6Um90YXRlKQorICAgICAgICAsIG1fYW5nbGUoYW5nbGUpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIGZsb2F0IG1fYW5nbGU7IC8vIEluIHJhZGlhbnMuCit9Owor
CitjbGFzcyBTY2FsZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNj
YWxlPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0U2l6
ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgU2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNjYWxl
KQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFNp
emUgbV9zaXplOworfTsKKworY2xhc3MgQ29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgbWF0cml4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q29uY2F0ZW5hdGVDVE0obWF0cml4KSk7CisgICAgfQorCisgICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorCitwcml2YXRl
OgorICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOworfTsKKworY2xhc3MgU2V0U3RhdGUgOiBwdWJs
aWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRTdGF0ZShzdGF0ZSwgZmxhZ3MpKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorCisg
ICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgdm9pZCBhY2N1bXVsYXRlKEdy
YXBoaWNzQ29udGV4dFN0YXRlJikgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVN0YXRl
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgc3RhdGljIHZvaWQgZHVtcFN0
YXRlQ2hhbmdlcyhUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Citwcml2YXRlOgorICAgIFNldFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0
U3RhdGUpCisgICAgICAgICwgbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGU7Cit9OworCitjbGFzcyBT
ZXRMaW5lQ2FwIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2V0TGlu
ZUNhcD4gY3JlYXRlKExpbmVDYXAgbGluZUNhcCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldExpbmVDYXAobGluZUNhcCkpOworICAgIH0KKyAgICAKKyAgICBMaW5lQ2Fw
IGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KKworcHJpdmF0ZToKKyAgICBT
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRM
aW5lQ2FwKQorICAgICAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBMaW5lQ2FwIG1fbGluZUNhcDsKK307CisKK2NsYXNzIFNldExpbmVEYXNoIDogcHVibGlj
IEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2V0TGluZURhc2g+IGNyZWF0ZShjb25z
dCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkp
OworICAgIH0KKworICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29uc3QgeyByZXR1
cm4gbV9kYXNoQXJyYXk7IH0KKyAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9kYXNoT2Zmc2V0OyB9CisKK3ByaXZhdGU6CisgICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgICAgIDogSXRlbShJdGVtVHlw
ZTo6U2V0TGluZURhc2gpCisgICAgICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQorICAgICAg
ICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBEYXNo
QXJyYXkgbV9kYXNoQXJyYXk7CisgICAgZmxvYXQgbV9kYXNoT2Zmc2V0OworfTsKKworY2xhc3Mg
U2V0TGluZUpvaW4gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRM
aW5lSm9pbj4gY3JlYXRlKExpbmVKb2luIGxpbmVKb2luKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKKyAgICB9CisgICAgCisgICAg
TGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CisKK3ByaXZh
dGU6CisgICAgU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCisgICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6U2V0TGluZUpvaW4pCisgICAgICAgICwgbV9saW5lSm9pbihsaW5lSm9pbikKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgTGluZUpvaW4gbV9saW5lSm9pbjsKK307CisKK2NsYXNzIFNl
dE1pdGVyTGltaXQgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRN
aXRlckxpbWl0PiBjcmVhdGUoZmxvYXQgbGltaXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTZXRNaXRlckxpbWl0KGxpbWl0KSk7CisgICAgfQorCisgICAgZmxvYXQgbWl0
ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorCitwcml2YXRlOgorICAg
IFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRNaXRlckxpbWl0KQorICAgICAgICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX21pdGVyTGltaXQ7Cit9OworCitjbGFzcyBDbGVh
clNoYWRvdyA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsZWFyU2hh
ZG93PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJT
aGFkb3cpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDbGVhclNoYWRvdygpCisgICAgICAgIDog
SXRlbShJdGVtVHlwZTo6Q2xlYXJTaGFkb3cpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKKy8vIEZJ
WE1FOiB0cmVhdCBhcyBEcmF3aW5nSXRlbT8KK2NsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGlwPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcChyZWN0KSk7CisgICAg
fQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJp
dmF0ZToKKyAgICBDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBJdGVtKEl0
ZW1UeXBlOjpDbGlwKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJl
Y3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQorCitwcml2YXRlOgorICAgIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBDbGlw
T3V0VG9QYXRoIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcE91
dFRvUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGlwT3V0VG9QYXRoKHBhdGgpKTsKKyAgICB9CisKKyAgICBjb25zdCBQ
YXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKK3ByaXZhdGU6CisgICAgQ2xp
cE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNs
aXBPdXRUb1BhdGgpCisgICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIFBhdGggbV9wYXRoOworfTsKKworY2xhc3MgQ2xpcFBhdGggOiBwdWJsaWMgSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGlwUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHdpbmRSdWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25z
dCB7IHJldHVybiBtX3dpbmRSdWxlOyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6
Q2xpcFBhdGgpCisgICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgICAgICwgbV93aW5kUnVsZSh3
aW5kUnVsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUGF0aCBtX3BhdGg7CisgICAgV2luZFJ1
bGUgbV93aW5kUnVsZTsKK307CisKK2NsYXNzIENsaXBDb252ZXhQb2x5Z29uIDogcHVibGljIEl0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcENvbnZleFBvbHlnb24+IGNyZWF0ZShz
aXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRp
YWxpYXNlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBDb252ZXhQ
b2x5Z29uKG51bWJlck9mUG9pbnRzLCBwb2ludHMsIGFudGlhbGlhc2VkKSk7CisgICAgfQorCisg
ICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMoKSBjb25zdCB7IHJldHVybiBtX3Bv
aW50czsgfQorICAgIGJvb2wgYW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9hbnRpYWxpYXM7
IH0KKworcHJpdmF0ZToKKyAgICBDbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2lu
dHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFudGlhbGlhc2VkKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rv
cjxGbG9hdFBvaW50PiBtX3BvaW50czsKKyAgICBib29sIG1fYW50aWFsaWFzOworfTsKKworY2xh
c3MgRHJhd0dseXBocyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRT
aXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgY291bnQsIGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2Rl
KSk7CisgICAgfQorCisgICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2Nr
TG9jYXRpb247IH0KKworICAgIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBjb25zdCB7
IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9CisKKyAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50KCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uICsgbV9sb2NhbEFuY2hvcjsgfQorCisgICAg
Y29uc3QgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mIGdseXBocygpIGNvbnN0IHsgcmV0
dXJuIG1fZ2x5cGhzOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNp
emUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSk7CisKKyAgICB2b2lkIGNvbXB1dGVC
b3VuZHMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEdseXBoQnVm
ZmVyIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSBjb25zdDsKKworICAgIFJlZjxGb250PiBtX2ZvbnQ7
CisgICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4gbV9nbHlwaHM7CisgICAgVmVjdG9y
PEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiBtX2FkdmFuY2VzOworICAgIEZsb2F0UmVjdCBtX2Jv
dW5kczsKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICBGbG9hdFNpemUgbV9s
b2NhbEFuY2hvcjsKKyAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGU7Cit9Owor
CitjbGFzcyBEcmF3SW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RHJhd0ltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpOworICAgIH0KKworICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1hZ2U+
IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0
aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgorICAg
IEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKKyAgICBJ
bWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworfTsKKworY2xhc3Mg
RHJhd1RpbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8RHJhd1RpbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGls
ZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgfQorCisgICAgY29u
c3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIEZs
b2F0UG9pbnQgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBGbG9hdFJl
Y3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBG
bG9hdFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVTaXplOyB9CisgICAgRmxv
YXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KKworcHJpdmF0ZToK
KyAgICBEcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKwor
ICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMg
Y2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhh
dmUgdG8gYmUgbXV0YWJsZS4KKyAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKKyAgICBGbG9h
dFBvaW50IG1fc291cmNlOworICAgIEZsb2F0U2l6ZSBtX3RpbGVTaXplOworICAgIEZsb2F0U2l6
ZSBtX3NwYWNpbmc7CisgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0
aW9uczsKK307CisKK2NsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPiBjcmVh
dGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpU
aWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7
CisgICAgfQorCisgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZS5nZXQoKTsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZTsgfQorICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KKworcHJpdmF0ZToKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAg
bXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4g
Y2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0
byBiZSBtdXRhYmxlLgorICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOworICAgIEZsb2F0UmVj
dCBtX3NvdXJjZTsKKyAgICBGbG9hdFNpemUgbV90aWxlU2NhbGVGYWN0b3I7CisgICAgSW1hZ2U6
OlRpbGVSdWxlIG1faFJ1bGU7CisgICAgSW1hZ2U6OlRpbGVSdWxlIG1fdlJ1bGU7CisgICAgSW1h
Z2VQYWludGluZ09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKK307CisKK2NsYXNzIERy
YXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0ZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIs
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd05hdGl2ZUltYWdlKGltYWdlUHRyLCBpbWFnZVNpemUs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbikpOworICAgIH0K
KworICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KKyAg
ICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9
CisKK3ByaXZhdGU6CisgICAgRHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9y
aWVudGF0aW9uKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9CisKKyNpZiBVU0UoQ0cpCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1f
aW1hZ2VQdHI7CisjZW5kaWYKKyAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7CisgICAgRmxvYXRS
ZWN0IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKKyAgICBDb21wb3Np
dGVPcGVyYXRvciBtX29wOworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG1fb3JpZW50YXRpb247Cit9OworCitjbGFzcyBEcmF3UGF0dGVybiA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3UGF0dGVybj4gY3Jl
YXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdQYXR0ZXJuKGltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKSk7CisgICAgfQor
CisgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsg
fQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0dGVyblRyYW5zZm9ybTsgfQorICAgIEZsb2F0UmVjdCB0aWxlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsZVJlY3Q7IH0KKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAgRmxvYXRQb2ludCBwaGFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGhhc2U7IH0KKyAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0
dXJuIG1fc3BhY2luZzsgfQorCitwcml2YXRlOgorICAgIERyYXdQYXR0ZXJuKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRv
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFs
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CisKKyAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcg
aW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3Vs
ZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCisgICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRy
YW5zZm9ybTsKKyAgICBGbG9hdFJlY3QgbV90aWxlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9kZXN0
aW5hdGlvbjsKKyAgICBGbG9hdFBvaW50IG1fcGhhc2U7CisgICAgRmxvYXRTaXplIG1fc3BhY2lu
ZzsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9k
ZTsKK307CisKKy8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5z
cGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KK2NsYXNzIEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVy
KG9wYWNpdHkpKTsKKyAgICB9CisKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9vcGFjaXR5OyB9CisKK3ByaXZhdGU6CisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKQorICAgICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBmbG9hdCBtX29wYWNpdHk7Cit9OworCitjbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXll
ciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxFbmRUcmFu
c3BhcmVuY3lMYXllcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEVuZFRyYW5zcGFyZW5jeUxheWVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpFbmRUcmFu
c3BhcmVuY3lMYXllcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgRHJhd1JlY3QgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1JlY3Q+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNr
bmVzcykpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9ib3Jk
ZXJUaGlja25lc3M7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RHJhd1JlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9ib3Jk
ZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVj
dDsKKyAgICBmbG9hdCBtX2JvcmRlclRoaWNrbmVzczsKK307CisKK2NsYXNzIERyYXdMaW5lIDog
cHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdMaW5lPiBj
cmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZShwb2ludDEsIHBv
aW50MikpOworICAgIH0KKworICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludDE7IH0KKyAgICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9p
bnQyOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkRyYXdMaW5lKQorICAgICAgICAsIG1fcG9pbnQxKHBvaW50MSkKKyAgICAgICAgLCBtX3Bv
aW50Mihwb2ludDIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBGbG9hdFBvaW50IG1fcG9pbnQxOworICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7Cit9
OworCitjbGFzcyBEcmF3TGluZXNGb3JUZXh0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPERyYXdMaW5lc0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQg
c3Ryb2tlV2lkdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGlu
ZXNGb3JUZXh0KGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVMaW5lcywgc3Ryb2tlV2lkdGgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEJsb2NrTG9j
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24g
PSBibG9ja0xvY2F0aW9uOyB9CisgICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbjsgfQorICAgIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9CisgICAgRmxvYXRQ
b2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNo
b3I7IH0KKyAgICBjb25zdCBEYXNoQXJyYXkmIHdpZHRocygpIGNvbnN0IHsgcmV0dXJuIG1fd2lk
dGhzOyB9CisgICAgYm9vbCBpc1ByaW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZzsg
fQorICAgIGJvb2wgZG91YmxlTGluZXMoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9
CisKK3ByaXZhdGU6CisgICAgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9j
a0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lk
dGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCisg
ICAgICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgICAgICwgbV9sb2Nh
bEFuY2hvcihsb2NhbEFuY2hvcikKKyAgICAgICAgLCBtX3dpZHRocyh3aWR0aHMpCisgICAgICAg
ICwgbV9zdHJva2VXaWR0aChzdHJva2VXaWR0aCkKKyAgICAgICAgLCBtX3ByaW50aW5nKHByaW50
aW5nKQorICAgICAgICAsIG1fZG91YmxlTGluZXMoZG91YmxlTGluZXMpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UG9pbnQgbV9ibG9j
a0xvY2F0aW9uOworICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOworICAgIERhc2hBcnJheSBt
X3dpZHRoczsKKyAgICBmbG9hdCBtX3N0cm9rZVdpZHRoOworICAgIGJvb2wgbV9wcmludGluZzsK
KyAgICBib29sIG1fZG91YmxlTGluZXM7Cit9OworCitjbGFzcyBEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgd2lkdGgsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5
bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyKHBvaW50LCB3aWR0aCwgc3R5bGUpKTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50
IHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDsgfQorICAgIGZsb2F0IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQorCitwcml2YXRlOgorICAgIERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0Nv
bnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgICAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKQorICAgICAgICAsIG1fcG9p
bnQocG9pbnQpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX3N0eWxlKHN0
eWxlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBGbG9hdFBvaW50IG1fcG9pbnQ7CisgICAgZmxvYXQgbV93aWR0aDsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7Cit9OworCitjbGFzcyBEcmF3
RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
cmF3RWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBG
bG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAg
IERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RHJhd0VsbGlwc2UpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisK
KyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgRHJhd0NvbnZleFBvbHlnb24gOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0NvbnZleFBv
bHlnb24+IGNyZWF0ZShzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBv
aW50cywgYm9vbCBhbnRpYWxpYXNlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERyYXdDb252ZXhQb2x5Z29uKG51bWJlck9mUG9pbnRzLCBwb2ludHMsIGFudGlhbGlhc2Vk
KSk7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMoKSBjb25z
dCB7IHJldHVybiBtX3BvaW50czsgfQorICAgIGJvb2wgYW50aWFsaWFzZWQoKSBjb25zdCB7IHJl
dHVybiBtX2FudGlhbGlhc2VkOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0NvbnZleFBvbHlnb24o
c2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXNl
ZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPEZsb2F0UG9p
bnQ+IG1fcG9pbnRzOworICAgIGJvb2wgbV9hbnRpYWxpYXNlZDsKK307CisKK2NsYXNzIERyYXdQ
YXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdQ
YXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdQYXRoKHBhdGgpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgp
CisgICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisKKyAg
ICBQYXRoIG1fcGF0aDsKK307CisKK2NsYXNzIERyYXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBj
cmVhdGUoY29uc3QgUGF0aCYgcGF0aCwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNS
aW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIH0KKworICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICBpbnQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CisKK3ByaXZhdGU6CisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgaW50
IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRo
KQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFBhdGggbV9wYXRoOworICAgIGludCBtX3dpZHRoOworICAg
IGludCBtX29mZnNldDsKKyAgICBDb2xvciBtX2NvbG9yOworfTsKKworY2xhc3MgRHJhd0ZvY3Vz
UmluZ1JlY3RzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PERyYXdGb2N1c1JpbmdSZWN0cz4gY3JlYXRlKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcikpOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiByZWN0
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdHM7IH0KKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoOyB9CisgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0
OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZh
dGU6CisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHMpCisgICAgICAgICwgbV9yZWN0
cyhyZWN0cykKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gbV9yZWN0czsKKyAg
ICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9vZmZzZXQ7CisgICAgQ29sb3IgbV9jb2xvcjsKK307
CisKK2NsYXNzIEZpbGxSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPEZpbGxSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOworICAgIH0KKwor
ICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6
CisgICAgRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpGaWxsUmVjdCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKwor
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCisvLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0
IGZyb20gRmlsbFJlY3QgcHJvcGVyLgorY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNv
bG9yKSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKworcHJp
dmF0ZToKKyAgICBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoQ29sb3IpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xv
cikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgQ29sb3IgbV9jb2xvcjsKK307
CisKK2NsYXNzIEZpbGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhHcmFkaWVudChyZWN0LCBncmFkaWVudCkpOwor
ICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisK
K3ByaXZhdGU6CisgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBHcmFkaWVudCYgZ3JhZGllbnQpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aEdyYWRpZW50KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1f
Z3JhZGllbnQoZ3JhZGllbnQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIG11
dGFibGUgUmVmPEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTogTWFrZSB0aGlzIG5vdCBt
dXRhYmxlCit9OworCitjbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbENvbXBvc2l0ZWRSZWN0PiBjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7
CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
KyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAg
ICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KKwor
cHJpdmF0ZToKKyAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Qp
CisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAg
ICAgLCBtX29wKG9wKQorICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKwor
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgQ29sb3IgbV9jb2xvcjsKKyAgICBDb21wb3NpdGVP
cGVyYXRvciBtX29wOworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKK307CisKK2NsYXNzIEZp
bGxSb3VuZGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxGaWxsUm91bmRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5k
TW9kZSkpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX2NvbG9yOyB9CisgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxlbmRNb2RlOyB9CisKK3ByaXZhdGU6CisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQor
ICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAg
ICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0KKworICAgIEZsb2F0Um91bmRl
ZFJlY3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7CisgICAgQmxlbmRNb2RlIG1fYmxlbmRN
b2RlOworfTsKKworY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVS
ZWN0LCBjb2xvcikpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9CisgICAgQ29sb3Ig
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6CisgICAgRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCisgICAgICAgICwg
bV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0
KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0
OworICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yb3VuZGVkSG9sZVJlY3Q7CisgICAgQ29sb3IgbV9j
b2xvcjsKK307CisKK2NsYXNzIEZpbGxQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRoKHBhdGgpKTsKKyAgICB9
CisKKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKK3By
aXZhdGU6CisgICAgRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RmlsbFBhdGgpCisgICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RC
b3VuZGluZ1JlY3QoKTsgfQorCisgICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBGaWxsRWxs
aXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxs
RWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIEZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RmlsbEVsbGlwc2UpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKwor
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBTdHJva2VSZWN0IDogcHVibGljIERy
YXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKSk7CisgICAgfQor
CisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBmbG9h
dCBsaW5lV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVXaWR0aDsgfQorCitwcml2YXRlOgor
ICAgIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisg
ICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCisgICAgICAgICwgbV9y
ZWN0KHJlY3QpCisgICAgICAgICwgbV9saW5lV2lkdGgobGluZVdpZHRoKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsK
KyAgICBmbG9hdCBtX2xpbmVXaWR0aDsKK307CisKK2NsYXNzIFN0cm9rZVBhdGggOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEZsb2F0UG9pbnQmIG1fYmxvY2tMb2NhdGlvbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCwgbV9ibG9j
a0xvY2F0aW9uKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlv
bjsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2Jsb2NrTG9jYXRpb247IH0KKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9CisKK3ByaXZhdGU6CisgICAgU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKQorICAgICAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpTdHJva2VQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgICAgICAs
IG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsKKyAgICBGbG9h
dFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKK307CisKK2NsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFN0cm9rZUVsbGlwc2UocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgU3Ryb2tlRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OlN0cm9rZUVsbGlwc2UpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0Owor
fTsKKworY2xhc3MgQ2xlYXJSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPENsZWFyUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyUmVjdChyZWN0KSk7CisgICAg
fQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJp
dmF0ZToKKyAgICBDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpDbGVhclJlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0
OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgQXBwbHlTdHJva2VQYXR0
ZXJuIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXBwbHlTdHJva2VQ
YXR0ZXJuPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBw
bHlTdHJva2VQYXR0ZXJuKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXBwbHlTdHJva2VQYXR0
ZXJuKCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKK307CisKK2NsYXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBcHBseUZpbGxQYXR0ZXJuPiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlGaWxsUGF0dGVybik7CisgICAg
fQorCitwcml2YXRlOgorICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorICAgICAgICA6IEl0ZW0oSXRl
bVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKKworY2xhc3Mg
QXBwbHlEZXZpY2VTY2FsZUZhY3RvciA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+IGNyZWF0ZShmbG9hdCBzY2FsZUZhY3RvcikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IpKTsKKyAgICB9CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7IH0KKworcHJpdmF0ZToKKyAgICBBcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IpCisgICAgICAgICwgbV9zY2FsZUZhY3RvcihzY2FsZUZhY3Rv
cikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKK307CisKKy8v
IEZJWE1FOiB0aGlzIG5lZWRzIHRvIG1vdmUuCit2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgo
UGF0aCYsIHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqKTsKKworVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOworCit9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNkZWZpbmUgU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUs
IHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVk
aWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJ
dGVtKCkpCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFRvVmFsdWVUeXBlTmFtZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBpdGVtLnR5
cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVUeXBlTmFtZTsg
fSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShTYXZlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKFJlc3RvcmUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oVHJhbnNsYXRlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJv
dGF0ZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTY2FsZSkKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNUTSkKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lQ2FwKQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNoKQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVKb2luKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVyTGltaXQpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShDbGlwT3V0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKENsaXBPdXRUb1BhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oQ2xpcFBhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xp
cENvbnZleFBvbHlnb24pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RHJhd0dseXBocykKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
SW1hZ2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1RpbGVk
SW1hZ2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1RpbGVk
U2NhbGVkSW1hZ2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d05hdGl2ZUltYWdlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERy
YXdQYXR0ZXJuKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdS
ZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lc0ZvclRleHQp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
RWxsaXBzZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Q29u
dmV4UG9seWdvbikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
UGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNS
aW5nUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9j
dXNSaW5nUmVjdHMpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmls
bFJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RX
aXRoQ29sb3IpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJl
Y3RXaXRoR3JhZGllbnQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RmlsbENvbXBvc2l0ZWRSZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEZpbGxSb3VuZGVkUmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShGaWxsUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShGaWxsRWxsaXBzZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShTdHJva2VSZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFN0cm9rZVBhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ry
b2tlRWxsaXBzZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVh
clJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQmVnaW5UcmFu
c3BhcmVuY3lMYXllcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShF
bmRUcmFuc3BhcmVuY3lMYXllcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShBcHBseVN0cm9rZVBhdHRlcm4pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oQXBwbHlGaWxsUGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShBcHBseURldmljZVNjYWxlRmFjdG9yKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKENsZWFyU2hhZG93KQorCisjZW5kaWYgLy8gRGlzcGxheUxpc3RJ
dGVtc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTcyMjA3OTA2MTM0ZGUyODFhODBlZmU3MTQzMGU1N2YxOGFjNjI5YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMCwwICsxLDQ4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgorCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlz
cGxheUxpc3QgeworCitSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYmFzZUNUTSkKKyAgICA6IG1fZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpCisgICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQoreworICAgIExPR19X
SVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiXG5SZWNvcmRpbmcgd2l0aCBjbGlw
ICIgPDwgaW5pdGlhbENsaXApOworCisgICAgLy8gRklYTUU6IGhvb2sgdXAgcmVjb3JkZXIgaW4g
dGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICAvLyBtX2dyYXBoaWNzQ29udGV4dC5zZXREaXNwbGF5
TGlzdFJlY29yZGVyKHRoaXMpOworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoQ29udGV4dFN0YXRl
KGJhc2VDVE0sIGluaXRpYWxDbGlwKSk7Cit9CisKK1JlY29yZGVyOjp+UmVjb3JkZXIoKQorewor
ICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBp
dCBpbmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jlc3RvcmUuCisgICAgTE9HKERpc3BsYXlMaXN0
cywgIlJlY29yZGVkIGRpc3BsYXkgbGlzdDpcbiVzIiwgbV9kaXNwbGF5TGlzdC5kZXNjcmlwdGlv
bigpLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKGNvbnN0IEl0
ZW0mIGl0ZW0pCit7CisgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpIHx8IGl0ZW0udHlwZSgp
ID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4gfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5
cGU6OkFwcGx5U3Ryb2tlUGF0dGVybikgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tTGFzdFN0
YXRlID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERy
YXdpbmdTdGF0ZSk7CisgICAgICAgIGlmIChjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkgeworICAgICAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2lu
Zywgc2F2aW5nIHN0YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFu
Z2VzLm1fc3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7CisgICAgICAgICAgICBtX2Rpc3Bs
YXlMaXN0LmFwcGVuZChTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFu
Z2VzRnJvbUxhc3RTdGF0ZSkpOworICAgICAgICAgICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxh
Z3MgPSAwOworICAgICAgICAgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0
YXRlQ2hhbmdlcy5tX3N0YXRlOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRTdGF0ZSgpLndh
c1VzZWRGb3JEcmF3aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit7CisgICAgY3VycmVudFN0YXRlKCkuc3Rh
dGVDaGFuZ2UuYWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOworfQorCit2b2lkIFJlY29yZGVyOjpj
bGVhclNoYWRvdygpCit7CisgICAgYXBwZW5kSXRlbShDbGVhclNoYWRvdzo6Y3JlYXRlKCkpOwor
fQorCit2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3sKKyAgICBh
cHBlbmRJdGVtKFNldExpbmVDYXA6OmNyZWF0ZShsaW5lQ2FwKSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zm
c2V0KQoreworICAgIGFwcGVuZEl0ZW0oU2V0TGluZURhc2g6OmNyZWF0ZShkYXNoQXJyYXksIGRh
c2hPZmZzZXQpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGlu
ZUpvaW4pCit7CisgICAgYXBwZW5kSXRlbShTZXRMaW5lSm9pbjo6Y3JlYXRlKGxpbmVKb2luKSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3sK
KyAgICBhcHBlbmRJdGVtKFNldE1pdGVyTGltaXQ6OmNyZWF0ZShtaXRlckxpbWl0KSk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAg
ICBGbG9hdFBvaW50IGJsb2NrTG9jYXRpb24gPSBtX2NhY2hpbmcgPyBtX2Jsb2NrTG9jYXRpb24g
OiBGbG9hdFBvaW50KCk7CisgICAgRmxvYXRTaXplIGxvY2FsQW5jaG9yID0gc3RhcnRQb2ludCAt
IGJsb2NrTG9jYXRpb247CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBibG9j
a0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpKTsKKyAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2UoSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorewor
ICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0
ZW0oRHJhd0ltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFp
bnRpbmdPcHRpb25zKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZEltYWdlOjpjcmVh
dGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRy
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdOYXRp
dmVJbWFnZTo6Y3JlYXRlKGltYWdlUHRyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Cit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKSkpOworICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQorewor
ICAgIGFwcGVuZEl0ZW0oU2F2ZTo6Y3JlYXRlKCkpOworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQo
bV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUobV9kaXNwbGF5TGlzdC5zaXplKCkgLSAx
KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAgIGlmICghbV9zdGF0ZVN0
YWNrLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgc3RhdGVVc2VkRm9y
RHJhd2luZyA9IGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nOworICAgIHNpemVfdCBz
YXZlSW5kZXggPSBjdXJyZW50U3RhdGUoKS5zYXZlSXRlbUluZGV4OworICAgIAorICAgIG1fc3Rh
dGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgLy8gSGF2ZSB0byBhdm9pZCBlbGlkaW5nIG5lc3Rl
ZCBTYXZlL1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29udGFpbnMgZHJhd2luZyBp
dGVtcy4KKyAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyB8PSBzdGF0ZVVzZWRG
b3JEcmF3aW5nOworCisgICAgaWYgKCFzdGF0ZVVzZWRGb3JEcmF3aW5nICYmIHNhdmVJbmRleCkg
eworICAgICAgICAvLyBUaGlzIFNhdmUvUmVzdG9yZSBkaWRuJ3QgY29udGFpbiBhbnkgZHJhd2lu
ZyBpdGVtcy4gUm9sbCBiYWNrIHRvIGp1c3QgYmVmb3JlIHRoZSBsYXN0IHNhdmUuCisgICAgICAg
IG1fZGlzcGxheUxpc3QucmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2F2ZUluZGV4KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGFwcGVuZEl0ZW0oUmVzdG9yZTo6Y3JlYXRlKCkpOworICAg
IAorICAgIGlmIChzYXZlSW5kZXgpIHsKKyAgICAgICAgU2F2ZSYgc2F2ZUl0ZW0gPSBkb3duY2Fz
dDxTYXZlPihtX2Rpc3BsYXlMaXN0Lml0ZW1BdChzYXZlSW5kZXgpKTsKKyAgICAgICAgc2F2ZUl0
ZW0uc2V0UmVzdG9yZUluZGV4KG1fZGlzcGxheUxpc3Quc2l6ZSgpIC0gMSk7CisgICAgfQorfQor
Cit2b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBjdXJy
ZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7CisgICAgYXBwZW5kSXRlbShUcmFuc2xhdGU6OmNy
ZWF0ZSh4LCB5KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAg
IGFwcGVuZEl0ZW0oUm90YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlhbnMpKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGN1cnJlbnRTdGF0
ZSgpLnNjYWxlKHNpemUpOworICAgIGFwcGVuZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICBh
cHBlbmRJdGVtKENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOworICAgIHVwZGF0ZUl0ZW1F
eHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCkKK3sKKyAgICBhcHBlbmRJdGVtKEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlj
a25lc3MpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5n
SXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOworICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3Mp
Cit7CisgICAgRmxvYXRQb2ludCBibG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8gbV9ibG9ja0xv
Y2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgIEZsb2F0U2l6ZSBsb2NhbEFuY2hvciA9IHBvaW50
IC0gYmxvY2tMb2NhdGlvbjsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShibG9ja0xvY2F0
aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRo
aWNrbmVzcykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJl
Y29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwgd2lk
dGgsIHN0eWxlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3
aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdF
bGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwor
fQorCit2b2lkIFJlY29yZGVyOjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2lu
dHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERy
YXdDb252ZXhQb2x5Z29uOjpjcmVhdGUobnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFz
ZWQpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpjcmVhdGUocGF0
aCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVy
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRo
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0p
OworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewor
ICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0
ZW0oRHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0OjpjcmVhdGUo
cmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdp
dGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNv
bG9yLCBvcCwgYmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShG
aWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSkpOworICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKSk7Cisg
ICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0g
PSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3JlYXRlKHJl
Y3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sK
KyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CisgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQoreworICAgIEZsb2F0UG9pbnQgYmxvY2tMb2NhdGlvbiA9IG1fY2FjaGluZyA/
IG1fYmxvY2tMb2NhdGlvbiA6IEZsb2F0UG9pbnQoKTsKKyAgICBQYXRoIHRyYW5zbGF0ZWQgPSBw
YXRoOworICAgIHRyYW5zbGF0ZWQudHJhbnNsYXRlKC1GbG9hdFNpemUoYmxvY2tMb2NhdGlvbi54
KCksIGJsb2NrTG9jYXRpb24ueSgpKSk7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VQYXRoOjpjcmVhdGUocGF0aCwgYmxv
Y2tMb2NhdGlvbikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lk
IFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0
cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit7Cisg
ICAgYXBwZW5kSXRlbShBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSgpKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCit7CisgICAgYXBwZW5kSXRlbShBcHBseUZpbGxQ
YXR0ZXJuOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJl
Y3QpOworICAgIGFwcGVuZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kSXRlbShD
bGlwT3V0OjpjcmVhdGUocmVjdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCit7CisgICAgYXBwZW5kSXRlbShDbGlwT3V0VG9QYXRoOjpjcmVhdGUocGF0
aCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSB3aW5kUnVsZSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2Vj
dChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7CisgICAgYXBwZW5kSXRlbShDbGlwUGF0aDo6Y3Jl
YXRlKHBhdGgsIHdpbmRSdWxlKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRp
YWxpYXMpCit7CisgICAgUGF0aCBwb2x5Z29uUGF0aDsKKyAgICBhZGRDb252ZXhQb2x5Z29uVG9Q
YXRoKHBvbHlnb25QYXRoLCBudW1Qb2ludHMsIHBvaW50cyk7CisgICAgY3VycmVudFN0YXRlKCku
Y2xpcEJvdW5kcy5pbnRlcnNlY3QocG9seWdvblBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKKwor
ICAgIGFwcGVuZEl0ZW0oQ2xpcENvbnZleFBvbHlnb246OmNyZWF0ZShudW1Qb2ludHMsIHBvaW50
cywgYW50aWFsaWFzKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdl
cyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4
dGVudHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAg
ICBhcHBlbmRJdGVtKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZpY2VTY2FsZUZh
Y3RvcikpOworfQorCitJdGVtJiBSZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVt
KQoreworICAgIHdpbGxBcHBlbmRJdGVtKGl0ZW0uZ2V0KCkpOworICAgIHJldHVybiBtX2Rpc3Bs
YXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZWNvcmRlcjo6dXBkYXRl
SXRlbUV4dGVudChEcmF3aW5nSXRlbSYgaXRlbSkgY29uc3QKK3sKKyAgICBpZiAoT3B0aW9uYWw8
RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhtX2dyYXBoaWNzQ29udGV4dCkpCisg
ICAgICAgIGl0ZW0uc2V0RXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcyhyZWN0LnZhbHVlKCkp
KTsKK30KKworLy8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQorc3RhdGljIGlubGluZSBm
bG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQoreworICAgIC8vIEJs
dXJyaW5nIHVzZXMgYSBHYXVzc2lhbiBmdW5jdGlvbiB3aG9zZSBzdGQuIGRldmlhdGlvbiBpcyBt
X3JhZGl1cy8yLCBhbmQgd2hpY2ggaW4gdGhlb3J5CisgICAgLy8gZXh0ZW5kcyB0byBpbmZpbml0
eS4gSW4gOC1iaXQgY29udGV4dHMsIGhvd2V2ZXIsIHJvdW5kaW5nIGNhdXNlcyB0aGUgZWZmZWN0
IHRvIGJlY29tZQorICAgIC8vIHVuZGV0ZWN0YWJsZSBhdCBhcm91bmQgMS40eCB0aGUgcmFkaXVz
LgorICAgIGNvbnN0IGZsb2F0IHJhZGl1c0V4dGVudE11bHRpcGxpZXIgPSAxLjQ7CisgICAgcmV0
dXJuIGNlaWxmKGJsdXJSYWRpdXMgKiByYWRpdXNFeHRlbnRNdWx0aXBsaWVyKTsKK30KKworRmxv
YXRSZWN0IFJlY29yZGVyOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OworICAgIGNvbnN0IENv
bnRleHRTdGF0ZSYgc3RhdGUgPSBjdXJyZW50U3RhdGUoKTsKKworICAgIEZsb2F0U2l6ZSBzaGFk
b3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93UmFkaXVzOworICAgIENvbG9yIHNoYWRvd0NvbG9y
OworICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgeworICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50
PSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CisgICAg
ICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1
cykpOworICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKKyAgICB9CisgICAgCisg
ICAgRmxvYXRSZWN0IGNsaXBwZWRFeHRlbnQgPSBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5k
cywgYm91bmRzKTsKKyAgICByZXR1cm4gc3RhdGUuY3RtLm1hcFJlY3QoY2xpcHBlZEV4dGVudCk7
Cit9CisKK2NvbnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3Rh
dGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKKyAgICByZXR1
cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKK30KKworUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVj
b3JkZXI6OmN1cnJlbnRTdGF0ZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkp
OworICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworfQorCitjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50U3RhdGUo
KS5jdG07Cit9CisKK2NvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25z
dAoreworICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOworfQorCit2b2lkIFJl
Y29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQoreworICAg
IGN0bS50cmFuc2xhdGUoeCwgeSk7CisgICAgY2xpcEJvdW5kcy5tb3ZlKC14LCAteSk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5z
KQoreworICAgIGRvdWJsZSBhbmdsZUluRGVncmVlcyA9IHJhZDJkZWcoc3RhdGljX2Nhc3Q8ZG91
YmxlPihhbmdsZUluUmFkaWFucykpOworICAgIGN0bS5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOwor
ICAgIAorICAgIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbjsKKyAgICByb3RhdGlvbi5yb3RhdGUo
YW5nbGVJbkRlZ3JlZXMpOworCisgICAgaWYgKE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52
ZXJzZSA9IHJvdGF0aW9uLmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJvdW5kcyA9IGludmVyc2Uu
dmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit2b2lkIFJlY29yZGVyOjpDb250ZXh0
U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBjdG0uc2NhbGUoc2l6
ZSk7CisgICAgY2xpcEJvdW5kcy5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWln
aHQoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQoreworICAgIGN0bSAqPSBtYXRyaXg7CisKKyAgICBp
ZiAoT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gbWF0cml4LmludmVyc2UoKSkK
KyAgICAgICAgY2xpcEJvdW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMp
OworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM4ZTAy
ZDk2N2NmOTczNjU2MWExNjVkZGI1MDA3NWRlMmNjMDZlOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXNwbGF5TGlzdFJlY29yZGVyX2gKKyNkZWZpbmUg
RGlzcGxheUxpc3RSZWNvcmRlcl9oCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIiAvLyBGb3IgSW50ZXJwb2xhdGlvblF1YWxpdHkuCisjaW5j
bHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KKyNpbmNsdWRlICJUZXh0Rmxh
Z3MuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR2x5cGhCdWZm
ZXI7CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRm9udDsKK2NsYXNzIEltYWdlOworCitzdHJ1
Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CitzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CisK
K25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdJdGVtOworCitjbGFzcyBS
ZWNvcmRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOworcHVibGljOgor
ICAgIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgflJlY29yZGVy
KCk7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHZvaWQgY2xlYXJT
aGFkb3coKTsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKKyAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOworICAgIHZvaWQgc2V0
TGluZUpvaW4oTGluZUpvaW4pOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7CisKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJs
ZW5kTW9kZSk7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
Jik7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgbGluZVdpZHRoKTsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOwor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7
CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisKKyAgICB2
b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZv
aWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2
b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9y
LCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZl
SW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSwgSW1hZ2VPcmllbnRhdGlvbik7CisgICAgdm9pZCBkcmF3UGF0dGVybihJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0
b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1h
bCk7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcyk7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMs
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcyk7CisgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSk7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywg
Y29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworICAgIHZvaWQgZHJhd1BhdGgo
Y29uc3QgUGF0aCYpOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBpbnQg
d2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29s
b3ImKTsKKworICAgIHZvaWQgc2F2ZSgpOworICAgIHZvaWQgcmVzdG9yZSgpOworCisgICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpOworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisKKyAgICB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOwor
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKKyAgICB2b2lkIGNsaXBD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFu
dGlhbGlhcyk7CisgICAgCisgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsK
KworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5zaXplKCk7
IH0KKworcHJpdmF0ZToKKyAgICBJdGVtJiBhcHBlbmRJdGVtKFJlZjxJdGVtPiYmKTsKKyAgICB2
b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKKworICAgIEZsb2F0UmVjdCBleHRlbnRG
cm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVJ
dGVtRXh0ZW50KERyYXdpbmdJdGVtJikgY29uc3Q7CisgICAgCisgICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBjdG0oKSBjb25zdDsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBj
b25zdDsKKworICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgeworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gY3RtOworICAgICAgICBGbG9hdFJlY3QgY2xpcEJvdW5kczsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlIGxhc3REcmF3aW5nU3RhdGU7CisgICAgICAgIGJvb2wgd2FzVXNlZEZvckRyYXdpbmcgeyBm
YWxzZSB9OworICAgICAgICBzaXplX3Qgc2F2ZUl0ZW1JbmRleCB7IDAgfTsKKyAgICAgICAgCisg
ICAgICAgIENvbnRleHRTdGF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRSZWN0JiBjbGlwKQorICAgICAgICAgICAgOiBjdG0odHJhbnNmb3JtKQorICAgICAg
ICAgICAgLCBjbGlwQm91bmRzKGNsaXApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yU2F2ZShzaXplX3Qgc2F2ZUluZGV4KSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBDb250ZXh0U3RhdGUgc3RhdGUoY3RtLCBjbGlwQm91
bmRzKTsKKyAgICAgICAgICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0gc3RhdGVDaGFuZ2U7CisgICAg
ICAgICAgICBzdGF0ZS5sYXN0RHJhd2luZ1N0YXRlID0gbGFzdERyYXdpbmdTdGF0ZTsKKyAgICAg
ICAgICAgIHN0YXRlLnNhdmVJdGVtSW5kZXggPSBzYXZlSW5kZXg7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KTsKKyAgICAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOworICAg
ICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgICAgICB2b2lkIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB9OworICAgIAorICAgIGNvbnN0IENvbnRl
eHRTdGF0ZSYgY3VycmVudFN0YXRlKCkgY29uc3Q7CisgICAgQ29udGV4dFN0YXRlJiBjdXJyZW50
U3RhdGUoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7CisgICAg
RGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CisKKyAgICBib29sIG1fY2FjaGluZyB7IGZhbHNl
IH07CisgICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247CisgICAgCisgICAgVmVjdG9yPENv
bnRleHRTdGF0ZSwgMzI+IG1fc3RhdGVTdGFjazsKK307CisKK30KK30KKworI2VuZGlmIC8vIERp
c3BsYXlMaXN0UmVjb3JkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQxMTQwZTU2MDEyNjEwMWMyYTlkMjBlYTk3ZGUzN2FlOWUxYjJjOTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorCisjaW5jbHVkZSAiRGlzcGxh
eUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworUmVw
bGF5ZXI6OlJlcGxheWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGlzcGxheUxp
c3QmIGRpc3BsYXlMaXN0KQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKKyAgICAs
IG1fY29udGV4dChjb250ZXh0KQoreworfQorCitSZXBsYXllcjo6flJlcGxheWVyKCkKK3sKK30K
Kwordm9pZCBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXApCit7
CisgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJcblJlcGxheWlu
ZyB3aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CisKKyAgICBzaXplX3QgbnVtSXRlbXMgPSBt
X2Rpc3BsYXlMaXN0LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1z
OyArK2kpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IG1fZGlzcGxheUxpc3QubGlzdCgpW2ldLmdl
dCgpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgImRy
YXdpbmcgICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CisgICAgICAgIGl0ZW0uYXBwbHkobV9jb250
ZXh0KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41MWFiYmFlZjAxMjhjNDEzNDFjY2FmOTVkOTg0MzcyYWNlM2ZkMmMxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlzcGxheUxpc3RSZXBsYXllcl9o
CisjZGVmaW5lIERpc3BsYXlMaXN0UmVwbGF5ZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwor
Y2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCituYW1lc3BhY2UgRGlz
cGxheUxpc3QgeworCitjbGFzcyBEaXNwbGF5TGlzdDsKKworY2xhc3MgUmVwbGF5ZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGxheWVyKTsKK3B1YmxpYzoKKyAgICBSZXBsYXllcihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBEaXNwbGF5TGlzdCYpOworICAgIH5SZXBsYXllcigpOwor
CisgICAgdm9pZCByZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCk7CisKK3ByaXZh
dGU6CisgICAgY29uc3QgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CisgICAgR3JhcGhpY3ND
b250ZXh0JiBtX2NvbnRleHQ7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBEaXNwbGF5TGlzdFJl
cGxheWVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268430</attachid>
            <date>2016-01-06 17:54:55 -0800</date>
            <delta_ts>2016-01-06 18:09:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106175423.patch</filename>
            <type>text/plain</type>
            <size>147981</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NWRmYTQ4MjAzZGE3
YzYyYjYyN2YxMGVkYWMyZDEyZmFjYjFmMC4uZDQzMmIzYWEwZDMzMmZmZDE4NzVhM2U1MjgzOTBj
MWY4NmE1Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmUwMjExYzI5NTExY2ZlNGUxNTFkZTNmOWFjMTEyOGQ5MjRlMmViYTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY1IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VM
ZWdhY3lSYWRpdXMpOworICAgIH0KKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2Rl
Q2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2luZy1tb2RlIiwgbV9z
dGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpCisgICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3RhdGUuZmlsbENvbG9yKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hh
bmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1zdHlsZSIsIG1fc3RhdGUuc3Ry
b2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1ydWxlIiwg
bV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSIs
IG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpOworCisg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hh
bmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBtX3N0YXRlLmJsZW5k
TW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFu
dGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKQorICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9udHMiLCBtX3N0YXRlLnNob3Vs
ZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0aW9uLWVuYWJsZWQiLCBtX3N0YXRl
LmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFu
Z2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZv
bnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy1pZ25vcmUtdHJhbnNm
b3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Up
CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1pbmFuY2UtbWFzayIsIG1fc3RhdGUu
ZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCit7
CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCisKIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRpbmdDb250cm9sVGludHMoZmFsc2Up
CiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDUyYjFhZDgyYjJmOGE1ODcw
OGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEyOTMzYzBmMjM3OGEzYzEzN2ZjZjYz
YWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0gQ2hhbmdlIDogdWludDMyX3Qgewor
ICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAorICAg
ICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisg
ICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwK
KyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAz
LAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEg
PDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xvckNoYW5nZSAgICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5n
ZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25DaGFu
Z2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAgICBCbGVuZE1vZGVDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBUZXh0RHJhd2luZ01vZGVD
aGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRBbnRpYWxp
YXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3LAorICAgICAgICBTaG91bGRTbW9v
dGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAorICAgICAgICBBbnRpYWxp
YXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAxIDw8IDE5LAorICAgICAgICBTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAgPSAxIDw8IDIwLAorICAgICAgICBE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIxLAorICAgICAg
ICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDIyLAorICAg
IH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5nZUZsYWdzOworCiAgICAgUmVmUHRy
PEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0
dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRp
b25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxlOwogfTsKIAorc3RydWN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSgp
ID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgICAgICwgbV9jaGFuZ2VG
bGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFncyB7IDAg
fTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0
NjJiZGViZWQ3YmI1YWQ2OTI4ZjI5OTU1MmQwMGFmNmFlOTc2NzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJM
RUQKK1dURjo6Q1N0cmluZyBEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAg
IFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7CisgICAgcmV0dXJuIHRzLnJlbGVhc2Uo
KS51dGY4KCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoKSBjb25zdAoreworICAgIGZw
cmludGYoc3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRhdGEoKSk7Cit9CisjZW5kaWYKKwor
dm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBUZXh0
U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0cyA8PCAiZGlzcGxheSBsaXN0IjsK
KworICAgIHNpemVfdCBudW1JdGVtcyA9IG1fbGlzdC5zaXplKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2Nv
cGUgc2NvcGUodHMpOworICAgICAgICB0cyA8PCBpIDw8ICIgIiA8PCBtX2xpc3RbaV0uZ2V0KCk7
CisgICAgfQorICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICB0cyA8PCAic2l6ZSBpbiBieXRlczog
IiA8PCBzaXplSW5CeXRlcygpOworICAgIHRzLmVuZEdyb3VwKCk7Cit9CisKK3NpemVfdCBEaXNw
bGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAgIHNpemVfdCByZXN1bHQgPSAwOwor
ICAgIGZvciAoYXV0byYgcmVmIDogbV9saXN0KSB7CisgICAgICAgIHN3aXRjaCAocmVmLT50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBzaXplb2YoZG93bmNhc3Q8U2F2ZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBz
aXplb2YoZG93bmNhc3Q8UmVzdG9yZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAgICAgICAgcmVzdWx0ICs9
IHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBz
aXplb2YoZG93bmNhc3Q8U2NhbGU+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICAgICAgcmVzdWx0
ICs9IHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRlPihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTZXRMaW5lQ2FwPihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURhc2g+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVKb2luOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTZXRMaW5lSm9p
bj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8
U2V0TWl0ZXJMaW1pdD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9m
KGRvd25jYXN0PENsZWFyU2hhZG93PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVv
Zihkb3duY2FzdDxDbGlwPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihk
b3duY2FzdDxDbGlwT3V0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwQ29udmV4UG9seWdvbj4ocmVmLmdl
dCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ds
eXBoczoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0dseXBocz4o
cmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3SW1h
Z2U+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2Fz
dDxEcmF3VGlsZWRJbWFnZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXN1
bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdOYXRpdmVJbWFn
ZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERy
YXdQYXR0ZXJuPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8RHJhd1JlY3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3du
Y2FzdDxEcmF3TGluZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBz
aXplb2YoZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0NvbnZleFBvbHlnb24+KHJlZi5nZXQoKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3UGF0aD4ocmVmLmdldCgpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdQ
YXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgICAgICByZXN1bHQg
Kz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KHJlZi5nZXQo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aEdyYWRpZW50OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxs
UmVjdFdpdGhHcmFkaWVudD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAgcmVzdWx0
ICs9IHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlZi5nZXQoKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0Pihy
ZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93
bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmVz
dWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAg
ICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTdHJva2VSZWN0PihyZWYuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRo
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihyZWYu
Z2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VFbGxpcHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTdHJva2VF
bGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0
PENsZWFyUmVjdD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBzaXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4ocmVmLmdldCgpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5
TGF5ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEVuZFRyYW5zcGFy
ZW5jeUxheWVyPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6
ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAg
ICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4ocmVmLmdl
dCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIGRpc3Bs
YXlMaXN0LmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjEyOGEyNTMxMGIzYzk5YmQx
ZGZkOWFlNjM0NjBjMDg2MjdlNTgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTAsMCArMSw5
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERpc3BsYXlMaXN0X2gKKyNkZWZpbmUgRGlzcGxheUxpc3RfaAorCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworY2xhc3MgVGV4dFN0cmVhbTsKKworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xh
c3MgRGlzcGxheUxpc3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERpc3BsYXlMaXN0KTsK
KyAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CitwdWJsaWM6CisgICAgRGlzcGxheUxpc3QoKSA9
IGRlZmF1bHQ7CisgICAgRGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJikgPSBkZWZhdWx0OworCisg
ICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgY29uc3QgVmVjdG9yPFJlZjxJ
dGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0KKyAgICBJdGVtJiBpdGVtQXQo
c2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9saXN0LnNpemUo
KSk7CisgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNsZWFyKCkgeyBtX2xpc3QuY2xlYXIoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAgdm9pZCByZW1vdmVJdGVtc0Zyb21J
bmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBtX2xpc3QucmVzaXplKGluZGV4KTsK
KyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdDsKKworI2lmICFkZWZpbmVk
KE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OworICAgIHZvaWQgZHVtcCgpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
SXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCisgICAgeworICAgICAgICBtX2xpc3QuYXBw
ZW5kKFdURk1vdmUoaXRlbSkpOworICAgICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5nZXQoKTsK
KyAgICB9CisKKyAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsg
fQorCisgICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0OworfTsKKworfSAvLyBEaXNwbGF5TGlz
dAorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmKTsKKworfSAvLyBXZWJDb3JlCisKK3VzaW5nIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDsKKworI2VuZGlmIC8qIERpc3BsYXlMaXN0X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWQ0MzA2OTdiZjczNjc5
MDVlMjU3MjgzMGEwM2YwMTNmYTk2Yjc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBA
IC0wLDAgKzEsMTA4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5o
IgorCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKKy8vIFNob3Vs
ZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCitzdGF0aWMgY29u
c3QgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7CisKKyNpZiAhZGVmaW5lZChOREVC
VUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNv
bnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICB0cyA8PCAqdGhpczsKKyAgICByZXR1cm4g
dHMucmVsZWFzZSgpLnV0ZjgoKTsKK30KKyNlbmRpZgorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2luZ0l0ZW0mIGl0ZW0pCit7CisgICAg
dHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJleHRlbnQgIjsKKyAgICBpZiAoaXRlbS5leHRl
bnRLbm93bigpKQorICAgICAgICB0cyA8PCBpdGVtLmV4dGVudCgpOworICAgIGVsc2UKKyAgICAg
ICAgdHMgPDwgInVua25vd24iOworICAgIAorICAgIHRzLmVuZEdyb3VwKCk7CisgICAgcmV0dXJu
IHRzOworfQorCit2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0ZW0pCit7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3JlSW5kZXgoKSk7CisgICAgcmV0dXJu
IHRzOworfQorCit2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK3sKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwordm9pZCBUcmFuc2xhdGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnRyYW5z
bGF0ZShtX3gsIG1feSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJ4IiwgaXRlbS54KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKKwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYg
aXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKKwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVt
KQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOworCisgICAg
cmV0dXJuIHRzOworfQorCitDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgOiBJdGVtKEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTSkKKyAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKK3sKK30KKwordm9pZCBDb25jYXRl
bmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQorewor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7CisKKyAgICByZXR1
cm4gdHM7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKK3sKKyAgICBtX3N0YXRlLmFwcGx5KGNvbnRleHQpOworfQorCit2b2lkIFNldFN0
YXRlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit7CisgICAgbV9zdGF0ZS5h
Y2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCit7CisgICAgdHMgPDwg
c3RhdGUuc3RhdGUoKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0TGluZUNhcDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGlu
ZUNhcChtX2xpbmVDYXApOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKK3sKKyAgICB0cy5kdW1wUHJv
cGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOworICAgIHJldHVybiB0czsKK30K
Kwordm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFy
cmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1v
ZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9p
ZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Cit9CisKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpv
aW4pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9p
bigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1p
dChtX21pdGVyTGltaXQpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKK3sKKyAgICB0cy5k
dW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKK30KKwordm9p
ZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29u
dGV4dC5jbGlwKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgQ2xpcE91dDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xp
cE91dChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoInJl
Y3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIENsaXBPdXRUb1Bh
dGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0
LmNsaXBPdXQobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmKQoreworLy8gICAgdHMuZHVtcFByb3Bl
cnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBDbGlwUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcFBhdGgobV9wYXRoLCBtX3dpbmRSdWxlKTsK
K30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IENsaXBQYXRoJiBpdGVtKQoreworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5w
YXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lu
ZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0NsaXBDb252
ZXhQb2x5Z29uOjpDbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0
IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKKyAgICA6IEl0ZW0oSXRlbVR5
cGU6OkNsaXBDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRpYWxpYXMoYW50aWFsaWFzZWQpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlBvaW50czsgKytpKQorICAgICAg
ICBtX3BvaW50cy5hcHBlbmQocG9pbnRzW2ldKTsKK30KKwordm9pZCBDbGlwQ29udmV4UG9seWdv
bjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQu
Y2xpcENvbnZleFBvbHlnb24obV9wb2ludHMuc2l6ZSgpLCBtX3BvaW50cy5kYXRhKCksIG1fYW50
aWFsaWFzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENsaXBDb252ZXhQb2x5Z29uJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0
eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxp
YXMiLCBpdGVtLmFudGlhbGlhcygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdHbHlwaHM6
OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKKyAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQorICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZv
bnQpKQorICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgLCBtX2xvY2Fs
QW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICwgbV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01vZGUp
Cit7CisgICAgbV9nbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CisgICAgbV9h
ZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBtX2dseXBocy51bmNoZWNrZWRBcHBl
bmQoZ2x5cGhzW2ldKTsKKyAgICAgICAgbV9hZHZhbmNlcy51bmNoZWNrZWRBcHBlbmQoYWR2YW5j
ZXNbaV0pOworICAgIH0KKyAgICBjb21wdXRlQm91bmRzKCk7Cit9CisKK2lubGluZSBHbHlwaEJ1
ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3QKK3sKKyAgICBHbHlw
aEJ1ZmZlciByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2x5cGhzLnNp
emUoKTsgKytpKQorICAgICAgICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLCAmbV9mb250LmdldCgp
LCBtX2FkdmFuY2VzW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIERyYXdHbHlw
aHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxl
bWVudC4KKyAgICBVTlVTRURfUEFSQU0obV9zbW9vdGhpbmdNb2RlKTsKK30KKwordm9pZCBEcmF3
R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNu
J3QgYWN0dWFsbHkgdGFrZSB0aGUgZXh0ZW50cyBvZiB0aGUgZ2x5cGhzIGludG8gY29uc2lkZXJh
dGlvbi4gSXQgYXNzdW1lcyB0aGF0CisgICAgLy8gdGhlIGdseXBoIGxpZXMgZW50aXJlbHkgd2l0
aGluIGl0cyAoYXNjZW50K2Rlc2NlbnQgeCBhZHZhbmNlKSByZWN0LgorICAgIGZsb2F0IGFzY2Vu
dCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpOworICAgIGZsb2F0IGRlc2Nl
bnQgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXREZXNjZW50KCk7CisgICAgRmxvYXRQb2lu
dCBjdXJyZW50ID0gdG9GbG9hdFBvaW50KGxvY2FsQW5jaG9yKCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgR2x5cGhCdWZmZXJB
ZHZhbmNlIGFkdmFuY2UgPSBtX2FkdmFuY2VzW2ldOworICAgICAgICBGbG9hdFJlY3QgZ2x5cGhS
ZWN0ID0gRmxvYXRSZWN0KGN1cnJlbnQueCgpLCBjdXJyZW50LnkoKSAtIGFzY2VudCwgYWR2YW5j
ZS53aWR0aCgpLCBhc2NlbnQgKyBkZXNjZW50KTsKKyAgICAgICAgbV9ib3VuZHMudW5pdGUoZ2x5
cGhSZWN0KTsKKworICAgICAgICBjdXJyZW50ICs9IEZsb2F0U2l6ZShhZHZhbmNlKTsKKyAgICB9
Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0dseXBoczo6bG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBt
X2JvdW5kczsKKyAgICBsb2NhbEJvdW5kcy5tb3ZlKG1fYmxvY2tMb2NhdGlvbi54KCksIG1fYmxv
Y2tMb2NhdGlvbi55KCkpOworICAgIHJldHVybiBsb2NhbEJvdW5kczsKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0
ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
KyAgICAvLyBGSVhNRTogZHVtcCBtb3JlIHN0dWZmLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxv
Y2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgiYW5jaG9yLXBvaW50IiwgaXRlbS5hbmNob3JQb2ludCgpKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoImxlbmd0aCIsIGl0ZW0uZ2x5cGhzKCkuc2l6ZSgpKTsKKworICAgIHJldHVybiB0czsKK30K
KworRHJhd0ltYWdlOjpEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdJbWFnZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9pbWFnZVBhaW50aW5n
T3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKK30KKwordm9pZCBEcmF3SW1hZ2U6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdJ
bWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV9pbWFnZVBhaW50
aW5nT3B0aW9ucyk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3SW1hZ2UmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwg
aXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5z
b3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0
aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKworRHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZElt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0
aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZSkKKyAgICAs
IG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICwg
bV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAsIG1fc3Bh
Y2luZyhzcGFjaW5nKQorICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5n
T3B0aW9ucykKK3sKK30KKwordm9pZCBEcmF3VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFn
ZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNpemUsIG1fc3BhY2luZywg
bV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKK3sKKyAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291
cmNlLXBvaW50IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJl
Y3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidGlsZS1zaXpl
IiwgaXRlbS50aWxlU2l6ZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBpdGVt
LnNwYWNpbmcoKSk7CisgICAgcmV0dXJuIHRzOworfQorCitEcmF3VGlsZWRTY2FsZWRJbWFnZTo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2Nh
bGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpCisgICAgLCBtX2ltYWdl
KGltYWdlKQorICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAsIG1fc291cmNl
KHNvdXJjZSkKKyAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2FsZUZhY3RvcikKKyAgICAs
IG1faFJ1bGUoaFJ1bGUpCisgICAgLCBtX3ZSdWxlKHZSdWxlKQorICAgICwgbV9pbWFnZVBhaW50
aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKK30KKwordm9pZCBEcmF3VGlsZWRT
Y2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9z
b3VyY2UsIG1fdGlsZVNjYWxlRmFjdG9yLCBtX2hSdWxlLCBtX3ZSdWxlLCBtX2ltYWdlUGFpbnRp
bmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdUaWxlZFNjYWxlZEltYWdlJiBpdGVtKQoreworICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVj
dCIsIGl0ZW0uc291cmNlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRl
bS5kZXN0aW5hdGlvbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdOYXRpdmVJbWFnZTo6
RHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIElt
YWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd05hdGl2ZUltYWdlKQorICAgICwgbV9pbWFnZVB0cihpbWFnZVB0cikKKyAgICAsIG1faW1h
Z2VTaXplKGltYWdlU2l6ZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCisgICAgLCBt
X3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAsIG1fb3Aob3ApCisgICAgLCBtX2JsZW5kTW9kZShibGVu
ZE1vZGUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQoreworfQorCit2b2lkIERy
YXdOYXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
I2lmIFVTRShDRykKKyAgICBhdXRvIGltYWdlUHRyID0gbV9pbWFnZVB0ci5nZXQoKTsKKyNlbmRp
ZgorICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlUHRyLCBtX2ltYWdlU2l6ZSwgbV9k
ZXN0aW5hdGlvbiwgbV9zcmNSZWN0LCBtX29wLCBtX2JsZW5kTW9kZSwgbV9vcmllbnRhdGlvbik7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
RHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICAvLyBGSVhNRTogZHVtcCBtb3JlIHN0dWZmLgorICAg
IHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJu
IHRzOworfQorCitEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQorICAg
ICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fcGF0dGVyblRyYW5zZm9ybShwYXR0ZXJuVHJhbnNm
b3JtKQorICAgICwgbV90aWxlUmVjdCh0aWxlUmVjdCkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVz
dFJlY3QpCisgICAgLCBtX3BoYXNlKHBoYXNlKQorICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisg
ICAgLCBtX29wKG9wKQorICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQoreworfQorCit2b2lk
IERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5kcmF3UGF0dGVybihtX2ltYWdlLmdldCgpLCBtX3RpbGVSZWN0LCBtX3BhdHRl
cm5UcmFuc2Zvcm0sIG1fcGhhc2UsIG1fc3BhY2luZywgbV9vcCwgbV9kZXN0aW5hdGlvbiwgbV9i
bGVuZE1vZGUpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwg
aXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInBhdHRlcm4tdHJhbnNmb3JtIiwg
aXRlbS5wYXR0ZXJuVHJhbnNmb3JtKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidGlsZS1yZWN0
IiwgaXRlbS50aWxlUmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0
ZW0uZGVzdFJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwaGFzZSIsIGl0ZW0ucGhhc2Uo
KSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzcGFjaW5nIiwgaXRlbS5zcGFjaW5nKCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBEcmF3UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd1JlY3QobV9yZWN0LCBtX2JvcmRlclRo
aWNrbmVzcyk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3UmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0u
cmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJvcmRlci10aGlja25lc3MiLCBpdGVtLmJv
cmRlclRoaWNrbmVzcygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVj
dD4gRHJhd0xpbmU6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7
CisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBib3VuZHMuZml0VG9Qb2ludHMobV9wb2ludDEs
IG1fcG9pbnQyKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lkIERyYXdMaW5lOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGlu
ZShtX3BvaW50MSwgbV9wb2ludDIpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmUmIGl0ZW0pCit7CisgICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InBvaW50LTEiLCBpdGVtLnBvaW50MSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTIi
LCBpdGVtLnBvaW50MigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0xpbmVzRm9y
VGV4dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRl
eHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3dpZHRocywgbV9wcmludGluZywgbV9kb3Vi
bGVMaW5lcyk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZhbHVlIGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0
IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9y
VGV4dCgpIHJldHVybnMuCisKKyAgICBpZiAoIW1fd2lkdGhzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IHJlc3VsdChwb2ludCgpLCBGbG9hdFNp
emUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9rZVdpZHRoKSk7CisgICAgcmVzdWx0LmluZmxhdGUo
MSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNuYXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJm
ZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhlIENUTSBpbnRvIGFjY291bnQuCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsb2Nr
LWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0aW9uKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
bG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFuY2hvcigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InBvaW50IiwgaXRlbS5wb2ludCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0
ZW0uZG91YmxlTGluZXMoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aHMiLCBpdGVtLndp
ZHRocygpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImlzLXByaW50aW5nIiwgaXRlbS5pc1ByaW50
aW5nKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygp
KTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcihtX3BvaW50LCBtX3dpZHRoLCBtX3N0eWxlKTsKK30KKwor
T3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24g
bmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKCkgcmV0dXJucy4KKworICAgIEZs
b2F0UmVjdCByZXN1bHQobV9wb2ludCwgRmxvYXRTaXplKG1fd2lkdGgsIGNNaXNzcGVsbGluZ0xp
bmVUaGlja25lc3MpKTsKKyAgICByZXN1bHQuaW5mbGF0ZShjTWlzc3BlbGxpbmdMaW5lVGhpY2tu
ZXNzKTsgLy8gQWNjb3VudCBmb3IgIm1pc3NwZWxsaW5nIGRvdCIgc25hcHBpbmcuCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXImIGl0ZW0pCit7CisgICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRo
IiwgaXRlbS53aWR0aCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0VsbGlwc2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRy
YXdFbGxpcHNlKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJv
cGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCisvLyBGSVhN
RTogc2hhcmUgdGhpcyBjb2RlLgordm9pZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmIHBh
dGgsIHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBB
U1NFUlQobnVtUG9pbnRzID4gMCk7CisKKyAgICBwYXRoLm1vdmVUbyhwb2ludHNbMF0pOworICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyArK2kpCisgICAgICAgIHBhdGguYWRk
TGluZVRvKHBvaW50c1tpXSk7CisgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKK30KKworRHJhd0Nv
bnZleFBvbHlnb246OkRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29u
c3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQorICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkRyYXdDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRpYWxpYXNlZChhbnRp
YWxpYXNlZCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mUG9pbnRzOyAr
K2kpCisgICAgICAgIG1fcG9pbnRzLmFwcGVuZChwb2ludHNbaV0pOworfQorCitPcHRpb25hbDxG
bG9hdFJlY3Q+IERyYXdDb252ZXhQb2x5Z29uOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgZm9yIChhdXRvJiBw
b2ludCA6IG1fcG9pbnRzKQorICAgICAgICByZXN1bHQuZXh0ZW5kKHBvaW50KTsKKyAgICByZXN1
bHQuaW5mbGF0ZShtX2FudGlhbGlhc2VkID8gMSA6IDApOyAvLyBBY2NvdW50IGZvciBhbnRpYWxp
YXNpbmcKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIERyYXdDb252ZXhQb2x5Z29uOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3
Q29udmV4UG9seWdvbihtX3BvaW50cy5zaXplKCksIG1fcG9pbnRzLmRhdGEoKSwgbV9hbnRpYWxp
YXNlZCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3Q29udmV4UG9seWdvbiYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnRz
IiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZCIsIGl0
ZW0uYW50aWFsaWFzZWQoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIERyYXdQYXRoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3
UGF0aChtX3BhdGgpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKy8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIs
IGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KKyAgICByZXR1
cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0ZvY3VzUmluZ1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9wYXRoLCBt
X3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJh
d0ZvY3VzUmluZ1BhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Cisg
ICAgcmVzdWx0LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgi
LCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgdHMu
ZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwg
aXRlbS5jb2xvcigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0ZvY3VzUmluZ1Jl
Y3RzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4
dC5kcmF3Rm9jdXNSaW5nKG1fcmVjdHMsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKK30K
KworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAg
ICBmb3IgKGF1dG8mIHJlY3QgOiBtX3JlY3RzKQorICAgICAgICByZXN1bHQudW5pdGUocmVjdCk7
CisgICAgcmVzdWx0LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dHMiLCBpdGVtLnJlY3RzKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndp
ZHRoKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQoKSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CisgICAgcmV0dXJuIHRz
OworfQorCit2b2lkIEZpbGxSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3QmIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQor
Cit2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IpOworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJl
Y3RXaXRoQ29sb3ImIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CisgICAgcmV0dXJu
IHRzOworfQorCit2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fZ3Jh
ZGllbnQuZ2V0KCkpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCit7CisgICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICAvLyBGSVhNRTogbG9n
IGdyYWRpZW50LgorICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3Qs
IG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2RlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkK
K3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0
ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOworICAgIHJldHVybiB0czsKK30K
Kwordm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1f
YmxlbmRNb2RlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0
ZW0uY29sb3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVu
ZE1vZGUoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4
dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1fcm91bmRlZEhvbGVSZWN0LCBtX2Nv
bG9yKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJy
ZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicm91bmRlZC1ob2xlLXJl
Y3QiLCBpdGVtLnJvdW5kZWRIb2xlUmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9y
IiwgaXRlbS5jb2xvcigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFBhdGg6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxQ
YXRoKG1fcGF0aCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwg
aXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30K
Kwordm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuZmlsbEVsbGlwc2UobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVt
KQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHJldHVybiB0czsK
K30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7
CisgICAgYm91bmRzLmV4cGFuZChtX2xpbmVXaWR0aCwgbV9saW5lV2lkdGgpOworICAgIHJldHVy
biBib3VuZHM7Cit9CisKK3ZvaWQgU3Ryb2tlUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc3Ryb2tlUmVjdChtX3JlY3QsIG1fbGluZVdp
ZHRoKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFN0cm9rZVJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
RHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJl
Y3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgo
KSk7CisgICAgcmV0dXJuIHRzOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IFN0cm9rZVBhdGg6
OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIHN0cm9rZSB0aGlja25lc3MgaW50byBhY2NvdW50IGNv
cnJlY3RseSwgdmlhIENHUGF0aEJ5U3Ryb2tpbmdQYXRoKCkuCisgICAgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsKKworICAgIEZsb2F0UmVjdCBib3Vu
ZHMgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7CisgICAgYm91bmRzLmV4cGFuZChzdHJva2VUaGlj
a25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgYm91bmRzLm1vdmVCeShtX2Jsb2NrTG9jYXRp
b24pOworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSB0
b0Zsb2F0U2l6ZShtX2Jsb2NrTG9jYXRpb24pOworICAgIG1fcGF0aC50cmFuc2xhdGUob2Zmc2V0
KTsKKyAgICBjb250ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsKKyAgICBtX3BhdGgudHJhbnNsYXRl
KC1vZmZzZXQpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9j
YXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBh
dGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBwYXRoIGxvZ2dpbmcuCisgICAgcmV0dXJuIHRz
OworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IFN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBmbG9hdCBzdHJva2VU
aGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOworCisgICAgRmxvYXRSZWN0IGJv
dW5kcyA9IG1fcmVjdDsKKyAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tl
VGhpY2tuZXNzKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lkIFN0cm9rZUVsbGlwc2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnN0
cm9rZUVsbGlwc2UobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUVsbGlwc2UmIGl0ZW0pCit7CisgICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIENsZWFy
UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRl
eHQuY2xlYXJSZWN0KG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9vcGFjaXR5KTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXImIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoIm9wYWNpdHkiLCBpdGVtLm9w
YWNpdHkoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEVuZFRyYW5zcGFyZW5jeUxheWVy
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOworfQorCit2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuYXBwbHlT
dHJva2VQYXR0ZXJuKCk7Cit9CisKK3ZvaWQgQXBwbHlGaWxsUGF0dGVybjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuYXBwbHlGaWxsUGF0dGVy
bigpOworfQorCit2b2lkIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IobV9zY2FsZUZhY3Rvcik7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBBcHBseURldmljZVNjYWxlRmFjdG9yJiBpdGVtKQoreworICAg
IHRzLmR1bXBQcm9wZXJ0eSgic2NhbGUtZmFjdG9yIiwgaXRlbS5zY2FsZUZhY3RvcigpKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6IHRzIDw8ICJyZXN0b3JlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOiB0cyA8PCAidHJhbnNsYXRlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOiB0cyA8PCAicm90YXRlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2Nh
bGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRl
Q1RNOiB0cyA8PCAiY29uY2F0ZW50YXRlLWN0bSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0YXRlOiB0cyA8PCAic2V0LXN0YXRlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUNhcDogdHMgPDwgInNldC1saW5lLWNhcCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVEYXNoOiB0cyA8PCAic2V0LWxpbmUtZGFzaCI7IGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVKb2luOiB0cyA8PCAic2V0LWxpbmUtam9pbiI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHRzIDw8ICJzZXQtbWl0ZXItbGltaXQiOyBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOiB0cyA8PCAiY2xpcCI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHRzIDw8ICJjbGlwLW91dCI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHRzIDw8ICJjbGlwLW91dC10by1wYXRoIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHRzIDw8ICJjbGlwLXBhdGgiOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9seWdvbjogdHMgPDwgImNsaXAtY29u
dmV4LXBvbHlnb24iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB0cyA8
PCAiZHJhdy1nbHlwaHMiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6IHRz
IDw8ICJkcmF3LWltYWdlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1h
Z2U6IHRzIDw8ICJkcmF3LXRpbGVkLWltYWdlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHRzIDw8ICJkcmF3LXRpbGVkLXNjYWxlZC1pbWFnZSI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTogdHMgPDwgImRyYXctbmF0
aXZlLWltYWdlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHRzIDw8
ICJkcmF3LXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogdHMg
PDwgImRyYXctcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB0cyA8
PCAiZHJhdy1saW5lIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4
dDogdHMgPDwgImRyYXctbGluZXMtZm9yLXRleHQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1mb3ItZG9jdW1l
bnQtbWFya2VyIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHRzIDw8
ICJkcmF3LWVsbGlwc2UiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9s
eWdvbjogdHMgPDwgImRyYXctY29udmV4LXBvbGdvbiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdQYXRoOiB0cyA8PCAiZHJhdy1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmctcGF0aCI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czogdHMgPDwgImRyYXctZm9j
dXMtcmluZy1yZWN0cyI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8
PCAiZmlsbC1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQi
OyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJm
aWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3Vu
ZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3Vu
ZGVkLWhvbGUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogdHMgPDwgImZp
bGwtcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB0cyA8PCAi
ZmlsbC1lbGxpcHNlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMg
PDwgInN0cm9rZS1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDog
dHMgPDwgInN0cm9rZS1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxs
aXBzZTogdHMgPDwgInN0cm9rZS1lbGxpcHNlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJSZWN0OiB0cyA8PCAiY2xlYXItcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHRzIDw8ICJiZWdpbi10cmFuc3BhcmVuY3ktbGF5ZXIi
OyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogdHMgPDwg
ImVuZC10cmFuc3BhcmVuY3ktbGF5ZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm46IHRzIDw8ICJhcHBseS1zdHJva2UtcGF0dGVybiI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRzIDw8ICJhcHBseS1maWxsLXBhdHRl
cm4iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB0
cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93IjsgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbSYgaXRlbSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRz
KTsKKyAgICB0cyA8PCBpdGVtLnR5cGUoKTsKKworICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8g
d2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCisg
ICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PFNhdmU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Um90YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNl
dFN0YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUNhcDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldE1pdGVyTGltaXQ+KGl0ZW0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxD
bGlwPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PENsaXBPdXRUb1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9seWdvbjoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Q2xpcENvbnZleFBvbHlnb24+KGl0ZW0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICB0cyA8PCBkb3duY2Fz
dDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERy
YXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4oaXRl
bSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOgor
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0NvbnZleFBvbHlnb246CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PERyYXdDb252ZXhQb2x5Z29uPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdGg6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXRoPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Rmls
bFJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0
ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAgIHRzIDw8
IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxQYXRoPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVs
bGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0
ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgor
ICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2Fz
dDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpC
ZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxCZWdpblRyYW5z
cGFyZW5jeUxheWVyPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworCisgICAgLy8gSXRlbXMgd2l0
aCBubyBhZGRpdGlvbmFsIGRhdGEuCisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAgICBj
YXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiB0czsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWNlMmRjM2QyMDdhNWRhYzljNDcyZWE3OTAwMjFjNDdhMDkyNjA4NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTAsMCArMSwxNDIyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlzcGxheUxpc3RJdGVt
c19oCisjZGVmaW5lIERpc3BsYXlMaXN0SXRlbXNfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIK
KyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorCisjaWYgVVNFKENHKQorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0U3RyZWFtOworc3RydWN0IEltYWdlUGFpbnRp
bmdPcHRpb25zOworCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitlbnVtIGNsYXNzIEl0ZW1U
eXBlIHsKKyAgICBTYXZlLAorICAgIFJlc3RvcmUsCisgICAgVHJhbnNsYXRlLAorICAgIFJvdGF0
ZSwKKyAgICBTY2FsZSwKKyAgICBDb25jYXRlbmF0ZUNUTSwKKyAgICBTZXRTdGF0ZSwKKyAgICBT
ZXRMaW5lQ2FwLAorICAgIFNldExpbmVEYXNoLAorICAgIFNldExpbmVKb2luLAorICAgIFNldE1p
dGVyTGltaXQsCisgICAgQ2xlYXJTaGFkb3csCisgICAgQ2xpcCwKKyAgICBDbGlwT3V0LAorICAg
IENsaXBPdXRUb1BhdGgsCisgICAgQ2xpcFBhdGgsCisgICAgQ2xpcENvbnZleFBvbHlnb24sCisg
ICAgRHJhd0dseXBocywKKyAgICBEcmF3SW1hZ2UsCisgICAgRHJhd1RpbGVkSW1hZ2UsCisgICAg
RHJhd1RpbGVkU2NhbGVkSW1hZ2UsCisgICAgRHJhd05hdGl2ZUltYWdlLAorICAgIERyYXdQYXR0
ZXJuLAorICAgIERyYXdSZWN0LAorICAgIERyYXdMaW5lLAorICAgIERyYXdMaW5lc0ZvclRleHQs
CisgICAgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciwKKyAgICBEcmF3RWxsaXBzZSwKKyAgICBE
cmF3Q29udmV4UG9seWdvbiwKKyAgICBEcmF3UGF0aCwKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aCwK
KyAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRmlsbFJlY3QsCisgICAgRmlsbFJlY3RXaXRo
Q29sb3IsCisgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCisgICAgRmlsbENvbXBvc2l0ZWRSZWN0
LAorICAgIEZpbGxSb3VuZGVkUmVjdCwKKyAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKKyAg
ICBGaWxsUGF0aCwKKyAgICBGaWxsRWxsaXBzZSwKKyAgICBTdHJva2VSZWN0LAorICAgIFN0cm9r
ZVBhdGgsCisgICAgU3Ryb2tlRWxsaXBzZSwKKyAgICBDbGVhclJlY3QsCisgICAgQmVnaW5UcmFu
c3BhcmVuY3lMYXllciwKKyAgICBFbmRUcmFuc3BhcmVuY3lMYXllciwKKyAgICBBcHBseVN0cm9r
ZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KKyAgICBB
cHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0u
CisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKK307CisKK2NsYXNzIEl0ZW0gOiBwdWJsaWMg
UmVmQ291bnRlZDxJdGVtPiB7CitwdWJsaWM6CisgICAgSXRlbSgpID0gZGVsZXRlOworCisgICAg
SXRlbShJdGVtVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5JdGVtKCkgeyB9CisKKyAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGU7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0Rpc3BsYXlMaXN0SXRlbSA9IHRydWU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNE
cmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAgLy8gQSBzdGF0
ZSBpdGVtIGlzIG9uZSBwcmVzZXJ2ZWQgYnkgU2F2ZS9SZXN0b3JlLgorICAgIGJvb2wgaXNTdGF0
ZUl0ZW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzU3RhdGVJdGVtVHlwZShtX3R5
cGUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzU3RhdGVJdGVtVHlwZShJdGVtVHlwZSBp
dGVtVHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaXRlbVR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBJdGVtVHlwZTo6IFRyYW5zbGF0ZToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFJvdGF0ZToK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNjYWxlOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjog
Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRTdGF0ZToKKyAgICAg
ICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVDYXA6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBT
ZXRMaW5lRGFzaDoKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVKb2luOgorICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjogU2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
IENsZWFyU2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAg
IFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgSXRlbVR5cGUgbV90eXBlOworfTsKKworY2xhc3MgRHJhd2luZ0l0ZW0gOiBwdWJsaWMgSXRl
bSB7CitwdWJsaWM6CisgICAgRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKKyAgICAgICAgOiBJ
dGVtKHR5cGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IEZsb2F0
UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KKyAgICBjb25zdCBGbG9hdFJlY3QmIGV4dGVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KKworICAgIGJvb2wgZXh0ZW50S25v
d24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7IH0KKworICAg
IC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBsb2NhbCBjb29y
ZGluYXRlcy4KKyAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFuc2Zvcm0sIHNo
YWRvdyBldGMgaW4gdGhlIHN0YXRlLgorICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBOdWxsb3B0
OyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fZXh0ZW50OyAvLyBJ
biBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93cyBhbmQgdHJhbnNmb3JtcyBpbnRvIGFj
Y291bnQuCit9OworCitjbGFzcyBTYXZlIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNhdmUpOworICAgIH0KKworICAgIC8vIEluZGV4IGluIHRoZSBkaXNwbGF5IGxpc3Qgb2Yg
dGhlIGNvcnJlc3BvbmRpbmcgUmVzdG9yZSBpdGVtLiAwIGlmIHVubWF0Y2hlZC4KKyAgICBzaXpl
X3QgcmVzdG9yZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9yZXN0b3JlSW5kZXg7IH0KKyAgICB2
b2lkIHNldFJlc3RvcmVJbmRleChzaXplX3QgaW5kZXgpIHsgbV9yZXN0b3JlSW5kZXggPSBpbmRl
eDsgfQorCitwcml2YXRlOgorICAgIFNhdmUoKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNh
dmUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBzaXplX3QgbV9yZXN0b3JlSW5kZXggeyAw
IH07Cit9OworCitjbGFzcyBSZXN0b3JlIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UmVzdG9yZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFJlc3RvcmUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN0b3JlKCkKKyAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpSZXN0b3JlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCitjbGFz
cyBUcmFuc2xhdGUgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxUcmFu
c2xhdGU+IGNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVHJhbnNsYXRlKHgsIHkpKTsKKyAgICB9CisKKyAgICBmbG9hdCB4KCkgY29u
c3QgeyByZXR1cm4gbV94OyB9CisgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQor
Citwcml2YXRlOgorICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQorICAgICAgICA6IEl0
ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKKyAgICAgICAgLCBtX3goeCkKKyAgICAgICAgLCBtX3ko
eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV94OworICAgIGZsb2F0IG1feTsKK307
CisKK2NsYXNzIFJvdGF0ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFJvdGF0ZT4gY3JlYXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUm90YXRlKGFuZ2xlSW5SYWRpYW5zKSk7CisgICAgfQorCisgICAg
ZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9CisKK3ByaXZhdGU6CisgICAg
Um90YXRlKGZsb2F0IGFuZ2xlKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlJvdGF0ZSkKKyAg
ICAgICAgLCBtX2FuZ2xlKGFuZ2xlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX2Fu
Z2xlOyAvLyBJbiByYWRpYW5zLgorfTsKKworY2xhc3MgU2NhbGUgOiBwdWJsaWMgSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxTY2FsZT4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjYWxlKHNpemUpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorCitwcml2YXRlOgorICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpTY2FsZSkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgRmxvYXRTaXplIG1fc2l6ZTsKK307CisKK2NsYXNzIENvbmNhdGVu
YXRlQ1RNIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q29uY2F0ZW5h
dGVDVE0+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbmNhdGVuYXRlQ1RNKG1hdHJpeCkpOworICAgIH0K
KworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2Zvcm07IH0KKworcHJpdmF0ZToKKyAgICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKK307
CisKK2NsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0U3RhdGUoc3RhdGUsIGZsYWdzKSk7CisgICAgfQor
ICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
KworICAgIHZvaWQgYWNjdW11bGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OworCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlTdGF0ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
KworICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoVGV4dFN0cmVhbSYsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpOworcHJpdmF0ZToKKyAgICBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQorICAgICAgICAsIG1fc3RhdGUoc3RhdGUs
IGZsYWdzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSBtX3N0YXRlOworfTsKKworY2xhc3MgU2V0TGluZUNhcCA6IHB1YmxpYyBJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxpbmVDYXApCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lQ2FwKGxpbmVDYXApKTsK
KyAgICB9CisgICAgCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5l
Q2FwOyB9CisKK3ByaXZhdGU6CisgICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCisgICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkKKyAgICAgICAgLCBtX2xpbmVDYXAobGlu
ZUNhcCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTGluZUNhcCBtX2xpbmVDYXA7Cit9OworCitj
bGFzcyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRh
c2hPZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lRGFz
aChkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKKyAgICB9CisKKyAgICBjb25zdCBEYXNoQXJyYXkm
IGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9CisgICAgZmxvYXQgZGFz
aE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQorCitwcml2YXRlOgorICAg
IFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0
KQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVEYXNoKQorICAgICAgICAsIG1fZGFz
aEFycmF5KGRhc2hBcnJheSkKKyAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgRGFzaEFycmF5IG1fZGFzaEFycmF5OworICAgIGZsb2F0IG1f
ZGFzaE9mZnNldDsKK307CisKK2NsYXNzIFNldExpbmVKb2luIDogcHVibGljIEl0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8U2V0TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9p
bikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVKb2luKGxpbmVK
b2luKSk7CisgICAgfQorICAgIAorICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lSm9pbjsgfQorCitwcml2YXRlOgorICAgIFNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVKb2luKQorICAgICAgICAs
IG1fbGluZUpvaW4obGluZUpvaW4pCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIExpbmVKb2luIG1f
bGluZUpvaW47Cit9OworCitjbGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGljIEl0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1pdD4gY3JlYXRlKGZsb2F0IGxpbWl0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TWl0ZXJMaW1pdChsaW1pdCkp
OworICAgIH0KKworICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVy
TGltaXQ7IH0KKworcHJpdmF0ZToKKyAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQp
CisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCkKKyAgICAgICAgLCBtX21p
dGVyTGltaXQobWl0ZXJMaW1pdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV9taXRl
ckxpbWl0OworfTsKKworY2xhc3MgQ2xlYXJTaGFkb3cgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxDbGVhclNoYWRvdz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENsZWFyU2hhZG93KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q2xlYXJTaGFkb3coKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsZWFyU2hhZG93KQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Cit9OworCisvLyBGSVhNRTogdHJlYXQgYXMgRHJhd2luZ0l0ZW0/CitjbGFz
cyBDbGlwIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcD4gY3Jl
YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENsaXAocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcCkKKyAgICAgICAgLCBtX3JlY3Qo
cmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2Ns
YXNzIENsaXBPdXQgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGlw
T3V0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2xpcE91dChyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBDbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0KQor
ICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3Qg
bV9yZWN0OworfTsKKworY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dFRvUGF0aChwYXRo
KSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
aDsgfQorCitwcml2YXRlOgorICAgIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAg
ICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoKQorICAgICAgICAsIG1fcGF0aChw
YXRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBQYXRoIG1fcGF0aDsKK307CisKK2NsYXNzIENs
aXBQYXRoIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+
IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKSk7CisgICAg
fQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAg
IFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aW5kUnVsZTsgfQorCitwcml2
YXRlOgorICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQor
ICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRo
KQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IFBhdGggbV9wYXRoOworICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7Cit9OworCitjbGFzcyBDbGlw
Q29udmV4UG9seWdvbiA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENs
aXBDb252ZXhQb2x5Z29uPiBjcmVhdGUoc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGlwQ29udmV4UG9seWdvbihudW1iZXJPZlBvaW50cywgcG9pbnRzLCBh
bnRpYWxpYXNlZCkpOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgcG9p
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludHM7IH0KKyAgICBib29sIGFudGlhbGlhcygpIGNv
bnN0IHsgcmV0dXJuIG1fYW50aWFsaWFzOyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcENvbnZleFBv
bHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRp
YWxpYXNlZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gbV9wb2ludHM7CisgICAgYm9v
bCBtX2FudGlhbGlhczsKK307CisKK2NsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJs
b2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBibG9ja0xvY2F0aW9uLCBs
b2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb247IH0KKyAg
ICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbikg
eyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9CisKKyAgICBjb25zdCBGbG9hdFNp
emUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQorCisgICAg
RmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbiAr
IG1fbG9jYWxBbmNob3I7IH0KKworICAgIGNvbnN0IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAx
Mjg+JiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczsgfQorCitwcml2YXRlOgorICAg
IERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxv
Y2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpOworCisgICAgdm9pZCBjb21wdXRlQm91bmRzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBHbHlwaEJ1ZmZlciBnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3Q7
CisKKyAgICBSZWY8Rm9udD4gbV9mb250OworICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAx
Mjg+IG1fZ2x5cGhzOworICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4gbV9hZHZh
bmNlczsKKyAgICBGbG9hdFJlY3QgbV9ib3VuZHM7CisgICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9j
YXRpb247CisgICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7CisgICAgRm9udFNtb290aGluZ01v
ZGUgbV9zbW9vdGhpbmdNb2RlOworfTsKKworY2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdJbWFnZT4gY3JlYXRlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZShpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICB9CisKKyAgICBj
b25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAg
RmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgRmxvYXRS
ZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCitwcml2
YXRlOgorICAgIERyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwor
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0K
KworICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFn
ZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0
IGhhdmUgdG8gYmUgbXV0YWJsZS4KKyAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKKyAgICBG
bG9hdFJlY3QgbV9zb3VyY2U7CisgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9pbWFnZVBhaW50
aW5nT3B0aW9uczsKK307CisKK2NsYXNzIERyYXdUaWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdUaWxlZEltYWdlPiBjcmVhdGUoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkSW1hZ2UoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0
aW9ucykpOworICAgIH0KKworICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBGbG9hdFBvaW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlOyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQorCisgICAgRmxvYXRTaXplIHRpbGVTaXplKCkgY29uc3QgeyByZXR1
cm4gbV90aWxlU2l6ZTsgfQorICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9zcGFjaW5nOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsg
Ly8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHBy
b2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCisgICAgRmxvYXRSZWN0
IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRQb2ludCBtX3NvdXJjZTsKKyAgICBGbG9hdFNpemUg
bV90aWxlU2l6ZTsKKyAgICBGbG9hdFNpemUgbV9zcGFjaW5nOworICAgIEltYWdlUGFpbnRpbmdP
cHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7Cit9OworCitjbGFzcyBEcmF3VGlsZWRTY2Fs
ZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
cmF3VGlsZWRTY2FsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2
UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkU2NhbGVkSW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxl
LCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIH0KKworICAgIGNvbnN0IEltYWdlJiBpbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBGbG9hdFJlY3Qgc291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1Rp
bGVkU2NhbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIElt
YWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KKworICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBG
SVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jl
c3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KKyAgICBGbG9hdFJlY3QgbV9k
ZXN0aW5hdGlvbjsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CisgICAgRmxvYXRTaXplIG1fdGls
ZVNjYWxlRmFjdG9yOworICAgIEltYWdlOjpUaWxlUnVsZSBtX2hSdWxlOworICAgIEltYWdlOjpU
aWxlUnVsZSBtX3ZSdWxlOworICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGlu
Z09wdGlvbnM7Cit9OworCitjbGFzcyBEcmF3TmF0aXZlSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd05hdGl2ZUltYWdlPiBjcmVhdGUoUGFz
c05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdOYXRpdmVJ
bWFnZShpbWFnZVB0ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9k
ZSwgb3JpZW50YXRpb24pKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zcmNSZWN0OyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgorICAgIERyYXdOYXRpdmVJbWFn
ZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisjaWYgVVNFKENHKQorICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2ltYWdlUHRyOworI2VuZGlmCisgICAgRmxvYXRTaXpl
IG1faW1hZ2VTaXplOworICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOworICAgIEZsb2F0UmVj
dCBtX3NyY1JlY3Q7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKKyAgICBCbGVuZE1vZGUg
bV9ibGVuZE1vZGU7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworfTsKKwor
Y2xhc3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0dGVybihpbWFn
ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJl
Y3QsIGJsZW5kTW9kZSkpOworICAgIH0KKworICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5UcmFuc2Zvcm07IH0KKyAg
ICBGbG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3RpbGVSZWN0OyB9CisgICAg
RmxvYXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAg
IEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9CisgICAgRmxvYXRT
aXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KKworcHJpdmF0ZToKKyAg
ICBEcmF3UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1f
aW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9u
cyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgorICAgIEFm
ZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07CisgICAgRmxvYXRSZWN0IG1fdGlsZVJl
Y3Q7CisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRQb2ludCBtX3BoYXNl
OworICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsK
KyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCisvLyBJcyBEcmF3aW5nSXRlbSBiZWNh
dXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUg
Y2xpcCBib3VuZHMuCitjbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+
IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7CisgICAgfQorCisgICAgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorCitwcml2YXRlOgorICAgIEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICAgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikKKyAgICAgICAgLCBtX29wYWNpdHko
b3BhY2l0eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV9vcGFjaXR5OworfTsKKwor
Y2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbmRUcmFuc3BhcmVuY3lMYXllcik7CisgICAg
fQorCitwcml2YXRlOgorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKyAgICAgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
K307CisKK2NsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPERyYXdSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGZsb2F0IGJvcmRlclRoaWNrbmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNzOyB9CisKK3ByaXZhdGU6CisgICAg
RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisg
ICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdSZWN0KQorICAgICAgICAsIG1fcmVj
dChyZWN0KQorICAgICAgICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7
IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxvYXQgbV9ib3JkZXJUaGlja25lc3M7
Cit9OworCitjbGFzcyBEcmF3TGluZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxEcmF3TGluZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50
IHBvaW50MSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQxOyB9CisgICAgRmxvYXRQb2ludCBwb2lu
dDIoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MjsgfQorCitwcml2YXRlOgorICAgIERyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAg
ICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZSkKKyAgICAgICAgLCBtX3BvaW50
MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQyKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRQb2ludCBtX3BvaW50MTsKKyAg
ICBGbG9hdFBvaW50IG1fcG9pbnQyOworfTsKKworY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JU
ZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRT
aXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChibG9ja0xvY2F0aW9uLCBsb2NhbEFu
Y2hvciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVdpZHRoKSk7CisgICAg
fQorCisgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9j
YXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQorICAgIGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb247
IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbEFuY2hvcjsgfQorICAgIEZsb2F0UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9CisgICAgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoczsgfQorICAgIGJvb2wgaXNQcmludGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KKyAgICBib29sIGRvdWJsZUxpbmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQorCitwcml2YXRlOgorICAgIERyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2Nh
bEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRoKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3TGluZXNGb3JUZXh0KQorICAgICAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9ja0xv
Y2F0aW9uKQorICAgICAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCisgICAgICAgICwg
bV93aWR0aHMod2lkdGhzKQorICAgICAgICAsIG1fc3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgpCisg
ICAgICAgICwgbV9wcmludGluZyhwcmludGluZykKKyAgICAgICAgLCBtX2RvdWJsZUxpbmVzKGRv
dWJsZUxpbmVzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICBGbG9hdFNpemUgbV9sb2Nh
bEFuY2hvcjsKKyAgICBEYXNoQXJyYXkgbV93aWR0aHM7CisgICAgZmxvYXQgbV9zdHJva2VXaWR0
aDsKKyAgICBib29sIG1fcHJpbnRpbmc7CisgICAgYm9vbCBtX2RvdWJsZUxpbmVzOworfTsKKwor
Y2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihwb2ludCwgd2lkdGgsIHN0eWxlKSk7
CisgICAgfQorCisgICAgRmxvYXRQb2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQ7
IH0KKyAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworcHJpdmF0
ZToKKyAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcikKKyAgICAgICAgLCBtX3BvaW50KHBvaW50KQorICAgICAgICAsIG1fd2lkdGgod2lk
dGgpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmly
dHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRQb2ludCBtX3BvaW50OworICAgIGZsb2F0
IG1fd2lkdGg7CisgICAgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBt
X3N0eWxlOworfTsKKworY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBz
ZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdFbGxpcHNlKQorICAgICAg
ICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2Ns
YXNzIERyYXdDb252ZXhQb2x5Z29uIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPERyYXdDb252ZXhQb2x5Z29uPiBjcmVhdGUoc2l6ZV90IG51bWJlck9mUG9p
bnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Q29udmV4UG9seWdvbihudW1iZXJPZlBv
aW50cywgcG9pbnRzLCBhbnRpYWxpYXNlZCkpOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxG
bG9hdFBvaW50PiYgcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludHM7IH0KKyAgICBib29s
IGFudGlhbGlhc2VkKCkgY29uc3QgeyByZXR1cm4gbV9hbnRpYWxpYXNlZDsgfQorCitwcml2YXRl
OgorICAgIERyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxv
YXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBtX3BvaW50czsKKyAgICBib29sIG1fYW50aWFs
aWFzZWQ7Cit9OworCitjbGFzcyBEcmF3UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxEcmF3UGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0aChwYXRoKSk7CisgICAg
fQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCitw
cml2YXRlOgorICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZh
c3RCb3VuZGluZ1JlY3QoKTsgfQorCisgICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBEcmF3
Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0
aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29s
b3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9w
YXRoOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIGlu
dCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIENvbG9yIGNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIERyYXdGb2N1c1JpbmdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAg
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBQYXRoIG1fcGF0
aDsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9vZmZzZXQ7CisgICAgQ29sb3IgbV9jb2xv
cjsKK307CisKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNyZWF0ZShjb25z
dCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1
c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBj
b25zdCBWZWN0b3I8SW50UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9Cisg
ICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIGludCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhjb25z
dCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1JlY3RzKQorICAgICAgICAsIG1fcmVjdHMocmVjdHMpCisgICAgICAgICwgbV93aWR0aCh3aWR0
aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVj
dG9yPEludFJlY3Q+IG1fcmVjdHM7CisgICAgaW50IG1fd2lkdGg7CisgICAgaW50IG1fb2Zmc2V0
OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bGxSZWN0KHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3QpCisgICAgICAg
ICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworLy8g
RklYTUU6IE1ha2UgdGhlc2UgaW5oZXJpdCBmcm9tIEZpbGxSZWN0IHByb3Blci4KK2NsYXNzIEZp
bGxSZWN0V2l0aENvbG9yIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEZpbGxSZWN0V2l0aENvbG9yPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcikpOworICAgIH0KKworICAgIEZsb2F0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6CisgICAgRmlsbFJlY3RXaXRoQ29sb3IoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yKQorICAgICAgICAsIG1fcmVjdChyZWN0
KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0
OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUmVjdFdp
dGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRp
ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoR3Jh
ZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIEZpbGxSZWN0V2l0aEdyYWRp
ZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQorICAgICAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCkKKyAgICAgICAgLCBt
X3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2dyYWRpZW50KGdyYWRpZW50KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAg
RmxvYXRSZWN0IG1fcmVjdDsKKyAgICBtdXRhYmxlIFJlZjxHcmFkaWVudD4gbV9ncmFkaWVudDsg
Ly8gRklYTUU6IE1ha2UgdGhpcyBub3QgbXV0YWJsZQorfTsKKworY2xhc3MgRmlsbENvbXBvc2l0
ZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZp
bGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxDb21wb3NpdGVkUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yOyB9CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBj
b25zdCB7IHJldHVybiBtX29wOyB9CisgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmxlbmRNb2RlOyB9CisKK3ByaXZhdGU6CisgICAgRmlsbENvbXBvc2l0ZWRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAg
ICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9vcChvcCkKKyAgICAgICAgLCBtX2JsZW5k
TW9kZShibGVuZE1vZGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIENvbG9y
IG1fY29sb3I7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKKyAgICBCbGVuZE1vZGUgbV9i
bGVuZE1vZGU7Cit9OworCitjbGFzcyBGaWxsUm91bmRlZFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJvdW5kZWRSZWN0PiBjcmVhdGUoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJvdW5k
ZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAg
IENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIEJsZW5kTW9kZSBi
bGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQorCitwcml2YXRlOgorICAg
IEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQorICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3QucmVj
dCgpOyB9CisKKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKKyAgICBDb2xvciBtX2NvbG9y
OworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKK307CisKK2NsYXNzIEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBjb25z
dCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JvdW5k
ZWRIb2xlUmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsg
fQorCitwcml2YXRlOgorICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fcm91bmRl
ZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsg
fQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRl
ZEhvbGVSZWN0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBGaWxsUGF0aCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3Jl
YXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGaWxsUGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxQYXRoKQorICAgICAg
ICAsIG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKworICAgIFBhdGggbV9w
YXRoOworfTsKKworY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsRWxsaXBzZShy
ZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KKworcHJpdmF0ZToKKyAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxFbGxpcHNlKQorICAgICAgICAs
IG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xh
c3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxTdHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJl
Y3QsIGxpbmVXaWR0aCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CisgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lV2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgbGluZVdpZHRoKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpT
dHJva2VSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fbGluZVdpZHRo
KGxpbmVXaWR0aCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxvYXQgbV9saW5lV2lkdGg7Cit9OworCitj
bGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBGbG9hdFBv
aW50JiBtX2Jsb2NrTG9jYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTdHJva2VQYXRoKHBhdGgsIG1fYmxvY2tMb2NhdGlvbikpOworICAgIH0KKworICAgIHZvaWQg
c2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxv
Y2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KKyAgICBjb25zdCBGbG9hdFBvaW50JiBibG9j
a0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CisgICAgY29uc3Qg
UGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIFN0
cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlv
bikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKKyAgICAgICAg
LCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIG11dGFi
bGUgUGF0aCBtX3BhdGg7CisgICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247Cit9OworCitj
bGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFN0cm9rZUVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsK
KyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQor
Citwcml2YXRlOgorICAgIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAg
ICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQorICAgICAgICAsIG1f
cmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIENsZWFyUmVjdCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGVhclJlY3Q+IGNyZWF0ZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDbGVhclJlY3QocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJSZWN0KQor
ICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307
CisKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5U3Ryb2tlUGF0dGVybik7CisgICAgfQorCitwcml2
YXRlOgorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6
QXBwbHlTdHJva2VQYXR0ZXJuKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCitjbGFzcyBBcHBseUZp
bGxQYXR0ZXJuIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXBwbHlG
aWxsUGF0dGVybj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEFwcGx5RmlsbFBhdHRlcm4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcHBseUZpbGxQYXR0
ZXJuKCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Cit9OworCisKK2NsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBwdWJsaWMg
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPiBj
cmVhdGUoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7CisgICAgfQorCisgICAg
ZmxvYXQgc2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlRmFjdG9yOyB9CisKK3By
aXZhdGU6CisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKyAg
ICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yKQorICAgICAgICAs
IG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZsb2F0
IG1fc2NhbGVGYWN0b3I7Cit9OworCisvLyBGSVhNRTogdGhpcyBuZWVkcyB0byBtb3ZlLgordm9p
ZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmLCBzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBG
bG9hdFBvaW50Kik7CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0
IEl0ZW0mKTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJB
V0lOR0lURU0oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYgb2Jq
ZWN0KSB7IHJldHVybiBvYmplY3QucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9EUkFXSU5HSVRF
TShEcmF3aW5nSXRlbSwgaXNEcmF3aW5nSXRlbSgpKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUb1ZhbHVlVHlwZU5hbWUpIFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRvVmFsdWVUeXBlTmFtZSkg
XAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bSYgaXRlbSkgeyByZXR1cm4gaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpUb1ZhbHVlVHlwZU5hbWU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2F2ZSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShSZXN0b3JlKQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRyYW5zbGF0ZSkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShSb3RhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oU2NhbGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQ29uY2F0ZW5hdGVDVE0pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU2V0U3RhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
U2V0TGluZUNhcCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRM
aW5lRGFzaCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5l
Sm9pbikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRNaXRlckxp
bWl0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXApCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcE91dCkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0VG9QYXRoKQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBQYXRoKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBDb252ZXhQb2x5Z29uKQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZEltYWdlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdOYXRpdmVJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3TGluZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRHJhd0NvbnZleFBvbHlnb24pCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1JlY3RzKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9yKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50KQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3NpdGVkUmVjdCkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91bmRlZFJlY3QpCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2UpCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIpCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlTdHJva2VQYXR0ZXJuKQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5RmlsbFBhdHRlcm4pCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykK
KworI2VuZGlmIC8vIERpc3BsYXlMaXN0SXRlbXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3MjIwNzkwNjEzNGRlMjgxYTgwZWZlNzE0MzBl
NTdmMThhYzYyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTAsMCArMSw0
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKworI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworUmVjb3JkZXI6OlJlY29yZGVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGJhc2VDVE0p
CisgICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQorICAgICwgbV9kaXNwbGF5TGlzdChk
aXNwbGF5TGlzdCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgIlxuUmVjb3JkaW5nIHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKKworICAgIC8vIEZJ
WE1FOiBob29rIHVwIHJlY29yZGVyIGluIHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgLy8gbV9n
cmFwaGljc0NvbnRleHQuc2V0RGlzcGxheUxpc3RSZWNvcmRlcih0aGlzKTsKKyAgICBtX3N0YXRl
U3RhY2suYXBwZW5kKENvbnRleHRTdGF0ZShiYXNlQ1RNLCBpbml0aWFsQ2xpcCkpOworfQorCitS
ZWNvcmRlcjo6flJlY29yZGVyKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9
PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0
b3JlLgorICAgIExPRyhEaXNwbGF5TGlzdHMsICJSZWNvcmRlZCBkaXNwbGF5IGxpc3Q6XG4lcyIs
IG1fZGlzcGxheUxpc3QuZGVzY3JpcHRpb24oKS5kYXRhKCkpOworfQorCit2b2lkIFJlY29yZGVy
Ojp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQoreworICAgIGlmIChpdGVtLmlzRHJh
d2luZ0l0ZW0oKSB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
IHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0
ZSgpLnN0YXRlQ2hhbmdlOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0
YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOworICAgICAgICBpZiAoY2hhbmdl
c0Zyb21MYXN0U3RhdGUpIHsKKyAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlz
dHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0
ZSkpOworICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU2V0U3RhdGU6OmNyZWF0ZShz
dGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKKyAgICAgICAgICAg
IHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnRTdGF0
ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKKyAgICAgICAgfQor
ICAgICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyA9IHRydWU7CisgICAgfQor
fQorCit2b2lkIFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQor
eworICAgIGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdz
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQoreworICAgIGFwcGVuZEl0ZW0o
Q2xlYXJTaGFkb3c6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCit7CisgICAgYXBwZW5kSXRlbShTZXRMaW5lQ2FwOjpjcmVhdGUobGlu
ZUNhcCkpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
IGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBhcHBlbmRJdGVtKFNldExpbmVE
YXNoOjpjcmVhdGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQoreworICAgIGFwcGVuZEl0ZW0oU2V0TGlu
ZUpvaW46OmNyZWF0ZShsaW5lSm9pbikpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxp
bWl0KGZsb2F0IG1pdGVyTGltaXQpCit7CisgICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0Ojpj
cmVhdGUobWl0ZXJMaW1pdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCit7CisgICAgRmxvYXRQb2ludCBibG9ja0xvY2F0aW9uID0gbV9j
YWNoaW5nID8gbV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgIEZsb2F0U2l6ZSBs
b2NhbEFuY2hvciA9IHN0YXJ0UG9pbnQgLSBibG9ja0xvY2F0aW9uOworICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6
Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoZnJvbSksIG51bUdseXBocywgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHNtb290aGlu
Z01vZGUpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCit7
CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKFBh
c3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5n
SXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZVB0ciwgaW1hZ2VT
aXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pKSk7Cisg
ICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIElt
YWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCit7CisgICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRTY2Fs
ZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0
b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0g
ZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1BhdHRlcm46OmNyZWF0ZShpbWFn
ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJl
Y3QsIGJsZW5kTW9kZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpzYXZlKCkKK3sKKyAgICBhcHBlbmRJdGVtKFNhdmU6OmNyZWF0ZSgpKTsK
KyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVGb3JTYXZl
KG1fZGlzcGxheUxpc3Quc2l6ZSgpIC0gMSkpOworfQorCit2b2lkIFJlY29yZGVyOjpyZXN0b3Jl
KCkKK3sKKyAgICBpZiAoIW1fc3RhdGVTdGFjay5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBib29sIHN0YXRlVXNlZEZvckRyYXdpbmcgPSBjdXJyZW50U3RhdGUoKS53YXNVc2Vk
Rm9yRHJhd2luZzsKKyAgICBzaXplX3Qgc2F2ZUluZGV4ID0gY3VycmVudFN0YXRlKCkuc2F2ZUl0
ZW1JbmRleDsKKyAgICAKKyAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgIC8vIEhh
dmUgdG8gYXZvaWQgZWxpZGluZyBuZXN0ZWQgU2F2ZS9SZXN0b3JlIHdoZW4gYSBkZXNjZW5kYW50
IHN0YXRlIGNvbnRhaW5zIGRyYXdpbmcgaXRlbXMuCisgICAgY3VycmVudFN0YXRlKCkud2FzVXNl
ZEZvckRyYXdpbmcgfD0gc3RhdGVVc2VkRm9yRHJhd2luZzsKKworICAgIGlmICghc3RhdGVVc2Vk
Rm9yRHJhd2luZyAmJiBzYXZlSW5kZXgpIHsKKyAgICAgICAgLy8gVGhpcyBTYXZlL1Jlc3RvcmUg
ZGlkbid0IGNvbnRhaW4gYW55IGRyYXdpbmcgaXRlbXMuIFJvbGwgYmFjayB0byBqdXN0IGJlZm9y
ZSB0aGUgbGFzdCBzYXZlLgorICAgICAgICBtX2Rpc3BsYXlMaXN0LnJlbW92ZUl0ZW1zRnJvbUlu
ZGV4KHNhdmVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBlbmRJdGVt
KFJlc3RvcmU6OmNyZWF0ZSgpKTsKKyAgICAKKyAgICBpZiAoc2F2ZUluZGV4KSB7CisgICAgICAg
IFNhdmUmIHNhdmVJdGVtID0gZG93bmNhc3Q8U2F2ZT4obV9kaXNwbGF5TGlzdC5pdGVtQXQoc2F2
ZUluZGV4KSk7CisgICAgICAgIHNhdmVJdGVtLnNldFJlc3RvcmVJbmRleChtX2Rpc3BsYXlMaXN0
LnNpemUoKSAtIDEpOworICAgIH0KK30KKwordm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCit7CisgICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOworICAg
IGFwcGVuZEl0ZW0oVHJhbnNsYXRlOjpjcmVhdGUoeCwgeSkpOworfQorCit2b2lkIFJlY29yZGVy
Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit7CisgICAgY3VycmVudFN0YXRlKCkucm90
YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBhcHBlbmRJdGVtKFJvdGF0ZTo6Y3JlYXRlKGFuZ2xl
SW5SYWRpYW5zKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5zY2FsZShzaXplKTsKKyAgICBhcHBlbmRJdGVt
KFNjYWxlOjpjcmVhdGUoc2l6ZSkpOworfQorCit2b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgY3VycmVudFN0YXRlKCkuY29u
Y2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgYXBwZW5kSXRlbShDb25jYXRlbmF0ZUNUTTo6Y3JlYXRl
KHRyYW5zZm9ybSkpOworfQorCit2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUob3Bh
Y2l0eSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29y
ZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAgYXBwZW5kSXRlbShFbmRUcmFuc3Bh
cmVuY3lMYXllcjo6Y3JlYXRlKCkpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3sKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdSZWN0
OjpjcmVhdGUocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQoreworICAgIERyYXdpbmdJdGVtJiBu
ZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0xpbmU6OmNyZWF0
ZShwb2ludDEsIHBvaW50MikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQor
Cit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQoreworICAgIEZsb2F0UG9pbnQgYmxvY2tMb2NhdGlv
biA9IG1fY2FjaGluZyA/IG1fYmxvY2tMb2NhdGlvbiA6IEZsb2F0UG9pbnQoKTsKKyAgICBGbG9h
dFNpemUgbG9jYWxBbmNob3IgPSBwb2ludCAtIGJsb2NrTG9jYXRpb247CisgICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZXNG
b3JUZXh0OjpjcmVhdGUoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVu
dChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIEdyYXBoaWNzQ29udGV4dDo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0
ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyOjpjcmVhdGUocG9pbnQsIHdpZHRoLCBzdHlsZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJv
b2wgYW50aWFsaWFzZWQpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3Q29udmV4UG9seWdvbjo6Y3JlYXRlKG51bWJlck9m
UG9pbnRzLCBwb2ludHMsIGFudGlhbGlhc2VkKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3
SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3UGF0aDo6Y3JlYXRlKHBhdGgpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRo
LCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBEcmF3
aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdG
b2N1c1JpbmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKSk7CisgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJl
Y3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChu
ZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRl
KHJlY3QsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVu
dCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVy
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsQ29tcG9z
aXRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpKTsKKyAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxs
UGF0aDo6Y3JlYXRlKHBhdGgpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30K
Kwordm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0
ZW0oRmlsbEVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3
SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VSZWN0OjpjcmVhdGUocmVjdCwgbGlu
ZVdpZHRoKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBGbG9hdFBvaW50IGJs
b2NrTG9jYXRpb24gPSBtX2NhY2hpbmcgPyBtX2Jsb2NrTG9jYXRpb24gOiBGbG9hdFBvaW50KCk7
CisgICAgUGF0aCB0cmFuc2xhdGVkID0gcGF0aDsKKyAgICB0cmFuc2xhdGVkLnRyYW5zbGF0ZSgt
RmxvYXRTaXplKGJsb2NrTG9jYXRpb24ueCgpLCBibG9ja0xvY2F0aW9uLnkoKSkpOworICAgIERy
YXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oU3Ry
b2tlUGF0aDo6Y3JlYXRlKHBhdGgsIGJsb2NrTG9jYXRpb24pKSk7CisgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0g
ZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkp
KTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjph
cHBseVN0cm9rZVBhdHRlcm4oKQoreworICAgIGFwcGVuZEl0ZW0oQXBwbHlTdHJva2VQYXR0ZXJu
OjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQorewor
ICAgIGFwcGVuZEl0ZW0oQXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCkpOworfQorCit2b2lkIFJl
Y29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzLmludGVyc2VjdChyZWN0KTsKKyAgICBhcHBlbmRJdGVtKENsaXA6OmNyZWF0
ZShyZWN0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIGFwcGVuZEl0ZW0oQ2xpcE91dDo6Y3JlYXRlKHJlY3QpKTsKK30KKwordm9p
ZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGFwcGVuZEl0ZW0o
Q2xpcE91dFRvUGF0aDo6Y3JlYXRlKHBhdGgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit7CisgICAgY3VycmVudFN0
YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOworICAg
IGFwcGVuZEl0ZW0oQ2xpcFBhdGg6OmNyZWF0ZShwYXRoLCB3aW5kUnVsZSkpOworfQorCit2b2lk
IFJlY29yZGVyOjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzKQoreworICAgIFBhdGggcG9seWdvblBhdGg7
CisgICAgYWRkQ29udmV4UG9seWdvblRvUGF0aChwb2x5Z29uUGF0aCwgbnVtUG9pbnRzLCBwb2lu
dHMpOworICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHBvbHlnb25QYXRo
LmZhc3RCb3VuZGluZ1JlY3QoKSk7CisKKyAgICBhcHBlbmRJdGVtKENsaXBDb252ZXhQb2x5Z29u
OjpjcmVhdGUobnVtUG9pbnRzLCBwb2ludHMsIGFudGlhbGlhcykpOworfQorCit2b2lkIFJlY29y
ZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorewor
ICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxp
ZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgorICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mg
b25seSBjYWxsZWQgZWFybHkgb24/CisgICAgYXBwZW5kSXRlbShBcHBseURldmljZVNjYWxlRmFj
dG9yOjpjcmVhdGUoZGV2aWNlU2NhbGVGYWN0b3IpKTsKK30KKworSXRlbSYgUmVjb3JkZXI6OmFw
cGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKK3sKKyAgICB3aWxsQXBwZW5kSXRlbShpdGVtLmdl
dCgpKTsKKyAgICByZXR1cm4gbV9kaXNwbGF5TGlzdC5hcHBlbmQoV1RGTW92ZShpdGVtKSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0ZW0pIGNv
bnN0Cit7CisgICAgaWYgKE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0ubG9jYWxCb3Vu
ZHMobV9ncmFwaGljc0NvbnRleHQpKQorICAgICAgICBpdGVtLnNldEV4dGVudChleHRlbnRGcm9t
TG9jYWxCb3VuZHMocmVjdC52YWx1ZSgpKSk7Cit9CisKKy8vIEZJWE1FOiBzaGFyZSB3aXRoIFNo
YWRvd0RhdGEKK3N0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQg
Ymx1clJhZGl1cykKK3sKKyAgICAvLyBCbHVycmluZyB1c2VzIGEgR2F1c3NpYW4gZnVuY3Rpb24g
d2hvc2Ugc3RkLiBkZXZpYXRpb24gaXMgbV9yYWRpdXMvMiwgYW5kIHdoaWNoIGluIHRoZW9yeQor
ICAgIC8vIGV4dGVuZHMgdG8gaW5maW5pdHkuIEluIDgtYml0IGNvbnRleHRzLCBob3dldmVyLCBy
b3VuZGluZyBjYXVzZXMgdGhlIGVmZmVjdCB0byBiZWNvbWUKKyAgICAvLyB1bmRldGVjdGFibGUg
YXQgYXJvdW5kIDEuNHggdGhlIHJhZGl1cy4KKyAgICBjb25zdCBmbG9hdCByYWRpdXNFeHRlbnRN
dWx0aXBsaWVyID0gMS40OworICAgIHJldHVybiBjZWlsZihibHVyUmFkaXVzICogcmFkaXVzRXh0
ZW50TXVsdGlwbGllcik7Cit9CisKK0Zsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91
bmRzID0gcmVjdDsKKyAgICBjb25zdCBDb250ZXh0U3RhdGUmIHN0YXRlID0gY3VycmVudFN0YXRl
KCk7CisKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd1JhZGl1
czsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBpZiAobV9ncmFwaGljc0NvbnRleHQuZ2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKKyAgICAg
ICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudD0gYm91bmRzOworICAgICAgICBzaGFkb3dFeHRlbnQu
bW92ZShzaGFkb3dPZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQ
YWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAgICAgICAgYm91bmRzLnVuaXRlKHNoYWRv
d0V4dGVudCk7CisgICAgfQorICAgIAorICAgIEZsb2F0UmVjdCBjbGlwcGVkRXh0ZW50ID0gaW50
ZXJzZWN0aW9uKHN0YXRlLmNsaXBCb3VuZHMsIGJvdW5kcyk7CisgICAgcmV0dXJuIHN0YXRlLmN0
bS5tYXBSZWN0KGNsaXBwZWRFeHRlbnQpOworfQorCitjb25zdCBSZWNvcmRlcjo6Q29udGV4dFN0
YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zdGF0
ZVN0YWNrLnNpemUoKSk7CisgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7Cit9CisKK1Jl
Y29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3RhdGUoKQoreworICAgIEFT
U0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3Qo
KTsKK30KKworY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNvcmRlcjo6Y3RtKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworfQorCitjb25zdCBGbG9hdFJlY3QmIFJl
Y29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY3VycmVudFN0YXRlKCku
Y2xpcEJvdW5kczsKK30KKwordm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBjdG0udHJhbnNsYXRlKHgsIHkpOworICAgIGNsaXBC
b3VuZHMubW92ZSgteCwgLXkpOworfQorCit2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJv
dGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3sKKyAgICBkb3VibGUgYW5nbGVJbkRlZ3JlZXMg
PSByYWQyZGVnKHN0YXRpY19jYXN0PGRvdWJsZT4oYW5nbGVJblJhZGlhbnMpKTsKKyAgICBjdG0u
cm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKKyAgICAKKyAgICBBZmZpbmVUcmFuc2Zvcm0gcm90YXRp
b247CisgICAgcm90YXRpb24ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKKworICAgIGlmIChPcHRp
b25hbDxBZmZpbmVUcmFuc2Zvcm0+IGludmVyc2UgPSByb3RhdGlvbi5pbnZlcnNlKCkpCisgICAg
ICAgIGNsaXBCb3VuZHMgPSBpbnZlcnNlLnZhbHVlKCkubWFwUmVjdChjbGlwQm91bmRzKTsKK30K
Kwordm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCit7CisgICAgY3RtLnNjYWxlKHNpemUpOworICAgIGNsaXBCb3VuZHMuc2NhbGUoMSAvIHNp
emUud2lkdGgoKSwgMSAvIHNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIFJlY29yZGVyOjpDb250
ZXh0U3RhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKK3sKKyAg
ICBjdG0gKj0gbWF0cml4OworCisgICAgaWYgKE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52
ZXJzZSA9IG1hdHJpeC5pbnZlcnNlKCkpCisgICAgICAgIGNsaXBCb3VuZHMgPSBpbnZlcnNlLnZh
bHVlKCkubWFwUmVjdChjbGlwQm91bmRzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxp
c3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhjOGUwMmQ5NjdjZjk3MzY1NjFhMTY1ZGRiNTAwNzVkZTJjYzA2
ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlzcGxh
eUxpc3RSZWNvcmRlcl9oCisjZGVmaW5lIERpc3BsYXlMaXN0UmVjb3JkZXJfaAorCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIgLy8gRm9yIElu
dGVycG9sYXRpb25RdWFsaXR5LgorI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGls
ZVJ1bGUuCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZs
b2F0UmVjdDsKK2NsYXNzIEdseXBoQnVmZmVyOworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZv
bnQ7CitjbGFzcyBJbWFnZTsKKworc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOworc3RydWN0
IEltYWdlUGFpbnRpbmdPcHRpb25zOworCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFz
cyBEcmF3aW5nSXRlbTsKKworY2xhc3MgUmVjb3JkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFJlY29yZGVyKTsKK3B1YmxpYzoKKyAgICBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBE
aXNwbGF5TGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOworICAgIH5SZWNvcmRlcigpOworCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKTsKKyAgICB2b2lkIGNsZWFyU2hhZG93KCk7CisKKyAgICB2b2lkIHNldExpbmVDYXAo
TGluZUNhcCk7CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBk
YXNoT2Zmc2V0KTsKKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKKyAgICB2b2lkIHNl
dE1pdGVyTGltaXQoZmxvYXQpOworCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlKTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpOworICAgIHZvaWQgZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpOworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisKKyAgICB2
b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOworICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwor
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9u
dFNtb290aGluZ01vZGUpOworCisgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6
VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNlbGZT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pOworICAgIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBC
bGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpOworCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpOworICAgIHZvaWQgZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpOworICAgIHZv
aWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lk
dGgsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOworICAgIHZvaWQg
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBkcmF3Q29udmV4UG9seWdv
bihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFudGlhbGlh
c2VkKTsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKKworICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
OworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mLCBpbnQgd2lk
dGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CisKKyAgICB2b2lkIHNhdmUoKTsKKyAgICB2
b2lkIHJlc3RvcmUoKTsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwor
ICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKKyAgICB2b2lkIHNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwor
ICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBX
aW5kUnVsZSk7CisgICAgdm9pZCBjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXMpOworICAgIAorICAgIHZvaWQgYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcGxheUxpc3Quc2l6ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgSXRlbSYgYXBwZW5k
SXRlbShSZWY8SXRlbT4mJik7CisgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7
CisKKyAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OworICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0Owor
ICAgIAorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CisgICAgY29uc3Qg
RmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgQ29udGV4dFN0YXRl
IHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBC
b3VuZHM7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBsYXN0RHJhd2luZ1N0YXRlOworICAgICAgICBi
b29sIHdhc1VzZWRGb3JEcmF3aW5nIHsgZmFsc2UgfTsKKyAgICAgICAgc2l6ZV90IHNhdmVJdGVt
SW5kZXggeyAwIH07CisgICAgICAgIAorICAgICAgICBDb250ZXh0U3RhdGUoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xpcCkKKyAgICAgICAgICAg
IDogY3RtKHRyYW5zZm9ybSkKKyAgICAgICAgICAgICwgY2xpcEJvdW5kcyhjbGlwKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclNh
dmUoc2l6ZV90IHNhdmVJbmRleCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQ29udGV4
dFN0YXRlIHN0YXRlKGN0bSwgY2xpcEJvdW5kcyk7CisgICAgICAgICAgICBzdGF0ZS5zdGF0ZUNo
YW5nZSA9IHN0YXRlQ2hhbmdlOworICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0ZSA9
IGxhc3REcmF3aW5nU3RhdGU7CisgICAgICAgICAgICBzdGF0ZS5zYXZlSXRlbUluZGV4ID0gc2F2
ZUluZGV4OworICAgICAgICAgICAgcmV0dXJuIHN0YXRlOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgcm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKTsKKyAgICAgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
KTsKKyAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAg
fTsKKyAgICAKKyAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1cnJlbnRTdGF0ZSgpIGNvbnN0Owor
ICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IG1fZ3JhcGhpY3NDb250ZXh0OworICAgIERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OworCisg
ICAgYm9vbCBtX2NhY2hpbmcgeyBmYWxzZSB9OworICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0
aW9uOworICAgIAorICAgIFZlY3RvcjxDb250ZXh0U3RhdGUsIDMyPiBtX3N0YXRlU3RhY2s7Cit9
OworCit9Cit9CisKKyNlbmRpZiAvLyBEaXNwbGF5TGlzdFJlY29yZGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDM4NzY4NjE3ODJhNWRh
N2U3MDQ1OGMwZWNlODAzODY1NTljZjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5
ZXIuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJ
dGVtcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CisKK1JlcGxheWVyOjpSZXBsYXllcihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKKyAgICA6IG1fZGlzcGxh
eUxpc3QoZGlzcGxheUxpc3QpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3sKK30KKworUmVw
bGF5ZXI6On5SZXBsYXllcigpCit7Cit9CisKK3ZvaWQgUmVwbGF5ZXI6OnJlcGxheShjb25zdCBG
bG9hdFJlY3QmIGluaXRpYWxDbGlwKQoreworICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlz
dHMsIHN0cmVhbSA8PCAiXG5SZXBsYXlpbmcgd2l0aCBjbGlwICIgPDwgaW5pdGlhbENsaXApOwor
ICAgIFVOVVNFRF9QQVJBTShpbml0aWFsQ2xpcCk7CisKKyAgICBzaXplX3QgbnVtSXRlbXMgPSBt
X2Rpc3BsYXlMaXN0LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1z
OyArK2kpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IG1fZGlzcGxheUxpc3QubGlzdCgpW2ldLmdl
dCgpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgImRy
YXdpbmcgICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CisgICAgICAgIGl0ZW0uYXBwbHkobV9jb250
ZXh0KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41MWFiYmFlZjAxMjhjNDEzNDFjY2FmOTVkOTg0MzcyYWNlM2ZkMmMxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlzcGxheUxpc3RSZXBsYXllcl9o
CisjZGVmaW5lIERpc3BsYXlMaXN0UmVwbGF5ZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwor
Y2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCituYW1lc3BhY2UgRGlz
cGxheUxpc3QgeworCitjbGFzcyBEaXNwbGF5TGlzdDsKKworY2xhc3MgUmVwbGF5ZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGxheWVyKTsKK3B1YmxpYzoKKyAgICBSZXBsYXllcihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBEaXNwbGF5TGlzdCYpOworICAgIH5SZXBsYXllcigpOwor
CisgICAgdm9pZCByZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCk7CisKK3ByaXZh
dGU6CisgICAgY29uc3QgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CisgICAgR3JhcGhpY3ND
b250ZXh0JiBtX2NvbnRleHQ7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBEaXNwbGF5TGlzdFJl
cGxheWVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268431</attachid>
            <date>2016-01-06 18:09:50 -0800</date>
            <delta_ts>2016-01-06 18:31:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106180918.patch</filename>
            <type>text/plain</type>
            <size>148002</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NWRmYTQ4MjAzZGE3
YzYyYjYyN2YxMGVkYWMyZDEyZmFjYjFmMC4uZDQzMmIzYWEwZDMzMmZmZDE4NzVhM2U1MjgzOTBj
MWY4NmE1Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmMyYjg3NTkzZmE1ZTRlMDhiZDEzNmVlNDQ0ODkzYzMyNDU1YmI5ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworI2lmIFVTRShDRykKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX2No
YW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRl
eHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xv
cik7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3Rh
dGUuZmlsbENvbG9yKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9r
ZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQor
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5k
LW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxl
ZENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0
aW9uLWVuYWJsZWQiLCBtX3N0YXRlLmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxk
LXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJh
d0x1bWluYW5jZU1hc2tDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1p
bmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2UpCit7CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0
dXJuIHRzOworfQorCisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRp
bmdDb250cm9sVGludHMoZmFsc2UpCiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDUyYjFhZDgyYjJmOGE1ODcwOGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEy
OTMzYzBmMjM3OGEzYzEzN2ZjZjYzYWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0g
Q2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwLAorICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBo
YUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAg
ICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
ICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAor
ICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3
LAorICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8
IDE4LAorICAgICAgICBBbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAx
IDw8IDE5LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAg
PSAxIDw8IDIwLAorICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIxLAorICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAg
ICAgICAgPSAxIDw8IDIyLAorICAgIH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5n
ZUZsYWdzOworCiAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQ
dHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxl
OwogfTsKIAorc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUp
CisgICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFncyB7IDAgfTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk0NjJiZGViZWQ3YmI1YWQ2OTI4ZjI5OTU1MmQwMGFmNmFlOTc2
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKKyNpZiAhZGVmaW5lZChO
REVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBEaXNwbGF5TGlzdDo6ZGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7Cisg
ICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1
bXAoKSBjb25zdAoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRh
dGEoKSk7Cit9CisjZW5kaWYKKwordm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0
cyA8PCAiZGlzcGxheSBsaXN0IjsKKworICAgIHNpemVfdCBudW1JdGVtcyA9IG1fbGlzdC5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAg
IFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMpOworICAgICAgICB0cyA8PCBpIDw8ICIg
IiA8PCBtX2xpc3RbaV0uZ2V0KCk7CisgICAgfQorICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICB0
cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOworICAgIHRzLmVuZEdyb3Vw
KCk7Cit9CisKK3NpemVfdCBEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAg
IHNpemVfdCByZXN1bHQgPSAwOworICAgIGZvciAoYXV0byYgcmVmIDogbV9saXN0KSB7CisgICAg
ICAgIHN3aXRjaCAocmVmLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2F2ZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KHJlZi5nZXQo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihyZWYuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2NhbGU+KHJlZi5nZXQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4o
cmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRl
PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTZXRM
aW5lQ2FwPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8U2V0TGluZURhc2g+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVv
Zihkb3duY2FzdDxTZXRMaW5lSm9pbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAg
ICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwPihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICAg
ICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0
aDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBD
b252ZXhQb2x5Z29uOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlw
Q29udmV4UG9seWdvbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2Yo
ZG93bmNhc3Q8RHJhd0dseXBocz4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmVz
dWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxl
ZEltYWdlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdOYXRpdmVJbWFnZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXN1bHQg
Kz0gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgICAgIHJl
c3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd1JlY3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICAgICAg
cmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93
bmNhc3Q8RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdv
bjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0NvbnZleFBvbHln
b24+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3
UGF0aD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4ocmVmLmdldCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6
CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJl
Y3RXaXRoQ29sb3I+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAgICAgcmVzdWx0ICs9
IHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8RmlsbFJvdW5kZWRSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgICAg
IHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQ
YXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bEVsbGlwc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxp
cHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VSZWN0OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxT
dHJva2VSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3du
Y2FzdDxTdHJva2VQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxTdHJva2VFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgICAgICByZXN1
bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9m
KGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAg
ICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QXBw
bHlGaWxsUGF0dGVybj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NjEyOGEyNTMxMGIzYzk5YmQxZGZkOWFlNjM0NjBjMDg2MjdlNTgwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0X2gKKyNkZWZpbmUgRGlzcGxheUxp
c3RfaAorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgVGV4dFN0cmVhbTsKKworbmFtZXNwYWNl
IERpc3BsYXlMaXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3QgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERpc3BsYXlMaXN0KTsKKyAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CitwdWJsaWM6
CisgICAgRGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CisgICAgRGlzcGxheUxpc3QoRGlzcGxheUxp
c3QmJikgPSBkZWZhdWx0OworCisgICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlz
dCYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0OworCisg
ICAgY29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7
IH0KKyAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9saXN0LnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2xpc3QuY2xlYXIoKTsgfQor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAg
dm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBt
X2xpc3QucmVzaXplKGluZGV4KTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBj
b25zdDsKKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAgIFdURjo6
Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworICAgIHZvaWQgZHVtcCgpIGNvbnN0OworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCisgICAg
eworICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOworICAgICAgICByZXR1cm4g
bV9saXN0Lmxhc3QoKS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlz
dCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorCisgICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworfSAvLyBXZWJDb3JlCisK
K3VzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKKworI2VuZGlmIC8qIERp
c3BsYXlMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOWQ0MzA2OTdiZjczNjc5MDVlMjU3MjgzMGEwM2YwMTNmYTk2Yjc3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTA4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNs
dWRlICJUZXh0U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CisKKy8vIFNob3VsZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpCitzdGF0aWMgY29uc3QgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7
CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBJ
dGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICB0cyA8
PCAqdGhpczsKKyAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKK30KKyNlbmRpZgorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2lu
Z0l0ZW0mIGl0ZW0pCit7CisgICAgdHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJleHRlbnQg
IjsKKyAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQorICAgICAgICB0cyA8PCBpdGVtLmV4dGVu
dCgpOworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgInVua25vd24iOworICAgIAorICAgIHRzLmVu
ZEdyb3VwKCk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0
ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3Jl
SW5kZXgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30K
Kwordm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Cit9CisKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgieSIsIGl0ZW0ueSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBSb3RhdGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJvdGF0
ZShtX2FuZ2xlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xl
IiwgaXRlbS5hbmdsZSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTY2FsZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2NhbGUo
bV9zaXplKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjYWxlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0
ZW0uYW1vdW50KCkpOworCisgICAgcmV0dXJuIHRzOworfQorCitDb25jYXRlbmF0ZUNUTTo6Q29u
Y2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKKyAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkK
K3sKK30KKwordm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNh
dGVuYXRlQ1RNJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFu
c2Zvcm0oKSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBtX3N0YXRlLmFwcGx5KGNvbnRl
eHQpOworfQorCit2b2lkIFNldFN0YXRlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit7CisgICAgbV9zdGF0ZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYg
c3RhdGUpCit7CisgICAgdHMgPDwgc3RhdGUuc3RhdGUoKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K3ZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNh
cCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNo
QXJyYXksIG1fZGFzaE9mZnNldCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCit7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpv
aW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0
TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0
ZXJMaW1pdCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1p
dC5taXRlckxpbWl0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclNoYWRvdzo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xl
YXJTaGFkb3coKTsKK30KKwordm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQorewor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK3ZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOwor
fQorCit2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK3sKKyAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmKQor
eworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTog
cGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGlwUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcFBhdGgo
bV9wYXRoLCBtX3dpbmRSdWxlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQoreworLy8gICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAg
IHRzLmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsKKyAgICByZXR1
cm4gdHM7Cit9CisKK0NsaXBDb252ZXhQb2x5Z29uOjpDbGlwQ29udmV4UG9seWdvbihzaXplX3Qg
bnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNl
ZCkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRp
YWxpYXMoYW50aWFsaWFzZWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlBvaW50czsgKytpKQorICAgICAgICBtX3BvaW50cy5hcHBlbmQocG9pbnRzW2ldKTsKK30KKwor
dm9pZCBDbGlwQ29udmV4UG9seWdvbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAoreworICAgIGNvbnRleHQuY2xpcENvbnZleFBvbHlnb24obV9wb2ludHMuc2l6ZSgpLCBt
X3BvaW50cy5kYXRhKCksIG1fYW50aWFsaWFzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBDb252ZXhQb2x5Z29uJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbnRpYWxpYXMiLCBpdGVtLmFudGlhbGlhcygpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK0RyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQorICAgICwgbV9mb250
KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9j
YXRpb24pCisgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICwgbV9zbW9vdGhp
bmdNb2RlKHNtb290aGluZ01vZGUpCit7CisgICAgbV9nbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjb3VudCk7CisgICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBt
X2dseXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKKyAgICAgICAgbV9hZHZhbmNlcy51
bmNoZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOworICAgIH0KKyAgICBjb21wdXRlQm91bmRzKCk7
Cit9CisKK2lubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVy
KCkgY29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYWRkKG1fZ2x5
cGhzW2ldLCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIERyYXdHbHlwaHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudC4KKyAgICBVTlVTRURfUEFSQU0obV9zbW9vdGhpbmdN
b2RlKTsKK30KKwordm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgYWN0dWFsbHkgdGFrZSB0aGUgZXh0ZW50cyBvZiB0aGUg
Z2x5cGhzIGludG8gY29uc2lkZXJhdGlvbi4gSXQgYXNzdW1lcyB0aGF0CisgICAgLy8gdGhlIGds
eXBoIGxpZXMgZW50aXJlbHkgd2l0aGluIGl0cyAoYXNjZW50K2Rlc2NlbnQgeCBhZHZhbmNlKSBy
ZWN0LgorICAgIGZsb2F0IGFzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2Vu
dCgpOworICAgIGZsb2F0IGRlc2NlbnQgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXREZXNj
ZW50KCk7CisgICAgRmxvYXRQb2ludCBjdXJyZW50ID0gdG9GbG9hdFBvaW50KGxvY2FsQW5jaG9y
KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UgPSBtX2FkdmFuY2VzW2ldOworICAg
ICAgICBGbG9hdFJlY3QgZ2x5cGhSZWN0ID0gRmxvYXRSZWN0KGN1cnJlbnQueCgpLCBjdXJyZW50
LnkoKSAtIGFzY2VudCwgYWR2YW5jZS53aWR0aCgpLCBhc2NlbnQgKyBkZXNjZW50KTsKKyAgICAg
ICAgbV9ib3VuZHMudW5pdGUoZ2x5cGhSZWN0KTsKKworICAgICAgICBjdXJyZW50ICs9IEZsb2F0
U2l6ZShhZHZhbmNlKTsKKyAgICB9Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0dseXBo
czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9h
dFJlY3QgbG9jYWxCb3VuZHMgPSBtX2JvdW5kczsKKyAgICBsb2NhbEJvdW5kcy5tb3ZlKG1fYmxv
Y2tMb2NhdGlvbi54KCksIG1fYmxvY2tMb2NhdGlvbi55KCkpOworICAgIHJldHVybiBsb2NhbEJv
dW5kczsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
RHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICAvLyBGSVhNRTogZHVtcCBtb3JlIHN0dWZmLgorICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5jaG9yLXBvaW50IiwgaXRlbS5hbmNob3JQb2ludCgp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImxlbmd0aCIsIGl0ZW0uZ2x5cGhzKCkuc2l6ZSgpKTsK
KworICAgIHJldHVybiB0czsKK30KKworRHJhd0ltYWdlOjpEcmF3SW1hZ2UoSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdJbWFnZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisg
ICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQor
ICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKK30K
Kwordm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBt
X3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2UmIGl0ZW0pCit7Cisg
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0
LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKworRHJhd1Rp
bGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3VGlsZWRJbWFnZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uKQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2l6ZSh0
aWxlU2l6ZSkKKyAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQorICAgICwgbV9pbWFnZVBhaW50aW5n
T3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKK30KKwordm9pZCBEcmF3VGlsZWRJbWFn
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQu
ZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1f
dGlsZVNpemUsIG1fc3BhY2luZywgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJ
bWFnZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXBvaW50IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgidGlsZS1zaXplIiwgaXRlbS50aWxlU2l6ZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInNwYWNpbmciLCBpdGVtLnNwYWNpbmcoKSk7CisgICAgcmV0dXJuIHRzOworfQorCitE
cmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1h
Z2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2UpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5h
dGlvbikKKyAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRp
bGVTY2FsZUZhY3RvcikKKyAgICAsIG1faFJ1bGUoaFJ1bGUpCisgICAgLCBtX3ZSdWxlKHZSdWxl
KQorICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sK
K30KKwordm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQo
KSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNjYWxlRmFjdG9yLCBtX2hSdWxlLCBt
X3ZSdWxlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZFNjYWxlZEltYWdlJiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK0RyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBp
bWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlKQorICAgICwgbV9pbWFnZVB0cihp
bWFnZVB0cikKKyAgICAsIG1faW1hZ2VTaXplKGltYWdlU2l6ZSkKKyAgICAsIG1fZGVzdGluYXRp
b24oZGVzdFJlY3QpCisgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAsIG1fb3Aob3ApCisg
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0
aW9uKQoreworfQorCit2b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICBhdXRvIGltYWdlUHRyID0gbV9p
bWFnZVB0ci5nZXQoKTsKKyNlbmRpZgorICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdl
UHRyLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvbiwgbV9zcmNSZWN0LCBtX29wLCBtX2JsZW5k
TW9kZSwgbV9vcmllbnRhdGlvbik7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCit7CisgICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICAvLyBGSVhNRTog
ZHVtcCBtb3JlIHN0dWZmLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVt
LnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGlu
YXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorCitEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4o
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkRyYXdQYXR0ZXJuKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fcGF0dGVyblRy
YW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKQorICAgICwgbV90aWxlUmVjdCh0aWxlUmVjdCkKKyAg
ICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCisgICAgLCBtX3BoYXNlKHBoYXNlKQorICAgICwg
bV9zcGFjaW5nKHNwYWNpbmcpCisgICAgLCBtX29wKG9wKQorICAgICwgbV9ibGVuZE1vZGUoYmxl
bmRNb2RlKQoreworfQorCit2b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3UGF0dGVybihtX2ltYWdlLmdldCgp
LCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5UcmFuc2Zvcm0sIG1fcGhhc2UsIG1fc3BhY2luZywgbV9v
cCwgbV9kZXN0aW5hdGlvbiwgbV9ibGVuZE1vZGUpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0ZW0pCit7Cisg
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InBhdHRlcm4tdHJhbnNmb3JtIiwgaXRlbS5wYXR0ZXJuVHJhbnNmb3JtKCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgidGlsZS1yZWN0IiwgaXRlbS50aWxlUmVjdCgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdFJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJwaGFzZSIsIGl0ZW0ucGhhc2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzcGFjaW5nIiwg
aXRlbS5zcGFjaW5nKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3UmVjdDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd1Jl
Y3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UmVjdCYgaXRlbSkKK3sKKyAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJvcmRl
ci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNrbmVzcygpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmU6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBib3VuZHMu
Zml0VG9Qb2ludHMobV9wb2ludDEsIG1fcG9pbnQyKTsKKyAgICByZXR1cm4gYm91bmRzOworfQor
Cit2b2lkIERyYXdMaW5lOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgY29udGV4dC5kcmF3TGluZShtX3BvaW50MSwgbV9wb2ludDIpOworfQorCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmUmIGl0
ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTEiLCBpdGVtLnBvaW50MSgpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoInBvaW50LTIiLCBpdGVtLnBvaW50MigpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK3ZvaWQgRHJhd0xpbmVzRm9yVGV4dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3dpZHRo
cywgbV9wcmludGluZywgbV9kb3VibGVMaW5lcyk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4g
RHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZhbHVlIGVxdWFs
IHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNB
bmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgpIHJldHVybnMuCisKKyAgICBpZiAoIW1fd2lkdGhz
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgRmxvYXRSZWN0IHJl
c3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9rZVdpZHRoKSk7
CisgICAgcmVzdWx0LmluZmxhdGUoMSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNuYXBwaW5nLiBG
SVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhlIENUTSBpbnRv
IGFjY291bnQuCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0aW9uKCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFuY2hvcigpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJ3aWR0aHMiLCBpdGVtLndpZHRocygpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImlzLXBy
aW50aW5nIiwgaXRlbS5pc1ByaW50aW5nKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZG91Ymxl
IiwgaXRlbS5kb3VibGVMaW5lcygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihtX3BvaW50LCBtX3dp
ZHRoLCBtX3N0eWxlKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAorewor
ICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3Ig
ZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KCkgcmV0dXJucy4KKworICAgIEZsb2F0UmVjdCByZXN1bHQobV9wb2ludCwgRmxvYXRTaXplKG1f
d2lkdGgsIGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpKTsKKyAgICByZXN1bHQuaW5mbGF0ZShj
TWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKTsgLy8gQWNjb3VudCBmb3IgIm1pc3NwZWxsaW5nIGRv
dCIgc25hcHBpbmcuCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXImIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK3ZvaWQgRHJhd0VsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LmRyYXdFbGxpcHNlKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYgaXRl
bSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0
dXJuIHRzOworfQorCisvLyBGSVhNRTogc2hhcmUgdGhpcyBjb2RlLgordm9pZCBhZGRDb252ZXhQ
b2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9p
bnQqIHBvaW50cykKK3sKKyAgICBBU1NFUlQobnVtUG9pbnRzID4gMCk7CisKKyAgICBwYXRoLm1v
dmVUbyhwb2ludHNbMF0pOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyAr
K2kpCisgICAgICAgIHBhdGguYWRkTGluZVRvKHBvaW50c1tpXSk7CisgICAgcGF0aC5jbG9zZVN1
YnBhdGgoKTsKK30KKworRHJhd0NvbnZleFBvbHlnb246OkRyYXdDb252ZXhQb2x5Z29uKHNpemVf
dCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlh
c2VkKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdDb252ZXhQb2x5Z29uKQorICAg
ICwgbV9hbnRpYWxpYXNlZChhbnRpYWxpYXNlZCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mUG9pbnRzOyArK2kpCisgICAgICAgIG1fcG9pbnRzLmFwcGVuZChwb2ludHNb
aV0pOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdDb252ZXhQb2x5Z29uOjpsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1
bHQ7CisgICAgZm9yIChhdXRvJiBwb2ludCA6IG1fcG9pbnRzKQorICAgICAgICByZXN1bHQuZXh0
ZW5kKHBvaW50KTsKKyAgICByZXN1bHQuaW5mbGF0ZShtX2FudGlhbGlhc2VkID8gMSA6IDApOyAv
LyBBY2NvdW50IGZvciBhbnRpYWxpYXNpbmcKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IERyYXdDb252ZXhQb2x5Z29uOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgY29udGV4dC5kcmF3Q29udmV4UG9seWdvbihtX3BvaW50cy5zaXplKCksIG1fcG9p
bnRzLmRhdGEoKSwgbV9hbnRpYWxpYXNlZCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Q29udmV4UG9seWdvbiYgaXRlbSkKK3sK
KyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJhbnRpYWxpYXNlZCIsIGl0ZW0uYW50aWFsaWFzZWQoKSk7CisgICAgcmV0dXJuIHRzOwor
fQorCit2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgY29udGV4dC5kcmF3UGF0aChtX3BhdGgpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmIGl0ZW0pCit7Cisg
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKy8vICAgIHRz
LmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IGFkZCBsb2dnaW5n
IGZvciBwYXRocy4KKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0ZvY3VzUmluZ1BhdGg6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRy
YXdGb2N1c1JpbmcobV9wYXRoLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7Cit9CisKK09w
dGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmluZ1BhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdCA9IG1fcGF0aC5m
YXN0Qm91bmRpbmdSZWN0KCk7CisgICAgcmVzdWx0LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdX
aWR0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQorewor
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisvLyAgICB0
cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2lu
ZyBmb3IgcGF0aHMuCisgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K3ZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcmVjdHMsIG1fd2lkdGgsIG1f
b2Zmc2V0LCBtX2NvbG9yKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5n
UmVjdHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAg
RmxvYXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX3JlY3RzKQorICAgICAg
ICByZXN1bHQudW5pdGUocmVjdCk7CisgICAgcmVzdWx0LmluZmxhdGUocGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkK
K3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdHMiLCBpdGVtLnJlY3RzKCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0
IiwgaXRlbS5vZmZzZXQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29s
b3IoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSZWN0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3Qp
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdChtX3Jl
Y3QsIG1fY29sb3IpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoQ29sb3ImIGl0ZW0pCit7CisgICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0u
Y29sb3IoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5m
aWxsUmVjdChtX3JlY3QsIG1fZ3JhZGllbnQuZ2V0KCkpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQm
IGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKKyAgICAvLyBGSVhNRTogbG9nIGdyYWRpZW50LgorICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbENvbXBvc2l0
ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29u
dGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2RlKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxD
b21wb3NpdGVkUmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJhdG9y
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVj
dChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYgaXRlbSkK
K3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJi
bGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lk
IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1f
cm91bmRlZEhvbGVSZWN0LCBtX2NvbG9yKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGVt
KQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicm91bmRlZC1ob2xlLXJlY3QiLCBpdGVtLnJvdW5kZWRIb2xlUmVjdCgpKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK3ZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LmZpbGxQYXRoKG1fcGF0aCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkKK3sKKyAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworLy8gICAgdHMu
ZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5n
LgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbEVsbGlwc2UobV9yZWN0
KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZpbGxFbGxpcHNlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOworICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VSZWN0
Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0
UmVjdCBib3VuZHMgPSBtX3JlY3Q7CisgICAgYm91bmRzLmV4cGFuZChtX2xpbmVXaWR0aCwgbV9s
aW5lV2lkdGgpOworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQgU3Ryb2tlUmVjdDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc3Ryb2tl
UmVjdChtX3JlY3QsIG1fbGluZVdpZHRoKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0ZW0pCit7CisgICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLXdp
ZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCitPcHRpb25hbDxG
bG9hdFJlY3Q+IFN0cm9rZVBhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIHN0cm9rZSB0aGlj
a25lc3MgaW50byBhY2NvdW50IGNvcnJlY3RseSwgdmlhIENHUGF0aEJ5U3Ryb2tpbmdQYXRoKCku
CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsK
KworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7CisgICAgYm91
bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgYm91bmRz
Lm1vdmVCeShtX2Jsb2NrTG9jYXRpb24pOworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQg
U3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IEZsb2F0U2l6ZSBvZmZzZXQgPSB0b0Zsb2F0U2l6ZShtX2Jsb2NrTG9jYXRpb24pOworICAgIG1f
cGF0aC50cmFuc2xhdGUob2Zmc2V0KTsKKyAgICBjb250ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsK
KyAgICBtX3BhdGgudHJhbnNsYXRlKC1vZmZzZXQpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKK3sKKyAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7CisvLyAg
ICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBwYXRoIGxv
Z2dpbmcuCisgICAgcmV0dXJuIHRzOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IFN0cm9rZUVs
bGlwc2U6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygp
OworCisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKKyAgICBib3VuZHMuZXhwYW5kKHN0
cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICByZXR1cm4gYm91bmRzOworfQor
Cit2b2lkIFN0cm9rZUVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LnN0cm9rZUVsbGlwc2UobV9yZWN0KTsKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUVsbGlwc2Um
IGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJu
IHRzOworfQorCit2b2lkIENsZWFyUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAoreworICAgIGNvbnRleHQuY2xlYXJSZWN0KG1fcmVjdCk7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0
ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRz
OworfQorCit2b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
bV9vcGFjaXR5KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXImIGl0ZW0pCit7CisgICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoIm9wYWNpdHkiLCBpdGVtLm9wYWNpdHkoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lk
IEVuZFRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworfQorCit2b2lkIEFw
cGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuYXBwbHlTdHJva2VQYXR0ZXJuKCk7Cit9CisKK3ZvaWQgQXBwbHlGaWxs
UGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQuYXBwbHlGaWxsUGF0dGVybigpOworfQorCit2b2lkIEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0
LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9zY2FsZUZhY3Rvcik7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBBcHBseURldmljZVNjYWxl
RmFjdG9yJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2NhbGUtZmFjdG9yIiwgaXRl
bS5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6IHRzIDw8ICJyZXN0b3JlIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB0cyA8PCAidHJhbnNsYXRlIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB0cyA8PCAicm90YXRlIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50YXRlLWN0bSI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB0cyA8PCAic2V0LXN0YXRlIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogdHMgPDwgInNldC1saW5lLWNhcCI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB0cyA8PCAic2V0LWxpbmUtZGFz
aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOiB0cyA8PCAic2V0LWxp
bmUtam9pbiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHRzIDw8
ICJzZXQtbWl0ZXItbGltaXQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOiB0cyA8
PCAiY2xpcCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHRzIDw8ICJjbGlw
LW91dCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHRzIDw8ICJj
bGlwLW91dC10by1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHRz
IDw8ICJjbGlwLXBhdGgiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9s
eWdvbjogdHMgPDwgImNsaXAtY29udmV4LXBvbHlnb24iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3R2x5cGhzOiB0cyA8PCAiZHJhdy1nbHlwaHMiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3SW1hZ2U6IHRzIDw8ICJkcmF3LWltYWdlIjsgYnJlYWs7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHRzIDw8ICJkcmF3LXRpbGVkLWltYWdlIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHRzIDw8ICJkcmF3LXRp
bGVkLXNjYWxlZC1pbWFnZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJ
bWFnZTogdHMgPDwgImRyYXctbmF0aXZlLWltYWdlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1BhdHRlcm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDogdHMgPDwgImRyYXctcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lOiB0cyA8PCAiZHJhdy1saW5lIjsgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogdHMgPDwgImRyYXctbGluZXMtZm9yLXRleHQiOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOiB0cyA8PCAi
ZHJhdy1saW5lcy1mb3ItZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0VsbGlwc2U6IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjogdHMgPDwgImRyYXctY29udmV4LXBvbGdvbiI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB0cyA8PCAiZHJhdy1wYXRoIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6IHRzIDw8ICJkcmF3LWZv
Y3VzLXJpbmctcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdS
ZWN0czogdHMgPDwgImRyYXctZm9jdXMtcmluZy1yZWN0cyI7IGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmls
bC1yZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29t
cG9zaXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0Ijsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8
ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUGF0aDogdHMgPDwgImZpbGwtcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxFbGxpcHNlOiB0cyA8PCAiZmlsbC1lbGxpcHNlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUGF0aDogdHMgPDwgInN0cm9rZS1wYXRoIjsgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogdHMgPDwgInN0cm9rZS1lbGxpcHNlIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OiB0cyA8PCAiY2xlYXItcmVjdCI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHRzIDw8ICJiZWdp
bi10cmFuc3BhcmVuY3ktbGF5ZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFu
c3BhcmVuY3lMYXllcjogdHMgPDwgImVuZC10cmFuc3BhcmVuY3ktbGF5ZXIiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHRzIDw8ICJhcHBseS1zdHJva2Ut
cGF0dGVybiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRz
IDw8ICJhcHBseS1maWxsLXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yOiB0cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93
IjsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbSYgaXRlbSkKK3sKKyAgICBUZXh0U3RyZWFt
OjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0cyA8PCBpdGVtLnR5cGUoKTsKKworICAgIC8v
IEZJWE1FOiBNYWtlIGEgbWFjcm8gd2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVu
dW1lcmF0aW9uIHN3aXRjaGVzCisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2Ug
SXRlbVR5cGU6OlNhdmU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNhdmU+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHRzIDw8
IGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlJvdGF0ZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Um90YXRlPihpdGVtKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHRzIDw8IGRv
d25jYXN0PFNjYWxlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihp
dGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PFNldFN0YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGlu
ZUNhcD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldE1pdGVyTGlt
aXQ+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAg
ICAgICB0cyA8PCBkb3duY2FzdDxDbGlwPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dD4oaXRl
bSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KGl0ZW0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
Q2xpcFBhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
Q29udmV4UG9seWdvbjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcENvbnZleFBvbHlnb24+
KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgor
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxE
cmF3SW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRJbWFnZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgICAgICB0cyA8PCBkb3duY2Fz
dDxEcmF3UGF0dGVybj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxEcmF3TGluZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0Zv
clRleHQ+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0VsbGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0NvbnZleFBvbHlnb246Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdDb252ZXhQb2x5Z29uPihpdGVtKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PERyYXdQYXRoPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQ
YXRoPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1JlY3RzOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0
ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJl
Y3RXaXRoR3JhZGllbnQ+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3Np
dGVkUmVjdD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
b3VuZGVkUmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVt
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihp
dGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxF
bGxpcHNlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
UmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgIHRzIDw8IGRv
d25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNl
PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0Ogor
ICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICB0cyA8
PCBkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgdHMg
PDwgZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7CisgICAgICAgIGJyZWFr
OworCisgICAgLy8gSXRlbXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCisgICAgY2FzZSBJdGVt
VHlwZTo6UmVzdG9yZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworfQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNlMmRjM2QyMDdhNWRhYzljNDcyZWE3
OTAwMjFjNDdhMDkyNjA4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTAsMCArMSwx
NDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgRGlzcGxheUxpc3RJdGVtc19oCisjZGVmaW5lIERpc3BsYXlMaXN0SXRlbXNfaAorCisj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkZsb2F0Um91bmRlZFJlY3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5o
PgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0U3RyZWFt
Oworc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOworCituYW1lc3BhY2UgRGlzcGxheUxpc3Qg
eworCitlbnVtIGNsYXNzIEl0ZW1UeXBlIHsKKyAgICBTYXZlLAorICAgIFJlc3RvcmUsCisgICAg
VHJhbnNsYXRlLAorICAgIFJvdGF0ZSwKKyAgICBTY2FsZSwKKyAgICBDb25jYXRlbmF0ZUNUTSwK
KyAgICBTZXRTdGF0ZSwKKyAgICBTZXRMaW5lQ2FwLAorICAgIFNldExpbmVEYXNoLAorICAgIFNl
dExpbmVKb2luLAorICAgIFNldE1pdGVyTGltaXQsCisgICAgQ2xlYXJTaGFkb3csCisgICAgQ2xp
cCwKKyAgICBDbGlwT3V0LAorICAgIENsaXBPdXRUb1BhdGgsCisgICAgQ2xpcFBhdGgsCisgICAg
Q2xpcENvbnZleFBvbHlnb24sCisgICAgRHJhd0dseXBocywKKyAgICBEcmF3SW1hZ2UsCisgICAg
RHJhd1RpbGVkSW1hZ2UsCisgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UsCisgICAgRHJhd05hdGl2
ZUltYWdlLAorICAgIERyYXdQYXR0ZXJuLAorICAgIERyYXdSZWN0LAorICAgIERyYXdMaW5lLAor
ICAgIERyYXdMaW5lc0ZvclRleHQsCisgICAgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciwKKyAg
ICBEcmF3RWxsaXBzZSwKKyAgICBEcmF3Q29udmV4UG9seWdvbiwKKyAgICBEcmF3UGF0aCwKKyAg
ICBEcmF3Rm9jdXNSaW5nUGF0aCwKKyAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRmlsbFJl
Y3QsCisgICAgRmlsbFJlY3RXaXRoQ29sb3IsCisgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCisg
ICAgRmlsbENvbXBvc2l0ZWRSZWN0LAorICAgIEZpbGxSb3VuZGVkUmVjdCwKKyAgICBGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSwKKyAgICBGaWxsUGF0aCwKKyAgICBGaWxsRWxsaXBzZSwKKyAgICBT
dHJva2VSZWN0LAorICAgIFN0cm9rZVBhdGgsCisgICAgU3Ryb2tlRWxsaXBzZSwKKyAgICBDbGVh
clJlY3QsCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAgICBFbmRUcmFuc3BhcmVuY3lM
YXllciwKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEg
cmVjb3JkZWQgaXRlbS4KKyAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5v
dCBiZSBhIHJlY29yZGVkIGl0ZW0uCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKK307CisK
K2NsYXNzIEl0ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxJdGVtPiB7CitwdWJsaWM6CisgICAgSXRl
bSgpID0gZGVsZXRlOworCisgICAgSXRlbShJdGVtVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlw
ZSh0eXBlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5JdGVtKCkgeyB9CisKKyAgICBJ
dGVtVHlwZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGU7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Rpc3BsYXlMaXN0SXRlbSA9IHRydWU7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgCisgICAgLy8gQSBzdGF0ZSBpdGVtIGlzIG9uZSBwcmVzZXJ2ZWQgYnkgU2F2ZS9SZXN0
b3JlLgorICAgIGJvb2wgaXNTdGF0ZUl0ZW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzU3RhdGVJdGVtVHlwZShtX3R5cGUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzU3Rh
dGVJdGVtVHlwZShJdGVtVHlwZSBpdGVtVHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaXRl
bVR5cGUpIHsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFRyYW5zbGF0ZToKKyAgICAgICAgY2Fz
ZSBJdGVtVHlwZTo6IFJvdGF0ZToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNjYWxlOgorICAg
ICAgICBjYXNlIEl0ZW1UeXBlOjogQ29uY2F0ZW5hdGVDVE06CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OiBTZXRTdGF0ZToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVDYXA6CisgICAg
ICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lRGFzaDoKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
IFNldExpbmVKb2luOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TWl0ZXJMaW1pdDoKKyAg
ICAgICAgY2FzZSBJdGVtVHlwZTo6IENsZWFyU2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworI2lmICFkZWZpbmVkKE5ERUJVRykg
fHwgIUxPR19ESVNBQkxFRAorICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0Owor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgSXRlbVR5cGUgbV90eXBlOworfTsKKworY2xhc3MgRHJh
d2luZ0l0ZW0gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgRHJhd2luZ0l0ZW0oSXRlbVR5
cGUgdHlwZSkKKyAgICAgICAgOiBJdGVtKHR5cGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
c2V0RXh0ZW50KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KKyAgICBjb25z
dCBGbG9hdFJlY3QmIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0K
KworICAgIGJvb2wgZXh0ZW50S25vd24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29s
PihtX2V4dGVudCk7IH0KKworICAgIC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9w
ZXJhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KKyAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVm
ZmV0cyBvZiB0cmFuc2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0YXRlLgorICAgIHZpcnR1YWwg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBOdWxsb3B0OyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlz
RHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IG1fZXh0ZW50OyAvLyBJbiBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93cyBh
bmQgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCit9OworCitjbGFzcyBTYXZlIDogcHVibGljIEl0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOworICAgIH0KKworICAgIC8vIEluZGV4IGlu
IHRoZSBkaXNwbGF5IGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcgUmVzdG9yZSBpdGVtLiAwIGlm
IHVubWF0Y2hlZC4KKyAgICBzaXplX3QgcmVzdG9yZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9y
ZXN0b3JlSW5kZXg7IH0KKyAgICB2b2lkIHNldFJlc3RvcmVJbmRleChzaXplX3QgaW5kZXgpIHsg
bV9yZXN0b3JlSW5kZXggPSBpbmRleDsgfQorCitwcml2YXRlOgorICAgIFNhdmUoKQorICAgICAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNhdmUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBzaXpl
X3QgbV9yZXN0b3JlSW5kZXggeyAwIH07Cit9OworCitjbGFzcyBSZXN0b3JlIDogcHVibGljIEl0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVzdG9yZT4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlc3RvcmUpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZXN0b3JlKCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpSZXN0b3JlKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Cit9OworCitjbGFzcyBUcmFuc2xhdGUgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxUcmFuc2xhdGU+IGNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJhbnNsYXRlKHgsIHkpKTsKKyAgICB9
CisKKyAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CisgICAgZmxvYXQgeSgpIGNv
bnN0IHsgcmV0dXJuIG1feTsgfQorCitwcml2YXRlOgorICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKKyAgICAgICAgLCBt
X3goeCkKKyAgICAgICAgLCBtX3koeSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV94
OworICAgIGZsb2F0IG1feTsKK307CisKK2NsYXNzIFJvdGF0ZSA6IHB1YmxpYyBJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJvdGF0ZT4gY3JlYXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5z
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUm90YXRlKGFuZ2xlSW5SYWRp
YW5zKSk7CisgICAgfQorCisgICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xl
OyB9CisKK3ByaXZhdGU6CisgICAgUm90YXRlKGZsb2F0IGFuZ2xlKQorICAgICAgICA6IEl0ZW0o
SXRlbVR5cGU6OlJvdGF0ZSkKKyAgICAgICAgLCBtX2FuZ2xlKGFuZ2xlKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBmbG9hdCBtX2FuZ2xlOyAvLyBJbiByYWRpYW5zLgorfTsKKworY2xhc3MgU2Nh
bGUgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTY2FsZT4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNjYWxlKHNpemUpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIFNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTY2FsZSkKKyAgICAgICAg
LCBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRTaXplIG1fc2l6ZTsK
K307CisKK2NsYXNzIENvbmNhdGVuYXRlQ1RNIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8Q29uY2F0ZW5hdGVDVE0+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdHJpeCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbmNhdGVuYXRl
Q1RNKG1hdHJpeCkpOworICAgIH0KKworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKworcHJpdmF0ZToKKyAgICBDb25j
YXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKworICAgIHZpcnR1YWwgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKK307CisKK2NsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGZsYWdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0U3RhdGUoc3Rh
dGUsIGZsYWdzKSk7CisgICAgfQorICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIHZvaWQgYWNj
dW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKTsKKworICAgIHZvaWQgYWNjdW11bGF0ZShHcmFwaGljc0NvbnRl
eHRTdGF0ZSYpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgYXBwbHlTdGF0ZShHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKTsKKworICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMo
VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworcHJpdmF0ZToKKyAgICBTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQorICAg
ICAgICAsIG1fc3RhdGUoc3RhdGUsIGZsYWdzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRlOworfTsKKworY2xhc3MgU2V0TGluZUNhcCA6
IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0
ZShMaW5lQ2FwIGxpbmVDYXApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRMaW5lQ2FwKGxpbmVDYXApKTsKKyAgICB9CisgICAgCisgICAgTGluZUNhcCBsaW5lQ2FwKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9CisKK3ByaXZhdGU6CisgICAgU2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkKKyAg
ICAgICAgLCBtX2xpbmVDYXAobGluZUNhcCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTGluZUNh
cCBtX2xpbmVDYXA7Cit9OworCitjbGFzcyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5
JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKKyAgICB9CisK
KyAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFy
cmF5OyB9CisgICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNl
dDsgfQorCitwcml2YXRlOgorICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFy
cmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVE
YXNoKQorICAgICAgICAsIG1fZGFzaEFycmF5KGRhc2hBcnJheSkKKyAgICAgICAgLCBtX2Rhc2hP
ZmZzZXQoZGFzaE9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRGFzaEFycmF5IG1fZGFz
aEFycmF5OworICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKK307CisKK2NsYXNzIFNldExpbmVKb2lu
IDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2V0TGluZUpvaW4+IGNy
ZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNldExpbmVKb2luKGxpbmVKb2luKSk7CisgICAgfQorICAgIAorICAgIExpbmVKb2luIGxp
bmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQorCitwcml2YXRlOgorICAgIFNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNl
dExpbmVKb2luKQorICAgICAgICAsIG1fbGluZUpvaW4obGluZUpvaW4pCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIExpbmVKb2luIG1fbGluZUpvaW47Cit9OworCitjbGFzcyBTZXRNaXRlckxpbWl0
IDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1pdD4g
Y3JlYXRlKGZsb2F0IGxpbWl0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2V0TWl0ZXJMaW1pdChsaW1pdCkpOworICAgIH0KKworICAgIGZsb2F0IG1pdGVyTGltaXQoKSBj
b25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KKworcHJpdmF0ZToKKyAgICBTZXRNaXRlckxp
bWl0KGZsb2F0IG1pdGVyTGltaXQpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TWl0ZXJM
aW1pdCkKKyAgICAgICAgLCBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgZmxvYXQgbV9taXRlckxpbWl0OworfTsKKworY2xhc3MgQ2xlYXJTaGFkb3cgOiBw
dWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGVhclNoYWRvdz4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyU2hhZG93KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQ2xlYXJTaGFkb3coKQorICAgICAgICA6IEl0ZW0oSXRlbVR5
cGU6OkNsZWFyU2hhZG93KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCisvLyBGSVhNRTogdHJlYXQg
YXMgRHJhd2luZ0l0ZW0/CitjbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8Q2xpcD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXAocmVjdCkpOworICAgIH0KKworICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAg
Q2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xp
cCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRS
ZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIENsaXBPdXQgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxDbGlwT3V0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dChyZWN0KSk7CisgICAg
fQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJp
dmF0ZToKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDbGlwT3V0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgQ2xpcE91dFRvUGF0aCA6
IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXBPdXRUb1BhdGg+IGNy
ZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ2xpcE91dFRvUGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIENsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRo
KQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBQYXRoIG1f
cGF0aDsKK307CisKK2NsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3
aW5kUnVsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBQYXRoKHBh
dGgsIHdpbmRSdWxlKSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQorICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1cm4g
bV93aW5kUnVsZTsgfQorCitwcml2YXRlOgorICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHdpbmRSdWxlKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQor
ICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFBhdGggbV9wYXRoOworICAgIFdpbmRSdWxlIG1fd2luZFJ1
bGU7Cit9OworCitjbGFzcyBDbGlwQ29udmV4UG9seWdvbiA6IHB1YmxpYyBJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPENsaXBDb252ZXhQb2x5Z29uPiBjcmVhdGUoc2l6ZV90IG51bWJl
ck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwQ29udmV4UG9seWdvbihudW1i
ZXJPZlBvaW50cywgcG9pbnRzLCBhbnRpYWxpYXNlZCkpOworICAgIH0KKworICAgIGNvbnN0IFZl
Y3RvcjxGbG9hdFBvaW50PiYgcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludHM7IH0KKyAg
ICBib29sIGFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fYW50aWFsaWFzOyB9CisKK3ByaXZh
dGU6CisgICAgQ2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBG
bG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXNlZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8RmxvYXRQb2lu
dD4gbV9wb2ludHM7CisgICAgYm9vbCBtX2FudGlhbGlhczsKK307CisKK2NsYXNzIERyYXdHbHlw
aHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0ds
eXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxB
bmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNv
dW50LCBibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOworICAgIH0K
KworICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2Jsb2NrTG9jYXRpb247IH0KKyAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9
CisKKyAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbEFuY2hvcjsgfQorCisgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KKworICAgIGNvbnN0IFZlY3Rv
cjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBo
czsgfQorCitwcml2YXRlOgorICAgIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUpOworCisgICAgdm9pZCBjb21wdXRlQm91bmRzKCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBHbHlwaEJ1ZmZlciBnZW5lcmF0
ZUdseXBoQnVmZmVyKCkgY29uc3Q7CisKKyAgICBSZWY8Rm9udD4gbV9mb250OworICAgIFZlY3Rv
cjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOworICAgIFZlY3RvcjxHbHlwaEJ1ZmZl
ckFkdmFuY2UsIDEyOD4gbV9hZHZhbmNlczsKKyAgICBGbG9hdFJlY3QgbV9ib3VuZHM7CisgICAg
RmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247CisgICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7
CisgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlOworfTsKKworY2xhc3MgRHJh
d0ltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERy
YXdJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlv
bnMpKTsKKyAgICB9CisKKyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X2ltYWdlLmdldCgpOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlOyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgorICAgIERyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGVzdGluYXRpb247IH0KKworICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAv
LyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJv
Z3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KKyAgICBGbG9hdFJlY3Qg
bV9kZXN0aW5hdGlvbjsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CisgICAgSW1hZ2VQYWludGlu
Z09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKK307CisKK2NsYXNzIERyYXdUaWxlZElt
YWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdU
aWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFj
aW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIH0KKworICAgIGNvbnN0IEltYWdlJiBp
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBGbG9hdFBvaW50IHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAgRmxvYXRTaXplIHRp
bGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQorICAgIEZsb2F0U2l6ZSBzcGFj
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBtdXRhYmxl
IFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0
aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11
dGFibGUuCisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRQb2ludCBtX3Nv
dXJjZTsKKyAgICBGbG9hdFNpemUgbV90aWxlU2l6ZTsKKyAgICBGbG9hdFNpemUgbV9zcGFjaW5n
OworICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7Cit9Owor
CitjbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1
bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd1RpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2Fs
ZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIH0KKwor
ICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0K
KyAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBG
bG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisK
K3ByaXZhdGU6CisgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworICAgIG11dGFibGUgUmVm
PEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWly
IGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJs
ZS4KKyAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2U7
CisgICAgRmxvYXRTaXplIG1fdGlsZVNjYWxlRmFjdG9yOworICAgIEltYWdlOjpUaWxlUnVsZSBt
X2hSdWxlOworICAgIEltYWdlOjpUaWxlUnVsZSBtX3ZSdWxlOworICAgIEltYWdlUGFpbnRpbmdP
cHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7Cit9OworCitjbGFzcyBEcmF3TmF0aXZlSW1h
Z2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd05h
dGl2ZUltYWdlPiBjcmVhdGUoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwg
SW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdOYXRpdmVJbWFnZShpbWFnZVB0ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pKTsKKyAgICB9CisKKyAgICBGbG9h
dFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CisgICAgRmxvYXRSZWN0
IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCitwcml2YXRl
OgorICAgIERyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6
ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsg
fQorCisjaWYgVVNFKENHKQorICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2ltYWdlUHRyOwor
I2VuZGlmCisgICAgRmxvYXRTaXplIG1faW1hZ2VTaXplOworICAgIEZsb2F0UmVjdCBtX2Rlc3Rp
bmF0aW9uOworICAgIEZsb2F0UmVjdCBtX3NyY1JlY3Q7CisgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
bV9vcDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uOworfTsKKworY2xhc3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3UGF0dGVybihpbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSkpOworICAgIH0KKworICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Bh
dHRlcm5UcmFuc2Zvcm07IH0KKyAgICBGbG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVSZWN0OyB9CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQorICAgIEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBt
X3BoYXNlOyB9CisgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNp
bmc7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAg
bXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4g
Y2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0
byBiZSBtdXRhYmxlLgorICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07Cisg
ICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Cisg
ICAgRmxvYXRQb2ludCBtX3BoYXNlOworICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7CisgICAgQ29t
cG9zaXRlT3BlcmF0b3IgbV9vcDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCisv
LyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5
ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCitjbGFzcyBCZWdpblRyYW5zcGFyZW5j
eUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7
CisgICAgfQorCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsg
fQorCitwcml2YXRlOgorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
KyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikK
KyAgICAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxv
YXQgbV9vcGFjaXR5OworfTsKKworY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RW5kVHJhbnNwYXJlbmN5TGF5
ZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbmRUcmFu
c3BhcmVuY3lMYXllcik7CisgICAgfQorCitwcml2YXRlOgorICAgIEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKK2NsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdSZWN0PiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKKyAg
ICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAg
IGZsb2F0IGJvcmRlclRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNz
OyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdS
ZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fYm9yZGVyVGhpY2tuZXNz
KGJvcmRlclRoaWNrbmVzcykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxv
YXQgbV9ib3JkZXJUaGlja25lc3M7Cit9OworCitjbGFzcyBEcmF3TGluZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZT4gY3JlYXRlKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKKyAg
ICB9CisKKyAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQxOyB9
CisgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MjsgfQorCitw
cml2YXRlOgorICAgIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGlu
ZSkKKyAgICAgICAgLCBtX3BvaW50MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQy
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxv
YXRQb2ludCBtX3BvaW50MTsKKyAgICBGbG9hdFBvaW50IG1fcG9pbnQyOworfTsKKworY2xhc3Mg
RHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChi
bG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMs
IHN0cm9rZVdpZHRoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2Nh
dGlvbjsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrTG9jYXRpb247IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9y
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQorICAgIEZsb2F0UG9pbnQgcG9pbnQo
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9CisgICAg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoczsgfQorICAg
IGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KKyAgICBib29s
IGRvdWJsZUxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQorCitwcml2YXRl
OgorICAgIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwg
Y29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRoKQorICAgICAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0KQorICAgICAgICAsIG1f
YmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQorICAgICAgICAsIG1fbG9jYWxBbmNob3IobG9j
YWxBbmNob3IpCisgICAgICAgICwgbV93aWR0aHMod2lkdGhzKQorICAgICAgICAsIG1fc3Ryb2tl
V2lkdGgoc3Ryb2tlV2lkdGgpCisgICAgICAgICwgbV9wcmludGluZyhwcmludGluZykKKyAgICAg
ICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJsZUxpbmVzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsK
KyAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKKyAgICBEYXNoQXJyYXkgbV93aWR0aHM7Cisg
ICAgZmxvYXQgbV9zdHJva2VXaWR0aDsKKyAgICBib29sIG1fcHJpbnRpbmc7CisgICAgYm9vbCBt
X2RvdWJsZUxpbmVzOworfTsKKworY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRo
LCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihw
b2ludCwgd2lkdGgsIHN0eWxlKSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KKyAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcikKKyAgICAgICAgLCBtX3BvaW50KHBvaW50KQor
ICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRQb2lu
dCBtX3BvaW50OworICAgIGZsb2F0IG1fd2lkdGg7CisgICAgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOworfTsKKworY2xhc3MgRHJhd0VsbGlwc2UgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRS
ZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIERyYXdDb252ZXhQb2x5Z29uIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdDb252ZXhQb2x5Z29uPiBjcmVh
dGUoc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wg
YW50aWFsaWFzZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Q29u
dmV4UG9seWdvbihudW1iZXJPZlBvaW50cywgcG9pbnRzLCBhbnRpYWxpYXNlZCkpOworICAgIH0K
KworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgcG9pbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludHM7IH0KKyAgICBib29sIGFudGlhbGlhc2VkKCkgY29uc3QgeyByZXR1cm4gbV9hbnRp
YWxpYXNlZDsgfQorCitwcml2YXRlOgorICAgIERyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1i
ZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBtX3BvaW50
czsKKyAgICBib29sIG1fYW50aWFsaWFzZWQ7Cit9OworCitjbGFzcyBEcmF3UGF0aCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3UGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3UGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQorICAgICAgICAs
IG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorCisgICAgUGF0aCBtX3Bh
dGg7Cit9OworCitjbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0
IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0
aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV93aWR0aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRl
OgorICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAg
LCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBt
X2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBQYXRoIG1fcGF0aDsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9vZmZz
ZXQ7CisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNS
aW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4gcmVjdHMoKSBjb25zdCB7
IHJldHVybiBtX3JlY3RzOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIENv
bG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzKQorICAgICAgICAsIG1fcmVjdHMocmVjdHMpCisg
ICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
ICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgVmVjdG9yPEludFJlY3Q+IG1fcmVjdHM7CisgICAgaW50IG1fd2lk
dGg7CisgICAgaW50IG1fb2Zmc2V0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBG
aWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxG
aWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIEZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RmlsbFJlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworfTsKKworLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5oZXJpdCBmcm9tIEZpbGxS
ZWN0IHByb3Blci4KK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aENvbG9yPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcikpOworICAg
IH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAg
Q29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6CisgICAg
RmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yKQor
ICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisK
KyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBG
aWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKKyAgICB9CisKKyAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgor
ICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2dyYWRpZW50KGdy
YWRpZW50KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBtdXRhYmxlIFJlZjxH
cmFkaWVudD4gbV9ncmFkaWVudDsgLy8gRklYTUU6IE1ha2UgdGhpcyBub3QgbXV0YWJsZQorfTsK
KworY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOworICAgIH0KKwor
ICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgQ29sb3Ig
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgQmxlbmRNb2Rl
IGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CisKK3ByaXZhdGU6Cisg
ICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAg
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0KQorICAgICAgICAs
IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9vcChv
cCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9v
cDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCitjbGFzcyBGaWxsUm91bmRlZFJl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJv
dW5kZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9k
ZTsgfQorCitwcml2YXRlOgorICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAg
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKKyAgICAgICAgLCBt
X3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICAgICAsIG1fYmxlbmRN
b2RlKGJsZW5kTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisKKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVj
dDsKKyAgICBDb2xvciBtX2NvbG9yOworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKK307CisK
K2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
KTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQorICAgICAgICAsIG1fcmVjdChyZWN0
KQorICAgICAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBGbG9h
dFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OworICAgIENvbG9yIG1fY29sb3I7Cit9Owor
CitjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29u
c3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAg
IEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkZpbGxQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCk7IH0KKworICAgIFBhdGggbV9wYXRoOworfTsKKworY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworfTsKKworY2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOworICAgIH0KKworICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgZmxvYXQgbGluZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQor
ICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxvYXQg
bV9saW5lV2lkdGg7Cit9OworCitjbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRo
JiBwYXRoLCBjb25zdCBGbG9hdFBvaW50JiBtX2Jsb2NrTG9jYXRpb24pCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VQYXRoKHBhdGgsIG1fYmxvY2tMb2NhdGlvbikp
OworICAgIH0KKworICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KKyAgICBj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xv
Y2F0aW9uOyB9CisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQorCitwcml2YXRlOgorICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
U3Ryb2tlUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX2Jsb2NrTG9j
YXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIG11dGFibGUgUGF0aCBtX3BhdGg7CisgICAgRmxvYXRQb2ludCBtX2Js
b2NrTG9jYXRpb247Cit9OworCitjbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZUVsbGlwc2U+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
dHJva2VFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNz
IENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxDbGVhclJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkpOworICAgIH0KKworICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAg
Q2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6Q2xlYXJSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAg
RmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5U3Ryb2tlUGF0
dGVybik7CisgICAgfQorCitwcml2YXRlOgorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigpCisgICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuKQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
Cit9OworCitjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIDogcHVibGljIEl0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RmlsbFBhdHRlcm4pOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBBcHBseUZpbGxQYXR0ZXJuKCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCisKK2NsYXNzIEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBcHBs
eURldmljZVNjYWxlRmFjdG9yPiBjcmVhdGUoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFj
dG9yKSk7CisgICAgfQorCisgICAgZmxvYXQgc2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlRmFjdG9yOyB9CisKK3ByaXZhdGU6CisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBzY2FsZUZhY3RvcikKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseURldmljZVNj
YWxlRmFjdG9yKQorICAgICAgICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7Cit9OworCisvLyBGSVhNRTogdGhp
cyBuZWVkcyB0byBtb3ZlLgordm9pZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmLCBzaXpl
X3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50Kik7CisKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0mKTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxp
c3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRv
VmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbSYgb2JqZWN0KSB7IHJldHVybiBvYmplY3QucHJlZGljYXRlOyB9IFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9EUkFXSU5HSVRFTShEcmF3aW5nSXRlbSwgaXNEcmF3aW5nSXRlbSgpKQorCisj
ZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUb1ZhbHVlVHlw
ZU5hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSkgeyByZXR1cm4gaXRlbS50eXBlKCkgPT0gV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUb1ZhbHVlVHlwZU5hbWU7IH0gXAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oU2F2ZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShS
ZXN0b3JlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRyYW5zbGF0
ZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShSb3RhdGUpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2NhbGUpCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ29uY2F0ZW5hdGVDVE0pCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3RhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUNhcCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRMaW5lRGFzaCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShTZXRMaW5lSm9pbikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTZXRNaXRlckxpbWl0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKENsaXApCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
Q2xpcE91dCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0
VG9QYXRoKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBQYXRo
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBDb252ZXhQb2x5
Z29uKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdHbHlwaHMp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdlKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZEltYWdlKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZFNjYWxlZEltYWdl
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdOYXRpdmVJbWFn
ZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0dGVybikK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZSkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlwc2UpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0NvbnZleFBvbHlnb24p
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1JlY3Rz
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9yKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRp
ZW50KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3Np
dGVkUmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91
bmRlZFJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRmlsbFBhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmls
bEVsbGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tl
UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRo
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2Up
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJl
bmN5TGF5ZXIpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlT
dHJva2VQYXR0ZXJuKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFw
cGx5RmlsbFBhdHRlcm4pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShDbGVhclNoYWRvdykKKworI2VuZGlmIC8vIERpc3BsYXlMaXN0SXRlbXNfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3MjIwNzkw
NjEzNGRlMjgxYTgwZWZlNzE0MzBlNTdmMThhYzYyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKQEAgLTAsMCArMSw0ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVjb3JkZXIuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
KworUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxp
c3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGJhc2VDVE0pCisgICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQor
ICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0o
RGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdpdGggY2xpcCAiIDw8IGluaXRp
YWxDbGlwKTsKKworICAgIC8vIEZJWE1FOiBob29rIHVwIHJlY29yZGVyIGluIHRoZSBHcmFwaGlj
c0NvbnRleHQuCisgICAgLy8gbV9ncmFwaGljc0NvbnRleHQuc2V0RGlzcGxheUxpc3RSZWNvcmRl
cih0aGlzKTsKKyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKENvbnRleHRTdGF0ZShiYXNlQ1RNLCBp
bml0aWFsQ2xpcCkpOworfQorCitSZWNvcmRlcjo6flJlY29yZGVyKCkKK3sKKyAgICBBU1NFUlQo
bV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVz
IG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgorICAgIExPRyhEaXNwbGF5TGlzdHMsICJSZWNvcmRl
ZCBkaXNwbGF5IGxpc3Q6XG4lcyIsIG1fZGlzcGxheUxpc3QuZGVzY3JpcHRpb24oKS5kYXRhKCkp
OworfQorCit2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQor
eworICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKSB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlw
ZTo6QXBwbHlTdHJva2VQYXR0ZXJuIHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0
cm9rZVBhdHRlcm4pIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRl
Q2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRl
Q2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUp
OworICAgICAgICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsKKyAgICAgICAgICAgIExPR19X
SVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBz
dGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRl
LCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOworICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBl
bmQoU2V0U3RhdGU6OmNyZWF0ZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0
U3RhdGUpKTsKKyAgICAgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKKyAg
ICAgICAgICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMu
bV9zdGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJh
d2luZyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGZsYWdzKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFj
Y3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3co
KQoreworICAgIGFwcGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit7CisgICAgYXBwZW5kSXRlbShT
ZXRMaW5lQ2FwOjpjcmVhdGUobGluZUNhcCkpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAg
ICBhcHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVhdGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQorewor
ICAgIGFwcGVuZEl0ZW0oU2V0TGluZUpvaW46OmNyZWF0ZShsaW5lSm9pbikpOworfQorCit2b2lk
IFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCit7CisgICAgYXBwZW5k
SXRlbShTZXRNaXRlckxpbWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkpOworfQorCit2b2lkIFJlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgRmxvYXRQb2lu
dCBibG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8gbV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQb2lu
dCgpOworICAgIEZsb2F0U2l6ZSBsb2NhbEFuY2hvciA9IHN0YXJ0UG9pbnQgLSBibG9ja0xvY2F0
aW9uOworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9t
KSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgYmxvY2tMb2NhdGlvbiwg
bG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdJbWFn
ZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9u
cykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVy
OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1h
Z2VQYWludGluZ09wdGlvbnMpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2Fz
dDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlv
bnMpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0
ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNy
ZWF0ZShpbWFnZVB0ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9k
ZSwgb3JpZW50YXRpb24pKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
Cit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlv
bnMpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIERy
YXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJh
d1BhdHRlcm46OmNyZWF0ZShpbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpzYXZlKCkKK3sKKyAgICBhcHBlbmRJ
dGVtKFNhdmU6OmNyZWF0ZSgpKTsKKyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFj
ay5sYXN0KCkuY2xvbmVGb3JTYXZlKG1fZGlzcGxheUxpc3Quc2l6ZSgpIC0gMSkpOworfQorCit2
b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKK3sKKyAgICBpZiAoIW1fc3RhdGVTdGFjay5zaXplKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIHN0YXRlVXNlZEZvckRyYXdpbmcgPSBj
dXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZzsKKyAgICBzaXplX3Qgc2F2ZUluZGV4ID0g
Y3VycmVudFN0YXRlKCkuc2F2ZUl0ZW1JbmRleDsKKyAgICAKKyAgICBtX3N0YXRlU3RhY2sucmVt
b3ZlTGFzdCgpOworICAgIC8vIEhhdmUgdG8gYXZvaWQgZWxpZGluZyBuZXN0ZWQgU2F2ZS9SZXN0
b3JlIHdoZW4gYSBkZXNjZW5kYW50IHN0YXRlIGNvbnRhaW5zIGRyYXdpbmcgaXRlbXMuCisgICAg
Y3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRyYXdpbmcgfD0gc3RhdGVVc2VkRm9yRHJhd2luZzsK
KworICAgIGlmICghc3RhdGVVc2VkRm9yRHJhd2luZyAmJiBzYXZlSW5kZXgpIHsKKyAgICAgICAg
Ly8gVGhpcyBTYXZlL1Jlc3RvcmUgZGlkbid0IGNvbnRhaW4gYW55IGRyYXdpbmcgaXRlbXMuIFJv
bGwgYmFjayB0byBqdXN0IGJlZm9yZSB0aGUgbGFzdCBzYXZlLgorICAgICAgICBtX2Rpc3BsYXlM
aXN0LnJlbW92ZUl0ZW1zRnJvbUluZGV4KHNhdmVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBhcHBlbmRJdGVtKFJlc3RvcmU6OmNyZWF0ZSgpKTsKKyAgICAKKyAgICBpZiAo
c2F2ZUluZGV4KSB7CisgICAgICAgIFNhdmUmIHNhdmVJdGVtID0gZG93bmNhc3Q8U2F2ZT4obV9k
aXNwbGF5TGlzdC5pdGVtQXQoc2F2ZUluZGV4KSk7CisgICAgICAgIHNhdmVJdGVtLnNldFJlc3Rv
cmVJbmRleChtX2Rpc3BsYXlMaXN0LnNpemUoKSAtIDEpOworICAgIH0KK30KKwordm9pZCBSZWNv
cmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgY3VycmVudFN0YXRlKCku
dHJhbnNsYXRlKHgsIHkpOworICAgIGFwcGVuZEl0ZW0oVHJhbnNsYXRlOjpjcmVhdGUoeCwgeSkp
OworfQorCit2b2lkIFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit7Cisg
ICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBhcHBlbmRJdGVt
KFJvdGF0ZTo6Y3JlYXRlKGFuZ2xlSW5SYWRpYW5zKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5zY2FsZShz
aXplKTsKKyAgICBhcHBlbmRJdGVtKFNjYWxlOjpjcmVhdGUoc2l6ZSkpOworfQorCit2b2lkIFJl
Y29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit7Cisg
ICAgY3VycmVudFN0YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgYXBwZW5kSXRlbShD
b25jYXRlbmF0ZUNUTTo6Y3JlYXRlKHRyYW5zZm9ybSkpOworfQorCit2b2lkIFJlY29yZGVyOjpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit7CisgICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0eSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAg
YXBwZW5kSXRlbShFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCkpOworfQorCit2b2lkIFJl
Y29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKERyYXdSZWN0OjpjcmVhdGUocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSkpOwor
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQor
eworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVu
ZEl0ZW0oRHJhd0xpbmU6OmNyZWF0ZShwb2ludDEsIHBvaW50MikpKTsKKyAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQoreworICAgIEZs
b2F0UG9pbnQgYmxvY2tMb2NhdGlvbiA9IG1fY2FjaGluZyA/IG1fYmxvY2tMb2NhdGlvbiA6IEZs
b2F0UG9pbnQoKTsKKyAgICBGbG9hdFNpemUgbG9jYWxBbmNob3IgPSBwb2ludCAtIGJsb2NrTG9j
YXRpb247CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoYmxvY2tMb2NhdGlvbiwgbG9jYWxB
bmNob3IsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MpKSk7
CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lk
dGgsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7Cisg
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocG9pbnQsIHdpZHRoLCBzdHlsZSkp
KTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3RWxsaXBzZTo6Y3Jl
YXRlKHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBG
bG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCit7CisgICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3Q29udmV4UG9s
eWdvbjo6Y3JlYXRlKG51bWJlck9mUG9pbnRzLCBwb2ludHMsIGFudGlhbGlhc2VkKSkpOworICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2Fz
dDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0aDo6Y3JlYXRlKHBhdGgpKSk7CisgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9m
ZnNldCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9p
ZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBp
bnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1
c1JpbmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKSk7Cisg
ICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxs
UmVjdFdpdGhDb2xvcjo6Y3JlYXRlKHJlY3QsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoR3JhZGllbnQ6
OmNyZWF0ZShyZWN0LCBncmFkaWVudCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0p
OworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgb3AsIGJs
ZW5kTW9kZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJl
Y29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJvdW5kZWRS
ZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5n
SXRlbT4oYXBwZW5kSXRlbShGaWxsUGF0aDo6Y3JlYXRlKHBhdGgpKSk7CisgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbEVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CisgICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VS
ZWN0OjpjcmVhdGUocmVjdCwgbGluZVdpZHRoKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3
SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
K3sKKyAgICBGbG9hdFBvaW50IGJsb2NrTG9jYXRpb24gPSBtX2NhY2hpbmcgPyBtX2Jsb2NrTG9j
YXRpb24gOiBGbG9hdFBvaW50KCk7CisgICAgUGF0aCB0cmFuc2xhdGVkID0gcGF0aDsKKyAgICB0
cmFuc2xhdGVkLnRyYW5zbGF0ZSgtRmxvYXRTaXplKGJsb2NrTG9jYXRpb24ueCgpLCBibG9ja0xv
Y2F0aW9uLnkoKSkpOworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oU3Ryb2tlUGF0aDo6Y3JlYXRlKHBhdGgsIGJsb2NrTG9jYXRpb24p
KSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VFbGxpcHNl
OjpjcmVhdGUocmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERy
YXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oQ2xl
YXJSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwor
fQorCit2b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQoreworICAgIGFwcGVuZEl0
ZW0oQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFw
cGx5RmlsbFBhdHRlcm4oKQoreworICAgIGFwcGVuZEl0ZW0oQXBwbHlGaWxsUGF0dGVybjo6Y3Jl
YXRlKCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChyZWN0KTsKKyAgICBh
cHBlbmRJdGVtKENsaXA6OmNyZWF0ZShyZWN0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFwcGVuZEl0ZW0oQ2xpcE91dDo6Y3Jl
YXRlKHJlY3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQoreworICAgIGFwcGVuZEl0ZW0oQ2xpcE91dFRvUGF0aDo6Y3JlYXRlKHBhdGgpKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1
bGUpCit7CisgICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocGF0aC5mYXN0
Qm91bmRpbmdSZWN0KCkpOworICAgIGFwcGVuZEl0ZW0oQ2xpcFBhdGg6OmNyZWF0ZShwYXRoLCB3
aW5kUnVsZSkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwQ29udmV4UG9seWdvbihzaXplX3Qg
bnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzKQorewor
ICAgIFBhdGggcG9seWdvblBhdGg7CisgICAgYWRkQ29udmV4UG9seWdvblRvUGF0aChwb2x5Z29u
UGF0aCwgbnVtUG9pbnRzLCBwb2ludHMpOworICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMu
aW50ZXJzZWN0KHBvbHlnb25QYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7CisKKyAgICBhcHBlbmRJ
dGVtKENsaXBDb252ZXhQb2x5Z29uOjpjcmVhdGUobnVtUG9pbnRzLCBwb2ludHMsIGFudGlhbGlh
cykpOworfQorCit2b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VD
VE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgorICAg
IC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/CisgICAgYXBwZW5kSXRl
bShBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoZGV2aWNlU2NhbGVGYWN0b3IpKTsKK30K
KworSXRlbSYgUmVjb3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKK3sKKyAgICB3
aWxsQXBwZW5kSXRlbShpdGVtLmdldCgpKTsKKyAgICByZXR1cm4gbV9kaXNwbGF5TGlzdC5hcHBl
bmQoV1RGTW92ZShpdGVtKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQo
RHJhd2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMobV9ncmFwaGljc0NvbnRleHQpKQorICAgICAgICBpdGVt
LnNldEV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMocmVjdC52YWx1ZSgpKSk7Cit9CisKKy8v
IEZJWE1FOiBzaGFyZSB3aXRoIFNoYWRvd0RhdGEKK3N0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93
UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJhZGl1cykKK3sKKyAgICAvLyBCbHVycmluZyB1c2Vz
IGEgR2F1c3NpYW4gZnVuY3Rpb24gd2hvc2Ugc3RkLiBkZXZpYXRpb24gaXMgbV9yYWRpdXMvMiwg
YW5kIHdoaWNoIGluIHRoZW9yeQorICAgIC8vIGV4dGVuZHMgdG8gaW5maW5pdHkuIEluIDgtYml0
IGNvbnRleHRzLCBob3dldmVyLCByb3VuZGluZyBjYXVzZXMgdGhlIGVmZmVjdCB0byBiZWNvbWUK
KyAgICAvLyB1bmRldGVjdGFibGUgYXQgYXJvdW5kIDEuNHggdGhlIHJhZGl1cy4KKyAgICBjb25z
dCBmbG9hdCByYWRpdXNFeHRlbnRNdWx0aXBsaWVyID0gMS40OworICAgIHJldHVybiBjZWlsZihi
bHVyUmFkaXVzICogcmFkaXVzRXh0ZW50TXVsdGlwbGllcik7Cit9CisKK0Zsb2F0UmVjdCBSZWNv
cmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QK
K3sKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gcmVjdDsKKyAgICBjb25zdCBDb250ZXh0U3RhdGUm
IHN0YXRlID0gY3VycmVudFN0YXRlKCk7CisKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0Owor
ICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBpZiAo
bV9ncmFwaGljc0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3dDb2xvcikpIHsKKyAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudD0gYm91bmRzOwor
ICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShzaGFkb3dPZmZzZXQpOworICAgICAgICBzaGFkb3dF
eHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAgICAg
ICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4dGVudCk7CisgICAgfQorICAgIAorICAgIEZsb2F0UmVj
dCBjbGlwcGVkRXh0ZW50ID0gaW50ZXJzZWN0aW9uKHN0YXRlLmNsaXBCb3VuZHMsIGJvdW5kcyk7
CisgICAgcmV0dXJuIHN0YXRlLmN0bS5tYXBSZWN0KGNsaXBwZWRFeHRlbnQpOworfQorCitjb25z
dCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7CisgICAgcmV0dXJuIG1fc3RhdGVT
dGFjay5sYXN0KCk7Cit9CisKK1JlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJy
ZW50U3RhdGUoKQoreworICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKKyAgICByZXR1
cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKK30KKworY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNv
cmRlcjo6Y3RtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworfQor
Citjb25zdCBGbG9hdFJlY3QmIFJlY29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kczsKK30KKwordm9pZCBSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBjdG0udHJhbnNs
YXRlKHgsIHkpOworICAgIGNsaXBCb3VuZHMubW92ZSgteCwgLXkpOworfQorCit2b2lkIFJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3sKKyAgICBk
b3VibGUgYW5nbGVJbkRlZ3JlZXMgPSByYWQyZGVnKHN0YXRpY19jYXN0PGRvdWJsZT4oYW5nbGVJ
blJhZGlhbnMpKTsKKyAgICBjdG0ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKKyAgICAKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gcm90YXRpb247CisgICAgcm90YXRpb24ucm90YXRlKGFuZ2xlSW5EZWdy
ZWVzKTsKKworICAgIGlmIChPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IGludmVyc2UgPSByb3Rh
dGlvbi5pbnZlcnNlKCkpCisgICAgICAgIGNsaXBCb3VuZHMgPSBpbnZlcnNlLnZhbHVlKCkubWFw
UmVjdChjbGlwQm91bmRzKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgY3RtLnNjYWxlKHNpemUpOworICAgIGNs
aXBCb3VuZHMuc2NhbGUoMSAvIHNpemUud2lkdGgoKSwgMSAvIHNpemUuaGVpZ2h0KCkpOworfQor
Cit2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIG1hdHJpeCkKK3sKKyAgICBjdG0gKj0gbWF0cml4OworCisgICAgaWYgKE9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IG1hdHJpeC5pbnZlcnNlKCkpCisgICAgICAgIGNs
aXBCb3VuZHMgPSBpbnZlcnNlLnZhbHVlKCkubWFwUmVjdChjbGlwQm91bmRzKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjOGUwMmQ5NjdjZjk3MzY1
NjFhMTY1ZGRiNTAwNzVkZTJjYzA2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBA
IC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRGlzcGxheUxpc3RSZWNvcmRlcl9oCisjZGVmaW5lIERpc3BsYXlMaXN0
UmVjb3JkZXJfaAorCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIgLy8gRm9yIEludGVycG9sYXRpb25RdWFsaXR5LgorI2luY2x1ZGUgIkltYWdl
LmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RmxvYXRQb2ludDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdseXBoQnVmZmVyOworY2xhc3Mg
RmxvYXRQb2ludDsKK2NsYXNzIEZvbnQ7CitjbGFzcyBJbWFnZTsKKworc3RydWN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlOworc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOworCituYW1lc3BhY2Ug
RGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nSXRlbTsKKworY2xhc3MgUmVjb3JkZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKK3B1YmxpYzoKKyAgICBSZWNvcmRl
cihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIH5SZWNvcmRlcigpOworCisgICAg
dm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICB2b2lkIGNsZWFyU2hhZG93KCk7CisK
KyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KTsKKyAgICB2b2lkIHNldExpbmVKb2luKExp
bmVKb2luKTsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpOworCisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKKyAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpOwor
ICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOworICAgIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxp
bmVXaWR0aCk7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIHN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CisKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOworICAgIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpOworCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworCisgICAgdm9pZCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdUaWxl
ZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBkcmF3VGls
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRp
bGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJik7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBj
b25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdl
T3JpZW50YXRpb24pOworICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpOworCisgICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpOwor
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJv
a2VUaGlja25lc3MpOworICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
dm9pZCBkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0
UG9pbnQqLCBib29sIGFudGlhbGlhc2VkKTsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KTsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgaW50IHdpZHRoLCBpbnQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8SW50UmVjdD4mLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CisKKyAg
ICB2b2lkIHNhdmUoKTsKKyAgICB2b2lkIHJlc3RvcmUoKTsKKworICAgIHZvaWQgdHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5z
KTsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKwor
ICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIGNs
aXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7CisgICAgdm9pZCBjbGlwQ29udmV4UG9seWdv
bihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXMpOwor
ICAgIAorICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CisKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Quc2l6ZSgpOyB9CisKK3ByaXZh
dGU6CisgICAgSXRlbSYgYXBwZW5kSXRlbShSZWY8SXRlbT4mJik7CisgICAgdm9pZCB3aWxsQXBw
ZW5kSXRlbShjb25zdCBJdGVtJik7CisKKyAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91
bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChE
cmF3aW5nSXRlbSYpIGNvbnN0OworICAgIAorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3Rt
KCkgY29uc3Q7CisgICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CisKKyAg
ICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKKyAg
ICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlIHN0YXRlQ2hhbmdlOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBsYXN0RHJh
d2luZ1N0YXRlOworICAgICAgICBib29sIHdhc1VzZWRGb3JEcmF3aW5nIHsgZmFsc2UgfTsKKyAg
ICAgICAgc2l6ZV90IHNhdmVJdGVtSW5kZXggeyAwIH07CisgICAgICAgIAorICAgICAgICBDb250
ZXh0U3RhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcCkKKyAgICAgICAgICAgIDogY3RtKHRyYW5zZm9ybSkKKyAgICAgICAgICAgICwgY2xp
cEJvdW5kcyhjbGlwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENv
bnRleHRTdGF0ZSBjbG9uZUZvclNhdmUoc2l6ZV90IHNhdmVJbmRleCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgQ29udGV4dFN0YXRlIHN0YXRlKGN0bSwgY2xpcEJvdW5kcyk7CisgICAg
ICAgICAgICBzdGF0ZS5zdGF0ZUNoYW5nZSA9IHN0YXRlQ2hhbmdlOworICAgICAgICAgICAgc3Rh
dGUubGFzdERyYXdpbmdTdGF0ZSA9IGxhc3REcmF3aW5nU3RhdGU7CisgICAgICAgICAgICBzdGF0
ZS5zYXZlSXRlbUluZGV4ID0gc2F2ZUluZGV4OworICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Cisg
ICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKKyAgICAgICAgdm9pZCBz
Y2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJik7CisgICAgfTsKKyAgICAKKyAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1
cnJlbnRTdGF0ZSgpIGNvbnN0OworICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7CisK
KyAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OworICAgIERpc3BsYXlMaXN0
JiBtX2Rpc3BsYXlMaXN0OworCisgICAgYm9vbCBtX2NhY2hpbmcgeyBmYWxzZSB9OworICAgIEZs
b2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAgIAorICAgIFZlY3RvcjxDb250ZXh0U3RhdGUs
IDMyPiBtX3N0YXRlU3RhY2s7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBEaXNwbGF5TGlzdFJl
Y29yZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41MDM4NzY4NjE3ODJhNWRhN2U3MDQ1OGMwZWNlODAzODY1NTljZjVlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisj
aW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK1JlcGxheWVyOjpSZXBs
YXllcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCkKKyAgICA6IG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCisgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKK3sKK30KKworUmVwbGF5ZXI6On5SZXBsYXllcigpCit7Cit9CisKK3ZvaWQgUmVw
bGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwKQoreworICAgIExPR19X
SVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiXG5SZXBsYXlpbmcgd2l0aCBjbGlw
ICIgPDwgaW5pdGlhbENsaXApOworICAgIFVOVVNFRF9QQVJBTShpbml0aWFsQ2xpcCk7CisKKyAg
ICBzaXplX3QgbnVtSXRlbXMgPSBtX2Rpc3BsYXlMaXN0LnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IG1fZGlz
cGxheUxpc3QubGlzdCgpW2ldLmdldCgpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxh
eUxpc3RzLCBzdHJlYW0gPDwgImRyYXdpbmcgICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CisgICAg
ICAgIGl0ZW0uYXBwbHkobV9jb250ZXh0KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MWFiYmFlZjAxMjhjNDEzNDFjY2FmOTVkOTg0Mzcy
YWNlM2ZkMmMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RGlzcGxheUxpc3RSZXBsYXllcl9oCisjZGVmaW5lIERpc3BsYXlMaXN0UmVwbGF5ZXJfaAorCisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQWZmaW5lVHJhbnNmb3JtOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEaXNwbGF5TGlzdDsKKwor
Y2xhc3MgUmVwbGF5ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlcGxheWVyKTsKK3B1
YmxpYzoKKyAgICBSZXBsYXllcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBEaXNwbGF5TGlzdCYp
OworICAgIH5SZXBsYXllcigpOworCisgICAgdm9pZCByZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCk7CisKK3ByaXZhdGU6CisgICAgY29uc3QgRGlzcGxheUxpc3QmIG1fZGlzcGxh
eUxpc3Q7CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Cit9OworCit9Cit9CisKKyNl
bmRpZiAvLyBEaXNwbGF5TGlzdFJlcGxheWVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268432</attachid>
            <date>2016-01-06 18:31:54 -0800</date>
            <delta_ts>2016-01-06 18:52:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106183122.patch</filename>
            <type>text/plain</type>
            <size>148112</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NWRmYTQ4MjAzZGE3
YzYyYjYyN2YxMGVkYWMyZDEyZmFjYjFmMC4uZDQzMmIzYWEwZDMzMmZmZDE4NzVhM2U1MjgzOTBj
MWY4NmE1Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmMyYjg3NTkzZmE1ZTRlMDhiZDEzNmVlNDQ0ODkzYzMyNDU1YmI5ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworI2lmIFVTRShDRykKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX2No
YW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRl
eHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xv
cik7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3Rh
dGUuZmlsbENvbG9yKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9r
ZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQor
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5k
LW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxl
ZENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0
aW9uLWVuYWJsZWQiLCBtX3N0YXRlLmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxk
LXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJh
d0x1bWluYW5jZU1hc2tDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1p
bmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2UpCit7CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0
dXJuIHRzOworfQorCisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRp
bmdDb250cm9sVGludHMoZmFsc2UpCiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDUyYjFhZDgyYjJmOGE1ODcwOGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEy
OTMzYzBmMjM3OGEzYzEzN2ZjZjYzYWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0g
Q2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwLAorICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBo
YUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAg
ICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
ICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAor
ICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3
LAorICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8
IDE4LAorICAgICAgICBBbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAx
IDw8IDE5LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAg
PSAxIDw8IDIwLAorICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIxLAorICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAg
ICAgICAgPSAxIDw8IDIyLAorICAgIH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5n
ZUZsYWdzOworCiAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQ
dHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxl
OwogfTsKIAorc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUp
CisgICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFncyB7IDAgfTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk0NjJiZGViZWQ3YmI1YWQ2OTI4ZjI5OTU1MmQwMGFmNmFlOTc2
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKKyNpZiAhZGVmaW5lZChO
REVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBEaXNwbGF5TGlzdDo6ZGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7Cisg
ICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1
bXAoKSBjb25zdAoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRh
dGEoKSk7Cit9CisjZW5kaWYKKwordm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0
cyA8PCAiZGlzcGxheSBsaXN0IjsKKworICAgIHNpemVfdCBudW1JdGVtcyA9IG1fbGlzdC5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAg
IFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMpOworICAgICAgICB0cyA8PCBpIDw8ICIg
IiA8PCBtX2xpc3RbaV0uZ2V0KCk7CisgICAgfQorICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICB0
cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOworICAgIHRzLmVuZEdyb3Vw
KCk7Cit9CisKK3NpemVfdCBEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAg
IHNpemVfdCByZXN1bHQgPSAwOworICAgIGZvciAoYXV0byYgcmVmIDogbV9saXN0KSB7CisgICAg
ICAgIHN3aXRjaCAocmVmLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2F2ZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KHJlZi5nZXQo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihyZWYuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2NhbGU+KHJlZi5nZXQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4o
cmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRl
PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTZXRM
aW5lQ2FwPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8U2V0TGluZURhc2g+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVv
Zihkb3duY2FzdDxTZXRMaW5lSm9pbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAg
ICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwPihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICAg
ICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0
aDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBD
b252ZXhQb2x5Z29uOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlw
Q29udmV4UG9seWdvbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2Yo
ZG93bmNhc3Q8RHJhd0dseXBocz4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmVz
dWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxl
ZEltYWdlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdOYXRpdmVJbWFnZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXN1bHQg
Kz0gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgICAgIHJl
c3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd1JlY3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICAgICAg
cmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93
bmNhc3Q8RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdv
bjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0NvbnZleFBvbHln
b24+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3
UGF0aD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4ocmVmLmdldCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6
CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJl
Y3RXaXRoQ29sb3I+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAgICAgcmVzdWx0ICs9
IHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8RmlsbFJvdW5kZWRSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgICAg
IHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQ
YXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bEVsbGlwc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxp
cHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VSZWN0OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxT
dHJva2VSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3du
Y2FzdDxTdHJva2VQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxTdHJva2VFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgICAgICByZXN1
bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9m
KGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAg
ICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QXBw
bHlGaWxsUGF0dGVybj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NjEyOGEyNTMxMGIzYzk5YmQxZGZkOWFlNjM0NjBjMDg2MjdlNTgwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0X2gKKyNkZWZpbmUgRGlzcGxheUxp
c3RfaAorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgVGV4dFN0cmVhbTsKKworbmFtZXNwYWNl
IERpc3BsYXlMaXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3QgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERpc3BsYXlMaXN0KTsKKyAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CitwdWJsaWM6
CisgICAgRGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CisgICAgRGlzcGxheUxpc3QoRGlzcGxheUxp
c3QmJikgPSBkZWZhdWx0OworCisgICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlz
dCYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0OworCisg
ICAgY29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7
IH0KKyAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9saXN0LnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2xpc3QuY2xlYXIoKTsgfQor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAg
dm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBt
X2xpc3QucmVzaXplKGluZGV4KTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBj
b25zdDsKKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAgIFdURjo6
Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworICAgIHZvaWQgZHVtcCgpIGNvbnN0OworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCisgICAg
eworICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOworICAgICAgICByZXR1cm4g
bV9saXN0Lmxhc3QoKS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlz
dCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorCisgICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworfSAvLyBXZWJDb3JlCisK
K3VzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKKworI2VuZGlmIC8qIERp
c3BsYXlMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNTc4MWI3NzQ4ZjFjMmI3ZDAzNzdlYjFiYTFjNDQ2Y2U0MTgxOWY3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTA5MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNs
dWRlICJUZXh0U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CisKKy8vIFNob3VsZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpCitzdGF0aWMgY29uc3QgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7
CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBJ
dGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICB0cyA8
PCAqdGhpczsKKyAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKK30KKyNlbmRpZgorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2lu
Z0l0ZW0mIGl0ZW0pCit7CisgICAgdHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJleHRlbnQg
IjsKKyAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQorICAgICAgICB0cyA8PCBpdGVtLmV4dGVu
dCgpOworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgInVua25vd24iOworICAgIAorICAgIHRzLmVu
ZEdyb3VwKCk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0
ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3Jl
SW5kZXgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30K
Kwordm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Cit9CisKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgieSIsIGl0ZW0ueSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBSb3RhdGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJvdGF0
ZShtX2FuZ2xlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xl
IiwgaXRlbS5hbmdsZSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTY2FsZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2NhbGUo
bV9zaXplKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjYWxlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0
ZW0uYW1vdW50KCkpOworCisgICAgcmV0dXJuIHRzOworfQorCitDb25jYXRlbmF0ZUNUTTo6Q29u
Y2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKKyAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkK
K3sKK30KKwordm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNh
dGVuYXRlQ1RNJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFu
c2Zvcm0oKSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBtX3N0YXRlLmFwcGx5KGNvbnRl
eHQpOworfQorCit2b2lkIFNldFN0YXRlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit7CisgICAgbV9zdGF0ZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYg
c3RhdGUpCit7CisgICAgdHMgPDwgc3RhdGUuc3RhdGUoKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K3ZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNh
cCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNo
QXJyYXksIG1fZGFzaE9mZnNldCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCit7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpv
aW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0
TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0
ZXJMaW1pdCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1p
dC5taXRlckxpbWl0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclNoYWRvdzo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xl
YXJTaGFkb3coKTsKK30KKwordm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQorewor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK3ZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOwor
fQorCit2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK3sKKyAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmKQor
eworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTog
cGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGlwUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcFBhdGgo
bV9wYXRoLCBtX3dpbmRSdWxlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQoreworLy8gICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAg
IHRzLmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsKKyAgICByZXR1
cm4gdHM7Cit9CisKK0NsaXBDb252ZXhQb2x5Z29uOjpDbGlwQ29udmV4UG9seWdvbihzaXplX3Qg
bnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNl
ZCkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRp
YWxpYXMoYW50aWFsaWFzZWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlBvaW50czsgKytpKQorICAgICAgICBtX3BvaW50cy5hcHBlbmQocG9pbnRzW2ldKTsKK30KKwor
dm9pZCBDbGlwQ29udmV4UG9seWdvbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAoreworICAgIGNvbnRleHQuY2xpcENvbnZleFBvbHlnb24obV9wb2ludHMuc2l6ZSgpLCBt
X3BvaW50cy5kYXRhKCksIG1fYW50aWFsaWFzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBDb252ZXhQb2x5Z29uJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbnRpYWxpYXMiLCBpdGVtLmFudGlhbGlhcygpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK0RyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQorICAgICwgbV9mb250
KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9j
YXRpb24pCisgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICwgbV9zbW9vdGhp
bmdNb2RlKHNtb290aGluZ01vZGUpCit7CisgICAgbV9nbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjb3VudCk7CisgICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBt
X2dseXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKKyAgICAgICAgbV9hZHZhbmNlcy51
bmNoZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOworICAgIH0KKyAgICBjb21wdXRlQm91bmRzKCk7
Cit9CisKK2lubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVy
KCkgY29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7CisjaWYgVVNFKENBSVJPKQorICAgICAg
ICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLmluZGV4LCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2Vz
W2ldKTsKKyNlbHNlCisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICZtX2ZvbnQuZ2V0
KCksIG1fYWR2YW5jZXNbaV0pOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIFVOVVNFRF9QQVJBTShtX3Ntb290aGluZ01vZGUp
OworfQorCit2b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgZG9lc24ndCBhY3R1YWxseSB0YWtlIHRoZSBleHRlbnRzIG9mIHRoZSBnbHlw
aHMgaW50byBjb25zaWRlcmF0aW9uLiBJdCBhc3N1bWVzIHRoYXQKKyAgICAvLyB0aGUgZ2x5cGgg
bGllcyBlbnRpcmVseSB3aXRoaW4gaXRzIChhc2NlbnQrZGVzY2VudCB4IGFkdmFuY2UpIHJlY3Qu
CisgICAgZmxvYXQgYXNjZW50ID0gbV9mb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7
CisgICAgZmxvYXQgZGVzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdERlc2NlbnQo
KTsKKyAgICBGbG9hdFBvaW50IGN1cnJlbnQgPSB0b0Zsb2F0UG9pbnQobG9jYWxBbmNob3IoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgeworICAg
ICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07CisgICAgICAg
IEZsb2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgp
IC0gYXNjZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICBt
X2JvdW5kcy51bml0ZShnbHlwaFJlY3QpOworCisgICAgICAgIGN1cnJlbnQgKz0gRmxvYXRTaXpl
KGFkdmFuY2UpOworICAgIH0KK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3R2x5cGhzOjps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVj
dCBsb2NhbEJvdW5kcyA9IG1fYm91bmRzOworICAgIGxvY2FsQm91bmRzLm1vdmUobV9ibG9ja0xv
Y2F0aW9uLngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7CisgICAgcmV0dXJuIGxvY2FsQm91bmRz
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0dseXBocyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCisgICAgdHMu
ZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMoKS5zaXplKCkpOworCisg
ICAgcmV0dXJuIHRzOworfQorCitEcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAs
IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAg
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2
b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291
cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKK3sKKyAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291
cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVj
dCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorCitEcmF3VGlsZWRJ
bWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdU
aWxlZEltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVz
dGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX3RpbGVTaXplKHRpbGVT
aXplKQorICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRp
b25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lkIERyYXdUaWxlZEltYWdlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3
VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxl
U2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdl
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdU
aWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6
VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNj
YWxlRmFjdG9yKQorICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAsIG1fdlJ1bGUodlJ1bGUpCisg
ICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQor
Cit2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBt
X2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1
bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0p
Cit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKwor
RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdl
UHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKKyAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2UpCisgICAgLCBtX2ltYWdlUHRyKGltYWdl
UHRyKQorICAgICwgbV9pbWFnZVNpemUoaW1hZ2VTaXplKQorICAgICwgbV9kZXN0aW5hdGlvbihk
ZXN0UmVjdCkKKyAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQorICAgICwgbV9vcChvcCkKKyAgICAs
IG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKKyAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24p
Cit7Cit9CisKK3ZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIGF1dG8gaW1hZ2VQdHIgPSBtX2ltYWdl
UHRyLmdldCgpOworI2VuZGlmCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2VQdHIs
IG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBtX3NyY1JlY3QsIG1fb3AsIG1fYmxlbmRNb2Rl
LCBtX29yaWVudGF0aW9uKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBkdW1w
IG1vcmUgc3R1ZmYuCisgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291
cmNlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlv
bigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd1BhdHRlcm4pCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9wYXR0ZXJuVHJhbnNm
b3JtKHBhdHRlcm5UcmFuc2Zvcm0pCisgICAgLCBtX3RpbGVSZWN0KHRpbGVSZWN0KQorICAgICwg
bV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKKyAgICAsIG1fcGhhc2UocGhhc2UpCisgICAgLCBtX3Nw
YWNpbmcoc3BhY2luZykKKyAgICAsIG1fb3Aob3ApCisgICAgLCBtX2JsZW5kTW9kZShibGVuZE1v
ZGUpCit7Cit9CisKK3ZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1f
dGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9zcGFjaW5nLCBtX29wLCBt
X2Rlc3RpbmF0aW9uLCBtX2JsZW5kTW9kZSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKK3sKKyAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0
dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zvcm0oKSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInBo
YXNlIiwgaXRlbS5waGFzZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBpdGVt
LnNwYWNpbmcoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIERyYXdSZWN0OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3UmVjdCht
X3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQoreworICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRo
aWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOworICAgIHJldHVybiB0czsKK30KKwor
T3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzOworICAgIGJvdW5kcy5maXRU
b1BvaW50cyhtX3BvaW50MSwgbV9wb2ludDIpOworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3Zv
aWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICBjb250ZXh0LmRyYXdMaW5lKG1fcG9pbnQxLCBtX3BvaW50Mik7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYgaXRlbSkK
K3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkpOworICAgIHJldHVybiB0czsKK30KKwor
dm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50KCksIG1fd2lkdGhzLCBt
X3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3
TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAor
eworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8g
b3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFu
dGlhbGlhc2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4KKworICAgIGlmICghbV93aWR0aHMuc2l6
ZSgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBGbG9hdFJlY3QgcmVzdWx0
KHBvaW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCksIG1fc3Ryb2tlV2lkdGgpKTsKKyAg
ICByZXN1bHQuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBmb3IgcGl4ZWwgc25hcHBpbmcuIEZJWE1F
OiBUaGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNuJ3QgdGFrZSB0aGUgQ1RNIGludG8gYWNj
b3VudC4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRlbSkKK3sKKyAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
IndpZHRocyIsIGl0ZW0ud2lkdGhzKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaXMtcHJpbnRp
bmciLCBpdGVtLmlzUHJpbnRpbmcoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJkb3VibGUiLCBp
dGVtLmRvdWJsZUxpbmVzKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKG1fcG9pbnQsIG1fd2lkdGgs
IG1fc3R5bGUpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBvciBlbmNs
b3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoKSBy
ZXR1cm5zLgorCisgICAgRmxvYXRSZWN0IHJlc3VsdChtX3BvaW50LCBGbG9hdFNpemUobV93aWR0
aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOworICAgIHJlc3VsdC5pbmZsYXRlKGNNaXNz
cGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZvciAibWlzc3BlbGxpbmcgZG90IiBz
bmFwcGluZy4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciYg
aXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOworICAgIHJldHVybiB0czsKK30KKwor
dm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxpcHNlJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKKy8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUuCit2b2lkIGFkZENvbnZleFBvbHln
b25Ub1BhdGgoUGF0aCYgcGF0aCwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCog
cG9pbnRzKQoreworICAgIEFTU0VSVChudW1Qb2ludHMgPiAwKTsKKworICAgIHBhdGgubW92ZVRv
KHBvaW50c1swXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkK
KyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsKKyAgICBwYXRoLmNsb3NlU3VicGF0
aCgpOworfQorCitEcmF3Q29udmV4UG9seWdvbjo6RHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51
bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQp
CisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0NvbnZleFBvbHlnb24pCisgICAgLCBt
X2FudGlhbGlhc2VkKGFudGlhbGlhc2VkKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZQb2ludHM7ICsraSkKKyAgICAgICAgbV9wb2ludHMuYXBwZW5kKHBvaW50c1tpXSk7
Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0NvbnZleFBvbHlnb246OmxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsK
KyAgICBmb3IgKGF1dG8mIHBvaW50IDogbV9wb2ludHMpCisgICAgICAgIHJlc3VsdC5leHRlbmQo
cG9pbnQpOworICAgIHJlc3VsdC5pbmZsYXRlKG1fYW50aWFsaWFzZWQgPyAxIDogMCk7IC8vIEFj
Y291bnQgZm9yIGFudGlhbGlhc2luZworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRHJh
d0NvbnZleFBvbHlnb246OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LmRyYXdDb252ZXhQb2x5Z29uKG1fcG9pbnRzLnNpemUoKSwgbV9wb2ludHMu
ZGF0YSgpLCBtX2FudGlhbGlhc2VkKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdDb252ZXhQb2x5Z29uJiBpdGVtKQoreworICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJwb2ludHMiLCBpdGVtLnBvaW50cygpKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
ImFudGlhbGlhc2VkIiwgaXRlbS5hbnRpYWxpYXNlZCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K3ZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0aCYgaXRlbSkKK3sKKyAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworLy8gICAgdHMuZHVt
cFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9y
IHBhdGhzLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0Zv
Y3VzUmluZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKK30KKworT3B0aW9u
YWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgcmVzdWx0ID0gbV9wYXRoLmZhc3RC
b3VuZGluZ1JlY3QoKTsKKyAgICByZXN1bHQuaW5mbGF0ZShwbGF0Zm9ybUZvY3VzUmluZ1dpZHRo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCit7CisgICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKy8vICAgIHRzLmR1
bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IGFkZCBsb2dnaW5nIGZv
ciBwYXRocy4KKyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9p
ZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0aCwgbV9vZmZz
ZXQsIG1fY29sb3IpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0
czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9h
dFJlY3QgcmVzdWx0OworICAgIGZvciAoYXV0byYgcmVjdCA6IG1fcmVjdHMpCisgICAgICAgIHJl
c3VsdC51bml0ZShyZWN0KTsKKyAgICByZXN1bHQuaW5mbGF0ZShwbGF0Zm9ybUZvY3VzUmluZ1dp
ZHRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQorewor
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0ZW0ucmVjdHMoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBp
dGVtLm9mZnNldCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigp
KTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7Cit9
CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBG
aWxsUmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwg
bV9jb2xvcik7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsUmVjdFdpdGhDb2xvciYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KG1fcmVjdCwgbV9ncmFkaWVudC5nZXQoKSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRl
bSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwor
ICAgIC8vIEZJWE1FOiBsb2cgZ3JhZGllbnQuCisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsQ29tcG9zaXRlZFJl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0
LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOworfQorCitzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBv
c2l0ZWRSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1f
cmVjdCwgbV9jb2xvciwgbV9ibGVuZE1vZGUpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQorewor
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5k
LW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVjdCwgbV9yb3Vu
ZGVkSG9sZVJlY3QsIG1fY29sb3IpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJyb3VuZGVkLWhvbGUtcmVjdCIsIGl0ZW0ucm91bmRlZEhvbGVSZWN0KCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwor
dm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuZmlsbFBhdGgobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQoreworICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisvLyAgICB0cy5kdW1w
UHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBwYXRoIGxvZ2dpbmcuCisg
ICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwor
fQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RmlsbEVsbGlwc2UmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CisgICAgcmV0dXJuIHRzOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IFN0cm9rZVJlY3Q6Omxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0
IGJvdW5kcyA9IG1fcmVjdDsKKyAgICBib3VuZHMuZXhwYW5kKG1fbGluZVdpZHRoLCBtX2xpbmVX
aWR0aCk7CisgICAgcmV0dXJuIGJvdW5kczsKK30KKwordm9pZCBTdHJva2VSZWN0OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5zdHJva2VSZWN0
KG1fcmVjdCwgbV9saW5lV2lkdGgpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtd2lkdGgi
LCBpdGVtLmxpbmVXaWR0aCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK09wdGlvbmFsPEZsb2F0
UmVjdD4gU3Ryb2tlUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHRha2Ugc3Ryb2tlIHRoaWNrbmVz
cyBpbnRvIGFjY291bnQgY29ycmVjdGx5LCB2aWEgQ0dQYXRoQnlTdHJva2luZ1BhdGgoKS4KKyAg
ICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOworCisg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICBib3VuZHMu
ZXhwYW5kKHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBib3VuZHMubW92
ZUJ5KG1fYmxvY2tMb2NhdGlvbik7CisgICAgcmV0dXJuIGJvdW5kczsKK30KKwordm9pZCBTdHJv
a2VQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgRmxv
YXRTaXplIG9mZnNldCA9IHRvRmxvYXRTaXplKG1fYmxvY2tMb2NhdGlvbik7CisgICAgbV9wYXRo
LnRyYW5zbGF0ZShvZmZzZXQpOworICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOworICAg
IG1fcGF0aC50cmFuc2xhdGUoLW9mZnNldCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VQYXRoJiBpdGVtKQoreworICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKKy8vICAgIHRz
LmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IHBhdGggbG9nZ2lu
Zy4KKyAgICByZXR1cm4gdHM7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlRWxsaXBz
ZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CisK
KyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OworICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tl
VGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3Zv
aWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuc3Ryb2tlRWxsaXBzZShtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRl
bSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK3ZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgY29udGV4dC5jbGVhclJlY3QobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsZWFyUmVjdCYgaXRlbSkK
K3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK3ZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX29w
YWNpdHkpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
b3BhY2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRW5k
VHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Cit9CisKK3ZvaWQgQXBwbHlT
dHJva2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKK30KKwordm9pZCBBcHBseUZpbGxQYXR0
ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4
dC5hcHBseUZpbGxQYXR0ZXJuKCk7Cit9CisKK3ZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKK30KKworc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3ImIGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzY2FsZS1mYWN0b3IiLCBpdGVtLnNj
YWxlRmFjdG9yKCkpOworICAgIHJldHVybiB0czsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8ICJzYXZlIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogdHMgPDwgInJlc3RvcmUiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRzIDw8ICJ0cmFuc2xhdGUiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8ICJyb3RhdGUiOyBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6Q29uY2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUtY2FwIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQtbGluZS1kYXNoIjsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8ICJzZXQtbGluZS1q
b2luIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogdHMgPDwgInNl
dC1taXRlci1saW1pdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHRzIDw8ICJj
bGlwIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMgPDwgImNsaXAtb3V0
IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDogdHMgPDwgImNsaXAt
b3V0LXRvLXBhdGgiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogdHMgPDwg
ImNsaXAtcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29u
OiB0cyA8PCAiY2xpcC1jb252ZXgtcG9seWdvbiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdHbHlwaHM6IHRzIDw8ICJkcmF3LWdseXBocyI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdJbWFnZTogdHMgPDwgImRyYXctaW1hZ2UiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3VGlsZWRJbWFnZTogdHMgPDwgImRyYXctdGlsZWQtaW1hZ2UiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZTogdHMgPDwgImRyYXctdGlsZWQt
c2NhbGVkLWltYWdlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdl
OiB0cyA8PCAiZHJhdy1uYXRpdmUtaW1hZ2UiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0dGVybjogdHMgPDwgImRyYXctcGF0dGVybiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdSZWN0OiB0cyA8PCAiZHJhdy1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0xpbmU6IHRzIDw8ICJkcmF3LWxpbmUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3TGluZXNGb3JUZXh0OiB0cyA8PCAiZHJhdy1saW5lcy1mb3ItdGV4dCI7IGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6IHRzIDw8ICJkcmF3
LWxpbmVzLWZvci1kb2N1bWVudC1tYXJrZXIiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3RWxsaXBzZTogdHMgPDwgImRyYXctZWxsaXBzZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdDb252ZXhQb2x5Z29uOiB0cyA8PCAiZHJhdy1jb252ZXgtcG9sZ29uIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHRzIDw8ICJkcmF3LXBhdGgiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogdHMgPDwgImRyYXctZm9jdXMt
cmluZy1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OiB0cyA8PCAiZHJhdy1mb2N1cy1yaW5nLXJlY3RzIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3Q6IHRzIDw8ICJmaWxsLXJlY3QiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhDb2xvcjogdHMgPDwgImZpbGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJl
Y3Qtd2l0aC1ncmFkaWVudCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3Np
dGVkUmVjdDogdHMgPDwgImZpbGwtY29tcG9zaXRlZC1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB0cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZp
bGwtcmVjdC13aXRoLXJvdW5kZWQtaG9sZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxQYXRoOiB0cyA8PCAiZmlsbC1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bEVsbGlwc2U6IHRzIDw8ICJmaWxsLWVsbGlwc2UiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTdHJva2VSZWN0OiB0cyA8PCAic3Ryb2tlLXJlY3QiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VQYXRoOiB0cyA8PCAic3Ryb2tlLXBhdGgiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlOiB0cyA8PCAic3Ryb2tlLWVsbGlwc2UiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHRzIDw8ICJjbGVhci1yZWN0IjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogdHMgPDwgImJlZ2luLXRy
YW5zcGFyZW5jeS1sYXllciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOiB0cyA8PCAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjogdHMgPDwgImFwcGx5LXN0cm9rZS1wYXR0
ZXJuIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogdHMgPDwg
ImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVhci1zaGFkb3ciOyBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQoreworICAgIFRleHRTdHJlYW06Okdy
b3VwU2NvcGUgZ3JvdXAodHMpOworICAgIHRzIDw8IGl0ZW0udHlwZSgpOworCisgICAgLy8gRklY
TUU6IE1ha2UgYSBtYWNybyB3aGljaCB0YWtlcyBhIG1hY3JvIGZvciBhbGwgdGhlc2UgZW51bWVy
YXRpb24gc3dpdGNoZXMKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAgY2FzZSBJdGVt
VHlwZTo6U2F2ZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2F2ZT4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAgdHMgPDwgZG93
bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxSb3RhdGU+KGl0ZW0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U2NhbGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lQ2Fw
PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVtKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PFNldExpbmVKb2luPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CisgICAgICAg
IHRzIDw8IGRvd25jYXN0PENsaXA+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwT3V0PihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlw
UGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBDb252
ZXhQb2x5Z29uOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwQ29udmV4UG9seWdvbj4oaXRl
bSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdHbHlwaHM+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdJ
bWFnZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZEltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgor
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERy
YXdQYXR0ZXJuPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1JlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0PihpdGVtKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PERyYXdMaW5lPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4
dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXI6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXI+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
RWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RHJhd0NvbnZleFBvbHlnb24+KGl0ZW0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+
KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHM6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgICAgICB0
cyA8PCBkb3duY2FzdDxGaWxsUmVjdD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxs
UmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRS
ZWN0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbEVsbGlw
c2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0
OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0PihpdGVtKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U3Ryb2tlUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0
ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHRzIDw8IGRv
d25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0aW9uYWwgZGF0YS4KKyAgICBjYXNlIEl0ZW1UeXBl
OjpSZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2UyZGMzZDIwN2E1ZGFjOWM0NzJlYTc5MDAy
MWM0N2EwOTI2MDg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMCwwICsxLDE0MjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBEaXNwbGF5TGlzdEl0ZW1zX2gKKyNkZWZpbmUgRGlzcGxheUxpc3RJdGVtc19oCisKKyNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisK
KyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRTdHJlYW07Citz
dHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisK
K2VudW0gY2xhc3MgSXRlbVR5cGUgeworICAgIFNhdmUsCisgICAgUmVzdG9yZSwKKyAgICBUcmFu
c2xhdGUsCisgICAgUm90YXRlLAorICAgIFNjYWxlLAorICAgIENvbmNhdGVuYXRlQ1RNLAorICAg
IFNldFN0YXRlLAorICAgIFNldExpbmVDYXAsCisgICAgU2V0TGluZURhc2gsCisgICAgU2V0TGlu
ZUpvaW4sCisgICAgU2V0TWl0ZXJMaW1pdCwKKyAgICBDbGVhclNoYWRvdywKKyAgICBDbGlwLAor
ICAgIENsaXBPdXQsCisgICAgQ2xpcE91dFRvUGF0aCwKKyAgICBDbGlwUGF0aCwKKyAgICBDbGlw
Q29udmV4UG9seWdvbiwKKyAgICBEcmF3R2x5cGhzLAorICAgIERyYXdJbWFnZSwKKyAgICBEcmF3
VGlsZWRJbWFnZSwKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKKyAgICBEcmF3TmF0aXZlSW1h
Z2UsCisgICAgRHJhd1BhdHRlcm4sCisgICAgRHJhd1JlY3QsCisgICAgRHJhd0xpbmUsCisgICAg
RHJhd0xpbmVzRm9yVGV4dCwKKyAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyLAorICAgIERy
YXdFbGxpcHNlLAorICAgIERyYXdDb252ZXhQb2x5Z29uLAorICAgIERyYXdQYXRoLAorICAgIERy
YXdGb2N1c1JpbmdQYXRoLAorICAgIERyYXdGb2N1c1JpbmdSZWN0cywKKyAgICBGaWxsUmVjdCwK
KyAgICBGaWxsUmVjdFdpdGhDb2xvciwKKyAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKKyAgICBG
aWxsQ29tcG9zaXRlZFJlY3QsCisgICAgRmlsbFJvdW5kZWRSZWN0LAorICAgIEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlLAorICAgIEZpbGxQYXRoLAorICAgIEZpbGxFbGxpcHNlLAorICAgIFN0cm9r
ZVJlY3QsCisgICAgU3Ryb2tlUGF0aCwKKyAgICBTdHJva2VFbGxpcHNlLAorICAgIENsZWFyUmVj
dCwKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyLAorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVy
LAorICAgIEFwcGx5U3Ryb2tlUGF0dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNv
cmRlZCBpdGVtLgorICAgIEFwcGx5RmlsbFBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJl
IGEgcmVjb3JkZWQgaXRlbS4KKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9yLAorfTsKKworY2xh
c3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKK3B1YmxpYzoKKyAgICBJdGVtKCkg
PSBkZWxldGU7CisKKyAgICBJdGVtKEl0ZW1UeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5
cGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkl0ZW0oKSB7IH0KKworICAgIEl0ZW1U
eXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QgPSAwOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRGlzcGxheUxpc3RJdGVtID0gdHJ1ZTsKKworICAg
IHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAKKyAgICAvLyBBIHN0YXRlIGl0ZW0gaXMgb25lIHByZXNlcnZlZCBieSBTYXZlL1Jlc3RvcmUu
CisgICAgYm9vbCBpc1N0YXRlSXRlbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNT
dGF0ZUl0ZW1UeXBlKG1fdHlwZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNTdGF0ZUl0
ZW1UeXBlKEl0ZW1UeXBlIGl0ZW1UeXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpdGVtVHlw
ZSkgeworICAgICAgICBjYXNlIEl0ZW1UeXBlOjogVHJhbnNsYXRlOgorICAgICAgICBjYXNlIEl0
ZW1UeXBlOjogUm90YXRlOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2NhbGU6CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OiBDb25jYXRlbmF0ZUNUTToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
IFNldFN0YXRlOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TGluZUNhcDoKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6IFNldExpbmVEYXNoOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0
TGluZUpvaW46CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRNaXRlckxpbWl0OgorICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjogQ2xlYXJTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAh
TE9HX0RJU0FCTEVECisgICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBJdGVtVHlwZSBtX3R5cGU7Cit9OworCitjbGFzcyBEcmF3aW5n
SXRlbSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nSXRlbShJdGVtVHlwZSB0
eXBlKQorICAgICAgICA6IEl0ZW0odHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRF
eHRlbnQoY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fZXh0ZW50ID0gcjsgfQorICAgIGNvbnN0IEZs
b2F0UmVjdCYgZXh0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQudmFsdWUoKTsgfQorCisg
ICAgYm9vbCBleHRlbnRLbm93bigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1f
ZXh0ZW50KTsgfQorCisgICAgLy8gUmV0dXJuIGJvdW5kcyBvZiB0aGlzIGRyYXdpbmcgb3BlcmF0
aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgorICAgIC8vIERvZXMgbm90IGluY2x1ZGUgZWZmZXRz
IG9mIHRyYW5zZm9ybSwgc2hhZG93IGV0YyBpbiB0aGUgc3RhdGUuCisgICAgdmlydHVhbCBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIE51bGxvcHQ7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNEcmF3
aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbV9leHRlbnQ7IC8vIEluIGJhc2UgY29vcmRpbmF0ZXMsIHRha2luZyBzaGFkb3dzIGFuZCB0
cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KK307CisKK2NsYXNzIFNhdmUgOiBwdWJsaWMgSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTYXZlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2F2ZSk7CisgICAgfQorCisgICAgLy8gSW5kZXggaW4gdGhl
IGRpc3BsYXkgbGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBSZXN0b3JlIGl0ZW0uIDAgaWYgdW5t
YXRjaGVkLgorICAgIHNpemVfdCByZXN0b3JlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Rv
cmVJbmRleDsgfQorICAgIHZvaWQgc2V0UmVzdG9yZUluZGV4KHNpemVfdCBpbmRleCkgeyBtX3Jl
c3RvcmVJbmRleCA9IGluZGV4OyB9CisKK3ByaXZhdGU6CisgICAgU2F2ZSgpCisgICAgICAgIDog
SXRlbShJdGVtVHlwZTo6U2F2ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHNpemVfdCBt
X3Jlc3RvcmVJbmRleCB7IDAgfTsKK307CisKK2NsYXNzIFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZXN0b3JlPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVzdG9yZSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IFJlc3RvcmUoKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlJlc3RvcmUpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKK307CisKK2NsYXNzIFRyYW5zbGF0ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFRyYW5zbGF0ZT4gY3JlYXRlKGZsb2F0IHgsIGZsb2F0IHkpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOworICAgIH0KKwor
ICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBmbG9hdCB5KCkgY29uc3Qg
eyByZXR1cm4gbV95OyB9CisKK3ByaXZhdGU6CisgICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQorICAgICAgICAsIG1feCh4
KQorICAgICAgICAsIG1feSh5KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX3g7Cisg
ICAgZmxvYXQgbV95OworfTsKKworY2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSb3RhdGUoYW5nbGVJblJhZGlhbnMp
KTsKKyAgICB9CisKKyAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0K
KworcHJpdmF0ZToKKyAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6Um90YXRlKQorICAgICAgICAsIG1fYW5nbGUoYW5nbGUpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIGZsb2F0IG1fYW5nbGU7IC8vIEluIHJhZGlhbnMuCit9OworCitjbGFzcyBTY2FsZSA6
IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNjYWxlPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2NhbGUoc2l6ZSkpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgU2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNjYWxlKQorICAgICAgICAsIG1f
c2l6ZShzaXplKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFNpemUgbV9zaXplOworfTsK
KworY2xhc3MgQ29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0
cml4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0o
bWF0cml4KSk7CisgICAgfQorCisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorCitwcml2YXRlOgorICAgIENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IG1fdHJhbnNmb3JtOworfTsKKworY2xhc3MgU2V0U3RhdGUgOiBwdWJsaWMgSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdGF0ZShzdGF0ZSwg
ZmxhZ3MpKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorCisgICAgdm9pZCBhY2N1bXVs
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgdm9pZCBhY2N1bXVsYXRlKEdyYXBoaWNzQ29udGV4dFN0
YXRlJikgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVN0YXRlKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhUZXh0
U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Citwcml2YXRlOgorICAgIFNldFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MgZmxhZ3MpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCisgICAgICAg
ICwgbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGU7Cit9OworCitjbGFzcyBTZXRMaW5lQ2FwIDogcHVi
bGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2V0TGluZUNhcD4gY3JlYXRlKExp
bmVDYXAgbGluZUNhcCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExp
bmVDYXAobGluZUNhcCkpOworICAgIH0KKyAgICAKKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVDYXA7IH0KKworcHJpdmF0ZToKKyAgICBTZXRMaW5lQ2FwKExpbmVD
YXAgbGluZUNhcCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lQ2FwKQorICAgICAg
ICAsIG1fbGluZUNhcChsaW5lQ2FwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBMaW5lQ2FwIG1f
bGluZUNhcDsKK307CisKK2NsYXNzIFNldExpbmVEYXNoIDogcHVibGljIEl0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8U2V0TGluZURhc2g+IGNyZWF0ZShjb25zdCBEYXNoQXJyYXkmIGRh
c2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkpOworICAgIH0KKworICAg
IGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7
IH0KKyAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9
CisKK3ByaXZhdGU6CisgICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXks
IGZsb2F0IGRhc2hPZmZzZXQpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gp
CisgICAgICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQorICAgICAgICAsIG1fZGFzaE9mZnNl
dChkYXNoT2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBEYXNoQXJyYXkgbV9kYXNoQXJy
YXk7CisgICAgZmxvYXQgbV9kYXNoT2Zmc2V0OworfTsKKworY2xhc3MgU2V0TGluZUpvaW4gOiBw
dWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRMaW5lSm9pbj4gY3JlYXRl
KExpbmVKb2luIGxpbmVKb2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2V0TGluZUpvaW4obGluZUpvaW4pKTsKKyAgICB9CisgICAgCisgICAgTGluZUpvaW4gbGluZUpv
aW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CisKK3ByaXZhdGU6CisgICAgU2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGlu
ZUpvaW4pCisgICAgICAgICwgbV9saW5lSm9pbihsaW5lSm9pbikKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgTGluZUpvaW4gbV9saW5lSm9pbjsKK307CisKK2NsYXNzIFNldE1pdGVyTGltaXQgOiBw
dWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRNaXRlckxpbWl0PiBjcmVh
dGUoZmxvYXQgbGltaXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRN
aXRlckxpbWl0KGxpbWl0KSk7CisgICAgfQorCisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorCitwcml2YXRlOgorICAgIFNldE1pdGVyTGltaXQo
ZmxvYXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
KQorICAgICAgICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBmbG9hdCBtX21pdGVyTGltaXQ7Cit9OworCitjbGFzcyBDbGVhclNoYWRvdyA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsZWFyU2hhZG93PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJTaGFkb3cpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDbGVhclNoYWRvdygpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6
Q2xlYXJTaGFkb3cpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKKy8vIEZJWE1FOiB0cmVhdCBhcyBE
cmF3aW5nSXRlbT8KK2NsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxDbGlwPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcChyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBDbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQor
ICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3Qg
bV9yZWN0OworfTsKKworY2xhc3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKKyAgICB9CisK
KyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRl
OgorICAgIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IEl0ZW0oSXRl
bVR5cGU6OkNsaXBPdXQpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBDbGlwT3V0VG9QYXRoIDogcHVi
bGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcE91dFRvUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
bGlwT3V0VG9QYXRoKHBhdGgpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9wYXRoOyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcE91dFRvUGF0aChjb25z
dCBQYXRoJiBwYXRoKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCisg
ICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFBhdGggbV9wYXRo
OworfTsKKworY2xhc3MgQ2xpcFBhdGggOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxDbGlwUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcFBhdGgocGF0aCwg
d2luZFJ1bGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9CisgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3dp
bmRSdWxlOyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgd2luZFJ1bGUpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcFBhdGgpCisgICAg
ICAgICwgbV9wYXRoKHBhdGgpCisgICAgICAgICwgbV93aW5kUnVsZSh3aW5kUnVsZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgUGF0aCBtX3BhdGg7CisgICAgV2luZFJ1bGUgbV93aW5kUnVsZTsK
K307CisKK2NsYXNzIENsaXBDb252ZXhQb2x5Z29uIDogcHVibGljIEl0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8Q2xpcENvbnZleFBvbHlnb24+IGNyZWF0ZShzaXplX3QgbnVtYmVyT2ZQ
b2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBDb252ZXhQb2x5Z29uKG51bWJlck9m
UG9pbnRzLCBwb2ludHMsIGFudGlhbGlhc2VkKSk7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9y
PEZsb2F0UG9pbnQ+JiBwb2ludHMoKSBjb25zdCB7IHJldHVybiBtX3BvaW50czsgfQorICAgIGJv
b2wgYW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9hbnRpYWxpYXM7IH0KKworcHJpdmF0ZToK
KyAgICBDbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0
UG9pbnQqLCBib29sIGFudGlhbGlhc2VkKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBt
X3BvaW50czsKKyAgICBib29sIG1fYW50aWFsaWFzOworfTsKKworY2xhc3MgRHJhd0dseXBocyA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3R2x5cGhz
PiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQs
IGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKSk7CisgICAgfQorCisg
ICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2tMb2NhdGlvbjsgfQorICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50
JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KKwor
ICAgIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBjb25zdCB7IHJldHVybiBtX2xvY2Fs
QW5jaG9yOyB9CisKKyAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9ibG9ja0xvY2F0aW9uICsgbV9sb2NhbEFuY2hvcjsgfQorCisgICAgY29uc3QgVmVjdG9yPEds
eXBoQnVmZmVyR2x5cGgsIDEyOD4mIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzOyB9
CisKK3ByaXZhdGU6CisgICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSk7CisKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEdseXBoQnVmZmVyIGdlbmVyYXRlR2x5
cGhCdWZmZXIoKSBjb25zdDsKKworICAgIFJlZjxGb250PiBtX2ZvbnQ7CisgICAgVmVjdG9yPEds
eXBoQnVmZmVyR2x5cGgsIDEyOD4gbV9nbHlwaHM7CisgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2
YW5jZSwgMTI4PiBtX2FkdmFuY2VzOworICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKKyAgICBGbG9h
dFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKKyAg
ICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGU7Cit9OworCitjbGFzcyBEcmF3SW1h
Z2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0lt
YWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJh
d0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykp
OworICAgIH0KKworICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2UuZ2V0KCk7IH0KKyAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2U7IH0KKyAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJ
WE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVz
cy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgorICAgIEZsb2F0UmVjdCBtX2Rl
c3RpbmF0aW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKKyAgICBJbWFnZVBhaW50aW5nT3B0
aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworfTsKKworY2xhc3MgRHJhd1RpbGVkSW1hZ2Ug
OiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVk
SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcs
IGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgfQorCisgICAgY29uc3QgSW1hZ2UmIGltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIEZsb2F0UG9pbnQgc291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBGbG9hdFNpemUgdGlsZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVTaXplOyB9CisgICAgRmxvYXRTaXplIHNwYWNpbmco
KSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3VGlsZWRJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworICAgIG11dGFibGUgUmVm
PEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWly
IGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJs
ZS4KKyAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKKyAgICBGbG9hdFBvaW50IG1fc291cmNl
OworICAgIEZsb2F0U2l6ZSBtX3RpbGVTaXplOworICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7Cisg
ICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKK307CisKK2Ns
YXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFj
dG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgfQorCisgICAg
Y29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAg
IEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIEZsb2F0
UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworcHJp
dmF0ZToKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1h
Z2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5p
bWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgor
ICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKKyAg
ICBGbG9hdFNpemUgbV90aWxlU2NhbGVGYWN0b3I7CisgICAgSW1hZ2U6OlRpbGVSdWxlIG1faFJ1
bGU7CisgICAgSW1hZ2U6OlRpbGVSdWxlIG1fdlJ1bGU7CisgICAgSW1hZ2VQYWludGluZ09wdGlv
bnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKK307CisKK2NsYXNzIERyYXdOYXRpdmVJbWFnZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TmF0aXZl
SW1hZ2U+IGNyZWF0ZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd05hdGl2ZUltYWdlKGltYWdlUHRyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbikpOworICAgIH0KKworICAgIEZsb2F0UmVj
dCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KKyAgICBGbG9hdFJlY3QgZGVz
dGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKK3ByaXZhdGU6Cisg
ICAgRHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBz
ZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisK
KyNpZiBVU0UoQ0cpCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1faW1hZ2VQdHI7CisjZW5k
aWYKKyAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7CisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRp
b247CisgICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBtX29w
OworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3Jp
ZW50YXRpb247Cit9OworCitjbGFzcyBEcmF3UGF0dGVybiA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3UGF0dGVybj4gY3JlYXRlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERyYXdQYXR0ZXJuKGltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKSk7CisgICAgfQorCisgICAgY29uc3QgSW1h
Z2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVy
blRyYW5zZm9ybTsgfQorICAgIEZsb2F0UmVjdCB0aWxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGlsZVJlY3Q7IH0KKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9CisgICAgRmxvYXRQb2ludCBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhh
c2U7IH0KKyAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsg
fQorCitwcml2YXRlOgorICAgIERyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFsKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBtdXRh
YmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVz
ZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJl
IG11dGFibGUuCisgICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKKyAgICBG
bG9hdFJlY3QgbV90aWxlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKKyAgICBG
bG9hdFBvaW50IG1fcGhhc2U7CisgICAgRmxvYXRTaXplIG1fc3BhY2luZzsKKyAgICBDb21wb3Np
dGVPcGVyYXRvciBtX29wOworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKK307CisKKy8vIElz
IERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBp
cyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KK2NsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QmVnaW5U
cmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpKTsKKyAg
ICB9CisKKyAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisK
K3ByaXZhdGU6CisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQorICAg
ICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKQorICAg
ICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBt
X29wYWNpdHk7Cit9OworCitjbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxFbmRUcmFuc3BhcmVuY3lMYXllcj4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVuZFRyYW5zcGFy
ZW5jeUxheWVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcikK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOworICAgIH0K
KworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJUaGlja25lc3M7IH0K
KworcHJpdmF0ZToKKyAgICBEcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3Qp
CisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9ib3JkZXJUaGlja25lc3MoYm9y
ZGVyVGhpY2tuZXNzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBmbG9hdCBt
X2JvcmRlclRoaWNrbmVzczsKK307CisKK2NsYXNzIERyYXdMaW5lIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdMaW5lPiBjcmVhdGUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZShwb2ludDEsIHBvaW50MikpOworICAgIH0K
KworICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDE7IH0KKyAg
ICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQyOyB9CisKK3ByaXZh
dGU6CisgICAgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludDIpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lKQor
ICAgICAgICAsIG1fcG9pbnQxKHBvaW50MSkKKyAgICAgICAgLCBtX3BvaW50Mihwb2ludDIpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFBv
aW50IG1fcG9pbnQxOworICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7Cit9OworCitjbGFzcyBEcmF3
TGluZXNGb3JUZXh0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPERyYXdMaW5lc0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2Nr
TG9jYXRpb24sIGxvY2FsQW5jaG9yLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ry
b2tlV2lkdGgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9u
OyB9CisgICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tMb2NhdGlvbjsgfQorICAgIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9CisgICAgRmxvYXRQb2ludCBwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KKyAgICBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhzOyB9CisgICAgYm9v
bCBpc1ByaW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZzsgfQorICAgIGJvb2wgZG91
YmxlTGluZXMoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9CisKK3ByaXZhdGU6Cisg
ICAgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCisgICAgICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCisgICAgICAgICwgbV9ibG9j
a0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFu
Y2hvcikKKyAgICAgICAgLCBtX3dpZHRocyh3aWR0aHMpCisgICAgICAgICwgbV9zdHJva2VXaWR0
aChzdHJva2VXaWR0aCkKKyAgICAgICAgLCBtX3ByaW50aW5nKHByaW50aW5nKQorICAgICAgICAs
IG1fZG91YmxlTGluZXMoZG91YmxlTGluZXMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAg
IEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOworICAgIERhc2hBcnJheSBtX3dpZHRoczsKKyAgICBm
bG9hdCBtX3N0cm9rZVdpZHRoOworICAgIGJvb2wgbV9wcmludGluZzsKKyAgICBib29sIG1fZG91
YmxlTGluZXM7Cit9OworCitjbGFzcyBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIEdy
YXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKHBvaW50
LCB3aWR0aCwgc3R5bGUpKTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IHBvaW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wb2ludDsgfQorICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93
aWR0aDsgfQorCitwcml2YXRlOgorICAgIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3TGluZUZvckRvY3VtZW50TWFya2VyKQorICAgICAgICAsIG1fcG9pbnQocG9pbnQpCisgICAg
ICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFBvaW50IG1f
cG9pbnQ7CisgICAgZmxvYXQgbV93aWR0aDsKKyAgICBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7Cit9OworCitjbGFzcyBEcmF3RWxsaXBzZSA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3RWxsaXBzZT4gY3Jl
YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIERyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJh
d0VsbGlwc2UpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3Qg
bV9yZWN0OworfTsKKworY2xhc3MgRHJhd0NvbnZleFBvbHlnb24gOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0NvbnZleFBvbHlnb24+IGNyZWF0ZShz
aXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRp
YWxpYXNlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdDb252ZXhQ
b2x5Z29uKG51bWJlck9mUG9pbnRzLCBwb2ludHMsIGFudGlhbGlhc2VkKSk7CisgICAgfQorCisg
ICAgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBwb2ludHMoKSBjb25zdCB7IHJldHVybiBtX3Bv
aW50czsgfQorICAgIGJvb2wgYW50aWFsaWFzZWQoKSBjb25zdCB7IHJldHVybiBtX2FudGlhbGlh
c2VkOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9m
UG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXNlZCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1fcG9pbnRzOwor
ICAgIGJvb2wgbV9hbnRpYWxpYXNlZDsKK307CisKK2NsYXNzIERyYXdQYXRoIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdQYXRoPiBjcmVhdGUoY29u
c3QgUGF0aCYgcGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdQ
YXRoKHBhdGgpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
KyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCisgICAgICAgICwgbV9w
YXRoKHBhdGgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisKKyAgICBQYXRoIG1fcGF0aDsK
K307CisKK2NsYXNzIERyYXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBjcmVhdGUoY29uc3QgUGF0
aCYgcGF0aCwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3
aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIH0KKworICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoOyB9CisgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Cisg
ICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6Cisg
ICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgaW50IHdpZHRoLCBpbnQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgICAgICAsIG1f
d2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY29s
b3IoY29sb3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIFBhdGggbV9wYXRoOworICAgIGludCBtX3dpZHRoOworICAgIGludCBtX29mZnNldDsK
KyAgICBDb2xvciBtX2NvbG9yOworfTsKKworY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdS
ZWN0cz4gY3JlYXRlKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikp
OworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdHM7IH0KKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
CisgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgQ29sb3Ig
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0Zv
Y3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHMpCisgICAgICAgICwgbV9yZWN0cyhyZWN0cykKKyAgICAg
ICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gbV9yZWN0czsKKyAgICBpbnQgbV93aWR0aDsK
KyAgICBpbnQgbV9vZmZzZXQ7CisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK2NsYXNzIEZpbGxS
ZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxS
ZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgRmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpG
aWxsUmVjdCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBt
X3JlY3Q7Cit9OworCisvLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJlY3Qg
cHJvcGVyLgorY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKSk7CisgICAgfQor
CisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBDb2xv
ciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKworcHJpdmF0ZToKKyAgICBGaWxs
UmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
KyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IpCisgICAg
ICAgICwgbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAg
IEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK2NsYXNzIEZpbGxS
ZWN0V2l0aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBHcmFkaWVudCYgZ3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGaWxsUmVjdFdpdGhHcmFkaWVudChyZWN0LCBncmFkaWVudCkpOworICAgIH0KKworICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAg
RmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3Jh
ZGllbnQpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fZ3JhZGllbnQoZ3JhZGll
bnQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIG11dGFibGUgUmVmPEdyYWRp
ZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTogTWFrZSB0aGlzIG5vdCBtdXRhYmxlCit9OworCitj
bGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8RmlsbENvbXBvc2l0ZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbENv
bXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CisgICAgfQorCisgICAg
RmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBDb2xvciBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAgICBCbGVuZE1vZGUgYmxl
bmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KKworcHJpdmF0ZToKKyAgICBG
aWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgICAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QpCisgICAgICAgICwgbV9y
ZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAgICAgLCBtX29wKG9wKQor
ICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CisgICAgQ29sb3IgbV9jb2xvcjsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwor
ICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKK307CisKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUm91bmRl
ZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOworICAgIH0K
KworICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CisgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9
CisKK3ByaXZhdGU6CisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQorICAgICAgICAsIG1fcmVj
dChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9ibGVuZE1vZGUo
YmxlbmRNb2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0KKworICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yZWN0Owor
ICAgIENvbG9yIG1fY29sb3I7CisgICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOworfTsKKworY2xh
c3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOwor
ICAgIH0KKworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQorICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6CisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisg
ICAgICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQorICAgICAgICAsIG1f
Y29sb3IoY29sb3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIEZsb2F0Um91
bmRlZFJlY3QgbV9yb3VuZGVkSG9sZVJlY3Q7CisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK2Ns
YXNzIEZpbGxQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRoKHBhdGgpKTsKKyAgICB9CisKKyAgICBjb25zdCBQ
YXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKK3ByaXZhdGU6CisgICAgRmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RmlsbFBhdGgpCisgICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsg
fQorCisgICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBGaWxsRWxsaXBzZSA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsRWxsaXBzZT4gY3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIEZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVs
bGlwc2UpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBt
X3JlY3Q7Cit9OworCitjbGFzcyBTdHJva2VSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBmbG9hdCBsaW5lV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVXaWR0aDsgfQorCitwcml2YXRlOgorICAgIFN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAg
ICAgICwgbV9saW5lV2lkdGgobGluZVdpZHRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBmbG9hdCBtX2xp
bmVXaWR0aDsKK307CisKK2NsYXNzIFN0cm9rZVBhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBh
dGgsIGNvbnN0IEZsb2F0UG9pbnQmIG1fYmxvY2tMb2NhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCwgbV9ibG9ja0xvY2F0aW9uKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQorICAgIGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRp
b247IH0KKyAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisK
K3ByaXZhdGU6CisgICAgU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJv
a2VQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fYmxvY2tMb2NhdGlv
bihibG9ja0xvY2F0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tM
b2NhdGlvbjsKK307CisKK2NsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9r
ZUVsbGlwc2UocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUVsbGlw
c2UpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgQ2xl
YXJSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENs
ZWFyUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENsZWFyUmVjdChyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBDbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpDbGVhclJlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9h
dFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgQXBwbHlTdHJva2VQYXR0ZXJuIDogcHVibGljIEl0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlTdHJva2VQYXR0ZXJu
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXBwbHlTdHJva2VQYXR0ZXJuKCkKKyAgICAgICAg
OiBJdGVtKEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK307
CisKK2NsYXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxBcHBseUZpbGxQYXR0ZXJuPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlGaWxsUGF0dGVybik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5Rmls
bFBhdHRlcm4pCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKKworY2xhc3MgQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvciA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I+IGNyZWF0ZShmbG9hdCBzY2FsZUZhY3RvcikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3Ip
KTsKKyAgICB9CisKKyAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGVGYWN0b3I7IH0KKworcHJpdmF0ZToKKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IHNjYWxlRmFjdG9yKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IpCisgICAgICAgICwgbV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKK307CisKKy8vIEZJWE1FOiB0aGlzIG5l
ZWRzIHRvIG1vdmUuCit2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYsIHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqKTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1
ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVkaWNhdGU7IH0gXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0RSQVdJTkdJVEVNKERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJdGVtKCkpCisKKyNkZWZp
bmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRvVmFsdWVUeXBlTmFt
ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBpdGVtLnR5cGUoKSA9PSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVUeXBlTmFtZTsgfSBcCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShTYXZlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJlc3Rv
cmUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVHJhbnNsYXRlKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJvdGF0ZSkKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTY2FsZSkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNUTSkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRMaW5lQ2FwKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFNldExpbmVEYXNoKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKFNldExpbmVKb2luKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldE1pdGVyTGltaXQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQ2xpcCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlw
T3V0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXRUb1Bh
dGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFBhdGgpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcENvbnZleFBvbHlnb24p
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0dseXBocykKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3SW1hZ2UpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1RpbGVkSW1hZ2UpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1RpbGVkU2NhbGVkSW1hZ2UpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd05hdGl2ZUltYWdlKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXR0ZXJuKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdSZWN0KQorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lKQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lc0ZvclRleHQpCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcikKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3RWxsaXBzZSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Q29udmV4UG9seWdvbikKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0aCkKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUGF0aCkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUmVjdHMpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3QpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoQ29sb3IpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoR3JhZGllbnQp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbENvbXBvc2l0ZWRS
ZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSb3VuZGVk
UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShG
aWxsUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsRWxs
aXBzZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VSZWN0
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZVBhdGgpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlRWxsaXBzZSkKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclJlY3QpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQmVnaW5UcmFuc3BhcmVuY3lMYXllcikK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShFbmRUcmFuc3BhcmVuY3lM
YXllcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseVN0cm9r
ZVBhdHRlcm4pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlG
aWxsUGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBs
eURldmljZVNjYWxlRmFjdG9yKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKENsZWFyU2hhZG93KQorCisjZW5kaWYgLy8gRGlzcGxheUxpc3RJdGVtc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTcyMjA3OTA2MTM0
ZGUyODFhODBlZmU3MTQzMGU1N2YxOGFjNjI5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcApAQCAtMCwwICsxLDQ4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RS
ZWNvcmRlci5oIgorCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdEl0ZW1zLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitS
ZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYmFzZUNUTSkKKyAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQoreworICAgIExPR19XSVRIX1NUUkVBTShEaXNw
bGF5TGlzdHMsIHN0cmVhbSA8PCAiXG5SZWNvcmRpbmcgd2l0aCBjbGlwICIgPDwgaW5pdGlhbENs
aXApOworCisgICAgLy8gRklYTUU6IGhvb2sgdXAgcmVjb3JkZXIgaW4gdGhlIEdyYXBoaWNzQ29u
dGV4dC4KKyAgICAvLyBtX2dyYXBoaWNzQ29udGV4dC5zZXREaXNwbGF5TGlzdFJlY29yZGVyKHRo
aXMpOworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoQ29udGV4dFN0YXRlKGJhc2VDVE0sIGluaXRp
YWxDbGlwKSk7Cit9CisKK1JlY29yZGVyOjp+UmVjb3JkZXIoKQoreworICAgIEFTU0VSVChtX3N0
YXRlU3RhY2suc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0ZXMgbWlz
bWF0Y2hlZCBzYXZlL3Jlc3RvcmUuCisgICAgTE9HKERpc3BsYXlMaXN0cywgIlJlY29yZGVkIGRp
c3BsYXkgbGlzdDpcbiVzIiwgbV9kaXNwbGF5TGlzdC5kZXNjcmlwdGlvbigpLmRhdGEoKSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCit7Cisg
ICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpIHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm4gfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tl
UGF0dGVybikgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFu
Z2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVDaGFu
Z2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7Cisg
ICAgICAgIGlmIChjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkgeworICAgICAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2luZywgc2F2aW5nIHN0YXRl
ICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNo
YW5nZXNGcm9tTGFzdFN0YXRlKSk7CisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChT
ZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0
ZSkpOworICAgICAgICAgICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxhZ3MgPSAwOworICAgICAg
ICAgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0
YXRlOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5n
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgZmxhZ3MpCit7CisgICAgY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2UuYWNjdW11
bGF0ZShzdGF0ZSwgZmxhZ3MpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGVhclNoYWRvdygpCit7
CisgICAgYXBwZW5kSXRlbShDbGVhclNoYWRvdzo6Y3JlYXRlKCkpOworfQorCit2b2lkIFJlY29y
ZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3sKKyAgICBhcHBlbmRJdGVtKFNldExp
bmVDYXA6OmNyZWF0ZShsaW5lQ2FwKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQoreworICAgIGFw
cGVuZEl0ZW0oU2V0TGluZURhc2g6OmNyZWF0ZShkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKK30K
Kwordm9pZCBSZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit7CisgICAg
YXBwZW5kSXRlbShTZXRMaW5lSm9pbjo6Y3JlYXRlKGxpbmVKb2luKSk7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3sKKyAgICBhcHBlbmRJdGVt
KFNldE1pdGVyTGltaXQ6OmNyZWF0ZShtaXRlckxpbWl0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBGbG9hdFBvaW50IGJs
b2NrTG9jYXRpb24gPSBtX2NhY2hpbmcgPyBtX2Jsb2NrTG9jYXRpb24gOiBGbG9hdFBvaW50KCk7
CisgICAgRmxvYXRTaXplIGxvY2FsQW5jaG9yID0gc3RhcnRQb2ludCAtIGJsb2NrTG9jYXRpb247
CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBibG9ja0xvY2F0aW9uLCBsb2Nh
bEFuY2hvciwgc21vb3RoaW5nTW9kZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0p
OworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ltYWdlOjpj
cmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkp
OworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBh
aW50aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykp
KTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpk
cmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9
IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRl
KGltYWdlUHRyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2RlLCBv
cmllbnRhdGlvbikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lk
IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sK
KyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykp
KTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpk
cmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0
dGVybjo6Y3JlYXRlKGltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQoreworICAgIGFwcGVuZEl0ZW0o
U2F2ZTo6Y3JlYXRlKCkpOworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxh
c3QoKS5jbG9uZUZvclNhdmUobV9kaXNwbGF5TGlzdC5zaXplKCkgLSAxKSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAgIGlmICghbV9zdGF0ZVN0YWNrLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgc3RhdGVVc2VkRm9yRHJhd2luZyA9IGN1cnJl
bnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nOworICAgIHNpemVfdCBzYXZlSW5kZXggPSBjdXJy
ZW50U3RhdGUoKS5zYXZlSXRlbUluZGV4OworICAgIAorICAgIG1fc3RhdGVTdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgLy8gSGF2ZSB0byBhdm9pZCBlbGlkaW5nIG5lc3RlZCBTYXZlL1Jlc3RvcmUg
d2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29udGFpbnMgZHJhd2luZyBpdGVtcy4KKyAgICBjdXJy
ZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyB8PSBzdGF0ZVVzZWRGb3JEcmF3aW5nOworCisg
ICAgaWYgKCFzdGF0ZVVzZWRGb3JEcmF3aW5nICYmIHNhdmVJbmRleCkgeworICAgICAgICAvLyBU
aGlzIFNhdmUvUmVzdG9yZSBkaWRuJ3QgY29udGFpbiBhbnkgZHJhd2luZyBpdGVtcy4gUm9sbCBi
YWNrIHRvIGp1c3QgYmVmb3JlIHRoZSBsYXN0IHNhdmUuCisgICAgICAgIG1fZGlzcGxheUxpc3Qu
cmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2F2ZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGFwcGVuZEl0ZW0oUmVzdG9yZTo6Y3JlYXRlKCkpOworICAgIAorICAgIGlmIChzYXZl
SW5kZXgpIHsKKyAgICAgICAgU2F2ZSYgc2F2ZUl0ZW0gPSBkb3duY2FzdDxTYXZlPihtX2Rpc3Bs
YXlMaXN0Lml0ZW1BdChzYXZlSW5kZXgpKTsKKyAgICAgICAgc2F2ZUl0ZW0uc2V0UmVzdG9yZUlu
ZGV4KG1fZGlzcGxheUxpc3Quc2l6ZSgpIC0gMSk7CisgICAgfQorfQorCit2b2lkIFJlY29yZGVy
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS50cmFu
c2xhdGUoeCwgeSk7CisgICAgYXBwZW5kSXRlbShUcmFuc2xhdGU6OmNyZWF0ZSh4LCB5KSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3sKKyAgICBj
dXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIGFwcGVuZEl0ZW0oUm90
YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlhbnMpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUp
OworICAgIGFwcGVuZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBj
dXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICBhcHBlbmRJdGVtKENvbmNh
dGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBhcHBl
bmRJdGVtKEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKSk7CisgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit7Cisg
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit7CisgICAgRmxvYXRQ
b2ludCBibG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8gbV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQ
b2ludCgpOworICAgIEZsb2F0U2l6ZSBsb2NhbEFuY2hvciA9IHBvaW50IC0gYmxvY2tMb2NhdGlv
bjsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hv
ciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcykpKTsKKyAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwg
R3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwgd2lkdGgsIHN0eWxlKSkpOwor
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdFbGxpcHNlOjpjcmVhdGUo
cmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29y
ZGVyOjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0
UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdDb252ZXhQb2x5Z29u
OjpjcmVhdGUobnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFzZWQpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3
aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmlu
Z1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIHVwZGF0
ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0
PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0
V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChu
ZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3Jl
YXRlKHJlY3QsIGdyYWRpZW50KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
K3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRN
b2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUm91bmRlZFJlY3Q6
OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6
Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKKyAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVJlY3Q6
OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQorewor
ICAgIEZsb2F0UG9pbnQgYmxvY2tMb2NhdGlvbiA9IG1fY2FjaGluZyA/IG1fYmxvY2tMb2NhdGlv
biA6IEZsb2F0UG9pbnQoKTsKKyAgICBQYXRoIHRyYW5zbGF0ZWQgPSBwYXRoOworICAgIHRyYW5z
bGF0ZWQudHJhbnNsYXRlKC1GbG9hdFNpemUoYmxvY2tMb2NhdGlvbi54KCksIGJsb2NrTG9jYXRp
b24ueSgpKSk7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRl
bT4oYXBwZW5kSXRlbShTdHJva2VQYXRoOjpjcmVhdGUocGF0aCwgYmxvY2tMb2NhdGlvbikpKTsK
KyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZUVsbGlwc2U6OmNy
ZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShDbGVhclJl
Y3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit7CisgICAgYXBwZW5kSXRlbShB
cHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6YXBwbHlG
aWxsUGF0dGVybigpCit7CisgICAgYXBwZW5kSXRlbShBcHBseUZpbGxQYXR0ZXJuOjpjcmVhdGUo
KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOworICAgIGFwcGVu
ZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kSXRlbShDbGlwT3V0OjpjcmVhdGUo
cmVjdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgYXBwZW5kSXRlbShDbGlwT3V0VG9QYXRoOjpjcmVhdGUocGF0aCkpOworfQorCit2b2lk
IFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
K3sKKyAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKSk7CisgICAgYXBwZW5kSXRlbShDbGlwUGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRS
dWxlKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Q
b2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXMpCit7CisgICAg
UGF0aCBwb2x5Z29uUGF0aDsKKyAgICBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKHBvbHlnb25QYXRo
LCBudW1Qb2ludHMsIHBvaW50cyk7CisgICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRl
cnNlY3QocG9seWdvblBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKKworICAgIGFwcGVuZEl0ZW0o
Q2xpcENvbnZleFBvbHlnb246OmNyZWF0ZShudW1Qb2ludHMsIHBvaW50cywgYW50aWFsaWFzKSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpCit7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwg
d2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCisgICAgLy8g
QXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICBhcHBlbmRJdGVtKEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZpY2VTY2FsZUZhY3RvcikpOworfQorCitJ
dGVtJiBSZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVtKQoreworICAgIHdpbGxB
cHBlbmRJdGVtKGl0ZW0uZ2V0KCkpOworICAgIHJldHVybiBtX2Rpc3BsYXlMaXN0LmFwcGVuZChX
VEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3
aW5nSXRlbSYgaXRlbSkgY29uc3QKK3sKKyAgICBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0
ID0gaXRlbS5sb2NhbEJvdW5kcyhtX2dyYXBoaWNzQ29udGV4dCkpCisgICAgICAgIGl0ZW0uc2V0
RXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcyhyZWN0LnZhbHVlKCkpKTsKK30KKworLy8gRklY
TUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQorc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWlu
dGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQoreworICAgIC8vIEJsdXJyaW5nIHVzZXMgYSBH
YXVzc2lhbiBmdW5jdGlvbiB3aG9zZSBzdGQuIGRldmlhdGlvbiBpcyBtX3JhZGl1cy8yLCBhbmQg
d2hpY2ggaW4gdGhlb3J5CisgICAgLy8gZXh0ZW5kcyB0byBpbmZpbml0eS4gSW4gOC1iaXQgY29u
dGV4dHMsIGhvd2V2ZXIsIHJvdW5kaW5nIGNhdXNlcyB0aGUgZWZmZWN0IHRvIGJlY29tZQorICAg
IC8vIHVuZGV0ZWN0YWJsZSBhdCBhcm91bmQgMS40eCB0aGUgcmFkaXVzLgorICAgIGNvbnN0IGZs
b2F0IHJhZGl1c0V4dGVudE11bHRpcGxpZXIgPSAxLjQ7CisgICAgcmV0dXJuIGNlaWxmKGJsdXJS
YWRpdXMgKiByYWRpdXNFeHRlbnRNdWx0aXBsaWVyKTsKK30KKworRmxvYXRSZWN0IFJlY29yZGVy
OjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAorewor
ICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OworICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgc3Rh
dGUgPSBjdXJyZW50U3RhdGUoKTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAg
ZmxvYXQgc2hhZG93UmFkaXVzOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmIChtX2dy
YXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKSkgeworICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50PSBib3VuZHM7CisgICAg
ICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CisgICAgICAgIHNoYWRvd0V4dGVu
dC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOworICAgICAgICBi
b3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKKyAgICB9CisgICAgCisgICAgRmxvYXRSZWN0IGNs
aXBwZWRFeHRlbnQgPSBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgYm91bmRzKTsKKyAg
ICByZXR1cm4gc3RhdGUuY3RtLm1hcFJlY3QoY2xpcHBlZEV4dGVudCk7Cit9CisKK2NvbnN0IFJl
Y29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3RhdGUoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKK30KKworUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRT
dGF0ZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOworICAgIHJldHVybiBt
X3N0YXRlU3RhY2subGFzdCgpOworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVy
OjpjdG0oKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Cit9CisKK2Nv
bnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAoreworICAgIHJldHVy
biBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOworfQorCit2b2lkIFJlY29yZGVyOjpDb250ZXh0
U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIGN0bS50cmFuc2xhdGUo
eCwgeSk7CisgICAgY2xpcEJvdW5kcy5tb3ZlKC14LCAteSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIGRvdWJs
ZSBhbmdsZUluRGVncmVlcyA9IHJhZDJkZWcoc3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFk
aWFucykpOworICAgIGN0bS5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworICAgIAorICAgIEFmZmlu
ZVRyYW5zZm9ybSByb3RhdGlvbjsKKyAgICByb3RhdGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMp
OworCisgICAgaWYgKE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IHJvdGF0aW9u
LmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJvdW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0
KGNsaXBCb3VuZHMpOworfQorCit2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBjdG0uc2NhbGUoc2l6ZSk7CisgICAgY2xpcEJv
dW5kcy5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbWF0cml4KQoreworICAgIGN0bSAqPSBtYXRyaXg7CisKKyAgICBpZiAoT3B0aW9uYWw8QWZm
aW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gbWF0cml4LmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJv
dW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM4ZTAyZDk2N2NmOTczNjU2MWEx
NjVkZGI1MDA3NWRlMmNjMDZlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTAs
MCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBEaXNwbGF5TGlzdFJlY29yZGVyX2gKKyNkZWZpbmUgRGlzcGxheUxpc3RSZWNv
cmRlcl9oCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIiAvLyBGb3IgSW50ZXJwb2xhdGlvblF1YWxpdHkuCisjaW5jbHVkZSAiSW1hZ2UuaCIg
Ly8gRm9yIEltYWdlOjpUaWxlUnVsZS4KKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9h
dFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR2x5cGhCdWZmZXI7CitjbGFzcyBGbG9h
dFBvaW50OworY2xhc3MgRm9udDsKK2NsYXNzIEltYWdlOworCitzdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGU7CitzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CisKK25hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdJdGVtOworCitjbGFzcyBSZWNvcmRlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOworcHVibGljOgorICAgIFJlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgflJlY29yZGVyKCk7CisKKyAgICB2b2lk
IHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKKworICAg
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpv
aW4pOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7CisKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRp
ZW50Jik7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CisgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBm
aWxsUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdp
ZHRoKTsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKKworICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCk7CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisKKyAgICB2b2lkIGRyYXdJbWFnZShJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgZHJhd1RpbGVkSW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdUaWxlZElt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1
bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKTsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0
IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmll
bnRhdGlvbik7CisgICAgdm9pZCBkcmF3UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCk7CisKKyAgICB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyk7CisgICAg
dm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcyk7CisgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSk7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lk
IGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2lu
dCosIGJvb2wgYW50aWFsaWFzZWQpOworICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwor
CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBpbnQgd2lkdGgsIGludCBvZmZz
ZXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKworICAgIHZv
aWQgc2F2ZSgpOworICAgIHZvaWQgcmVzdG9yZSgpOworCisgICAgdm9pZCB0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwor
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJik7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSk7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOworICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKKyAgICB2b2lkIGNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFudGlhbGlhcyk7CisgICAg
CisgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKKworICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5zaXplKCk7IH0KKworcHJpdmF0ZToK
KyAgICBJdGVtJiBhcHBlbmRJdGVtKFJlZjxJdGVtPiYmKTsKKyAgICB2b2lkIHdpbGxBcHBlbmRJ
dGVtKGNvbnN0IEl0ZW0mKTsKKworICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMo
Y29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVJdGVtRXh0ZW50KERyYXdp
bmdJdGVtJikgY29uc3Q7CisgICAgCisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBj
b25zdDsKKyAgICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKKworICAgIHN0
cnVjdCBDb250ZXh0U3RhdGUgeworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOworICAgICAg
ICBGbG9hdFJlY3QgY2xpcEJvdW5kczsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2Ugc3RhdGVDaGFuZ2U7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIGxhc3REcmF3aW5n
U3RhdGU7CisgICAgICAgIGJvb2wgd2FzVXNlZEZvckRyYXdpbmcgeyBmYWxzZSB9OworICAgICAg
ICBzaXplX3Qgc2F2ZUl0ZW1JbmRleCB7IDAgfTsKKyAgICAgICAgCisgICAgICAgIENvbnRleHRT
dGF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBj
bGlwKQorICAgICAgICAgICAgOiBjdG0odHJhbnNmb3JtKQorICAgICAgICAgICAgLCBjbGlwQm91
bmRzKGNsaXApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ29udGV4
dFN0YXRlIGNsb25lRm9yU2F2ZShzaXplX3Qgc2F2ZUluZGV4KSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBDb250ZXh0U3RhdGUgc3RhdGUoY3RtLCBjbGlwQm91bmRzKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0gc3RhdGVDaGFuZ2U7CisgICAgICAgICAgICBzdGF0ZS5s
YXN0RHJhd2luZ1N0YXRlID0gbGFzdERyYXdpbmdTdGF0ZTsKKyAgICAgICAgICAgIHN0YXRlLnNh
dmVJdGVtSW5kZXggPSBzYXZlSW5kZXg7CisgICAgICAgICAgICByZXR1cm4gc3RhdGU7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICAg
ICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOworICAgICAgICB2b2lkIHNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpOworICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKKyAgICB9OworICAgIAorICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgY3VycmVu
dFN0YXRlKCkgY29uc3Q7CisgICAgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKTsKKworICAg
IEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QmIG1f
ZGlzcGxheUxpc3Q7CisKKyAgICBib29sIG1fY2FjaGluZyB7IGZhbHNlIH07CisgICAgRmxvYXRQ
b2ludCBtX2Jsb2NrTG9jYXRpb247CisgICAgCisgICAgVmVjdG9yPENvbnRleHRTdGF0ZSwgMzI+
IG1fc3RhdGVTdGFjazsKK307CisKK30KK30KKworI2VuZGlmIC8vIERpc3BsYXlMaXN0UmVjb3Jk
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjUwMzg3Njg2MTc4MmE1ZGE3ZTcwNDU4YzBlY2U4MDM4NjU1OWNmNWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZXBsYXllci5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RGlzcGxheUxpc3RSZXBsYXllci5oIgorCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworUmVwbGF5ZXI6OlJlcGxheWVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
KQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKKyAgICAsIG1fY29udGV4dChjb250
ZXh0KQoreworfQorCitSZXBsYXllcjo6flJlcGxheWVyKCkKK3sKK30KKwordm9pZCBSZXBsYXll
cjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXApCit7CisgICAgTE9HX1dJVEhf
U1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJcblJlcGxheWluZyB3aXRoIGNsaXAgIiA8
PCBpbml0aWFsQ2xpcCk7CisgICAgVU5VU0VEX1BBUkFNKGluaXRpYWxDbGlwKTsKKworICAgIHNp
emVfdCBudW1JdGVtcyA9IG1fZGlzcGxheUxpc3Quc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgeworICAgICAgICBhdXRvJiBpdGVtID0gbV9kaXNwbGF5
TGlzdC5saXN0KClbaV0uZ2V0KCk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlz
dHMsIHN0cmVhbSA8PCAiZHJhd2luZyAgIiA8PCBpIDw8ICIgIiA8PCBpdGVtKTsKKyAgICAgICAg
aXRlbS5hcHBseShtX2NvbnRleHQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYWJiYWVmMDEyOGM0MTM0MWNjYWY5NWQ5ODQzNzJhY2Uz
ZmQyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXNw
bGF5TGlzdFJlcGxheWVyX2gKKyNkZWZpbmUgRGlzcGxheUxpc3RSZXBsYXllcl9oCisKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERpc3BsYXlMaXN0OworCitjbGFz
cyBSZXBsYXllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVwbGF5ZXIpOworcHVibGlj
OgorICAgIFJlcGxheWVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IERpc3BsYXlMaXN0Jik7Cisg
ICAgflJlcGxheWVyKCk7CisKKyAgICB2b2lkIHJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlz
dDsKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKK307CisKK30KK30KKworI2VuZGlm
IC8vIERpc3BsYXlMaXN0UmVwbGF5ZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268433</attachid>
            <date>2016-01-06 18:52:25 -0800</date>
            <delta_ts>2016-01-06 21:03:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106185152.patch</filename>
            <type>text/plain</type>
            <size>148354</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NWRmYTQ4MjAzZGE3
YzYyYjYyN2YxMGVkYWMyZDEyZmFjYjFmMC4uZDQzMmIzYWEwZDMzMmZmZDE4NzVhM2U1MjgzOTBj
MWY4NmE1Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmMyYjg3NTkzZmE1ZTRlMDhiZDEzNmVlNDQ0ODkzYzMyNDU1YmI5ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworI2lmIFVTRShDRykKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX2No
YW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRl
eHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xv
cik7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3Rh
dGUuZmlsbENvbG9yKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9r
ZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQor
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5k
LW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxl
ZENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0
aW9uLWVuYWJsZWQiLCBtX3N0YXRlLmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxk
LXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJh
d0x1bWluYW5jZU1hc2tDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1p
bmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2UpCit7CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0
dXJuIHRzOworfQorCisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRp
bmdDb250cm9sVGludHMoZmFsc2UpCiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDUyYjFhZDgyYjJmOGE1ODcwOGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEy
OTMzYzBmMjM3OGEzYzEzN2ZjZjYzYWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0g
Q2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwLAorICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBo
YUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAg
ICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
ICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAor
ICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3
LAorICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8
IDE4LAorICAgICAgICBBbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAx
IDw8IDE5LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAg
PSAxIDw8IDIwLAorICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIxLAorICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAg
ICAgICAgPSAxIDw8IDIyLAorICAgIH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5n
ZUZsYWdzOworCiAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQ
dHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxl
OwogfTsKIAorc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUp
CisgICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFncyB7IDAgfTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk0NjJiZGViZWQ3YmI1YWQ2OTI4ZjI5OTU1MmQwMGFmNmFlOTc2
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKKyNpZiAhZGVmaW5lZChO
REVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBEaXNwbGF5TGlzdDo6ZGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7Cisg
ICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1
bXAoKSBjb25zdAoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRh
dGEoKSk7Cit9CisjZW5kaWYKKwordm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0
cyA8PCAiZGlzcGxheSBsaXN0IjsKKworICAgIHNpemVfdCBudW1JdGVtcyA9IG1fbGlzdC5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAg
IFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMpOworICAgICAgICB0cyA8PCBpIDw8ICIg
IiA8PCBtX2xpc3RbaV0uZ2V0KCk7CisgICAgfQorICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICB0
cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOworICAgIHRzLmVuZEdyb3Vw
KCk7Cit9CisKK3NpemVfdCBEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAg
IHNpemVfdCByZXN1bHQgPSAwOworICAgIGZvciAoYXV0byYgcmVmIDogbV9saXN0KSB7CisgICAg
ICAgIHN3aXRjaCAocmVmLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2F2ZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KHJlZi5nZXQo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihyZWYuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2NhbGU+KHJlZi5nZXQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4o
cmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRl
PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTZXRM
aW5lQ2FwPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8U2V0TGluZURhc2g+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVv
Zihkb3duY2FzdDxTZXRMaW5lSm9pbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAg
ICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwPihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICAg
ICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0
aDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBD
b252ZXhQb2x5Z29uOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlw
Q29udmV4UG9seWdvbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2Yo
ZG93bmNhc3Q8RHJhd0dseXBocz4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmVz
dWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxl
ZEltYWdlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdOYXRpdmVJbWFnZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXN1bHQg
Kz0gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgICAgIHJl
c3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd1JlY3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICAgICAg
cmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93
bmNhc3Q8RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdv
bjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0NvbnZleFBvbHln
b24+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3
UGF0aD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4ocmVmLmdldCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6
CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJl
Y3RXaXRoQ29sb3I+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAgICAgcmVzdWx0ICs9
IHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8RmlsbFJvdW5kZWRSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgICAg
IHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQ
YXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bEVsbGlwc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxp
cHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VSZWN0OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxT
dHJva2VSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3du
Y2FzdDxTdHJva2VQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxTdHJva2VFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgICAgICByZXN1
bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9m
KGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAg
ICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QXBw
bHlGaWxsUGF0dGVybj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NjEyOGEyNTMxMGIzYzk5YmQxZGZkOWFlNjM0NjBjMDg2MjdlNTgwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0X2gKKyNkZWZpbmUgRGlzcGxheUxp
c3RfaAorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgVGV4dFN0cmVhbTsKKworbmFtZXNwYWNl
IERpc3BsYXlMaXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3QgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERpc3BsYXlMaXN0KTsKKyAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CitwdWJsaWM6
CisgICAgRGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CisgICAgRGlzcGxheUxpc3QoRGlzcGxheUxp
c3QmJikgPSBkZWZhdWx0OworCisgICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlz
dCYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0OworCisg
ICAgY29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7
IH0KKyAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9saXN0LnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2xpc3QuY2xlYXIoKTsgfQor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAg
dm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBt
X2xpc3QucmVzaXplKGluZGV4KTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBj
b25zdDsKKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAgIFdURjo6
Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworICAgIHZvaWQgZHVtcCgpIGNvbnN0OworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCisgICAg
eworICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOworICAgICAgICByZXR1cm4g
bV9saXN0Lmxhc3QoKS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlz
dCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorCisgICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworfSAvLyBXZWJDb3JlCisK
K3VzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKKworI2VuZGlmIC8qIERp
c3BsYXlMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jZDgyZDdmMjU2NjZjNTVkYWM2NmEwYTc1Nzg2OTkzMDU0NzM5MjdlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNs
dWRlICJUZXh0U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CisKKy8vIFNob3VsZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpCitzdGF0aWMgY29uc3QgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7
CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBJ
dGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICB0cyA8
PCAqdGhpczsKKyAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKK30KKyNlbmRpZgorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2lu
Z0l0ZW0mIGl0ZW0pCit7CisgICAgdHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJleHRlbnQg
IjsKKyAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQorICAgICAgICB0cyA8PCBpdGVtLmV4dGVu
dCgpOworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgInVua25vd24iOworICAgIAorICAgIHRzLmVu
ZEdyb3VwKCk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0
ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3Jl
SW5kZXgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30K
Kwordm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Cit9CisKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgieSIsIGl0ZW0ueSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBSb3RhdGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJvdGF0
ZShtX2FuZ2xlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xl
IiwgaXRlbS5hbmdsZSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTY2FsZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2NhbGUo
bV9zaXplKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjYWxlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0
ZW0uYW1vdW50KCkpOworCisgICAgcmV0dXJuIHRzOworfQorCitDb25jYXRlbmF0ZUNUTTo6Q29u
Y2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKKyAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkK
K3sKK30KKwordm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNh
dGVuYXRlQ1RNJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFu
c2Zvcm0oKSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBtX3N0YXRlLmFwcGx5KGNvbnRl
eHQpOworfQorCit2b2lkIFNldFN0YXRlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit7CisgICAgbV9zdGF0ZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYg
c3RhdGUpCit7CisgICAgdHMgPDwgc3RhdGUuc3RhdGUoKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K3ZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNh
cCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNo
QXJyYXksIG1fZGFzaE9mZnNldCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCit7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpv
aW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0
TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0
ZXJMaW1pdCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1p
dC5taXRlckxpbWl0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclNoYWRvdzo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xl
YXJTaGFkb3coKTsKK30KKwordm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQorewor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK3ZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOwor
fQorCit2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK3sKKyAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmKQor
eworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTog
cGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGlwUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcFBhdGgo
bV9wYXRoLCBtX3dpbmRSdWxlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQoreworLy8gICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAg
IHRzLmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsKKyAgICByZXR1
cm4gdHM7Cit9CisKK0NsaXBDb252ZXhQb2x5Z29uOjpDbGlwQ29udmV4UG9seWdvbihzaXplX3Qg
bnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNl
ZCkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRp
YWxpYXMoYW50aWFsaWFzZWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlBvaW50czsgKytpKQorICAgICAgICBtX3BvaW50cy5hcHBlbmQocG9pbnRzW2ldKTsKK30KKwor
dm9pZCBDbGlwQ29udmV4UG9seWdvbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAoreworICAgIGNvbnRleHQuY2xpcENvbnZleFBvbHlnb24obV9wb2ludHMuc2l6ZSgpLCBt
X3BvaW50cy5kYXRhKCksIG1fYW50aWFsaWFzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBDb252ZXhQb2x5Z29uJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbnRpYWxpYXMiLCBpdGVtLmFudGlhbGlhcygpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK0RyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQorICAgICwgbV9mb250
KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9j
YXRpb24pCisgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICwgbV9zbW9vdGhp
bmdNb2RlKHNtb290aGluZ01vZGUpCit7CisgICAgbV9nbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjb3VudCk7CisgICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBt
X2dseXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKKyAgICAgICAgbV9hZHZhbmNlcy51
bmNoZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOworICAgIH0KKyAgICBjb21wdXRlQm91bmRzKCk7
Cit9CisKK2lubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVy
KCkgY29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7CisjaWYgVVNFKENBSVJPKQorICAgICAg
ICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLmluZGV4LCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2Vz
W2ldKTsKKyNlbHNlCisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICZtX2ZvbnQuZ2V0
KCksIG1fYWR2YW5jZXNbaV0pOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIFVOVVNFRF9QQVJBTShtX3Ntb290aGluZ01vZGUp
OworfQorCit2b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgZG9lc24ndCBhY3R1YWxseSB0YWtlIHRoZSBleHRlbnRzIG9mIHRoZSBnbHlw
aHMgaW50byBjb25zaWRlcmF0aW9uLiBJdCBhc3N1bWVzIHRoYXQKKyAgICAvLyB0aGUgZ2x5cGgg
bGllcyBlbnRpcmVseSB3aXRoaW4gaXRzIChhc2NlbnQrZGVzY2VudCB4IGFkdmFuY2UpIHJlY3Qu
CisgICAgZmxvYXQgYXNjZW50ID0gbV9mb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7
CisgICAgZmxvYXQgZGVzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdERlc2NlbnQo
KTsKKyAgICBGbG9hdFBvaW50IGN1cnJlbnQgPSB0b0Zsb2F0UG9pbnQobG9jYWxBbmNob3IoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgeworICAg
ICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07CisgICAgICAg
IEZsb2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgp
IC0gYXNjZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICBt
X2JvdW5kcy51bml0ZShnbHlwaFJlY3QpOworCisgICAgICAgIGN1cnJlbnQgKz0gRmxvYXRTaXpl
KGFkdmFuY2UpOworICAgIH0KK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3R2x5cGhzOjps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVj
dCBsb2NhbEJvdW5kcyA9IG1fYm91bmRzOworICAgIGxvY2FsQm91bmRzLm1vdmUobV9ibG9ja0xv
Y2F0aW9uLngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7CisgICAgcmV0dXJuIGxvY2FsQm91bmRz
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0dseXBocyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCisgICAgdHMu
ZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMoKS5zaXplKCkpOworCisg
ICAgcmV0dXJuIHRzOworfQorCitEcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAs
IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAg
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2
b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291
cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKK3sKKyAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291
cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVj
dCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorCitEcmF3VGlsZWRJ
bWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdU
aWxlZEltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVz
dGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX3RpbGVTaXplKHRpbGVT
aXplKQorICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRp
b25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lkIERyYXdUaWxlZEltYWdlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3
VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxl
U2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdl
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdU
aWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6
VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNj
YWxlRmFjdG9yKQorICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAsIG1fdlJ1bGUodlJ1bGUpCisg
ICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQor
Cit2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBt
X2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1
bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0p
Cit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKwor
RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdl
UHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKKyAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2UpCisjaWYgVVNFKENHKQorICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIHN0b3JlIGFuIGltYWdlIGZvciBDYWlyby4KKyAgICAsIG1faW1hZ2VQdHIo
aW1hZ2VQdHIpCisjZW5kaWYKKyAgICAsIG1faW1hZ2VTaXplKGltYWdlU2l6ZSkKKyAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdFJlY3QpCisgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAsIG1f
b3Aob3ApCisgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCisgICAgLCBtX29yaWVudGF0aW9u
KG9yaWVudGF0aW9uKQoreworfQorCit2b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICBjb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShtX2ltYWdlUHRyLmdldCgpLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlv
biwgbV9zcmNSZWN0LCBtX29wLCBtX2JsZW5kTW9kZSwgbV9vcmllbnRhdGlvbik7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVt
KQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Cisg
ICAgLy8gRklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KKyAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJj
ZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3Qi
LCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKworRHJhd1BhdHRlcm46
OkRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3UGF0dGVybikKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAg
LCBtX3BhdHRlcm5UcmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSkKKyAgICAsIG1fdGlsZVJlY3Qo
dGlsZVJlY3QpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RSZWN0KQorICAgICwgbV9waGFzZShw
aGFzZSkKKyAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQorICAgICwgbV9vcChvcCkKKyAgICAsIG1f
YmxlbmRNb2RlKGJsZW5kTW9kZSkKK3sKK30KKwordm9pZCBEcmF3UGF0dGVybjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd1BhdHRlcm4o
bV9pbWFnZS5nZXQoKSwgbV90aWxlUmVjdCwgbV9wYXR0ZXJuVHJhbnNmb3JtLCBtX3BoYXNlLCBt
X3NwYWNpbmcsIG1fb3AsIG1fZGVzdGluYXRpb24sIG1fYmxlbmRNb2RlKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJu
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJwYXR0ZXJuLXRyYW5zZm9ybSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInRpbGUtcmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RSZWN0KCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgicGhhc2UiLCBpdGVtLnBoYXNlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQg
RHJhd1JlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBj
b250ZXh0LmRyYXdSZWN0KG1fcmVjdCwgbV9ib3JkZXJUaGlja25lc3MpOworfQorCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1JlY3QmIGl0
ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJib3JkZXItdGhpY2tuZXNzIiwgaXRlbS5ib3JkZXJUaGlja25lc3MoKSk7CisgICAg
cmV0dXJuIHRzOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZHM7
CisgICAgYm91bmRzLmZpdFRvUG9pbnRzKG1fcG9pbnQxLCBtX3BvaW50Mik7CisgICAgcmV0dXJu
IGJvdW5kczsKK30KKwordm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0xpbmUobV9wb2ludDEsIG1fcG9pbnQyKTsK
K30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdMaW5lJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0xIiwgaXRlbS5wb2ludDEo
KSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0yIiwgaXRlbS5wb2ludDIoKSk7CisgICAg
cmV0dXJuIHRzOworfQorCit2b2lkIERyYXdMaW5lc0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9p
bnQoKSwgbV93aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOworfQorCitPcHRpb25h
bDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4g
YSB2YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKSByZXR1cm5zLgorCisgICAg
aWYgKCFtX3dpZHRocy5zaXplKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAg
IEZsb2F0UmVjdCByZXN1bHQocG9pbnQoKSwgRmxvYXRTaXplKG1fd2lkdGhzLmxhc3QoKSwgbV9z
dHJva2VXaWR0aCkpOworICAgIHJlc3VsdC5pbmZsYXRlKDEpOyAvLyBBY2NvdW50IGZvciBwaXhl
bCBzbmFwcGluZy4gRklYTUU6IFRoaXMgaXNuJ3QgcGVyZmVjdCwgYXMgaXQgZG9lc24ndCB0YWtl
IHRoZSBDVE0gaW50byBhY2NvdW50LgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZXNGb3JU
ZXh0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tM
b2NhdGlvbigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9j
YWxBbmNob3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludCIsIGl0ZW0ucG9pbnQoKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJkb3VibGUiLCBpdGVtLmRvdWJsZUxpbmVzKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgid2lkdGhzIiwgaXRlbS53aWR0aHMoKSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJpcy1wcmludGluZyIsIGl0ZW0uaXNQcmludGluZygpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7CisgICAgcmV0dXJuIHRzOworfQor
Cit2b2lkIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIo
bV9wb2ludCwgbV93aWR0aCwgbV9zdHlsZSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZhbHVl
IGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcigpIHJldHVybnMuCisKKyAgICBGbG9hdFJlY3QgcmVzdWx0KG1fcG9pbnQs
IEZsb2F0U2l6ZShtX3dpZHRoLCBjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKSk7CisgICAgcmVz
dWx0LmluZmxhdGUoY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcyk7IC8vIEFjY291bnQgZm9yICJt
aXNzcGVsbGluZyBkb3QiIHNuYXBwaW5nLgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludCIsIGl0ZW0ucG9p
bnQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CisgICAg
cmV0dXJuIHRzOworfQorCit2b2lkIERyYXdFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3RWxsaXBzZShtX3JlY3QpOworfQor
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0VsbGlwc2UmIGl0ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOworICAgIHJldHVybiB0czsKK30KKworLy8gRklYTUU6IHNoYXJlIHRoaXMgY29kZS4KK3Zv
aWQgYWRkQ29udmV4UG9seWdvblRvUGF0aChQYXRoJiBwYXRoLCBzaXplX3QgbnVtUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiBwb2ludHMpCit7CisgICAgQVNTRVJUKG51bVBvaW50cyA+IDApOwor
CisgICAgcGF0aC5tb3ZlVG8ocG9pbnRzWzBdKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8
IG51bVBvaW50czsgKytpKQorICAgICAgICBwYXRoLmFkZExpbmVUbyhwb2ludHNbaV0pOworICAg
IHBhdGguY2xvc2VTdWJwYXRoKCk7Cit9CisKK0RyYXdDb252ZXhQb2x5Z29uOjpEcmF3Q29udmV4
UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywg
Ym9vbCBhbnRpYWxpYXNlZCkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Q29udmV4
UG9seWdvbikKKyAgICAsIG1fYW50aWFsaWFzZWQoYW50aWFsaWFzZWQpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlBvaW50czsgKytpKQorICAgICAgICBtX3BvaW50cy5h
cHBlbmQocG9pbnRzW2ldKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Q29udmV4UG9s
eWdvbjo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBG
bG9hdFJlY3QgcmVzdWx0OworICAgIGZvciAoYXV0byYgcG9pbnQgOiBtX3BvaW50cykKKyAgICAg
ICAgcmVzdWx0LmV4dGVuZChwb2ludCk7CisgICAgcmVzdWx0LmluZmxhdGUobV9hbnRpYWxpYXNl
ZCA/IDEgOiAwKTsgLy8gQWNjb3VudCBmb3IgYW50aWFsaWFzaW5nCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBEcmF3Q29udmV4UG9seWdvbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0NvbnZleFBvbHlnb24obV9wb2ludHMu
c2l6ZSgpLCBtX3BvaW50cy5kYXRhKCksIG1fYW50aWFsaWFzZWQpOworfQorCitzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0NvbnZleFBvbHln
b24mIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50cyIsIGl0ZW0ucG9pbnRzKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYW50aWFsaWFzZWQiLCBpdGVtLmFudGlhbGlhc2VkKCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0
aCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyNlbmRpZgorfQorCitzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgm
IGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKKy8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6
IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0Zv
Y3VzUmluZ1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9wYXRoLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xv
cik7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmluZ1BhdGg6OmxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3Vs
dCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CisgICAgcmVzdWx0LmluZmxhdGUocGxhdGZv
cm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRo
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1F
OiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0
ZW0ud2lkdGgoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICByZXR1
cm4gdHM7Cit9CisKK3ZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcmVjdHMs
IG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBE
cmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX3Jl
Y3RzKQorICAgICAgICByZXN1bHQudW5pdGUocmVjdCk7CisgICAgcmVzdWx0LmluZmxhdGUocGxh
dGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdS
ZWN0cyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdHMiLCBpdGVtLnJlY3RzKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xv
ciIsIGl0ZW0uY29sb3IoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSZWN0Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxs
UmVjdChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBp
dGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSZWN0V2l0aENvbG9y
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5m
aWxsUmVjdChtX3JlY3QsIG1fY29sb3IpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoQ29sb3ImIGl0ZW0pCit7Cisg
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJj
b2xvciIsIGl0ZW0uY29sb3IoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxSZWN0
V2l0aEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fZ3JhZGllbnQuZ2V0KCkpOworfQorCitzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RX
aXRoR3JhZGllbnQmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKKyAgICAvLyBGSVhNRTogbG9nIGdyYWRpZW50LgorICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQg
RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRN
b2RlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIs
IGl0ZW0ucmVjdCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBv
c2l0ZU9wZXJhdG9yKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0u
YmxlbmRNb2RlKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsUm91bmRlZFJlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZp
bGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVk
UmVjdCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7CisgICAgcmV0dXJuIHRz
OworfQorCit2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShtX3JlY3QsIG1fcm91bmRlZEhvbGVSZWN0LCBtX2NvbG9yKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicm91bmRlZC1ob2xlLXJlY3QiLCBpdGVtLnJvdW5kZWRIb2xlUmVj
dCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKKyAgICBy
ZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZpbGxQYXRoKG1fcGF0aCk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUGF0aCYg
aXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTog
cGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsRWxsaXBzZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbEVs
bGlwc2UobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
IiwgaXRlbS5yZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0
PiBTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAor
eworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7CisgICAgYm91bmRzLmV4cGFuZChtX2xp
bmVXaWR0aCwgbV9saW5lV2lkdGgpOworICAgIHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQgU3Ry
b2tlUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQuc3Ryb2tlUmVjdChtX3JlY3QsIG1fbGluZVdpZHRoKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0ZW0p
Cit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7CisgICAgcmV0dXJuIHRzOworfQor
CitPcHRpb25hbDxGbG9hdFJlY3Q+IFN0cm9rZVBhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byB0YWtl
IHN0cm9rZSB0aGlja25lc3MgaW50byBhY2NvdW50IGNvcnJlY3RseSwgdmlhIENHUGF0aEJ5U3Ry
b2tpbmdQYXRoKCkuCisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VU
aGlja25lc3MoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3BhdGguYm91bmRpbmdSZWN0
KCk7CisgICAgYm91bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7
CisgICAgYm91bmRzLm1vdmVCeShtX2Jsb2NrTG9jYXRpb24pOworICAgIHJldHVybiBib3VuZHM7
Cit9CisKK3ZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAoreworICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSB0b0Zsb2F0U2l6ZShtX2Jsb2NrTG9jYXRp
b24pOworICAgIG1fcGF0aC50cmFuc2xhdGUob2Zmc2V0KTsKKyAgICBjb250ZXh0LnN0cm9rZVBh
dGgobV9wYXRoKTsKKyAgICBtX3BhdGgudHJhbnNsYXRlKC1vZmZzZXQpOworfQorCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYg
aXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRp
b24oKSk7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJ
WE1FOiBwYXRoIGxvZ2dpbmcuCisgICAgcmV0dXJuIHRzOworfQorCitPcHRpb25hbDxGbG9hdFJl
Y3Q+IFN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LnN0cm9r
ZVRoaWNrbmVzcygpOworCisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKKyAgICBib3Vu
ZHMuZXhwYW5kKHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICByZXR1cm4g
Ym91bmRzOworfQorCit2b2lkIFN0cm9rZUVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnN0cm9rZUVsbGlwc2UobV9yZWN0KTsKK30K
Kworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0
cm9rZUVsbGlwc2UmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIENsZWFyUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xlYXJSZWN0KG1fcmVjdCk7Cit9
CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
bGVhclJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCit2b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIobV9vcGFjaXR5KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXImIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoIm9wYWNpdHkiLCBpdGVtLm9wYWNpdHkoKSk7CisgICAgcmV0dXJuIHRz
OworfQorCit2b2lkIEVuZFRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
fQorCit2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICBjb250ZXh0LmFwcGx5U3Ryb2tlUGF0dGVy
bigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisjZW5kaWYKK30KKwordm9p
ZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Cit7CisjaWYgVVNFKENHKQorICAgIGNvbnRleHQuYXBwbHlGaWxsUGF0dGVybigpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisjZW5kaWYKK30KKwordm9pZCBBcHBseURldmlj
ZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2NhbGVGYWN0b3IpOworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoInNjYWxlLWZh
Y3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbVR5cGUmIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMg
PDwgInNhdmUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVz
dG9yZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5z
bGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0ZS1j
dG0iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0
ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGlu
ZS1jYXAiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNl
dC1saW5lLWRhc2giOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMg
PDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0
cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRo
OiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cENvbnZleFBvbHlnb246IHRzIDw8ICJjbGlwLWNvbnZleC1wb2x5Z29uIjsgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczogdHMgPDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB0cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFn
ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8
PCAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOiB0cyA8PCAiZHJhdy1wYXR0ZXJuIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHRzIDw8ICJkcmF3LXJlY3QiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogdHMgPDwgImRyYXctbGluZSI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHRzIDw8ICJkcmF3LWxpbmVzLWZvci10
ZXh0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cjogdHMgPDwgImRyYXctbGluZXMtZm9yLWRvY3VtZW50LW1hcmtlciI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB0cyA8PCAiZHJhdy1lbGxpcHNlIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0NvbnZleFBvbHlnb246IHRzIDw8ICJkcmF3LWNvbnZleC1w
b2xnb24iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogdHMgPDwgImRyYXct
cGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOiB0cyA8
PCAiZHJhdy1mb2N1cy1yaW5nLXBhdGgiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
Rm9jdXNSaW5nUmVjdHM6IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmctcmVjdHMiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVjdCI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgt
Y29sb3IiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDog
dHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVkLXJlY3QiOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8ICJmaWxsLXJvdW5k
ZWQtcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHRzIDw8ICJmaWxsLXBhdGgiOyBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogdHMgPDwgImZpbGwtZWxsaXBzZSI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHRzIDw8ICJzdHJva2UtcmVjdCI7IGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHRzIDw8ICJzdHJva2UtcGF0aCI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHRzIDw8ICJzdHJva2UtZWxsaXBz
ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogdHMgPDwgImNsZWFyLXJl
Y3QiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOiB0
cyA8PCAiYmVnaW4tdHJhbnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHRzIDw8ICJlbmQtdHJhbnNwYXJlbmN5LWxheWVyIjsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOiB0cyA8PCAiYXBw
bHktc3Ryb2tlLXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOiB0cyA8PCAiYXBwbHktZmlsbC1wYXR0ZXJuIjsgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1m
YWN0b3IiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNs
ZWFyLXNoYWRvdyI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCit7CisgICAg
VGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CisgICAgdHMgPDwgaXRlbS50eXBlKCk7
CisKKyAgICAvLyBGSVhNRTogTWFrZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFs
bCB0aGVzZSBlbnVtZXJhdGlvbiBzd2l0Y2hlcworICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTYXZlPihp
dGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAg
ICAgICB0cyA8PCBkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTY2FsZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxDb25jYXRl
bmF0ZUNUTT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PFNldExpbmVDYXA+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lRGFzaDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxT
ZXRNaXRlckxpbWl0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcD4oaXRlbSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENs
aXBPdXQ+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0
VG9QYXRoOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHRzIDw8
IGRvd25jYXN0PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcENvbnZleFBvbHlnb246CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBDb252
ZXhQb2x5Z29uPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0dseXBoczoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd0ltYWdlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZElt
YWdlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdl
PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUlt
YWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAgdHMg
PDwgZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1JlY3Q+KGl0
ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxE
cmF3TGluZXNGb3JUZXh0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBz
ZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdDb252ZXhQ
b2x5Z29uOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Q29udmV4UG9seWdvbj4oaXRlbSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3UGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3
Rm9jdXNSaW5nUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmlu
Z1JlY3RzPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0PihpdGVtKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgIHRzIDw8
IGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxG
aWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSb3VuZGVk
UmVjdD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQ
YXRoOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUGF0aD4oaXRlbSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAgICAgICB0cyA8PCBkb3du
Y2FzdDxGaWxsRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ry
b2tlRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKworICAgIC8vIEl0ZW1zIHdpdGggbm8gYWRkaXRpb25hbCBkYXRhLgorICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJl
bmN5TGF5ZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJT
aGFkb3c6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK30KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjZTJkYzNkMjA3YTVk
YWM5YzQ3MmVhNzkwMDIxYzQ3YTA5MjYwODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBA
IC0wLDAgKzEsMTQyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0SXRlbXNfaAorI2RlZmluZSBEaXNwbGF5TGlzdEl0
ZW1zX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9U
eXBlQ2FzdHMuaD4KKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDRy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
VGV4dFN0cmVhbTsKK3N0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKKworbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKKworZW51bSBjbGFzcyBJdGVtVHlwZSB7CisgICAgU2F2ZSwKKyAgICBSZXN0
b3JlLAorICAgIFRyYW5zbGF0ZSwKKyAgICBSb3RhdGUsCisgICAgU2NhbGUsCisgICAgQ29uY2F0
ZW5hdGVDVE0sCisgICAgU2V0U3RhdGUsCisgICAgU2V0TGluZUNhcCwKKyAgICBTZXRMaW5lRGFz
aCwKKyAgICBTZXRMaW5lSm9pbiwKKyAgICBTZXRNaXRlckxpbWl0LAorICAgIENsZWFyU2hhZG93
LAorICAgIENsaXAsCisgICAgQ2xpcE91dCwKKyAgICBDbGlwT3V0VG9QYXRoLAorICAgIENsaXBQ
YXRoLAorICAgIENsaXBDb252ZXhQb2x5Z29uLAorICAgIERyYXdHbHlwaHMsCisgICAgRHJhd0lt
YWdlLAorICAgIERyYXdUaWxlZEltYWdlLAorICAgIERyYXdUaWxlZFNjYWxlZEltYWdlLAorICAg
IERyYXdOYXRpdmVJbWFnZSwKKyAgICBEcmF3UGF0dGVybiwKKyAgICBEcmF3UmVjdCwKKyAgICBE
cmF3TGluZSwKKyAgICBEcmF3TGluZXNGb3JUZXh0LAorICAgIERyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIsCisgICAgRHJhd0VsbGlwc2UsCisgICAgRHJhd0NvbnZleFBvbHlnb24sCisgICAgRHJh
d1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzLAor
ICAgIEZpbGxSZWN0LAorICAgIEZpbGxSZWN0V2l0aENvbG9yLAorICAgIEZpbGxSZWN0V2l0aEdy
YWRpZW50LAorICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICBGaWxsUm91bmRlZFJlY3QsCisg
ICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisgICAgRmlsbFBhdGgsCisgICAgRmlsbEVsbGlw
c2UsCisgICAgU3Ryb2tlUmVjdCwKKyAgICBTdHJva2VQYXRoLAorICAgIFN0cm9rZUVsbGlwc2Us
CisgICAgQ2xlYXJSZWN0LAorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgRW5kVHJh
bnNwYXJlbmN5TGF5ZXIsCisgICAgQXBwbHlTdHJva2VQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxk
IG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCisgICAgQXBwbHlGaWxsUGF0dGVybiwgLy8gRklYTUU6
IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IsCit9OworCitjbGFzcyBJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8SXRlbT4geworcHVibGlj
OgorICAgIEl0ZW0oKSA9IGRlbGV0ZTsKKworICAgIEl0ZW0oSXRlbVR5cGUgdHlwZSkKKyAgICAg
ICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+SXRlbSgpIHsg
fQorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90
eXBlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCA9IDA7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEaXNwbGF5TGlzdEl0ZW0g
PSB0cnVlOworCisgICAgdmlydHVhbCBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIAorICAgIC8vIEEgc3RhdGUgaXRlbSBpcyBvbmUgcHJlc2VydmVkIGJ5
IFNhdmUvUmVzdG9yZS4KKyAgICBib29sIGlzU3RhdGVJdGVtKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc1N0YXRlSXRlbVR5cGUobV90eXBlKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc1N0YXRlSXRlbVR5cGUoSXRlbVR5cGUgaXRlbVR5cGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGl0ZW1UeXBlKSB7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBUcmFuc2xhdGU6Cisg
ICAgICAgIGNhc2UgSXRlbVR5cGU6OiBSb3RhdGU6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBT
Y2FsZToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IENvbmNhdGVuYXRlQ1RNOgorICAgICAgICBj
YXNlIEl0ZW1UeXBlOjogU2V0U3RhdGU6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5l
Q2FwOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TGluZURhc2g6CisgICAgICAgIGNhc2Ug
SXRlbVR5cGU6OiBTZXRMaW5lSm9pbjoKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldE1pdGVy
TGltaXQ6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBDbGVhclNoYWRvdzoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyNpZiAhZGVmaW5l
ZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKKyAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEl0ZW1UeXBlIG1fdHlwZTsKK307CisK
K2NsYXNzIERyYXdpbmdJdGVtIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIERyYXdpbmdJ
dGVtKEl0ZW1UeXBlIHR5cGUpCisgICAgICAgIDogSXRlbSh0eXBlKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIHNldEV4dGVudChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9leHRlbnQgPSByOyB9
CisgICAgY29uc3QgRmxvYXRSZWN0JiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudC52
YWx1ZSgpOyB9CisKKyAgICBib29sIGV4dGVudEtub3duKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9CisKKyAgICAvLyBSZXR1cm4gYm91bmRzIG9mIHRoaXMg
ZHJhd2luZyBvcGVyYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCisgICAgLy8gRG9lcyBub3Qg
aW5jbHVkZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFkb3cgZXRjIGluIHRoZSBzdGF0ZS4KKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QgeyByZXR1cm4gTnVsbG9wdDsgfQorCitwcml2YXRlOgorICAgIHZpcnR1
YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGluYXRlcywgdGFraW5n
IHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorfTsKKworY2xhc3MgU2F2ZSA6
IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNhdmU+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYXZlKTsKKyAgICB9CisKKyAgICAv
LyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIFJlc3RvcmUg
aXRlbS4gMCBpZiB1bm1hdGNoZWQuCisgICAgc2l6ZV90IHJlc3RvcmVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9CisgICAgdm9pZCBzZXRSZXN0b3JlSW5kZXgoc2l6ZV90
IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0gaW5kZXg7IH0KKworcHJpdmF0ZToKKyAgICBTYXZl
KCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTYXZlKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
CisgICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9OworfTsKKworY2xhc3MgUmVzdG9yZSA6
IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlc3RvcmU+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXN0b3JlKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgUmVzdG9yZSgpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6UmVzdG9y
ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgVHJhbnNsYXRlIDogcHVibGljIEl0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRyYW5zbGF0ZSh4LCB5
KSk7CisgICAgfQorCisgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAgIGZs
b2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKworcHJpdmF0ZToKKyAgICBUcmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpUcmFuc2xhdGUpCisg
ICAgICAgICwgbV94KHgpCisgICAgICAgICwgbV95KHkpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7Cit9OworCitjbGFzcyBSb3RhdGUgOiBwdWJsaWMg
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShh
bmdsZUluUmFkaWFucykpOworICAgIH0KKworICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1
cm4gbV9hbmdsZTsgfQorCitwcml2YXRlOgorICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKKyAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCisgICAgICAgICwgbV9hbmdsZShhbmdsZSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFkaWFucy4KK307CisK
K2NsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U2Nh
bGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTY2FsZShzaXplKSk7CisgICAgfQorCisgICAgY29uc3QgRmxvYXRTaXpl
JiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBTY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2NhbGUp
CisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0U2l6
ZSBtX3NpemU7Cit9OworCitjbGFzcyBDb25jYXRlbmF0ZUNUTSA6IHB1YmxpYyBJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBtYXRyaXgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
b25jYXRlbmF0ZUNUTShtYXRyaXgpKTsKKyAgICB9CisKKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisKK3ByaXZhdGU6
CisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Cit9OworCitjbGFzcyBTZXRTdGF0ZSA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dFN0YXRlKHN0YXRlLCBmbGFncykpOworICAgIH0KKyAgICAKKyAgICBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAg
ICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICB2b2lkIGFjY3VtdWxhdGUoR3Jh
cGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICBzdGF0aWMgdm9pZCBkdW1wU3Rh
dGVDaGFuZ2VzKFRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKK3ByaXZhdGU6CisgICAgU2V0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRT
dGF0ZSkKKyAgICAgICAgLCBtX3N0YXRlKHN0YXRlLCBmbGFncykKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZTsKK307CisKK2NsYXNzIFNl
dExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRMaW5l
Q2FwPiBjcmVhdGUoTGluZUNhcCBsaW5lQ2FwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU2V0TGluZUNhcChsaW5lQ2FwKSk7CisgICAgfQorICAgIAorICAgIExpbmVDYXAg
bGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQorCitwcml2YXRlOgorICAgIFNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExp
bmVDYXApCisgICAgICAgICwgbV9saW5lQ2FwKGxpbmVDYXApCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIExpbmVDYXAgbV9saW5lQ2FwOworfTsKKworY2xhc3MgU2V0TGluZURhc2ggOiBwdWJsaWMg
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0
IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7
CisgICAgfQorCisgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVy
biBtX2Rhc2hBcnJheTsgfQorICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2Rhc2hPZmZzZXQ7IH0KKworcHJpdmF0ZToKKyAgICBTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRMaW5lRGFzaCkKKyAgICAgICAgLCBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCisgICAgICAg
ICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIERhc2hB
cnJheSBtX2Rhc2hBcnJheTsKKyAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7Cit9OworCitjbGFzcyBT
ZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldExp
bmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihsaW5lSm9pbikpOworICAgIH0KKyAgICAKKyAgICBM
aW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KKworcHJpdmF0
ZToKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKKyAgICAgICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRMaW5lSm9pbikKKyAgICAgICAgLCBtX2xpbmVKb2luKGxpbmVKb2luKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luOworfTsKKworY2xhc3MgU2V0
TWl0ZXJMaW1pdCA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldE1p
dGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldE1pdGVyTGltaXQobGltaXQpKTsKKyAgICB9CisKKyAgICBmbG9hdCBtaXRl
ckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CisKK3ByaXZhdGU6CisgICAg
U2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6
OlNldE1pdGVyTGltaXQpCisgICAgICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKK307CisKK2NsYXNzIENsZWFy
U2hhZG93IDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xlYXJTaGFk
b3c+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclNo
YWRvdyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsZWFyU2hhZG93KCkKKyAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworLy8gRklY
TUU6IHRyZWF0IGFzIERyYXdpbmdJdGVtPworY2xhc3MgQ2xpcCA6IHB1YmxpYyBJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXA+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwKHJlY3QpKTsKKyAgICB9
CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2
YXRlOgorICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IEl0ZW0oSXRl
bVR5cGU6OkNsaXApCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXQocmVj
dCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIENsaXBP
dXRUb1BhdGggOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGlwT3V0
VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOworICAgIH0KKworICAgIGNvbnN0IFBh
dGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworcHJpdmF0ZToKKyAgICBDbGlw
T3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xp
cE91dFRvUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBDbGlwUGF0aCA6IHB1YmxpYyBJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXBQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgd2luZFJ1bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
bGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOworICAgIH0KKworICAgIGNvbnN0IFBhdGgmIHBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KKworcHJpdmF0ZToKKyAgICBDbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpD
bGlwUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX3dpbmRSdWxlKHdp
bmRSdWxlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBQYXRoIG1fcGF0aDsKKyAgICBXaW5kUnVs
ZSBtX3dpbmRSdWxlOworfTsKKworY2xhc3MgQ2xpcENvbnZleFBvbHlnb24gOiBwdWJsaWMgSXRl
bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGlwQ29udmV4UG9seWdvbj4gY3JlYXRlKHNp
emVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlh
bGlhc2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcENvbnZleFBv
bHlnb24obnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFzZWQpKTsKKyAgICB9CisKKyAg
ICBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fcG9p
bnRzOyB9CisgICAgYm9vbCBhbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX2FudGlhbGlhczsg
fQorCitwcml2YXRlOgorICAgIENsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50
cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9y
PEZsb2F0UG9pbnQ+IG1fcG9pbnRzOworICAgIGJvb2wgbV9hbnRpYWxpYXM7Cit9OworCitjbGFz
cyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNp
emUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBjb3VudCwgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUp
KTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tM
b2NhdGlvbjsgfQorCisgICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KKworICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBj
b25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9CisKKyAgICBj
b25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1
cm4gbV9nbHlwaHM7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6
ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKworICAgIHZvaWQgY29tcHV0ZUJv
dW5kcygpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgR2x5cGhCdWZm
ZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0OworCisgICAgUmVmPEZvbnQ+IG1fZm9udDsK
KyAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBoczsKKyAgICBWZWN0b3I8
R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7CisgICAgRmxvYXRSZWN0IG1fYm91
bmRzOworICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAgIEZsb2F0U2l6ZSBtX2xv
Y2FsQW5jaG9yOworICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5nTW9kZTsKK307CisK
K2NsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxEcmF3SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFp
bnRpbmdPcHRpb25zKSk7CisgICAgfQorCisgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZTsgfQorICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworcHJpdmF0ZToKKyAgICBEcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBtdXRhYmxlIFJlZjxJbWFnZT4g
bV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRp
b25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCisgICAg
RmxvYXRSZWN0IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRSZWN0IG1fc291cmNlOworICAgIElt
YWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7Cit9OworCitjbGFzcyBE
cmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICB9CisKKyAgICBjb25z
dCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgRmxv
YXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIEZsb2F0UmVj
dCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworICAgIEZs
b2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KKyAgICBGbG9h
dFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQorCitwcml2YXRlOgor
ICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisg
ICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBj
YW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2
ZSB0byBiZSBtdXRhYmxlLgorICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOworICAgIEZsb2F0
UG9pbnQgbV9zb3VyY2U7CisgICAgRmxvYXRTaXplIG1fdGlsZVNpemU7CisgICAgRmxvYXRTaXpl
IG1fc3BhY2luZzsKKyAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRp
b25zOworfTsKKworY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IGNyZWF0
ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRp
bGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsK
KyAgICB9CisKKyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
LmdldCgpOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
OyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQorCitwcml2YXRlOgorICAgIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIHZp
cnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBt
dXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBj
YXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRv
IGJlIG11dGFibGUuCisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRSZWN0
IG1fc291cmNlOworICAgIEZsb2F0U2l6ZSBtX3RpbGVTY2FsZUZhY3RvcjsKKyAgICBJbWFnZTo6
VGlsZVJ1bGUgbV9oUnVsZTsKKyAgICBJbWFnZTo6VGlsZVJ1bGUgbV92UnVsZTsKKyAgICBJbWFn
ZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworfTsKKworY2xhc3MgRHJh
d05hdGl2ZUltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPERyYXdOYXRpdmVJbWFnZT4gY3JlYXRlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBi
bGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VQdHIsIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSk7CisgICAgfQor
CisgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQorICAg
IEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0K
KworcHJpdmF0ZToKKyAgICBEcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBjb25z
dCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb24pOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KKworI2lmIFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9p
bWFnZVB0cjsKKyNlbmRpZgorICAgIEZsb2F0U2l6ZSBtX2ltYWdlU2l6ZTsKKyAgICBGbG9hdFJl
Y3QgbV9kZXN0aW5hdGlvbjsKKyAgICBGbG9hdFJlY3QgbV9zcmNSZWN0OworICAgIENvbXBvc2l0
ZU9wZXJhdG9yIG1fb3A7CisgICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOworICAgIEltYWdlT3Jp
ZW50YXRpb24gbV9vcmllbnRhdGlvbjsKK307CisKK2NsYXNzIERyYXdQYXR0ZXJuIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVh
dGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRHJhd1BhdHRlcm4oaW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpKTsKKyAgICB9CisK
KyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9
CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOyB9CisgICAgRmxvYXRSZWN0IHRpbGVSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV90aWxlUmVjdDsgfQorICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9waGFzZTsgfQorICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zcGFjaW5nOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9y
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwp
OworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247
IH0KKworICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBp
bWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxk
bid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9wYXR0ZXJuVHJh
bnNmb3JtOworICAgIEZsb2F0UmVjdCBtX3RpbGVSZWN0OworICAgIEZsb2F0UmVjdCBtX2Rlc3Rp
bmF0aW9uOworICAgIEZsb2F0UG9pbnQgbV9waGFzZTsKKyAgICBGbG9hdFNpemUgbV9zcGFjaW5n
OworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7CisgICAgQmxlbmRNb2RlIG1fYmxlbmRNb2Rl
OworfTsKKworLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNw
YXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgorY2xhc3MgQmVnaW5U
cmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxCZWdpblRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoZmxvYXQgb3BhY2l0eSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSkpOworICAgIH0KKworICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBt
X29wYWNpdHk7IH0KKworcHJpdmF0ZToKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIpCisgICAgICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIGZsb2F0IG1fb3BhY2l0eTsKK307CisKK2NsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVy
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEVuZFRyYW5z
cGFyZW5jeUxheWVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRW5kVHJhbnNwYXJlbmN5TGF5ZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBFbmRUcmFu
c3BhcmVuY3lMYXllcigpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCitjbGFzcyBEcmF3UmVjdCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3Jl
YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRl
clRoaWNrbmVzczsgfQorCitwcml2YXRlOgorICAgIERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3UmVjdCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2JvcmRl
clRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0
OworICAgIGZsb2F0IG1fYm9yZGVyVGhpY2tuZXNzOworfTsKKworY2xhc3MgRHJhd0xpbmUgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0xpbmU+IGNy
ZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lKHBvaW50MSwgcG9p
bnQyKSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJldHVybiBt
X3BvaW50MTsgfQorICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4gbV9wb2lu
dDI7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd0xpbmUpCisgICAgICAgICwgbV9wb2ludDEocG9pbnQxKQorICAgICAgICAsIG1fcG9p
bnQyKHBvaW50MikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIEZsb2F0UG9pbnQgbV9wb2ludDE7CisgICAgRmxvYXRQb2ludCBtX3BvaW50MjsKK307
CisKK2NsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVzRm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBz
dHJva2VXaWR0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5l
c0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZUxpbmVzLCBzdHJva2VXaWR0aCkpOworICAgIH0KKworICAgIHZvaWQgc2V0QmxvY2tMb2Nh
dGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9
IGJsb2NrTG9jYXRpb247IH0KKyAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CisgICAgY29uc3QgRmxvYXRTaXplJiBs
b2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KKyAgICBGbG9hdFBv
aW50IHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uICsgbV9sb2NhbEFuY2hv
cjsgfQorICAgIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aHM7IH0KKyAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9
CisgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0K
KworcHJpdmF0ZToKKyAgICBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0
aCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dCkKKyAg
ICAgICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICAgICAgLCBtX2xvY2Fs
QW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICAgICAsIG1fd2lkdGhzKHdpZHRocykKKyAgICAgICAg
LCBtX3N0cm9rZVdpZHRoKHN0cm9rZVdpZHRoKQorICAgICAgICAsIG1fcHJpbnRpbmcocHJpbnRp
bmcpCisgICAgICAgICwgbV9kb3VibGVMaW5lcyhkb3VibGVMaW5lcykKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRQb2ludCBtX2Jsb2Nr
TG9jYXRpb247CisgICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7CisgICAgRGFzaEFycmF5IG1f
d2lkdGhzOworICAgIGZsb2F0IG1fc3Ryb2tlV2lkdGg7CisgICAgYm9vbCBtX3ByaW50aW5nOwor
ICAgIGJvb2wgbV9kb3VibGVMaW5lczsKK307CisKK2NsYXNzIERyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcj4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIocG9pbnQsIHdpZHRoLCBzdHlsZSkpOworICAgIH0KKworICAgIEZsb2F0UG9pbnQg
cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50OyB9CisgICAgZmxvYXQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX3dpZHRoOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIEdyYXBoaWNzQ29u
dGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAgICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCisgICAgICAgICwgbV9wb2lu
dChwb2ludCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fc3R5bGUoc3R5
bGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAg
IEZsb2F0UG9pbnQgbV9wb2ludDsKKyAgICBmbG9hdCBtX3dpZHRoOworICAgIEdyYXBoaWNzQ29u
dGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHlsZTsKK307CisKK2NsYXNzIERyYXdF
bGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERy
YXdFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0VsbGlwc2UocmVjdCkpOworICAgIH0KKworICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAg
RHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKwor
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBEcmF3Q29udmV4UG9seWdvbiA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Q29udmV4UG9s
eWdvbj4gY3JlYXRlKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzLCBib29sIGFudGlhbGlhc2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd0NvbnZleFBvbHlnb24obnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFzZWQp
KTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBvaW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fcG9pbnRzOyB9CisgICAgYm9vbCBhbnRpYWxpYXNlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYW50aWFsaWFzZWQ7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3Q29udmV4UG9seWdvbihz
aXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFudGlhbGlhc2Vk
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8RmxvYXRQb2lu
dD4gbV9wb2ludHM7CisgICAgYm9vbCBtX2FudGlhbGlhc2VkOworfTsKKworY2xhc3MgRHJhd1Bh
dGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1Bh
dGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd1BhdGgocGF0aCkpOworICAgIH0KKworICAgIGNvbnN0IFBhdGgmIHBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3UGF0aChjb25z
dCBQYXRoJiBwYXRoKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3UGF0aCkK
KyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKworICAg
IFBhdGggbV9wYXRoOworfTsKKworY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+IGNy
ZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1Jp
bmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgfQorCisgICAgY29uc3Qg
UGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAgIGludCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
KworcHJpdmF0ZToKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBpbnQg
d2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGgpCisgICAgICAgICwgbV9wYXRoKHBhdGgp
CisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisg
ICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgUGF0aCBtX3BhdGg7CisgICAgaW50IG1fd2lkdGg7CisgICAg
aW50IG1fb2Zmc2V0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBEcmF3Rm9jdXNS
aW5nUmVjdHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVhdGUoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
aW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBv
ZmZzZXQsIGNvbG9yKSk7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+IHJlY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0czsgfQorICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGg7IH0KKyAgICBpbnQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKworcHJpdmF0
ZToKKyAgICBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
aW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKKyAgICAgICAgLCBtX3JlY3Rz
KHJlY3RzKQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zm
c2V0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiBtX3JlY3RzOworICAg
IGludCBtX3dpZHRoOworICAgIGludCBtX29mZnNldDsKKyAgICBDb2xvciBtX2NvbG9yOworfTsK
KworY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RmlsbFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdChyZWN0KSk7CisgICAgfQorCisg
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToK
KyAgICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkZpbGxSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKKy8vIEZJWE1FOiBNYWtlIHRoZXNlIGluaGVyaXQg
ZnJvbSBGaWxsUmVjdCBwcm9wZXIuCitjbGFzcyBGaWxsUmVjdFdpdGhDb2xvciA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29s
b3IpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2
YXRlOgorICAgIEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhDb2xvcikKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9y
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBDb2xvciBtX2NvbG9yOworfTsK
KworY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KSk7Cisg
ICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKwor
cHJpdmF0ZToKKyAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9n
cmFkaWVudChncmFkaWVudCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgbXV0
YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtlIHRoaXMgbm90IG11
dGFibGUKK307CisKK2NsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+IGNyZWF0ZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsK
KyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQor
ICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQorICAg
IEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQorCitw
cml2YXRlOgorICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkK
KyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICAg
ICAsIG1fb3Aob3ApCisgICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBDb2xvciBtX2NvbG9yOworICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIG1fb3A7CisgICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOworfTsKKworY2xhc3MgRmls
bFJvdW5kZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPEZpbGxSb3VuZGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRN
b2RlKSk7CisgICAgfQorCisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3I7IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9ibGVuZE1vZGU7IH0KKworcHJpdmF0ZToKKyAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QpCisg
ICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAgICAg
LCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQorCisgICAgRmxvYXRSb3VuZGVk
UmVjdCBtX3JlY3Q7CisgICAgQ29sb3IgbV9jb2xvcjsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1v
ZGU7Cit9OworCitjbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKSk7CisgICAgfQorCisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yb3VuZGVkSG9sZVJlY3Q7IH0KKyAgICBDb2xvciBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKworcHJpdmF0ZToKKyAgICBGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkKKyAgICAgICAgLCBt
X3JlY3QocmVjdCkKKyAgICAgICAgLCBtX3JvdW5kZWRIb2xlUmVjdChyb3VuZGVkSG9sZVJlY3Qp
CisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7
CisgICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JvdW5kZWRIb2xlUmVjdDsKKyAgICBDb2xvciBtX2Nv
bG9yOworfTsKKworY2xhc3MgRmlsbFBhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8RmlsbFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFBhdGgocGF0aCkpOworICAgIH0K
KworICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworcHJp
dmF0ZToKKyAgICBGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJv
dW5kaW5nUmVjdCgpOyB9CisKKyAgICBQYXRoIG1fcGF0aDsKK307CisKK2NsYXNzIEZpbGxFbGxp
cHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxF
bGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRmlsbEVsbGlwc2UocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgRmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpGaWxsRWxsaXBzZSkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Ryb2tlUmVjdD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpKTsKKyAgICB9CisK
KyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGZsb2F0
IGxpbmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoOyB9CisKK3ByaXZhdGU6Cisg
ICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAg
ICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUmVjdCkKKyAgICAgICAgLCBtX3Jl
Y3QocmVjdCkKKyAgICAgICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0Owor
ICAgIGZsb2F0IG1fbGluZVdpZHRoOworfTsKKworY2xhc3MgU3Ryb2tlUGF0aCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHJva2VQYXRoPiBjcmVhdGUo
Y29uc3QgUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRQb2ludCYgbV9ibG9ja0xvY2F0aW9uKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUGF0aChwYXRoLCBtX2Jsb2Nr
TG9jYXRpb24pKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9u
OyB9CisgICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tMb2NhdGlvbjsgfQorICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KKworcHJpdmF0ZToKKyAgICBTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pCisgICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OlN0cm9rZVBhdGgpCisgICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgICAgICwg
bV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIFBhdGggbV9wYXRoOworICAgIEZsb2F0
UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworfTsKKworY2xhc3MgU3Ryb2tlRWxsaXBzZSA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHJva2VFbGxpcHNlPiBj
cmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBTdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6U3Ryb2tlRWxsaXBzZSkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9
OworCitjbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJSZWN0KHJlY3QpKTsKKyAgICB9
CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2
YXRlOgorICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkNsZWFyUmVjdCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7
IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBBcHBseVN0cm9rZVBhdHRl
cm4gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBcHBseVN0cm9rZVBh
dHRlcm4+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBs
eVN0cm9rZVBhdHRlcm4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcHBseVN0cm9rZVBhdHRl
cm4oKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybikKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworfTsKKworY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6QXBwbHlGaWxsUGF0dGVybikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworCitjbGFzcyBB
cHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihzY2FsZUZhY3RvcikpOworICAgIH0KKworICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQorCitwcml2YXRlOgorICAgIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBw
bHlEZXZpY2VTY2FsZUZhY3RvcikKKyAgICAgICAgLCBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9y
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOworfTsKKworLy8g
RklYTUU6IHRoaXMgbmVlZHMgdG8gbW92ZS4KK3ZvaWQgYWRkQ29udmV4UG9seWdvblRvUGF0aChQ
YXRoJiwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCopOworCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJdGVtJik7CisKK30gLy8gbmFtZXNwYWNl
IERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKworI2RlZmluZSBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwg
cHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRp
Y2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0
ZW0oKSkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
VG9WYWx1ZVR5cGVOYW1lKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlw
ZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oUmVzdG9yZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShUcmFuc2xhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUm90
YXRlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNjYWxlKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVuYXRlQ1RNKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVDYXApCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZURhc2gpCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUpvaW4pCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1pdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGlwKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKENsaXBPdXQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oQ2xpcE91dFRvUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShDbGlwUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlw
Q29udmV4UG9seWdvbikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3R2x5cGhzKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJ
bWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRJ
bWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRT
Y2FsZWRJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
TmF0aXZlSW1hZ2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d1BhdHRlcm4pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1Jl
Y3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdF
bGxpcHNlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdDb252
ZXhQb2x5Z29uKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQ
YXRoKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1Jp
bmdQYXRoKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1
c1JpbmdSZWN0cykKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxs
UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdp
dGhDb2xvcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVj
dFdpdGhHcmFkaWVudCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShG
aWxsQ29tcG9zaXRlZFJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRmlsbFJvdW5kZWRSZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEZpbGxQYXRoKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKEZpbGxFbGxpcHNlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFN0cm9rZVJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
U3Ryb2tlUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJv
a2VFbGxpcHNlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsZWFy
UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShCZWdpblRyYW5z
cGFyZW5jeUxheWVyKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEVu
ZFRyYW5zcGFyZW5jeUxheWVyKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJTaGFkb3cpCisKKyNlbmRpZiAvLyBEaXNwbGF5TGlzdEl0
ZW1zX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNzIyMDc5MDYxMzRkZTI4MWE4MGVmZTcxNDMwZTU3ZjE4YWM2MjliCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0wLDAgKzEsNDgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CisKK1JlY29yZGVyOjpSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBiYXNlQ1RNKQorICAgIDogbV9ncmFwaGljc0NvbnRleHQo
Y29udGV4dCkKKyAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCit7CisgICAgTE9HX1dJ
VEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJcblJlY29yZGluZyB3aXRoIGNsaXAg
IiA8PCBpbml0aWFsQ2xpcCk7CisKKyAgICAvLyBGSVhNRTogaG9vayB1cCByZWNvcmRlciBpbiB0
aGUgR3JhcGhpY3NDb250ZXh0LgorICAgIC8vIG1fZ3JhcGhpY3NDb250ZXh0LnNldERpc3BsYXlM
aXN0UmVjb3JkZXIodGhpcyk7CisgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChDb250ZXh0U3RhdGUo
YmFzZUNUTSwgaW5pdGlhbENsaXApKTsKK30KKworUmVjb3JkZXI6On5SZWNvcmRlcigpCit7Cisg
ICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0
IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KKyAgICBMT0coRGlzcGxheUxpc3Rz
LCAiUmVjb3JkZWQgZGlzcGxheSBsaXN0OlxuJXMiLCBtX2Rpc3BsYXlMaXN0LmRlc2NyaXB0aW9u
KCkuZGF0YSgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRl
bSYgaXRlbSkKK3sKKyAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkgfHwgaXRlbS50eXBlKCkg
PT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybiB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlw
ZTo6QXBwbHlTdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21MYXN0U3Rh
dGUgPSBzdGF0ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJh
d2luZ1N0YXRlKTsKKyAgICAgICAgaWYgKGNoYW5nZXNGcm9tTGFzdFN0YXRlKSB7CisgICAgICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5n
LCBzYXZpbmcgc3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5n
ZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKKyAgICAgICAgICAgIG1fZGlzcGxh
eUxpc3QuYXBwZW5kKFNldFN0YXRlOjpjcmVhdGUoc3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNoYW5n
ZXNGcm9tTGFzdFN0YXRlKSk7CisgICAgICAgICAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFn
cyA9IDA7CisgICAgICAgICAgICBjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3Rh
dGVDaGFuZ2VzLm1fc3RhdGU7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFN0YXRlKCkud2Fz
VXNlZEZvckRyYXdpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBSZWNvcmRlcjo6dXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5zdGF0
ZUNoYW5nZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNs
ZWFyU2hhZG93KCkKK3sKKyAgICBhcHBlbmRJdGVtKENsZWFyU2hhZG93OjpjcmVhdGUoKSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQoreworICAgIGFw
cGVuZEl0ZW0oU2V0TGluZUNhcDo6Y3JlYXRlKGxpbmVDYXApKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZz
ZXQpCit7CisgICAgYXBwZW5kSXRlbShTZXRMaW5lRGFzaDo6Y3JlYXRlKGRhc2hBcnJheSwgZGFz
aE9mZnNldCkpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5l
Sm9pbikKK3sKKyAgICBhcHBlbmRJdGVtKFNldExpbmVKb2luOjpjcmVhdGUobGluZUpvaW4pKTsK
K30KKwordm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQorewor
ICAgIGFwcGVuZEl0ZW0oU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKG1pdGVyTGltaXQpKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAg
IEZsb2F0UG9pbnQgYmxvY2tMb2NhdGlvbiA9IG1fY2FjaGluZyA/IG1fYmxvY2tMb2NhdGlvbiA6
IEZsb2F0UG9pbnQoKTsKKyAgICBGbG9hdFNpemUgbG9jYWxBbmNob3IgPSBzdGFydFBvaW50IC0g
YmxvY2tMb2NhdGlvbjsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKERyYXdHbHlwaHM6OmNyZWF0ZShmb250LCBnbHlwaEJ1ZmZlci5n
bHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIGJsb2Nr
TG9jYXRpb24sIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1F
eHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCit7Cisg
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9p
ZCBSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkSW1hZ2U6OmNyZWF0
ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFp
bnRpbmdPcHRpb25zKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2VQdHIs
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIERyYXdpbmdJ
dGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd05hdGl2
ZUltYWdlOjpjcmVhdGUoaW1hZ2VQdHIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
LCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFp
bnRpbmdPcHRpb25zKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
K3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKERyYXdQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGRlc3RSZWN0LCBibGVuZE1vZGUpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2F2ZSgpCit7Cisg
ICAgYXBwZW5kSXRlbShTYXZlOjpjcmVhdGUoKSk7CisgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCht
X3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZShtX2Rpc3BsYXlMaXN0LnNpemUoKSAtIDEp
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCit7CisgICAgaWYgKCFtX3N0YXRlU3Rh
Y2suc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBzdGF0ZVVzZWRGb3JE
cmF3aW5nID0gY3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRyYXdpbmc7CisgICAgc2l6ZV90IHNh
dmVJbmRleCA9IGN1cnJlbnRTdGF0ZSgpLnNhdmVJdGVtSW5kZXg7CisgICAgCisgICAgbV9zdGF0
ZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAvLyBIYXZlIHRvIGF2b2lkIGVsaWRpbmcgbmVzdGVk
IFNhdmUvUmVzdG9yZSB3aGVuIGEgZGVzY2VuZGFudCBzdGF0ZSBjb250YWlucyBkcmF3aW5nIGl0
ZW1zLgorICAgIGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nIHw9IHN0YXRlVXNlZEZv
ckRyYXdpbmc7CisKKyAgICBpZiAoIXN0YXRlVXNlZEZvckRyYXdpbmcgJiYgc2F2ZUluZGV4KSB7
CisgICAgICAgIC8vIFRoaXMgU2F2ZS9SZXN0b3JlIGRpZG4ndCBjb250YWluIGFueSBkcmF3aW5n
IGl0ZW1zLiBSb2xsIGJhY2sgdG8ganVzdCBiZWZvcmUgdGhlIGxhc3Qgc2F2ZS4KKyAgICAgICAg
bV9kaXNwbGF5TGlzdC5yZW1vdmVJdGVtc0Zyb21JbmRleChzYXZlSW5kZXgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXBwZW5kSXRlbShSZXN0b3JlOjpjcmVhdGUoKSk7CisgICAg
CisgICAgaWYgKHNhdmVJbmRleCkgeworICAgICAgICBTYXZlJiBzYXZlSXRlbSA9IGRvd25jYXN0
PFNhdmU+KG1fZGlzcGxheUxpc3QuaXRlbUF0KHNhdmVJbmRleCkpOworICAgICAgICBzYXZlSXRl
bS5zZXRSZXN0b3JlSW5kZXgobV9kaXNwbGF5TGlzdC5zaXplKCkgLSAxKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIGN1cnJl
bnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBhcHBlbmRJdGVtKFRyYW5zbGF0ZTo6Y3Jl
YXRlKHgsIHkpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRp
YW5zKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7CisgICAg
YXBwZW5kSXRlbShSb3RhdGU6OmNyZWF0ZShhbmdsZUluUmFkaWFucykpOworfQorCit2b2lkIFJl
Y29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgY3VycmVudFN0YXRl
KCkuc2NhbGUoc2l6ZSk7CisgICAgYXBwZW5kSXRlbShTY2FsZTo6Y3JlYXRlKHNpemUpKTsKK30K
Kwordm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAgIGFw
cGVuZEl0ZW0oQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSh0cmFuc2Zvcm0pKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIERy
YXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oQmVn
aW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNpdHkpKSk7CisgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KQoreworICAgIGFwcGVuZEl0ZW0oRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpKTsKK30K
Kwordm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UmVjdDo6Y3JlYXRlKHJlY3QsIGJvcmRlclRoaWNr
bmVzcykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29y
ZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKERyYXdMaW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKSk7CisgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykK
K3sKKyAgICBGbG9hdFBvaW50IGJsb2NrTG9jYXRpb24gPSBtX2NhY2hpbmcgPyBtX2Jsb2NrTG9j
YXRpb24gOiBGbG9hdFBvaW50KCk7CisgICAgRmxvYXRTaXplIGxvY2FsQW5jaG9yID0gcG9pbnQg
LSBibG9ja0xvY2F0aW9uOworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJh
d2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKGJsb2NrTG9jYXRp
b24sIGxvY2FsQW5jaG9yLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhp
Y2tuZXNzKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHBvaW50LCB3aWR0
aCwgc3R5bGUpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERyYXdp
bmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0Vs
bGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50
cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQoreworICAgIERy
YXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJh
d0NvbnZleFBvbHlnb246OmNyZWF0ZShudW1iZXJPZlBvaW50cywgcG9pbnRzLCBhbnRpYWxpYXNl
ZCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVy
OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1BhdGg6OmNyZWF0ZShwYXRo
KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2Fz
dDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7Cisg
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3Ip
KSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJ
dGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3Q6OmNyZWF0ZShy
ZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
eworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVu
ZEl0ZW0oRmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZShyZWN0LCBjb2xvcikpKTsKKyAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKK3sKKyAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0
aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3JhZGllbnQpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVu
dChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJh
d2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUocmVjdCwgY29s
b3IsIG9wLCBibGVuZE1vZGUpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30K
Kwordm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZp
bGxSb3VuZGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpKTsKKyAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFBhdGg6OmNyZWF0ZShwYXRoKSkpOworICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9
IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxFbGxpcHNlOjpjcmVhdGUocmVj
dCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVy
OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewor
ICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0
ZW0oU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpKTsKKyAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCit7CisgICAgRmxvYXRQb2ludCBibG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8g
bV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgIFBhdGggdHJhbnNsYXRlZCA9IHBh
dGg7CisgICAgdHJhbnNsYXRlZC50cmFuc2xhdGUoLUZsb2F0U2l6ZShibG9ja0xvY2F0aW9uLngo
KSwgYmxvY2tMb2NhdGlvbi55KCkpKTsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoLCBibG9j
a0xvY2F0aW9uKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERy
YXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oU3Ry
b2tlRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKENsZWFyUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChu
ZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3sKKyAg
ICBhcHBlbmRJdGVtKEFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKCkpOworfQorCit2b2lkIFJl
Y29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKK3sKKyAgICBhcHBlbmRJdGVtKEFwcGx5RmlsbFBh
dHRlcm46OmNyZWF0ZSgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocmVj
dCk7CisgICAgYXBwZW5kSXRlbShDbGlwOjpjcmVhdGUocmVjdCkpOworfQorCit2b2lkIFJlY29y
ZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmRJdGVtKENs
aXBPdXQ6OmNyZWF0ZShyZWN0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3Qg
UGF0aCYgcGF0aCkKK3sKKyAgICBhcHBlbmRJdGVtKENsaXBPdXRUb1BhdGg6OmNyZWF0ZShwYXRo
KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIHdpbmRSdWxlKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0
KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKKyAgICBhcHBlbmRJdGVtKENsaXBQYXRoOjpjcmVh
dGUocGF0aCwgd2luZFJ1bGUpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xpcENvbnZleFBvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlh
bGlhcykKK3sKKyAgICBQYXRoIHBvbHlnb25QYXRoOworICAgIGFkZENvbnZleFBvbHlnb25Ub1Bh
dGgocG9seWdvblBhdGgsIG51bVBvaW50cywgcG9pbnRzKTsKKyAgICBjdXJyZW50U3RhdGUoKS5j
bGlwQm91bmRzLmludGVyc2VjdChwb2x5Z29uUGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOworCisg
ICAgYXBwZW5kSXRlbShDbGlwQ29udmV4UG9seWdvbjo6Y3JlYXRlKG51bVBvaW50cywgcG9pbnRz
LCBhbnRpYWxpYXMpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2Vz
IHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0
ZW50cy4KKyAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPworICAg
IGFwcGVuZEl0ZW0oQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKGRldmljZVNjYWxlRmFj
dG9yKSk7Cit9CisKK0l0ZW0mIFJlY29yZGVyOjphcHBlbmRJdGVtKFJlZjxJdGVtPiYmIGl0ZW0p
Cit7CisgICAgd2lsbEFwcGVuZEl0ZW0oaXRlbS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZGlzcGxh
eUxpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIFJlY29yZGVyOjp1cGRhdGVJ
dGVtRXh0ZW50KERyYXdpbmdJdGVtJiBpdGVtKSBjb25zdAoreworICAgIGlmIChPcHRpb25hbDxG
bG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKG1fZ3JhcGhpY3NDb250ZXh0KSkKKyAg
ICAgICAgaXRlbS5zZXRFeHRlbnQoZXh0ZW50RnJvbUxvY2FsQm91bmRzKHJlY3QudmFsdWUoKSkp
OworfQorCisvLyBGSVhNRTogc2hhcmUgd2l0aCBTaGFkb3dEYXRhCitzdGF0aWMgaW5saW5lIGZs
b2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJsdXJSYWRpdXMpCit7CisgICAgLy8gQmx1
cnJpbmcgdXNlcyBhIEdhdXNzaWFuIGZ1bmN0aW9uIHdob3NlIHN0ZC4gZGV2aWF0aW9uIGlzIG1f
cmFkaXVzLzIsIGFuZCB3aGljaCBpbiB0aGVvcnkKKyAgICAvLyBleHRlbmRzIHRvIGluZmluaXR5
LiBJbiA4LWJpdCBjb250ZXh0cywgaG93ZXZlciwgcm91bmRpbmcgY2F1c2VzIHRoZSBlZmZlY3Qg
dG8gYmVjb21lCisgICAgLy8gdW5kZXRlY3RhYmxlIGF0IGFyb3VuZCAxLjR4IHRoZSByYWRpdXMu
CisgICAgY29uc3QgZmxvYXQgcmFkaXVzRXh0ZW50TXVsdGlwbGllciA9IDEuNDsKKyAgICByZXR1
cm4gY2VpbGYoYmx1clJhZGl1cyAqIHJhZGl1c0V4dGVudE11bHRpcGxpZXIpOworfQorCitGbG9h
dFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHJlY3Q7CisgICAgY29uc3QgQ29u
dGV4dFN0YXRlJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOworCisgICAgRmxvYXRTaXplIHNoYWRv
d09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7
CisgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CisgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQ9
IGJvdW5kczsKKyAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKKyAgICAg
ICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVz
KSk7CisgICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOworICAgIH0KKyAgICAKKyAg
ICBGbG9hdFJlY3QgY2xpcHBlZEV4dGVudCA9IGludGVyc2VjdGlvbihzdGF0ZS5jbGlwQm91bmRz
LCBib3VuZHMpOworICAgIHJldHVybiBzdGF0ZS5jdG0ubWFwUmVjdChjbGlwcGVkRXh0ZW50KTsK
K30KKworY29uc3QgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOworICAgIHJldHVy
biBtX3N0YXRlU3RhY2subGFzdCgpOworfQorCitSZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBSZWNv
cmRlcjo6Y3VycmVudFN0YXRlKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7
CisgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgUmVjb3JkZXI6OmN0bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgp
LmN0bTsKK30KKworY29uc3QgRmxvYXRSZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHM7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAg
Y3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBjbGlwQm91bmRzLm1vdmUoLXgsIC15KTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
Cit7CisgICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhzdGF0aWNfY2FzdDxkb3Vi
bGU+KGFuZ2xlSW5SYWRpYW5zKSk7CisgICAgY3RtLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7Cisg
ICAgCisgICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOworICAgIHJvdGF0aW9uLnJvdGF0ZShh
bmdsZUluRGVncmVlcyk7CisKKyAgICBpZiAoT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZl
cnNlID0gcm90YXRpb24uaW52ZXJzZSgpKQorICAgICAgICBjbGlwQm91bmRzID0gaW52ZXJzZS52
YWx1ZSgpLm1hcFJlY3QoY2xpcEJvdW5kcyk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGN0bS5zY2FsZShzaXpl
KTsKKyAgICBjbGlwQm91bmRzLnNjYWxlKDEgLyBzaXplLndpZHRoKCksIDEgLyBzaXplLmhlaWdo
dCgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCit7CisgICAgY3RtICo9IG1hdHJpeDsKKworICAgIGlm
IChPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IGludmVyc2UgPSBtYXRyaXguaW52ZXJzZSgpKQor
ICAgICAgICBjbGlwQm91bmRzID0gaW52ZXJzZS52YWx1ZSgpLm1hcFJlY3QoY2xpcEJvdW5kcyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzhlMDJk
OTY3Y2Y5NzM2NTYxYTE2NWRkYjUwMDc1ZGUyY2MwNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0UmVjb3JkZXJfaAorI2RlZmluZSBE
aXNwbGF5TGlzdFJlY29yZGVyX2gKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiIC8vIEZvciBJbnRlcnBvbGF0aW9uUXVhbGl0eS4KKyNpbmNs
dWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgorI2luY2x1ZGUgIlRleHRGbGFn
cy5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHbHlwaEJ1ZmZl
cjsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGb250OworY2xhc3MgSW1hZ2U7CisKK3N0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKK3N0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKKwor
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRHJhd2luZ0l0ZW07CisKK2NsYXNzIFJl
Y29yZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CitwdWJsaWM6Cisg
ICAgUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB+UmVjb3JkZXIo
KTsKKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgdm9pZCBjbGVhclNo
YWRvdygpOworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApOworICAgIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7CisgICAgdm9pZCBzZXRM
aW5lSm9pbihMaW5lSm9pbik7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKKworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgR3JhZGllbnQmKTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CisgICAgdm9pZCBm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxl
bmRNb2RlKTsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
KTsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBsaW5lV2lkdGgpOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKTsK
KyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKKworICAgIHZvaWQgZHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKworICAgIHZv
aWQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9p
ZCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZv
aWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3Is
IEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJ
bWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlLCBJbWFnZU9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRv
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFs
KTsKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKTsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50Jik7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKTsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpOworICAgIHZvaWQgZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXNlZCk7CisgICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJik7CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGludCB3
aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpOworCisgICAgdm9pZCBzYXZlKCk7CisgICAgdm9pZCByZXN0b3JlKCk7CisKKyAgICB2b2lk
IHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKworICAgIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgIHZvaWQgY2xpcENv
bnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50
aWFsaWFzKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwor
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0LnNpemUoKTsg
fQorCitwcml2YXRlOgorICAgIEl0ZW0mIGFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYpOworICAgIHZv
aWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpOworCisgICAgRmxvYXRSZWN0IGV4dGVudEZy
b21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUl0
ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGN0bSgpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0UmVjdCYgY2xpcEJvdW5kcygpIGNv
bnN0OworCisgICAgc3RydWN0IENvbnRleHRTdGF0ZSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBjdG07CisgICAgICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzOworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUgbGFzdERyYXdpbmdTdGF0ZTsKKyAgICAgICAgYm9vbCB3YXNVc2VkRm9yRHJhd2luZyB7IGZh
bHNlIH07CisgICAgICAgIHNpemVfdCBzYXZlSXRlbUluZGV4IHsgMCB9OworICAgICAgICAKKyAg
ICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25z
dCBGbG9hdFJlY3QmIGNsaXApCisgICAgICAgICAgICA6IGN0bSh0cmFuc2Zvcm0pCisgICAgICAg
ICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKHNpemVfdCBzYXZlSW5kZXgpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbnRleHRTdGF0ZSBzdGF0ZShjdG0sIGNsaXBCb3Vu
ZHMpOworICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKKyAgICAg
ICAgICAgIHN0YXRlLmxhc3REcmF3aW5nU3RhdGUgPSBsYXN0RHJhd2luZ1N0YXRlOworICAgICAg
ICAgICAgc3RhdGUuc2F2ZUl0ZW1JbmRleCA9IHNhdmVJbmRleDsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpOworICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAg
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgICAgIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIH07CisgICAgCisgICAgY29uc3QgQ29udGV4
dFN0YXRlJiBjdXJyZW50U3RhdGUoKSBjb25zdDsKKyAgICBDb250ZXh0U3RhdGUmIGN1cnJlbnRT
dGF0ZSgpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBE
aXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKKworICAgIGJvb2wgbV9jYWNoaW5nIHsgZmFsc2Ug
fTsKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICAKKyAgICBWZWN0b3I8Q29u
dGV4dFN0YXRlLCAzMj4gbV9zdGF0ZVN0YWNrOworfTsKKworfQorfQorCisjZW5kaWYgLy8gRGlz
cGxheUxpc3RSZWNvcmRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTAzODc2ODYxNzgyYTVkYTdlNzA0NThjMGVjZTgwMzg2NTU5Y2Y1ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCisKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitSZXBs
YXllcjo6UmVwbGF5ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QpCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQorICAgICwg
bV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1JlcGxheWVyOjp+UmVwbGF5ZXIoKQoreworfQor
Cit2b2lkIFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCkKK3sK
KyAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVwbGF5aW5n
IHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKKyAgICBVTlVTRURfUEFSQU0oaW5pdGlhbENs
aXApOworCisgICAgc2l6ZV90IG51bUl0ZW1zID0gbV9kaXNwbGF5TGlzdC5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAgIGF1dG8mIGl0
ZW0gPSBtX2Rpc3BsYXlMaXN0Lmxpc3QoKVtpXS5nZXQoKTsKKyAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJkcmF3aW5nICAiIDw8IGkgPDwgIiAiIDw8IGl0
ZW0pOworICAgICAgICBpdGVtLmFwcGx5KG1fY29udGV4dCk7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFhYmJhZWYwMTI4YzQxMzQxY2Nh
Zjk1ZDk4NDM3MmFjZTNmZDJjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTAs
MCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERpc3BsYXlMaXN0UmVwbGF5ZXJfaAorI2RlZmluZSBEaXNwbGF5TGlzdFJlcGxh
eWVyX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dDsKKworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRGlzcGxh
eUxpc3Q7CisKK2NsYXNzIFJlcGxheWVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXBs
YXllcik7CitwdWJsaWM6CisgICAgUmVwbGF5ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRGlz
cGxheUxpc3QmKTsKKyAgICB+UmVwbGF5ZXIoKTsKKworICAgIHZvaWQgcmVwbGF5KGNvbnN0IEZs
b2F0UmVjdCYgaW5pdGlhbENsaXApOworCitwcml2YXRlOgorICAgIGNvbnN0IERpc3BsYXlMaXN0
JiBtX2Rpc3BsYXlMaXN0OworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworfTsKKwor
fQorfQorCisjZW5kaWYgLy8gRGlzcGxheUxpc3RSZXBsYXllcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268440</attachid>
            <date>2016-01-06 20:22:12 -0800</date>
            <delta_ts>2016-01-06 20:43:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106202139.patch</filename>
            <type>text/plain</type>
            <size>148717</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NWRmYTQ4MjAzZGE3
YzYyYjYyN2YxMGVkYWMyZDEyZmFjYjFmMC4uZDQzMmIzYWEwZDMzMmZmZDE4NzVhM2U1MjgzOTBj
MWY4NmE1Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmMyYjg3NTkzZmE1ZTRlMDhiZDEzNmVlNDQ0ODkzYzMyNDU1YmI5ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworI2lmIFVTRShDRykKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX2No
YW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRl
eHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xv
cik7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3Rh
dGUuZmlsbENvbG9yKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9r
ZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQor
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5k
LW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxl
ZENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0
aW9uLWVuYWJsZWQiLCBtX3N0YXRlLmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxk
LXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJh
d0x1bWluYW5jZU1hc2tDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1p
bmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2UpCit7CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0
dXJuIHRzOworfQorCisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRp
bmdDb250cm9sVGludHMoZmFsc2UpCiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDUyYjFhZDgyYjJmOGE1ODcwOGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEy
OTMzYzBmMjM3OGEzYzEzN2ZjZjYzYWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0g
Q2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwLAorICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBo
YUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAg
ICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
ICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAor
ICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3
LAorICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8
IDE4LAorICAgICAgICBBbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAx
IDw8IDE5LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAg
PSAxIDw8IDIwLAorICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIxLAorICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAg
ICAgICAgPSAxIDw8IDIyLAorICAgIH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5n
ZUZsYWdzOworCiAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQ
dHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxl
OwogfTsKIAorc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUp
CisgICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFncyB7IDAgfTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk0NjJiZGViZWQ3YmI1YWQ2OTI4ZjI5OTU1MmQwMGFmNmFlOTc2
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKKyNpZiAhZGVmaW5lZChO
REVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBEaXNwbGF5TGlzdDo6ZGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7Cisg
ICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1
bXAoKSBjb25zdAoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRh
dGEoKSk7Cit9CisjZW5kaWYKKwordm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0
cyA8PCAiZGlzcGxheSBsaXN0IjsKKworICAgIHNpemVfdCBudW1JdGVtcyA9IG1fbGlzdC5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAg
IFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMpOworICAgICAgICB0cyA8PCBpIDw8ICIg
IiA8PCBtX2xpc3RbaV0uZ2V0KCk7CisgICAgfQorICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICB0
cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOworICAgIHRzLmVuZEdyb3Vw
KCk7Cit9CisKK3NpemVfdCBEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAg
IHNpemVfdCByZXN1bHQgPSAwOworICAgIGZvciAoYXV0byYgcmVmIDogbV9saXN0KSB7CisgICAg
ICAgIHN3aXRjaCAocmVmLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2F2ZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgor
ICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KHJlZi5nZXQo
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihyZWYuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8U2NhbGU+KHJlZi5nZXQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4o
cmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRl
PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxTZXRM
aW5lQ2FwPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8U2V0TGluZURhc2g+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVv
Zihkb3duY2FzdDxTZXRMaW5lSm9pbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAg
ICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihyZWYuZ2V0KCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAg
ICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwPihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICAg
ICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihyZWYuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAg
ICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0
aDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBD
b252ZXhQb2x5Z29uOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxDbGlw
Q29udmV4UG9seWdvbj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2Yo
ZG93bmNhc3Q8RHJhd0dseXBocz4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmVz
dWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxl
ZEltYWdlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdOYXRpdmVJbWFnZT4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXN1bHQg
Kz0gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgICAgIHJl
c3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd1JlY3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICAgICAg
cmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4ocmVmLmdldCgpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93
bmNhc3Q8RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdv
bjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RHJhd0NvbnZleFBvbHln
b24+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxEcmF3
UGF0aD4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRv
d25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAg
ICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4ocmVmLmdldCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6
CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihyZWYuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJl
Y3RXaXRoQ29sb3I+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAgICAgcmVzdWx0ICs9
IHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4ocmVmLmdldCgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KHJlZi5nZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNh
c3Q8RmlsbFJvdW5kZWRSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgICAg
IHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlZi5n
ZXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQ
YXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bEVsbGlwc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxp
cHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VSZWN0OgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3duY2FzdDxT
dHJva2VSZWN0PihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihkb3du
Y2FzdDxTdHJva2VQYXRoPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IHNp
emVvZihkb3duY2FzdDxTdHJva2VFbGxpcHNlPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgICAgICByZXN1
bHQgKz0gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4ocmVmLmdldCgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gc2l6ZW9m
KGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihyZWYuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAg
ICAgICAgICByZXN1bHQgKz0gc2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4ocmVm
LmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoZG93bmNhc3Q8QXBw
bHlGaWxsUGF0dGVybj4ocmVmLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4ocmVmLmdldCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NjEyOGEyNTMxMGIzYzk5YmQxZGZkOWFlNjM0NjBjMDg2MjdlNTgwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0X2gKKyNkZWZpbmUgRGlzcGxheUxp
c3RfaAorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgVGV4dFN0cmVhbTsKKworbmFtZXNwYWNl
IERpc3BsYXlMaXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3QgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKERpc3BsYXlMaXN0KTsKKyAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CitwdWJsaWM6
CisgICAgRGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CisgICAgRGlzcGxheUxpc3QoRGlzcGxheUxp
c3QmJikgPSBkZWZhdWx0OworCisgICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlz
dCYmKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0OworCisg
ICAgY29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7
IH0KKyAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9saXN0LnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdl
dCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2xpc3QuY2xlYXIoKTsgfQor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAg
dm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBt
X2xpc3QucmVzaXplKGluZGV4KTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBj
b25zdDsKKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAgIFdURjo6
Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworICAgIHZvaWQgZHVtcCgpIGNvbnN0OworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCisgICAg
eworICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOworICAgICAgICByZXR1cm4g
bV9saXN0Lmxhc3QoKS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlz
dCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorCisgICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworfSAvLyBXZWJDb3JlCisK
K3VzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKKworI2VuZGlmIC8qIERp
c3BsYXlMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYjA0M2YwNmIyNTY5NmQ5MzgwM2I4MTA2N2E3MWEyYjNiYjA1NDE3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTExNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNs
dWRlICJUZXh0U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CisKKy8vIFNob3VsZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpCitzdGF0aWMgY29uc3QgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7
CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dURjo6Q1N0cmluZyBJ
dGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSB0czsKKyAgICB0cyA8
PCAqdGhpczsKKyAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKK30KKyNlbmRpZgorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2lu
Z0l0ZW0mIGl0ZW0pCit7CisgICAgdHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJleHRlbnQg
IjsKKyAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQorICAgICAgICB0cyA8PCBpdGVtLmV4dGVu
dCgpOworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgInVua25vd24iOworICAgIAorICAgIHRzLmVu
ZEdyb3VwKCk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0
ZW0pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3Jl
SW5kZXgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30K
Kwordm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K3sKKyAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Cit9CisKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgieSIsIGl0ZW0ueSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBSb3RhdGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJvdGF0
ZShtX2FuZ2xlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xl
IiwgaXRlbS5hbmdsZSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTY2FsZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2NhbGUo
bV9zaXplKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjYWxlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0
ZW0uYW1vdW50KCkpOworCisgICAgcmV0dXJuIHRzOworfQorCitDb25jYXRlbmF0ZUNUTTo6Q29u
Y2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKKyAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkK
K3sKK30KKwordm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNh
dGVuYXRlQ1RNJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFu
c2Zvcm0oKSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBtX3N0YXRlLmFwcGx5KGNvbnRl
eHQpOworfQorCit2b2lkIFNldFN0YXRlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit7CisgICAgbV9zdGF0ZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYg
c3RhdGUpCit7CisgICAgdHMgPDwgc3RhdGUuc3RhdGUoKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
K3ZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNh
cCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNo
QXJyYXksIG1fZGFzaE9mZnNldCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCit7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOworICAg
IHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpv
aW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0
TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0
ZXJMaW1pdCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1p
dC5taXRlckxpbWl0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclNoYWRvdzo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xl
YXJTaGFkb3coKTsKK30KKwordm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQorewor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK3ZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOwor
fQorCit2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK3sKKyAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmKQor
eworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTog
cGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGlwUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcFBhdGgo
bV9wYXRoLCBtX3dpbmRSdWxlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQoreworLy8gICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAg
IHRzLmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsKKyAgICByZXR1
cm4gdHM7Cit9CisKK0NsaXBDb252ZXhQb2x5Z29uOjpDbGlwQ29udmV4UG9seWdvbihzaXplX3Qg
bnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNl
ZCkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRp
YWxpYXMoYW50aWFsaWFzZWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlBvaW50czsgKytpKQorICAgICAgICBtX3BvaW50cy5hcHBlbmQocG9pbnRzW2ldKTsKK30KKwor
dm9pZCBDbGlwQ29udmV4UG9seWdvbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAoreworICAgIGNvbnRleHQuY2xpcENvbnZleFBvbHlnb24obV9wb2ludHMuc2l6ZSgpLCBt
X3BvaW50cy5kYXRhKCksIG1fYW50aWFsaWFzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBDb252ZXhQb2x5Z29uJiBpdGVtKQor
eworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbnRpYWxpYXMiLCBpdGVtLmFudGlhbGlhcygpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK0RyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQorICAgICwgbV9mb250
KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9j
YXRpb24pCisgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICwgbV9zbW9vdGhp
bmdNb2RlKHNtb290aGluZ01vZGUpCit7CisgICAgbV9nbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShjb3VudCk7CisgICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBt
X2dseXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKKyAgICAgICAgbV9hZHZhbmNlcy51
bmNoZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOworICAgIH0KKyAgICBjb21wdXRlQm91bmRzKCk7
Cit9CisKK2lubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVy
KCkgY29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7CisjaWYgVVNFKENBSVJPKQorICAgICAg
ICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLmluZGV4LCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2Vz
W2ldKTsKKyNlbHNlCisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICZtX2ZvbnQuZ2V0
KCksIG1fYWR2YW5jZXNbaV0pOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50LgorICAgIFVOVVNFRF9QQVJBTShtX3Ntb290aGluZ01vZGUp
OworfQorCit2b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgZG9lc24ndCBhY3R1YWxseSB0YWtlIHRoZSBleHRlbnRzIG9mIHRoZSBnbHlw
aHMgaW50byBjb25zaWRlcmF0aW9uLiBJdCBhc3N1bWVzIHRoYXQKKyAgICAvLyB0aGUgZ2x5cGgg
bGllcyBlbnRpcmVseSB3aXRoaW4gaXRzIChhc2NlbnQrZGVzY2VudCB4IGFkdmFuY2UpIHJlY3Qu
CisgICAgZmxvYXQgYXNjZW50ID0gbV9mb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7
CisgICAgZmxvYXQgZGVzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdERlc2NlbnQo
KTsKKyAgICBGbG9hdFBvaW50IGN1cnJlbnQgPSB0b0Zsb2F0UG9pbnQobG9jYWxBbmNob3IoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgeworICAg
ICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07CisgICAgICAg
IEZsb2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgp
IC0gYXNjZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICBt
X2JvdW5kcy51bml0ZShnbHlwaFJlY3QpOworCisgICAgICAgIGN1cnJlbnQgKz0gRmxvYXRTaXpl
KGFkdmFuY2UpOworICAgIH0KK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3R2x5cGhzOjps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVj
dCBsb2NhbEJvdW5kcyA9IG1fYm91bmRzOworICAgIGxvY2FsQm91bmRzLm1vdmUobV9ibG9ja0xv
Y2F0aW9uLngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7CisgICAgcmV0dXJuIGxvY2FsQm91bmRz
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0dseXBocyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCisgICAgdHMu
ZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMoKS5zaXplKCkpOworCisg
ICAgcmV0dXJuIHRzOworfQorCitEcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAs
IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAg
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2
b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291
cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKK3sKKyAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291
cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVj
dCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorCitEcmF3VGlsZWRJ
bWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdU
aWxlZEltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVz
dGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX3RpbGVTaXplKHRpbGVT
aXplKQorICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRp
b25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lkIERyYXdUaWxlZEltYWdlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3
VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxl
U2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdl
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdU
aWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6
VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQorICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNj
YWxlRmFjdG9yKQorICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAsIG1fdlJ1bGUodlJ1bGUpCisg
ICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQor
Cit2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBt
X2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1
bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0p
Cit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKwor
I2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorRHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1h
Z2UoUGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlv
biBvcmllbnRhdGlvbikKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2UpCisjaWYgVVNFKENHKQorICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN0b3JlIGFuIGltYWdlIGZv
ciBDYWlyby4KKyAgICAsIG1faW1hZ2VQdHIoaW1hZ2VQdHIpCisjZW5kaWYKKyAgICAsIG1faW1h
Z2VTaXplKGltYWdlU2l6ZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCisgICAgLCBt
X3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAsIG1fb3Aob3ApCisgICAgLCBtX2JsZW5kTW9kZShibGVu
ZE1vZGUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQoreworICAgIFVOVVNFRF9Q
QVJBTShpbWFnZVB0cik7Cit9CisKK3ZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIGNvbnRleHQuZHJh
d05hdGl2ZUltYWdlKG1faW1hZ2VQdHIuZ2V0KCksIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9u
LCBtX3NyY1JlY3QsIG1fb3AsIG1fYmxlbmRNb2RlLCBtX29yaWVudGF0aW9uKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworI2VuZGlmCit9CisKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0p
Cit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAg
ICAvLyBGSVhNRTogZHVtcCBtb3JlIHN0dWZmLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNl
LXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIs
IGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorI2VuZGlmCisKK0RyYXdQ
YXR0ZXJuOjpEcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdHRlcm4pCisgICAgLCBtX2ltYWdlKGltYWdl
KQorICAgICwgbV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCisgICAgLCBtX3Rp
bGVSZWN0KHRpbGVSZWN0KQorICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKKyAgICAsIG1f
cGhhc2UocGhhc2UpCisgICAgLCBtX3NwYWNpbmcoc3BhY2luZykKKyAgICAsIG1fb3Aob3ApCisg
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCit7Cit9CisKK3ZvaWQgRHJhd1BhdHRlcm46OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdQ
YXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9w
aGFzZSwgbV9zcGFjaW5nLCBtX29wLCBtX2Rlc3RpbmF0aW9uLCBtX2JsZW5kTW9kZSk7Cit9CisK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
UGF0dGVybiYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFu
c2Zvcm0oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInBoYXNlIiwgaXRlbS5waGFzZSgpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoInNwYWNpbmciLCBpdGVtLnNwYWNpbmcoKSk7CisgICAgcmV0dXJuIHRzOworfQor
Cit2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdS
ZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkp
OworICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3Qg
Ym91bmRzOworICAgIGJvdW5kcy5maXRUb1BvaW50cyhtX3BvaW50MSwgbV9wb2ludDIpOworICAg
IHJldHVybiBib3VuZHM7Cit9CisKK3ZvaWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdMaW5lKG1fcG9pbnQxLCBtX3Bv
aW50Mik7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3TGluZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0u
cG9pbnQxKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZXNGb3JU
ZXh0KHBvaW50KCksIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKK30KKwor
T3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8g
cmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4K
KworICAgIGlmICghbV93aWR0aHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisKKyAgICBGbG9hdFJlY3QgcmVzdWx0KHBvaW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0
KCksIG1fc3Ryb2tlV2lkdGgpKTsKKyAgICByZXN1bHQuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBm
b3IgcGl4ZWwgc25hcHBpbmcuIEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNu
J3QgdGFrZSB0aGUgQ1RNIGludG8gYWNjb3VudC4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xp
bmVzRm9yVGV4dCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVt
LmJsb2NrTG9jYXRpb24oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBp
dGVtLmxvY2FsQW5jaG9yKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBv
aW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRocyIsIGl0ZW0ud2lkdGhzKCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiaXMtcHJpbnRpbmciLCBpdGVtLmlzUHJpbnRpbmcoKSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJkb3VibGUiLCBpdGVtLmRvdWJsZUxpbmVzKCkpOworICAgIHJldHVybiB0
czsKK30KKwordm9pZCBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50
TWFya2VyKG1fcG9pbnQsIG1fd2lkdGgsIG1fc3R5bGUpOworfQorCitPcHRpb25hbDxGbG9hdFJl
Y3Q+IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4g
YSB2YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXIoKSByZXR1cm5zLgorCisgICAgRmxvYXRSZWN0IHJlc3VsdCht
X3BvaW50LCBGbG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOwor
ICAgIHJlc3VsdC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50
IGZvciAibWlzc3BlbGxpbmcgZG90IiBzbmFwcGluZy4KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlciYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBp
dGVtLnBvaW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0
KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IERyYXdFbGxpcHNlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0
ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKKy8vIEZJWE1FOiBzaGFyZSB0aGlzIGNv
ZGUuCit2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwgc2l6ZV90IG51bVBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIEFTU0VSVChudW1Qb2ludHMg
PiAwKTsKKworICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDE7IGkgPCBudW1Qb2ludHM7ICsraSkKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ld
KTsKKyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOworfQorCitEcmF3Q29udmV4UG9seWdvbjo6RHJh
d0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBw
b2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJh
d0NvbnZleFBvbHlnb24pCisgICAgLCBtX2FudGlhbGlhc2VkKGFudGlhbGlhc2VkKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZQb2ludHM7ICsraSkKKyAgICAgICAgbV9w
b2ludHMuYXBwZW5kKHBvaW50c1tpXSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0Nv
bnZleFBvbHlnb246OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7
CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHBvaW50IDogbV9wb2ludHMp
CisgICAgICAgIHJlc3VsdC5leHRlbmQocG9pbnQpOworICAgIHJlc3VsdC5pbmZsYXRlKG1fYW50
aWFsaWFzZWQgPyAxIDogMCk7IC8vIEFjY291bnQgZm9yIGFudGlhbGlhc2luZworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgRHJhd0NvbnZleFBvbHlnb246OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdDb252ZXhQb2x5Z29uKG1f
cG9pbnRzLnNpemUoKSwgbV9wb2ludHMuZGF0YSgpLCBtX2FudGlhbGlhc2VkKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdDb252
ZXhQb2x5Z29uJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludHMiLCBpdGVtLnBvaW50cygp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImFudGlhbGlhc2VkIiwgaXRlbS5hbnRpYWxpYXNlZCgp
KTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgY29udGV4dC5kcmF3UGF0
aChtX3BhdGgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisjZW5kaWYKK30K
Kworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdQYXRoJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8v
IEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgcmV0dXJuIHRzOworfQorCit2b2lk
IERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Cit7CisgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZzZXQs
IG1fY29sb3IpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdQYXRoOjps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVj
dCByZXN1bHQgPSBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOworICAgIHJlc3VsdC5pbmZsYXRl
KHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNS
aW5nUGF0aCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAv
LyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lk
dGgiLCBpdGVtLndpZHRoKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5v
ZmZzZXQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCit2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyht
X3JlY3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7Cit9CisKK09wdGlvbmFsPEZsb2F0
UmVjdD4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgZm9yIChhdXRvJiByZWN0
IDogbV9yZWN0cykKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3QpOworICAgIHJlc3VsdC5pbmZs
YXRlKHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9j
dXNSaW5nUmVjdHMmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3RzIiwgaXRlbS5yZWN0cygp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxs
UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRl
eHQuZmlsbFJlY3QobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJy
ZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsUmVjdFdp
dGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aENvbG9yJiBpdGVt
KQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBG
aWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsKK30K
Kworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZp
bGxSZWN0V2l0aEdyYWRpZW50JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgLy8gRklYTUU6IGxvZyBncmFkaWVudC4KKyAgICB0
cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQor
Cit2b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBt
X2JsZW5kTW9kZSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHko
InJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0u
Y29sb3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwgaXRl
bS5jb21wb3NpdGVPcGVyYXRvcigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUi
LCBpdGVtLmJsZW5kTW9kZSgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJvdW5k
ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29u
dGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7Cit9CisK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxs
Um91bmRlZFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRS
ZWN0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOworICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUobV9yZWN0LCBtX3JvdW5kZWRIb2xlUmVjdCwgbV9jb2xvcik7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgp
KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQtaG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVk
SG9sZVJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7
CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUGF0aChtX3BhdGgpOworfQor
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bFBhdGgmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKKy8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8g
RklYTUU6IHBhdGggbG9nZ2luZy4KKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbEVsbGlw
c2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0
LmZpbGxFbGxpcHNlKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK09wdGlvbmFsPEZs
b2F0UmVjdD4gU3Ryb2tlUmVjdDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OworICAgIGJvdW5kcy5leHBh
bmQobV9saW5lV2lkdGgsIG1fbGluZVdpZHRoKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCit2
b2lkIFN0cm9rZVJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LnN0cm9rZVJlY3QobV9yZWN0LCBtX2xpbmVXaWR0aCk7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VSZWN0
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgibGluZS13aWR0aCIsIGl0ZW0ubGluZVdpZHRoKCkpOworICAgIHJldHVybiB0
czsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IE5lZWQg
dG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1Bh
dGhCeVN0cm9raW5nUGF0aCgpLgorICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQu
c3Ryb2tlVGhpY2tuZXNzKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5k
aW5nUmVjdCgpOworICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlj
a25lc3MpOworICAgIGJvdW5kcy5tb3ZlQnkobV9ibG9ja0xvY2F0aW9uKTsKKyAgICByZXR1cm4g
Ym91bmRzOworfQorCit2b2lkIFN0cm9rZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gdG9GbG9hdFNpemUobV9ibG9j
a0xvY2F0aW9uKTsKKyAgICBtX3BhdGgudHJhbnNsYXRlKG9mZnNldCk7CisgICAgY29udGV4dC5z
dHJva2VQYXRoKG1fcGF0aCk7CisgICAgbV9wYXRoLnRyYW5zbGF0ZSgtb2Zmc2V0KTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9r
ZVBhdGgmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9j
a0xvY2F0aW9uKCkpOworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkp
OyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8
RmxvYXRSZWN0PiBTdHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4
dC5zdHJva2VUaGlja25lc3MoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7Cisg
ICAgYm91bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAg
cmV0dXJuIGJvdW5kczsKK30KKwordm9pZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5zdHJva2VFbGxpcHNlKG1fcmVj
dCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTdHJva2VFbGxpcHNlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5y
ZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmNsZWFyUmVjdChtX3Jl
Y3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ2xlYXJSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOworICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKK30KKworI2lmIFVTRShDRykKK3ZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseVN0cm9r
ZVBhdHRlcm4oKTsKK30KKwordm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7
Cit9CisjZW5kaWYKKwordm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseURldmljZVNjYWxl
RmFjdG9yKG1fc2NhbGVGYWN0b3IpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKK3sK
KyAgICB0cy5kdW1wUHJvcGVydHkoInNjYWxlLWZhY3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7
CisgICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgSXRlbVR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRl
bmF0ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0
IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcENvbnZleFBvbHlnb246IHRzIDw8ICJjbGlw
LWNvbnZleC1wb2x5Z29uIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczog
dHMgPDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdl
OiB0cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFnZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2Ui
OyBicmVhazsKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7IGJyZWFrOworI2VuZGlm
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogdHMgPDwgImRyYXctcmVjdCI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB0cyA8PCAiZHJhdy1saW5lIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogdHMgPDwgImRyYXctbGlu
ZXMtZm9yLXRleHQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1mb3ItZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjogdHMgPDwgImRyYXct
Y29udmV4LXBvbGdvbiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB0cyA8
PCAiZHJhdy1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmctcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdGb2N1c1JpbmdSZWN0czogdHMgPDwgImRyYXctZm9jdXMtcmluZy1yZWN0cyI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJl
Y3Qtd2l0aC1jb2xvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdy
YWRpZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVj
dCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZp
bGwtcm91bmRlZC1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogdHMgPDwgImZpbGwtcGF0aCI7IGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB0cyA8PCAiZmlsbC1lbGxpcHNlIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0Ijsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogdHMgPDwgInN0cm9rZS1wYXRo
IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogdHMgPDwgInN0cm9r
ZS1lbGxpcHNlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OiB0cyA8PCAi
Y2xlYXItcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6IHRzIDw8ICJiZWdpbi10cmFuc3BhcmVuY3ktbGF5ZXIiOyBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogdHMgPDwgImVuZC10cmFuc3BhcmVuY3kt
bGF5ZXIiOyBicmVhazsKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJv
a2VQYXR0ZXJuOiB0cyA8PCAiYXBwbHktc3Ryb2tlLXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0cyA8PCAiYXBwbHktZmlsbC1wYXR0ZXJuIjsg
YnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9y
OiB0cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93IjsgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgSXRlbSYgaXRlbSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3Vw
KHRzKTsKKyAgICB0cyA8PCBpdGVtLnR5cGUoKTsKKworICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFj
cm8gd2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVz
CisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PFNhdmU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0
ZT4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8Um90YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVt
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PFNldFN0YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICB0cyA8
PCBkb3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9p
bj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldE1pdGVyTGltaXQ+KGl0ZW0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAgICB0cyA8PCBkb3duY2Fz
dDxDbGlwPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PENsaXBPdXRUb1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9seWdvbjoKKyAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcENvbnZleFBvbHlnb24+KGl0ZW0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICB0cyA8PCBkb3du
Y2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyNp
ZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdS
ZWN0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lPihpdGVtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d0VsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
Q29udmV4UG9seWdvbjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0NvbnZleFBvbHlnb24+
KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdG
b2N1c1JpbmdSZWN0cz4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdD4oaXRlbSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAg
ICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICB0cyA8
PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxs
Um91bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgdHMg
PDwgZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0
PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoK
KyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25j
YXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclJlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0p
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFj
dG9yOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVt
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0aW9uYWwgZGF0
YS4KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRy
YW5zcGFyZW5jeUxheWVyOgorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0
cm9rZVBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyNlbmRp
ZgorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHRzOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNzgwZWU1MWNiYzFiOTQxYzk3YTY2NzAzYmUwYjFmOWMwOTFhMjRkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMCwwICsxLDE0MzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXNwbGF5TGlzdEl0
ZW1zX2gKKyNkZWZpbmUgRGlzcGxheUxpc3RJdGVtc19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5o
IgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRTdHJlYW07CitzdHJ1Y3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnM7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2VudW0gY2xhc3MgSXRl
bVR5cGUgeworICAgIFNhdmUsCisgICAgUmVzdG9yZSwKKyAgICBUcmFuc2xhdGUsCisgICAgUm90
YXRlLAorICAgIFNjYWxlLAorICAgIENvbmNhdGVuYXRlQ1RNLAorICAgIFNldFN0YXRlLAorICAg
IFNldExpbmVDYXAsCisgICAgU2V0TGluZURhc2gsCisgICAgU2V0TGluZUpvaW4sCisgICAgU2V0
TWl0ZXJMaW1pdCwKKyAgICBDbGVhclNoYWRvdywKKyAgICBDbGlwLAorICAgIENsaXBPdXQsCisg
ICAgQ2xpcE91dFRvUGF0aCwKKyAgICBDbGlwUGF0aCwKKyAgICBDbGlwQ29udmV4UG9seWdvbiwK
KyAgICBEcmF3R2x5cGhzLAorICAgIERyYXdJbWFnZSwKKyAgICBEcmF3VGlsZWRJbWFnZSwKKyAg
ICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBE
cmF3TmF0aXZlSW1hZ2UsCisjZW5kaWYKKyAgICBEcmF3UGF0dGVybiwKKyAgICBEcmF3UmVjdCwK
KyAgICBEcmF3TGluZSwKKyAgICBEcmF3TGluZXNGb3JUZXh0LAorICAgIERyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIsCisgICAgRHJhd0VsbGlwc2UsCisgICAgRHJhd0NvbnZleFBvbHlnb24sCisg
ICAgRHJhd1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1Jl
Y3RzLAorICAgIEZpbGxSZWN0LAorICAgIEZpbGxSZWN0V2l0aENvbG9yLAorICAgIEZpbGxSZWN0
V2l0aEdyYWRpZW50LAorICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICBGaWxsUm91bmRlZFJl
Y3QsCisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisgICAgRmlsbFBhdGgsCisgICAgRmls
bEVsbGlwc2UsCisgICAgU3Ryb2tlUmVjdCwKKyAgICBTdHJva2VQYXRoLAorICAgIFN0cm9rZUVs
bGlwc2UsCisgICAgQ2xlYXJSZWN0LAorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAg
RW5kVHJhbnNwYXJlbmN5TGF5ZXIsCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVy
biwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorICAgIEFwcGx5Rmls
bFBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KKyNlbmRp
ZgorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCit9OworCitjbGFzcyBJdGVtIDogcHVibGlj
IFJlZkNvdW50ZWQ8SXRlbT4geworcHVibGljOgorICAgIEl0ZW0oKSA9IGRlbGV0ZTsKKworICAg
IEl0ZW0oSXRlbVR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB+SXRlbSgpIHsgfQorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCA9IDA7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEaXNwbGF5TGlzdEl0ZW0gPSB0cnVlOworCisgICAgdmlydHVhbCBib29sIGlz
RHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIC8vIEEgc3Rh
dGUgaXRlbSBpcyBvbmUgcHJlc2VydmVkIGJ5IFNhdmUvUmVzdG9yZS4KKyAgICBib29sIGlzU3Rh
dGVJdGVtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1N0YXRlSXRlbVR5cGUobV90
eXBlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1N0YXRlSXRlbVR5cGUoSXRlbVR5cGUg
aXRlbVR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7CisgICAgICAgIGNh
c2UgSXRlbVR5cGU6OiBUcmFuc2xhdGU6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBSb3RhdGU6
CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTY2FsZToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6
IENvbmNhdGVuYXRlQ1RNOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0U3RhdGU6CisgICAg
ICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjog
U2V0TGluZURhc2g6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lSm9pbjoKKyAgICAg
ICAgY2FzZSBJdGVtVHlwZTo6IFNldE1pdGVyTGltaXQ6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6
OiBDbGVhclNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKKyAg
ICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIEl0ZW1UeXBlIG1fdHlwZTsKK307CisKK2NsYXNzIERyYXdpbmdJdGVtIDogcHVibGljIEl0
ZW0geworcHVibGljOgorICAgIERyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCisgICAgICAgIDog
SXRlbSh0eXBlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4dGVudChjb25zdCBGbG9h
dFJlY3QmIHIpIHsgbV9leHRlbnQgPSByOyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBleHRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2V4dGVudC52YWx1ZSgpOyB9CisKKyAgICBib29sIGV4dGVudEtu
b3duKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9CisKKyAg
ICAvLyBSZXR1cm4gYm91bmRzIG9mIHRoaXMgZHJhd2luZyBvcGVyYXRpb24gaW4gbG9jYWwgY29v
cmRpbmF0ZXMuCisgICAgLy8gRG9lcyBub3QgaW5jbHVkZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBz
aGFkb3cgZXRjIGluIHRoZSBzdGF0ZS4KKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gTnVsbG9w
dDsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8g
SW4gYmFzZSBjb29yZGluYXRlcywgdGFraW5nIHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBh
Y2NvdW50LgorfTsKKworY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFNhdmU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTYXZlKTsKKyAgICB9CisKKyAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0IG9m
IHRoZSBjb3JyZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCisgICAgc2l6
ZV90IHJlc3RvcmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9CisgICAg
dm9pZCBzZXRSZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0gaW5k
ZXg7IH0KKworcHJpdmF0ZToKKyAgICBTYXZlKCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpT
YXZlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsg
MCB9OworfTsKKworY2xhc3MgUmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFJlc3RvcmU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSZXN0b3JlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdG9yZSgpCisgICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6UmVzdG9yZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworY2xh
c3MgVHJhbnNsYXRlIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VHJh
bnNsYXRlPiBjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFRyYW5zbGF0ZSh4LCB5KSk7CisgICAgfQorCisgICAgZmxvYXQgeCgpIGNv
bnN0IHsgcmV0dXJuIG1feDsgfQorICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0K
KworcHJpdmF0ZToKKyAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpUcmFuc2xhdGUpCisgICAgICAgICwgbV94KHgpCisgICAgICAgICwgbV95
KHkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7Cit9
OworCitjbGFzcyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxSb3RhdGU+IGNyZWF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOworICAgIH0KKworICAg
IGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQorCitwcml2YXRlOgorICAg
IFJvdGF0ZShmbG9hdCBhbmdsZSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCisg
ICAgICAgICwgbV9hbmdsZShhbmdsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV9h
bmdsZTsgLy8gSW4gcmFkaWFucy4KK307CisKK2NsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2FsZShzaXplKSk7Cisg
ICAgfQorCisgICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKworcHJpdmF0ZToKKyAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6U2NhbGUpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKworICAgIEZsb2F0U2l6ZSBtX3NpemU7Cit9OworCitjbGFzcyBDb25jYXRl
bmF0ZUNUTSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbmNhdGVu
YXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTShtYXRyaXgpKTsKKyAgICB9
CisKKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNmb3JtOyB9CisKK3ByaXZhdGU6CisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Cit9
OworCitjbGFzcyBTZXRTdGF0ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykpOworICAgIH0K
KyAgICAKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7
CisKKyAgICB2b2lkIGFjY3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKKwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7
CisKKyAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFRleHRTdHJlYW0mLCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKTsKK3ByaXZhdGU6CisgICAgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAg
ICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKKyAgICAgICAgLCBtX3N0YXRlKHN0YXRl
LCBmbGFncykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UgbV9zdGF0ZTsKK307CisKK2NsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxTZXRMaW5lQ2FwPiBjcmVhdGUoTGluZUNhcCBsaW5lQ2FwKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUNhcChsaW5lQ2FwKSk7
CisgICAgfQorICAgIAorICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUNhcDsgfQorCitwcml2YXRlOgorICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVDYXApCisgICAgICAgICwgbV9saW5lQ2FwKGxp
bmVDYXApCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIExpbmVDYXAgbV9saW5lQ2FwOworfTsKKwor
Y2xhc3MgU2V0TGluZURhc2ggOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBk
YXNoT2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZURh
c2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgfQorCisgICAgY29uc3QgRGFzaEFycmF5
JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hBcnJheTsgfQorICAgIGZsb2F0IGRh
c2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hPZmZzZXQ7IH0KKworcHJpdmF0ZToKKyAg
ICBTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNl
dCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lRGFzaCkKKyAgICAgICAgLCBtX2Rh
c2hBcnJheShkYXNoQXJyYXkpCisgICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKworICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKKyAgICBmbG9hdCBt
X2Rhc2hPZmZzZXQ7Cit9OworCitjbGFzcyBTZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpv
aW4pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihsaW5l
Sm9pbikpOworICAgIH0KKyAgICAKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUpvaW47IH0KKworcHJpdmF0ZToKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKKyAgICAgICAg
LCBtX2xpbmVKb2luKGxpbmVKb2luKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBMaW5lSm9pbiBt
X2xpbmVKb2luOworfTsKKworY2xhc3MgU2V0TWl0ZXJMaW1pdCA6IHB1YmxpYyBJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGltaXQobGltaXQp
KTsKKyAgICB9CisKKyAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRl
ckxpbWl0OyB9CisKK3ByaXZhdGU6CisgICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0
KQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldE1pdGVyTGltaXQpCisgICAgICAgICwgbV9t
aXRlckxpbWl0KG1pdGVyTGltaXQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZsb2F0IG1fbWl0
ZXJMaW1pdDsKK307CisKK2NsYXNzIENsZWFyU2hhZG93IDogcHVibGljIEl0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclNoYWRvdyk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENsZWFyU2hhZG93KCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworfTsKKworLy8gRklYTUU6IHRyZWF0IGFzIERyYXdpbmdJdGVtPworY2xh
c3MgQ2xpcCA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXA+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDbGlwKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIENsaXAoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXApCisgICAgICAgICwgbV9yZWN0
KHJlY3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitj
bGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xp
cE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dCkK
KyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0
IG1fcmVjdDsKK307CisKK2NsYXNzIENsaXBPdXRUb1BhdGggOiBwdWJsaWMgSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0
aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0
aCkpOworICAgIH0KKworICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGg7IH0KKworcHJpdmF0ZToKKyAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisg
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKKyAgICAgICAgLCBtX3BhdGgo
cGF0aCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBD
bGlwUGF0aCA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXBQYXRo
PiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOworICAg
IH0KKworICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAg
ICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KKworcHJp
dmF0ZToKKyAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
KyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0
aCkKKyAgICAgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBQYXRoIG1fcGF0aDsKKyAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOworfTsKKworY2xhc3MgQ2xp
cENvbnZleFBvbHlnb24gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxD
bGlwQ29udmV4UG9seWdvbj4gY3JlYXRlKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxv
YXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2xpcENvbnZleFBvbHlnb24obnVtYmVyT2ZQb2ludHMsIHBvaW50cywg
YW50aWFsaWFzZWQpKTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBv
aW50cygpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRzOyB9CisgICAgYm9vbCBhbnRpYWxpYXMoKSBj
b25zdCB7IHJldHVybiBtX2FudGlhbGlhczsgfQorCitwcml2YXRlOgorICAgIENsaXBDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50
aWFsaWFzZWQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1fcG9pbnRzOworICAgIGJv
b2wgbV9hbnRpYWxpYXM7Cit9OworCitjbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgYmxvY2tMb2NhdGlvbiwg
bG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9Cisg
ICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24p
IHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQorCisgICAgY29uc3QgRmxvYXRT
aXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KKworICAg
IEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24g
KyBtX2xvY2FsQW5jaG9yOyB9CisKKyAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwg
MTI4PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KKworcHJpdmF0ZToKKyAg
ICBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJs
b2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlKTsKKworICAgIHZvaWQgY29tcHV0ZUJvdW5kcygpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0
OworCisgICAgUmVmPEZvbnQ+IG1fZm9udDsKKyAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwg
MTI4PiBtX2dseXBoczsKKyAgICBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2
YW5jZXM7CisgICAgRmxvYXRSZWN0IG1fYm91bmRzOworICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xv
Y2F0aW9uOworICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOworICAgIEZvbnRTbW9vdGhpbmdN
b2RlIG1fc21vb3RoaW5nTW9kZTsKK307CisKK2NsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+IGNyZWF0ZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3SW1hZ2UoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgfQorCisgICAg
Y29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAg
IEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIEZsb2F0
UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworcHJp
dmF0ZToKKyAgICBEcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsK
KworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9
CisKKyAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1h
Z2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4n
dCBoYXZlIHRvIGJlIG11dGFibGUuCisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CisgICAg
RmxvYXRSZWN0IG1fc291cmNlOworICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWlu
dGluZ09wdGlvbnM7Cit9OworCitjbGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2lu
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdl
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09w
dGlvbnMpKTsKKyAgICB9CisKKyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlLmdldCgpOyB9CisgICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZTsgfQorICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KKworICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGlsZVNpemU7IH0KKyAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJu
IG1fc3BhY2luZzsgfQorCitwcml2YXRlOgorICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7
IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBw
cm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgorICAgIEZsb2F0UmVj
dCBtX2Rlc3RpbmF0aW9uOworICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7CisgICAgRmxvYXRTaXpl
IG1fdGlsZVNpemU7CisgICAgRmxvYXRTaXplIG1fc3BhY2luZzsKKyAgICBJbWFnZVBhaW50aW5n
T3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworfTsKKworY2xhc3MgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUg
dlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdl
KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVs
ZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICB9CisKKyAgICBjb25zdCBJbWFnZSYgaW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgRmxvYXRSZWN0IHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgorICAgIERyYXdU
aWxlZFNjYWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8g
RklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dy
ZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCisgICAgRmxvYXRSZWN0IG1f
ZGVzdGluYXRpb247CisgICAgRmxvYXRSZWN0IG1fc291cmNlOworICAgIEZsb2F0U2l6ZSBtX3Rp
bGVTY2FsZUZhY3RvcjsKKyAgICBJbWFnZTo6VGlsZVJ1bGUgbV9oUnVsZTsKKyAgICBJbWFnZTo6
VGlsZVJ1bGUgbV92UnVsZTsKKyAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRp
bmdPcHRpb25zOworfTsKKworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorY2xhc3MgRHJhd05h
dGl2ZUltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PERyYXdOYXRpdmVJbWFnZT4gY3JlYXRlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VQdHIsIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSk7CisgICAgfQorCisg
ICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQorICAgIEZs
b2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKwor
cHJpdmF0ZToKKyAgICBEcmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBjb25zdCBG
bG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50
YXRpb24pOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KKworI2lmIFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9pbWFn
ZVB0cjsKKyNlbmRpZgorICAgIEZsb2F0U2l6ZSBtX2ltYWdlU2l6ZTsKKyAgICBGbG9hdFJlY3Qg
bV9kZXN0aW5hdGlvbjsKKyAgICBGbG9hdFJlY3QgbV9zcmNSZWN0OworICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIG1fb3A7CisgICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOworICAgIEltYWdlT3JpZW50
YXRpb24gbV9vcmllbnRhdGlvbjsKK307CisjZW5kaWYKKworY2xhc3MgRHJhd1BhdHRlcm4gOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+
IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0dGVybihpbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSkpOworICAg
IH0KKworICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX3BhdHRlcm5UcmFuc2Zvcm07IH0KKyAgICBGbG9hdFJlY3QgdGlsZVJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3RpbGVSZWN0OyB9CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIEZsb2F0UG9pbnQgcGhhc2UoKSBj
b25zdCB7IHJldHVybiBtX3BoYXNlOyB9CisgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7
IHJldHVybiBtX3NwYWNpbmc7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3UGF0dGVybihJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5v
cm1hbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3
aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBz
aG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgorICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRl
cm5UcmFuc2Zvcm07CisgICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1f
ZGVzdGluYXRpb247CisgICAgRmxvYXRQb2ludCBtX3BoYXNlOworICAgIEZsb2F0U2l6ZSBtX3Nw
YWNpbmc7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKKyAgICBCbGVuZE1vZGUgbV9ibGVu
ZE1vZGU7Cit9OworCisvLyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0
cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCitjbGFzcyBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lM
YXllcihvcGFjaXR5KSk7CisgICAgfQorCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhY2l0eTsgfQorCitwcml2YXRlOgorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcikKKyAgICAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgZmxvYXQgbV9vcGFjaXR5OworfTsKKworY2xhc3MgRW5kVHJhbnNwYXJlbmN5
TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBFbmRUcmFuc3BhcmVuY3lMYXllcik7CisgICAgfQorCitwcml2YXRlOgorICAgIEVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RW5k
VHJhbnNwYXJlbmN5TGF5ZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKK2NsYXNzIERyYXdSZWN0
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdSZWN0
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJU
aGlja25lc3MpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQorICAgIGZsb2F0IGJvcmRlclRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1f
Ym9yZGVyVGhpY2tuZXNzOyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1f
Ym9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CisgICAgZmxvYXQgbV9ib3JkZXJUaGlja25lc3M7Cit9OworCitjbGFzcyBEcmF3TGlu
ZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGlu
ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQx
LCBwb2ludDIpKTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsgcmV0
dXJuIG1fcG9pbnQxOyB9CisgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVybiBt
X3BvaW50MjsgfQorCitwcml2YXRlOgorICAgIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3TGluZSkKKyAgICAgICAgLCBtX3BvaW50MShwb2ludDEpCisgICAgICAgICwg
bV9wb2ludDIocG9pbnQyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgRmxvYXRQb2ludCBtX3BvaW50MTsKKyAgICBGbG9hdFBvaW50IG1fcG9pbnQy
OworfTsKKworY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZs
b2F0IHN0cm9rZVdpZHRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJh
d0xpbmVzRm9yVGV4dChibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlTGluZXMsIHN0cm9rZVdpZHRoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRCbG9j
a0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0
aW9uID0gYmxvY2tMb2NhdGlvbjsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb247IH0KKyAgICBjb25zdCBGbG9hdFNp
emUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQorICAgIEZs
b2F0UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2Fs
QW5jaG9yOyB9CisgICAgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoczsgfQorICAgIGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRp
bmc7IH0KKyAgICBib29sIGRvdWJsZUxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVMaW5l
czsgfQorCitwcml2YXRlOgorICAgIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
YmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9r
ZVdpZHRoKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
KQorICAgICAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQorICAgICAgICAsIG1f
bG9jYWxBbmNob3IobG9jYWxBbmNob3IpCisgICAgICAgICwgbV93aWR0aHMod2lkdGhzKQorICAg
ICAgICAsIG1fc3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgpCisgICAgICAgICwgbV9wcmludGluZyhw
cmludGluZykKKyAgICAgICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJsZUxpbmVzKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFBvaW50IG1f
YmxvY2tMb2NhdGlvbjsKKyAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKKyAgICBEYXNoQXJy
YXkgbV93aWR0aHM7CisgICAgZmxvYXQgbV9zdHJva2VXaWR0aDsKKyAgICBib29sIG1fcHJpbnRp
bmc7CisgICAgYm9vbCBtX2RvdWJsZUxpbmVzOworfTsKKworY2xhc3MgRHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
IHN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihwb2ludCwgd2lkdGgsIHN0eWxlKSk7CisgICAgfQorCisgICAgRmxvYXRQ
b2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KKyAgICBmbG9hdCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhp
Y3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICAgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcikKKyAgICAgICAgLCBt
X3BvaW50KHBvaW50KQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9zdHls
ZShzdHlsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgRmxvYXRQb2ludCBtX3BvaW50OworICAgIGZsb2F0IG1fd2lkdGg7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOworfTsKKworY2xhc3Mg
RHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8RHJhd0VsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgfQorCisg
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToK
KyAgICBEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsg
fQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIERyYXdDb252ZXhQb2x5Z29u
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdDb252
ZXhQb2x5Z29uPiBjcmVhdGUoc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50
KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEcmF3Q29udmV4UG9seWdvbihudW1iZXJPZlBvaW50cywgcG9pbnRzLCBhbnRpYWxp
YXNlZCkpOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgcG9pbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9wb2ludHM7IH0KKyAgICBib29sIGFudGlhbGlhc2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9hbnRpYWxpYXNlZDsgfQorCitwcml2YXRlOgorICAgIERyYXdDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFs
aWFzZWQpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3RvcjxGbG9h
dFBvaW50PiBtX3BvaW50czsKKyAgICBib29sIG1fYW50aWFsaWFzZWQ7Cit9OworCitjbGFzcyBE
cmF3UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
cmF3UGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBEcmF3UGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYg
cGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIERyYXdQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQ
YXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQor
CisgICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0
aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0Zv
Y3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBj
b25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisgICAgaW50IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQorCitwcml2YXRlOgorICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCkKKyAgICAgICAgLCBtX3BhdGgo
cGF0aCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBQYXRoIG1fcGF0aDsKKyAgICBpbnQgbV93aWR0aDsK
KyAgICBpbnQgbV9vZmZzZXQ7CisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK2NsYXNzIERyYXdG
b2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lk
dGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4g
cmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV93aWR0aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitw
cml2YXRlOgorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzKQorICAgICAgICAsIG1f
cmVjdHMocmVjdHMpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPEludFJlY3Q+IG1fcmVjdHM7
CisgICAgaW50IG1fd2lkdGg7CisgICAgaW50IG1fb2Zmc2V0OworICAgIENvbG9yIG1fY29sb3I7
Cit9OworCitjbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKKyAgICB9
CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2
YXRlOgorICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5o
ZXJpdCBmcm9tIEZpbGxSZWN0IHByb3Blci4KK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aENv
bG9yPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhDb2xvcihyZWN0
LCBjb2xvcikpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisK
K3ByaXZhdGU6CisgICAgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aENvbG9yKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3Io
Y29sb3IpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7
Cit9OworCitjbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQp
KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQorCitwcml2YXRlOgorICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhHcmFkaWVudCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAg
LCBtX2dyYWRpZW50KGdyYWRpZW50KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAg
ICBtdXRhYmxlIFJlZjxHcmFkaWVudD4gbV9ncmFkaWVudDsgLy8gRklYTUU6IE1ha2UgdGhpcyBu
b3QgbXV0YWJsZQorfTsKKworY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3Jl
YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9k
ZSkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9
CisgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9
CisKK3ByaXZhdGU6CisgICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRS
ZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisg
ICAgICAgICwgbV9vcChvcCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7CisgICAgQ29tcG9z
aXRlT3BlcmF0b3IgbV9vcDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCitjbGFz
cyBGaWxsUm91bmRlZFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RmlsbFJvdW5kZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBi
bGVuZE1vZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xvcjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2JsZW5kTW9kZTsgfQorCitwcml2YXRlOgorICAgIEZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAg
ICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisKKyAgICBGbG9hdFJv
dW5kZWRSZWN0IG1fcmVjdDsKKyAgICBDb2xvciBtX2NvbG9yOworICAgIEJsZW5kTW9kZSBtX2Js
ZW5kTW9kZTsKK307CisKK2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQorICAgIENv
bG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQorICAgICAg
ICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xl
UmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1f
cmVjdDsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OworICAgIENvbG9y
IG1fY29sb3I7Cit9OworCitjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7Cisg
ICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQor
Citwcml2YXRlOgorICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5m
YXN0Qm91bmRpbmdSZWN0KCk7IH0KKworICAgIFBhdGggbV9wYXRoOworfTsKKworY2xhc3MgRmls
bEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
RmlsbEVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAg
RmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAg
ICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkZpbGxFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9
CisKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworfTsKKworY2xhc3MgU3Ryb2tlUmVjdCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHJva2VSZWN0PiBjcmVh
dGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOworICAg
IH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAg
ZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KKworcHJpdmF0
ZToKKyAgICBTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQorICAgICAgICAs
IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CisgICAgZmxvYXQgbV9saW5lV2lkdGg7Cit9OworCitjbGFzcyBTdHJva2VQYXRoIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNy
ZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBGbG9hdFBvaW50JiBtX2Jsb2NrTG9jYXRpb24p
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VQYXRoKHBhdGgsIG1f
YmxvY2tMb2NhdGlvbikpOworICAgIH0KKworICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25z
dCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9j
YXRpb247IH0KKyAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbikKKyAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAg
ICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUgUGF0aCBtX3BhdGg7CisgICAg
RmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247Cit9OworCitjbGFzcyBTdHJva2VFbGxpcHNlIDog
cHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZUVsbGlw
c2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIFN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVj
dDsKK307CisKK2NsYXNzIENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxDbGVhclJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkpOwor
ICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisK
K3ByaXZhdGU6CisgICAgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKKyNpZiBVU0UoQ0cpCitjbGFz
cyBBcHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBBcHBseVN0cm9rZVBhdHRlcm4oKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ry
b2tlUGF0dGVybikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgQXBwbHlGaWxsUGF0dGVy
biA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRl
cm4+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZp
bGxQYXR0ZXJuKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisg
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworfTsKKyNlbmRpZgorCitjbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3Jl
YXRlKGZsb2F0IHNjYWxlRmFjdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOworICAgIH0KKworICAgIGZs
b2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQorCitwcml2
YXRlOgorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKKyAgICAgICAgLCBt
X3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBt
X3NjYWxlRmFjdG9yOworfTsKKworLy8gRklYTUU6IHRoaXMgbmVlZHMgdG8gbW92ZS4KK3ZvaWQg
YWRkQ29udmV4UG9seWdvblRvUGF0aChQYXRoJiwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxv
YXRQb2ludCopOworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJ
dGVtJik7CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJ
TkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVj
dCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0o
RHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0oKSkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwK
KyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUcmFuc2xhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oUm90YXRlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFNjYWxlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKENvbmNhdGVuYXRlQ1RNKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNldFN0YXRlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNl
dExpbmVDYXApCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGlu
ZURhc2gpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUpv
aW4pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1p
dCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwKQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXQpCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcE91dFRvUGF0aCkKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGlwQ29udmV4UG9seWdvbikKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3R2x5cGhzKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3VGlsZWRJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3VGlsZWRTY2FsZWRJbWFnZSkKKyNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZl
SW1hZ2UpCisjZW5kaWYKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3UGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZSkK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZXNGb3JUZXh0
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d0VsbGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0Nv
bnZleFBvbHlnb24pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d1BhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3Vz
UmluZ1BhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0Zv
Y3VzUmluZ1JlY3RzKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZp
bGxSZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0
V2l0aENvbG9yKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxS
ZWN0V2l0aEdyYWRpZW50KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KEZpbGxDb21wb3NpdGVkUmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShGaWxsUm91bmRlZFJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRmlsbEVsbGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU3Ryb2tlUmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShTdHJva2VQYXRoKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0
cm9rZUVsbGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xl
YXJSZWN0KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCisjaWYgVVNFKENHKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQorI2VuZGlmCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKKwor
I2VuZGlmIC8vIERpc3BsYXlMaXN0SXRlbXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0ZTFkN2I3ZWVlY2Y5MzIxYjIxNzQxZjVjYzlmM2Vl
NTI1NTM1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTAsMCArMSw0ODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKworI2luY2x1
ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworUmVjb3JkZXI6OlJlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBG
bG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGJhc2VDVE0pCisg
ICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQorICAgICwgbV9kaXNwbGF5TGlzdChkaXNw
bGF5TGlzdCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwg
IlxuUmVjb3JkaW5nIHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKKworICAgIC8vIEZJWE1F
OiBob29rIHVwIHJlY29yZGVyIGluIHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgLy8gbV9ncmFw
aGljc0NvbnRleHQuc2V0RGlzcGxheUxpc3RSZWNvcmRlcih0aGlzKTsKKyAgICBtX3N0YXRlU3Rh
Y2suYXBwZW5kKENvbnRleHRTdGF0ZShiYXNlQ1RNLCBpbml0aWFsQ2xpcCkpOworfQorCitSZWNv
cmRlcjo6flJlY29yZGVyKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAx
KTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3Jl
LgorICAgIExPRyhEaXNwbGF5TGlzdHMsICJSZWNvcmRlZCBkaXNwbGF5IGxpc3Q6XG4lcyIsIG1f
ZGlzcGxheUxpc3QuZGVzY3JpcHRpb24oKS5kYXRhKCkpOworfQorCit2b2lkIFJlY29yZGVyOjp3
aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQoreworICAgIGlmIChpdGVtLmlzRHJhd2lu
Z0l0ZW0oKSB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuIHx8
IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgp
LnN0YXRlQ2hhbmdlOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRl
KGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOworICAgICAgICBpZiAoY2hhbmdlc0Zy
b21MYXN0U3RhdGUpIHsKKyAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMs
IHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkp
OworICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU2V0U3RhdGU6OmNyZWF0ZShzdGF0
ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKKyAgICAgICAgICAgIHN0
YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSgp
Lmxhc3REcmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKKyAgICAgICAgfQorICAg
ICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyA9IHRydWU7CisgICAgfQorfQor
Cit2b2lkIFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorewor
ICAgIGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsK
K30KKwordm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQoreworICAgIGFwcGVuZEl0ZW0oQ2xl
YXJTaGFkb3c6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5l
Q2FwIGxpbmVDYXApCit7CisgICAgYXBwZW5kSXRlbShTZXRMaW5lQ2FwOjpjcmVhdGUobGluZUNh
cCkpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRh
c2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBhcHBlbmRJdGVtKFNldExpbmVEYXNo
OjpjcmVhdGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQoreworICAgIGFwcGVuZEl0ZW0oU2V0TGluZUpv
aW46OmNyZWF0ZShsaW5lSm9pbikpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyTGltaXQpCit7CisgICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0OjpjcmVh
dGUobWl0ZXJMaW1pdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCit7CisgICAgRmxvYXRQb2ludCBibG9ja0xvY2F0aW9uID0gbV9jYWNo
aW5nID8gbV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgIEZsb2F0U2l6ZSBsb2Nh
bEFuY2hvciA9IHN0YXJ0UG9pbnQgLSBibG9ja0xvY2F0aW9uOworICAgIERyYXdpbmdJdGVtJiBu
ZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6Y3Jl
YXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
ZnJvbSksIG51bUdseXBocywgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHNtb290aGluZ01v
ZGUpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0
PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCit7Cisg
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKK30KKworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQordm9pZCBSZWNv
cmRlcjo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1v
ZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6
OmNyZWF0ZShpbWFnZVB0ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5k
TW9kZSwgb3JpZW50YXRpb24pKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30K
KyNlbmRpZgorCit2b2lkIFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Cit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKSkpOworICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQorewor
ICAgIGFwcGVuZEl0ZW0oU2F2ZTo6Y3JlYXRlKCkpOworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQo
bV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUobV9kaXNwbGF5TGlzdC5zaXplKCkgLSAx
KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAgIGlmICghbV9zdGF0ZVN0
YWNrLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgc3RhdGVVc2VkRm9y
RHJhd2luZyA9IGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nOworICAgIHNpemVfdCBz
YXZlSW5kZXggPSBjdXJyZW50U3RhdGUoKS5zYXZlSXRlbUluZGV4OworICAgIAorICAgIG1fc3Rh
dGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgLy8gSGF2ZSB0byBhdm9pZCBlbGlkaW5nIG5lc3Rl
ZCBTYXZlL1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29udGFpbnMgZHJhd2luZyBp
dGVtcy4KKyAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyB8PSBzdGF0ZVVzZWRG
b3JEcmF3aW5nOworCisgICAgaWYgKCFzdGF0ZVVzZWRGb3JEcmF3aW5nICYmIHNhdmVJbmRleCkg
eworICAgICAgICAvLyBUaGlzIFNhdmUvUmVzdG9yZSBkaWRuJ3QgY29udGFpbiBhbnkgZHJhd2lu
ZyBpdGVtcy4gUm9sbCBiYWNrIHRvIGp1c3QgYmVmb3JlIHRoZSBsYXN0IHNhdmUuCisgICAgICAg
IG1fZGlzcGxheUxpc3QucmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2F2ZUluZGV4KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGFwcGVuZEl0ZW0oUmVzdG9yZTo6Y3JlYXRlKCkpOworICAg
IAorICAgIGlmIChzYXZlSW5kZXgpIHsKKyAgICAgICAgU2F2ZSYgc2F2ZUl0ZW0gPSBkb3duY2Fz
dDxTYXZlPihtX2Rpc3BsYXlMaXN0Lml0ZW1BdChzYXZlSW5kZXgpKTsKKyAgICAgICAgc2F2ZUl0
ZW0uc2V0UmVzdG9yZUluZGV4KG1fZGlzcGxheUxpc3Quc2l6ZSgpIC0gMSk7CisgICAgfQorfQor
Cit2b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBjdXJy
ZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7CisgICAgYXBwZW5kSXRlbShUcmFuc2xhdGU6OmNy
ZWF0ZSh4LCB5KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAg
IGFwcGVuZEl0ZW0oUm90YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlhbnMpKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGN1cnJlbnRTdGF0
ZSgpLnNjYWxlKHNpemUpOworICAgIGFwcGVuZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICBh
cHBlbmRJdGVtKENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOworICAgIHVwZGF0ZUl0ZW1F
eHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCkKK3sKKyAgICBhcHBlbmRJdGVtKEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlj
a25lc3MpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5n
SXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOworICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3Mp
Cit7CisgICAgRmxvYXRQb2ludCBibG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8gbV9ibG9ja0xv
Y2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgIEZsb2F0U2l6ZSBsb2NhbEFuY2hvciA9IHBvaW50
IC0gYmxvY2tMb2NhdGlvbjsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShibG9ja0xvY2F0
aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRo
aWNrbmVzcykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJl
Y29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwgd2lk
dGgsIHN0eWxlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3
aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdF
bGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwor
fQorCit2b2lkIFJlY29yZGVyOjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2lu
dHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERy
YXdDb252ZXhQb2x5Z29uOjpjcmVhdGUobnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFz
ZWQpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpjcmVhdGUocGF0
aCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVy
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRo
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0p
OworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewor
ICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0
ZW0oRHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0OjpjcmVhdGUo
cmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdp
dGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNv
bG9yLCBvcCwgYmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShG
aWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSkpOworICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKSk7Cisg
ICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0g
PSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3JlYXRlKHJl
Y3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sK
KyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CisgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQoreworICAgIEZsb2F0UG9pbnQgYmxvY2tMb2NhdGlvbiA9IG1fY2FjaGluZyA/
IG1fYmxvY2tMb2NhdGlvbiA6IEZsb2F0UG9pbnQoKTsKKyAgICBQYXRoIHRyYW5zbGF0ZWQgPSBw
YXRoOworICAgIHRyYW5zbGF0ZWQudHJhbnNsYXRlKC1GbG9hdFNpemUoYmxvY2tMb2NhdGlvbi54
KCksIGJsb2NrTG9jYXRpb24ueSgpKSk7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VQYXRoOjpjcmVhdGUocGF0aCwgYmxv
Y2tMb2NhdGlvbikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lk
IFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0
cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKKyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBh
dHRlcm4oKQoreworICAgIGFwcGVuZEl0ZW0oQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQoreworICAgIGFwcGVuZEl0
ZW0oQXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCkpOworfQorI2VuZGlmCisKK3ZvaWQgUmVjb3Jk
ZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGN1cnJlbnRTdGF0ZSgpLmNs
aXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOworICAgIGFwcGVuZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJl
Y3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgYXBwZW5kSXRlbShDbGlwT3V0OjpjcmVhdGUocmVjdCkpOworfQorCit2b2lkIFJl
Y29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgYXBwZW5kSXRlbShDbGlw
T3V0VG9QYXRoOjpjcmVhdGUocGF0aCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3sKKyAgICBjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7CisgICAgYXBw
ZW5kSXRlbShDbGlwUGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9p
bnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXMpCit7CisgICAgUGF0aCBwb2x5Z29uUGF0aDsKKyAg
ICBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKHBvbHlnb25QYXRoLCBudW1Qb2ludHMsIHBvaW50cyk7
CisgICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocG9seWdvblBhdGguZmFz
dEJvdW5kaW5nUmVjdCgpKTsKKworICAgIGFwcGVuZEl0ZW0oQ2xpcENvbnZleFBvbHlnb246OmNy
ZWF0ZShudW1Qb2ludHMsIHBvaW50cywgYW50aWFsaWFzKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAg
Ly8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRl
IGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5
IGNhbGxlZCBlYXJseSBvbj8KKyAgICBhcHBlbmRJdGVtKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
OmNyZWF0ZShkZXZpY2VTY2FsZUZhY3RvcikpOworfQorCitJdGVtJiBSZWNvcmRlcjo6YXBwZW5k
SXRlbShSZWY8SXRlbT4mJiBpdGVtKQoreworICAgIHdpbGxBcHBlbmRJdGVtKGl0ZW0uZ2V0KCkp
OworICAgIHJldHVybiBtX2Rpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYgaXRlbSkgY29uc3QK
K3sKKyAgICBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyht
X2dyYXBoaWNzQ29udGV4dCkpCisgICAgICAgIGl0ZW0uc2V0RXh0ZW50KGV4dGVudEZyb21Mb2Nh
bEJvdW5kcyhyZWN0LnZhbHVlKCkpKTsKK30KKworLy8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93
RGF0YQorc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVy
UmFkaXVzKQoreworICAgIC8vIEJsdXJyaW5nIHVzZXMgYSBHYXVzc2lhbiBmdW5jdGlvbiB3aG9z
ZSBzdGQuIGRldmlhdGlvbiBpcyBtX3JhZGl1cy8yLCBhbmQgd2hpY2ggaW4gdGhlb3J5CisgICAg
Ly8gZXh0ZW5kcyB0byBpbmZpbml0eS4gSW4gOC1iaXQgY29udGV4dHMsIGhvd2V2ZXIsIHJvdW5k
aW5nIGNhdXNlcyB0aGUgZWZmZWN0IHRvIGJlY29tZQorICAgIC8vIHVuZGV0ZWN0YWJsZSBhdCBh
cm91bmQgMS40eCB0aGUgcmFkaXVzLgorICAgIGNvbnN0IGZsb2F0IHJhZGl1c0V4dGVudE11bHRp
cGxpZXIgPSAxLjQ7CisgICAgcmV0dXJuIGNlaWxmKGJsdXJSYWRpdXMgKiByYWRpdXNFeHRlbnRN
dWx0aXBsaWVyKTsKK30KKworRmxvYXRSZWN0IFJlY29yZGVyOjpleHRlbnRGcm9tTG9jYWxCb3Vu
ZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZHMg
PSByZWN0OworICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgc3RhdGUgPSBjdXJyZW50U3RhdGUoKTsK
KworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93UmFkaXVzOwor
ICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dC5nZXRTaGFk
b3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgeworICAgICAgICBG
bG9hdFJlY3Qgc2hhZG93RXh0ZW50PSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVudC5tb3Zl
KHNoYWRvd09mZnNldCk7CisgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50
aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOworICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0
ZW50KTsKKyAgICB9CisgICAgCisgICAgRmxvYXRSZWN0IGNsaXBwZWRFeHRlbnQgPSBpbnRlcnNl
Y3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgYm91bmRzKTsKKyAgICByZXR1cm4gc3RhdGUuY3RtLm1h
cFJlY3QoY2xpcHBlZEV4dGVudCk7Cit9CisKK2NvbnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUm
IFJlY29yZGVyOjpjdXJyZW50U3RhdGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3N0YXRlU3Rh
Y2suc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKK30KKworUmVjb3Jk
ZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpCit7CisgICAgQVNTRVJU
KG1fc3RhdGVTdGFjay5zaXplKCkpOworICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOwor
fQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAoreworICAg
IHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Cit9CisKK2NvbnN0IEZsb2F0UmVjdCYgUmVjb3Jk
ZXI6OmNsaXBCb3VuZHMoKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlw
Qm91bmRzOworfQorCit2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQoreworICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CisgICAgY2xpcEJvdW5k
cy5tb3ZlKC14LCAteSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIGRvdWJsZSBhbmdsZUluRGVncmVlcyA9IHJh
ZDJkZWcoc3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykpOworICAgIGN0bS5yb3Rh
dGUoYW5nbGVJbkRlZ3JlZXMpOworICAgIAorICAgIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbjsK
KyAgICByb3RhdGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworCisgICAgaWYgKE9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IHJvdGF0aW9uLmludmVyc2UoKSkKKyAgICAgICAg
Y2xpcEJvdW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit2
b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K3sKKyAgICBjdG0uc2NhbGUoc2l6ZSk7CisgICAgY2xpcEJvdW5kcy5zY2FsZSgxIC8gc2l6ZS53
aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQoreworICAgIGN0
bSAqPSBtYXRyaXg7CisKKyAgICBpZiAoT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNl
ID0gbWF0cml4LmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJvdW5kcyA9IGludmVyc2UudmFsdWUo
KS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjRjMjY0ODc1NzQzMzM0YjkzOTFiYzIwMTcyNWE2MzI0YjcxYmJhZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXNwbGF5TGlz
dFJlY29yZGVyX2gKKyNkZWZpbmUgRGlzcGxheUxpc3RSZWNvcmRlcl9oCisKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIiAvLyBGb3IgSW50ZXJw
b2xhdGlvblF1YWxpdHkuCisjaW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVs
ZS4KKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRS
ZWN0OworY2xhc3MgR2x5cGhCdWZmZXI7CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRm9udDsK
K2NsYXNzIEltYWdlOworCitzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CitzdHJ1Y3QgSW1h
Z2VQYWludGluZ09wdGlvbnM7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERy
YXdpbmdJdGVtOworCitjbGFzcyBSZWNvcmRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UmVjb3JkZXIpOworcHVibGljOgorICAgIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3Bs
YXlMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7CisgICAgflJlY29yZGVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpOworICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5l
Q2FwKTsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hP
ZmZzZXQpOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOworICAgIHZvaWQgc2V0TWl0
ZXJMaW1pdChmbG9hdCk7CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUpOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKTsKKyAgICB2b2lkIHN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworI2lmIFVTRShD
RykKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOworICAgIHZvaWQgYXBwbHlGaWxsUGF0
dGVybigpOworI2VuZGlmCisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisKKyAgICB2b2lkIGRyYXdJbWFnZShJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgZHJhd1RpbGVkSW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdUaWxlZElt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1
bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKTsKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbik7CisjZW5kaWYKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRN
b2RlID0gQmxlbmRNb2RlTm9ybWFsKTsKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICB2b2lkIGRy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBH
cmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKKyAgICB2b2lkIGRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZHJhd0NvbnZleFBvbHlnb24oc2l6
ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXNlZCk7
CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisKKyAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKyAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiwgaW50IHdpZHRoLCBp
bnQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOworCisgICAgdm9pZCBzYXZlKCk7CisgICAgdm9pZCBy
ZXN0b3JlKCk7CisKKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2
b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKTsKKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsK
KworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBQYXRoJik7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUpOworICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3Qg
RmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQpOworCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlMaXN0LnNpemUoKTsgfQorCitwcml2YXRlOgorICAgIEl0ZW0mIGFwcGVuZEl0ZW0o
UmVmPEl0ZW0+JiYpOworICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpOworCisg
ICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25z
dDsKKyAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mKSBjb25zdDsKKyAgICAK
KyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0
UmVjdCYgY2xpcEJvdW5kcygpIGNvbnN0OworCisgICAgc3RydWN0IENvbnRleHRTdGF0ZSB7Cisg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07CisgICAgICAgIEZsb2F0UmVjdCBjbGlwQm91bmRz
OworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbGFzdERyYXdpbmdTdGF0ZTsKKyAgICAgICAgYm9vbCB3
YXNVc2VkRm9yRHJhd2luZyB7IGZhbHNlIH07CisgICAgICAgIHNpemVfdCBzYXZlSXRlbUluZGV4
IHsgMCB9OworICAgICAgICAKKyAgICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCisgICAgICAgICAgICA6IGN0
bSh0cmFuc2Zvcm0pCisgICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKHNp
emVfdCBzYXZlSW5kZXgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbnRleHRTdGF0
ZSBzdGF0ZShjdG0sIGNsaXBCb3VuZHMpOworICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2Ug
PSBzdGF0ZUNoYW5nZTsKKyAgICAgICAgICAgIHN0YXRlLmxhc3REcmF3aW5nU3RhdGUgPSBsYXN0
RHJhd2luZ1N0YXRlOworICAgICAgICAgICAgc3RhdGUuc2F2ZUl0ZW1JbmRleCA9IHNhdmVJbmRl
eDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBh
bmdsZUluUmFkaWFucyk7CisgICAgICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Cisg
ICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIH07Cisg
ICAgCisgICAgY29uc3QgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKSBjb25zdDsKKyAgICBD
b250ZXh0U3RhdGUmIGN1cnJlbnRTdGF0ZSgpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dy
YXBoaWNzQ29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKKworICAgIGJv
b2wgbV9jYWNoaW5nIHsgZmFsc2UgfTsKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsK
KyAgICAKKyAgICBWZWN0b3I8Q29udGV4dFN0YXRlLCAzMj4gbV9zdGF0ZVN0YWNrOworfTsKKwor
fQorfQorCisjZW5kaWYgLy8gRGlzcGxheUxpc3RSZWNvcmRlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAzODc2ODYxNzgyYTVkYTdlNzA0
NThjMGVjZTgwMzg2NTU5Y2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgi
CisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisj
aW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
RGlzcGxheUxpc3QgeworCitSZXBsYXllcjo6UmVwbGF5ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCisgICAgOiBtX2Rpc3BsYXlMaXN0
KGRpc3BsYXlMaXN0KQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1JlcGxheWVy
Ojp+UmVwbGF5ZXIoKQoreworfQorCit2b2lkIFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBz
dHJlYW0gPDwgIlxuUmVwbGF5aW5nIHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKKyAgICBV
TlVTRURfUEFSQU0oaW5pdGlhbENsaXApOworCisgICAgc2l6ZV90IG51bUl0ZW1zID0gbV9kaXNw
bGF5TGlzdC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytp
KSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2Rpc3BsYXlMaXN0Lmxpc3QoKVtpXS5nZXQoKTsK
KyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJkcmF3aW5n
ICAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOworICAgICAgICBpdGVtLmFwcGx5KG1fY29udGV4dCk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTFhYmJhZWYwMTI4YzQxMzQxY2NhZjk1ZDk4NDM3MmFjZTNmZDJjMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0UmVwbGF5ZXJfaAorI2Rl
ZmluZSBEaXNwbGF5TGlzdFJlcGxheWVyX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNz
IEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworbmFtZXNwYWNlIERpc3BsYXlM
aXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3Q7CisKK2NsYXNzIFJlcGxheWVyIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSZXBsYXllcik7CitwdWJsaWM6CisgICAgUmVwbGF5ZXIoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRGlzcGxheUxpc3QmKTsKKyAgICB+UmVwbGF5ZXIoKTsKKworICAg
IHZvaWQgcmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXApOworCitwcml2YXRlOgor
ICAgIGNvbnN0IERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OworICAgIEdyYXBoaWNzQ29udGV4
dCYgbV9jb250ZXh0OworfTsKKworfQorfQorCisjZW5kaWYgLy8gRGlzcGxheUxpc3RSZXBsYXll
cl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268442</attachid>
            <date>2016-01-06 20:43:35 -0800</date>
            <delta_ts>2016-01-06 21:03:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106204302.patch</filename>
            <type>text/plain</type>
            <size>147163</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NWRmYTQ4MjAzZGE3
YzYyYjYyN2YxMGVkYWMyZDEyZmFjYjFmMC4uZDQzMmIzYWEwZDMzMmZmZDE4NzVhM2U1MjgzOTBj
MWY4NmE1Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmMyYjg3NTkzZmE1ZTRlMDhiZDEzNmVlNDQ0ODkzYzMyNDU1YmI5ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworI2lmIFVTRShDRykKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX2No
YW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRl
eHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xv
cik7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3Rh
dGUuZmlsbENvbG9yKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9r
ZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQor
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5k
LW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxl
ZENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0
aW9uLWVuYWJsZWQiLCBtX3N0YXRlLmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxk
LXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJh
d0x1bWluYW5jZU1hc2tDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1p
bmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2UpCit7CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0
dXJuIHRzOworfQorCisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRp
bmdDb250cm9sVGludHMoZmFsc2UpCiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDUyYjFhZDgyYjJmOGE1ODcwOGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEy
OTMzYzBmMjM3OGEzYzEzN2ZjZjYzYWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0g
Q2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwLAorICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBo
YUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAg
ICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
ICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAor
ICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3
LAorICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8
IDE4LAorICAgICAgICBBbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAx
IDw8IDE5LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAg
PSAxIDw8IDIwLAorICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIxLAorICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAg
ICAgICAgPSAxIDw8IDIyLAorICAgIH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5n
ZUZsYWdzOworCiAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQ
dHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxl
OwogfTsKIAorc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUp
CisgICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFncyB7IDAgfTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc5YmZkY2Q3MDkzOWY0NjYyNjA3N2Y0OTJhZTZiZmU2ZTA5NWZi
NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dU
Rjo6Q1N0cmluZyBEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFRleHRT
dHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4
KCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoKSBjb25zdAoreworICAgIGZwcmludGYo
c3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRhdGEoKSk7Cit9CisjZW5kaWYKKwordm9pZCBE
aXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFt
OjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0cyA8PCAiZGlzcGxheSBsaXN0IjsKKworICAg
IHNpemVfdCBudW1JdGVtcyA9IG1fbGlzdC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2Nv
cGUodHMpOworICAgICAgICB0cyA8PCBpIDw8ICIgIiA8PCBtX2xpc3RbaV0uZ2V0KCk7CisgICAg
fQorICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICB0cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBz
aXplSW5CeXRlcygpOworICAgIHRzLmVuZEdyb3VwKCk7Cit9CisKK3NpemVfdCBEaXNwbGF5TGlz
dDo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgIGZv
ciAoYXV0byYgcmVmIDogbV9saXN0KQorICAgICAgICByZXN1bHQgKz0gSXRlbTo6c2l6ZUluQnl0
ZXMocmVmKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3Bs
YXlMaXN0CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgZGlzcGxheUxpc3Qu
ZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NTM2ZDI5NzBiMGYxYmM2ZTIzYWI2ZjU1
OWU5ZGExYzA2ZTE0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMCwwICsxLDk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlz
cGxheUxpc3RfaAorI2RlZmluZSBEaXNwbGF5TGlzdF9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFRleHRTdHJlYW07CisKK25hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CisKK2NsYXNzIEl0ZW07CisKK2NsYXNzIERpc3BsYXlMaXN0IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEaXNwbGF5TGlzdCk7CisgICAgZnJpZW5kIGNsYXNzIFJlY29y
ZGVyOworcHVibGljOgorICAgIERpc3BsYXlMaXN0KCkgPSBkZWZhdWx0OworICAgIERpc3BsYXlM
aXN0KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKworICAgIERpc3BsYXlMaXN0JiBvcGVyYXRv
cj0oRGlzcGxheUxpc3QmJikgPSBkZWZhdWx0OworCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdDsKKworICAgIGNvbnN0IFZlY3RvcjxSZWY8SXRlbT4+JiBsaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0OyB9CisgICAgSXRlbSYgaXRlbUF0KHNpemVfdCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpbmRleCA8IG1fbGlzdC5zaXplKCkpOworICAgICAgICByZXR1cm4gbV9s
aXN0W2luZGV4XS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV9saXN0
LmNsZWFyKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXpl
KCk7IH0KKworICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgbV9saXN0LnJlc2l6ZShpbmRleCk7CisgICAgfQorCisgICAgc2l6ZV90IHNp
emVJbkJ5dGVzKCkgY29uc3Q7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJM
RUQKKyAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICB2b2lkIGR1bXAo
KSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEl0ZW0mIGFwcGVuZChSZWY8SXRlbT4m
JiBpdGVtKQorICAgIHsKKyAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKKyAg
ICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuZ2V0KCk7CisgICAgfQorCisgICAgVmVjdG9yPFJl
ZjxJdGVtPj4mIGxpc3QoKSB7IHJldHVybiBtX2xpc3Q7IH0KKworICAgIFZlY3RvcjxSZWY8SXRl
bT4+IG1fbGlzdDsKK307CisKK30gLy8gRGlzcGxheUxpc3QKKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKK30g
Ly8gV2ViQ29yZQorCit1c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7CisK
KyNlbmRpZiAvKiBEaXNwbGF5TGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWY2ZmRkNWY5ODAyYjA0Y2ZkMzI4NTY3ZjYzODM2ZGRiOGExZmY5
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMCwwICsxLDEyMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKworI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgRGlzcGxheUxpc3QgeworCisvLyBTaG91bGQgbWF0Y2ggUmVuZGVyVGhlbWU6OnBs
YXRmb3JtRm9jdXNSaW5nV2lkdGgoKQorc3RhdGljIGNvbnN0IGZsb2F0IHBsYXRmb3JtRm9jdXNS
aW5nV2lkdGggPSAzOworCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECitX
VEY6OkNTdHJpbmcgSXRlbTo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0g
dHM7CisgICAgdHMgPDwgKnRoaXM7CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9
CisjZW5kaWYKKworc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mIGl0ZW0pCit7
CisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4oaXRlbSkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4o
aXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihpdGVtKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2Nh
bGU+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0
YXRlPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZURhc2g6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURh
c2g+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5
cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TWl0
ZXJMaW1pdD4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihpdGVtKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwPihpdGVt
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxDbGlwT3V0PihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0
aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9s
eWdvbjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwQ29udmV4UG9seWdvbj4o
aXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdJbWFnZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0p
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERy
YXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKSk7CisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSkpOworI2VuZGlmCisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1Bh
dHRlcm4+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVt
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihpdGVtKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0Vs
bGlwc2U+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Q29udmV4UG9seWdvbj4oaXRlbSkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PERyYXdQYXRoPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0
ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Rmls
bFJlY3Q+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
b3VuZGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUm91bmRlZFJl
Y3Q+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToK
KyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4o
aXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVs
bGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0p
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQ
YXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0pKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pKTsKKyNpZiBVU0UoQ0cpCisg
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBw
bHlGaWxsUGF0dGVybj4oaXRlbSkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBseURl
dmljZVNjYWxlRmFjdG9yPihpdGVtKSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2luZ0l0
ZW0mIGl0ZW0pCit7CisgICAgdHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJleHRlbnQgIjsK
KyAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQorICAgICAgICB0cyA8PCBpdGVtLmV4dGVudCgp
OworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgInVua25vd24iOworICAgIAorICAgIHRzLmVuZEdy
b3VwKCk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0ZW0p
Cit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3JlSW5k
ZXgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwor
dm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCit7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
eSIsIGl0ZW0ueSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBSb3RhdGU6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJvdGF0ZSht
X2FuZ2xlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwg
aXRlbS5hbmdsZSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTY2FsZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2NhbGUobV9z
aXplKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNjYWxlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0u
YW1vdW50KCkpOworCisgICAgcmV0dXJuIHRzOworfQorCitDb25jYXRlbmF0ZUNUTTo6Q29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgOiBJdGVtKEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKKyAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKK3sK
K30KKwordm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAoreworICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVu
YXRlQ1RNJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFuc2Zv
cm0oKSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBtX3N0YXRlLmFwcGx5KGNvbnRleHQp
OworfQorCit2b2lkIFNldFN0YXRlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Cit7CisgICAgbV9zdGF0ZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3Rh
dGUpCit7CisgICAgdHMgPDwgc3RhdGUuc3RhdGUoKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3Zv
aWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkK
K3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJy
YXksIG1fZGFzaE9mZnNldCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCit7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOworICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Cit9
CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
ZXRMaW5lSm9pbiYgbGluZUpvaW4pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4i
LCBsaW5lSm9pbi5saW5lSm9pbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0TWl0
ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJM
aW1pdCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5t
aXRlckxpbWl0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclNoYWRvdzo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xlYXJT
aGFkb3coKTsKK30KKwordm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQoreworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK3ZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKK3sKKyAgICB0
cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQor
Cit2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmKQorewor
Ly8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0
aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGlwUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcFBhdGgobV9w
YXRoLCBtX3dpbmRSdWxlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQoreworLy8gICAgdHMuZHVtcFByb3Bl
cnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHRz
LmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK0NsaXBDb252ZXhQb2x5Z29uOjpDbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVt
YmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkK
KyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRpYWxp
YXMoYW50aWFsaWFzZWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlBv
aW50czsgKytpKQorICAgICAgICBtX3BvaW50cy5hcHBlbmQocG9pbnRzW2ldKTsKK30KKwordm9p
ZCBDbGlwQ29udmV4UG9seWdvbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuY2xpcENvbnZleFBvbHlnb24obV9wb2ludHMuc2l6ZSgpLCBtX3Bv
aW50cy5kYXRhKCksIG1fYW50aWFsaWFzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBDb252ZXhQb2x5Z29uJiBpdGVtKQorewor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJhbnRpYWxpYXMiLCBpdGVtLmFudGlhbGlhcygpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK0RyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
KyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQorICAgICwgbV9mb250KGNv
bnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRp
b24pCisgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICwgbV9zbW9vdGhpbmdN
b2RlKHNtb290aGluZ01vZGUpCit7CisgICAgbV9nbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShjb3VudCk7CisgICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBtX2ds
eXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKKyAgICAgICAgbV9hZHZhbmNlcy51bmNo
ZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOworICAgIH0KKyAgICBjb21wdXRlQm91bmRzKCk7Cit9
CisKK2lubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyKCkg
Y29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7CisjaWYgVVNFKENBSVJPKQorICAgICAgICBy
ZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLmluZGV4LCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ld
KTsKKyNlbHNlCisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICZtX2ZvbnQuZ2V0KCks
IG1fYWR2YW5jZXNbaV0pOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50LgorICAgIFVOVVNFRF9QQVJBTShtX3Ntb290aGluZ01vZGUpOwor
fQorCit2b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQoreworICAgIC8vIEZJWE1FOiBU
aGlzIGNvZGUgZG9lc24ndCBhY3R1YWxseSB0YWtlIHRoZSBleHRlbnRzIG9mIHRoZSBnbHlwaHMg
aW50byBjb25zaWRlcmF0aW9uLiBJdCBhc3N1bWVzIHRoYXQKKyAgICAvLyB0aGUgZ2x5cGggbGll
cyBlbnRpcmVseSB3aXRoaW4gaXRzIChhc2NlbnQrZGVzY2VudCB4IGFkdmFuY2UpIHJlY3QuCisg
ICAgZmxvYXQgYXNjZW50ID0gbV9mb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7Cisg
ICAgZmxvYXQgZGVzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdERlc2NlbnQoKTsK
KyAgICBGbG9hdFBvaW50IGN1cnJlbnQgPSB0b0Zsb2F0UG9pbnQobG9jYWxBbmNob3IoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgeworICAgICAg
ICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07CisgICAgICAgIEZs
b2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0g
YXNjZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICBtX2Jv
dW5kcy51bml0ZShnbHlwaFJlY3QpOworCisgICAgICAgIGN1cnJlbnQgKz0gRmxvYXRTaXplKGFk
dmFuY2UpOworICAgIH0KK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3R2x5cGhzOjpsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBs
b2NhbEJvdW5kcyA9IG1fYm91bmRzOworICAgIGxvY2FsQm91bmRzLm1vdmUobV9ibG9ja0xvY2F0
aW9uLngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7CisgICAgcmV0dXJuIGxvY2FsQm91bmRzOwor
fQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0dseXBocyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCisgICAgdHMuZHVt
cFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMoKS5zaXplKCkpOworCisgICAg
cmV0dXJuIHRzOworfQorCitEcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBt
X2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lk
IERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNl
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKK3sKKyAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNl
LXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIs
IGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorCitEcmF3VGlsZWRJbWFn
ZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxl
ZEltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX3RpbGVTaXplKHRpbGVTaXpl
KQorICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25z
KGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lkIERyYXdUaWxlZEltYWdlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGls
ZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2l6
ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdlJiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdUaWxl
ZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0
aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSkK
KyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQor
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxl
RmFjdG9yKQorICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAsIG1fdlJ1bGUodlJ1bGUpCisgICAg
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2
b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rl
c3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1bGUs
IG1faW1hZ2VQYWludGluZ09wdGlvbnMpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJk
ZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKworI2lm
IFVTRShDRykgfHwgVVNFKENBSVJPKQorRHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2Uo
UGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2Up
CisjaWYgVVNFKENHKQorICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN0b3JlIGFuIGltYWdlIGZvciBD
YWlyby4KKyAgICAsIG1faW1hZ2VQdHIoaW1hZ2VQdHIpCisjZW5kaWYKKyAgICAsIG1faW1hZ2VT
aXplKGltYWdlU2l6ZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCisgICAgLCBtX3Ny
Y1JlY3Qoc3JjUmVjdCkKKyAgICAsIG1fb3Aob3ApCisgICAgLCBtX2JsZW5kTW9kZShibGVuZE1v
ZGUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQoreworICAgIFVOVVNFRF9QQVJB
TShpbWFnZVB0cik7Cit9CisKK3ZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIGNvbnRleHQuZHJhd05h
dGl2ZUltYWdlKG1faW1hZ2VQdHIuZ2V0KCksIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBt
X3NyY1JlY3QsIG1fb3AsIG1fYmxlbmRNb2RlLCBtX29yaWVudGF0aW9uKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGNvbnRleHQpOworI2VuZGlmCit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICAv
LyBGSVhNRTogZHVtcCBtb3JlIHN0dWZmLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJl
Y3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0
ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorI2VuZGlmCisKK0RyYXdQYXR0
ZXJuOjpEcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdHRlcm4pCisgICAgLCBtX2ltYWdlKGltYWdlKQor
ICAgICwgbV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCisgICAgLCBtX3RpbGVS
ZWN0KHRpbGVSZWN0KQorICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKKyAgICAsIG1fcGhh
c2UocGhhc2UpCisgICAgLCBtX3NwYWNpbmcoc3BhY2luZykKKyAgICAsIG1fb3Aob3ApCisgICAg
LCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCit7Cit9CisKK3ZvaWQgRHJhd1BhdHRlcm46OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdQYXR0
ZXJuKG1faW1hZ2UuZ2V0KCksIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFz
ZSwgbV9zcGFjaW5nLCBtX29wLCBtX2Rlc3RpbmF0aW9uLCBtX2JsZW5kTW9kZSk7Cit9CisKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0
dGVybiYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zv
cm0oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInBoYXNlIiwgaXRlbS5waGFzZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInNwYWNpbmciLCBpdGVtLnNwYWNpbmcoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2
b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwor
ICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91
bmRzOworICAgIGJvdW5kcy5maXRUb1BvaW50cyhtX3BvaW50MSwgbV9wb2ludDIpOworICAgIHJl
dHVybiBib3VuZHM7Cit9CisKK3ZvaWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdMaW5lKG1fcG9pbnQxLCBtX3BvaW50
Mik7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3TGluZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9p
bnQxKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkpOwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0
KHBvaW50KCksIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKK30KKworT3B0
aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0
dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpj
b21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4KKwor
ICAgIGlmICghbV93aWR0aHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisK
KyAgICBGbG9hdFJlY3QgcmVzdWx0KHBvaW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCks
IG1fc3Ryb2tlV2lkdGgpKTsKKyAgICByZXN1bHQuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBmb3Ig
cGl4ZWwgc25hcHBpbmcuIEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNuJ3Qg
dGFrZSB0aGUgQ1RNIGludG8gYWNjb3VudC4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVz
Rm9yVGV4dCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJs
b2NrTG9jYXRpb24oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVt
LmxvY2FsQW5jaG9yKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRocyIsIGl0ZW0ud2lkdGhzKCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiaXMtcHJpbnRpbmciLCBpdGVtLmlzUHJpbnRpbmcoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJkb3VibGUiLCBpdGVtLmRvdWJsZUxpbmVzKCkpOworICAgIHJldHVybiB0czsK
K30KKwordm9pZCBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKG1fcG9pbnQsIG1fd2lkdGgsIG1fc3R5bGUpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+
IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2
YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXIoKSByZXR1cm5zLgorCisgICAgRmxvYXRSZWN0IHJlc3VsdChtX3Bv
aW50LCBGbG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOworICAg
IHJlc3VsdC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZv
ciAibWlzc3BlbGxpbmcgZG90IiBzbmFwcGluZy4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlciYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVt
LnBvaW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsK
K30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdFbGxpcHNlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0u
cmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKKy8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUu
Cit2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwgc2l6ZV90IG51bVBvaW50
cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIEFTU0VSVChudW1Qb2ludHMgPiAw
KTsKKworICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBudW1Qb2ludHM7ICsraSkKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsK
KyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOworfQorCitEcmF3Q29udmV4UG9seWdvbjo6RHJhd0Nv
bnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMsIGJvb2wgYW50aWFsaWFzZWQpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0Nv
bnZleFBvbHlnb24pCisgICAgLCBtX2FudGlhbGlhc2VkKGFudGlhbGlhc2VkKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZQb2ludHM7ICsraSkKKyAgICAgICAgbV9wb2lu
dHMuYXBwZW5kKHBvaW50c1tpXSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0NvbnZl
eFBvbHlnb246OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7Cisg
ICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHBvaW50IDogbV9wb2ludHMpCisg
ICAgICAgIHJlc3VsdC5leHRlbmQocG9pbnQpOworICAgIHJlc3VsdC5pbmZsYXRlKG1fYW50aWFs
aWFzZWQgPyAxIDogMCk7IC8vIEFjY291bnQgZm9yIGFudGlhbGlhc2luZworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgRHJhd0NvbnZleFBvbHlnb246OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdDb252ZXhQb2x5Z29uKG1fcG9p
bnRzLnNpemUoKSwgbV9wb2ludHMuZGF0YSgpLCBtX2FudGlhbGlhc2VkKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdDb252ZXhQ
b2x5Z29uJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludHMiLCBpdGVtLnBvaW50cygpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoImFudGlhbGlhc2VkIiwgaXRlbS5hbnRpYWxpYXNlZCgpKTsK
KyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgY29udGV4dC5kcmF3UGF0aCht
X3BhdGgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisjZW5kaWYKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQ
YXRoJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJ
WE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIERy
YXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZzZXQsIG1f
Y29sb3IpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdQYXRoOjpsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBy
ZXN1bHQgPSBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOworICAgIHJlc3VsdC5pbmZsYXRlKHBs
YXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5n
UGF0aCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBG
SVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgi
LCBpdGVtLndpZHRoKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZz
ZXQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CisgICAg
cmV0dXJuIHRzOworfQorCit2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3Jl
Y3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVj
dD4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgZm9yIChhdXRvJiByZWN0IDog
bV9yZWN0cykKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3QpOworICAgIHJlc3VsdC5pbmZsYXRl
KHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNS
aW5nUmVjdHMmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3RzIiwgaXRlbS5yZWN0cygpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsUmVj
dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQu
ZmlsbFJlY3QobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
IiwgaXRlbS5yZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsUmVjdFdpdGhD
b2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRl
eHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aENvbG9yJiBpdGVtKQor
eworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxs
UmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxS
ZWN0V2l0aEdyYWRpZW50JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgLy8gRklYTUU6IGxvZyBncmFkaWVudC4KKyAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2
b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAoreworICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBtX2Js
ZW5kTW9kZSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJl
Y3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29s
b3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwgaXRlbS5j
b21wb3NpdGVPcGVyYXRvcigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBp
dGVtLmJsZW5kTW9kZSgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJvdW5kZWRS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4
dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7Cit9CisKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91
bmRlZFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOworICAgIHJldHVy
biB0czsKK30KKwordm9pZCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUobV9yZWN0LCBtX3JvdW5kZWRIb2xlUmVjdCwgbV9jb2xvcik7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQtaG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9s
ZVJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUGF0aChtX3BhdGgpOworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFBh
dGgmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKKy8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklY
TUU6IHBhdGggbG9nZ2luZy4KKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbEVsbGlwc2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZp
bGxFbGxpcHNlKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK09wdGlvbmFsPEZsb2F0
UmVjdD4gU3Ryb2tlUmVjdDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OworICAgIGJvdW5kcy5leHBhbmQo
bV9saW5lV2lkdGgsIG1fbGluZVdpZHRoKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lk
IFN0cm9rZVJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICBjb250ZXh0LnN0cm9rZVJlY3QobV9yZWN0LCBtX2xpbmVXaWR0aCk7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VSZWN0JiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgibGluZS13aWR0aCIsIGl0ZW0ubGluZVdpZHRoKCkpOworICAgIHJldHVybiB0czsK
K30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8g
dGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhC
eVN0cm9raW5nUGF0aCgpLgorICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5n
UmVjdCgpOworICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25l
c3MpOworICAgIGJvdW5kcy5tb3ZlQnkobV9ibG9ja0xvY2F0aW9uKTsKKyAgICByZXR1cm4gYm91
bmRzOworfQorCit2b2lkIFN0cm9rZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gdG9GbG9hdFNpemUobV9ibG9ja0xv
Y2F0aW9uKTsKKyAgICBtX3BhdGgudHJhbnNsYXRlKG9mZnNldCk7CisgICAgY29udGV4dC5zdHJv
a2VQYXRoKG1fcGF0aCk7CisgICAgbV9wYXRoLnRyYW5zbGF0ZSgtb2Zmc2V0KTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBh
dGgmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xv
Y2F0aW9uKCkpOworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAv
LyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8Rmxv
YXRSZWN0PiBTdHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5z
dHJva2VUaGlja25lc3MoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7CisgICAg
Ym91bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgcmV0
dXJuIGJvdW5kczsKK30KKwordm9pZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5zdHJva2VFbGxpcHNlKG1fcmVjdCk7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTdHJva2VFbGxpcHNlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3Qp
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ2xlYXJSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVt
KQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOworICAgIHJldHVy
biB0czsKK30KKwordm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKK30KKworI2lmIFVTRShDRykKK3ZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseVN0cm9rZVBh
dHRlcm4oKTsKK30KKwordm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7Cit9
CisjZW5kaWYKKwordm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFj
dG9yKG1fc2NhbGVGYWN0b3IpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInNjYWxlLWZhY3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgSXRlbVR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNj
YWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0Ijsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcENvbnZleFBvbHlnb246IHRzIDw8ICJjbGlwLWNv
bnZleC1wb2x5Z29uIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczogdHMg
PDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB0
cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZElt
YWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFnZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiOyBi
cmVhazsKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7IGJyZWFrOworI2VuZGlmCisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogdHMgPDwgImRyYXctcmVjdCI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB0cyA8PCAiZHJhdy1saW5lIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogdHMgPDwgImRyYXctbGluZXMt
Zm9yLXRleHQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1mb3ItZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjogdHMgPDwgImRyYXctY29u
dmV4LXBvbGdvbiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB0cyA8PCAi
ZHJhdy1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6
IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmctcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czogdHMgPDwgImRyYXctZm9jdXMtcmluZy1yZWN0cyI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qt
d2l0aC1jb2xvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwt
cm91bmRlZC1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogdHMgPDwgImZpbGwtcGF0aCI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB0cyA8PCAiZmlsbC1lbGxpcHNlIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0IjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogdHMgPDwgInN0cm9rZS1wYXRoIjsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogdHMgPDwgInN0cm9rZS1l
bGxpcHNlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OiB0cyA8PCAiY2xl
YXItcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6IHRzIDw8ICJiZWdpbi10cmFuc3BhcmVuY3ktbGF5ZXIiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogdHMgPDwgImVuZC10cmFuc3BhcmVuY3ktbGF5
ZXIiOyBicmVhazsKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQ
YXR0ZXJuOiB0cyA8PCAiYXBwbHktc3Ryb2tlLXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0cyA8PCAiYXBwbHktZmlsbC1wYXR0ZXJuIjsgYnJl
YWs7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB0
cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93IjsgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbSYgaXRlbSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRz
KTsKKyAgICB0cyA8PCBpdGVtLnR5cGUoKTsKKworICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8g
d2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCisg
ICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PFNhdmU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Um90YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNl
dFN0YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUNhcDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldE1pdGVyTGltaXQ+KGl0ZW0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxD
bGlwPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PENsaXBPdXRUb1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9seWdvbjoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Q2xpcENvbnZleFBvbHlnb24+KGl0ZW0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICB0cyA8PCBkb3duY2Fz
dDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyNpZiBV
U0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0
PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lPihpdGVtKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0Vs
bGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29u
dmV4UG9seWdvbjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0NvbnZleFBvbHlnb24+KGl0
ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1
c1JpbmdSZWN0cz4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdD4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICB0
cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUm91
bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0Pihp
dGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PFN0cm9rZUVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGVhclJlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9y
OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0aW9uYWwgZGF0YS4K
KyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOgorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9r
ZVBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyNlbmRpZgor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NmI3YjJmNDllOTQ1MDNhMzM3ODBiMDYzNTkyNzc1YzgyNzNiNWFmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMCwwICsxLDE0MzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXNwbGF5TGlzdEl0ZW1z
X2gKKyNkZWZpbmUgRGlzcGxheUxpc3RJdGVtc19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgor
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKKyNpZiBVU0UoQ0cpCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRTdHJlYW07CitzdHJ1Y3QgSW1hZ2VQYWludGlu
Z09wdGlvbnM7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2VudW0gY2xhc3MgSXRlbVR5
cGUgeworICAgIFNhdmUsCisgICAgUmVzdG9yZSwKKyAgICBUcmFuc2xhdGUsCisgICAgUm90YXRl
LAorICAgIFNjYWxlLAorICAgIENvbmNhdGVuYXRlQ1RNLAorICAgIFNldFN0YXRlLAorICAgIFNl
dExpbmVDYXAsCisgICAgU2V0TGluZURhc2gsCisgICAgU2V0TGluZUpvaW4sCisgICAgU2V0TWl0
ZXJMaW1pdCwKKyAgICBDbGVhclNoYWRvdywKKyAgICBDbGlwLAorICAgIENsaXBPdXQsCisgICAg
Q2xpcE91dFRvUGF0aCwKKyAgICBDbGlwUGF0aCwKKyAgICBDbGlwQ29udmV4UG9seWdvbiwKKyAg
ICBEcmF3R2x5cGhzLAorICAgIERyYXdJbWFnZSwKKyAgICBEcmF3VGlsZWRJbWFnZSwKKyAgICBE
cmF3VGlsZWRTY2FsZWRJbWFnZSwKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBEcmF3
TmF0aXZlSW1hZ2UsCisjZW5kaWYKKyAgICBEcmF3UGF0dGVybiwKKyAgICBEcmF3UmVjdCwKKyAg
ICBEcmF3TGluZSwKKyAgICBEcmF3TGluZXNGb3JUZXh0LAorICAgIERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIsCisgICAgRHJhd0VsbGlwc2UsCisgICAgRHJhd0NvbnZleFBvbHlnb24sCisgICAg
RHJhd1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1JlY3Rz
LAorICAgIEZpbGxSZWN0LAorICAgIEZpbGxSZWN0V2l0aENvbG9yLAorICAgIEZpbGxSZWN0V2l0
aEdyYWRpZW50LAorICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICBGaWxsUm91bmRlZFJlY3Qs
CisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisgICAgRmlsbFBhdGgsCisgICAgRmlsbEVs
bGlwc2UsCisgICAgU3Ryb2tlUmVjdCwKKyAgICBTdHJva2VQYXRoLAorICAgIFN0cm9rZUVsbGlw
c2UsCisgICAgQ2xlYXJSZWN0LAorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIsCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybiwg
Ly8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorICAgIEFwcGx5RmlsbFBh
dHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KKyNlbmRpZgor
ICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCit9OworCitjbGFzcyBJdGVtIDogcHVibGljIFJl
ZkNvdW50ZWQ8SXRlbT4geworcHVibGljOgorICAgIEl0ZW0oKSA9IGRlbGV0ZTsKKworICAgIEl0
ZW0oSXRlbVR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB+SXRlbSgpIHsgfQorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV90eXBlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCA9IDA7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEaXNwbGF5TGlzdEl0ZW0gPSB0cnVlOworCisgICAgdmlydHVhbCBib29sIGlzRHJh
d2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIC8vIEEgc3RhdGUg
aXRlbSBpcyBvbmUgcHJlc2VydmVkIGJ5IFNhdmUvUmVzdG9yZS4KKyAgICBib29sIGlzU3RhdGVJ
dGVtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1N0YXRlSXRlbVR5cGUobV90eXBl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1N0YXRlSXRlbVR5cGUoSXRlbVR5cGUgaXRl
bVR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7CisgICAgICAgIGNhc2Ug
SXRlbVR5cGU6OiBUcmFuc2xhdGU6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBSb3RhdGU6Cisg
ICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTY2FsZToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IENv
bmNhdGVuYXRlQ1RNOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0U3RhdGU6CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0
TGluZURhc2g6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lSm9pbjoKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6IFNldE1pdGVyTGltaXQ6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBD
bGVhclNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKKyAgICBX
VEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyNlbmRpZgorICAgIHN0YXRpYyBzaXpl
X3Qgc2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYpOworCitwcml2YXRlOgorICAgIEl0ZW1UeXBlIG1f
dHlwZTsKK307CisKK2NsYXNzIERyYXdpbmdJdGVtIDogcHVibGljIEl0ZW0geworcHVibGljOgor
ICAgIERyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCisgICAgICAgIDogSXRlbSh0eXBlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4dGVudChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9l
eHRlbnQgPSByOyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBleHRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2V4dGVudC52YWx1ZSgpOyB9CisKKyAgICBib29sIGV4dGVudEtub3duKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9CisKKyAgICAvLyBSZXR1cm4gYm91
bmRzIG9mIHRoaXMgZHJhd2luZyBvcGVyYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCisgICAg
Ly8gRG9lcyBub3QgaW5jbHVkZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFkb3cgZXRjIGluIHRo
ZSBzdGF0ZS4KKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gTnVsbG9wdDsgfQorCitwcml2YXRl
OgorICAgIHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGlu
YXRlcywgdGFraW5nIHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorfTsKKwor
Y2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNhdmU+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYXZlKTsKKyAg
ICB9CisKKyAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0IG9mIHRoZSBjb3JyZXNwb25k
aW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCisgICAgc2l6ZV90IHJlc3RvcmVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9CisgICAgdm9pZCBzZXRSZXN0b3Jl
SW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0gaW5kZXg7IH0KKworcHJpdmF0
ZToKKyAgICBTYXZlKCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTYXZlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCisgICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9OworfTsKKworY2xh
c3MgUmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlc3Rv
cmU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXN0b3Jl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdG9yZSgpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6UmVzdG9yZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgVHJhbnNsYXRlIDog
cHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRy
YW5zbGF0ZSh4LCB5KSk7CisgICAgfQorCisgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1f
eDsgfQorICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKworcHJpdmF0ZToKKyAg
ICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpU
cmFuc2xhdGUpCisgICAgICAgICwgbV94KHgpCisgICAgICAgICwgbV95KHkpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7Cit9OworCitjbGFzcyBSb3Rh
dGUgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0
ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOworICAgIH0KKworICAgIGZsb2F0IGFuZ2xlKCkg
Y29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQorCitwcml2YXRlOgorICAgIFJvdGF0ZShmbG9hdCBh
bmdsZSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCisgICAgICAgICwgbV9hbmds
ZShhbmdsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFk
aWFucy4KK307CisKK2NsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2FsZShzaXplKSk7CisgICAgfQorCisgICAgY29u
c3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0
ZToKKyAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6U2NhbGUpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZsb2F0U2l6ZSBtX3NpemU7Cit9OworCitjbGFzcyBDb25jYXRlbmF0ZUNUTSA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTShtYXRyaXgpKTsKKyAgICB9CisKKyAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9
CisKK3ByaXZhdGU6CisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Cit9OworCitjbGFzcyBTZXRT
dGF0ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldFN0YXRlPiBj
cmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykpOworICAgIH0KKyAgICAKKyAgICBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlOyB9CisKKyAgICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICB2b2lkIGFj
Y3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lk
IGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICBzdGF0aWMg
dm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKK3ByaXZhdGU6
CisgICAgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAgICAgICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRTdGF0ZSkKKyAgICAgICAgLCBtX3N0YXRlKHN0YXRlLCBmbGFncykKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZTsKK307
CisKK2NsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxTZXRMaW5lQ2FwPiBjcmVhdGUoTGluZUNhcCBsaW5lQ2FwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUNhcChsaW5lQ2FwKSk7CisgICAgfQorICAgIAor
ICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQorCitwcml2
YXRlOgorICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorICAgICAgICA6IEl0ZW0oSXRl
bVR5cGU6OlNldExpbmVDYXApCisgICAgICAgICwgbV9saW5lQ2FwKGxpbmVDYXApCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIExpbmVDYXAgbV9saW5lQ2FwOworfTsKKworY2xhc3MgU2V0TGluZURh
c2ggOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4g
Y3JlYXRlKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZURhc2goZGFzaEFycmF5LCBk
YXNoT2Zmc2V0KSk7CisgICAgfQorCisgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBj
b25zdCB7IHJldHVybiBtX2Rhc2hBcnJheTsgfQorICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX2Rhc2hPZmZzZXQ7IH0KKworcHJpdmF0ZToKKyAgICBTZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpTZXRMaW5lRGFzaCkKKyAgICAgICAgLCBtX2Rhc2hBcnJheShkYXNoQXJy
YXkpCisgICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKKyAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7Cit9
OworCitjbGFzcyBTZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihsaW5lSm9pbikpOworICAgIH0K
KyAgICAKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47
IH0KKworcHJpdmF0ZToKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKKyAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKKyAgICAgICAgLCBtX2xpbmVKb2luKGxp
bmVKb2luKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luOworfTsK
KworY2xhc3MgU2V0TWl0ZXJMaW1pdCA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGltaXQobGltaXQpKTsKKyAgICB9CisKKyAg
ICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CisKK3By
aXZhdGU6CisgICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQorICAgICAgICA6IEl0
ZW0oSXRlbVR5cGU6OlNldE1pdGVyTGltaXQpCisgICAgICAgICwgbV9taXRlckxpbWl0KG1pdGVy
TGltaXQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKK307CisK
K2NsYXNzIENsZWFyU2hhZG93IDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDbGVhclNoYWRvdyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsZWFyU2hhZG93KCkK
KyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
fTsKKworLy8gRklYTUU6IHRyZWF0IGFzIERyYXdpbmdJdGVtPworY2xhc3MgQ2xpcCA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXA+IGNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwKHJl
Y3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQorCitwcml2YXRlOgorICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAg
ICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXApCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBDbGlwT3V0IDog
cHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IENsaXBPdXQocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dCkKKyAgICAgICAgLCBtX3Jl
Y3QocmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisK
K2NsYXNzIENsaXBPdXRUb1BhdGggOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOworICAgIH0KKwor
ICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworcHJpdmF0
ZToKKyAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBDbGlwUGF0aCA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXBQYXRoPiBjcmVhdGUoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOworICAgIH0KKworICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICBXaW5kUnVsZSB3aW5k
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KKworcHJpdmF0ZToKKyAgICBDbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDbGlwUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBt
X3dpbmRSdWxlKHdpbmRSdWxlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBQYXRoIG1fcGF0aDsK
KyAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOworfTsKKworY2xhc3MgQ2xpcENvbnZleFBvbHlnb24g
OiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGlwQ29udmV4UG9seWdv
bj4gY3JlYXRlKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRz
LCBib29sIGFudGlhbGlhc2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xpcENvbnZleFBvbHlnb24obnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFzZWQpKTsK
KyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBvaW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnRzOyB9CisgICAgYm9vbCBhbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBt
X2FudGlhbGlhczsgfQorCitwcml2YXRlOgorICAgIENsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1fcG9pbnRzOworICAgIGJvb2wgbV9hbnRpYWxpYXM7
Cit9OworCitjbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHNt
b290aGluZ01vZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRCbG9j
a0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0
aW9uID0gYmxvY2tMb2NhdGlvbjsgfQorCisgICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KKworICAgIEZsb2F0UG9pbnQgYW5j
aG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9y
OyB9CisKKyAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYgZ2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKworICAgIHZv
aWQgY29tcHV0ZUJvdW5kcygpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0OworCisgICAgUmVmPEZv
bnQ+IG1fZm9udDsKKyAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBoczsK
KyAgICBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7CisgICAgRmxv
YXRSZWN0IG1fYm91bmRzOworICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAgIEZs
b2F0U2l6ZSBtX2xvY2FsQW5jaG9yOworICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5n
TW9kZTsKK307CisKK2NsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgfQorCisgICAgY29uc3QgSW1hZ2UmIGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIEZsb2F0UmVjdCBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworcHJpdmF0ZToKKyAgICBEcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBtdXRhYmxl
IFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0
aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11
dGFibGUuCisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRSZWN0IG1fc291
cmNlOworICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7Cit9
OworCitjbGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICB9
CisKKyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9CisgICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQor
ICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247
IH0KKworICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7
IH0KKyAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQor
Citwcml2YXRlOgorICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3
aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBz
aG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgorICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9u
OworICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7CisgICAgRmxvYXRTaXplIG1fdGlsZVNpemU7Cisg
ICAgRmxvYXRTaXplIG1fc3BhY2luZzsKKyAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdl
UGFpbnRpbmdPcHRpb25zOworfTsKKworY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkU2NhbGVk
SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rv
ciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGlu
Z09wdGlvbnMpKTsKKyAgICB9CisKKyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgorICAgIERyYXdUaWxlZFNjYWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUg
aFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CisKKyAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcg
aW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3Vs
ZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Cisg
ICAgRmxvYXRSZWN0IG1fc291cmNlOworICAgIEZsb2F0U2l6ZSBtX3RpbGVTY2FsZUZhY3RvcjsK
KyAgICBJbWFnZTo6VGlsZVJ1bGUgbV9oUnVsZTsKKyAgICBJbWFnZTo6VGlsZVJ1bGUgbV92UnVs
ZTsKKyAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworfTsK
KworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorY2xhc3MgRHJhd05hdGl2ZUltYWdlIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdOYXRpdmVJbWFn
ZT4gY3JlYXRlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VQdHIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQorICAgIEZsb2F0UmVjdCBkZXN0aW5h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworcHJpdmF0ZToKKyAgICBE
cmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNlbGZT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pOworCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworI2lm
IFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9pbWFnZVB0cjsKKyNlbmRpZgor
ICAgIEZsb2F0U2l6ZSBtX2ltYWdlU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsK
KyAgICBGbG9hdFJlY3QgbV9zcmNSZWN0OworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Cisg
ICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOworICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmllbnRh
dGlvbjsKK307CisjZW5kaWYKKworY2xhc3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3UGF0dGVybihpbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSkpOworICAgIH0KKworICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Bh
dHRlcm5UcmFuc2Zvcm07IH0KKyAgICBGbG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVSZWN0OyB9CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQorICAgIEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBt
X3BoYXNlOyB9CisgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNp
bmc7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAg
bXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4g
Y2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0
byBiZSBtdXRhYmxlLgorICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07Cisg
ICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Cisg
ICAgRmxvYXRQb2ludCBtX3BoYXNlOworICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7CisgICAgQ29t
cG9zaXRlT3BlcmF0b3IgbV9vcDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCisv
LyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5
ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCitjbGFzcyBCZWdpblRyYW5zcGFyZW5j
eUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7
CisgICAgfQorCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsg
fQorCitwcml2YXRlOgorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
KyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikK
KyAgICAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxv
YXQgbV9vcGFjaXR5OworfTsKKworY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RW5kVHJhbnNwYXJlbmN5TGF5
ZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbmRUcmFu
c3BhcmVuY3lMYXllcik7CisgICAgfQorCitwcml2YXRlOgorICAgIEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKK2NsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdSZWN0PiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKKyAg
ICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAg
IGZsb2F0IGJvcmRlclRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNz
OyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdS
ZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fYm9yZGVyVGhpY2tuZXNz
KGJvcmRlclRoaWNrbmVzcykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxv
YXQgbV9ib3JkZXJUaGlja25lc3M7Cit9OworCitjbGFzcyBEcmF3TGluZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZT4gY3JlYXRlKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKKyAg
ICB9CisKKyAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQxOyB9
CisgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MjsgfQorCitw
cml2YXRlOgorICAgIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGlu
ZSkKKyAgICAgICAgLCBtX3BvaW50MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQy
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxv
YXRQb2ludCBtX3BvaW50MTsKKyAgICBGbG9hdFBvaW50IG1fcG9pbnQyOworfTsKKworY2xhc3Mg
RHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChi
bG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMs
IHN0cm9rZVdpZHRoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2Nh
dGlvbjsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrTG9jYXRpb247IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9y
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQorICAgIEZsb2F0UG9pbnQgcG9pbnQo
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9CisgICAg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoczsgfQorICAg
IGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KKyAgICBib29s
IGRvdWJsZUxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQorCitwcml2YXRl
OgorICAgIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwg
Y29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRoKQorICAgICAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0KQorICAgICAgICAsIG1f
YmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQorICAgICAgICAsIG1fbG9jYWxBbmNob3IobG9j
YWxBbmNob3IpCisgICAgICAgICwgbV93aWR0aHMod2lkdGhzKQorICAgICAgICAsIG1fc3Ryb2tl
V2lkdGgoc3Ryb2tlV2lkdGgpCisgICAgICAgICwgbV9wcmludGluZyhwcmludGluZykKKyAgICAg
ICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJsZUxpbmVzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsK
KyAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKKyAgICBEYXNoQXJyYXkgbV93aWR0aHM7Cisg
ICAgZmxvYXQgbV9zdHJva2VXaWR0aDsKKyAgICBib29sIG1fcHJpbnRpbmc7CisgICAgYm9vbCBt
X2RvdWJsZUxpbmVzOworfTsKKworY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRo
LCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihw
b2ludCwgd2lkdGgsIHN0eWxlKSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KKyAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcikKKyAgICAgICAgLCBtX3BvaW50KHBvaW50KQor
ICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRQb2lu
dCBtX3BvaW50OworICAgIGZsb2F0IG1fd2lkdGg7CisgICAgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOworfTsKKworY2xhc3MgRHJhd0VsbGlwc2UgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRS
ZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIERyYXdDb252ZXhQb2x5Z29uIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdDb252ZXhQb2x5Z29uPiBjcmVh
dGUoc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wg
YW50aWFsaWFzZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Q29u
dmV4UG9seWdvbihudW1iZXJPZlBvaW50cywgcG9pbnRzLCBhbnRpYWxpYXNlZCkpOworICAgIH0K
KworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgcG9pbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludHM7IH0KKyAgICBib29sIGFudGlhbGlhc2VkKCkgY29uc3QgeyByZXR1cm4gbV9hbnRp
YWxpYXNlZDsgfQorCitwcml2YXRlOgorICAgIERyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1i
ZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBtX3BvaW50
czsKKyAgICBib29sIG1fYW50aWFsaWFzZWQ7Cit9OworCitjbGFzcyBEcmF3UGF0aCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3UGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3UGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQorICAgICAgICAs
IG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorCisgICAgUGF0aCBtX3Bh
dGg7Cit9OworCitjbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0
IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0
aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV93aWR0aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRl
OgorICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAg
LCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBt
X2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBQYXRoIG1fcGF0aDsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9vZmZz
ZXQ7CisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNS
aW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4gcmVjdHMoKSBjb25zdCB7
IHJldHVybiBtX3JlY3RzOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIENv
bG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzKQorICAgICAgICAsIG1fcmVjdHMocmVjdHMpCisg
ICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
ICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgVmVjdG9yPEludFJlY3Q+IG1fcmVjdHM7CisgICAgaW50IG1fd2lk
dGg7CisgICAgaW50IG1fb2Zmc2V0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBG
aWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxG
aWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIEZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RmlsbFJlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworfTsKKworLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5oZXJpdCBmcm9tIEZpbGxS
ZWN0IHByb3Blci4KK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aENvbG9yPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcikpOworICAg
IH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAg
Q29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6CisgICAg
RmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yKQor
ICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisK
KyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBG
aWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKKyAgICB9CisKKyAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgor
ICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2dyYWRpZW50KGdy
YWRpZW50KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBtdXRhYmxlIFJlZjxH
cmFkaWVudD4gbV9ncmFkaWVudDsgLy8gRklYTUU6IE1ha2UgdGhpcyBub3QgbXV0YWJsZQorfTsK
KworY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOworICAgIH0KKwor
ICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgQ29sb3Ig
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgQmxlbmRNb2Rl
IGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CisKK3ByaXZhdGU6Cisg
ICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAg
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0KQorICAgICAgICAs
IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9vcChv
cCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9v
cDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCitjbGFzcyBGaWxsUm91bmRlZFJl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJv
dW5kZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9k
ZTsgfQorCitwcml2YXRlOgorICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAg
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKKyAgICAgICAgLCBt
X3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICAgICAsIG1fYmxlbmRN
b2RlKGJsZW5kTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisKKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVj
dDsKKyAgICBDb2xvciBtX2NvbG9yOworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKK307CisK
K2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
KTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQorICAgICAgICAsIG1fcmVjdChyZWN0
KQorICAgICAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBGbG9h
dFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OworICAgIENvbG9yIG1fY29sb3I7Cit9Owor
CitjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29u
c3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAg
IEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkZpbGxQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCk7IH0KKworICAgIFBhdGggbV9wYXRoOworfTsKKworY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworfTsKKworY2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOworICAgIH0KKworICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgZmxvYXQgbGluZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQor
ICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxvYXQg
bV9saW5lV2lkdGg7Cit9OworCitjbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRo
JiBwYXRoLCBjb25zdCBGbG9hdFBvaW50JiBtX2Jsb2NrTG9jYXRpb24pCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VQYXRoKHBhdGgsIG1fYmxvY2tMb2NhdGlvbikp
OworICAgIH0KKworICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KKyAgICBj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xv
Y2F0aW9uOyB9CisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQorCitwcml2YXRlOgorICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
U3Ryb2tlUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX2Jsb2NrTG9j
YXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIG11dGFibGUgUGF0aCBtX3BhdGg7CisgICAgRmxvYXRQb2ludCBtX2Js
b2NrTG9jYXRpb247Cit9OworCitjbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZUVsbGlwc2U+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
dHJva2VFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNz
IENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxDbGVhclJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkpOworICAgIH0KKworICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAg
Q2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6Q2xlYXJSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAg
RmxvYXRSZWN0IG1fcmVjdDsKK307CisKKyNpZiBVU0UoQ0cpCitjbGFzcyBBcHBseVN0cm9rZVBh
dHRlcm4gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBcHBseVN0cm9r
ZVBhdHRlcm4+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBB
cHBseVN0cm9rZVBhdHRlcm4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcHBseVN0cm9rZVBh
dHRlcm4oKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybikKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisgICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKyNlbmRpZgor
CitjbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0IHNjYWxl
RmFjdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOworICAgIH0KKworICAgIGZsb2F0IHNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQorCitwcml2YXRlOgorICAgIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKKyAgICAgICAgLCBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOwor
fTsKKworLy8gRklYTUU6IHRoaXMgbmVlZHMgdG8gbW92ZS4KK3ZvaWQgYWRkQ29udmV4UG9seWdv
blRvUGF0aChQYXRoJiwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCopOworCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJdGVtJik7CisKK30gLy8g
bmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKworI2RlZmlu
ZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVU
eXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2Jq
ZWN0LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlz
RHJhd2luZ0l0ZW0oKSkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5
cGVOYW1lOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShUcmFuc2xhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUm90YXRlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNj
YWxlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVuYXRl
Q1RNKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVDYXApCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZURhc2gpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUpvaW4pCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1pdCkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQ2xpcE91dFRvUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShDbGlwUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShDbGlwQ29udmV4UG9seWdvbikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3R2x5cGhzKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3VGlsZWRJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3VGlsZWRTY2FsZWRJbWFnZSkKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCisjZW5kaWYK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0dGVybikKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZSkKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlwc2UpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0NvbnZleFBvbHlnb24pCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1JlY3RzKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9yKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3NpdGVk
UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91bmRl
ZFJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RmlsbFBhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVs
bGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVj
dCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5
TGF5ZXIpCisjaWYgVVNFKENHKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQorI2VuZGlmCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKKworI2VuZGlmIC8vIERpc3Bs
YXlMaXN0SXRlbXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ0ZTFkN2I3ZWVlY2Y5MzIxYjIxNzQxZjVjYzlmM2VlNTI1NTM1MjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTAsMCArMSw0ODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKKworUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGJhc2VDVE0pCisgICAgOiBtX2dyYXBoaWNz
Q29udGV4dChjb250ZXh0KQorICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKK3sKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdp
dGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKKworICAgIC8vIEZJWE1FOiBob29rIHVwIHJlY29y
ZGVyIGluIHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgLy8gbV9ncmFwaGljc0NvbnRleHQuc2V0
RGlzcGxheUxpc3RSZWNvcmRlcih0aGlzKTsKKyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKENvbnRl
eHRTdGF0ZShiYXNlQ1RNLCBpbml0aWFsQ2xpcCkpOworfQorCitSZWNvcmRlcjo6flJlY29yZGVy
KCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBm
aXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgorICAgIExPRyhEaXNw
bGF5TGlzdHMsICJSZWNvcmRlZCBkaXNwbGF5IGxpc3Q6XG4lcyIsIG1fZGlzcGxheUxpc3QuZGVz
Y3JpcHRpb24oKS5kYXRhKCkpOworfQorCit2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShj
b25zdCBJdGVtJiBpdGVtKQoreworICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKSB8fCBpdGVt
LnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuIHx8IGl0ZW0udHlwZSgpID09
IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJv
bUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgp
Lmxhc3REcmF3aW5nU3RhdGUpOworICAgICAgICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsK
KyAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJl
LWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0
YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOworICAgICAgICAgICAg
bV9kaXNwbGF5TGlzdC5hcHBlbmQoU2V0U3RhdGU6OmNyZWF0ZShzdGF0ZUNoYW5nZXMubV9zdGF0
ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKKyAgICAgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2No
YW5nZUZsYWdzID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3Rh
dGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50U3Rh
dGUoKS53YXNVc2VkRm9yRHJhd2luZyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFJlY29yZGVy
Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQoreworICAgIGN1cnJlbnRTdGF0
ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6Y2xlYXJTaGFkb3coKQoreworICAgIGFwcGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0
ZSgpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit7
CisgICAgYXBwZW5kSXRlbShTZXRMaW5lQ2FwOjpjcmVhdGUobGluZUNhcCkpOworfQorCit2b2lk
IFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQg
ZGFzaE9mZnNldCkKK3sKKyAgICBhcHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVhdGUoZGFzaEFy
cmF5LCBkYXNoT2Zmc2V0KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVK
b2luIGxpbmVKb2luKQoreworICAgIGFwcGVuZEl0ZW0oU2V0TGluZUpvaW46OmNyZWF0ZShsaW5l
Sm9pbikpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGlt
aXQpCit7CisgICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkp
OworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
Cit7CisgICAgRmxvYXRQb2ludCBibG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8gbV9ibG9ja0xv
Y2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgIEZsb2F0U2l6ZSBsb2NhbEFuY2hvciA9IHN0YXJ0
UG9pbnQgLSBibG9ja0xvY2F0aW9uOworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBo
cywgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwor
fQorCit2b2lkIFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCit7CisgICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRJbWFn
ZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywg
aW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsK
K30KKworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2
ZUltYWdlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2Fz
dDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZVB0
ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRp
b24pKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKyNlbmRpZgorCit2b2lk
IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sK
KyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykp
KTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpk
cmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0
dGVybjo6Y3JlYXRlKGltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wLCBkZXN0UmVjdCwgYmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQoreworICAgIGFwcGVuZEl0ZW0o
U2F2ZTo6Y3JlYXRlKCkpOworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxh
c3QoKS5jbG9uZUZvclNhdmUobV9kaXNwbGF5TGlzdC5zaXplKCkgLSAxKSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAgIGlmICghbV9zdGF0ZVN0YWNrLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgc3RhdGVVc2VkRm9yRHJhd2luZyA9IGN1cnJl
bnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nOworICAgIHNpemVfdCBzYXZlSW5kZXggPSBjdXJy
ZW50U3RhdGUoKS5zYXZlSXRlbUluZGV4OworICAgIAorICAgIG1fc3RhdGVTdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgLy8gSGF2ZSB0byBhdm9pZCBlbGlkaW5nIG5lc3RlZCBTYXZlL1Jlc3RvcmUg
d2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29udGFpbnMgZHJhd2luZyBpdGVtcy4KKyAgICBjdXJy
ZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyB8PSBzdGF0ZVVzZWRGb3JEcmF3aW5nOworCisg
ICAgaWYgKCFzdGF0ZVVzZWRGb3JEcmF3aW5nICYmIHNhdmVJbmRleCkgeworICAgICAgICAvLyBU
aGlzIFNhdmUvUmVzdG9yZSBkaWRuJ3QgY29udGFpbiBhbnkgZHJhd2luZyBpdGVtcy4gUm9sbCBi
YWNrIHRvIGp1c3QgYmVmb3JlIHRoZSBsYXN0IHNhdmUuCisgICAgICAgIG1fZGlzcGxheUxpc3Qu
cmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2F2ZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGFwcGVuZEl0ZW0oUmVzdG9yZTo6Y3JlYXRlKCkpOworICAgIAorICAgIGlmIChzYXZl
SW5kZXgpIHsKKyAgICAgICAgU2F2ZSYgc2F2ZUl0ZW0gPSBkb3duY2FzdDxTYXZlPihtX2Rpc3Bs
YXlMaXN0Lml0ZW1BdChzYXZlSW5kZXgpKTsKKyAgICAgICAgc2F2ZUl0ZW0uc2V0UmVzdG9yZUlu
ZGV4KG1fZGlzcGxheUxpc3Quc2l6ZSgpIC0gMSk7CisgICAgfQorfQorCit2b2lkIFJlY29yZGVy
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS50cmFu
c2xhdGUoeCwgeSk7CisgICAgYXBwZW5kSXRlbShUcmFuc2xhdGU6OmNyZWF0ZSh4LCB5KSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3sKKyAgICBj
dXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIGFwcGVuZEl0ZW0oUm90
YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlhbnMpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUp
OworICAgIGFwcGVuZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBj
dXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICBhcHBlbmRJdGVtKENvbmNh
dGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBhcHBl
bmRJdGVtKEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKSk7CisgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit7Cisg
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit7CisgICAgRmxvYXRQ
b2ludCBibG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8gbV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQ
b2ludCgpOworICAgIEZsb2F0U2l6ZSBsb2NhbEFuY2hvciA9IHBvaW50IC0gYmxvY2tMb2NhdGlv
bjsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hv
ciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcykpKTsKKyAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwg
R3JhcGhpY3NDb250ZXh0OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwgd2lkdGgsIHN0eWxlKSkpOwor
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdFbGxpcHNlOjpjcmVhdGUo
cmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29y
ZGVyOjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0
UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdDb252ZXhQb2x5Z29u
OjpjcmVhdGUobnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFzZWQpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3
aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmlu
Z1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIHVwZGF0
ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0
PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0
V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChu
ZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3Jl
YXRlKHJlY3QsIGdyYWRpZW50KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
K3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRN
b2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUm91bmRlZFJlY3Q6
OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6
Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKKyAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVJlY3Q6
OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQorewor
ICAgIEZsb2F0UG9pbnQgYmxvY2tMb2NhdGlvbiA9IG1fY2FjaGluZyA/IG1fYmxvY2tMb2NhdGlv
biA6IEZsb2F0UG9pbnQoKTsKKyAgICBQYXRoIHRyYW5zbGF0ZWQgPSBwYXRoOworICAgIHRyYW5z
bGF0ZWQudHJhbnNsYXRlKC1GbG9hdFNpemUoYmxvY2tMb2NhdGlvbi54KCksIGJsb2NrTG9jYXRp
b24ueSgpKSk7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRl
bT4oYXBwZW5kSXRlbShTdHJva2VQYXRoOjpjcmVhdGUocGF0aCwgYmxvY2tMb2NhdGlvbikpKTsK
KyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZUVsbGlwc2U6OmNy
ZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShDbGVhclJl
Y3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisK
KyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQoreworICAg
IGFwcGVuZEl0ZW0oQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQoreworICAgIGFwcGVuZEl0ZW0oQXBwbHlGaWxsUGF0
dGVybjo6Y3JlYXRlKCkpOworfQorI2VuZGlmCisKK3ZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJz
ZWN0KHJlY3QpOworICAgIGFwcGVuZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKK30KKwordm9p
ZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5k
SXRlbShDbGlwT3V0OjpjcmVhdGUocmVjdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgYXBwZW5kSXRlbShDbGlwT3V0VG9QYXRoOjpjcmVh
dGUocGF0aCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmlu
dGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7CisgICAgYXBwZW5kSXRlbShDbGlwUGF0
aDo6Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBDb252
ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9v
bCBhbnRpYWxpYXMpCit7CisgICAgUGF0aCBwb2x5Z29uUGF0aDsKKyAgICBhZGRDb252ZXhQb2x5
Z29uVG9QYXRoKHBvbHlnb25QYXRoLCBudW1Qb2ludHMsIHBvaW50cyk7CisgICAgY3VycmVudFN0
YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocG9seWdvblBhdGguZmFzdEJvdW5kaW5nUmVjdCgp
KTsKKworICAgIGFwcGVuZEl0ZW0oQ2xpcENvbnZleFBvbHlnb246OmNyZWF0ZShudW1Qb2ludHMs
IHBvaW50cywgYW50aWFsaWFzKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgLy8gRklYTUU6IHRoaXMg
Y2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2Fj
aGVkIGV4dGVudHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBv
bj8KKyAgICBhcHBlbmRJdGVtKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZpY2VT
Y2FsZUZhY3RvcikpOworfQorCitJdGVtJiBSZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRlbT4m
JiBpdGVtKQoreworICAgIHdpbGxBcHBlbmRJdGVtKGl0ZW0uZ2V0KCkpOworICAgIHJldHVybiBt
X2Rpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZWNvcmRlcjo6
dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYgaXRlbSkgY29uc3QKK3sKKyAgICBpZiAoT3B0
aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhtX2dyYXBoaWNzQ29udGV4
dCkpCisgICAgICAgIGl0ZW0uc2V0RXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcyhyZWN0LnZh
bHVlKCkpKTsKK30KKworLy8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQorc3RhdGljIGlu
bGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQoreworICAg
IC8vIEJsdXJyaW5nIHVzZXMgYSBHYXVzc2lhbiBmdW5jdGlvbiB3aG9zZSBzdGQuIGRldmlhdGlv
biBpcyBtX3JhZGl1cy8yLCBhbmQgd2hpY2ggaW4gdGhlb3J5CisgICAgLy8gZXh0ZW5kcyB0byBp
bmZpbml0eS4gSW4gOC1iaXQgY29udGV4dHMsIGhvd2V2ZXIsIHJvdW5kaW5nIGNhdXNlcyB0aGUg
ZWZmZWN0IHRvIGJlY29tZQorICAgIC8vIHVuZGV0ZWN0YWJsZSBhdCBhcm91bmQgMS40eCB0aGUg
cmFkaXVzLgorICAgIGNvbnN0IGZsb2F0IHJhZGl1c0V4dGVudE11bHRpcGxpZXIgPSAxLjQ7Cisg
ICAgcmV0dXJuIGNlaWxmKGJsdXJSYWRpdXMgKiByYWRpdXNFeHRlbnRNdWx0aXBsaWVyKTsKK30K
KworRmxvYXRSZWN0IFJlY29yZGVyOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OworICAgIGNv
bnN0IENvbnRleHRTdGF0ZSYgc3RhdGUgPSBjdXJyZW50U3RhdGUoKTsKKworICAgIEZsb2F0U2l6
ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93UmFkaXVzOworICAgIENvbG9yIHNoYWRv
d0NvbG9yOworICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgeworICAgICAgICBGbG9hdFJlY3Qgc2hhZG93
RXh0ZW50PSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7
CisgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRv
d1JhZGl1cykpOworICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKKyAgICB9Cisg
ICAgCisgICAgRmxvYXRSZWN0IGNsaXBwZWRFeHRlbnQgPSBpbnRlcnNlY3Rpb24oc3RhdGUuY2xp
cEJvdW5kcywgYm91bmRzKTsKKyAgICByZXR1cm4gc3RhdGUuY3RtLm1hcFJlY3QoY2xpcHBlZEV4
dGVudCk7Cit9CisKK2NvbnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJy
ZW50U3RhdGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKKyAg
ICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKK30KKworUmVjb3JkZXI6OkNvbnRleHRTdGF0
ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5z
aXplKCkpOworICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworfQorCitjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50
U3RhdGUoKS5jdG07Cit9CisKK2NvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMo
KSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOworfQorCit2
b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQor
eworICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CisgICAgY2xpcEJvdW5kcy5tb3ZlKC14LCAteSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5S
YWRpYW5zKQoreworICAgIGRvdWJsZSBhbmdsZUluRGVncmVlcyA9IHJhZDJkZWcoc3RhdGljX2Nh
c3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykpOworICAgIGN0bS5yb3RhdGUoYW5nbGVJbkRlZ3Jl
ZXMpOworICAgIAorICAgIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbjsKKyAgICByb3RhdGlvbi5y
b3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworCisgICAgaWYgKE9wdGlvbmFsPEFmZmluZVRyYW5zZm9y
bT4gaW52ZXJzZSA9IHJvdGF0aW9uLmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJvdW5kcyA9IGlu
dmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit2b2lkIFJlY29yZGVyOjpD
b250ZXh0U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBjdG0uc2Nh
bGUoc2l6ZSk7CisgICAgY2xpcEJvdW5kcy5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6
ZS5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQoreworICAgIGN0bSAqPSBtYXRyaXg7CisK
KyAgICBpZiAoT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gbWF0cml4LmludmVy
c2UoKSkKKyAgICAgICAgY2xpcEJvdW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBC
b3VuZHMpOworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjRjMjY0ODc1NzQzMzM0YjkzOTFiYzIwMTcyNWE2MzI0YjcxYmJhZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXNwbGF5TGlzdFJlY29yZGVyX2gKKyNk
ZWZpbmUgRGlzcGxheUxpc3RSZWNvcmRlcl9oCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIiAvLyBGb3IgSW50ZXJwb2xhdGlvblF1YWxpdHku
CisjaW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KKyNpbmNsdWRlICJU
ZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR2x5
cGhCdWZmZXI7CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRm9udDsKK2NsYXNzIEltYWdlOwor
CitzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CitzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlv
bnM7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdJdGVtOworCitj
bGFzcyBSZWNvcmRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOworcHVi
bGljOgorICAgIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3Qg
RmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgflJl
Y29yZGVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHZvaWQg
Y2xlYXJTaGFkb3coKTsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKKyAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOworICAgIHZv
aWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7
CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYsIEJsZW5kTW9kZSk7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJik7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKTsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0
aCYpOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIGFw
cGx5U3Ryb2tlUGF0dGVybigpOworICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOworI2VuZGlm
CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSk7CisKKyAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyNpZiBVU0Uo
Q0cpIHx8IFVTRShDQUlSTykKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1h
Z2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSwgSW1hZ2VPcmllbnRhdGlvbik7CisjZW5kaWYKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVP
cGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
Tm9ybWFsKTsKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKTsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZvaWQgZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9p
bnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXNlZCk7CisgICAgdm9pZCBkcmF3
UGF0aChjb25zdCBQYXRoJik7CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYs
IGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEludFJlY3Q+JiwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpOworCisgICAgdm9pZCBzYXZlKCk7CisgICAgdm9pZCByZXN0b3JlKCk7CisKKyAg
ICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIHJvdGF0ZShmbG9h
dCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAg
ICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKworICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICB2b2lkIGVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRo
Jik7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgIHZvaWQg
Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJv
b2wgYW50aWFsaWFzKTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpOworCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0LnNp
emUoKTsgfQorCitwcml2YXRlOgorICAgIEl0ZW0mIGFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYpOwor
ICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpOworCisgICAgRmxvYXRSZWN0IGV4
dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OworICAgIGNvbnN0IEZsb2F0UmVjdCYgY2xpcEJvdW5k
cygpIGNvbnN0OworCisgICAgc3RydWN0IENvbnRleHRTdGF0ZSB7CisgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBjdG07CisgICAgICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzOworICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGUgbGFzdERyYXdpbmdTdGF0ZTsKKyAgICAgICAgYm9vbCB3YXNVc2VkRm9yRHJhd2lu
ZyB7IGZhbHNlIH07CisgICAgICAgIHNpemVfdCBzYXZlSXRlbUluZGV4IHsgMCB9OworICAgICAg
ICAKKyAgICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCisgICAgICAgICAgICA6IGN0bSh0cmFuc2Zvcm0pCisg
ICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKHNpemVfdCBzYXZlSW5kZXgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbnRleHRTdGF0ZSBzdGF0ZShjdG0sIGNs
aXBCb3VuZHMpOworICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsK
KyAgICAgICAgICAgIHN0YXRlLmxhc3REcmF3aW5nU3RhdGUgPSBsYXN0RHJhd2luZ1N0YXRlOwor
ICAgICAgICAgICAgc3RhdGUuc2F2ZUl0ZW1JbmRleCA9IHNhdmVJbmRleDsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpOworICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7
CisgICAgICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIH07CisgICAgCisgICAgY29uc3Qg
Q29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKSBjb25zdDsKKyAgICBDb250ZXh0U3RhdGUmIGN1
cnJlbnRTdGF0ZSgpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsK
KyAgICBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKKworICAgIGJvb2wgbV9jYWNoaW5nIHsg
ZmFsc2UgfTsKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICAKKyAgICBWZWN0
b3I8Q29udGV4dFN0YXRlLCAzMj4gbV9zdGF0ZVN0YWNrOworfTsKKworfQorfQorCisjZW5kaWYg
Ly8gRGlzcGxheUxpc3RSZWNvcmRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTAzODc2ODYxNzgyYTVkYTdlNzA0NThjMGVjZTgwMzg2NTU5
Y2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCisKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3Qgewor
CitSZXBsYXllcjo6UmVwbGF5ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QpCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQor
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1JlcGxheWVyOjp+UmVwbGF5ZXIoKQor
eworfQorCit2b2lkIFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVw
bGF5aW5nIHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKKyAgICBVTlVTRURfUEFSQU0oaW5p
dGlhbENsaXApOworCisgICAgc2l6ZV90IG51bUl0ZW1zID0gbV9kaXNwbGF5TGlzdC5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAgIGF1
dG8mIGl0ZW0gPSBtX2Rpc3BsYXlMaXN0Lmxpc3QoKVtpXS5nZXQoKTsKKyAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJkcmF3aW5nICAiIDw8IGkgPDwgIiAi
IDw8IGl0ZW0pOworICAgICAgICBpdGVtLmFwcGx5KG1fY29udGV4dCk7CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFhYmJhZWYwMTI4YzQx
MzQxY2NhZjk1ZDk4NDM3MmFjZTNmZDJjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERpc3BsYXlMaXN0UmVwbGF5ZXJfaAorI2RlZmluZSBEaXNwbGF5TGlz
dFJlcGxheWVyX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIEZsb2F0UmVjdDsKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDsKKworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3Mg
RGlzcGxheUxpc3Q7CisKK2NsYXNzIFJlcGxheWVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShSZXBsYXllcik7CitwdWJsaWM6CisgICAgUmVwbGF5ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRGlzcGxheUxpc3QmKTsKKyAgICB+UmVwbGF5ZXIoKTsKKworICAgIHZvaWQgcmVwbGF5KGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXApOworCitwcml2YXRlOgorICAgIGNvbnN0IERpc3Bs
YXlMaXN0JiBtX2Rpc3BsYXlMaXN0OworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0Owor
fTsKKworfQorfQorCisjZW5kaWYgLy8gRGlzcGxheUxpc3RSZXBsYXllcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268443</attachid>
            <date>2016-01-06 21:03:42 -0800</date>
            <delta_ts>2016-01-07 11:49:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152816-20160106210309.patch</filename>
            <type>text/plain</type>
            <size>147199</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGU4NWRmYTQ4MjAzZGE3
YzYyYjYyN2YxMGVkYWMyZDEyZmFjYjFmMC4uZDQzMmIzYWEwZDMzMmZmZDE4NzVhM2U1MjgzOTBj
MWY4NmE1Y2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDE2LTAxLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEluaXRpYWwgaW1w
bGVtZW50YXRpb24gZmlsZXMgZm9yIGRpc3BsYXktbGlzdCByZWNvcmRpbmcgYW5kIHBsYXliYWNr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4MTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZmls
ZXMgZm9yOgorICAgICAgICAtIERpc3BsYXlMaXN0LCBhIGNsYXNzIHRoYXQgaG9sZHMgYSB2ZWN0
b3Igb2YgZGlzcGxheSBpdGVtcywgYW5kIGluIGZ1dHVyZSB3aWxsIGhvbGQgbWV0YWRhdGEKKyAg
ICAgICAgICBvbiB0aGUgbGlzdCBmb3Igb3B0aW1pemF0aW9ucyBldGMuCisgICAgICAgIC0gRGlz
cGxheUxpc3Q6OlJlY29yZGVyLCB0aGUgb3V0d2FyZC1mYWNpbmcgcmVjb3JkaW5nIEFQSSB3aGlj
aCBHcmFwaGljc0NvbnRleHQgd2lsbAorICAgICAgICAgIGNhbGwgaW50by4KKyAgICAgICAgLSBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIsIHdoaWNoIHBsYXlzIGJhY2sgYSBEaXNwbGF5TGlzdCwgcG9z
c2libHkgYXBwbHlpbmcgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgLSBWYXJpb3VzIERpc3BsYXlM
aXN0OjpJdGVtcywgb25lIHR5cGUgZm9yIGVhY2ggZGlzcGxheSBsaXN0IG9wZXJhdGlvbi4gVGhl
eSBjb3ZlciBtb3N0IG9mIHRoZQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbmFs
aXR5LCBvdGhlciB0aGFuIGNsaXBwaW5nIHRvIGFuIGltYWdlIGJ1ZmZlci4gVGV4dCBkcmF3aW5n
IGlzIHN0dWJiZWQKKyAgICAgICAgICBvdXQgZm9yIG5vdy4KKworICAgICAgICBBZGRlZCBhICJE
aXNwbGF5TGlzdHMiIGxvZyBjaGFubmVsLgorCisgICAgICAgIEFkZGVkIEdyYXBoaWNzQ29udGV4
dFN0YXRlIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcgc3RhdGUgZGVsdGFzIHdpdGggY2hhbmdlIGJp
dHMuIEl0IG1heQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UgYW5kIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBhbmQgdXNlIHRoZQorICAgICAg
ICBkaXJ0eSBiaXRzIGluIG5vbi1kaXNwbGF5LWxpc3QgZHJhd2luZyBhcyB3ZWxsLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6On5SZXBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDogQWRkZWQuCisKKzIwMTYtMDEtMDYgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgU29ydCB0aGUgcHJvamVj
dCBmaWxlLgogCiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA4NGM2ZDU4MDY2NmMwMmE3MjI5NmQxZGIyZjZmZDgxMGZi
NGNiNmE2Li5jZjY3ODBlNWRhYzMwNjYzZGUwMjA5ZDE1NmNiYTJlOTAwYjcxZDkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzAsNiArNzAsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy90ZXhtYXAiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgpAQCAtMjIxNSw2ICsyMjE2LDExIEBAIHNldChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5j
cHAKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKKwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThkNjVmMGZiNjQ1
ZWI5MzY0MzlmMGUzMmI1NTE3MjE0MTY3MDI3OC4uNjY0ZWVkZGM4YzI2MTI1YTU3NGEyZDIwMWNj
OTJhYTY1YTAxMjU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNTUwLDYgKzU1MCwxNCBAQAogCQkwRkRGNDVBOTFCRDFDODI1
MDBFNEZBOEMgLyogVGltaW5nRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjQ1QTgxQkQxQzgyNTAwRTRGQThDIC8qIFRpbWluZ0Z1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJMEZFNTgwNjMxOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGlu
Z1RyZWVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNTgwNjExOTMyN0E2MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuY3BwICovOyB9
OwogCQkwRkU1ODA2NDE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTgwNjIxOTMyN0E2
MjAwREUzMkVCIC8qIFNjcm9sbGluZ1RyZWVNYWMuaCAqLzsgfTsKKwkJMEZFNUZCRDIxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5jcHAgKi87IH07CisJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNUZCQ0Ix
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi87IH07CisJCTBGRTVGQkQ0MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi87
IH07CisJCTBGRTVGQkQ2MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLzsgfTsKKwkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkNGMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi87IH07CisJCTBGRTVGQkQ4MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlcGxheWVyLmNwcCAqLzsgfTsKKwkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxh
eWVyLmggKi87IH07CiAJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVt
ZU1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNzE0MDMxNDIxNzBCODAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lTW9jay5jcHAgKi87IH07
CiAJCTBGRTcxNDA2MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDA0MTQyMTcw
QjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLzsgfTsKIAkJMEZFQTNFN0IxOTFC
MkZDNTAwMEYxQjU1IC8qIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBM0U3OTE5MUIyRkM1
MDAwRjFCNTUgLyogU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOSw2ICs3ODQ3LDE0
IEBACiAJCTBGREY0NUE4MUJEMUM4MjUwMEU0RkE4QyAvKiBUaW1pbmdGdW5jdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1pbmdGdW5jdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTU4MDYxMTkzMjdBNjIwMERFMzJFQiAvKiBT
Y3JvbGxpbmdUcmVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWVNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1
ODA2MjE5MzI3QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdC5jcHA7IHBh
dGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3QuaDsgcGF0aCA9IGRpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJD
QzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEaXNwbGF5TGlzdEl0ZW1zLmNwcDsgcGF0aCA9IGRpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGlzcGxheUxpc3RJdGVtcy5oOyBwYXRoID0gZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGlzcGxheUxpc3RSZWNvcmRlci5j
cHA7IHBhdGggPSBkaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERpc3BsYXlM
aXN0UmVjb3JkZXIuaDsgcGF0aCA9IGRpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOyBwYXRoID0gZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1RkJE
MTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEaXNwbGF5TGlzdFJlcGxheWVyLmg7IHBhdGggPSBkaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkU3MTQwMzE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTW9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcxNDA0MTQyMTcwQjgwMERCMzNCQSAv
KiBTY3JvbGxiYXJUaGVtZU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcx
NDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJUaGVtZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTY1NCw2ICsxNTY3MCwyMSBAQAogCQkJcGF0aCA9IGlvczsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJD
QSAvKiBkaXNwbGF5bGlzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CisJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAorCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAor
CQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8s
CisJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
ICovLAorCQkJCTBGRTVGQkQxMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGRpc3BsYXlsaXN0czsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTE0REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE1
MjksNiArMjE1NjAsNyBAQAogCQkJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLywK
IAkJCQlCNTMyMEQ2ODEyMkEyNEU5MDAyRDE0NDAgLyogY29jb2EgKi8sCiAJCQkJOTMzMkFCM0Ix
NjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0Eg
LyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0
ZXJzICovLAogCQkJCTQ5ODc3MEMxMTI0MkM1MEQwMDIyMjZCQSAvKiBncHUgKi8sCiAJCQkJNDQx
QUYwQTcwRUJBN0JCRjAwNDRFRDRCIC8qIGlvcyAqLywKQEAgLTI1MDY4LDYgKzI1MTAwLDEwIEBA
CiAJCQkJMkQ1NjQ2QjAxQjhGODQ5MzAwM0M0OTk0IC8qIERpY3Rpb25hcnlQb3B1cEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQUYxOTk5MTUxM0QxMzEwMDhEQjBDMyAvKiBEaXJlY3RDb252
b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFREFBRkM5MTlBMkNDREMwMDM0REZEMSAvKiBE
aXNrQ2FjaGVNb25pdG9yQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTVGQkQzMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNUZCRDUx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBs
YXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOUVDQzYxOTJFQ0M4
MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyOUVDQ0ExOTJGMUYxRDAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvcklP
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwMiw2ICsyODkzOCwxMCBAQAogCQkJCTkzN0ZGM0Q3
MUExMDEzMUIwMDhFQkEzMSAvKiBEaWN0aW9uYXJ5TG9va3VwLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkRBRjE5OTgxNTEzRDEzMTAwOERCMEMzIC8qIERpcmVjdENvbnZvbHZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3RTRERTEwRDE5OEIxMEI2MDA1MUNCMDIgLyogRGlza0NhY2hlTW9uaXRv
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNUZCRDIxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ0MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTVGQkQ2
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTVGQkQ4MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQyOUVDQzUxOTJFQ0M4MzAw
OTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjk3QTY1ODE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9ySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
b2dnaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggM2YwZmQ3
YWMxNjU3ZjgyZDI4NDY1OGNiNDhiNmE2MzFiYzNmNjI3YS4uM2JkZGFmMjhhZTQxOTQ4M2MzYzIx
M2MyYmQ4ZWUzNDI0NDNkNDVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDgs
NiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgTShBcmNoaXZlcykgXAogICAgIE0o
Q29tcG9zaXRpbmcpIFwKICAgICBNKENvbnRlbnRGaWx0ZXJpbmcpIFwKKyAgICBNKERpc3BsYXlM
aXN0cykgXAogICAgIE0oRE9NVGltZXJzKSBcCiAgICAgTShFZGl0aW5nKSBcCiAgICAgTShFdmVu
dHMpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBkNmIzMDBlNzUyODVjMTg1ZWQyZDUyOWI4NjQyYTFmYWZkZDdi
NzAuLmMyYjg3NTkzZmE1ZTRlMDhiZDEzNmVlNDQ0ODkzYzMyNDU1YmI5ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMjY3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKIH07CiAKKworI2RlZmluZSBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAorICAgIGlmICgobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0
eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKKyAgICAgICAgY2hhbmdlRmxhZ3MgfD0gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmZsYWc7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncyA9IDA7CisKKyAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9r
ZVBhdHRlcm4pOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENo
YW5nZSwgZmlsbEdyYWRpZW50KTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxs
UGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOworCisgICAgaWYgKChtX2NoYW5nZUZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkKKyAgICAgICAgJiYgKG1fc3RhdGUu
c2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAorICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKKyAgICAgICAgICAgIHx8IG1fc3RhdGUu
c2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQorICAgICAgICBjaGFuZ2VGbGFncyB8
PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlOworCisgICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOworICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOworICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7CisgICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKKworICAgIGlmICgobV9jaGFuZ2VGbGFn
cyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgICYmIChtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUu
YmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpCisgICAgICAgIGNoYW5nZUZsYWdzIHw9IChH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7CisKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbnRpYWxpYXNlZEZv
bnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UsIGFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7
CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKworICAgIHJldHVybiBjaGFuZ2VGbGFnczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQoreworICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250
ZXh0U3RhdGUuCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEdyYWRpZW50OworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gc3RhdGUuZmls
bFBhdHRlcm47CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSB7CisgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cykKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CisgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICB9CisK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4
dERyYXdpbmdNb2RlOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLmZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisgICAgICAgIG1fc3RhdGUuYWxw
aGEgPSBzdGF0ZS5hbHBoYTsKKworICAgIGlmIChmbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlIHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpIHsKKyAgICAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworCisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZENoYW5n
ZSkKKyAgICAgICAgbV9zdGF0ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQgPSBzdGF0
ZS5hbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWQ7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworCisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hh
bmdlKQorICAgICAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2s7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkKKyAgICAgICAgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICAKKyAg
ICBtX2NoYW5nZUZsYWdzIHw9IGZsYWdzOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpCisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlUGF0dGVybkNoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGllbnQpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpCisgICAgICAgIGNv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisjaWYg
VVNFKENHKQorICAgICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgICAgIGVsc2UKKyNl
bmRpZgorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CisgICAgfQorCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKQorICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdp
bmdNb2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKQorICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworCisgICAgaWYgKG1fY2hh
bmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKQorICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdl
KQorICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOworCisgICAg
aWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpCisg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
IHwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCisgICAgICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbnRp
YWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0QW50
aWFsaWFzZWRGb250RGlsYXRpb25FbmFibGVkKG1fc3RhdGUuYW50aWFsaWFzZWRGb250RGlsYXRp
b25FbmFibGVkKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSkKKyAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpCisgICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdl
LWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQorICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOworI2lmIFVTRShDRykKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKTsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX2No
YW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRl
eHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworCisgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xv
cik7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3Rh
dGUuZmlsbENvbG9yKTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9r
ZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQor
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5k
LW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxl
ZENoYW5nZSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbnRpYWxpYXNlZC1mb250LWRpbGF0
aW9uLWVuYWJsZWQiLCBtX3N0YXRlLmFudGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZCk7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxk
LXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJh
d0x1bWluYW5jZU1hc2tDaGFuZ2UpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1p
bmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2UpCit7CisgICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7CisgICAgcmV0
dXJuIHRzOworfQorCisKIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKICAgICA6IG1fdXBkYXRp
bmdDb250cm9sVGludHMoZmFsc2UpCiAgICAgLCBtX3RyYW5zcGFyZW5jeUNvdW50KDApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IDUyYjFhZDgyYjJmOGE1ODcwOGU5OWUzNjZhNzZlMjU2MjBiMjNkZTAuLmQ5YjFmOTk0MmEy
OTMzYzBmMjM3OGEzYzEzN2ZjZjYzYWQxM2FkYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjcsNiArMTI3LDMzIEBA
IHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgewogICAgIH0KIAorICAgIGVudW0g
Q2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwLAorICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKyAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIEZpbGxDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgRmlsbFJ1bGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorICAgICAgICBTaGFkb3dDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBTaGFkb3dDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAorICAgICAgICBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBBbHBo
YUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAorICAgICAgICBD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAorICAgICAg
ICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAg
ICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAor
ICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE3
LAorICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8
IDE4LAorICAgICAgICBBbnRpYWxpYXNlZEZvbnREaWxhdGlvbkVuYWJsZWRDaGFuZ2UgICAgPSAx
IDw8IDE5LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAg
PSAxIDw8IDIwLAorICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIxLAorICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAg
ICAgICAgPSAxIDw8IDIyLAorICAgIH07CisgICAgdHlwZWRlZiB1aW50MzJfdCBTdGF0ZUNoYW5n
ZUZsYWdzOworCiAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBSZWZQ
dHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKICAgICAKQEAgLTE5NSw2ICsyMjIsMjggQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zIHsKICAgICBib29sIG1fdXNlTG93UXVhbGl0eVNjYWxl
OwogfTsKIAorc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUp
CisgICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OworCisgICAgdm9pZCBhY2N1bXVsYXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisgICAg
CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFncyB7IDAgfTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisKKwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc5YmZkY2Q3MDkzOWY0NjYyNjA3N2Y0OTJhZTZiZmU2ZTA5NWZi
NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK1dU
Rjo6Q1N0cmluZyBEaXNwbGF5TGlzdDo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFRleHRT
dHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4
KCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoKSBjb25zdAoreworICAgIGZwcmludGYo
c3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRhdGEoKSk7Cit9CisjZW5kaWYKKwordm9pZCBE
aXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFt
OjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0cyA8PCAiZGlzcGxheSBsaXN0IjsKKworICAg
IHNpemVfdCBudW1JdGVtcyA9IG1fbGlzdC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2Nv
cGUodHMpOworICAgICAgICB0cyA8PCBpIDw8ICIgIiA8PCBtX2xpc3RbaV0uZ2V0KCk7CisgICAg
fQorICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICB0cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBz
aXplSW5CeXRlcygpOworICAgIHRzLmVuZEdyb3VwKCk7Cit9CisKK3NpemVfdCBEaXNwbGF5TGlz
dDo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgIGZv
ciAoYXV0byYgcmVmIDogbV9saXN0KQorICAgICAgICByZXN1bHQgKz0gSXRlbTo6c2l6ZUluQnl0
ZXMocmVmKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3Bs
YXlMaXN0CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgZGlzcGxheUxpc3Qu
ZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NTM2ZDI5NzBiMGYxYmM2ZTIzYWI2ZjU1
OWU5ZGExYzA2ZTE0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMCwwICsxLDk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGlz
cGxheUxpc3RfaAorI2RlZmluZSBEaXNwbGF5TGlzdF9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UmVjdDsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFRleHRTdHJlYW07CisKK25hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CisKK2NsYXNzIEl0ZW07CisKK2NsYXNzIERpc3BsYXlMaXN0IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShEaXNwbGF5TGlzdCk7CisgICAgZnJpZW5kIGNsYXNzIFJlY29y
ZGVyOworcHVibGljOgorICAgIERpc3BsYXlMaXN0KCkgPSBkZWZhdWx0OworICAgIERpc3BsYXlM
aXN0KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKworICAgIERpc3BsYXlMaXN0JiBvcGVyYXRv
cj0oRGlzcGxheUxpc3QmJikgPSBkZWZhdWx0OworCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdDsKKworICAgIGNvbnN0IFZlY3RvcjxSZWY8SXRlbT4+JiBsaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0OyB9CisgICAgSXRlbSYgaXRlbUF0KHNpemVfdCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpbmRleCA8IG1fbGlzdC5zaXplKCkpOworICAgICAgICByZXR1cm4gbV9s
aXN0W2luZGV4XS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV9saXN0
LmNsZWFyKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXpl
KCk7IH0KKworICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgbV9saXN0LnJlc2l6ZShpbmRleCk7CisgICAgfQorCisgICAgc2l6ZV90IHNp
emVJbkJ5dGVzKCkgY29uc3Q7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJM
RUQKKyAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICB2b2lkIGR1bXAo
KSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEl0ZW0mIGFwcGVuZChSZWY8SXRlbT4m
JiBpdGVtKQorICAgIHsKKyAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKKyAg
ICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuZ2V0KCk7CisgICAgfQorCisgICAgVmVjdG9yPFJl
ZjxJdGVtPj4mIGxpc3QoKSB7IHJldHVybiBtX2xpc3Q7IH0KKworICAgIFZlY3RvcjxSZWY8SXRl
bT4+IG1fbGlzdDsKK307CisKK30gLy8gRGlzcGxheUxpc3QKKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKK30g
Ly8gV2ViQ29yZQorCit1c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7CisK
KyNlbmRpZiAvKiBEaXNwbGF5TGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWY2ZmRkNWY5ODAyYjA0Y2ZkMzI4NTY3ZjYzODM2ZGRiOGExZmY5
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMCwwICsxLDEyMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKworI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgRGlzcGxheUxpc3QgeworCisvLyBTaG91bGQgbWF0Y2ggUmVuZGVyVGhlbWU6OnBs
YXRmb3JtRm9jdXNSaW5nV2lkdGgoKQorc3RhdGljIGNvbnN0IGZsb2F0IHBsYXRmb3JtRm9jdXNS
aW5nV2lkdGggPSAzOworCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECitX
VEY6OkNTdHJpbmcgSXRlbTo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0g
dHM7CisgICAgdHMgPDwgKnRoaXM7CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9
CisjZW5kaWYKKworc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mIGl0ZW0pCit7
CisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4oaXRlbSkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4o
aXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihpdGVtKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2Nh
bGU+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0
YXRlPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZURhc2g6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURh
c2g+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5
cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TWl0
ZXJMaW1pdD4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihpdGVtKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwPihpdGVt
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxDbGlwT3V0PihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0
aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9s
eWdvbjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwQ29udmV4UG9seWdvbj4o
aXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdJbWFnZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0p
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERy
YXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKSk7CisjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSkpOworI2VuZGlmCisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1Bh
dHRlcm4+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVt
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihpdGVtKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0Vs
bGlwc2U+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Q29udmV4UG9seWdvbj4oaXRlbSkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PERyYXdQYXRoPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0
ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Rmls
bFJlY3Q+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
b3VuZGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUm91bmRlZFJl
Y3Q+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToK
KyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4o
aXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVs
bGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0p
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQ
YXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0pKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pKTsKKyNpZiBVU0UoQ0cpCisg
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBw
bHlGaWxsUGF0dGVybj4oaXRlbSkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBseURl
dmljZVNjYWxlRmFjdG9yPihpdGVtKSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2luZ0l0
ZW0mIGl0ZW0pCit7CisgICAgdHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJleHRlbnQgIjsK
KyAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQorICAgICAgICB0cyA8PCBpdGVtLmV4dGVudCgp
OworICAgIGVsc2UKKyAgICAgICAgdHMgPDwgInVua25vd24iOworICAgIAorICAgIHRzLmVuZEdy
b3VwKCk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0ZW0p
Cit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3JlSW5k
ZXgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwor
dm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCit7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
eSIsIGl0ZW0ueSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBSb3RhdGU6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LnJvdGF0ZSht
X2FuZ2xlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwg
aXRlbS5hbmdsZSgpKTsKKworICAgIHJldHVybiB0czsKK30KKwordm9pZCBTY2FsZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2NhbGUobV9z
aXplKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNjYWxlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0u
YW1vdW50KCkpOworCisgICAgcmV0dXJuIHRzOworfQorCitDb25jYXRlbmF0ZUNUTTo6Q29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgOiBJdGVtKEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKKyAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKK3sK
K30KKwordm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAoreworICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVu
YXRlQ1RNJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFuc2Zv
cm0oKSk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBtX3N0YXRlLmFwcGx5KGNvbnRleHQp
OworfQorCit2b2lkIFNldFN0YXRlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Cit7CisgICAgbV9zdGF0ZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3Rh
dGUpCit7CisgICAgdHMgPDwgc3RhdGUuc3RhdGUoKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3Zv
aWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorewor
ICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkK
K3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJy
YXksIG1fZGFzaE9mZnNldCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCit7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOworICAgIHJl
dHVybiB0czsKK30KKwordm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Cit9
CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
ZXRMaW5lSm9pbiYgbGluZUpvaW4pCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4i
LCBsaW5lSm9pbi5saW5lSm9pbigpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgU2V0TWl0
ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJM
aW1pdCkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5t
aXRlckxpbWl0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclNoYWRvdzo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xlYXJT
aGFkb3coKTsKK30KKwordm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQoreworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK3ZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKK3sKKyAgICB0
cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQor
Cit2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK3sKKyAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKK30KKworc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmKQorewor
Ly8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0
aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGlwUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuY2xpcFBhdGgobV9w
YXRoLCBtX3dpbmRSdWxlKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQoreworLy8gICAgdHMuZHVtcFByb3Bl
cnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHRz
LmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK0NsaXBDb252ZXhQb2x5Z29uOjpDbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVt
YmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkK
KyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBDb252ZXhQb2x5Z29uKQorICAgICwgbV9hbnRpYWxp
YXMoYW50aWFsaWFzZWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlBv
aW50czsgKytpKQorICAgICAgICBtX3BvaW50cy5hcHBlbmQocG9pbnRzW2ldKTsKK30KKwordm9p
ZCBDbGlwQ29udmV4UG9seWdvbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAoreworICAgIGNvbnRleHQuY2xpcENvbnZleFBvbHlnb24obV9wb2ludHMuc2l6ZSgpLCBtX3Bv
aW50cy5kYXRhKCksIG1fYW50aWFsaWFzKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBDb252ZXhQb2x5Z29uJiBpdGVtKQorewor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnRzIiwgaXRlbS5wb2ludHMoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJhbnRpYWxpYXMiLCBpdGVtLmFudGlhbGlhcygpKTsKKyAgICByZXR1cm4gdHM7
Cit9CisKK0RyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
KyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQorICAgICwgbV9mb250KGNv
bnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRp
b24pCisgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQorICAgICwgbV9zbW9vdGhpbmdN
b2RlKHNtb290aGluZ01vZGUpCit7CisgICAgbV9nbHlwaHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShjb3VudCk7CisgICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBtX2ds
eXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKKyAgICAgICAgbV9hZHZhbmNlcy51bmNo
ZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOworICAgIH0KKyAgICBjb21wdXRlQm91bmRzKCk7Cit9
CisKK2lubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyKCkg
Y29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7CisjaWYgVVNFKENBSVJPKQorICAgICAgICBy
ZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLmluZGV4LCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ld
KTsKKyNlbHNlCisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICZtX2ZvbnQuZ2V0KCks
IG1fYWR2YW5jZXNbaV0pOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50LgorICAgIFVOVVNFRF9QQVJBTShtX3Ntb290aGluZ01vZGUpOwor
fQorCit2b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQoreworICAgIC8vIEZJWE1FOiBU
aGlzIGNvZGUgZG9lc24ndCBhY3R1YWxseSB0YWtlIHRoZSBleHRlbnRzIG9mIHRoZSBnbHlwaHMg
aW50byBjb25zaWRlcmF0aW9uLiBJdCBhc3N1bWVzIHRoYXQKKyAgICAvLyB0aGUgZ2x5cGggbGll
cyBlbnRpcmVseSB3aXRoaW4gaXRzIChhc2NlbnQrZGVzY2VudCB4IGFkdmFuY2UpIHJlY3QuCisg
ICAgZmxvYXQgYXNjZW50ID0gbV9mb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7Cisg
ICAgZmxvYXQgZGVzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdERlc2NlbnQoKTsK
KyAgICBGbG9hdFBvaW50IGN1cnJlbnQgPSB0b0Zsb2F0UG9pbnQobG9jYWxBbmNob3IoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgeworICAgICAg
ICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07CisgICAgICAgIEZs
b2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0g
YXNjZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICBtX2Jv
dW5kcy51bml0ZShnbHlwaFJlY3QpOworCisgICAgICAgIGN1cnJlbnQgKz0gRmxvYXRTaXplKGFk
dmFuY2UpOworICAgIH0KK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3R2x5cGhzOjpsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBs
b2NhbEJvdW5kcyA9IG1fYm91bmRzOworICAgIGxvY2FsQm91bmRzLm1vdmUobV9ibG9ja0xvY2F0
aW9uLngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7CisgICAgcmV0dXJuIGxvY2FsQm91bmRzOwor
fQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0dseXBocyYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOworICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCisgICAgdHMuZHVt
cFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMoKS5zaXplKCkpOworCisgICAg
cmV0dXJuIHRzOworfQorCitEcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBt
X2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lk
IERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAg
IGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNl
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKK3sKKyAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNl
LXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIs
IGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorCitEcmF3VGlsZWRJbWFn
ZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxl
ZEltYWdlKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCisgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgLCBtX3RpbGVTaXplKHRpbGVTaXpl
KQorICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25z
KGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2b2lkIERyYXdUaWxlZEltYWdlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGls
ZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2l6
ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKworc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdlJiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK0RyYXdUaWxl
ZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0
aW9ucykKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSkK
KyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQor
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxl
RmFjdG9yKQorICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAsIG1fdlJ1bGUodlJ1bGUpCisgICAg
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworfQorCit2
b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rl
c3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1bGUs
IG1faW1hZ2VQYWludGluZ09wdGlvbnMpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVy
dHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJk
ZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOworICAgIHJldHVybiB0czsKK30KKworI2lm
IFVTRShDRykgfHwgVVNFKENBSVJPKQorRHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2Uo
UGFzc05hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2Up
CisjaWYgVVNFKENHKQorICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN0b3JlIGFuIGltYWdlIGZvciBD
YWlyby4KKyAgICAsIG1faW1hZ2VQdHIoaW1hZ2VQdHIpCisjZW5kaWYKKyAgICAsIG1faW1hZ2VT
aXplKGltYWdlU2l6ZSkKKyAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCisgICAgLCBtX3Ny
Y1JlY3Qoc3JjUmVjdCkKKyAgICAsIG1fb3Aob3ApCisgICAgLCBtX2JsZW5kTW9kZShibGVuZE1v
ZGUpCisgICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0aW9uKQoreworICAgIFVOVVNFRF9QQVJB
TShpbWFnZVB0cik7Cit9CisKK3ZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIGNvbnRleHQuZHJhd05h
dGl2ZUltYWdlKG1faW1hZ2VQdHIuZ2V0KCksIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBt
X3NyY1JlY3QsIG1fb3AsIG1fYmxlbmRNb2RlLCBtX29yaWVudGF0aW9uKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGNvbnRleHQpOworI2VuZGlmCit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCit7
CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICAv
LyBGSVhNRTogZHVtcCBtb3JlIHN0dWZmLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJl
Y3QiLCBpdGVtLnNvdXJjZSgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0
ZW0uZGVzdGluYXRpb24oKSk7CisgICAgcmV0dXJuIHRzOworfQorI2VuZGlmCisKK0RyYXdQYXR0
ZXJuOjpEcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdHRlcm4pCisgICAgLCBtX2ltYWdlKGltYWdlKQor
ICAgICwgbV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCisgICAgLCBtX3RpbGVS
ZWN0KHRpbGVSZWN0KQorICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKKyAgICAsIG1fcGhh
c2UocGhhc2UpCisgICAgLCBtX3NwYWNpbmcoc3BhY2luZykKKyAgICAsIG1fb3Aob3ApCisgICAg
LCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCit7Cit9CisKK3ZvaWQgRHJhd1BhdHRlcm46OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdQYXR0
ZXJuKG1faW1hZ2UuZ2V0KCksIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFz
ZSwgbV9zcGFjaW5nLCBtX29wLCBtX2Rlc3RpbmF0aW9uLCBtX2JsZW5kTW9kZSk7Cit9CisKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0
dGVybiYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOworICAg
IHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zv
cm0oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInBoYXNlIiwgaXRlbS5waGFzZSgpKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInNwYWNpbmciLCBpdGVtLnNwYWNpbmcoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2
b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0
JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwor
ICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91
bmRzOworICAgIGJvdW5kcy5maXRUb1BvaW50cyhtX3BvaW50MSwgbV9wb2ludDIpOworICAgIHJl
dHVybiBib3VuZHM7Cit9CisKK3ZvaWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdMaW5lKG1fcG9pbnQxLCBtX3BvaW50
Mik7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3TGluZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9p
bnQxKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkpOwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0
KHBvaW50KCksIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKK30KKworT3B0
aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0
dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpj
b21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4KKwor
ICAgIGlmICghbV93aWR0aHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisK
KyAgICBGbG9hdFJlY3QgcmVzdWx0KHBvaW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCks
IG1fc3Ryb2tlV2lkdGgpKTsKKyAgICByZXN1bHQuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBmb3Ig
cGl4ZWwgc25hcHBpbmcuIEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNuJ3Qg
dGFrZSB0aGUgQ1RNIGludG8gYWNjb3VudC4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVz
Rm9yVGV4dCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJs
b2NrTG9jYXRpb24oKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVt
LmxvY2FsQW5jaG9yKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRocyIsIGl0ZW0ud2lkdGhzKCkpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiaXMtcHJpbnRpbmciLCBpdGVtLmlzUHJpbnRpbmcoKSk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJkb3VibGUiLCBpdGVtLmRvdWJsZUxpbmVzKCkpOworICAgIHJldHVybiB0czsK
K30KKwordm9pZCBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKG1fcG9pbnQsIG1fd2lkdGgsIG1fc3R5bGUpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+
IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2
YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXIoKSByZXR1cm5zLgorCisgICAgRmxvYXRSZWN0IHJlc3VsdChtX3Bv
aW50LCBGbG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOworICAg
IHJlc3VsdC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZv
ciAibWlzc3BlbGxpbmcgZG90IiBzbmFwcGluZy4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlciYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVt
LnBvaW50KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwor
ICAgIHJldHVybiB0czsKK30KKwordm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsK
K30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdFbGxpcHNlJiBpdGVtKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0u
cmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKKy8vIEZJWE1FOiBzaGFyZSB0aGlzIGNvZGUu
Cit2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwgc2l6ZV90IG51bVBvaW50
cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIEFTU0VSVChudW1Qb2ludHMgPiAw
KTsKKworICAgIHBhdGgubW92ZVRvKHBvaW50c1swXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBudW1Qb2ludHM7ICsraSkKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8ocG9pbnRzW2ldKTsK
KyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOworfQorCitEcmF3Q29udmV4UG9seWdvbjo6RHJhd0Nv
bnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMsIGJvb2wgYW50aWFsaWFzZWQpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0Nv
bnZleFBvbHlnb24pCisgICAgLCBtX2FudGlhbGlhc2VkKGFudGlhbGlhc2VkKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZQb2ludHM7ICsraSkKKyAgICAgICAgbV9wb2lu
dHMuYXBwZW5kKHBvaW50c1tpXSk7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0NvbnZl
eFBvbHlnb246OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Cit7Cisg
ICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHBvaW50IDogbV9wb2ludHMpCisg
ICAgICAgIHJlc3VsdC5leHRlbmQocG9pbnQpOworICAgIHJlc3VsdC5pbmZsYXRlKG1fYW50aWFs
aWFzZWQgPyAxIDogMCk7IC8vIEFjY291bnQgZm9yIGFudGlhbGlhc2luZworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgRHJhd0NvbnZleFBvbHlnb246OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmRyYXdDb252ZXhQb2x5Z29uKG1fcG9p
bnRzLnNpemUoKSwgbV9wb2ludHMuZGF0YSgpLCBtX2FudGlhbGlhc2VkKTsKK30KKworc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdDb252ZXhQ
b2x5Z29uJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludHMiLCBpdGVtLnBvaW50cygpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoImFudGlhbGlhc2VkIiwgaXRlbS5hbnRpYWxpYXNlZCgpKTsK
KyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgY29udGV4dC5kcmF3UGF0aCht
X3BhdGgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisjZW5kaWYKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQ
YXRoJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CisvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJ
WE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgcmV0dXJuIHRzOworfQorCit2b2lkIERy
YXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7
CisgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZzZXQsIG1f
Y29sb3IpOworfQorCitPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdQYXRoOjpsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBy
ZXN1bHQgPSBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOworICAgIHJlc3VsdC5pbmZsYXRlKHBs
YXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5n
UGF0aCYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBG
SVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgorICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgi
LCBpdGVtLndpZHRoKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZz
ZXQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CisgICAg
cmV0dXJuIHRzOworfQorCit2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3Jl
Y3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7Cit9CisKK09wdGlvbmFsPEZsb2F0UmVj
dD4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgZm9yIChhdXRvJiByZWN0IDog
bV9yZWN0cykKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3QpOworICAgIHJlc3VsdC5pbmZsYXRl
KHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNS
aW5nUmVjdHMmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3RzIiwgaXRlbS5yZWN0cygpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsUmVj
dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQu
ZmlsbFJlY3QobV9yZWN0KTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
IiwgaXRlbS5yZWN0KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxsUmVjdFdpdGhD
b2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRl
eHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aENvbG9yJiBpdGVtKQor
eworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBGaWxs
UmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsKK30KKwor
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxS
ZWN0V2l0aEdyYWRpZW50JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgLy8gRklYTUU6IGxvZyBncmFkaWVudC4KKyAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CisgICAgcmV0dXJuIHRzOworfQorCit2
b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAoreworICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBtX2Js
ZW5kTW9kZSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJl
Y3QiLCBpdGVtLnJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29s
b3IoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwgaXRlbS5j
b21wb3NpdGVPcGVyYXRvcigpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBp
dGVtLmJsZW5kTW9kZSgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbFJvdW5kZWRS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4
dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7Cit9CisKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91
bmRlZFJlY3QmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0
KCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOworICAgIHJldHVy
biB0czsKK30KKwordm9pZCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUobV9yZWN0LCBtX3JvdW5kZWRIb2xlUmVjdCwgbV9jb2xvcik7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQtaG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9s
ZVJlY3QoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCit2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5maWxsUGF0aChtX3BhdGgpOworfQorCitz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFBh
dGgmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKKy8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklY
TUU6IHBhdGggbG9nZ2luZy4KKyAgICByZXR1cm4gdHM7Cit9CisKK3ZvaWQgRmlsbEVsbGlwc2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmZp
bGxFbGxpcHNlKG1fcmVjdCk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKK3sKKyAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cmVjdCIsIGl0ZW0ucmVjdCgpKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK09wdGlvbmFsPEZsb2F0
UmVjdD4gU3Ryb2tlUmVjdDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OworICAgIGJvdW5kcy5leHBhbmQo
bV9saW5lV2lkdGgsIG1fbGluZVdpZHRoKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lk
IFN0cm9rZVJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAg
ICBjb250ZXh0LnN0cm9rZVJlY3QobV9yZWN0LCBtX2xpbmVXaWR0aCk7Cit9CisKK3N0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VSZWN0JiBp
dGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgibGluZS13aWR0aCIsIGl0ZW0ubGluZVdpZHRoKCkpOworICAgIHJldHVybiB0czsK
K30KKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8g
dGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhC
eVN0cm9raW5nUGF0aCgpLgorICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5n
UmVjdCgpOworICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25l
c3MpOworICAgIGJvdW5kcy5tb3ZlQnkobV9ibG9ja0xvY2F0aW9uKTsKKyAgICByZXR1cm4gYm91
bmRzOworfQorCit2b2lkIFN0cm9rZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgb2Zmc2V0ID0gdG9GbG9hdFNpemUobV9ibG9ja0xv
Y2F0aW9uKTsKKyAgICBtX3BhdGgudHJhbnNsYXRlKG9mZnNldCk7CisgICAgY29udGV4dC5zdHJv
a2VQYXRoKG1fcGF0aCk7CisgICAgbV9wYXRoLnRyYW5zbGF0ZSgtb2Zmc2V0KTsKK30KKworc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBh
dGgmIGl0ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xv
Y2F0aW9uKCkpOworLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAv
LyBGSVhNRTogcGF0aCBsb2dnaW5nLgorICAgIHJldHVybiB0czsKK30KKworT3B0aW9uYWw8Rmxv
YXRSZWN0PiBTdHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5z
dHJva2VUaGlja25lc3MoKTsKKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7CisgICAg
Ym91bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgcmV0
dXJuIGJvdW5kczsKK30KKwordm9pZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5zdHJva2VFbGxpcHNlKG1fcmVjdCk7
Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTdHJva2VFbGxpcHNlJiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOworICAgIHJldHVybiB0czsKK30KKwordm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3Qp
OworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ2xlYXJSZWN0JiBpdGVtKQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkp
OworICAgIHJldHVybiB0czsKK30KKwordm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVt
KQoreworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOworICAgIHJldHVy
biB0czsKK30KKwordm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKK30KKworI2lmIFVTRShDRykKK3ZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseVN0cm9rZVBh
dHRlcm4oKTsKK30KKwordm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7Cit9
CisjZW5kaWYKKwordm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFj
dG9yKG1fc2NhbGVGYWN0b3IpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInNjYWxlLWZhY3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7Cisg
ICAgcmV0dXJuIHRzOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgSXRlbVR5cGUmIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNj
YWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0Ijsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7IGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcENvbnZleFBvbHlnb246IHRzIDw8ICJjbGlwLWNv
bnZleC1wb2x5Z29uIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczogdHMg
PDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB0
cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZElt
YWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFnZSI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiOyBi
cmVhazsKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5hdGl2ZS1pbWFnZSI7IGJyZWFrOworI2VuZGlmCisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogdHMgPDwgImRyYXctcmVjdCI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB0cyA8PCAiZHJhdy1saW5lIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogdHMgPDwgImRyYXctbGluZXMt
Zm9yLXRleHQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1mb3ItZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29udmV4UG9seWdvbjogdHMgPDwgImRyYXctY29u
dmV4LXBvbGdvbiI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB0cyA8PCAi
ZHJhdy1wYXRoIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6
IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmctcGF0aCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czogdHMgPDwgImRyYXctZm9jdXMtcmluZy1yZWN0cyI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qt
d2l0aC1jb2xvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwt
cm91bmRlZC1yZWN0IjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogdHMgPDwgImZpbGwtcGF0aCI7IGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB0cyA8PCAiZmlsbC1lbGxpcHNlIjsgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0IjsgYnJl
YWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogdHMgPDwgInN0cm9rZS1wYXRoIjsg
YnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogdHMgPDwgInN0cm9rZS1l
bGxpcHNlIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OiB0cyA8PCAiY2xl
YXItcmVjdCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6IHRzIDw8ICJiZWdpbi10cmFuc3BhcmVuY3ktbGF5ZXIiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogdHMgPDwgImVuZC10cmFuc3BhcmVuY3ktbGF5
ZXIiOyBicmVhazsKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQ
YXR0ZXJuOiB0cyA8PCAiYXBwbHktc3Ryb2tlLXBhdHRlcm4iOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0cyA8PCAiYXBwbHktZmlsbC1wYXR0ZXJuIjsgYnJl
YWs7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB0
cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93IjsgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbSYgaXRlbSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRz
KTsKKyAgICB0cyA8PCBpdGVtLnR5cGUoKTsKKworICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8g
d2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCisg
ICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PFNhdmU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Um90YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAg
ICAgIHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNl
dFN0YXRlPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUNhcDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4o
aXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldE1pdGVyTGltaXQ+KGl0ZW0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxD
bGlwPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PENsaXBPdXRUb1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwQ29udmV4UG9seWdvbjoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Q2xpcENvbnZleFBvbHlnb24+KGl0ZW0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICB0cyA8PCBkb3duY2Fz
dDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyNpZiBV
U0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0
PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Cisg
ICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lPihpdGVtKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0Vs
bGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Q29u
dmV4UG9seWdvbjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0NvbnZleFBvbHlnb24+KGl0
ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1
c1JpbmdSZWN0cz4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdD4oaXRlbSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICB0
cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUm91
bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0Pihp
dGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHRzIDw8IGRvd25jYXN0
PFN0cm9rZUVsbGlwc2U+KGl0ZW0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGVhclJlY3Q6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6
CisgICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9y
OgorICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0aW9uYWwgZGF0YS4K
KyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOgorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9r
ZVBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyNlbmRpZgor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NmI3YjJmNDllOTQ1MDNhMzM3ODBiMDYzNTkyNzc1YzgyNzNiNWFmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMCwwICsxLDE0MzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEaXNwbGF5TGlzdEl0ZW1z
X2gKKyNkZWZpbmUgRGlzcGxheUxpc3RJdGVtc19oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgor
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisKKyNpZiBVU0UoQ0cpCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRTdHJlYW07CitzdHJ1Y3QgSW1hZ2VQYWludGlu
Z09wdGlvbnM7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2VudW0gY2xhc3MgSXRlbVR5
cGUgeworICAgIFNhdmUsCisgICAgUmVzdG9yZSwKKyAgICBUcmFuc2xhdGUsCisgICAgUm90YXRl
LAorICAgIFNjYWxlLAorICAgIENvbmNhdGVuYXRlQ1RNLAorICAgIFNldFN0YXRlLAorICAgIFNl
dExpbmVDYXAsCisgICAgU2V0TGluZURhc2gsCisgICAgU2V0TGluZUpvaW4sCisgICAgU2V0TWl0
ZXJMaW1pdCwKKyAgICBDbGVhclNoYWRvdywKKyAgICBDbGlwLAorICAgIENsaXBPdXQsCisgICAg
Q2xpcE91dFRvUGF0aCwKKyAgICBDbGlwUGF0aCwKKyAgICBDbGlwQ29udmV4UG9seWdvbiwKKyAg
ICBEcmF3R2x5cGhzLAorICAgIERyYXdJbWFnZSwKKyAgICBEcmF3VGlsZWRJbWFnZSwKKyAgICBE
cmF3VGlsZWRTY2FsZWRJbWFnZSwKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAgICBEcmF3
TmF0aXZlSW1hZ2UsCisjZW5kaWYKKyAgICBEcmF3UGF0dGVybiwKKyAgICBEcmF3UmVjdCwKKyAg
ICBEcmF3TGluZSwKKyAgICBEcmF3TGluZXNGb3JUZXh0LAorICAgIERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIsCisgICAgRHJhd0VsbGlwc2UsCisgICAgRHJhd0NvbnZleFBvbHlnb24sCisgICAg
RHJhd1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1JlY3Rz
LAorICAgIEZpbGxSZWN0LAorICAgIEZpbGxSZWN0V2l0aENvbG9yLAorICAgIEZpbGxSZWN0V2l0
aEdyYWRpZW50LAorICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICBGaWxsUm91bmRlZFJlY3Qs
CisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisgICAgRmlsbFBhdGgsCisgICAgRmlsbEVs
bGlwc2UsCisgICAgU3Ryb2tlUmVjdCwKKyAgICBTdHJva2VQYXRoLAorICAgIFN0cm9rZUVsbGlw
c2UsCisgICAgQ2xlYXJSZWN0LAorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIsCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybiwg
Ly8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorICAgIEFwcGx5RmlsbFBh
dHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KKyNlbmRpZgor
ICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCit9OworCitjbGFzcyBJdGVtIDogcHVibGljIFJl
ZkNvdW50ZWQ8SXRlbT4geworcHVibGljOgorICAgIEl0ZW0oKSA9IGRlbGV0ZTsKKworICAgIEl0
ZW0oSXRlbVR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB+SXRlbSgpIHsgfQorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV90eXBlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCA9IDA7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEaXNwbGF5TGlzdEl0ZW0gPSB0cnVlOworCisgICAgdmlydHVhbCBib29sIGlzRHJh
d2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIC8vIEEgc3RhdGUg
aXRlbSBpcyBvbmUgcHJlc2VydmVkIGJ5IFNhdmUvUmVzdG9yZS4KKyAgICBib29sIGlzU3RhdGVJ
dGVtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1N0YXRlSXRlbVR5cGUobV90eXBl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1N0YXRlSXRlbVR5cGUoSXRlbVR5cGUgaXRl
bVR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7CisgICAgICAgIGNhc2Ug
SXRlbVR5cGU6OiBUcmFuc2xhdGU6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBSb3RhdGU6Cisg
ICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTY2FsZToKKyAgICAgICAgY2FzZSBJdGVtVHlwZTo6IENv
bmNhdGVuYXRlQ1RNOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0U3RhdGU6CisgICAgICAg
IGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0
TGluZURhc2g6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lSm9pbjoKKyAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6IFNldE1pdGVyTGltaXQ6CisgICAgICAgIGNhc2UgSXRlbVR5cGU6OiBD
bGVhclNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKKyAgICBX
VEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyNlbmRpZgorICAgIHN0YXRpYyBzaXpl
X3Qgc2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYpOworCitwcml2YXRlOgorICAgIEl0ZW1UeXBlIG1f
dHlwZTsKK307CisKK2NsYXNzIERyYXdpbmdJdGVtIDogcHVibGljIEl0ZW0geworcHVibGljOgor
ICAgIERyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCisgICAgICAgIDogSXRlbSh0eXBlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHNldEV4dGVudChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9l
eHRlbnQgPSByOyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBleHRlbnQoKSBjb25zdCB7IHJldHVy
biBtX2V4dGVudC52YWx1ZSgpOyB9CisKKyAgICBib29sIGV4dGVudEtub3duKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9CisKKyAgICAvLyBSZXR1cm4gYm91
bmRzIG9mIHRoaXMgZHJhd2luZyBvcGVyYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCisgICAg
Ly8gRG9lcyBub3QgaW5jbHVkZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFkb3cgZXRjIGluIHRo
ZSBzdGF0ZS4KKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gTnVsbG9wdDsgfQorCitwcml2YXRl
OgorICAgIHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGlu
YXRlcywgdGFraW5nIHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorfTsKKwor
Y2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNhdmU+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYXZlKTsKKyAg
ICB9CisKKyAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0IG9mIHRoZSBjb3JyZXNwb25k
aW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCisgICAgc2l6ZV90IHJlc3RvcmVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9CisgICAgdm9pZCBzZXRSZXN0b3Jl
SW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0gaW5kZXg7IH0KKworcHJpdmF0
ZToKKyAgICBTYXZlKCkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTYXZlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCisgICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9OworfTsKKworY2xh
c3MgUmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlc3Rv
cmU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXN0b3Jl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdG9yZSgpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6UmVzdG9yZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgVHJhbnNsYXRlIDog
cHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRy
YW5zbGF0ZSh4LCB5KSk7CisgICAgfQorCisgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1f
eDsgfQorICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KKworcHJpdmF0ZToKKyAg
ICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpU
cmFuc2xhdGUpCisgICAgICAgICwgbV94KHgpCisgICAgICAgICwgbV95KHkpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIGZsb2F0IG1feDsKKyAgICBmbG9hdCBtX3k7Cit9OworCitjbGFzcyBSb3Rh
dGUgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0
ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOworICAgIH0KKworICAgIGZsb2F0IGFuZ2xlKCkg
Y29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQorCitwcml2YXRlOgorICAgIFJvdGF0ZShmbG9hdCBh
bmdsZSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCisgICAgICAgICwgbV9hbmds
ZShhbmdsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFk
aWFucy4KK307CisKK2NsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2FsZShzaXplKSk7CisgICAgfQorCisgICAgY29u
c3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0
ZToKKyAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6U2NhbGUpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIEZsb2F0U2l6ZSBtX3NpemU7Cit9OworCitjbGFzcyBDb25jYXRlbmF0ZUNUTSA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTShtYXRyaXgpKTsKKyAgICB9CisKKyAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9
CisKK3ByaXZhdGU6CisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Cit9OworCitjbGFzcyBTZXRT
dGF0ZSA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNldFN0YXRlPiBj
cmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykpOworICAgIH0KKyAgICAKKyAgICBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlOyB9CisKKyAgICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICB2b2lkIGFj
Y3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lk
IGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICBzdGF0aWMg
dm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKK3ByaXZhdGU6
CisgICAgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAgICAgICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRTdGF0ZSkKKyAgICAgICAgLCBtX3N0YXRlKHN0YXRlLCBmbGFncykKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZTsKK307
CisKK2NsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxTZXRMaW5lQ2FwPiBjcmVhdGUoTGluZUNhcCBsaW5lQ2FwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUNhcChsaW5lQ2FwKSk7CisgICAgfQorICAgIAor
ICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQorCitwcml2
YXRlOgorICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorICAgICAgICA6IEl0ZW0oSXRl
bVR5cGU6OlNldExpbmVDYXApCisgICAgICAgICwgbV9saW5lQ2FwKGxpbmVDYXApCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIExpbmVDYXAgbV9saW5lQ2FwOworfTsKKworY2xhc3MgU2V0TGluZURh
c2ggOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4g
Y3JlYXRlKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZURhc2goZGFzaEFycmF5LCBk
YXNoT2Zmc2V0KSk7CisgICAgfQorCisgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBj
b25zdCB7IHJldHVybiBtX2Rhc2hBcnJheTsgfQorICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX2Rhc2hPZmZzZXQ7IH0KKworcHJpdmF0ZToKKyAgICBTZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpTZXRMaW5lRGFzaCkKKyAgICAgICAgLCBtX2Rhc2hBcnJheShkYXNoQXJy
YXkpCisgICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KworICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKKyAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7Cit9
OworCitjbGFzcyBTZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihsaW5lSm9pbikpOworICAgIH0K
KyAgICAKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47
IH0KKworcHJpdmF0ZToKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKKyAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKKyAgICAgICAgLCBtX2xpbmVKb2luKGxp
bmVKb2luKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luOworfTsK
KworY2xhc3MgU2V0TWl0ZXJMaW1pdCA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGltaXQobGltaXQpKTsKKyAgICB9CisKKyAg
ICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CisKK3By
aXZhdGU6CisgICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQorICAgICAgICA6IEl0
ZW0oSXRlbVR5cGU6OlNldE1pdGVyTGltaXQpCisgICAgICAgICwgbV9taXRlckxpbWl0KG1pdGVy
TGltaXQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKK307CisK
K2NsYXNzIENsZWFyU2hhZG93IDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBDbGVhclNoYWRvdyk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsZWFyU2hhZG93KCkK
KyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
fTsKKworLy8gRklYTUU6IHRyZWF0IGFzIERyYXdpbmdJdGVtPworY2xhc3MgQ2xpcCA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXA+IGNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwKHJl
Y3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQorCitwcml2YXRlOgorICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAg
ICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXApCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7Cit9OworCitjbGFzcyBDbGlwT3V0IDog
cHVibGljIEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IENsaXBPdXQocmVjdCkpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAgQ2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCisgICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dCkKKyAgICAgICAgLCBtX3Jl
Y3QocmVjdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisK
K2NsYXNzIENsaXBPdXRUb1BhdGggOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOworICAgIH0KKwor
ICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworcHJpdmF0
ZToKKyAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgUGF0aCBtX3BhdGg7Cit9OworCitjbGFzcyBDbGlwUGF0aCA6IHB1Ymxp
YyBJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENsaXBQYXRoPiBjcmVhdGUoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOworICAgIH0KKworICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICBXaW5kUnVsZSB3aW5k
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KKworcHJpdmF0ZToKKyAgICBDbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDbGlwUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBt
X3dpbmRSdWxlKHdpbmRSdWxlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBQYXRoIG1fcGF0aDsK
KyAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOworfTsKKworY2xhc3MgQ2xpcENvbnZleFBvbHlnb24g
OiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDbGlwQ29udmV4UG9seWdv
bj4gY3JlYXRlKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRz
LCBib29sIGFudGlhbGlhc2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xpcENvbnZleFBvbHlnb24obnVtYmVyT2ZQb2ludHMsIHBvaW50cywgYW50aWFsaWFzZWQpKTsK
KyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBvaW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnRzOyB9CisgICAgYm9vbCBhbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBt
X2FudGlhbGlhczsgfQorCitwcml2YXRlOgorICAgIENsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworCisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1fcG9pbnRzOworICAgIGJvb2wgbV9hbnRpYWxpYXM7
Cit9OworCitjbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHNt
b290aGluZ01vZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CisgICAgdm9pZCBzZXRCbG9j
a0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0
aW9uID0gYmxvY2tMb2NhdGlvbjsgfQorCisgICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KKworICAgIEZsb2F0UG9pbnQgYW5j
aG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9y
OyB9CisKKyAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYgZ2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKworICAgIHZv
aWQgY29tcHV0ZUJvdW5kcygpOworCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0OworCisgICAgUmVmPEZv
bnQ+IG1fZm9udDsKKyAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBoczsK
KyAgICBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7CisgICAgRmxv
YXRSZWN0IG1fYm91bmRzOworICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAgIEZs
b2F0U2l6ZSBtX2xvY2FsQW5jaG9yOworICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5n
TW9kZTsKK307CisKK2NsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgfQorCisgICAgY29uc3QgSW1hZ2UmIGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIEZsb2F0UmVjdCBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworcHJpdmF0ZToKKyAgICBEcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisKKyAgICBtdXRhYmxl
IFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0
aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11
dGFibGUuCisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CisgICAgRmxvYXRSZWN0IG1fc291
cmNlOworICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7Cit9
OworCitjbGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICB9
CisKKyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9CisgICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQor
ICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247
IH0KKworICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7
IH0KKyAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQor
Citwcml2YXRlOgorICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQorCisgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3
aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBz
aG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgorICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9u
OworICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7CisgICAgRmxvYXRTaXplIG1fdGlsZVNpemU7Cisg
ICAgRmxvYXRTaXplIG1fc3BhY2luZzsKKyAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdl
UGFpbnRpbmdPcHRpb25zOworfTsKKworY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkU2NhbGVk
SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rv
ciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGlu
Z09wdGlvbnMpKTsKKyAgICB9CisKKyAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CisgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgorICAgIERyYXdUaWxlZFNjYWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUg
aFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CisKKyAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcg
aW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3Vs
ZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Cisg
ICAgRmxvYXRSZWN0IG1fc291cmNlOworICAgIEZsb2F0U2l6ZSBtX3RpbGVTY2FsZUZhY3RvcjsK
KyAgICBJbWFnZTo6VGlsZVJ1bGUgbV9oUnVsZTsKKyAgICBJbWFnZTo6VGlsZVJ1bGUgbV92UnVs
ZTsKKyAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworfTsK
KworI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorY2xhc3MgRHJhd05hdGl2ZUltYWdlIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdOYXRpdmVJbWFn
ZT4gY3JlYXRlKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VQdHIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQorICAgIEZsb2F0UmVjdCBkZXN0aW5h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworcHJpdmF0ZToKKyAgICBE
cmF3TmF0aXZlSW1hZ2UoUGFzc05hdGl2ZUltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIHNlbGZT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pOworCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKworI2lm
IFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9pbWFnZVB0cjsKKyNlbmRpZgor
ICAgIEZsb2F0U2l6ZSBtX2ltYWdlU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsK
KyAgICBGbG9hdFJlY3QgbV9zcmNSZWN0OworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Cisg
ICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOworICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmllbnRh
dGlvbjsKK307CisjZW5kaWYKKworY2xhc3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3UGF0dGVybihpbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcCwgZGVzdFJlY3QsIGJsZW5kTW9kZSkpOworICAgIH0KKworICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Bh
dHRlcm5UcmFuc2Zvcm07IH0KKyAgICBGbG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVSZWN0OyB9CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQorICAgIEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBt
X3BoYXNlOyB9CisgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNp
bmc7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorCisgICAg
bXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4g
Y2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0
byBiZSBtdXRhYmxlLgorICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07Cisg
ICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Cisg
ICAgRmxvYXRQb2ludCBtX3BoYXNlOworICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7CisgICAgQ29t
cG9zaXRlT3BlcmF0b3IgbV9vcDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCisv
LyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5
ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCitjbGFzcyBCZWdpblRyYW5zcGFyZW5j
eUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7
CisgICAgfQorCisgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsg
fQorCitwcml2YXRlOgorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
KyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikK
KyAgICAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxv
YXQgbV9vcGFjaXR5OworfTsKKworY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RW5kVHJhbnNwYXJlbmN5TGF5
ZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbmRUcmFu
c3BhcmVuY3lMYXllcik7CisgICAgfQorCitwcml2YXRlOgorICAgIEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKK307CisKK2NsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdSZWN0PiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKKyAg
ICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAg
IGZsb2F0IGJvcmRlclRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNz
OyB9CisKK3ByaXZhdGU6CisgICAgRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdS
ZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fYm9yZGVyVGhpY2tuZXNz
KGJvcmRlclRoaWNrbmVzcykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxv
YXQgbV9ib3JkZXJUaGlja25lc3M7Cit9OworCitjbGFzcyBEcmF3TGluZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZT4gY3JlYXRlKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKKyAg
ICB9CisKKyAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQxOyB9
CisgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MjsgfQorCitw
cml2YXRlOgorICAgIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGlu
ZSkKKyAgICAgICAgLCBtX3BvaW50MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQy
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxv
YXRQb2ludCBtX3BvaW50MTsKKyAgICBGbG9hdFBvaW50IG1fcG9pbnQyOworfTsKKworY2xhc3Mg
RHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChi
bG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMs
IHN0cm9rZVdpZHRoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2Nh
dGlvbjsgfQorICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrTG9jYXRpb247IH0KKyAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9y
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQorICAgIEZsb2F0UG9pbnQgcG9pbnQo
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9CisgICAg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoczsgfQorICAg
IGJvb2wgaXNQcmludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KKyAgICBib29s
IGRvdWJsZUxpbmVzKCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQorCitwcml2YXRl
OgorICAgIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwg
Y29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVdpZHRoKQorICAgICAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0KQorICAgICAgICAsIG1f
YmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQorICAgICAgICAsIG1fbG9jYWxBbmNob3IobG9j
YWxBbmNob3IpCisgICAgICAgICwgbV93aWR0aHMod2lkdGhzKQorICAgICAgICAsIG1fc3Ryb2tl
V2lkdGgoc3Ryb2tlV2lkdGgpCisgICAgICAgICwgbV9wcmludGluZyhwcmludGluZykKKyAgICAg
ICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJsZUxpbmVzKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsK
KyAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKKyAgICBEYXNoQXJyYXkgbV93aWR0aHM7Cisg
ICAgZmxvYXQgbV9zdHJva2VXaWR0aDsKKyAgICBib29sIG1fcHJpbnRpbmc7CisgICAgYm9vbCBt
X2RvdWJsZUxpbmVzOworfTsKKworY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRo
LCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihw
b2ludCwgd2lkdGgsIHN0eWxlKSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KKyAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcikKKyAgICAgICAgLCBtX3BvaW50KHBvaW50KQor
ICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRQb2lu
dCBtX3BvaW50OworICAgIGZsb2F0IG1fd2lkdGg7CisgICAgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOworfTsKKworY2xhc3MgRHJhd0VsbGlwc2UgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBEcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRS
ZWN0IG1fcmVjdDsKK307CisKK2NsYXNzIERyYXdDb252ZXhQb2x5Z29uIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERyYXdDb252ZXhQb2x5Z29uPiBjcmVh
dGUoc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wg
YW50aWFsaWFzZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Q29u
dmV4UG9seWdvbihudW1iZXJPZlBvaW50cywgcG9pbnRzLCBhbnRpYWxpYXNlZCkpOworICAgIH0K
KworICAgIGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50PiYgcG9pbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludHM7IH0KKyAgICBib29sIGFudGlhbGlhc2VkKCkgY29uc3QgeyByZXR1cm4gbV9hbnRp
YWxpYXNlZDsgfQorCitwcml2YXRlOgorICAgIERyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1i
ZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzZWQpOworCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBtX3BvaW50
czsKKyAgICBib29sIG1fYW50aWFsaWFzZWQ7Cit9OworCitjbGFzcyBEcmF3UGF0aCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3UGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3UGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQorICAgICAgICAs
IG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorCisgICAgUGF0aCBtX3Bh
dGg7Cit9OworCitjbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0
IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0
aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBQYXRoJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV93aWR0aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRl
OgorICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAg
LCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBt
X2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBQYXRoIG1fcGF0aDsKKyAgICBpbnQgbV93aWR0aDsKKyAgICBpbnQgbV9vZmZz
ZXQ7CisgICAgQ29sb3IgbV9jb2xvcjsKK307CisKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNS
aW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpKTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4gcmVjdHMoKSBjb25zdCB7
IHJldHVybiBtX3JlY3RzOyB9CisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aDsgfQorICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIENv
bG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgs
IGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzKQorICAgICAgICAsIG1fcmVjdHMocmVjdHMpCisg
ICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
ICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdmlydHVhbCBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgVmVjdG9yPEludFJlY3Q+IG1fcmVjdHM7CisgICAgaW50IG1fd2lk
dGg7CisgICAgaW50IG1fb2Zmc2V0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBG
aWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxG
aWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIEZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RmlsbFJlY3QpCisgICAgICAgICwgbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworfTsKKworLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5oZXJpdCBmcm9tIEZpbGxS
ZWN0IHByb3Blci4KK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aENvbG9yPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcikpOworICAg
IH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAg
Q29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisKK3ByaXZhdGU6CisgICAg
RmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yKQor
ICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisK
KyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7Cit9OworCitjbGFzcyBG
aWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKKyAgICB9CisKKyAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgor
ICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudCkKKyAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2dyYWRpZW50KGdy
YWRpZW50KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBtdXRhYmxlIFJlZjxH
cmFkaWVudD4gbV9ncmFkaWVudDsgLy8gRklYTUU6IE1ha2UgdGhpcyBub3QgbXV0YWJsZQorfTsK
KworY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOworICAgIH0KKwor
ICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgQ29sb3Ig
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgQmxlbmRNb2Rl
IGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CisKK3ByaXZhdGU6Cisg
ICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAg
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0KQorICAgICAgICAs
IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9vcChv
cCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworICAgIENvbG9yIG1fY29sb3I7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9v
cDsKKyAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Cit9OworCitjbGFzcyBGaWxsUm91bmRlZFJl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbFJv
dW5kZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9k
ZTsgfQorCitwcml2YXRlOgorICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAg
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKKyAgICAgICAgLCBt
X3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICAgICAsIG1fYmxlbmRN
b2RlKGJsZW5kTW9kZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisKKyAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVj
dDsKKyAgICBDb2xvciBtX2NvbG9yOworICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKK307CisK
K2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
KTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQorICAgIENvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorCitwcml2YXRlOgorICAgIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQorICAgICAgICAsIG1fcmVjdChyZWN0
KQorICAgICAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBGbG9h
dFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OworICAgIENvbG9yIG1fY29sb3I7Cit9Owor
CitjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7CisgICAgfQorCisgICAgY29u
c3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCitwcml2YXRlOgorICAg
IEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkZpbGxQYXRoKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCk7IH0KKworICAgIFBhdGggbV9wYXRoOworfTsKKworY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworcHJpdmF0ZToKKyAgICBGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxFbGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICBGbG9hdFJl
Y3QgbV9yZWN0OworfTsKKworY2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOworICAgIH0KKworICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgZmxvYXQgbGluZVdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQor
ICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgZmxvYXQg
bV9saW5lV2lkdGg7Cit9OworCitjbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRo
JiBwYXRoLCBjb25zdCBGbG9hdFBvaW50JiBtX2Jsb2NrTG9jYXRpb24pCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VQYXRoKHBhdGgsIG1fYmxvY2tMb2NhdGlvbikp
OworICAgIH0KKworICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KKyAgICBj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xv
Y2F0aW9uOyB9CisgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQorCitwcml2YXRlOgorICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbikKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
U3Ryb2tlUGF0aCkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX2Jsb2NrTG9j
YXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKworICAgIG11dGFibGUgUGF0aCBtX3BhdGg7CisgICAgRmxvYXRQb2ludCBtX2Js
b2NrTG9jYXRpb247Cit9OworCitjbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZUVsbGlwc2U+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
dHJva2VFbGxpcHNlKHJlY3QpKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorCitwcml2YXRlOgorICAgIFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlKQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgRmxvYXRSZWN0IG1fcmVjdDsKK307CisKK2NsYXNz
IENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxDbGVhclJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkpOworICAgIH0KKworICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKK3ByaXZhdGU6CisgICAg
Q2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6Q2xlYXJSZWN0KQorICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAg
RmxvYXRSZWN0IG1fcmVjdDsKK307CisKKyNpZiBVU0UoQ0cpCitjbGFzcyBBcHBseVN0cm9rZVBh
dHRlcm4gOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBcHBseVN0cm9r
ZVBhdHRlcm4+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBB
cHBseVN0cm9rZVBhdHRlcm4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBcHBseVN0cm9rZVBh
dHRlcm4oKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybikKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworfTsKKworY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisgICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworfTsKKyNlbmRpZgor
CitjbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0IHNjYWxl
RmFjdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOworICAgIH0KKworICAgIGZsb2F0IHNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQorCitwcml2YXRlOgorICAgIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgICAgIDogSXRlbShJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKKyAgICAgICAgLCBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOwor
fTsKKworLy8gRklYTUU6IHRoaXMgbmVlZHMgdG8gbW92ZS4KK3ZvaWQgYWRkQ29udmV4UG9seWdv
blRvUGF0aChQYXRoJiwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCopOworCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJdGVtJik7CisKK30gLy8g
bmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKworI2RlZmlu
ZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVU
eXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2Jq
ZWN0LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlz
RHJhd2luZ0l0ZW0oKSkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5
cGVOYW1lOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShUcmFuc2xhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUm90YXRlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNj
YWxlKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVuYXRl
Q1RNKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVDYXApCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZURhc2gpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUpvaW4pCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1pdCkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXQpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQ2xpcE91dFRvUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShDbGlwUGF0aCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShDbGlwQ29udmV4UG9seWdvbikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3R2x5cGhzKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3VGlsZWRJbWFnZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3VGlsZWRTY2FsZWRJbWFnZSkKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCisjZW5kaWYK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0dGVybikKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZSkKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlwc2UpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0NvbnZleFBvbHlnb24pCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgpCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1JlY3RzKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9yKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3NpdGVk
UmVjdCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91bmRl
ZFJlY3QpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RmlsbFBhdGgpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVs
bGlwc2UpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVj
dCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5
TGF5ZXIpCisjaWYgVVNFKENHKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQorI2VuZGlmCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKKworI2VuZGlmIC8vIERpc3Bs
YXlMaXN0SXRlbXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFjMDE4MjU0OGM4MWVjZWI3ZTg5OWFiZDNjOTNhMDY4MjI5NjYzMjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTAsMCArMSw0ODkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKKworUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGJhc2VDVE0pCisgICAgOiBtX2dyYXBoaWNz
Q29udGV4dChjb250ZXh0KQorICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKK3sKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdp
dGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKKworICAgIC8vIEZJWE1FOiBob29rIHVwIHJlY29y
ZGVyIGluIHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgLy8gbV9ncmFwaGljc0NvbnRleHQuc2V0
RGlzcGxheUxpc3RSZWNvcmRlcih0aGlzKTsKKyAgICBtX3N0YXRlU3RhY2suYXBwZW5kKENvbnRl
eHRTdGF0ZShiYXNlQ1RNLCBpbml0aWFsQ2xpcCkpOworfQorCitSZWNvcmRlcjo6flJlY29yZGVy
KCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBm
aXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgorICAgIExPRyhEaXNw
bGF5TGlzdHMsICJSZWNvcmRlZCBkaXNwbGF5IGxpc3Q6XG4lcyIsIG1fZGlzcGxheUxpc3QuZGVz
Y3JpcHRpb24oKS5kYXRhKCkpOworfQorCit2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShj
b25zdCBJdGVtJiBpdGVtKQoreworICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKQorI2lmIFVT
RShDRykKKyAgICAgICAgfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0
dGVybiB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuCisjZW5k
aWYKKyAgICApIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hh
bmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOworICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hh
bmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwor
ICAgICAgICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsKKyAgICAgICAgICAgIExPR19XSVRI
X1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0
ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBj
aGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOworICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQo
U2V0U3RhdGU6OmNyZWF0ZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3Rh
dGUpKTsKKyAgICAgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKKyAgICAg
ICAgICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9z
dGF0ZTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2lu
ZyA9IHRydWU7CisgICAgfQorfQorCit2b2lkIFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3Vt
dWxhdGUoc3RhdGUsIGZsYWdzKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQor
eworICAgIGFwcGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBSZWNv
cmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit7CisgICAgYXBwZW5kSXRlbShTZXRM
aW5lQ2FwOjpjcmVhdGUobGluZUNhcCkpOworfQorCit2b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBh
cHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVhdGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7Cit9
CisKK3ZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQoreworICAg
IGFwcGVuZEl0ZW0oU2V0TGluZUpvaW46OmNyZWF0ZShsaW5lSm9pbikpOworfQorCit2b2lkIFJl
Y29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCit7CisgICAgYXBwZW5kSXRl
bShTZXRNaXRlckxpbWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkpOworfQorCit2b2lkIFJlY29yZGVy
OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgRmxvYXRQb2ludCBi
bG9ja0xvY2F0aW9uID0gbV9jYWNoaW5nID8gbV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQb2ludCgp
OworICAgIEZsb2F0U2l6ZSBsb2NhbEFuY2hvciA9IHN0YXJ0UG9pbnQgLSBibG9ja0xvY2F0aW9u
OworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVu
ZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwg
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgYmxvY2tMb2NhdGlvbiwgbG9j
YWxBbmNob3IsIHNtb290aGluZ01vZGUpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdJbWFnZTo6
Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykp
KTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpk
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMp
KSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKworI2lmIFVTRShDRykgfHwg
VVNFKENBSVJPKQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKFBhc3NOYXRpdmVJbWFn
ZVB0ciBpbWFnZVB0ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7
CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZVB0ciwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pKSk7CisgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKK30KKyNlbmRpZgorCit2b2lkIFJlY29yZGVyOjpkcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6
OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZElt
YWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3Rvciwg
aFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBkZXN0UmVjdCwg
YmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OnNhdmUoKQoreworICAgIGFwcGVuZEl0ZW0oU2F2ZTo6Y3JlYXRlKCkpOworICAg
IG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUobV9k
aXNwbGF5TGlzdC5zaXplKCkgLSAxKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQor
eworICAgIGlmICghbV9zdGF0ZVN0YWNrLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGJvb2wgc3RhdGVVc2VkRm9yRHJhd2luZyA9IGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JE
cmF3aW5nOworICAgIHNpemVfdCBzYXZlSW5kZXggPSBjdXJyZW50U3RhdGUoKS5zYXZlSXRlbUlu
ZGV4OworICAgIAorICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgLy8gSGF2ZSB0
byBhdm9pZCBlbGlkaW5nIG5lc3RlZCBTYXZlL1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3Rh
dGUgY29udGFpbnMgZHJhd2luZyBpdGVtcy4KKyAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9y
RHJhd2luZyB8PSBzdGF0ZVVzZWRGb3JEcmF3aW5nOworCisgICAgaWYgKCFzdGF0ZVVzZWRGb3JE
cmF3aW5nICYmIHNhdmVJbmRleCkgeworICAgICAgICAvLyBUaGlzIFNhdmUvUmVzdG9yZSBkaWRu
J3QgY29udGFpbiBhbnkgZHJhd2luZyBpdGVtcy4gUm9sbCBiYWNrIHRvIGp1c3QgYmVmb3JlIHRo
ZSBsYXN0IHNhdmUuCisgICAgICAgIG1fZGlzcGxheUxpc3QucmVtb3ZlSXRlbXNGcm9tSW5kZXgo
c2F2ZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGVuZEl0ZW0oUmVz
dG9yZTo6Y3JlYXRlKCkpOworICAgIAorICAgIGlmIChzYXZlSW5kZXgpIHsKKyAgICAgICAgU2F2
ZSYgc2F2ZUl0ZW0gPSBkb3duY2FzdDxTYXZlPihtX2Rpc3BsYXlMaXN0Lml0ZW1BdChzYXZlSW5k
ZXgpKTsKKyAgICAgICAgc2F2ZUl0ZW0uc2V0UmVzdG9yZUluZGV4KG1fZGlzcGxheUxpc3Quc2l6
ZSgpIC0gMSk7CisgICAgfQorfQorCit2b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7CisgICAgYXBw
ZW5kSXRlbShUcmFuc2xhdGU6OmNyZWF0ZSh4LCB5KSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJv
dGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUo
YW5nbGVJblJhZGlhbnMpOworICAgIGFwcGVuZEl0ZW0oUm90YXRlOjpjcmVhdGUoYW5nbGVJblJh
ZGlhbnMpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQoreworICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOworICAgIGFwcGVuZEl0ZW0oU2Nh
bGU6OmNyZWF0ZShzaXplKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRD
VE0odHJhbnNmb3JtKTsKKyAgICBhcHBlbmRJdGVtKENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUodHJh
bnNmb3JtKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5
KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBhcHBlbmRJdGVtKEVuZFRyYW5zcGFyZW5j
eUxheWVyOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQoreworICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1JlY3Q6OmNy
ZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0
ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZTo6Y3JlYXRlKHBv
aW50MSwgcG9pbnQyKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBm
bG9hdCBzdHJva2VUaGlja25lc3MpCit7CisgICAgRmxvYXRQb2ludCBibG9ja0xvY2F0aW9uID0g
bV9jYWNoaW5nID8gbV9ibG9ja0xvY2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgIEZsb2F0U2l6
ZSBsb2NhbEFuY2hvciA9IHBvaW50IC0gYmxvY2tMb2NhdGlvbjsKKyAgICBEcmF3aW5nSXRlbSYg
bmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lc0ZvclRl
eHQ6OmNyZWF0ZShibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcykpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgR3JhcGhpY3NDb250ZXh0OjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9
IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXI6OmNyZWF0ZShwb2ludCwgd2lkdGgsIHN0eWxlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKERyYXdFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICB1cGRhdGVJ
dGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Q29udmV4UG9seWdv
bihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBh
bnRpYWxpYXNlZCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKERyYXdDb252ZXhQb2x5Z29uOjpjcmVhdGUobnVtYmVyT2ZQb2lu
dHMsIHBvaW50cywgYW50aWFsaWFzZWQpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAg
ICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVt
KERyYXdQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0p
OworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGlu
dCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIERyYXdpbmdJ
dGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3Vz
UmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKEZpbGxSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVj
dCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSkp
OworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBEcmF3aW5nSXRlbSYg
bmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVk
UmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwg
YmxlbmRNb2RlKSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxQYXRo
OjpjcmVhdGUocGF0aCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShG
aWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0
PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lk
dGgpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIEZsb2F0UG9pbnQgYmxvY2tM
b2NhdGlvbiA9IG1fY2FjaGluZyA/IG1fYmxvY2tMb2NhdGlvbiA6IEZsb2F0UG9pbnQoKTsKKyAg
ICBQYXRoIHRyYW5zbGF0ZWQgPSBwYXRoOworICAgIHRyYW5zbGF0ZWQudHJhbnNsYXRlKC1GbG9h
dFNpemUoYmxvY2tMb2NhdGlvbi54KCksIGJsb2NrTG9jYXRpb24ueSgpKSk7CisgICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VQ
YXRoOjpjcmVhdGUocGF0aCwgYmxvY2tMb2NhdGlvbikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50
KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3sKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSkpOwor
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKKyNpZiBVU0UoQ0cpCit2b2lkIFJl
Y29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQoreworICAgIGFwcGVuZEl0ZW0oQXBwbHlTdHJv
a2VQYXR0ZXJuOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRl
cm4oKQoreworICAgIGFwcGVuZEl0ZW0oQXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCkpOworfQor
I2VuZGlmCisKK3ZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOworICAgIGFwcGVu
ZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kSXRlbShDbGlwT3V0OjpjcmVhdGUo
cmVjdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgYXBwZW5kSXRlbShDbGlwT3V0VG9QYXRoOjpjcmVhdGUocGF0aCkpOworfQorCit2b2lk
IFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
K3sKKyAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKSk7CisgICAgYXBwZW5kSXRlbShDbGlwUGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRS
dWxlKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Q
b2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXMpCit7CisgICAg
UGF0aCBwb2x5Z29uUGF0aDsKKyAgICBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKHBvbHlnb25QYXRo
LCBudW1Qb2ludHMsIHBvaW50cyk7CisgICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRl
cnNlY3QocG9seWdvblBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKKworICAgIGFwcGVuZEl0ZW0o
Q2xpcENvbnZleFBvbHlnb246OmNyZWF0ZShudW1Qb2ludHMsIHBvaW50cywgYW50aWFsaWFzKSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpCit7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwg
d2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCisgICAgLy8g
QXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICBhcHBlbmRJdGVtKEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZpY2VTY2FsZUZhY3RvcikpOworfQorCitJ
dGVtJiBSZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVtKQoreworICAgIHdpbGxB
cHBlbmRJdGVtKGl0ZW0uZ2V0KCkpOworICAgIHJldHVybiBtX2Rpc3BsYXlMaXN0LmFwcGVuZChX
VEZNb3ZlKGl0ZW0pKTsKK30KKwordm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3
aW5nSXRlbSYgaXRlbSkgY29uc3QKK3sKKyAgICBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0
ID0gaXRlbS5sb2NhbEJvdW5kcyhtX2dyYXBoaWNzQ29udGV4dCkpCisgICAgICAgIGl0ZW0uc2V0
RXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcyhyZWN0LnZhbHVlKCkpKTsKK30KKworLy8gRklY
TUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQorc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWlu
dGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQoreworICAgIC8vIEJsdXJyaW5nIHVzZXMgYSBH
YXVzc2lhbiBmdW5jdGlvbiB3aG9zZSBzdGQuIGRldmlhdGlvbiBpcyBtX3JhZGl1cy8yLCBhbmQg
d2hpY2ggaW4gdGhlb3J5CisgICAgLy8gZXh0ZW5kcyB0byBpbmZpbml0eS4gSW4gOC1iaXQgY29u
dGV4dHMsIGhvd2V2ZXIsIHJvdW5kaW5nIGNhdXNlcyB0aGUgZWZmZWN0IHRvIGJlY29tZQorICAg
IC8vIHVuZGV0ZWN0YWJsZSBhdCBhcm91bmQgMS40eCB0aGUgcmFkaXVzLgorICAgIGNvbnN0IGZs
b2F0IHJhZGl1c0V4dGVudE11bHRpcGxpZXIgPSAxLjQ7CisgICAgcmV0dXJuIGNlaWxmKGJsdXJS
YWRpdXMgKiByYWRpdXNFeHRlbnRNdWx0aXBsaWVyKTsKK30KKworRmxvYXRSZWN0IFJlY29yZGVy
OjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAorewor
ICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OworICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgc3Rh
dGUgPSBjdXJyZW50U3RhdGUoKTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAg
ZmxvYXQgc2hhZG93UmFkaXVzOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIGlmIChtX2dy
YXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKSkgeworICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50PSBib3VuZHM7CisgICAg
ICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CisgICAgICAgIHNoYWRvd0V4dGVu
dC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOworICAgICAgICBi
b3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKKyAgICB9CisgICAgCisgICAgRmxvYXRSZWN0IGNs
aXBwZWRFeHRlbnQgPSBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgYm91bmRzKTsKKyAg
ICByZXR1cm4gc3RhdGUuY3RtLm1hcFJlY3QoY2xpcHBlZEV4dGVudCk7Cit9CisKK2NvbnN0IFJl
Y29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3RhdGUoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKK30KKworUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRT
dGF0ZSgpCit7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOworICAgIHJldHVybiBt
X3N0YXRlU3RhY2subGFzdCgpOworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVy
OjpjdG0oKSBjb25zdAoreworICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Cit9CisKK2Nv
bnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAoreworICAgIHJldHVy
biBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOworfQorCit2b2lkIFJlY29yZGVyOjpDb250ZXh0
U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIGN0bS50cmFuc2xhdGUo
eCwgeSk7CisgICAgY2xpcEJvdW5kcy5tb3ZlKC14LCAteSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIGRvdWJs
ZSBhbmdsZUluRGVncmVlcyA9IHJhZDJkZWcoc3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFk
aWFucykpOworICAgIGN0bS5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworICAgIAorICAgIEFmZmlu
ZVRyYW5zZm9ybSByb3RhdGlvbjsKKyAgICByb3RhdGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMp
OworCisgICAgaWYgKE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gaW52ZXJzZSA9IHJvdGF0aW9u
LmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJvdW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0
KGNsaXBCb3VuZHMpOworfQorCit2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBjdG0uc2NhbGUoc2l6ZSk7CisgICAgY2xpcEJv
dW5kcy5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbWF0cml4KQoreworICAgIGN0bSAqPSBtYXRyaXg7CisKKyAgICBpZiAoT3B0aW9uYWw8QWZm
aW5lVHJhbnNmb3JtPiBpbnZlcnNlID0gbWF0cml4LmludmVyc2UoKSkKKyAgICAgICAgY2xpcEJv
dW5kcyA9IGludmVyc2UudmFsdWUoKS5tYXBSZWN0KGNsaXBCb3VuZHMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRjMjY0ODc1NzQzMzM0YjkzOTFi
YzIwMTcyNWE2MzI0YjcxYmJhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTAs
MCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBEaXNwbGF5TGlzdFJlY29yZGVyX2gKKyNkZWZpbmUgRGlzcGxheUxpc3RSZWNv
cmRlcl9oCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIiAvLyBGb3IgSW50ZXJwb2xhdGlvblF1YWxpdHkuCisjaW5jbHVkZSAiSW1hZ2UuaCIg
Ly8gRm9yIEltYWdlOjpUaWxlUnVsZS4KKyNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9h
dFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR2x5cGhCdWZmZXI7CitjbGFzcyBGbG9h
dFBvaW50OworY2xhc3MgRm9udDsKK2NsYXNzIEltYWdlOworCitzdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGU7CitzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CisKK25hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdJdGVtOworCitjbGFzcyBSZWNvcmRlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOworcHVibGljOgorICAgIFJlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgflJlY29yZGVyKCk7CisKKyAgICB2b2lk
IHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKKworICAg
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpv
aW4pOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7CisKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRp
ZW50Jik7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CisgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBm
aWxsUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdp
ZHRoKTsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwor
ICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOworI2VuZGlmCisKKyAgICB2b2lkIGRyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisK
KyAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwor
ICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsK
KyAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShQYXNzTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6
ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbik7
CisjZW5kaWYKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgQmxlbmRNb2RlID0gQmxlbmRNb2RlTm9ybWFsKTsKKworICAgIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzKTsKKyAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlKTsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQg
ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50
KiwgYm9vbCBhbnRpYWxpYXNlZCk7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisK
KyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGludCB3aWR0aCwgaW50IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPElu
dFJlY3Q+JiwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOworCisgICAgdm9p
ZCBzYXZlKCk7CisgICAgdm9pZCByZXN0b3JlKCk7CisKKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Cisg
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIGNvbmNhdENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKKworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KTsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJik7CisgICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6
ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgYW50aWFsaWFzKTsKKyAgICAK
KyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOworCisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0LnNpemUoKTsgfQorCitwcml2YXRlOgor
ICAgIEl0ZW0mIGFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYpOworICAgIHZvaWQgd2lsbEFwcGVuZEl0
ZW0oY29uc3QgSXRlbSYpOworCisgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhj
b25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2lu
Z0l0ZW0mKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNv
bnN0OworICAgIGNvbnN0IEZsb2F0UmVjdCYgY2xpcEJvdW5kcygpIGNvbnN0OworCisgICAgc3Ry
dWN0IENvbnRleHRTdGF0ZSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07CisgICAgICAg
IEZsb2F0UmVjdCBjbGlwQm91bmRzOworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSBzdGF0ZUNoYW5nZTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbGFzdERyYXdpbmdT
dGF0ZTsKKyAgICAgICAgYm9vbCB3YXNVc2VkRm9yRHJhd2luZyB7IGZhbHNlIH07CisgICAgICAg
IHNpemVfdCBzYXZlSXRlbUluZGV4IHsgMCB9OworICAgICAgICAKKyAgICAgICAgQ29udGV4dFN0
YXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNs
aXApCisgICAgICAgICAgICA6IGN0bSh0cmFuc2Zvcm0pCisgICAgICAgICAgICAsIGNsaXBCb3Vu
ZHMoY2xpcCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDb250ZXh0
U3RhdGUgY2xvbmVGb3JTYXZlKHNpemVfdCBzYXZlSW5kZXgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIENvbnRleHRTdGF0ZSBzdGF0ZShjdG0sIGNsaXBCb3VuZHMpOworICAgICAgICAg
ICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKKyAgICAgICAgICAgIHN0YXRlLmxh
c3REcmF3aW5nU3RhdGUgPSBsYXN0RHJhd2luZ1N0YXRlOworICAgICAgICAgICAgc3RhdGUuc2F2
ZUl0ZW1JbmRleCA9IHNhdmVJbmRleDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAg
ICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgICAgIHZvaWQgc2NhbGUo
Y29uc3QgRmxvYXRTaXplJik7CisgICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOworICAgIH07CisgICAgCisgICAgY29uc3QgQ29udGV4dFN0YXRlJiBjdXJyZW50
U3RhdGUoKSBjb25zdDsKKyAgICBDb250ZXh0U3RhdGUmIGN1cnJlbnRTdGF0ZSgpOworCisgICAg
R3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCYgbV9k
aXNwbGF5TGlzdDsKKworICAgIGJvb2wgbV9jYWNoaW5nIHsgZmFsc2UgfTsKKyAgICBGbG9hdFBv
aW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICAKKyAgICBWZWN0b3I8Q29udGV4dFN0YXRlLCAzMj4g
bV9zdGF0ZVN0YWNrOworfTsKKworfQorfQorCisjZW5kaWYgLy8gRGlzcGxheUxpc3RSZWNvcmRl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTAzODc2ODYxNzgyYTVkYTdlNzA0NThjMGVjZTgwMzg2NTU5Y2Y1ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdFJlcGxheWVyLmgiCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitSZXBsYXllcjo6UmVwbGF5ZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qp
CisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQorICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCit7Cit9CisKK1JlcGxheWVyOjp+UmVwbGF5ZXIoKQoreworfQorCit2b2lkIFJlcGxheWVy
OjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCkKK3sKKyAgICBMT0dfV0lUSF9T
VFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVwbGF5aW5nIHdpdGggY2xpcCAiIDw8
IGluaXRpYWxDbGlwKTsKKyAgICBVTlVTRURfUEFSQU0oaW5pdGlhbENsaXApOworCisgICAgc2l6
ZV90IG51bUl0ZW1zID0gbV9kaXNwbGF5TGlzdC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1JdGVtczsgKytpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2Rpc3BsYXlM
aXN0Lmxpc3QoKVtpXS5nZXQoKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0
cywgc3RyZWFtIDw8ICJkcmF3aW5nICAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOworICAgICAgICBp
dGVtLmFwcGx5KG1fY29udGV4dCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5
TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFhYmJhZWYwMTI4YzQxMzQxY2NhZjk1ZDk4NDM3MmFjZTNm
ZDJjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERpc3Bs
YXlMaXN0UmVwbGF5ZXJfaAorI2RlZmluZSBEaXNwbGF5TGlzdFJlcGxheWVyX2gKKworI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFm
ZmluZVRyYW5zZm9ybTsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsK
KworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3Q7CisKK2NsYXNz
IFJlcGxheWVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZXBsYXllcik7CitwdWJsaWM6
CisgICAgUmVwbGF5ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRGlzcGxheUxpc3QmKTsKKyAg
ICB+UmVwbGF5ZXIoKTsKKworICAgIHZvaWQgcmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXApOworCitwcml2YXRlOgorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0
OworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworfTsKKworfQorfQorCisjZW5kaWYg
Ly8gRGlzcGxheUxpc3RSZXBsYXllcl9oCg==
</data>
<flag name="review"
          id="293395"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>