<?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>204714</bug_id>
          
          <creation_ts>2019-11-30 02:56:08 -0800</creation_ts>
          <short_desc>Move path implementation functions in LineLayoutTraversal to *Path classes</short_desc>
          <delta_ts>2019-11-30 08:32:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1594295</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-30 02:56:08 -0800</bug_when>
    <thetext>Simplify the design and make it easier to extend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594296</commentid>
    <comment_count>1</comment_count>
      <attachid>384536</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-30 03:06:56 -0800</bug_when>
    <thetext>Created attachment 384536
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594297</commentid>
    <comment_count>2</comment_count>
      <attachid>384537</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-30 03:36:30 -0800</bug_when>
    <thetext>Created attachment 384537
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594298</commentid>
    <comment_count>3</comment_count>
      <attachid>384538</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-30 04:10:11 -0800</bug_when>
    <thetext>Created attachment 384538
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594306</commentid>
    <comment_count>4</comment_count>
      <attachid>384541</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-30 04:44:05 -0800</bug_when>
    <thetext>Created attachment 384541
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594311</commentid>
    <comment_count>5</comment_count>
      <attachid>384541</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-11-30 06:49:31 -0800</bug_when>
    <thetext>Comment on attachment 384541
patch

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

&gt; Source/WebCore/rendering/line/LineLayoutTraversalComplexPath.h:39
&gt; +        , m_sortedInlineTextBoxes(WTFMove(sortedInlineTextBoxes))

We do this all over, so maybe there is a good reason for it, but I don&apos;t think this WTFMove() is necessary. sortedInlineTextBoxes is already an rvalue, so the move constructor of m_sortedInlineTextBoxes should be used regardless.

&gt; Source/WebCore/rendering/line/LineLayoutTraversalSimplePath.h:69
&gt; +        // FIXME: SLL can contains &lt;br&gt; runs and this should skip over them.

I would spell out SimpleLineLayout here instead of using SSL, took me a minute to figure out what it meant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594317</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-30 07:28:55 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/rendering/line/LineLayoutTraversalComplexPath.h:39
&gt; &gt; +        , m_sortedInlineTextBoxes(WTFMove(sortedInlineTextBoxes))
&gt; 
&gt; We do this all over, so maybe there is a good reason for it, but I don&apos;t
&gt; think this WTFMove() is necessary. sortedInlineTextBoxes is already an
&gt; rvalue, so the move constructor of m_sortedInlineTextBoxes should be used
&gt; regardless.

This compiles:

struct Bar {
    Bar(Bar&amp;&amp;) = default;
    Bar(const Bar&amp;) = delete;
};

struct Foo {
    Foo(Bar&amp;&amp; bar) : bar(WTFMove(bar)) { }
    Bar bar;
};

This doesn&apos;t (Call to deleted constructor of &apos;Bar&apos;):

struct Foo {
    Foo(Bar&amp;&amp; bar) : bar(bar) { }
    Bar bar;
};

If you leave WTFMove out you&apos;ll accidentally invoke copy constructor, if any.

https://en.cppreference.com/w/cpp/utility/move says:

&quot;Names of rvalue reference variables are lvalues and have to be converted to xvalues to be bound to the function overloads that accept rvalue reference parameters&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594320</commentid>
    <comment_count>7</comment_count>
      <attachid>384543</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-30 07:48:20 -0800</bug_when>
    <thetext>Created attachment 384543
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594323</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-11-30 08:22:49 -0800</bug_when>
    <thetext>🤘</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594324</commentid>
    <comment_count>9</comment_count>
      <attachid>384543</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-30 08:31:03 -0800</bug_when>
    <thetext>Comment on attachment 384543
patch

Clearing flags on attachment: 384543

Committed r252959: &lt;https://trac.webkit.org/changeset/252959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594325</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-30 08:31:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1594326</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-30 08:32:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/57540053&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384536</attachid>
            <date>2019-11-30 03:06:56 -0800</date>
            <delta_ts>2019-11-30 03:36:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>linelayouttraversal-simplify.patch</filename>
            <type>text/plain</type>
            <size>37024</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmYxYjdkNDQ0Yy4uOGRiNjA4YzdiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMzAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgcGF0aCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgaW4gTGluZUxh
eW91dFRyYXZlcnNhbCB0byAqUGF0aCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSBMaW5lTGF5b3V0VHJhdmVyc2FsIGFuZCBt
YWtlIGl0IGVhc2llciB0byBleHRlbmQuCisKKyAgICAgICAgLSBUdXJuIFNpbXBsZVBhdGggYW5k
IENvbXBsZXhQYXRoIHN0cnVjdHMgaW50byBjbGFzc2VzCisgICAgICAgIC0gTW92ZSB0aGVtIHRv
IHNlcGFyYXRlIGZpbGVzCisgICAgICAgIC0gTWFrZSBwYXRoIGltcGxlbWVudGF0aW9uIGZ1bmN0
aW9ucyBjbGFzcyBtZW1iZXJzLCBjYWxsZWQgdmlhIGdlbmVyaWMgbGFtYmRhcworICAgICAgICAt
IEluc3RlYWQgb2YgaW5oZXJpdGluZyBCb3gvVGV4dEJveCB0byBpdGVyYXRvcnMsIG1ha2UgaXQg
YSBtZW1iZXIgdmFyaWFibGUuCisgICAgICAgIC0gTW92ZSB0aGUgcGF0aCB2YXJpYW50IHRvIEJv
eCwgYXZvaWRpbmcgdXNlIG9mIHRlbXBsYXRlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRCb3gpOgorICAgICAgICAqIHJlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjp0cmF2
ZXJzZU5leHRJblZpc3VhbE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5UZXh0T3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRv
cj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRC
b3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjphdEVu
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
SXRlcmF0b3I6OkNvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yLT4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJh
dG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRv
ci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6cmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpCb3g6OmxvZ2lj
YWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJv
eDo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aGFzSHlwaGVuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6OlRleHRC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6dGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
Ojpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRU
cmF2ZXJzYWw6OlRleHRCb3g6OmxvY2FsRW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6Omxlbmd0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94Ojppc0xhc3RPbkxpbmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aXNM
YXN0IGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g8SXRlcmF0b3I+OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDxJdGVyYXRvcj46OmxvZ2lj
YWxSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OkJveDxJdGVyYXRvcj46OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9y
Pjo6ZGlyT3ZlcnJpZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6aXNMaW5lQnJlYWsgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6
aXRlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omhhc0h5cGhlbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6
dGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9y
Pjo6bG9jYWxFbmRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omxlbmd0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJh
dG9yPjo6aXNMYXN0T25MaW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g8SXRlcmF0b3I+Ojppc0xhc3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNv
bXBsZXhQYXRoOjpDb21wbGV4UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpDb21wbGV4UGF0aDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGVmdFRvUmln
aHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNh
bDo6Q29tcGxleFBhdGg6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6aGFzSHlwaGVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQ
YXRoOjp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6
OkNvbXBsZXhQYXRoOjpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bGVu
Z3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBs
ZXhQYXRoOjppc0xhc3RPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6dHJhdmVyc2VOZXh0VGV4dEJveElu
VmlzdWFsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29t
cGxleFBhdGg6OnRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6YXRF
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxl
eFBhdGg6OmlubGluZVRleHRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6Om5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQ
YXRoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6U2ltcGxlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpTaW1wbGVQYXRoOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6ZGlyT3ZlcnJpZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aGFzSHlwaGVuIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0
aDo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMYXN0
T25MaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNp
bXBsZVBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJz
ZU5leHRUZXh0Qm94SW5UZXh0T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6U2ltcGxlUGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjphdEVuZCBjb25zdCk6CisKIDIwMTkt
MTEtMjkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJ
RkNdIEFkZCBzdXBwb3J0IGZvciBzaW1wbGUgaHlwaGVuYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxYTZmMTg4MDgxOC4u
MzVjMjgyOTlmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTQ3OTQsNiArNDc5NCw4IEBACiAJCUU0Mjk1RkE0MTJCMDYxNEUw
MEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291
cmNlTG9hZFByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQyRTc2REMxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDJFNzZEQjFDN0FG
Nzc2MDBFMzYxNEQgLyogU3R5bGVVcGRhdGUuaCAqLzsgfTsKIAkJRTQzMTA1QkIxNjc1MEYxNjAw
REIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2Fs
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQz
NDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyMTIz
OTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLzsgfTsK
KwkJRTQzNDNEMjUyMzkyNzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQz
NDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5o
ICovOyB9OwogCQlFNDNBMDIzQjE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTAyM0ExN0VC
MzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2Fj
aGVWYWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDNBRjhFNTFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0MEFBOTYxQzY4
NDIwODAwQTI2NUNDIC8qIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQwQUE5NTFDNjg0MjA4
MDBBMjY1Q0MgLyogRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKQEAg
LTE1MTA3LDYgKzE1MTA5LDggQEAKIAkJRTQyRTc2REIxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxl
VXBkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlVXBkYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzEwNUI3MTY3NTBGMEMwMERCMkZCOCAv
KiBOb2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMDVC
QTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxl
UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVy
c2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDM0M0QyNDIz
OTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNBMDIzQTE3RUIzNzBBMDA0Q0RE
MjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0EwMjNDMTdF
QjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODcyNSw2ICsyODcyOSw4IEBACiAJCQkJ
RkZFRkFCMjkxODM4MERBMDAwNTE0NTM0IC8qIExpbmVMYXlvdXRTdGF0ZS5oICovLAogCQkJCUU0
ODRBMzNEMjMwNTUzMDMwMDlBREU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmNwcCAqLywKIAkJ
CQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oICovLAor
CQkJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxl
UGF0aC5oICovLAorCQkJCUU0MzQzRDI0MjM5Mjc3OEYwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJh
dmVyc2FsQ29tcGxleFBhdGguaCAqLywKIAkJCQlGRkRCQzA0NjE4M0QyN0I3MDA0MDcxMDkgLyog
TGluZVdpZHRoLmNwcCAqLywKIAkJCQlGRkRCQzA0NTE4M0QyN0I3MDA0MDcxMDkgLyogTGluZVdp
ZHRoLmggKi8sCiAJCQkJRkZBQzMwRkQxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5nT2JqZWN0
cy5jcHAgKi8sCkBAIC0zMDUzNSw2ICszMDU0MSw3IEBACiAJCQkJODM3MDU2OTAxRjUwOTE1QzAw
RDkzNDI1IC8qIEpTRmlsZVN5c3RlbUVudHJ5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgzM0I5RTM2MUY1MDhEODUwMEUwRTQyOCAvKiBKU0ZpbGVTeXN0ZW1GaWxlRW50cnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcxMkJFNDg4MUZFODY4NkEwMDIwMzFDQyAvKiBKU0ZpbGxNb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYgLyogTGluZUxheW91
dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDI3QjE0RUFD
MDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjgwODMz
RjFDNkRDMjZGMDAxNDUxQjYgLyogSlNGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMy
NEVFQTkxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzE2ODIsNiArMzE2ODksNyBAQAogCQkJCTU3RENFRDc0MjE0MzA1RjAwMDE2Qjg0NyAvKiBQ
dWJsaWNLZXlDcmVkZW50aWFsRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNCRUYyMDA5
ODBDNjAwMzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NzMwM0MwQTIwMDk5QkFEMDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDM0M0QyMzIzOTI3Nzg0MDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCTU3MzAzQkVCMjAwOTdGNDAwMDM1NTk2NSAvKiBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDA4MUZGMDAxNkIwQTJEMzAwOEFBQTdBIC8qIFB1YmxpY1N1
ZmZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTBGQjA4NEIxNEUxNUM3RTAwQTNEQjk4IC8qIFB1
YmxpY1VSTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDIxMzVhNTJiYzdlLi4zMTNlM2U1MzBiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAt
NDc3LDcgKzQ3Nyw3IEBAIHZvaWQgd3JpdGVEZWJ1Z0luZm8oVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0LCBPcHRpb25TZXQ8UmVuZGVyCiAgICAgfQogfQogCi1zdGF0
aWMgdm9pZCB3cml0ZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8s
IGNvbnN0IExpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6Qm94VHlwZSYgdGV4
dEJveCkKK3N0YXRpYyB2b2lkIHdyaXRlVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyVGV4dCYgbywgY29uc3QgTGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveCYgdGV4dEJveCkK
IHsKICAgICBhdXRvIHJlY3QgPSB0ZXh0Qm94LnJlY3QoKTsKICAgICBhdXRvIGxvZ2ljYWxSZWN0
ID0gdGV4dEJveC5sb2dpY2FsUmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAppbmRleCA5MGU5ZTA0ZGJiMy4uNzY1
Yjk3ODcyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVM
YXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC0zMiw4OCArMzIsNTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgewogCiBUZXh0Qm94SXRlcmF0b3I6
OlRleHRCb3hJdGVyYXRvcihjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KQotICAg
IDogbV9wYXRoVmFyaWFudChDb21wbGV4UGF0aCB7IGlubGluZVRleHRCb3gsIHsgfSB9KQorICAg
IDogbV90ZXh0Qm94KENvbXBsZXhQYXRoIHsgaW5saW5lVGV4dEJveCwgeyB9IH0pCiB7CiB9CiBU
ZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihWZWN0b3I8Y29uc3QgSW5saW5lVGV4dEJv
eCo+JiYgc29ydGVkLCBzaXplX3QgaW5kZXgpCi0gICAgOiBtX3BhdGhWYXJpYW50KENvbXBsZXhQ
YXRoIHsgaW5kZXggPCBzb3J0ZWQuc2l6ZSgpID8gc29ydGVkW2luZGV4XSA6IG51bGxwdHIsIFdU
Rk1vdmUoc29ydGVkKSwgaW5kZXggfSkKKyAgICA6IG1fdGV4dEJveChDb21wbGV4UGF0aCB7IGlu
ZGV4IDwgc29ydGVkLnNpemUoKSA/IHNvcnRlZFtpbmRleF0gOiBudWxscHRyLCBXVEZNb3ZlKHNv
cnRlZCksIGluZGV4IH0pCiB7CiB9CiAKIFRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9y
KFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVyYXRvciwgU2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCkKLSAgICA6IG1fcGF0aFZhcmlh
bnQoU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBlbmQgfSkKKyAgICA6IG1fdGV4dEJveChTaW1wbGVQ
YXRoIHsgaXRlcmF0b3IsIGVuZCB9KQogewogfQogCiBUZXh0Qm94SXRlcmF0b3ImIFRleHRCb3hJ
dGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5WaXN1YWxPcmRlcigpCiB7Ci0gICAgYXV0byBzaW1wbGUg
PSBbXShTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgICsrcGF0aC5pdGVyYXRvcjsKLSAgICB9
OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAg
cGF0aC5pbmxpbmVCb3ggPSBwYXRoLmlubGluZUJveC0+bmV4dFRleHRCb3goKTsKLSAgICB9Owot
Ci0gICAgV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwotCisg
ICAgV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkg
eworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCk7CisgICAg
fSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1jb25zdCBJbmxpbmVUZXh0Qm94KiBUZXh0Qm94
SXRlcmF0b3I6OkNvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCkgY29u
c3QKLXsKLSAgICBpZiAoIXNvcnRlZElubGluZVRleHRCb3hlcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKHNvcnRlZElubGluZVRleHRCb3hJbmRleCArIDEgPCBzb3J0ZWRJbmxpbmVUZXh0Qm94
ZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHNvcnRlZElubGluZVRleHRCb3hlc1tzb3J0
ZWRJbmxpbmVUZXh0Qm94SW5kZXggKyAxXTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotICAgIHJldHVybiBpbmxpbmVCb3gtPm5leHRUZXh0Qm94KCk7Ci19Ci0KIFRleHRCb3hJdGVy
YXRvciYgVGV4dEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRJblRleHRPcmRlcigpCiB7Ci0gICAg
YXV0byBzaW1wbGUgPSBbXShTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgICsrcGF0aC5pdGVy
YXRvcjsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oQ29tcGxleFBhdGgmIHBhdGgp
IHsKLSAgICAgICAgcGF0aC5pbmxpbmVCb3ggPSBwYXRoLm5leHRJbmxpbmVUZXh0Qm94SW5UZXh0
T3JkZXIoKTsKLSAgICAgICAgaWYgKCFwYXRoLnNvcnRlZElubGluZVRleHRCb3hlcy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICArK3BhdGguc29ydGVkSW5saW5lVGV4dEJveEluZGV4OwotICAgIH07
Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Ci0K
KyAgICBXVEY6OnN3aXRjaE9uKG1fdGV4dEJveC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHBhdGgudHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVyKCk7CisgICAg
fSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiBib29sIFRleHRCb3hJdGVyYXRvcjo6b3BlcmF0
b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAogewotICAgIGlmIChtX3Bh
dGhWYXJpYW50LmluZGV4KCkgIT0gb3RoZXIubV9wYXRoVmFyaWFudC5pbmRleCgpKQorICAgIGlm
IChtX3RleHRCb3gubV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVyLm1fdGV4dEJveC5tX3Bh
dGhWYXJpYW50LmluZGV4KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc2lt
cGxlID0gWyZdKGNvbnN0IFNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgu
aXRlcmF0b3IgPT0gV1RGOjpnZXQ8U2ltcGxlUGF0aD4ob3RoZXIubV9wYXRoVmFyaWFudCkuaXRl
cmF0b3I7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFsmXShjb25zdCBDb21wbGV4UGF0
aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3ggPT0gV1RGOjpnZXQ8Q29t
cGxleFBhdGg+KG90aGVyLm1fcGF0aFZhcmlhbnQpLmlubGluZUJveDsKLSAgICB9OwotCi0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFudCwgWyZdKGNvbnN0
IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGggPT0gV1RGOjpnZXQ8c3RkOjpkZWNh
eV90PGRlY2x0eXBlKHBhdGgpPj4ob3RoZXIubV90ZXh0Qm94Lm1fcGF0aFZhcmlhbnQpOworICAg
IH0pOwogfQogCiBib29sIFRleHRCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAogewotICAgIGF1
dG8gc2ltcGxlID0gWyZdKGNvbnN0IFNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJu
IHBhdGguaXRlcmF0b3IgPT0gcGF0aC5lbmQ7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9
IFsmXShjb25zdCBDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gIXBhdGguaW5s
aW5lQm94OwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdGV4dEJveC5t
X3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmF0RW5k
KCk7CisgICAgfSk7CiB9CiAKIFRleHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hGb3IoY29uc3Qg
UmVuZGVyVGV4dCYgdGV4dCkKQEAgLTE0NSwyNSArMTA3LDE5IEBAIFRleHRCb3hSYW5nZSB0ZXh0
Qm94ZXNGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKIH0KIAogRWxlbWVudEJveEl0ZXJhdG9y
OjpFbGVtZW50Qm94SXRlcmF0b3IoY29uc3QgSW5saW5lRWxlbWVudEJveCogaW5saW5lRWxlbWVu
dEJveCkKLSAgICA6IG1fcGF0aFZhcmlhbnQoQ29tcGxleFBhdGggeyBpbmxpbmVFbGVtZW50Qm94
IH0pCisgICAgOiBtX2JveChDb21wbGV4UGF0aCB7IGlubGluZUVsZW1lbnRCb3gsIHsgfSB9KQog
ewogfQogRWxlbWVudEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3IoU2ltcGxlTGluZUxh
eW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yLCBTaW1wbGVMaW5lTGF5b3V0OjpS
dW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5kKQotICAgIDogbV9wYXRoVmFyaWFudChTaW1wbGVQYXRo
IHsgaXRlcmF0b3IsIGVuZCB9KQorICAgIDogbV9ib3goU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBl
bmQgfSkKIHsKIH0KIAogYm9vbCBFbGVtZW50Qm94SXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKIHsK
LSAgICBhdXRvIHNpbXBsZSA9IFsmXShjb25zdCBTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAg
IHJldHVybiBwYXRoLml0ZXJhdG9yID09IHBhdGguZW5kOwotICAgIH07Ci0KLSAgICBhdXRvIGNv
bXBsZXggPSBbJl0oY29uc3QgQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICFw
YXRoLmlubGluZUJveDsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRo
VmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2Jv
eC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmF0
RW5kKCk7CisgICAgfSk7CiB9CiAKIEVsZW1lbnRCb3hJdGVyYXRvciBlbGVtZW50Qm94Rm9yKGNv
bnN0IFJlbmRlckxpbmVCcmVhayYgcmVuZGVyRWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAppbmRleCBmNDAxZTgzMTFk
MS4uYTc2N2JiNjEzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKQEAgLTI1LDExICsyNSwxMCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3gu
aCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZl
cnNhbENvbXBsZXhQYXRoLmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBh
dGguaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91
dFJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSXRl
cmF0b3JSYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC0zOCwxOCArMzcsMjAg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyTGluZUJyZWFrOwotY2xhc3Mg
UmVuZGVyVGV4dDsKIAogbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgewogCi1jbGFzcyBU
ZXh0Qm94Q29udGV4dDsKK2NsYXNzIEVsZW1lbnRCb3hJdGVyYXRvcjsKIGNsYXNzIFRleHRCb3hJ
dGVyYXRvcjsKIAogc3RydWN0IEVuZEl0ZXJhdG9yIHsgfTsKIAotdGVtcGxhdGU8Y2xhc3MgSXRl
cmF0b3I+CiBjbGFzcyBCb3ggewogcHVibGljOgorICAgIHVzaW5nIFBhdGhWYXJpYW50ID0gVmFy
aWFudDxTaW1wbGVQYXRoLCBDb21wbGV4UGF0aD47CisKKyAgICBCb3goUGF0aFZhcmlhbnQmJik7
CisKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBsb2dpY2FsUmVj
dCgpIGNvbnN0OwogCkBAIC01OCwxOSArNTksMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNMaW5l
QnJlYWsoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIEJveCgpID0gZGVmYXVsdDsKLSAgICBC
b3goY29uc3QgQm94JikgPSBkZWZhdWx0OwotICAgIEJveChCb3gmJikgPSBkZWZhdWx0OwotICAg
IH5Cb3goKSA9IGRlZmF1bHQ7Ci0gICAgQm94JiBvcGVyYXRvcj0oY29uc3QgQm94JikgPSBkZWZh
dWx0OwotICAgIEJveCYgb3BlcmF0b3I9KEJveCYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBjb25zdCBJ
dGVyYXRvciYgaXRlcmF0b3IoKSBjb25zdDsKKyAgICBmcmllbmQgY2xhc3MgRWxlbWVudEJveEl0
ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CisKKyAgICBQYXRoVmFy
aWFudCBtX3BhdGhWYXJpYW50OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+Ci1jbGFz
cyBUZXh0Qm94IDogcHVibGljIEJveDxJdGVyYXRvcj4geworY2xhc3MgVGV4dEJveCA6IHB1Ymxp
YyBCb3ggewogcHVibGljOgorICAgIFRleHRCb3goUGF0aFZhcmlhbnQmJik7CisKICAgICBib29s
IGhhc0h5cGhlbigpIGNvbnN0OwogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0OwogCkBAIC04
MSwyMSArNzksMTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0xhc3RPbkxpbmUoKSBjb25zdDsK
ICAgICBib29sIGlzTGFzdCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dEJveCgpID0g
ZGVmYXVsdDsKLSAgICBUZXh0Qm94KGNvbnN0IFRleHRCb3gmKSA9IGRlZmF1bHQ7Ci0gICAgVGV4
dEJveChUZXh0Qm94JiYpID0gZGVmYXVsdDsKLSAgICB+VGV4dEJveCgpID0gZGVmYXVsdDsKLSAg
ICBUZXh0Qm94JiBvcGVyYXRvcj0oY29uc3QgVGV4dEJveCYpID0gZGVmYXVsdDsKLSAgICBUZXh0
Qm94JiBvcGVyYXRvcj0oVGV4dEJveCYmKSA9IGRlZmF1bHQ7Ci0KLSAgICB1c2luZyBCb3g8SXRl
cmF0b3I+OjppdGVyYXRvcjsKIH07CiAKLWNsYXNzIFRleHRCb3hJdGVyYXRvciA6IHByaXZhdGUg
VGV4dEJveDxUZXh0Qm94SXRlcmF0b3I+IHsKK2NsYXNzIFRleHRCb3hJdGVyYXRvciB7CiBwdWJs
aWM6Ci0gICAgVGV4dEJveEl0ZXJhdG9yKCkgOiBtX3BhdGhWYXJpYW50KENvbXBsZXhQYXRoIHsg
bnVsbHB0ciwgeyB9IH0pIHsgfTsKKyAgICBUZXh0Qm94SXRlcmF0b3IoKSA6IG1fdGV4dEJveChD
b21wbGV4UGF0aCB7IG51bGxwdHIsIHsgfSB9KSB7IH07CiAKICAgICBleHBsaWNpdCBUZXh0Qm94
SXRlcmF0b3IoY29uc3QgSW5saW5lVGV4dEJveCopOwogICAgIFRleHRCb3hJdGVyYXRvcihWZWN0
b3I8Y29uc3QgSW5saW5lVGV4dEJveCo+JiYgc29ydGVkLCBzaXplX3QgaW5kZXgpOwpAQCAtMTEz
LDU4ICsxMDEsMzEgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShFbmRJdGVyYXRvcikg
Y29uc3QgeyByZXR1cm4gYXRFbmQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShFbmRJdGVyYXRv
cikgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KIAotICAgIGNvbnN0IFRleHRCb3gmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgY29uc3QgVGV4dEJveCogb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBUZXh0Qm94JiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiBtX3RleHRCb3g7IH0KKyAgICBjb25zdCBUZXh0Qm94KiBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdGV4dEJveDsgfQogCiAgICAgYm9vbCBhdEVuZCgp
IGNvbnN0OwogCi0gICAgdXNpbmcgQm94VHlwZSA9IFRleHRCb3g8VGV4dEJveEl0ZXJhdG9yPjsK
LQogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQm94PFRleHRCb3hJdGVyYXRvcj47Ci0gICAg
ZnJpZW5kIGNsYXNzIFRleHRCb3g8VGV4dEJveEl0ZXJhdG9yPjsKLQotICAgIHN0cnVjdCBTaW1w
bGVQYXRoIHsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
IGl0ZXJhdG9yOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0
b3IgZW5kOwotICAgIH07Ci0gICAgc3RydWN0IENvbXBsZXhQYXRoIHsKLSAgICAgICAgY29uc3Qg
SW5saW5lVGV4dEJveCogaW5saW5lQm94OwotICAgICAgICBWZWN0b3I8Y29uc3QgSW5saW5lVGV4
dEJveCo+IHNvcnRlZElubGluZVRleHRCb3hlczsKLSAgICAgICAgc2l6ZV90IHNvcnRlZElubGlu
ZVRleHRCb3hJbmRleCB7IDAgfTsKLQotICAgICAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0
SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCkgY29uc3Q7Ci0gICAgfTsKLSAgICBWYXJpYW50PFNp
bXBsZVBhdGgsIENvbXBsZXhQYXRoPiBtX3BhdGhWYXJpYW50OworICAgIFRleHRCb3ggbV90ZXh0
Qm94OwogfTsKIAotY2xhc3MgRWxlbWVudEJveEl0ZXJhdG9yIDogcHJpdmF0ZSBCb3g8RWxlbWVu
dEJveEl0ZXJhdG9yPiB7CitjbGFzcyBFbGVtZW50Qm94SXRlcmF0b3IgewogcHVibGljOgotICAg
IEVsZW1lbnRCb3hJdGVyYXRvcigpIDogbV9wYXRoVmFyaWFudChDb21wbGV4UGF0aCB7IG51bGxw
dHIgfSkgeyB9OworICAgIEVsZW1lbnRCb3hJdGVyYXRvcigpIDogbV9ib3goQ29tcGxleFBhdGgg
eyBudWxscHRyLCB7IH0gfSkgeyB9OwogCiAgICAgZXhwbGljaXQgRWxlbWVudEJveEl0ZXJhdG9y
KGNvbnN0IElubGluZUVsZW1lbnRCb3gqKTsKICAgICBFbGVtZW50Qm94SXRlcmF0b3IoU2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yLCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5S
ZXNvbHZlcjo6SXRlcmF0b3IgZW5kKTsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQogCi0gICAgY29uc3QgQm94JiBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiAqdGhpczsgfQotICAgIGNvbnN0IEJveCogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBCb3gmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIG1fYm94OyB9CisgICAgY29uc3QgQm94KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Jm1fYm94OyB9CiAKICAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAKLSAgICB1c2luZyBCb3hUeXBl
ID0gQm94PEVsZW1lbnRCb3hJdGVyYXRvcj47Ci0KIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IEJveDxFbGVtZW50Qm94SXRlcmF0b3I+OwotCi0gICAgc3RydWN0IFNpbXBsZVBhdGggewotICAg
ICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgaXRlcmF0b3I7Ci0g
ICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBlbmQ7Ci0gICAg
fTsKLSAgICBzdHJ1Y3QgQ29tcGxleFBhdGggewotICAgICAgICBjb25zdCBJbmxpbmVFbGVtZW50
Qm94KiBpbmxpbmVCb3g7Ci0gICAgfTsKLSAgICBWYXJpYW50PFNpbXBsZVBhdGgsIENvbXBsZXhQ
YXRoPiBtX3BhdGhWYXJpYW50OworICAgIEJveCBtX2JveDsKIH07CiAKIGNsYXNzIFRleHRCb3hS
YW5nZSB7CkBAIC0xODgsMTcwICsxNDksOTggQEAgRWxlbWVudEJveEl0ZXJhdG9yIGVsZW1lbnRC
b3hGb3IoY29uc3QgUmVuZGVyTGluZUJyZWFrJik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBp
bmxpbmUgRmxvYXRSZWN0IEJveDxJdGVyYXRvcj46OnJlY3QoKSBjb25zdAorQm94OjpCb3goUGF0
aFZhcmlhbnQmJiBwYXRoKQorICAgIDogbV9wYXRoVmFyaWFudChXVEZNb3ZlKHBhdGgpKQogewot
ICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgm
IHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikucmVjdCgpOwotICAgIH07
Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxl
eFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5mcmFtZVJlY3Qo
KTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhW
YXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4g
aW5saW5lIEZsb2F0UmVjdCBCb3g8SXRlcmF0b3I+Ojpsb2dpY2FsUmVjdCgpIGNvbnN0Citpbmxp
bmUgRmxvYXRSZWN0IEJveDo6cmVjdCgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShj
b25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICByZXR1
cm4gKCpwYXRoLml0ZXJhdG9yKS5yZWN0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9
IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAg
ICByZXR1cm4gcGF0aC5pbmxpbmVCb3gtPmxvZ2ljYWxGcmFtZVJlY3QoKTsKLSAgICB9OwotCi0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUs
IGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1
dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgucmVjdCgpOworICAgIH0pOwogfQogCi10
ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIGJvb2wgQm94PEl0ZXJhdG9yPjo6aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpIGNvbnN0CitpbmxpbmUgRmxvYXRSZWN0IEJveDo6bG9naWNhbFJl
Y3QoKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0
b3I6OlNpbXBsZVBhdGgmKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0KLSAgICBh
dXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBh
dGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9w
YXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmxvZ2lj
YWxSZWN0KCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUg
Ym9vbCBCb3g8SXRlcmF0b3I+OjpkaXJPdmVycmlkZSgpIGNvbnN0CitpbmxpbmUgYm9vbCBCb3g6
OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10o
Y29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmKSB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRl
cmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJv
eC0+ZGlyT3ZlcnJpZGUoKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRl
cmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJu
IHBhdGguaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgIH0pOwogfQogCi10ZW1wbGF0ZTxj
bGFzcyBJdGVyYXRvcj4gaW5saW5lIGJvb2wgQm94PEl0ZXJhdG9yPjo6aXNMaW5lQnJlYWsoKSBj
b25zdAoraW5saW5lIGJvb2wgQm94OjpkaXJPdmVycmlkZSgpIGNvbnN0CiB7Ci0gICAgYXV0byBz
aW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewot
ICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS5pc0xpbmVCcmVhaygpOwotICAgIH07Ci0K
LSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBh
dGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5pc0xpbmVCcmVhaygp
OwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZh
cmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRo
VmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5kaXJPdmVycmlk
ZSgpOworICAgIH0pOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIGNvbnN0
IEl0ZXJhdG9yJiBCb3g8SXRlcmF0b3I+OjppdGVyYXRvcigpIGNvbnN0CitpbmxpbmUgYm9vbCBC
b3g6OmlzTGluZUJyZWFrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
SXRlcmF0b3ImPigqdGhpcyk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFu
dCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pc0xpbmVCcmVhaygpOwor
ICAgIH0pOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIGJvb2wgVGV4dEJv
eDxJdGVyYXRvcj46Omhhc0h5cGhlbigpIGNvbnN0CitpbmxpbmUgYm9vbCBUZXh0Qm94OjpoYXNI
eXBoZW4oKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRl
cmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRv
cikuaGFzSHlwaGVuKCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5
cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0
aC5pbmxpbmVCb3gtPmhhc0h5cGhlbigpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAg
ICByZXR1cm4gcGF0aC5oYXNIeXBoZW4oKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3Mg
SXRlcmF0b3I+IGlubGluZSBTdHJpbmdWaWV3IFRleHRCb3g8SXRlcmF0b3I+Ojp0ZXh0KCkgY29u
c3QKK1RleHRCb3g6OlRleHRCb3goUGF0aFZhcmlhbnQmJiBwYXRoKQorICAgIDogQm94KFdURk1v
dmUocGF0aCkpCiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRv
cjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS50
ZXh0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0
ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhw
YXRoLmlubGluZUJveC0+cmVuZGVyZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhwYXRoLmlubGluZUJv
eC0+c3RhcnQoKSwgcGF0aC5pbmxpbmVCb3gtPmxlbigpKTsKLSAgICB9OwotCi0gICAgcmV0dXJu
IFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgp
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIHVuc2lnbmVkIFRleHRCb3g8
SXRlcmF0b3I+Ojpsb2NhbFN0YXJ0T2Zmc2V0KCkgY29uc3QKK2lubGluZSBTdHJpbmdWaWV3IFRl
eHRCb3g6OnRleHQoKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5h
bWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5p
dGVyYXRvcikubG9jYWxTdGFydCgpOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShj
b25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0
dXJuIHBhdGguaW5saW5lQm94LT5zdGFydCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC50ZXh0KCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0
ZXJhdG9yPiBpbmxpbmUgdW5zaWduZWQgVGV4dEJveDxJdGVyYXRvcj46OmxvY2FsRW5kT2Zmc2V0
KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBUZXh0Qm94Ojpsb2NhbFN0YXJ0T2Zmc2V0KCkgY29u
c3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1w
bGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGguaXRlcmF0b3IpLmxvY2FsRW5k
KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJh
dG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3gt
PmVuZCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1f
cGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2Nh
bFN0YXJ0T2Zmc2V0KCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBp
bmxpbmUgdW5zaWduZWQgVGV4dEJveDxJdGVyYXRvcj46Omxlbmd0aCgpIGNvbnN0CitpbmxpbmUg
dW5zaWduZWQgVGV4dEJveDo6bG9jYWxFbmRPZmZzZXQoKSBjb25zdAogewotICAgIGF1dG8gc2lt
cGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAg
ICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikuZW5kKCkgLSAoKnBhdGguaXRlcmF0b3IpLnN0
YXJ0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0
ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVC
b3gtPmxlbigpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigp
Lm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5s
b2NhbEVuZE9mZnNldCgpOworICAgIH0pOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4g
aW5saW5lIGJvb2wgVGV4dEJveDxJdGVyYXRvcj46OmlzTGFzdE9uTGluZSgpIGNvbnN0Citpbmxp
bmUgdW5zaWduZWQgVGV4dEJveDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9
IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAg
IGF1dG8gbmV4dCA9IHBhdGguaXRlcmF0b3I7Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0
dXJuIG5leHQgPT0gcGF0aC5lbmQgfHwgKCpwYXRoLml0ZXJhdG9yKS5saW5lSW5kZXgoKSAhPSAo
Km5leHQpLmxpbmVJbmRleCgpOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25z
dCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgYXV0byog
bmV4dCA9IHBhdGgubmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpOwotICAgICAgICByZXR1
cm4gIW5leHQgfHwgJnBhdGguaW5saW5lQm94LT5yb290KCkgIT0gJm5leHQtPnJvb3QoKTsKLSAg
ICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50
LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlh
bnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgubGVuZ3RoKCk7CisgICAg
fSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9vbCBUZXh0Qm94PEl0
ZXJhdG9yPjo6aXNMYXN0KCkgY29uc3QKK2lubGluZSBib29sIFRleHRCb3g6OmlzTGFzdE9uTGlu
ZSgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRv
cjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICBhdXRvIG5leHQgPSBwYXRoLml0ZXJhdG9y
OwotICAgICAgICArK25leHQ7Ci0gICAgICAgIHJldHVybiBuZXh0ID09IHBhdGguZW5kOwotICAg
IH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29t
cGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICFwYXRoLm5leHRJbmxpbmVUZXh0Qm94
SW5UZXh0T3JkZXIoKTsKLSAgICB9OworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZh
cmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNMYXN0T25MaW5l
KCk7CisgICAgfSk7Cit9CiAKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1f
cGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CitpbmxpbmUgYm9vbCBUZXh0Qm94Ojppc0xh
c3QoKSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtd
KGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNMYXN0KCk7CisgICAgfSk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlv
dXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
TGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjM2NDMyODhlYzQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgKQEAg
LTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5s
aW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMaW5lTGF5b3V0VHJhdmVy
c2FsIHsKKworY2xhc3MgQ29tcGxleFBhdGggeworcHVibGljOgorICAgIENvbXBsZXhQYXRoKGNv
bnN0IElubGluZUJveCogaW5saW5lQm94LCBWZWN0b3I8Y29uc3QgSW5saW5lVGV4dEJveCo+JiYg
c29ydGVkSW5saW5lVGV4dEJveGVzID0geyB9LCBzaXplX3Qgc29ydGVkSW5saW5lVGV4dEJveElu
ZGV4ID0gMCkKKyAgICAgICAgOiBtX2lubGluZUJveChpbmxpbmVCb3gpCisgICAgICAgICwgbV9z
b3J0ZWRJbmxpbmVUZXh0Qm94ZXMoV1RGTW92ZShzb3J0ZWRJbmxpbmVUZXh0Qm94ZXMpKQorICAg
ICAgICAsIG1fc29ydGVkSW5saW5lVGV4dEJveEluZGV4KHNvcnRlZElubGluZVRleHRCb3hJbmRl
eCkKKyAgICB7IH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxp
bmVCb3gtPmZyYW1lUmVjdCgpOyB9CisgICAgRmxvYXRSZWN0IGxvZ2ljYWxSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmxpbmVCb3gtPmxvZ2ljYWxGcmFtZVJlY3QoKTsgfQorCisgICAgYm9vbCBp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsgfQorICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJl
dHVybiBtX2lubGluZUJveC0+ZGlyT3ZlcnJpZGUoKTsgfQorICAgIGJvb2wgaXNMaW5lQnJlYWso
KSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+aXNMaW5lQnJlYWsoKTsgfQorCisgICAgYm9v
bCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmhhc0h5cGhlbigp
OyB9CisgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nVmlldyhpbmxp
bmVUZXh0Qm94KCktPnJlbmRlcmVyKCkudGV4dCgpKS5zdWJzdHJpbmcoaW5saW5lVGV4dEJveCgp
LT5zdGFydCgpLCBpbmxpbmVUZXh0Qm94KCktPmxlbigpKTsgfQorICAgIHVuc2lnbmVkIGxvY2Fs
U3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCk7IH0K
KyAgICB1bnNpZ25lZCBsb2NhbEVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRC
b3goKS0+ZW5kKCk7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBpbmxp
bmVUZXh0Qm94KCktPmxlbigpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0xhc3RPbkxpbmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgYXV0byogbmV4dCA9IG5leHRJbmxpbmVUZXh0Qm94SW5UZXh0
T3JkZXIoKTsKKyAgICAgICAgcmV0dXJuICFuZXh0IHx8ICZpbmxpbmVUZXh0Qm94KCktPnJvb3Qo
KSAhPSAmbmV4dC0+cm9vdCgpOworICAgIH0KKyAgICBpbmxpbmUgYm9vbCBpc0xhc3QoKSBjb25z
dCB7IHJldHVybiAhbmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpOyB9OworCisgICAgdm9p
ZCB0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcigpIHsgbV9pbmxpbmVCb3ggPSBpbmxp
bmVUZXh0Qm94KCktPm5leHRUZXh0Qm94KCk7IH0KKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRC
b3hJblRleHRPcmRlcigpCisgICAgeworICAgICAgICBtX2lubGluZUJveCA9IG5leHRJbmxpbmVU
ZXh0Qm94SW5UZXh0T3JkZXIoKTsKKyAgICAgICAgaWYgKCFtX3NvcnRlZElubGluZVRleHRCb3hl
cy5pc0VtcHR5KCkpCisgICAgICAgICAgICArK21fc29ydGVkSW5saW5lVGV4dEJveEluZGV4Owor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb21wbGV4UGF0aCYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1faW5saW5lQm94ID09IG90aGVyLm1faW5saW5lQm94OyB9CisgICAgYm9v
bCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX2lubGluZUJveDsgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IElubGluZVRleHRCb3gqIGlubGluZVRleHRCb3goKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxJbmxpbmVUZXh0Qm94PihtX2lubGluZUJveCk7IH0KKyAgICBjb25zdCBJbmxpbmVUZXh0
Qm94KiBuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCkgY29uc3Q7CisKKyAgICBjb25zdCBJ
bmxpbmVCb3gqIG1faW5saW5lQm94OworICAgIFZlY3Rvcjxjb25zdCBJbmxpbmVUZXh0Qm94Kj4g
bV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXM7CisgICAgc2l6ZV90IG1fc29ydGVkSW5saW5lVGV4dEJv
eEluZGV4IHsgMCB9OworfTsKKworaW5saW5lIGNvbnN0IElubGluZVRleHRCb3gqIENvbXBsZXhQ
YXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
c29ydGVkSW5saW5lVGV4dEJveGVzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9zb3J0ZWRJ
bmxpbmVUZXh0Qm94SW5kZXggKyAxIDwgbV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXMuc2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIG1fc29ydGVkSW5saW5lVGV4dEJveGVzW21fc29ydGVkSW5saW5l
VGV4dEJveEluZGV4ICsgMV07CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBy
ZXR1cm4gaW5saW5lVGV4dEJveCgpLT5uZXh0VGV4dEJveCgpOworfQorCit9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2lt
cGxlUGF0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZl
cnNhbFNpbXBsZVBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MDA5YThjYjQ0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWwu
aCIKKyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgeworCitjbGFzcyBTaW1wbGVQ
YXRoIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVQYXRoKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29s
dmVyOjpJdGVyYXRvciBpdGVyYXRvciwgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yIGVuZCkKKyAgICAgICAgOiBtX2l0ZXJhdG9yKGl0ZXJhdG9yKQorICAgICAgICAsIG1f
ZW5kKGVuZCkKKyAgICB7IH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
KCptX2l0ZXJhdG9yKS5yZWN0KCk7IH0KKyAgICBGbG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25z
dCB7IHJldHVybiByZWN0KCk7IH0KKworICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGRpck92ZXJyaWRlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gKCpt
X2l0ZXJhdG9yKS5pc0xpbmVCcmVhaygpOyB9CisKKyAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0
IHsgcmV0dXJuICgqbV9pdGVyYXRvcikuaGFzSHlwaGVuKCk7IH0KKyAgICBTdHJpbmdWaWV3IHRl
eHQoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLnRleHQoKTsgfQorICAgIHVuc2lnbmVk
IGxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmxvY2FsU3Rh
cnQoKTsgfQorICAgIHVuc2lnbmVkIGxvY2FsRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKCpt
X2l0ZXJhdG9yKS5sb2NhbEVuZCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gKCptX2l0ZXJhdG9yKS5lbmQoKSAtICgqbV9pdGVyYXRvcikuc3RhcnQoKTsgfQorCisg
ICAgYm9vbCBpc0xhc3RPbkxpbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBuZXh0ID0g
bV9pdGVyYXRvcjsKKyAgICAgICAgKytuZXh0OworICAgICAgICByZXR1cm4gbmV4dCA9PSBtX2Vu
ZCB8fCAoKm1faXRlcmF0b3IpLmxpbmVJbmRleCgpICE9ICgqbmV4dCkubGluZUluZGV4KCk7Cisg
ICAgfQorICAgIGJvb2wgaXNMYXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gbmV4dCA9
IG1faXRlcmF0b3I7CisgICAgICAgICsrbmV4dDsKKyAgICAgICAgcmV0dXJuIG5leHQgPT0gbV9l
bmQ7CisgICAgfTsKKworICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dEJveEluVmlzdWFsT3JkZXIo
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFNMTCBjYW4gY29udGFpbnMgPGJyPiBydW5zIGFu
ZCB0aGlzIHNob3VsZCBza2lwIG92ZXIgdGhlbS4KKyAgICAgICAgKyttX2l0ZXJhdG9yOworICAg
IH0KKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcigpIHsgIHRyYXZlcnNl
TmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTaW1wbGVQYXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBvdGhlci5t
X2l0ZXJhdG9yOyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3Ig
PT0gbV9lbmQ7IH0KKworcHJpdmF0ZToKKyAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZl
cjo6SXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZl
cjo6SXRlcmF0b3IgbV9lbmQ7Cit9OworCit9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384537</attachid>
            <date>2019-11-30 03:36:30 -0800</date>
            <delta_ts>2019-11-30 04:10:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>linelayouttraversal-simplify-2.patch</filename>
            <type>text/plain</type>
            <size>37038</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmYxYjdkNDQ0Yy4uOGRiNjA4YzdiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMzAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgcGF0aCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgaW4gTGluZUxh
eW91dFRyYXZlcnNhbCB0byAqUGF0aCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSBMaW5lTGF5b3V0VHJhdmVyc2FsIGFuZCBt
YWtlIGl0IGVhc2llciB0byBleHRlbmQuCisKKyAgICAgICAgLSBUdXJuIFNpbXBsZVBhdGggYW5k
IENvbXBsZXhQYXRoIHN0cnVjdHMgaW50byBjbGFzc2VzCisgICAgICAgIC0gTW92ZSB0aGVtIHRv
IHNlcGFyYXRlIGZpbGVzCisgICAgICAgIC0gTWFrZSBwYXRoIGltcGxlbWVudGF0aW9uIGZ1bmN0
aW9ucyBjbGFzcyBtZW1iZXJzLCBjYWxsZWQgdmlhIGdlbmVyaWMgbGFtYmRhcworICAgICAgICAt
IEluc3RlYWQgb2YgaW5oZXJpdGluZyBCb3gvVGV4dEJveCB0byBpdGVyYXRvcnMsIG1ha2UgaXQg
YSBtZW1iZXIgdmFyaWFibGUuCisgICAgICAgIC0gTW92ZSB0aGUgcGF0aCB2YXJpYW50IHRvIEJv
eCwgYXZvaWRpbmcgdXNlIG9mIHRlbXBsYXRlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRCb3gpOgorICAgICAgICAqIHJlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjp0cmF2
ZXJzZU5leHRJblZpc3VhbE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5UZXh0T3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRv
cj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRC
b3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjphdEVu
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
SXRlcmF0b3I6OkNvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yLT4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJh
dG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRv
ci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6cmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpCb3g6OmxvZ2lj
YWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJv
eDo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aGFzSHlwaGVuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6OlRleHRC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6dGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
Ojpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRU
cmF2ZXJzYWw6OlRleHRCb3g6OmxvY2FsRW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6Omxlbmd0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94Ojppc0xhc3RPbkxpbmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aXNM
YXN0IGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g8SXRlcmF0b3I+OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDxJdGVyYXRvcj46OmxvZ2lj
YWxSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OkJveDxJdGVyYXRvcj46OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9y
Pjo6ZGlyT3ZlcnJpZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6aXNMaW5lQnJlYWsgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6
aXRlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omhhc0h5cGhlbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6
dGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9y
Pjo6bG9jYWxFbmRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omxlbmd0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJh
dG9yPjo6aXNMYXN0T25MaW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g8SXRlcmF0b3I+Ojppc0xhc3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNv
bXBsZXhQYXRoOjpDb21wbGV4UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpDb21wbGV4UGF0aDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGVmdFRvUmln
aHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNh
bDo6Q29tcGxleFBhdGg6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6aGFzSHlwaGVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQ
YXRoOjp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6
OkNvbXBsZXhQYXRoOjpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bGVu
Z3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBs
ZXhQYXRoOjppc0xhc3RPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6dHJhdmVyc2VOZXh0VGV4dEJveElu
VmlzdWFsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29t
cGxleFBhdGg6OnRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6YXRF
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxl
eFBhdGg6OmlubGluZVRleHRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6Om5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQ
YXRoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6U2ltcGxlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpTaW1wbGVQYXRoOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6ZGlyT3ZlcnJpZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aGFzSHlwaGVuIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0
aDo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMYXN0
T25MaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNp
bXBsZVBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJz
ZU5leHRUZXh0Qm94SW5UZXh0T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6U2ltcGxlUGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjphdEVuZCBjb25zdCk6CisKIDIwMTkt
MTEtMjkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJ
RkNdIEFkZCBzdXBwb3J0IGZvciBzaW1wbGUgaHlwaGVuYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxYTZmMTg4MDgxOC4u
MzVjMjgyOTlmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTQ3OTQsNiArNDc5NCw4IEBACiAJCUU0Mjk1RkE0MTJCMDYxNEUw
MEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291
cmNlTG9hZFByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQyRTc2REMxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDJFNzZEQjFDN0FG
Nzc2MDBFMzYxNEQgLyogU3R5bGVVcGRhdGUuaCAqLzsgfTsKIAkJRTQzMTA1QkIxNjc1MEYxNjAw
REIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2Fs
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQz
NDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyMTIz
OTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLzsgfTsK
KwkJRTQzNDNEMjUyMzkyNzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQz
NDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5o
ICovOyB9OwogCQlFNDNBMDIzQjE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQTAyM0ExN0VC
MzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2Fj
aGVWYWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDNBRjhFNTFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0MEFBOTYxQzY4
NDIwODAwQTI2NUNDIC8qIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQwQUE5NTFDNjg0MjA4
MDBBMjY1Q0MgLyogRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3IuaCAqLzsgfTsKQEAg
LTE1MTA3LDYgKzE1MTA5LDggQEAKIAkJRTQyRTc2REIxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxl
VXBkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlVXBkYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzEwNUI3MTY3NTBGMEMwMERCMkZCOCAv
KiBOb2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMDVC
QTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxl
UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5b3V0VHJhdmVy
c2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDM0M0QyNDIz
OTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNBMDIzQTE3RUIzNzBBMDA0Q0RE
MjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0EwMjNDMTdF
QjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODcyNSw2ICsyODcyOSw4IEBACiAJCQkJ
RkZFRkFCMjkxODM4MERBMDAwNTE0NTM0IC8qIExpbmVMYXlvdXRTdGF0ZS5oICovLAogCQkJCUU0
ODRBMzNEMjMwNTUzMDMwMDlBREU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsLmNwcCAqLywKIAkJ
CQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dFRyYXZlcnNhbC5oICovLAor
CQkJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxl
UGF0aC5oICovLAorCQkJCUU0MzQzRDI0MjM5Mjc3OEYwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJh
dmVyc2FsQ29tcGxleFBhdGguaCAqLywKIAkJCQlGRkRCQzA0NjE4M0QyN0I3MDA0MDcxMDkgLyog
TGluZVdpZHRoLmNwcCAqLywKIAkJCQlGRkRCQzA0NTE4M0QyN0I3MDA0MDcxMDkgLyogTGluZVdp
ZHRoLmggKi8sCiAJCQkJRkZBQzMwRkQxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5nT2JqZWN0
cy5jcHAgKi8sCkBAIC0zMDUzNSw2ICszMDU0MSw3IEBACiAJCQkJODM3MDU2OTAxRjUwOTE1QzAw
RDkzNDI1IC8qIEpTRmlsZVN5c3RlbUVudHJ5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgzM0I5RTM2MUY1MDhEODUwMEUwRTQyOCAvKiBKU0ZpbGVTeXN0ZW1GaWxlRW50cnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcxMkJFNDg4MUZFODY4NkEwMDIwMzFDQyAvKiBKU0ZpbGxNb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYgLyogTGluZUxheW91
dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDI3QjE0RUFD
MDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjgwODMz
RjFDNkRDMjZGMDAxNDUxQjYgLyogSlNGb250RmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMy
NEVFQTkxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzE2ODIsNiArMzE2ODksNyBAQAogCQkJCTU3RENFRDc0MjE0MzA1RjAwMDE2Qjg0NyAvKiBQ
dWJsaWNLZXlDcmVkZW50aWFsRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNCRUYyMDA5
ODBDNjAwMzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NzMwM0MwQTIwMDk5QkFEMDAzNTU5NjUgLyogUHVibGljS2V5Q3JlZGVudGlh
bFJlcXVlc3RPcHRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDM0M0QyMzIzOTI3Nzg0MDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCTU3MzAzQkVCMjAwOTdGNDAwMDM1NTk2NSAvKiBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDA4MUZGMDAxNkIwQTJEMzAwOEFBQTdBIC8qIFB1YmxpY1N1
ZmZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTBGQjA4NEIxNEUxNUM3RTAwQTNEQjk4IC8qIFB1
YmxpY1VSTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDIxMzVhNTJiYzdlLi4zMTNlM2U1MzBiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAt
NDc3LDcgKzQ3Nyw3IEBAIHZvaWQgd3JpdGVEZWJ1Z0luZm8oVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0LCBPcHRpb25TZXQ8UmVuZGVyCiAgICAgfQogfQogCi1zdGF0
aWMgdm9pZCB3cml0ZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8s
IGNvbnN0IExpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6Qm94VHlwZSYgdGV4
dEJveCkKK3N0YXRpYyB2b2lkIHdyaXRlVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyVGV4dCYgbywgY29uc3QgTGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveCYgdGV4dEJveCkK
IHsKICAgICBhdXRvIHJlY3QgPSB0ZXh0Qm94LnJlY3QoKTsKICAgICBhdXRvIGxvZ2ljYWxSZWN0
ID0gdGV4dEJveC5sb2dpY2FsUmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAppbmRleCA5MGU5ZTA0ZGJiMy4uNzY1
Yjk3ODcyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVM
YXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC0zMiw4OCArMzIsNTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgewogCiBUZXh0Qm94SXRlcmF0b3I6
OlRleHRCb3hJdGVyYXRvcihjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KQotICAg
IDogbV9wYXRoVmFyaWFudChDb21wbGV4UGF0aCB7IGlubGluZVRleHRCb3gsIHsgfSB9KQorICAg
IDogbV90ZXh0Qm94KENvbXBsZXhQYXRoIHsgaW5saW5lVGV4dEJveCwgeyB9IH0pCiB7CiB9CiBU
ZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihWZWN0b3I8Y29uc3QgSW5saW5lVGV4dEJv
eCo+JiYgc29ydGVkLCBzaXplX3QgaW5kZXgpCi0gICAgOiBtX3BhdGhWYXJpYW50KENvbXBsZXhQ
YXRoIHsgaW5kZXggPCBzb3J0ZWQuc2l6ZSgpID8gc29ydGVkW2luZGV4XSA6IG51bGxwdHIsIFdU
Rk1vdmUoc29ydGVkKSwgaW5kZXggfSkKKyAgICA6IG1fdGV4dEJveChDb21wbGV4UGF0aCB7IGlu
ZGV4IDwgc29ydGVkLnNpemUoKSA/IHNvcnRlZFtpbmRleF0gOiBudWxscHRyLCBXVEZNb3ZlKHNv
cnRlZCksIGluZGV4IH0pCiB7CiB9CiAKIFRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9y
KFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVyYXRvciwgU2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCkKLSAgICA6IG1fcGF0aFZhcmlh
bnQoU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBlbmQgfSkKKyAgICA6IG1fdGV4dEJveChTaW1wbGVQ
YXRoIHsgaXRlcmF0b3IsIGVuZCB9KQogewogfQogCiBUZXh0Qm94SXRlcmF0b3ImIFRleHRCb3hJ
dGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5WaXN1YWxPcmRlcigpCiB7Ci0gICAgYXV0byBzaW1wbGUg
PSBbXShTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgICsrcGF0aC5pdGVyYXRvcjsKLSAgICB9
OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAg
cGF0aC5pbmxpbmVCb3ggPSBwYXRoLmlubGluZUJveC0+bmV4dFRleHRCb3goKTsKLSAgICB9Owot
Ci0gICAgV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwotCisg
ICAgV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkg
eworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCk7CisgICAg
fSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1jb25zdCBJbmxpbmVUZXh0Qm94KiBUZXh0Qm94
SXRlcmF0b3I6OkNvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCkgY29u
c3QKLXsKLSAgICBpZiAoIXNvcnRlZElubGluZVRleHRCb3hlcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKHNvcnRlZElubGluZVRleHRCb3hJbmRleCArIDEgPCBzb3J0ZWRJbmxpbmVUZXh0Qm94
ZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHNvcnRlZElubGluZVRleHRCb3hlc1tzb3J0
ZWRJbmxpbmVUZXh0Qm94SW5kZXggKyAxXTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotICAgIHJldHVybiBpbmxpbmVCb3gtPm5leHRUZXh0Qm94KCk7Ci19Ci0KIFRleHRCb3hJdGVy
YXRvciYgVGV4dEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRJblRleHRPcmRlcigpCiB7Ci0gICAg
YXV0byBzaW1wbGUgPSBbXShTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgICsrcGF0aC5pdGVy
YXRvcjsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oQ29tcGxleFBhdGgmIHBhdGgp
IHsKLSAgICAgICAgcGF0aC5pbmxpbmVCb3ggPSBwYXRoLm5leHRJbmxpbmVUZXh0Qm94SW5UZXh0
T3JkZXIoKTsKLSAgICAgICAgaWYgKCFwYXRoLnNvcnRlZElubGluZVRleHRCb3hlcy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICArK3BhdGguc29ydGVkSW5saW5lVGV4dEJveEluZGV4OwotICAgIH07
Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7Ci0K
KyAgICBXVEY6OnN3aXRjaE9uKG1fdGV4dEJveC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHBhdGgudHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVyKCk7CisgICAg
fSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiBib29sIFRleHRCb3hJdGVyYXRvcjo6b3BlcmF0
b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAogewotICAgIGlmIChtX3Bh
dGhWYXJpYW50LmluZGV4KCkgIT0gb3RoZXIubV9wYXRoVmFyaWFudC5pbmRleCgpKQorICAgIGlm
IChtX3RleHRCb3gubV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVyLm1fdGV4dEJveC5tX3Bh
dGhWYXJpYW50LmluZGV4KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc2lt
cGxlID0gWyZdKGNvbnN0IFNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgu
aXRlcmF0b3IgPT0gV1RGOjpnZXQ8U2ltcGxlUGF0aD4ob3RoZXIubV9wYXRoVmFyaWFudCkuaXRl
cmF0b3I7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFsmXShjb25zdCBDb21wbGV4UGF0
aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3ggPT0gV1RGOjpnZXQ8Q29t
cGxleFBhdGg+KG90aGVyLm1fcGF0aFZhcmlhbnQpLmlubGluZUJveDsKLSAgICB9OwotCi0gICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFudCwgWyZdKGNvbnN0
IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGggPT0gV1RGOjpnZXQ8c3RkOjpkZWNh
eV90PGRlY2x0eXBlKHBhdGgpPj4ob3RoZXIubV90ZXh0Qm94Lm1fcGF0aFZhcmlhbnQpOworICAg
IH0pOwogfQogCiBib29sIFRleHRCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25zdAogewotICAgIGF1
dG8gc2ltcGxlID0gWyZdKGNvbnN0IFNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJu
IHBhdGguaXRlcmF0b3IgPT0gcGF0aC5lbmQ7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9
IFsmXShjb25zdCBDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gIXBhdGguaW5s
aW5lQm94OwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdGV4dEJveC5t
X3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmF0RW5k
KCk7CisgICAgfSk7CiB9CiAKIFRleHRCb3hJdGVyYXRvciBmaXJzdFRleHRCb3hGb3IoY29uc3Qg
UmVuZGVyVGV4dCYgdGV4dCkKQEAgLTE0NSwyNSArMTA3LDE5IEBAIFRleHRCb3hSYW5nZSB0ZXh0
Qm94ZXNGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKIH0KIAogRWxlbWVudEJveEl0ZXJhdG9y
OjpFbGVtZW50Qm94SXRlcmF0b3IoY29uc3QgSW5saW5lRWxlbWVudEJveCogaW5saW5lRWxlbWVu
dEJveCkKLSAgICA6IG1fcGF0aFZhcmlhbnQoQ29tcGxleFBhdGggeyBpbmxpbmVFbGVtZW50Qm94
IH0pCisgICAgOiBtX2JveChDb21wbGV4UGF0aCB7IGlubGluZUVsZW1lbnRCb3gsIHsgfSB9KQog
ewogfQogRWxlbWVudEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3IoU2ltcGxlTGluZUxh
eW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yLCBTaW1wbGVMaW5lTGF5b3V0OjpS
dW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5kKQotICAgIDogbV9wYXRoVmFyaWFudChTaW1wbGVQYXRo
IHsgaXRlcmF0b3IsIGVuZCB9KQorICAgIDogbV9ib3goU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBl
bmQgfSkKIHsKIH0KIAogYm9vbCBFbGVtZW50Qm94SXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKIHsK
LSAgICBhdXRvIHNpbXBsZSA9IFsmXShjb25zdCBTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAg
IHJldHVybiBwYXRoLml0ZXJhdG9yID09IHBhdGguZW5kOwotICAgIH07Ci0KLSAgICBhdXRvIGNv
bXBsZXggPSBbJl0oY29uc3QgQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICFw
YXRoLmlubGluZUJveDsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRo
VmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2Jv
eC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmF0
RW5kKCk7CisgICAgfSk7CiB9CiAKIEVsZW1lbnRCb3hJdGVyYXRvciBlbGVtZW50Qm94Rm9yKGNv
bnN0IFJlbmRlckxpbmVCcmVhayYgcmVuZGVyRWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAppbmRleCBmNDAxZTgzMTFk
MS4uMTM0ZjQyMGI1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKQEAgLTI1LDExICsyNSwxMCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIklubGluZUVsZW1lbnRCb3gu
aCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZl
cnNhbENvbXBsZXhQYXRoLmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBh
dGguaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91
dFJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSXRl
cmF0b3JSYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC0zOCwxOCArMzcsMjAg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyTGluZUJyZWFrOwotY2xhc3Mg
UmVuZGVyVGV4dDsKIAogbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgewogCi1jbGFzcyBU
ZXh0Qm94Q29udGV4dDsKK2NsYXNzIEVsZW1lbnRCb3hJdGVyYXRvcjsKIGNsYXNzIFRleHRCb3hJ
dGVyYXRvcjsKIAogc3RydWN0IEVuZEl0ZXJhdG9yIHsgfTsKIAotdGVtcGxhdGU8Y2xhc3MgSXRl
cmF0b3I+CiBjbGFzcyBCb3ggewogcHVibGljOgorICAgIHVzaW5nIFBhdGhWYXJpYW50ID0gVmFy
aWFudDxTaW1wbGVQYXRoLCBDb21wbGV4UGF0aD47CisKKyAgICBCb3goUGF0aFZhcmlhbnQmJik7
CisKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBsb2dpY2FsUmVj
dCgpIGNvbnN0OwogCkBAIC01OCwxOSArNTksMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNMaW5l
QnJlYWsoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIEJveCgpID0gZGVmYXVsdDsKLSAgICBC
b3goY29uc3QgQm94JikgPSBkZWZhdWx0OwotICAgIEJveChCb3gmJikgPSBkZWZhdWx0OwotICAg
IH5Cb3goKSA9IGRlZmF1bHQ7Ci0gICAgQm94JiBvcGVyYXRvcj0oY29uc3QgQm94JikgPSBkZWZh
dWx0OwotICAgIEJveCYgb3BlcmF0b3I9KEJveCYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBjb25zdCBJ
dGVyYXRvciYgaXRlcmF0b3IoKSBjb25zdDsKKyAgICBmcmllbmQgY2xhc3MgRWxlbWVudEJveEl0
ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CisKKyAgICBQYXRoVmFy
aWFudCBtX3BhdGhWYXJpYW50OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+Ci1jbGFz
cyBUZXh0Qm94IDogcHVibGljIEJveDxJdGVyYXRvcj4geworY2xhc3MgVGV4dEJveCA6IHB1Ymxp
YyBCb3ggewogcHVibGljOgorICAgIFRleHRCb3goUGF0aFZhcmlhbnQmJik7CisKICAgICBib29s
IGhhc0h5cGhlbigpIGNvbnN0OwogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0OwogCkBAIC04
MSwyMSArNzksMTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0xhc3RPbkxpbmUoKSBjb25zdDsK
ICAgICBib29sIGlzTGFzdCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgVGV4dEJveCgpID0g
ZGVmYXVsdDsKLSAgICBUZXh0Qm94KGNvbnN0IFRleHRCb3gmKSA9IGRlZmF1bHQ7Ci0gICAgVGV4
dEJveChUZXh0Qm94JiYpID0gZGVmYXVsdDsKLSAgICB+VGV4dEJveCgpID0gZGVmYXVsdDsKLSAg
ICBUZXh0Qm94JiBvcGVyYXRvcj0oY29uc3QgVGV4dEJveCYpID0gZGVmYXVsdDsKLSAgICBUZXh0
Qm94JiBvcGVyYXRvcj0oVGV4dEJveCYmKSA9IGRlZmF1bHQ7Ci0KLSAgICB1c2luZyBCb3g8SXRl
cmF0b3I+OjppdGVyYXRvcjsKIH07CiAKLWNsYXNzIFRleHRCb3hJdGVyYXRvciA6IHByaXZhdGUg
VGV4dEJveDxUZXh0Qm94SXRlcmF0b3I+IHsKK2NsYXNzIFRleHRCb3hJdGVyYXRvciB7CiBwdWJs
aWM6Ci0gICAgVGV4dEJveEl0ZXJhdG9yKCkgOiBtX3BhdGhWYXJpYW50KENvbXBsZXhQYXRoIHsg
bnVsbHB0ciwgeyB9IH0pIHsgfTsKKyAgICBUZXh0Qm94SXRlcmF0b3IoKSA6IG1fdGV4dEJveChD
b21wbGV4UGF0aCB7IG51bGxwdHIsIHsgfSB9KSB7IH07CiAKICAgICBleHBsaWNpdCBUZXh0Qm94
SXRlcmF0b3IoY29uc3QgSW5saW5lVGV4dEJveCopOwogICAgIFRleHRCb3hJdGVyYXRvcihWZWN0
b3I8Y29uc3QgSW5saW5lVGV4dEJveCo+JiYgc29ydGVkLCBzaXplX3QgaW5kZXgpOwpAQCAtMTEz
LDU4ICsxMDEsMzEgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShFbmRJdGVyYXRvcikg
Y29uc3QgeyByZXR1cm4gYXRFbmQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShFbmRJdGVyYXRv
cikgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KIAotICAgIGNvbnN0IFRleHRCb3gmIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgY29uc3QgVGV4dEJveCogb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBUZXh0Qm94JiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiBtX3RleHRCb3g7IH0KKyAgICBjb25zdCBUZXh0Qm94KiBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdGV4dEJveDsgfQogCiAgICAgYm9vbCBhdEVuZCgp
IGNvbnN0OwogCi0gICAgdXNpbmcgQm94VHlwZSA9IFRleHRCb3g8VGV4dEJveEl0ZXJhdG9yPjsK
LQogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQm94PFRleHRCb3hJdGVyYXRvcj47Ci0gICAg
ZnJpZW5kIGNsYXNzIFRleHRCb3g8VGV4dEJveEl0ZXJhdG9yPjsKLQotICAgIHN0cnVjdCBTaW1w
bGVQYXRoIHsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
IGl0ZXJhdG9yOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0
b3IgZW5kOwotICAgIH07Ci0gICAgc3RydWN0IENvbXBsZXhQYXRoIHsKLSAgICAgICAgY29uc3Qg
SW5saW5lVGV4dEJveCogaW5saW5lQm94OwotICAgICAgICBWZWN0b3I8Y29uc3QgSW5saW5lVGV4
dEJveCo+IHNvcnRlZElubGluZVRleHRCb3hlczsKLSAgICAgICAgc2l6ZV90IHNvcnRlZElubGlu
ZVRleHRCb3hJbmRleCB7IDAgfTsKLQotICAgICAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0
SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCkgY29uc3Q7Ci0gICAgfTsKLSAgICBWYXJpYW50PFNp
bXBsZVBhdGgsIENvbXBsZXhQYXRoPiBtX3BhdGhWYXJpYW50OworICAgIFRleHRCb3ggbV90ZXh0
Qm94OwogfTsKIAotY2xhc3MgRWxlbWVudEJveEl0ZXJhdG9yIDogcHJpdmF0ZSBCb3g8RWxlbWVu
dEJveEl0ZXJhdG9yPiB7CitjbGFzcyBFbGVtZW50Qm94SXRlcmF0b3IgewogcHVibGljOgotICAg
IEVsZW1lbnRCb3hJdGVyYXRvcigpIDogbV9wYXRoVmFyaWFudChDb21wbGV4UGF0aCB7IG51bGxw
dHIgfSkgeyB9OworICAgIEVsZW1lbnRCb3hJdGVyYXRvcigpIDogbV9ib3goQ29tcGxleFBhdGgg
eyBudWxscHRyLCB7IH0gfSkgeyB9OwogCiAgICAgZXhwbGljaXQgRWxlbWVudEJveEl0ZXJhdG9y
KGNvbnN0IElubGluZUVsZW1lbnRCb3gqKTsKICAgICBFbGVtZW50Qm94SXRlcmF0b3IoU2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yLCBTaW1wbGVMaW5lTGF5b3V0OjpSdW5S
ZXNvbHZlcjo6SXRlcmF0b3IgZW5kKTsKIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQogCi0gICAgY29uc3QgQm94JiBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiAqdGhpczsgfQotICAgIGNvbnN0IEJveCogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBCb3gmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIG1fYm94OyB9CisgICAgY29uc3QgQm94KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Jm1fYm94OyB9CiAKICAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAKLSAgICB1c2luZyBCb3hUeXBl
ID0gQm94PEVsZW1lbnRCb3hJdGVyYXRvcj47Ci0KIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IEJveDxFbGVtZW50Qm94SXRlcmF0b3I+OwotCi0gICAgc3RydWN0IFNpbXBsZVBhdGggewotICAg
ICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgaXRlcmF0b3I7Ci0g
ICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBlbmQ7Ci0gICAg
fTsKLSAgICBzdHJ1Y3QgQ29tcGxleFBhdGggewotICAgICAgICBjb25zdCBJbmxpbmVFbGVtZW50
Qm94KiBpbmxpbmVCb3g7Ci0gICAgfTsKLSAgICBWYXJpYW50PFNpbXBsZVBhdGgsIENvbXBsZXhQ
YXRoPiBtX3BhdGhWYXJpYW50OworICAgIEJveCBtX2JveDsKIH07CiAKIGNsYXNzIFRleHRCb3hS
YW5nZSB7CkBAIC0xODgsMTcwICsxNDksOTggQEAgRWxlbWVudEJveEl0ZXJhdG9yIGVsZW1lbnRC
b3hGb3IoY29uc3QgUmVuZGVyTGluZUJyZWFrJik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBp
bmxpbmUgRmxvYXRSZWN0IEJveDxJdGVyYXRvcj46OnJlY3QoKSBjb25zdAoraW5saW5lIEJveDo6
Qm94KFBhdGhWYXJpYW50JiYgcGF0aCkKKyAgICA6IG1fcGF0aFZhcmlhbnQoV1RGTW92ZShwYXRo
KSkKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1w
bGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGguaXRlcmF0b3IpLnJlY3QoKTsK
LSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6
OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+ZnJh
bWVSZWN0KCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCku
bV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRl
cmF0b3I+IGlubGluZSBGbG9hdFJlY3QgQm94PEl0ZXJhdG9yPjo6bG9naWNhbFJlY3QoKSBjb25z
dAoraW5saW5lIEZsb2F0UmVjdCBCb3g6OnJlY3QoKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxl
ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAg
ICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikucmVjdCgpOwotICAgIH07Ci0KLSAgICBhdXRvIGNv
bXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsK
LSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5sb2dpY2FsRnJhbWVSZWN0KCk7Ci0gICAg
fTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwg
c2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50
LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnJlY3QoKTsKKyAgICB9KTsK
IH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBib29sIEJveDxJdGVyYXRvcj46
OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdAoraW5saW5lIEZsb2F0UmVjdCBCb3g6Omxv
Z2ljYWxSZWN0KCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1l
IEl0ZXJhdG9yOjpTaW1wbGVQYXRoJikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Owot
Ci0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQ
YXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRv
cigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0
aC5sb2dpY2FsUmVjdCgpOworICAgIH0pOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4g
aW5saW5lIGJvb2wgQm94PEl0ZXJhdG9yPjo6ZGlyT3ZlcnJpZGUoKSBjb25zdAoraW5saW5lIGJv
b2wgQm94Ojppc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBs
ZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJikgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVu
YW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5p
bmxpbmVCb3gtPmRpck92ZXJyaWRlKCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAg
IHJldHVybiBwYXRoLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICB9KTsKIH0KIAotdGVt
cGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBib29sIEJveDxJdGVyYXRvcj46OmlzTGluZUJy
ZWFrKCkgY29uc3QKK2lubGluZSBib29sIEJveDo6ZGlyT3ZlcnJpZGUoKSBjb25zdAogewotICAg
IGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBh
dGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikuaXNMaW5lQnJlYWsoKTsKLSAg
ICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNv
bXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+aXNMaW5l
QnJlYWsoKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5t
X3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguZGly
T3ZlcnJpZGUoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGlu
ZSBjb25zdCBJdGVyYXRvciYgQm94PEl0ZXJhdG9yPjo6aXRlcmF0b3IoKSBjb25zdAoraW5saW5l
IGJvb2wgQm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEl0ZXJhdG9yJj4oKnRoaXMpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0
aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNMaW5lQnJl
YWsoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBib29s
IFRleHRCb3g8SXRlcmF0b3I+OjpoYXNIeXBoZW4oKSBjb25zdAoraW5saW5lIGJvb2wgVGV4dEJv
eDo6aGFzSHlwaGVuKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVu
YW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGgu
aXRlcmF0b3IpLmhhc0h5cGhlbigpOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShj
b25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0
dXJuIHBhdGguaW5saW5lQm94LT5oYXNIeXBoZW4oKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsK
KyAgICAgICAgcmV0dXJuIHBhdGguaGFzSHlwaGVuKCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRl
PGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgU3RyaW5nVmlldyBUZXh0Qm94PEl0ZXJhdG9yPjo6dGV4
dCgpIGNvbnN0CitpbmxpbmUgVGV4dEJveDo6VGV4dEJveChQYXRoVmFyaWFudCYmIHBhdGgpCisg
ICAgOiBCb3goV1RGTW92ZShwYXRoKSkKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5
cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBh
dGguaXRlcmF0b3IpLnRleHQoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29u
c3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVy
biBTdHJpbmdWaWV3KHBhdGguaW5saW5lQm94LT5yZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5n
KHBhdGguaW5saW5lQm94LT5zdGFydCgpLCBwYXRoLmlubGluZUJveC0+bGVuKCkpOwotICAgIH07
Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNp
bXBsZSwgY29tcGxleCk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgdW5z
aWduZWQgVGV4dEJveDxJdGVyYXRvcj46OmxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdAoraW5saW5l
IFN0cmluZ1ZpZXcgVGV4dEJveDo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBb
XShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICBy
ZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS5sb2NhbFN0YXJ0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8g
Y29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkg
ewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3gtPnN0YXJ0KCk7Ci0gICAgfTsKLQotICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBj
b21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRv
JiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnRleHQoKTsKKyAgICB9KTsKIH0KIAotdGVt
cGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSB1bnNpZ25lZCBUZXh0Qm94PEl0ZXJhdG9yPjo6
bG9jYWxFbmRPZmZzZXQoKSBjb25zdAoraW5saW5lIHVuc2lnbmVkIFRleHRCb3g6OmxvY2FsU3Rh
cnRPZmZzZXQoKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUg
SXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVy
YXRvcikubG9jYWxFbmQoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3Qg
dHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBw
YXRoLmlubGluZUJveC0+ZW5kKCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJl
dHVybiBwYXRoLmxvY2FsU3RhcnRPZmZzZXQoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xh
c3MgSXRlcmF0b3I+IGlubGluZSB1bnNpZ25lZCBUZXh0Qm94PEl0ZXJhdG9yPjo6bGVuZ3RoKCkg
Y29uc3QKK2lubGluZSB1bnNpZ25lZCBUZXh0Qm94Ojpsb2NhbEVuZE9mZnNldCgpIGNvbnN0CiB7
Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0
aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS5lbmQoKSAtICgqcGF0
aC5pdGVyYXRvcikuc3RhcnQoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29u
c3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVy
biBwYXRoLmlubGluZUJveC0+bGVuKCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAg
IHJldHVybiBwYXRoLmxvY2FsRW5kT2Zmc2V0KCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNs
YXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9vbCBUZXh0Qm94PEl0ZXJhdG9yPjo6aXNMYXN0T25MaW5l
KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBUZXh0Qm94OjpsZW5ndGgoKSBjb25zdAogewotICAg
IGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBh
dGgpIHsKLSAgICAgICAgYXV0byBuZXh0ID0gcGF0aC5pdGVyYXRvcjsKLSAgICAgICAgKytuZXh0
OwotICAgICAgICByZXR1cm4gbmV4dCA9PSBwYXRoLmVuZCB8fCAoKnBhdGguaXRlcmF0b3IpLmxp
bmVJbmRleCgpICE9ICgqbmV4dCkubGluZUluZGV4KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29t
cGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewot
ICAgICAgICBhdXRvKiBuZXh0ID0gcGF0aC5uZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCk7
Ci0gICAgICAgIHJldHVybiAhbmV4dCB8fCAmcGF0aC5pbmxpbmVCb3gtPnJvb3QoKSAhPSAmbmV4
dC0+cm9vdCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigp
Lm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5s
ZW5ndGgoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBi
b29sIFRleHRCb3g8SXRlcmF0b3I+Ojppc0xhc3QoKSBjb25zdAoraW5saW5lIGJvb2wgVGV4dEJv
eDo6aXNMYXN0T25MaW5lKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5
cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIGF1dG8gbmV4dCA9
IHBhdGguaXRlcmF0b3I7Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0dXJuIG5leHQgPT0g
cGF0aC5lbmQ7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1l
IEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gIXBhdGgubmV4
dElubGluZVRleHRCb3hJblRleHRPcmRlcigpOwotICAgIH07CisgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0
aC5pc0xhc3RPbkxpbmUoKTsKKyAgICB9KTsKK30KIAotICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKK2lubGluZSBib29s
IFRleHRCb3g6OmlzTGFzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9w
YXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pc0xhc3Qo
KTsKKyAgICB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzY0MzI4OGVjNDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsQ29t
cGxleFBhdGguaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExp
bmVMYXlvdXRUcmF2ZXJzYWwgeworCitjbGFzcyBDb21wbGV4UGF0aCB7CitwdWJsaWM6CisgICAg
Q29tcGxleFBhdGgoY29uc3QgSW5saW5lQm94KiBpbmxpbmVCb3gsIFZlY3Rvcjxjb25zdCBJbmxp
bmVUZXh0Qm94Kj4mJiBzb3J0ZWRJbmxpbmVUZXh0Qm94ZXMgPSB7IH0sIHNpemVfdCBzb3J0ZWRJ
bmxpbmVUZXh0Qm94SW5kZXggPSAwKQorICAgICAgICA6IG1faW5saW5lQm94KGlubGluZUJveCkK
KyAgICAgICAgLCBtX3NvcnRlZElubGluZVRleHRCb3hlcyhXVEZNb3ZlKHNvcnRlZElubGluZVRl
eHRCb3hlcykpCisgICAgICAgICwgbV9zb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXgoc29ydGVkSW5s
aW5lVGV4dEJveEluZGV4KQorICAgIHsgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUJveC0+ZnJhbWVSZWN0KCk7IH0KKyAgICBGbG9hdFJlY3QgbG9naWNh
bFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+bG9naWNhbEZyYW1lUmVjdCgpOyB9
CisKKyAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOyB9CisgICAgYm9vbCBkaXJPdmVycmlk
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5kaXJPdmVycmlkZSgpOyB9CisgICAgYm9v
bCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5pc0xpbmVCcmVhaygp
OyB9CisKKyAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3go
KS0+aGFzSHlwaGVuKCk7IH0KKyAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IHJldHVybiBT
dHJpbmdWaWV3KGlubGluZVRleHRCb3goKS0+cmVuZGVyZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhp
bmxpbmVUZXh0Qm94KCktPnN0YXJ0KCksIGlubGluZVRleHRCb3goKS0+bGVuKCkpOyB9CisgICAg
dW5zaWduZWQgbG9jYWxTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3go
KS0+c3RhcnQoKTsgfQorICAgIHVuc2lnbmVkIGxvY2FsRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gaW5saW5lVGV4dEJveCgpLT5lbmQoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+bGVuKCk7IH0KKworICAgIGlubGluZSBib29sIGlz
TGFzdE9uTGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvKiBuZXh0ID0gbmV4dElubGlu
ZVRleHRCb3hJblRleHRPcmRlcigpOworICAgICAgICByZXR1cm4gIW5leHQgfHwgJmlubGluZVRl
eHRCb3goKS0+cm9vdCgpICE9ICZuZXh0LT5yb290KCk7CisgICAgfQorICAgIGlubGluZSBib29s
IGlzTGFzdCgpIGNvbnN0IHsgcmV0dXJuICFuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCk7
IH07CisKKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCkgeyBtX2lu
bGluZUJveCA9IGlubGluZVRleHRCb3goKS0+bmV4dFRleHRCb3goKTsgfQorICAgIHZvaWQgdHJh
dmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVyKCkKKyAgICB7CisgICAgICAgIG1faW5saW5lQm94
ID0gbmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpOworICAgICAgICBpZiAoIW1fc29ydGVk
SW5saW5lVGV4dEJveGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICsrbV9zb3J0ZWRJbmxpbmVU
ZXh0Qm94SW5kZXg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbXBsZXhQ
YXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3ggPT0gb3RoZXIubV9pbmxpbmVC
b3g7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1faW5saW5lQm94OyB9CisK
K3ByaXZhdGU6CisgICAgY29uc3QgSW5saW5lVGV4dEJveCogaW5saW5lVGV4dEJveCgpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PElubGluZVRleHRCb3g+KG1faW5saW5lQm94KTsgfQorICAgIGNv
bnN0IElubGluZVRleHRCb3gqIG5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIoKSBjb25zdDsK
KworICAgIGNvbnN0IElubGluZUJveCogbV9pbmxpbmVCb3g7CisgICAgVmVjdG9yPGNvbnN0IElu
bGluZVRleHRCb3gqPiBtX3NvcnRlZElubGluZVRleHRCb3hlczsKKyAgICBzaXplX3QgbV9zb3J0
ZWRJbmxpbmVUZXh0Qm94SW5kZXggeyAwIH07Cit9OworCitpbmxpbmUgY29uc3QgSW5saW5lVGV4
dEJveCogQ29tcGxleFBhdGg6Om5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIoKSBjb25zdAor
eworICAgIGlmICghbV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
IGlmIChtX3NvcnRlZElubGluZVRleHRCb3hJbmRleCArIDEgPCBtX3NvcnRlZElubGluZVRleHRC
b3hlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXNb
bV9zb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggKyAxXTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIHJldHVybiBpbmxpbmVUZXh0Qm94KCktPm5leHRUZXh0Qm94KCk7Cit9CisK
K30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlv
dXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9M
aW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4wMDlhOGNiNDQ3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTGluZUxh
eW91dFRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGluZUxheW91dFRyYXZlcnNhbCB7CisK
K2NsYXNzIFNpbXBsZVBhdGggeworcHVibGljOgorICAgIFNpbXBsZVBhdGgoU2ltcGxlTGluZUxh
eW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yLCBTaW1wbGVMaW5lTGF5b3V0OjpS
dW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5kKQorICAgICAgICA6IG1faXRlcmF0b3IoaXRlcmF0b3Ip
CisgICAgICAgICwgbV9lbmQoZW5kKQorICAgIHsgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLnJlY3QoKTsgfQorICAgIEZsb2F0UmVjdCBsb2dp
Y2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIHJlY3QoKTsgfQorCisgICAgYm9vbCBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgZGlyT3ZlcnJp
ZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25z
dCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmlzTGluZUJyZWFrKCk7IH0KKworICAgIGJvb2wgaGFz
SHlwaGVuKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5oYXNIeXBoZW4oKTsgfQorICAg
IFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikudGV4dCgpOyB9
CisgICAgdW5zaWduZWQgbG9jYWxTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVy
YXRvcikubG9jYWxTdGFydCgpOyB9CisgICAgdW5zaWduZWQgbG9jYWxFbmRPZmZzZXQoKSBjb25z
dCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmxvY2FsRW5kKCk7IH0KKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmVuZCgpIC0gKCptX2l0ZXJhdG9yKS5z
dGFydCgpOyB9CisKKyAgICBib29sIGlzTGFzdE9uTGluZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBhdXRvIG5leHQgPSBtX2l0ZXJhdG9yOworICAgICAgICArK25leHQ7CisgICAgICAgIHJldHVy
biBuZXh0ID09IG1fZW5kIHx8ICgqbV9pdGVyYXRvcikubGluZUluZGV4KCkgIT0gKCpuZXh0KS5s
aW5lSW5kZXgoKTsKKyAgICB9CisgICAgYm9vbCBpc0xhc3QoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgYXV0byBuZXh0ID0gbV9pdGVyYXRvcjsKKyAgICAgICAgKytuZXh0OworICAgICAgICByZXR1
cm4gbmV4dCA9PSBtX2VuZDsKKyAgICB9OworCisgICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0Qm94
SW5WaXN1YWxPcmRlcigpCisgICAgeworICAgICAgICAvLyBGSVhNRTogU0xMIGNhbiBjb250YWlu
cyA8YnI+IHJ1bnMgYW5kIHRoaXMgc2hvdWxkIHNraXAgb3ZlciB0aGVtLgorICAgICAgICArK21f
aXRlcmF0b3I7CisgICAgfQorICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVy
KCkgeyAgdHJhdmVyc2VOZXh0VGV4dEJveEluVmlzdWFsT3JkZXIoKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNpbXBsZVBhdGgmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2l0ZXJh
dG9yID09IG90aGVyLm1faXRlcmF0b3I7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1
cm4gbV9pdGVyYXRvciA9PSBtX2VuZDsgfQorCitwcml2YXRlOgorICAgIFNpbXBsZUxpbmVMYXlv
dXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBtX2l0ZXJhdG9yOworICAgIFNpbXBsZUxpbmVMYXlv
dXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBtX2VuZDsKK307CisKK30KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384538</attachid>
            <date>2019-11-30 04:10:11 -0800</date>
            <delta_ts>2019-11-30 04:44:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>linelayouttraversal-simplify-3.patch</filename>
            <type>text/plain</type>
            <size>37120</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmYxYjdkNDQ0Yy4uOGRiNjA4YzdiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMzAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgcGF0aCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgaW4gTGluZUxh
eW91dFRyYXZlcnNhbCB0byAqUGF0aCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSBMaW5lTGF5b3V0VHJhdmVyc2FsIGFuZCBt
YWtlIGl0IGVhc2llciB0byBleHRlbmQuCisKKyAgICAgICAgLSBUdXJuIFNpbXBsZVBhdGggYW5k
IENvbXBsZXhQYXRoIHN0cnVjdHMgaW50byBjbGFzc2VzCisgICAgICAgIC0gTW92ZSB0aGVtIHRv
IHNlcGFyYXRlIGZpbGVzCisgICAgICAgIC0gTWFrZSBwYXRoIGltcGxlbWVudGF0aW9uIGZ1bmN0
aW9ucyBjbGFzcyBtZW1iZXJzLCBjYWxsZWQgdmlhIGdlbmVyaWMgbGFtYmRhcworICAgICAgICAt
IEluc3RlYWQgb2YgaW5oZXJpdGluZyBCb3gvVGV4dEJveCB0byBpdGVyYXRvcnMsIG1ha2UgaXQg
YSBtZW1iZXIgdmFyaWFibGUuCisgICAgICAgIC0gTW92ZSB0aGUgcGF0aCB2YXJpYW50IHRvIEJv
eCwgYXZvaWRpbmcgdXNlIG9mIHRlbXBsYXRlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRCb3gpOgorICAgICAgICAqIHJlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjp0cmF2
ZXJzZU5leHRJblZpc3VhbE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5UZXh0T3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRv
cj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRC
b3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjphdEVu
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
SXRlcmF0b3I6OkNvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yLT4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJh
dG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRv
ci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6cmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpCb3g6OmxvZ2lj
YWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJv
eDo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aGFzSHlwaGVuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6OlRleHRC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6dGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
Ojpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRU
cmF2ZXJzYWw6OlRleHRCb3g6OmxvY2FsRW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6Omxlbmd0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94Ojppc0xhc3RPbkxpbmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aXNM
YXN0IGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g8SXRlcmF0b3I+OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDxJdGVyYXRvcj46OmxvZ2lj
YWxSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OkJveDxJdGVyYXRvcj46OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9y
Pjo6ZGlyT3ZlcnJpZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6aXNMaW5lQnJlYWsgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6
aXRlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omhhc0h5cGhlbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6
dGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9y
Pjo6bG9jYWxFbmRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omxlbmd0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJh
dG9yPjo6aXNMYXN0T25MaW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g8SXRlcmF0b3I+Ojppc0xhc3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNv
bXBsZXhQYXRoOjpDb21wbGV4UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpDb21wbGV4UGF0aDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGVmdFRvUmln
aHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNh
bDo6Q29tcGxleFBhdGg6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6aGFzSHlwaGVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQ
YXRoOjp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6
OkNvbXBsZXhQYXRoOjpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bGVu
Z3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBs
ZXhQYXRoOjppc0xhc3RPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6dHJhdmVyc2VOZXh0VGV4dEJveElu
VmlzdWFsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29t
cGxleFBhdGg6OnRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6YXRF
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxl
eFBhdGg6OmlubGluZVRleHRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6Om5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQ
YXRoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6U2ltcGxlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpTaW1wbGVQYXRoOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6ZGlyT3ZlcnJpZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aGFzSHlwaGVuIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0
aDo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMYXN0
T25MaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNp
bXBsZVBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJz
ZU5leHRUZXh0Qm94SW5UZXh0T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6U2ltcGxlUGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjphdEVuZCBjb25zdCk6CisKIDIwMTkt
MTEtMjkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJ
RkNdIEFkZCBzdXBwb3J0IGZvciBzaW1wbGUgaHlwaGVuYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxYTZmMTg4MDgxOC4u
OTgyNDMyYWI1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTQ3OTQsNiArNDc5NCw4IEBACiAJCUU0Mjk1RkE0MTJCMDYxNEUw
MEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291
cmNlTG9hZFByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQyRTc2REMxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDJFNzZEQjFDN0FG
Nzc2MDBFMzYxNEQgLyogU3R5bGVVcGRhdGUuaCAqLzsgfTsKIAkJRTQzMTA1QkIxNjc1MEYxNjAw
REIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2Fs
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQz
NDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyMTIz
OTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNDM0M0QyNTIzOTI3
NzkwMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyNDIzOTI3NzhGMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQTAyM0IxN0VCMzcwQTAwNENE
RDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0M0EwMjNBMTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQUY4
RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8q
IENhY2hlVmFsaWRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUU0NDBBQTk2MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERl
c2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0MEFBOTUxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1lbnRBbmRUZXh0RGVzY2Vu
ZGFudEl0ZXJhdG9yLmggKi87IH07CkBAIC0xNTEwNyw2ICsxNTEwOSw4IEBACiAJCUU0MkU3NkRC
MUM3QUY3NzYwMEUzNjE0RCAvKiBTdHlsZVVwZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHlsZVVwZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJz
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVRyYXZlcnNhbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDM0M0QyMTIzOTI3NzgzMDBFQkJCNjYgLyog
TGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQzNDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2
ZXJzYWxDb21wbGV4UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5l
TGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDNBMDIzQzE3RUIzNzEzMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzQUY4RTQxQUM1QjdERDAwQ0E3MTdF
IC8qIENhY2hlVmFsaWRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZVZhbGlkYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Mjg3MjUsNiArMjg3MjksOCBAQAogCQkJCUZGRUZBQjI5MTgzODBEQTAwMDUxNDUzNCAvKiBMaW5l
TGF5b3V0U3RhdGUuaCAqLywKIAkJCQlFNDg0QTMzRDIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxh
eW91dFRyYXZlcnNhbC5jcHAgKi8sCiAJCQkJRTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZBIC8qIExp
bmVMYXlvdXRUcmF2ZXJzYWwuaCAqLywKKwkJCQlFNDM0M0QyMTIzOTI3NzgzMDBFQkJCNjYgLyog
TGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLywKKwkJCQlFNDM0M0QyNDIzOTI3NzhG
MDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi8sCiAJCQkJRkZE
QkMwNDYxODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5jcHAgKi8sCiAJCQkJRkZEQkMwNDUx
ODNEMjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5oICovLAogCQkJCUZGQUMzMEZEMTg0RkIxNDUw
MDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuY3BwICovLApAQCAtMzA1MzUsNiArMzA1NDEsNyBA
QAogCQkJCTgzNzA1NjkwMUY1MDkxNUMwMEQ5MzQyNSAvKiBKU0ZpbGVTeXN0ZW1FbnRyeUNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzNCOUUzNjFGNTA4RDg1MDBFMEU0MjggLyogSlNG
aWxlU3lzdGVtRmlsZUVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4ODFGRTg2ODZB
MDAyMDMxQ0MgLyogSlNGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQzNDNEMjUyMzky
Nzc5MDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjZEOUQyN0IxNEVBQzA4NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzI4MDgzM0YxQzZEQzI2RjAwMTQ1MUI2IC8qIEpTRm9udEZhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFDMjRFRUE5MUM3MkE3QjQwMDgwRjhGQyAvKiBKU0ZvbnRG
YWNlU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNjgyLDYgKzMxNjg5LDcgQEAKIAkJCQk1N0RD
RUQ3NDIxNDMwNUYwMDAxNkI4NDcgLyogUHVibGljS2V5Q3JlZGVudGlhbERhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3MzAzQkVGMjAwOTgwQzYwMDM1NTk2NSAvKiBQdWJsaWNLZXlDcmVkZW50
aWFsRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNDMEEyMDA5OUJBRDAwMzU1
OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTQzNDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1w
bGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0JFQjIwMDk3RjQwMDAzNTU5NjUgLyog
UHVibGljS2V5Q3JlZGVudGlhbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwODFGRjAwMTZC
MEEyRDMwMDhBQUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTEwRkIw
ODRCMTRFMTVDN0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCAy
MTM1YTUyYmM3ZS4uMzEzZTNlNTMwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIHdyaXRlRGVidWdJ
bmZvKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgT3B0aW9uU2V0
PFJlbmRlcgogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgd3JpdGVUZXh0Qm94KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJUZXh0JiBvLCBjb25zdCBMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0
Qm94SXRlcmF0b3I6OkJveFR5cGUmIHRleHRCb3gpCitzdGF0aWMgdm9pZCB3cml0ZVRleHRCb3go
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IExpbmVMYXlvdXRUcmF2
ZXJzYWw6OlRleHRCb3gmIHRleHRCb3gpCiB7CiAgICAgYXV0byByZWN0ID0gdGV4dEJveC5yZWN0
KCk7CiAgICAgYXV0byBsb2dpY2FsUmVjdCA9IHRleHRCb3gubG9naWNhbFJlY3QoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5j
cHAKaW5kZXggOTBlOWUwNGRiYjMuLjc2NWI5Nzg3MmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcApAQCAtMzIsODgg
KzMyLDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMaW5lTGF5b3V0VHJhdmVy
c2FsIHsKIAogVGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IoY29uc3QgSW5saW5lVGV4
dEJveCogaW5saW5lVGV4dEJveCkKLSAgICA6IG1fcGF0aFZhcmlhbnQoQ29tcGxleFBhdGggeyBp
bmxpbmVUZXh0Qm94LCB7IH0gfSkKKyAgICA6IG1fdGV4dEJveChDb21wbGV4UGF0aCB7IGlubGlu
ZVRleHRCb3gsIHsgfSB9KQogewogfQogVGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3Io
VmVjdG9yPGNvbnN0IElubGluZVRleHRCb3gqPiYmIHNvcnRlZCwgc2l6ZV90IGluZGV4KQotICAg
IDogbV9wYXRoVmFyaWFudChDb21wbGV4UGF0aCB7IGluZGV4IDwgc29ydGVkLnNpemUoKSA/IHNv
cnRlZFtpbmRleF0gOiBudWxscHRyLCBXVEZNb3ZlKHNvcnRlZCksIGluZGV4IH0pCisgICAgOiBt
X3RleHRCb3goQ29tcGxleFBhdGggeyBpbmRleCA8IHNvcnRlZC5zaXplKCkgPyBzb3J0ZWRbaW5k
ZXhdIDogbnVsbHB0ciwgV1RGTW92ZShzb3J0ZWQpLCBpbmRleCB9KQogewogfQogCiBUZXh0Qm94
SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6
SXRlcmF0b3IgaXRlcmF0b3IsIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRv
ciBlbmQpCi0gICAgOiBtX3BhdGhWYXJpYW50KFNpbXBsZVBhdGggeyBpdGVyYXRvciwgZW5kIH0p
CisgICAgOiBtX3RleHRCb3goU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBlbmQgfSkKIHsKIH0KIAog
VGV4dEJveEl0ZXJhdG9yJiBUZXh0Qm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dEluVmlzdWFsT3Jk
ZXIoKQogewotICAgIGF1dG8gc2ltcGxlID0gW10oU2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAg
ICArK3BhdGguaXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKENvbXBs
ZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHBhdGguaW5saW5lQm94ID0gcGF0aC5pbmxpbmVCb3gt
Pm5leHRUZXh0Qm94KCk7Ci0gICAgfTsKLQotICAgIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFu
dCwgc2ltcGxlLCBjb21wbGV4KTsKLQorICAgIFdURjo6c3dpdGNoT24obV90ZXh0Qm94Lm1fcGF0
aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRUZXh0
Qm94SW5WaXN1YWxPcmRlcigpOworICAgIH0pOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotY29u
c3QgSW5saW5lVGV4dEJveCogVGV4dEJveEl0ZXJhdG9yOjpDb21wbGV4UGF0aDo6bmV4dElubGlu
ZVRleHRCb3hJblRleHRPcmRlcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFzb3J0ZWRJbmxpbmVUZXh0
Qm94ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChzb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXgg
KyAxIDwgc29ydGVkSW5saW5lVGV4dEJveGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBz
b3J0ZWRJbmxpbmVUZXh0Qm94ZXNbc29ydGVkSW5saW5lVGV4dEJveEluZGV4ICsgMV07Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gaW5saW5lQm94LT5uZXh0VGV4
dEJveCgpOwotfQotCiBUZXh0Qm94SXRlcmF0b3ImIFRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VO
ZXh0SW5UZXh0T3JkZXIoKQogewotICAgIGF1dG8gc2ltcGxlID0gW10oU2ltcGxlUGF0aCYgcGF0
aCkgewotICAgICAgICArK3BhdGguaXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxl
eCA9IFtdKENvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHBhdGguaW5saW5lQm94ID0gcGF0
aC5uZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCk7Ci0gICAgICAgIGlmICghcGF0aC5zb3J0
ZWRJbmxpbmVUZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgKytwYXRoLnNvcnRlZElu
bGluZVRleHRCb3hJbmRleDsKLSAgICB9OwotCi0gICAgV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJp
YW50LCBzaW1wbGUsIGNvbXBsZXgpOwotCisgICAgV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9w
YXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dFRl
eHRCb3hJblRleHRPcmRlcigpOworICAgIH0pOwogICAgIHJldHVybiAqdGhpczsKIH0KIAogYm9v
bCBUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKIHsKLSAgICBpZiAobV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVyLm1fcGF0
aFZhcmlhbnQuaW5kZXgoKSkKKyAgICBpZiAobV90ZXh0Qm94Lm1fcGF0aFZhcmlhbnQuaW5kZXgo
KSAhPSBvdGhlci5tX3RleHRCb3gubV9wYXRoVmFyaWFudC5pbmRleCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNpbXBsZSA9IFsmXShjb25zdCBTaW1wbGVQYXRoJiBwYXRo
KSB7Ci0gICAgICAgIHJldHVybiBwYXRoLml0ZXJhdG9yID09IFdURjo6Z2V0PFNpbXBsZVBhdGg+
KG90aGVyLm1fcGF0aFZhcmlhbnQpLml0ZXJhdG9yOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBs
ZXggPSBbJl0oY29uc3QgQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGgu
aW5saW5lQm94ID09IFdURjo6Z2V0PENvbXBsZXhQYXRoPihvdGhlci5tX3BhdGhWYXJpYW50KS5p
bmxpbmVCb3g7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlh
bnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV90ZXh0Qm94
Lm1fcGF0aFZhcmlhbnQsIFsmXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBw
YXRoID09IFdURjo6Z2V0PHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZShwYXRoKT4+KG90aGVyLm1fdGV4
dEJveC5tX3BhdGhWYXJpYW50KTsKKyAgICB9KTsKIH0KIAogYm9vbCBUZXh0Qm94SXRlcmF0b3I6
OmF0RW5kKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFsmXShjb25zdCBTaW1wbGVQYXRo
JiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLml0ZXJhdG9yID09IHBhdGguZW5kOwotICAg
IH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbJl0oY29uc3QgQ29tcGxleFBhdGgmIHBhdGgpIHsK
LSAgICAgICAgcmV0dXJuICFwYXRoLmlubGluZUJveDsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgewor
ICAgICAgICByZXR1cm4gcGF0aC5hdEVuZCgpOworICAgIH0pOwogfQogCiBUZXh0Qm94SXRlcmF0
b3IgZmlyc3RUZXh0Qm94Rm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCkBAIC0xNDUsMjUgKzEw
NywxOSBAQCBUZXh0Qm94UmFuZ2UgdGV4dEJveGVzRm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQp
CiB9CiAKIEVsZW1lbnRCb3hJdGVyYXRvcjo6RWxlbWVudEJveEl0ZXJhdG9yKGNvbnN0IElubGlu
ZUVsZW1lbnRCb3gqIGlubGluZUVsZW1lbnRCb3gpCi0gICAgOiBtX3BhdGhWYXJpYW50KENvbXBs
ZXhQYXRoIHsgaW5saW5lRWxlbWVudEJveCB9KQorICAgIDogbV9ib3goQ29tcGxleFBhdGggeyBp
bmxpbmVFbGVtZW50Qm94LCB7IH0gfSkKIHsKIH0KIEVsZW1lbnRCb3hJdGVyYXRvcjo6RWxlbWVu
dEJveEl0ZXJhdG9yKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVy
YXRvciwgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCkKLSAgICA6
IG1fcGF0aFZhcmlhbnQoU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBlbmQgfSkKKyAgICA6IG1fYm94
KFNpbXBsZVBhdGggeyBpdGVyYXRvciwgZW5kIH0pCiB7CiB9CiAKIGJvb2wgRWxlbWVudEJveEl0
ZXJhdG9yOjphdEVuZCgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbJl0oY29uc3QgU2lt
cGxlUGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pdGVyYXRvciA9PSBwYXRoLmVu
ZDsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gWyZdKGNvbnN0IENvbXBsZXhQYXRoJiBw
YXRoKSB7Ci0gICAgICAgIHJldHVybiAhcGF0aC5pbmxpbmVCb3g7Ci0gICAgfTsKLQotICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9ib3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkg
eworICAgICAgICByZXR1cm4gcGF0aC5hdEVuZCgpOworICAgIH0pOwogfQogCiBFbGVtZW50Qm94
SXRlcmF0b3IgZWxlbWVudEJveEZvcihjb25zdCBSZW5kZXJMaW5lQnJlYWsmIHJlbmRlckVsZW1l
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0
VHJhdmVyc2FsLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJh
dmVyc2FsLmgKaW5kZXggZjQwMWU4MzExZDEuLjEzNGY0MjBiNTBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCkBAIC0yNSwx
MSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgor
I2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIgorI2luY2x1ZGUgIkxp
bmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgot
I2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvVmFy
aWFudC5oPgpAQCAtMzgsMTggKzM3LDIwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFJlbmRlckxpbmVCcmVhazsKLWNsYXNzIFJlbmRlclRleHQ7CiAKIG5hbWVzcGFjZSBMaW5lTGF5
b3V0VHJhdmVyc2FsIHsKIAotY2xhc3MgVGV4dEJveENvbnRleHQ7CitjbGFzcyBFbGVtZW50Qm94
SXRlcmF0b3I7CiBjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CiAKIHN0cnVjdCBFbmRJdGVyYXRvciB7
IH07CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPgogY2xhc3MgQm94IHsKIHB1YmxpYzoKKyAg
ICB1c2luZyBQYXRoVmFyaWFudCA9IFZhcmlhbnQ8U2ltcGxlUGF0aCwgQ29tcGxleFBhdGg+Owor
CisgICAgQm94KFBhdGhWYXJpYW50JiYpOworCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdDsK
ICAgICBGbG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdDsKIApAQCAtNTgsMTkgKzU5LDE2IEBA
IHB1YmxpYzoKICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAg
ICBCb3goKSA9IGRlZmF1bHQ7Ci0gICAgQm94KGNvbnN0IEJveCYpID0gZGVmYXVsdDsKLSAgICBC
b3goQm94JiYpID0gZGVmYXVsdDsKLSAgICB+Qm94KCkgPSBkZWZhdWx0OwotICAgIEJveCYgb3Bl
cmF0b3I9KGNvbnN0IEJveCYpID0gZGVmYXVsdDsKLSAgICBCb3gmIG9wZXJhdG9yPShCb3gmJikg
PSBkZWZhdWx0OwotCi0gICAgY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKCkgY29uc3Q7CisgICAg
ZnJpZW5kIGNsYXNzIEVsZW1lbnRCb3hJdGVyYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJv
eEl0ZXJhdG9yOworCisgICAgUGF0aFZhcmlhbnQgbV9wYXRoVmFyaWFudDsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEl0ZXJhdG9yPgotY2xhc3MgVGV4dEJveCA6IHB1YmxpYyBCb3g8SXRlcmF0b3I+
IHsKK2NsYXNzIFRleHRCb3ggOiBwdWJsaWMgQm94IHsKIHB1YmxpYzoKKyAgICBUZXh0Qm94KFBh
dGhWYXJpYW50JiYpOworCiAgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdDsKICAgICBTdHJpbmdW
aWV3IHRleHQoKSBjb25zdDsKIApAQCAtODEsMjEgKzc5LDExIEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNMYXN0T25MaW5lKCkgY29uc3Q7CiAgICAgYm9vbCBpc0xhc3QoKSBjb25zdDsKLQotcHJv
dGVjdGVkOgotICAgIFRleHRCb3goKSA9IGRlZmF1bHQ7Ci0gICAgVGV4dEJveChjb25zdCBUZXh0
Qm94JikgPSBkZWZhdWx0OwotICAgIFRleHRCb3goVGV4dEJveCYmKSA9IGRlZmF1bHQ7Ci0gICAg
flRleHRCb3goKSA9IGRlZmF1bHQ7Ci0gICAgVGV4dEJveCYgb3BlcmF0b3I9KGNvbnN0IFRleHRC
b3gmKSA9IGRlZmF1bHQ7Ci0gICAgVGV4dEJveCYgb3BlcmF0b3I9KFRleHRCb3gmJikgPSBkZWZh
dWx0OwotCi0gICAgdXNpbmcgQm94PEl0ZXJhdG9yPjo6aXRlcmF0b3I7CiB9OwogCi1jbGFzcyBU
ZXh0Qm94SXRlcmF0b3IgOiBwcml2YXRlIFRleHRCb3g8VGV4dEJveEl0ZXJhdG9yPiB7CitjbGFz
cyBUZXh0Qm94SXRlcmF0b3IgewogcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpIDogbV9w
YXRoVmFyaWFudChDb21wbGV4UGF0aCB7IG51bGxwdHIsIHsgfSB9KSB7IH07CisgICAgVGV4dEJv
eEl0ZXJhdG9yKCkgOiBtX3RleHRCb3goQ29tcGxleFBhdGggeyBudWxscHRyLCB7IH0gfSkgeyB9
OwogCiAgICAgZXhwbGljaXQgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IElubGluZVRleHRCb3gqKTsK
ICAgICBUZXh0Qm94SXRlcmF0b3IoVmVjdG9yPGNvbnN0IElubGluZVRleHRCb3gqPiYmIHNvcnRl
ZCwgc2l6ZV90IGluZGV4KTsKQEAgLTExMyw1OCArMTAxLDMxIEBAIHB1YmxpYzoKICAgICBib29s
IG9wZXJhdG9yPT0oRW5kSXRlcmF0b3IpIGNvbnN0IHsgcmV0dXJuIGF0RW5kKCk7IH0KICAgICBi
b29sIG9wZXJhdG9yIT0oRW5kSXRlcmF0b3IpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CiAK
LSAgICBjb25zdCBUZXh0Qm94JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQot
ICAgIGNvbnN0IFRleHRCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Cisg
ICAgY29uc3QgVGV4dEJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Qm94OyB9
CisgICAgY29uc3QgVGV4dEJveCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3RleHRC
b3g7IH0KIAogICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKIAotICAgIHVzaW5nIEJveFR5cGUgPSBU
ZXh0Qm94PFRleHRCb3hJdGVyYXRvcj47Ci0KIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEJv
eDxUZXh0Qm94SXRlcmF0b3I+OwotICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94PFRleHRCb3hJdGVy
YXRvcj47Ci0KLSAgICBzdHJ1Y3QgU2ltcGxlUGF0aCB7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlv
dXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgU2ltcGxlTGluZUxh
eW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZDsKLSAgICB9OwotICAgIHN0cnVjdCBDb21w
bGV4UGF0aCB7Ci0gICAgICAgIGNvbnN0IElubGluZVRleHRCb3gqIGlubGluZUJveDsKLSAgICAg
ICAgVmVjdG9yPGNvbnN0IElubGluZVRleHRCb3gqPiBzb3J0ZWRJbmxpbmVUZXh0Qm94ZXM7Ci0g
ICAgICAgIHNpemVfdCBzb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggeyAwIH07Ci0KLSAgICAgICAg
Y29uc3QgSW5saW5lVGV4dEJveCogbmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpIGNvbnN0
OwotICAgIH07Ci0gICAgVmFyaWFudDxTaW1wbGVQYXRoLCBDb21wbGV4UGF0aD4gbV9wYXRoVmFy
aWFudDsKKyAgICBUZXh0Qm94IG1fdGV4dEJveDsKIH07CiAKLWNsYXNzIEVsZW1lbnRCb3hJdGVy
YXRvciA6IHByaXZhdGUgQm94PEVsZW1lbnRCb3hJdGVyYXRvcj4geworY2xhc3MgRWxlbWVudEJv
eEl0ZXJhdG9yIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50Qm94SXRlcmF0b3IoKSA6IG1fcGF0aFZh
cmlhbnQoQ29tcGxleFBhdGggeyBudWxscHRyIH0pIHsgfTsKKyAgICBFbGVtZW50Qm94SXRlcmF0
b3IoKSA6IG1fYm94KENvbXBsZXhQYXRoIHsgbnVsbHB0ciwgeyB9IH0pIHsgfTsKIAogICAgIGV4
cGxpY2l0IEVsZW1lbnRCb3hJdGVyYXRvcihjb25zdCBJbmxpbmVFbGVtZW50Qm94Kik7CiAgICAg
RWxlbWVudEJveEl0ZXJhdG9yKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRv
ciwgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCk7CiAKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KIAotICAg
IGNvbnN0IEJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KLSAgICBjb25z
dCBCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgY29uc3QgQm94
JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX2JveDsgfQorICAgIGNvbnN0IEJveCogb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX2JveDsgfQogCiAgICAgYm9vbCBhdEVuZCgpIGNv
bnN0OwogCi0gICAgdXNpbmcgQm94VHlwZSA9IEJveDxFbGVtZW50Qm94SXRlcmF0b3I+OwotCiBw
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBCb3g8RWxlbWVudEJveEl0ZXJhdG9yPjsKLQotICAg
IHN0cnVjdCBTaW1wbGVQYXRoIHsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNv
bHZlcjo6SXRlcmF0b3IgZW5kOwotICAgIH07Ci0gICAgc3RydWN0IENvbXBsZXhQYXRoIHsKLSAg
ICAgICAgY29uc3QgSW5saW5lRWxlbWVudEJveCogaW5saW5lQm94OwotICAgIH07Ci0gICAgVmFy
aWFudDxTaW1wbGVQYXRoLCBDb21wbGV4UGF0aD4gbV9wYXRoVmFyaWFudDsKKyAgICBCb3ggbV9i
b3g7CiB9OwogCiBjbGFzcyBUZXh0Qm94UmFuZ2UgewpAQCAtMTg4LDE3MCArMTQ5LDk4IEBAIEVs
ZW1lbnRCb3hJdGVyYXRvciBlbGVtZW50Qm94Rm9yKGNvbnN0IFJlbmRlckxpbmVCcmVhayYpOwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10
ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIEZsb2F0UmVjdCBCb3g8SXRlcmF0b3I+Ojpy
ZWN0KCkgY29uc3QKK2lubGluZSBCb3g6OkJveChQYXRoVmFyaWFudCYmIHBhdGgpCisgICAgOiBt
X3BhdGhWYXJpYW50KFdURk1vdmUocGF0aCkpCiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25z
dCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4g
KCpwYXRoLml0ZXJhdG9yKS5yZWN0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtd
KGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICBy
ZXR1cm4gcGF0aC5pbmxpbmVCb3gtPmZyYW1lUmVjdCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7
CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgRmxvYXRSZWN0IEJveDxJdGVy
YXRvcj46OmxvZ2ljYWxSZWN0KCkgY29uc3QKK2lubGluZSBGbG9hdFJlY3QgQm94OjpyZWN0KCkg
Y29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpT
aW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGguaXRlcmF0b3IpLnJlY3Qo
KTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0
b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+
bG9naWNhbEZyYW1lUmVjdCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihp
dGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1
cm4gcGF0aC5yZWN0KCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBp
bmxpbmUgYm9vbCBCb3g8SXRlcmF0b3I+Ojppc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QK
K2lubGluZSBGbG9hdFJlY3QgQm94Ojpsb2dpY2FsUmVjdCgpIGNvbnN0CiB7Ci0gICAgYXV0byBz
aW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYpIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5
cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0
aC5pbmxpbmVCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICB9OwotCi0gICAgcmV0
dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBs
ZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBh
dGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgubG9naWNhbFJlY3QoKTsKKyAgICB9KTsKIH0KIAot
dGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBib29sIEJveDxJdGVyYXRvcj46OmRpck92
ZXJyaWRlKCkgY29uc3QKK2lubGluZSBib29sIEJveDo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
IGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6
U2ltcGxlUGF0aCYpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICBhdXRv
IGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgp
IHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5kaXJPdmVycmlkZSgpOwotICAgIH07
Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNp
bXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9v
bCBCb3g8SXRlcmF0b3I+Ojppc0xpbmVCcmVhaygpIGNvbnN0CitpbmxpbmUgYm9vbCBCb3g6OmRp
ck92ZXJyaWRlKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1l
IEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGguaXRl
cmF0b3IpLmlzTGluZUJyZWFrKCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNv
bnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1
cm4gcGF0aC5pbmxpbmVCb3gtPmlzTGluZUJyZWFrKCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsK
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7
CisgICAgICAgIHJldHVybiBwYXRoLmRpck92ZXJyaWRlKCk7CisgICAgfSk7CiB9CiAKLXRlbXBs
YXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgY29uc3QgSXRlcmF0b3ImIEJveDxJdGVyYXRvcj46
Oml0ZXJhdG9yKCkgY29uc3QKK2lubGluZSBib29sIEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAog
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBJdGVyYXRvciY+KCp0aGlzKTsKKyAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAg
ICAgIHJldHVybiBwYXRoLmlzTGluZUJyZWFrKCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNs
YXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9vbCBUZXh0Qm94PEl0ZXJhdG9yPjo6aGFzSHlwaGVuKCkg
Y29uc3QKK2lubGluZSBib29sIFRleHRCb3g6Omhhc0h5cGhlbigpIGNvbnN0CiB7Ci0gICAgYXV0
byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkg
ewotICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS5oYXNIeXBoZW4oKTsKLSAgICB9Owot
Ci0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQ
YXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+aGFzSHlwaGVuKCk7
Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFy
aWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhW
YXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmhhc0h5cGhlbigp
OworICAgIH0pOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIFN0cmluZ1Zp
ZXcgVGV4dEJveDxJdGVyYXRvcj46OnRleHQoKSBjb25zdAoraW5saW5lIFRleHRCb3g6OlRleHRC
b3goUGF0aFZhcmlhbnQmJiBwYXRoKQorICAgIDogQm94KFdURk1vdmUocGF0aCkpCiB7Ci0gICAg
YXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0
aCkgewotICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS50ZXh0KCk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0
aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhwYXRoLmlubGluZUJveC0+cmVu
ZGVyZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhwYXRoLmlubGluZUJveC0+c3RhcnQoKSwgcGF0aC5p
bmxpbmVCb3gtPmxlbigpKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRl
cmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwogfQogCi10ZW1wbGF0ZTxj
bGFzcyBJdGVyYXRvcj4gaW5saW5lIHVuc2lnbmVkIFRleHRCb3g8SXRlcmF0b3I+Ojpsb2NhbFN0
YXJ0T2Zmc2V0KCkgY29uc3QKK2lubGluZSBTdHJpbmdWaWV3IFRleHRCb3g6OnRleHQoKSBjb25z
dAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBs
ZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikubG9jYWxTdGFy
dCgpOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVy
YXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94
LT5zdGFydCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigp
Lm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC50
ZXh0KCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgdW5z
aWduZWQgVGV4dEJveDxJdGVyYXRvcj46OmxvY2FsRW5kT2Zmc2V0KCkgY29uc3QKK2lubGluZSB1
bnNpZ25lZCBUZXh0Qm94Ojpsb2NhbFN0YXJ0T2Zmc2V0KCkgY29uc3QKIHsKLSAgICBhdXRvIHNp
bXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0g
ICAgICAgIHJldHVybiAoKnBhdGguaXRlcmF0b3IpLmxvY2FsRW5kKCk7Ci0gICAgfTsKLQotICAg
IGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYg
cGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3gtPmVuZCgpOwotICAgIH07Ci0K
LSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBs
ZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10o
YXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2NhbFN0YXJ0T2Zmc2V0KCk7Cisg
ICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgdW5zaWduZWQgVGV4
dEJveDxJdGVyYXRvcj46Omxlbmd0aCgpIGNvbnN0CitpbmxpbmUgdW5zaWduZWQgVGV4dEJveDo6
bG9jYWxFbmRPZmZzZXQoKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlw
ZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0
aC5pdGVyYXRvcikuZW5kKCkgLSAoKnBhdGguaXRlcmF0b3IpLnN0YXJ0KCk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0
aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3gtPmxlbigpOwotICAgIH07
Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNp
bXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwg
W10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2NhbEVuZE9mZnNldCgpOwor
ICAgIH0pOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIGJvb2wgVGV4dEJv
eDxJdGVyYXRvcj46OmlzTGFzdE9uTGluZSgpIGNvbnN0CitpbmxpbmUgdW5zaWduZWQgVGV4dEJv
eDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1l
IEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIGF1dG8gbmV4dCA9IHBhdGgu
aXRlcmF0b3I7Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0dXJuIG5leHQgPT0gcGF0aC5l
bmQgfHwgKCpwYXRoLml0ZXJhdG9yKS5saW5lSW5kZXgoKSAhPSAoKm5leHQpLmxpbmVJbmRleCgp
OwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRv
cjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgYXV0byogbmV4dCA9IHBhdGgubmV4dElu
bGluZVRleHRCb3hJblRleHRPcmRlcigpOwotICAgICAgICByZXR1cm4gIW5leHQgfHwgJnBhdGgu
aW5saW5lQm94LT5yb290KCkgIT0gJm5leHQtPnJvb3QoKTsKLSAgICB9OwotCi0gICAgcmV0dXJu
IFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgp
OworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgp
IHsKKyAgICAgICAgcmV0dXJuIHBhdGgubGVuZ3RoKCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRl
PGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9vbCBUZXh0Qm94PEl0ZXJhdG9yPjo6aXNMYXN0KCkg
Y29uc3QKK2lubGluZSBib29sIFRleHRCb3g6OmlzTGFzdE9uTGluZSgpIGNvbnN0CiB7Ci0gICAg
YXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0
aCkgewotICAgICAgICBhdXRvIG5leHQgPSBwYXRoLml0ZXJhdG9yOwotICAgICAgICArK25leHQ7
Ci0gICAgICAgIHJldHVybiBuZXh0ID09IHBhdGguZW5kOwotICAgIH07Ci0KLSAgICBhdXRvIGNv
bXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsK
LSAgICAgICAgcmV0dXJuICFwYXRoLm5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIoKTsKLSAg
ICB9OworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBh
dGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaXNMYXN0T25MaW5lKCk7CisgICAgfSk7Cit9CiAK
LSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBs
ZSwgY29tcGxleCk7CitpbmxpbmUgYm9vbCBUZXh0Qm94Ojppc0xhc3QoKSBjb25zdAoreworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAg
ICAgICAgcmV0dXJuIHBhdGguaXNMYXN0KCk7CisgICAgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNh
bENvbXBsZXhQYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM2
NDMyODhlYzQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgKQEAgLTAsMCArMSw5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMaW5lTGF5b3V0VHJhdmVyc2FsIHsKKworY2xhc3MgQ29t
cGxleFBhdGggeworcHVibGljOgorICAgIENvbXBsZXhQYXRoKGNvbnN0IElubGluZUJveCogaW5s
aW5lQm94LCBWZWN0b3I8Y29uc3QgSW5saW5lVGV4dEJveCo+JiYgc29ydGVkSW5saW5lVGV4dEJv
eGVzID0geyB9LCBzaXplX3Qgc29ydGVkSW5saW5lVGV4dEJveEluZGV4ID0gMCkKKyAgICAgICAg
OiBtX2lubGluZUJveChpbmxpbmVCb3gpCisgICAgICAgICwgbV9zb3J0ZWRJbmxpbmVUZXh0Qm94
ZXMoV1RGTW92ZShzb3J0ZWRJbmxpbmVUZXh0Qm94ZXMpKQorICAgICAgICAsIG1fc29ydGVkSW5s
aW5lVGV4dEJveEluZGV4KHNvcnRlZElubGluZVRleHRCb3hJbmRleCkKKyAgICB7IH0KKworICAg
IEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmZyYW1lUmVjdCgp
OyB9CisgICAgRmxvYXRSZWN0IGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVC
b3gtPmxvZ2ljYWxGcmFtZVJlY3QoKTsgfQorCisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsgfQorICAgIGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+
ZGlyT3ZlcnJpZGUoKTsgfQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBt
X2lubGluZUJveC0+aXNMaW5lQnJlYWsoKTsgfQorCisgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25z
dCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmhhc0h5cGhlbigpOyB9CisgICAgU3RyaW5nVmll
dyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nVmlldyhpbmxpbmVUZXh0Qm94KCktPnJlbmRl
cmVyKCkudGV4dCgpKS5zdWJzdHJpbmcoaW5saW5lVGV4dEJveCgpLT5zdGFydCgpLCBpbmxpbmVU
ZXh0Qm94KCktPmxlbigpKTsgfQorICAgIHVuc2lnbmVkIGxvY2FsU3RhcnRPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCk7IH0KKyAgICB1bnNpZ25lZCBsb2Nh
bEVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KKyAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigp
OyB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0xhc3RPbkxpbmUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgYXV0byogbmV4dCA9IG5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIoKTsKKyAgICAgICAg
cmV0dXJuICFuZXh0IHx8ICZpbmxpbmVUZXh0Qm94KCktPnJvb3QoKSAhPSAmbmV4dC0+cm9vdCgp
OworICAgIH0KKyAgICBpbmxpbmUgYm9vbCBpc0xhc3QoKSBjb25zdCB7IHJldHVybiAhbmV4dElu
bGluZVRleHRCb3hJblRleHRPcmRlcigpOyB9OworCisgICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0
Qm94SW5WaXN1YWxPcmRlcigpIHsgbV9pbmxpbmVCb3ggPSBpbmxpbmVUZXh0Qm94KCktPm5leHRU
ZXh0Qm94KCk7IH0KKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcigpCisg
ICAgeworICAgICAgICBtX2lubGluZUJveCA9IG5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIo
KTsKKyAgICAgICAgaWYgKCFtX3NvcnRlZElubGluZVRleHRCb3hlcy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICArK21fc29ydGVkSW5saW5lVGV4dEJveEluZGV4OworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDb21wbGV4UGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5s
aW5lQm94ID09IG90aGVyLm1faW5saW5lQm94OyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsg
cmV0dXJuICFtX2lubGluZUJveDsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IElubGluZVRleHRC
b3gqIGlubGluZVRleHRCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVUZXh0Qm94
PihtX2lubGluZUJveCk7IH0KKyAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0SW5saW5lVGV4
dEJveEluVGV4dE9yZGVyKCkgY29uc3Q7CisKKyAgICBjb25zdCBJbmxpbmVCb3gqIG1faW5saW5l
Qm94OworICAgIFZlY3Rvcjxjb25zdCBJbmxpbmVUZXh0Qm94Kj4gbV9zb3J0ZWRJbmxpbmVUZXh0
Qm94ZXM7CisgICAgc2l6ZV90IG1fc29ydGVkSW5saW5lVGV4dEJveEluZGV4IHsgMCB9OworfTsK
KworaW5saW5lIGNvbnN0IElubGluZVRleHRCb3gqIENvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4
dEJveEluVGV4dE9yZGVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc29ydGVkSW5saW5lVGV4dEJv
eGVzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9zb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXgg
KyAxIDwgbV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IG1fc29ydGVkSW5saW5lVGV4dEJveGVzW21fc29ydGVkSW5saW5lVGV4dEJveEluZGV4ICsgMV07
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gaW5saW5lVGV4dEJv
eCgpLT5uZXh0VGV4dEJveCgpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDA5YThjYjQ0NzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJh
dmVyc2FsU2ltcGxlUGF0aC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJTaW1w
bGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNl
IExpbmVMYXlvdXRUcmF2ZXJzYWwgeworCitjbGFzcyBTaW1wbGVQYXRoIHsKK3B1YmxpYzoKKyAg
ICBTaW1wbGVQYXRoKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVy
YXRvciwgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCkKKyAgICAg
ICAgOiBtX2l0ZXJhdG9yKGl0ZXJhdG9yKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7IH0K
KworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5yZWN0
KCk7IH0KKyAgICBGbG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiByZWN0KCk7
IH0KKworICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICBib29sIGRpck92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5pc0xpbmVC
cmVhaygpOyB9CisKKyAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVy
YXRvcikuaGFzSHlwaGVuKCk7IH0KKyAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IHJldHVy
biAoKm1faXRlcmF0b3IpLnRleHQoKTsgfQorICAgIHVuc2lnbmVkIGxvY2FsU3RhcnRPZmZzZXQo
KSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmxvY2FsU3RhcnQoKTsgfQorICAgIHVuc2ln
bmVkIGxvY2FsRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5sb2NhbEVu
ZCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9y
KS5lbmQoKSAtICgqbV9pdGVyYXRvcikuc3RhcnQoKTsgfQorCisgICAgYm9vbCBpc0xhc3RPbkxp
bmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBuZXh0ID0gbV9pdGVyYXRvcjsKKyAgICAg
ICAgKytuZXh0OworICAgICAgICByZXR1cm4gbmV4dCA9PSBtX2VuZCB8fCAoKm1faXRlcmF0b3Ip
LmxpbmVJbmRleCgpICE9ICgqbmV4dCkubGluZUluZGV4KCk7CisgICAgfQorICAgIGJvb2wgaXNM
YXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gbmV4dCA9IG1faXRlcmF0b3I7CisgICAg
ICAgICsrbmV4dDsKKyAgICAgICAgcmV0dXJuIG5leHQgPT0gbV9lbmQ7CisgICAgfTsKKworICAg
IHZvaWQgdHJhdmVyc2VOZXh0VGV4dEJveEluVmlzdWFsT3JkZXIoKQorICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IFNMTCBjYW4gY29udGFpbnMgPGJyPiBydW5zIGFuZCB0aGlzIHNob3VsZCBza2lw
IG92ZXIgdGhlbS4KKyAgICAgICAgKyttX2l0ZXJhdG9yOworICAgIH0KKyAgICB2b2lkIHRyYXZl
cnNlTmV4dFRleHRCb3hJblRleHRPcmRlcigpIHsgIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3Vh
bE9yZGVyKCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVQYXRoJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvciA9PSBvdGhlci5tX2l0ZXJhdG9yOyB9CisgICAg
Ym9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgPT0gbV9lbmQ7IH0KKworcHJp
dmF0ZToKKyAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9pdGVy
YXRvcjsKKyAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9lbmQ7
Cit9OworCit9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384541</attachid>
            <date>2019-11-30 04:44:05 -0800</date>
            <delta_ts>2019-11-30 07:48:20 -0800</delta_ts>
            <desc>patch</desc>
            <filename>linelayouttraversal-simplify-4.patch</filename>
            <type>text/plain</type>
            <size>37624</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmYxYjdkNDQ0Yy4uOGRiNjA4YzdiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMzAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgcGF0aCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgaW4gTGluZUxh
eW91dFRyYXZlcnNhbCB0byAqUGF0aCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSBMaW5lTGF5b3V0VHJhdmVyc2FsIGFuZCBt
YWtlIGl0IGVhc2llciB0byBleHRlbmQuCisKKyAgICAgICAgLSBUdXJuIFNpbXBsZVBhdGggYW5k
IENvbXBsZXhQYXRoIHN0cnVjdHMgaW50byBjbGFzc2VzCisgICAgICAgIC0gTW92ZSB0aGVtIHRv
IHNlcGFyYXRlIGZpbGVzCisgICAgICAgIC0gTWFrZSBwYXRoIGltcGxlbWVudGF0aW9uIGZ1bmN0
aW9ucyBjbGFzcyBtZW1iZXJzLCBjYWxsZWQgdmlhIGdlbmVyaWMgbGFtYmRhcworICAgICAgICAt
IEluc3RlYWQgb2YgaW5oZXJpdGluZyBCb3gvVGV4dEJveCB0byBpdGVyYXRvcnMsIG1ha2UgaXQg
YSBtZW1iZXIgdmFyaWFibGUuCisgICAgICAgIC0gTW92ZSB0aGUgcGF0aCB2YXJpYW50IHRvIEJv
eCwgYXZvaWRpbmcgdXNlIG9mIHRlbXBsYXRlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRleHRCb3gpOgorICAgICAgICAqIHJlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjp0cmF2
ZXJzZU5leHRJblZpc3VhbE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5UZXh0T3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRv
cj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRC
b3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjphdEVu
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
SXRlcmF0b3I6OkNvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yLT4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJh
dG9yOjpFbGVtZW50Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6RWxlbWVudEJveEl0ZXJhdG9yOjpvcGVyYXRv
ci0+IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6cmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpCb3g6OmxvZ2lj
YWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJv
eDo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aGFzSHlwaGVuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6OlRleHRC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6dGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94
Ojpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRU
cmF2ZXJzYWw6OlRleHRCb3g6OmxvY2FsRW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6Omxlbmd0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94Ojppc0xhc3RPbkxpbmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6aXNM
YXN0IGNvbnN0KToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpCb3g8SXRlcmF0b3I+OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDxJdGVyYXRvcj46OmxvZ2lj
YWxSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OkJveDxJdGVyYXRvcj46OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9y
Pjo6ZGlyT3ZlcnJpZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6aXNMaW5lQnJlYWsgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6
aXRlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omhhc0h5cGhlbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6
dGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9y
Pjo6bG9jYWxFbmRPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46Omxlbmd0aCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJh
dG9yPjo6aXNMYXN0T25MaW5lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g8SXRlcmF0b3I+Ojppc0xhc3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4
UGF0aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNv
bXBsZXhQYXRoOjpDb21wbGV4UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpDb21wbGV4UGF0aDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGVmdFRvUmln
aHREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNh
bDo6Q29tcGxleFBhdGg6OmRpck92ZXJyaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6aGFzSHlwaGVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQ
YXRoOjp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6
OkNvbXBsZXhQYXRoOjpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6bGVu
Z3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBs
ZXhQYXRoOjppc0xhc3RPbkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6dHJhdmVyc2VOZXh0VGV4dEJveElu
VmlzdWFsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29t
cGxleFBhdGg6OnRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6YXRF
bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxl
eFBhdGg6OmlubGluZVRleHRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6Om5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQ
YXRoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6U2ltcGxlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpTaW1wbGVQYXRoOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmxvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2lt
cGxlUGF0aDo6ZGlyT3ZlcnJpZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMaW5lQnJlYWsgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aGFzSHlwaGVuIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0
aDo6bG9jYWxTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsb2NhbEVuZE9mZnNldCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMYXN0
T25MaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNp
bXBsZVBhdGg6OmlzTGFzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjp0cmF2ZXJz
ZU5leHRUZXh0Qm94SW5UZXh0T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6U2ltcGxlUGF0aDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjphdEVuZCBjb25zdCk6CisKIDIwMTkt
MTEtMjkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJ
RkNdIEFkZCBzdXBwb3J0IGZvciBzaW1wbGUgaHlwaGVuYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmlu
ZGV4IGVmYzI3NWY2ZGE4Li42NzQ0YzhlOGUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzIw
LDYgKzEzMjAsOCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oCiAKICAgICByZW5kZXJpbmcvbGlu
ZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKKyAgICByZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJh
dmVyc2FsQ29tcGxleFBhdGguaAorICAgIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJz
YWxTaW1wbGVQYXRoLmgKICAgICByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAogICAgIHJlbmRl
cmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxYTZmMTg4MDgxOC4uOTgyNDMyYWI1
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTQ3OTQsNiArNDc5NCw4IEBACiAJCUU0Mjk1RkE0MTJCMDYxNEUwMEQxQUNFMCAv
KiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFBy
aW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTQyRTc2REMxQzdBRjc3NjAwRTM2MTREIC8qIFN0eWxlVXBkYXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDJFNzZEQjFDN0FGNzc2MDBFMzYx
NEQgLyogU3R5bGVVcGRhdGUuaCAqLzsgfTsKIAkJRTQzMTA1QkIxNjc1MEYxNjAwREIyRkI4IC8q
IE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQzNDNEMjMyMzky
Nzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyMTIzOTI3NzgzMDBF
QkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJC
NjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyog
TGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQTAyM0IxN0VCMzcwQTAwNENERDI1IC8qIFJl
bmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0M0EwMjNBMTdFQjM3MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQzQUY4RTcxQUM1QjdF
QzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzQUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8qIENhY2hlVmFs
aWRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUU0NDBBQTk2MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQ0MEFBOTUxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJh
dG9yLmggKi87IH07CkBAIC0xNTEwNyw2ICsxNTEwOSw4IEBACiAJCUU0MkU3NkRCMUM3QUY3NzYw
MEUzNjE0RCAvKiBTdHlsZVVwZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZVVwZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMDVCNzE2
NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVRyYXZlcnNhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNDM0M0QyMTIzOTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91
dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTQzNDNEMjQyMzkyNzc4RjAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21w
bGV4UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5lTGF5b3V0VHJh
dmVyc2FsQ29tcGxleFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzQTAy
M0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDNBMDIzQzE3RUIzNzEzMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQzQUY4RTQxQUM1QjdERDAwQ0E3MTdFIC8qIENhY2hl
VmFsaWRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNo
ZVZhbGlkYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg3MjUsNiAr
Mjg3MjksOCBAQAogCQkJCUZGRUZBQjI5MTgzODBEQTAwMDUxNDUzNCAvKiBMaW5lTGF5b3V0U3Rh
dGUuaCAqLywKIAkJCQlFNDg0QTMzRDIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dFRyYXZl
cnNhbC5jcHAgKi8sCiAJCQkJRTQ4NEEzM0IyMzA1NTMwMzAwOUFERTZBIC8qIExpbmVMYXlvdXRU
cmF2ZXJzYWwuaCAqLywKKwkJCQlFNDM0M0QyMTIzOTI3NzgzMDBFQkJCNjYgLyogTGluZUxheW91
dFRyYXZlcnNhbFNpbXBsZVBhdGguaCAqLywKKwkJCQlFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYg
LyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggKi8sCiAJCQkJRkZEQkMwNDYxODNE
MjdCNzAwNDA3MTA5IC8qIExpbmVXaWR0aC5jcHAgKi8sCiAJCQkJRkZEQkMwNDUxODNEMjdCNzAw
NDA3MTA5IC8qIExpbmVXaWR0aC5oICovLAogCQkJCUZGQUMzMEZEMTg0RkIxNDUwMDhDNEYxRSAv
KiBUcmFpbGluZ09iamVjdHMuY3BwICovLApAQCAtMzA1MzUsNiArMzA1NDEsNyBAQAogCQkJCTgz
NzA1NjkwMUY1MDkxNUMwMEQ5MzQyNSAvKiBKU0ZpbGVTeXN0ZW1FbnRyeUNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MzNCOUUzNjFGNTA4RDg1MDBFMEU0MjggLyogSlNGaWxlU3lzdGVt
RmlsZUVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTJCRTQ4ODFGRTg2ODZBMDAyMDMxQ0Mg
LyogSlNGaWxsTW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQzNDNEMjUyMzkyNzc5MDAwRUJC
QjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjZEOUQyN0IxNEVBQzA4NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzI4MDgzM0YxQzZEQzI2RjAwMTQ1MUI2IC8qIEpTRm9udEZhY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFDMjRFRUE5MUM3MkE3QjQwMDgwRjhGQyAvKiBKU0ZvbnRGYWNlU2V0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTMxNjgyLDYgKzMxNjg5LDcgQEAKIAkJCQk1N0RDRUQ3NDIxNDMw
NUYwMDAxNkI4NDcgLyogUHVibGljS2V5Q3JlZGVudGlhbERhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTU3MzAzQkVGMjAwOTgwQzYwMDM1NTk2NSAvKiBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3Jp
cHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNDMEEyMDA5OUJBRDAwMzU1OTY1IC8qIFB1
YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQz
NDNEMjMyMzkyNzc4NDAwRUJCQjY2IC8qIExpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0JFQjIwMDk3RjQwMDAzNTU5NjUgLyogUHVibGljS2V5
Q3JlZGVudGlhbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTAwODFGRjAwMTZCMEEyRDMwMDhB
QUE3QSAvKiBQdWJsaWNTdWZmaXguaCBpbiBIZWFkZXJzICovLAogCQkJCTEwRkIwODRCMTRFMTVD
N0UwMEEzREI5OCAvKiBQdWJsaWNVUkxNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCAyMTM1YTUyYmM3
ZS4uMzEzZTNlNTMwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIHdyaXRlRGVidWdJbmZvKFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgT3B0aW9uU2V0PFJlbmRlcgog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgd3JpdGVUZXh0Qm94KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJUZXh0JiBvLCBjb25zdCBMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0
b3I6OkJveFR5cGUmIHRleHRCb3gpCitzdGF0aWMgdm9pZCB3cml0ZVRleHRCb3goVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlclRleHQmIG8sIGNvbnN0IExpbmVMYXlvdXRUcmF2ZXJzYWw6OlRl
eHRCb3gmIHRleHRCb3gpCiB7CiAgICAgYXV0byByZWN0ID0gdGV4dEJveC5yZWN0KCk7CiAgICAg
YXV0byBsb2dpY2FsUmVjdCA9IHRleHRCb3gubG9naWNhbFJlY3QoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAKaW5kZXgg
OTBlOWUwNGRiYjMuLjc2NWI5Nzg3MmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcApAQCAtMzIsODggKzMyLDUwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMaW5lTGF5b3V0VHJhdmVyc2FsIHsKIAog
VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IoY29uc3QgSW5saW5lVGV4dEJveCogaW5s
aW5lVGV4dEJveCkKLSAgICA6IG1fcGF0aFZhcmlhbnQoQ29tcGxleFBhdGggeyBpbmxpbmVUZXh0
Qm94LCB7IH0gfSkKKyAgICA6IG1fdGV4dEJveChDb21wbGV4UGF0aCB7IGlubGluZVRleHRCb3gs
IHsgfSB9KQogewogfQogVGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IoVmVjdG9yPGNv
bnN0IElubGluZVRleHRCb3gqPiYmIHNvcnRlZCwgc2l6ZV90IGluZGV4KQotICAgIDogbV9wYXRo
VmFyaWFudChDb21wbGV4UGF0aCB7IGluZGV4IDwgc29ydGVkLnNpemUoKSA/IHNvcnRlZFtpbmRl
eF0gOiBudWxscHRyLCBXVEZNb3ZlKHNvcnRlZCksIGluZGV4IH0pCisgICAgOiBtX3RleHRCb3go
Q29tcGxleFBhdGggeyBpbmRleCA8IHNvcnRlZC5zaXplKCkgPyBzb3J0ZWRbaW5kZXhdIDogbnVs
bHB0ciwgV1RGTW92ZShzb3J0ZWQpLCBpbmRleCB9KQogewogfQogCiBUZXh0Qm94SXRlcmF0b3I6
OlRleHRCb3hJdGVyYXRvcihTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Ig
aXRlcmF0b3IsIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBlbmQpCi0g
ICAgOiBtX3BhdGhWYXJpYW50KFNpbXBsZVBhdGggeyBpdGVyYXRvciwgZW5kIH0pCisgICAgOiBt
X3RleHRCb3goU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBlbmQgfSkKIHsKIH0KIAogVGV4dEJveEl0
ZXJhdG9yJiBUZXh0Qm94SXRlcmF0b3I6OnRyYXZlcnNlTmV4dEluVmlzdWFsT3JkZXIoKQogewot
ICAgIGF1dG8gc2ltcGxlID0gW10oU2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICArK3BhdGgu
aXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKENvbXBsZXhQYXRoJiBw
YXRoKSB7Ci0gICAgICAgIHBhdGguaW5saW5lQm94ID0gcGF0aC5pbmxpbmVCb3gtPm5leHRUZXh0
Qm94KCk7Ci0gICAgfTsKLQotICAgIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxl
LCBjb21wbGV4KTsKLQorICAgIFdURjo6c3dpdGNoT24obV90ZXh0Qm94Lm1fcGF0aFZhcmlhbnQs
IFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcGF0aC50cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1
YWxPcmRlcigpOworICAgIH0pOwogICAgIHJldHVybiAqdGhpczsKIH0KIAotY29uc3QgSW5saW5l
VGV4dEJveCogVGV4dEJveEl0ZXJhdG9yOjpDb21wbGV4UGF0aDo6bmV4dElubGluZVRleHRCb3hJ
blRleHRPcmRlcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFzb3J0ZWRJbmxpbmVUZXh0Qm94ZXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGlmIChzb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggKyAxIDwgc29y
dGVkSW5saW5lVGV4dEJveGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBzb3J0ZWRJbmxp
bmVUZXh0Qm94ZXNbc29ydGVkSW5saW5lVGV4dEJveEluZGV4ICsgMV07Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gaW5saW5lQm94LT5uZXh0VGV4dEJveCgpOwot
fQotCiBUZXh0Qm94SXRlcmF0b3ImIFRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5UZXh0
T3JkZXIoKQogewotICAgIGF1dG8gc2ltcGxlID0gW10oU2ltcGxlUGF0aCYgcGF0aCkgewotICAg
ICAgICArK3BhdGguaXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKENv
bXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHBhdGguaW5saW5lQm94ID0gcGF0aC5uZXh0SW5s
aW5lVGV4dEJveEluVGV4dE9yZGVyKCk7Ci0gICAgICAgIGlmICghcGF0aC5zb3J0ZWRJbmxpbmVU
ZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgKytwYXRoLnNvcnRlZElubGluZVRleHRC
b3hJbmRleDsKLSAgICB9OwotCi0gICAgV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBzaW1w
bGUsIGNvbXBsZXgpOwotCisgICAgV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFu
dCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dFRleHRCb3hJblRl
eHRPcmRlcigpOworICAgIH0pOwogICAgIHJldHVybiAqdGhpczsKIH0KIAogYm9vbCBUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
IHsKLSAgICBpZiAobV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVyLm1fcGF0aFZhcmlhbnQu
aW5kZXgoKSkKKyAgICBpZiAobV90ZXh0Qm94Lm1fcGF0aFZhcmlhbnQuaW5kZXgoKSAhPSBvdGhl
ci5tX3RleHRCb3gubV9wYXRoVmFyaWFudC5pbmRleCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIHNpbXBsZSA9IFsmXShjb25zdCBTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAg
ICAgIHJldHVybiBwYXRoLml0ZXJhdG9yID09IFdURjo6Z2V0PFNpbXBsZVBhdGg+KG90aGVyLm1f
cGF0aFZhcmlhbnQpLml0ZXJhdG9yOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbJl0o
Y29uc3QgQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94
ID09IFdURjo6Z2V0PENvbXBsZXhQYXRoPihvdGhlci5tX3BhdGhWYXJpYW50KS5pbmxpbmVCb3g7
Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIHNpbXBs
ZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV90ZXh0Qm94Lm1fcGF0aFZh
cmlhbnQsIFsmXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoID09IFdU
Rjo6Z2V0PHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZShwYXRoKT4+KG90aGVyLm1fdGV4dEJveC5tX3Bh
dGhWYXJpYW50KTsKKyAgICB9KTsKIH0KIAogYm9vbCBUZXh0Qm94SXRlcmF0b3I6OmF0RW5kKCkg
Y29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFsmXShjb25zdCBTaW1wbGVQYXRoJiBwYXRoKSB7
Ci0gICAgICAgIHJldHVybiBwYXRoLml0ZXJhdG9yID09IHBhdGguZW5kOwotICAgIH07Ci0KLSAg
ICBhdXRvIGNvbXBsZXggPSBbJl0oY29uc3QgQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAg
cmV0dXJuICFwYXRoLmlubGluZUJveDsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBy
ZXR1cm4gcGF0aC5hdEVuZCgpOworICAgIH0pOwogfQogCiBUZXh0Qm94SXRlcmF0b3IgZmlyc3RU
ZXh0Qm94Rm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCkBAIC0xNDUsMjUgKzEwNywxOSBAQCBU
ZXh0Qm94UmFuZ2UgdGV4dEJveGVzRm9yKGNvbnN0IFJlbmRlclRleHQmIHRleHQpCiB9CiAKIEVs
ZW1lbnRCb3hJdGVyYXRvcjo6RWxlbWVudEJveEl0ZXJhdG9yKGNvbnN0IElubGluZUVsZW1lbnRC
b3gqIGlubGluZUVsZW1lbnRCb3gpCi0gICAgOiBtX3BhdGhWYXJpYW50KENvbXBsZXhQYXRoIHsg
aW5saW5lRWxlbWVudEJveCB9KQorICAgIDogbV9ib3goQ29tcGxleFBhdGggeyBpbmxpbmVFbGVt
ZW50Qm94LCB7IH0gfSkKIHsKIH0KIEVsZW1lbnRCb3hJdGVyYXRvcjo6RWxlbWVudEJveEl0ZXJh
dG9yKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVyYXRvciwgU2lt
cGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCkKLSAgICA6IG1fcGF0aFZh
cmlhbnQoU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBlbmQgfSkKKyAgICA6IG1fYm94KFNpbXBsZVBh
dGggeyBpdGVyYXRvciwgZW5kIH0pCiB7CiB9CiAKIGJvb2wgRWxlbWVudEJveEl0ZXJhdG9yOjph
dEVuZCgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbJl0oY29uc3QgU2ltcGxlUGF0aCYg
cGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pdGVyYXRvciA9PSBwYXRoLmVuZDsKLSAgICB9
OwotCi0gICAgYXV0byBjb21wbGV4ID0gWyZdKGNvbnN0IENvbXBsZXhQYXRoJiBwYXRoKSB7Ci0g
ICAgICAgIHJldHVybiAhcGF0aC5pbmxpbmVCb3g7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9ib3gubV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAg
ICByZXR1cm4gcGF0aC5hdEVuZCgpOworICAgIH0pOwogfQogCiBFbGVtZW50Qm94SXRlcmF0b3Ig
ZWxlbWVudEJveEZvcihjb25zdCBSZW5kZXJMaW5lQnJlYWsmIHJlbmRlckVsZW1lbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2Fs
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgK
aW5kZXggZjQwMWU4MzExZDEuLjEzNGY0MjBiNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5oCkBAIC0yNSwxMSArMjUsMTAg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJ
bmxpbmVFbGVtZW50Qm94LmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUg
IkxpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIgorI2luY2x1ZGUgIkxpbmVMYXlvdXRU
cmF2ZXJzYWxTaW1wbGVQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUg
IlNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgpA
QCAtMzgsMTggKzM3LDIwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckxp
bmVCcmVhazsKLWNsYXNzIFJlbmRlclRleHQ7CiAKIG5hbWVzcGFjZSBMaW5lTGF5b3V0VHJhdmVy
c2FsIHsKIAotY2xhc3MgVGV4dEJveENvbnRleHQ7CitjbGFzcyBFbGVtZW50Qm94SXRlcmF0b3I7
CiBjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CiAKIHN0cnVjdCBFbmRJdGVyYXRvciB7IH07CiAKLXRl
bXBsYXRlPGNsYXNzIEl0ZXJhdG9yPgogY2xhc3MgQm94IHsKIHB1YmxpYzoKKyAgICB1c2luZyBQ
YXRoVmFyaWFudCA9IFZhcmlhbnQ8U2ltcGxlUGF0aCwgQ29tcGxleFBhdGg+OworCisgICAgQm94
KFBhdGhWYXJpYW50JiYpOworCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdDsKICAgICBGbG9h
dFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdDsKIApAQCAtNTgsMTkgKzU5LDE2IEBAIHB1YmxpYzoK
ICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBCb3goKSA9
IGRlZmF1bHQ7Ci0gICAgQm94KGNvbnN0IEJveCYpID0gZGVmYXVsdDsKLSAgICBCb3goQm94JiYp
ID0gZGVmYXVsdDsKLSAgICB+Qm94KCkgPSBkZWZhdWx0OwotICAgIEJveCYgb3BlcmF0b3I9KGNv
bnN0IEJveCYpID0gZGVmYXVsdDsKLSAgICBCb3gmIG9wZXJhdG9yPShCb3gmJikgPSBkZWZhdWx0
OwotCi0gICAgY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKCkgY29uc3Q7CisgICAgZnJpZW5kIGNs
YXNzIEVsZW1lbnRCb3hJdGVyYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgVGV4dEJveEl0ZXJhdG9y
OworCisgICAgUGF0aFZhcmlhbnQgbV9wYXRoVmFyaWFudDsKIH07CiAKLXRlbXBsYXRlPGNsYXNz
IEl0ZXJhdG9yPgotY2xhc3MgVGV4dEJveCA6IHB1YmxpYyBCb3g8SXRlcmF0b3I+IHsKK2NsYXNz
IFRleHRCb3ggOiBwdWJsaWMgQm94IHsKIHB1YmxpYzoKKyAgICBUZXh0Qm94KFBhdGhWYXJpYW50
JiYpOworCiAgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdDsKICAgICBTdHJpbmdWaWV3IHRleHQo
KSBjb25zdDsKIApAQCAtODEsMjEgKzc5LDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNMYXN0
T25MaW5lKCkgY29uc3Q7CiAgICAgYm9vbCBpc0xhc3QoKSBjb25zdDsKLQotcHJvdGVjdGVkOgot
ICAgIFRleHRCb3goKSA9IGRlZmF1bHQ7Ci0gICAgVGV4dEJveChjb25zdCBUZXh0Qm94JikgPSBk
ZWZhdWx0OwotICAgIFRleHRCb3goVGV4dEJveCYmKSA9IGRlZmF1bHQ7Ci0gICAgflRleHRCb3go
KSA9IGRlZmF1bHQ7Ci0gICAgVGV4dEJveCYgb3BlcmF0b3I9KGNvbnN0IFRleHRCb3gmKSA9IGRl
ZmF1bHQ7Ci0gICAgVGV4dEJveCYgb3BlcmF0b3I9KFRleHRCb3gmJikgPSBkZWZhdWx0OwotCi0g
ICAgdXNpbmcgQm94PEl0ZXJhdG9yPjo6aXRlcmF0b3I7CiB9OwogCi1jbGFzcyBUZXh0Qm94SXRl
cmF0b3IgOiBwcml2YXRlIFRleHRCb3g8VGV4dEJveEl0ZXJhdG9yPiB7CitjbGFzcyBUZXh0Qm94
SXRlcmF0b3IgewogcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpIDogbV9wYXRoVmFyaWFu
dChDb21wbGV4UGF0aCB7IG51bGxwdHIsIHsgfSB9KSB7IH07CisgICAgVGV4dEJveEl0ZXJhdG9y
KCkgOiBtX3RleHRCb3goQ29tcGxleFBhdGggeyBudWxscHRyLCB7IH0gfSkgeyB9OwogCiAgICAg
ZXhwbGljaXQgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IElubGluZVRleHRCb3gqKTsKICAgICBUZXh0
Qm94SXRlcmF0b3IoVmVjdG9yPGNvbnN0IElubGluZVRleHRCb3gqPiYmIHNvcnRlZCwgc2l6ZV90
IGluZGV4KTsKQEAgLTExMyw1OCArMTAxLDMxIEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9y
PT0oRW5kSXRlcmF0b3IpIGNvbnN0IHsgcmV0dXJuIGF0RW5kKCk7IH0KICAgICBib29sIG9wZXJh
dG9yIT0oRW5kSXRlcmF0b3IpIGNvbnN0IHsgcmV0dXJuICFhdEVuZCgpOyB9CiAKLSAgICBjb25z
dCBUZXh0Qm94JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQotICAgIGNvbnN0
IFRleHRCb3gqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgY29uc3Qg
VGV4dEJveCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Qm94OyB9CisgICAgY29u
c3QgVGV4dEJveCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3RleHRCb3g7IH0KIAog
ICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKIAotICAgIHVzaW5nIEJveFR5cGUgPSBUZXh0Qm94PFRl
eHRCb3hJdGVyYXRvcj47Ci0KIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEJveDxUZXh0Qm94
SXRlcmF0b3I+OwotICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94PFRleHRCb3hJdGVyYXRvcj47Ci0K
LSAgICBzdHJ1Y3QgU2ltcGxlUGF0aCB7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJl
c29sdmVyOjpJdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6UnVu
UmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZDsKLSAgICB9OwotICAgIHN0cnVjdCBDb21wbGV4UGF0aCB7
Ci0gICAgICAgIGNvbnN0IElubGluZVRleHRCb3gqIGlubGluZUJveDsKLSAgICAgICAgVmVjdG9y
PGNvbnN0IElubGluZVRleHRCb3gqPiBzb3J0ZWRJbmxpbmVUZXh0Qm94ZXM7Ci0gICAgICAgIHNp
emVfdCBzb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggeyAwIH07Ci0KLSAgICAgICAgY29uc3QgSW5s
aW5lVGV4dEJveCogbmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpIGNvbnN0OwotICAgIH07
Ci0gICAgVmFyaWFudDxTaW1wbGVQYXRoLCBDb21wbGV4UGF0aD4gbV9wYXRoVmFyaWFudDsKKyAg
ICBUZXh0Qm94IG1fdGV4dEJveDsKIH07CiAKLWNsYXNzIEVsZW1lbnRCb3hJdGVyYXRvciA6IHBy
aXZhdGUgQm94PEVsZW1lbnRCb3hJdGVyYXRvcj4geworY2xhc3MgRWxlbWVudEJveEl0ZXJhdG9y
IHsKIHB1YmxpYzoKLSAgICBFbGVtZW50Qm94SXRlcmF0b3IoKSA6IG1fcGF0aFZhcmlhbnQoQ29t
cGxleFBhdGggeyBudWxscHRyIH0pIHsgfTsKKyAgICBFbGVtZW50Qm94SXRlcmF0b3IoKSA6IG1f
Ym94KENvbXBsZXhQYXRoIHsgbnVsbHB0ciwgeyB9IH0pIHsgfTsKIAogICAgIGV4cGxpY2l0IEVs
ZW1lbnRCb3hJdGVyYXRvcihjb25zdCBJbmxpbmVFbGVtZW50Qm94Kik7CiAgICAgRWxlbWVudEJv
eEl0ZXJhdG9yKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciwgU2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCk7CiAKICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KIAotICAgIGNvbnN0IEJv
eCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KLSAgICBjb25zdCBCb3gqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgY29uc3QgQm94JiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiBtX2JveDsgfQorICAgIGNvbnN0IEJveCogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuICZtX2JveDsgfQogCiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0OwogCi0g
ICAgdXNpbmcgQm94VHlwZSA9IEJveDxFbGVtZW50Qm94SXRlcmF0b3I+OwotCiBwcml2YXRlOgot
ICAgIGZyaWVuZCBjbGFzcyBCb3g8RWxlbWVudEJveEl0ZXJhdG9yPjsKLQotICAgIHN0cnVjdCBT
aW1wbGVQYXRoIHsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yIGl0ZXJhdG9yOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRl
cmF0b3IgZW5kOwotICAgIH07Ci0gICAgc3RydWN0IENvbXBsZXhQYXRoIHsKLSAgICAgICAgY29u
c3QgSW5saW5lRWxlbWVudEJveCogaW5saW5lQm94OwotICAgIH07Ci0gICAgVmFyaWFudDxTaW1w
bGVQYXRoLCBDb21wbGV4UGF0aD4gbV9wYXRoVmFyaWFudDsKKyAgICBCb3ggbV9ib3g7CiB9Owog
CiBjbGFzcyBUZXh0Qm94UmFuZ2UgewpAQCAtMTg4LDE3MCArMTQ5LDk4IEBAIEVsZW1lbnRCb3hJ
dGVyYXRvciBlbGVtZW50Qm94Rm9yKGNvbnN0IFJlbmRlckxpbmVCcmVhayYpOwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10ZW1wbGF0ZTxj
bGFzcyBJdGVyYXRvcj4gaW5saW5lIEZsb2F0UmVjdCBCb3g8SXRlcmF0b3I+OjpyZWN0KCkgY29u
c3QKK2lubGluZSBCb3g6OkJveChQYXRoVmFyaWFudCYmIHBhdGgpCisgICAgOiBtX3BhdGhWYXJp
YW50KFdURk1vdmUocGF0aCkpCiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFt
ZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gKCpwYXRoLml0
ZXJhdG9yKS5yZWN0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5
cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0
aC5pbmxpbmVCb3gtPmZyYW1lUmVjdCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CiB9CiAKLXRl
bXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgRmxvYXRSZWN0IEJveDxJdGVyYXRvcj46Omxv
Z2ljYWxSZWN0KCkgY29uc3QKK2lubGluZSBGbG9hdFJlY3QgQm94OjpyZWN0KCkgY29uc3QKIHsK
LSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRo
JiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGguaXRlcmF0b3IpLnJlY3QoKTsKLSAgICB9
OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBs
ZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+bG9naWNhbEZy
YW1lUmVjdCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigp
Lm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5y
ZWN0KCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9v
bCBCb3g8SXRlcmF0b3I+Ojppc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QKK2lubGluZSBG
bG9hdFJlY3QgQm94Ojpsb2dpY2FsUmVjdCgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBb
XShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYpIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0
ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVC
b3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6
c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAg
ICAgICAgcmV0dXJuIHBhdGgubG9naWNhbFJlY3QoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8
Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBib29sIEJveDxJdGVyYXRvcj46OmRpck92ZXJyaWRlKCkg
Y29uc3QKK2lubGluZSBib29sIEJveDo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0CiB7
Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0
aCYpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXgg
PSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAg
ICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5kaXJPdmVycmlkZSgpOwotICAgIH07Ci0KLSAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29t
cGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYg
cGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Cisg
ICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9vbCBCb3g8SXRl
cmF0b3I+Ojppc0xpbmVCcmVhaygpIGNvbnN0CitpbmxpbmUgYm9vbCBCb3g6OmRpck92ZXJyaWRl
KCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9y
OjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGguaXRlcmF0b3IpLmlz
TGluZUJyZWFrKCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVu
YW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5p
bmxpbmVCb3gtPmlzTGluZUJyZWFrKCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAg
IHJldHVybiBwYXRoLmRpck92ZXJyaWRlKCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNz
IEl0ZXJhdG9yPiBpbmxpbmUgY29uc3QgSXRlcmF0b3ImIEJveDxJdGVyYXRvcj46Oml0ZXJhdG9y
KCkgY29uc3QKK2lubGluZSBib29sIEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAogewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBJdGVyYXRvciY+KCp0aGlzKTsKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVy
biBwYXRoLmlzTGluZUJyZWFrKCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJh
dG9yPiBpbmxpbmUgYm9vbCBUZXh0Qm94PEl0ZXJhdG9yPjo6aGFzSHlwaGVuKCkgY29uc3QKK2lu
bGluZSBib29sIFRleHRCb3g6Omhhc0h5cGhlbigpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUg
PSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAg
ICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS5oYXNIeXBoZW4oKTsKLSAgICB9OwotCi0gICAgYXV0
byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRo
KSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+aGFzSHlwaGVuKCk7Ci0gICAgfTsK
LQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2lt
cGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBb
XShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmhhc0h5cGhlbigpOworICAgIH0p
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIFN0cmluZ1ZpZXcgVGV4dEJv
eDxJdGVyYXRvcj46OnRleHQoKSBjb25zdAoraW5saW5lIFRleHRCb3g6OlRleHRCb3goUGF0aFZh
cmlhbnQmJiBwYXRoKQorICAgIDogQm94KFdURk1vdmUocGF0aCkpCiB7Ci0gICAgYXV0byBzaW1w
bGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAg
ICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS50ZXh0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8g
Y29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkg
ewotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhwYXRoLmlubGluZUJveC0+cmVuZGVyZXIoKS50
ZXh0KCkpLnN1YnN0cmluZyhwYXRoLmlubGluZUJveC0+c3RhcnQoKSwgcGF0aC5pbmxpbmVCb3gt
PmxlbigpKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5t
X3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVy
YXRvcj4gaW5saW5lIHVuc2lnbmVkIFRleHRCb3g8SXRlcmF0b3I+Ojpsb2NhbFN0YXJ0T2Zmc2V0
KCkgY29uc3QKK2lubGluZSBTdHJpbmdWaWV3IFRleHRCb3g6OnRleHQoKSBjb25zdAogewotICAg
IGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBh
dGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikubG9jYWxTdGFydCgpOwotICAg
IH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29t
cGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5zdGFydCgp
OwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZh
cmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRo
VmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC50ZXh0KCk7Cisg
ICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgdW5zaWduZWQgVGV4
dEJveDxJdGVyYXRvcj46OmxvY2FsRW5kT2Zmc2V0KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBU
ZXh0Qm94Ojpsb2NhbFN0YXJ0T2Zmc2V0KCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtd
KGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJl
dHVybiAoKnBhdGguaXRlcmF0b3IpLmxvY2FsRW5kKCk7Ci0gICAgfTsKLQotICAgIGF1dG8gY29t
cGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewot
ICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3gtPmVuZCgpOwotICAgIH07Ci0KLSAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxl
eCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2NhbFN0YXJ0T2Zmc2V0KCk7CisgICAgfSk7CiB9
CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgdW5zaWduZWQgVGV4dEJveDxJdGVy
YXRvcj46Omxlbmd0aCgpIGNvbnN0CitpbmxpbmUgdW5zaWduZWQgVGV4dEJveDo6bG9jYWxFbmRP
ZmZzZXQoKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRl
cmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRv
cikuZW5kKCkgLSAoKnBhdGguaXRlcmF0b3IpLnN0YXJ0KCk7Ci0gICAgfTsKLQotICAgIGF1dG8g
Y29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkg
ewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3gtPmxlbigpOwotICAgIH07Ci0KLSAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29t
cGxleCk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYg
cGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2NhbEVuZE9mZnNldCgpOworICAgIH0pOwog
fQogCi10ZW1wbGF0ZTxjbGFzcyBJdGVyYXRvcj4gaW5saW5lIGJvb2wgVGV4dEJveDxJdGVyYXRv
cj46OmlzTGFzdE9uTGluZSgpIGNvbnN0CitpbmxpbmUgdW5zaWduZWQgVGV4dEJveDo6bGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9y
OjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIGF1dG8gbmV4dCA9IHBhdGguaXRlcmF0b3I7
Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0dXJuIG5leHQgPT0gcGF0aC5lbmQgfHwgKCpw
YXRoLml0ZXJhdG9yKS5saW5lSW5kZXgoKSAhPSAoKm5leHQpLmxpbmVJbmRleCgpOwotICAgIH07
Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxl
eFBhdGgmIHBhdGgpIHsKLSAgICAgICAgYXV0byogbmV4dCA9IHBhdGgubmV4dElubGluZVRleHRC
b3hJblRleHRPcmRlcigpOwotICAgICAgICByZXR1cm4gIW5leHQgfHwgJnBhdGguaW5saW5lQm94
LT5yb290KCkgIT0gJm5leHQtPnJvb3QoKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dp
dGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAg
ICAgcmV0dXJuIHBhdGgubGVuZ3RoKCk7CisgICAgfSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0
ZXJhdG9yPiBpbmxpbmUgYm9vbCBUZXh0Qm94PEl0ZXJhdG9yPjo6aXNMYXN0KCkgY29uc3QKK2lu
bGluZSBib29sIFRleHRCb3g6OmlzTGFzdE9uTGluZSgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1w
bGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAg
ICAgICBhdXRvIG5leHQgPSBwYXRoLml0ZXJhdG9yOwotICAgICAgICArK25leHQ7Ci0gICAgICAg
IHJldHVybiBuZXh0ID09IHBhdGguZW5kOwotICAgIH07Ci0KLSAgICBhdXRvIGNvbXBsZXggPSBb
XShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAgICAg
cmV0dXJuICFwYXRoLm5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIoKTsKLSAgICB9OworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAg
ICAgICAgcmV0dXJuIHBhdGguaXNMYXN0T25MaW5lKCk7CisgICAgfSk7Cit9CiAKLSAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxl
eCk7CitpbmxpbmUgYm9vbCBUZXh0Qm94Ojppc0xhc3QoKSBjb25zdAoreworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0
dXJuIHBhdGguaXNMYXN0KCk7CisgICAgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxDb21wbGV4UGF0aC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQ
YXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM2NDMyODhlYzQx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxh
eW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIlJl
bmRlclRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK25hbWVzcGFjZSBMaW5lTGF5b3V0VHJhdmVyc2FsIHsKKworY2xhc3MgQ29tcGxleFBhdGgg
eworcHVibGljOgorICAgIENvbXBsZXhQYXRoKGNvbnN0IElubGluZUJveCogaW5saW5lQm94LCBW
ZWN0b3I8Y29uc3QgSW5saW5lVGV4dEJveCo+JiYgc29ydGVkSW5saW5lVGV4dEJveGVzID0geyB9
LCBzaXplX3Qgc29ydGVkSW5saW5lVGV4dEJveEluZGV4ID0gMCkKKyAgICAgICAgOiBtX2lubGlu
ZUJveChpbmxpbmVCb3gpCisgICAgICAgICwgbV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXMoV1RGTW92
ZShzb3J0ZWRJbmxpbmVUZXh0Qm94ZXMpKQorICAgICAgICAsIG1fc29ydGVkSW5saW5lVGV4dEJv
eEluZGV4KHNvcnRlZElubGluZVRleHRCb3hJbmRleCkKKyAgICB7IH0KKworICAgIEZsb2F0UmVj
dCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmZyYW1lUmVjdCgpOyB9CisgICAg
RmxvYXRSZWN0IGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmxvZ2lj
YWxGcmFtZVJlY3QoKTsgfQorCisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pbmxpbmVCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsgfQorICAg
IGJvb2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+ZGlyT3ZlcnJp
ZGUoKTsgfQorICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJv
eC0+aXNMaW5lQnJlYWsoKTsgfQorCisgICAgYm9vbCBoYXNIeXBoZW4oKSBjb25zdCB7IHJldHVy
biBpbmxpbmVUZXh0Qm94KCktPmhhc0h5cGhlbigpOyB9CisgICAgU3RyaW5nVmlldyB0ZXh0KCkg
Y29uc3QgeyByZXR1cm4gU3RyaW5nVmlldyhpbmxpbmVUZXh0Qm94KCktPnJlbmRlcmVyKCkudGV4
dCgpKS5zdWJzdHJpbmcoaW5saW5lVGV4dEJveCgpLT5zdGFydCgpLCBpbmxpbmVUZXh0Qm94KCkt
PmxlbigpKTsgfQorICAgIHVuc2lnbmVkIGxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCk7IH0KKyAgICB1bnNpZ25lZCBsb2NhbEVuZE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigpOyB9CisKKyAg
ICBpbmxpbmUgYm9vbCBpc0xhc3RPbkxpbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byog
bmV4dCA9IG5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIoKTsKKyAgICAgICAgcmV0dXJuICFu
ZXh0IHx8ICZpbmxpbmVUZXh0Qm94KCktPnJvb3QoKSAhPSAmbmV4dC0+cm9vdCgpOworICAgIH0K
KyAgICBpbmxpbmUgYm9vbCBpc0xhc3QoKSBjb25zdCB7IHJldHVybiAhbmV4dElubGluZVRleHRC
b3hJblRleHRPcmRlcigpOyB9OworCisgICAgdm9pZCB0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1
YWxPcmRlcigpIHsgbV9pbmxpbmVCb3ggPSBpbmxpbmVUZXh0Qm94KCktPm5leHRUZXh0Qm94KCk7
IH0KKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblRleHRPcmRlcigpCisgICAgeworICAg
ICAgICBtX2lubGluZUJveCA9IG5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIoKTsKKyAgICAg
ICAgaWYgKCFtX3NvcnRlZElubGluZVRleHRCb3hlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAr
K21fc29ydGVkSW5saW5lVGV4dEJveEluZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDb21wbGV4UGF0aCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94ID09
IG90aGVyLm1faW5saW5lQm94OyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFt
X2lubGluZUJveDsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IElubGluZVRleHRCb3gqIGlubGlu
ZVRleHRCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihtX2lubGlu
ZUJveCk7IH0KKyAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0SW5saW5lVGV4dEJveEluVGV4
dE9yZGVyKCkgY29uc3Q7CisKKyAgICBjb25zdCBJbmxpbmVCb3gqIG1faW5saW5lQm94OworICAg
IFZlY3Rvcjxjb25zdCBJbmxpbmVUZXh0Qm94Kj4gbV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXM7Cisg
ICAgc2l6ZV90IG1fc29ydGVkSW5saW5lVGV4dEJveEluZGV4IHsgMCB9OworfTsKKworaW5saW5l
IGNvbnN0IElubGluZVRleHRCb3gqIENvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4
dE9yZGVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc29ydGVkSW5saW5lVGV4dEJveGVzLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAobV9zb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggKyAxIDwgbV9z
b3J0ZWRJbmxpbmVUZXh0Qm94ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fc29ydGVk
SW5saW5lVGV4dEJveGVzW21fc29ydGVkSW5saW5lVGV4dEJveEluZGV4ICsgMV07CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5uZXh0
VGV4dEJveCgpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDA5YThjYjQ0NzIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2lt
cGxlUGF0aC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkxpbmVMYXlvdXRUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5
b3V0UmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExpbmVMYXlv
dXRUcmF2ZXJzYWwgeworCitjbGFzcyBTaW1wbGVQYXRoIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVQ
YXRoKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVyYXRvciwgU2lt
cGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCkKKyAgICAgICAgOiBtX2l0
ZXJhdG9yKGl0ZXJhdG9yKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICB7IH0KKworICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5yZWN0KCk7IH0KKyAg
ICBGbG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiByZWN0KCk7IH0KKworICAg
IGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBib29sIGRpck92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlz
TGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5pc0xpbmVCcmVhaygpOyB9
CisKKyAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRvcikuaGFz
SHlwaGVuKCk7IH0KKyAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdCB7IHJldHVybiAoKm1faXRl
cmF0b3IpLnRleHQoKTsgfQorICAgIHVuc2lnbmVkIGxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiAoKm1faXRlcmF0b3IpLmxvY2FsU3RhcnQoKTsgfQorICAgIHVuc2lnbmVkIGxvY2Fs
RW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5sb2NhbEVuZCgpOyB9Cisg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5lbmQoKSAt
ICgqbV9pdGVyYXRvcikuc3RhcnQoKTsgfQorCisgICAgYm9vbCBpc0xhc3RPbkxpbmUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgYXV0byBuZXh0ID0gbV9pdGVyYXRvcjsKKyAgICAgICAgKytuZXh0
OworICAgICAgICByZXR1cm4gbmV4dCA9PSBtX2VuZCB8fCAoKm1faXRlcmF0b3IpLmxpbmVJbmRl
eCgpICE9ICgqbmV4dCkubGluZUluZGV4KCk7CisgICAgfQorICAgIGJvb2wgaXNMYXN0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGF1dG8gbmV4dCA9IG1faXRlcmF0b3I7CisgICAgICAgICsrbmV4
dDsKKyAgICAgICAgcmV0dXJuIG5leHQgPT0gbV9lbmQ7CisgICAgfTsKKworICAgIHZvaWQgdHJh
dmVyc2VOZXh0VGV4dEJveEluVmlzdWFsT3JkZXIoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IFNMTCBjYW4gY29udGFpbnMgPGJyPiBydW5zIGFuZCB0aGlzIHNob3VsZCBza2lwIG92ZXIgdGhl
bS4KKyAgICAgICAgKyttX2l0ZXJhdG9yOworICAgIH0KKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRl
eHRCb3hJblRleHRPcmRlcigpIHsgIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCk7
IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVQYXRoJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9pdGVyYXRvciA9PSBvdGhlci5tX2l0ZXJhdG9yOyB9CisgICAgYm9vbCBhdEVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgPT0gbV9lbmQ7IH0KKworcHJpdmF0ZToKKyAg
ICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAg
ICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9lbmQ7Cit9OworCit9
Cit9Cg==
</data>
<flag name="review"
          id="400337"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384543</attachid>
            <date>2019-11-30 07:48:20 -0800</date>
            <delta_ts>2019-11-30 08:31:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>linelayouttraversal-simplify-5.patch</filename>
            <type>text/plain</type>
            <size>37618</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZmYxYjdkNDQ0Yy4uZmNiN2ZmMjM3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTktMTEtMzAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgcGF0aCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgaW4gTGluZUxh
eW91dFRyYXZlcnNhbCB0byAqUGF0aCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0g
V2VpbmlnLgorCisgICAgICAgIFNpbXBsaWZ5IExpbmVMYXlvdXRUcmF2ZXJzYWwgYW5kIG1ha2Ug
aXQgZWFzaWVyIHRvIGV4dGVuZC4KKworICAgICAgICAtIFR1cm4gU2ltcGxlUGF0aCBhbmQgQ29t
cGxleFBhdGggc3RydWN0cyBpbnRvIGNsYXNzZXMKKyAgICAgICAgLSBNb3ZlIHRoZW0gdG8gc2Vw
YXJhdGUgZmlsZXMKKyAgICAgICAgLSBNYWtlIHBhdGggaW1wbGVtZW50YXRpb24gZnVuY3Rpb25z
IGNsYXNzIG1lbWJlcnMsIGNhbGxlZCB2aWEgZ2VuZXJpYyBsYW1iZGFzCisgICAgICAgIC0gSW5z
dGVhZCBvZiBpbmhlcml0aW5nIEJveC9UZXh0Qm94IHRvIGl0ZXJhdG9ycywgbWFrZSBpdCBhIG1l
bWJlciB2YXJpYWJsZS4KKyAgICAgICAgLSBNb3ZlIHRoZSBwYXRoIHZhcmlhbnQgdG8gQm94LCBh
dm9pZGluZyB1c2Ugb2YgdGVtcGxhdGVzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVGV4dEJveCk6CisgICAgICAgICogcmVuZGVyaW5n
L2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5
b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0b3I6OnRyYXZlcnNl
TmV4dEluVmlzdWFsT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNh
bDo6VGV4dEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRJblRleHRPcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveEl0
ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpFbGVtZW50Qm94SXRlcmF0b3I6OkVsZW1lbnRCb3hJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpFbGVtZW50Qm94SXRlcmF0b3I6OmF0RW5kIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3hJdGVy
YXRvcjo6Q29tcGxleFBhdGg6Om5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3JkZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6
VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6
OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3ItPiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpFbGVtZW50Qm94SXRlcmF0b3I6
OkVsZW1lbnRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpFbGVtZW50Qm94SXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpFbGVtZW50Qm94SXRlcmF0b3I6Om9wZXJhdG9yLT4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94OjpCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94OjpyZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkJveDo6bG9naWNhbFJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94Ojpp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRUcmF2ZXJzYWw6OkJveDo6ZGlyT3ZlcnJpZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGluZUxheW91dFRyYXZlcnNhbDo6Qm94Ojppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94OjpoYXNIeXBoZW4gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6VGV4dEJveCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94Ojp0ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6Omxv
Y2FsU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZl
cnNhbDo6VGV4dEJveDo6bG9jYWxFbmRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJveDo6bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g6OmlzTGFzdE9uTGluZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpUZXh0Qm94Ojppc0xhc3Qg
Y29uc3QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRUcmF2ZXJzYWw6OkJveDxJdGVyYXRvcj46OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Qm94PEl0ZXJhdG9yPjo6bG9naWNhbFJl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNh
bDo6Qm94PEl0ZXJhdG9yPjo6aXNMZWZ0VG9SaWdodERpcmVjdGlvbiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpCb3g8SXRlcmF0b3I+Ojpk
aXJPdmVycmlkZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0
VHJhdmVyc2FsOjpCb3g8SXRlcmF0b3I+Ojppc0xpbmVCcmVhayBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpCb3g8SXRlcmF0b3I+OjppdGVy
YXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6aGFzSHlwaGVuIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g8SXRlcmF0b3I+Ojp0ZXh0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6
OlRleHRCb3g8SXRlcmF0b3I+Ojpsb2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g8SXRlcmF0b3I+Ojps
b2NhbEVuZE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5
b3V0VHJhdmVyc2FsOjpUZXh0Qm94PEl0ZXJhdG9yPjo6bGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3g8SXRlcmF0b3I+
Ojppc0xhc3RPbkxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFRyYXZlcnNhbDo6VGV4dEJveDxJdGVyYXRvcj46OmlzTGFzdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRo
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxl
eFBhdGg6OkNvbXBsZXhQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJz
YWw6OkNvbXBsZXhQYXRoOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlv
dXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpsb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0aDo6aXNMZWZ0VG9SaWdodERp
cmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpD
b21wbGV4UGF0aDo6ZGlyT3ZlcnJpZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmlzTGluZUJyZWFrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpoYXNIeXBoZW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6
OnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29t
cGxleFBhdGg6OmxvY2FsU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGlu
ZUxheW91dFRyYXZlcnNhbDo6Q29tcGxleFBhdGg6OmxvY2FsRW5kT2Zmc2V0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpsZW5ndGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6Q29tcGxleFBh
dGg6OmlzTGFzdE9uTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpDb21wbGV4UGF0aDo6aXNMYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjp0cmF2ZXJzZU5leHRUZXh0Qm94SW5WaXN1
YWxPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4
UGF0aDo6dHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OkNvbXBsZXhQYXRoOjphdEVuZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpDb21wbGV4UGF0
aDo6aW5saW5lVGV4dEJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpDb21wbGV4UGF0aDo6bmV4dElubGluZVRleHRCb3hJblRleHRPcmRlciBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGgu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQ
YXRoOjpTaW1wbGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6
OlNpbXBsZVBhdGg6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRy
YXZlcnNhbDo6U2ltcGxlUGF0aDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6aXNMZWZ0VG9SaWdodERpcmVjdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQ
YXRoOjpkaXJPdmVycmlkZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJh
dmVyc2FsOjpTaW1wbGVQYXRoOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjpoYXNIeXBoZW4gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxlUGF0aDo6dGV4dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjps
b2NhbFN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2
ZXJzYWw6OlNpbXBsZVBhdGg6OmxvY2FsRW5kT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6Omxlbmd0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVyc2FsOjpTaW1wbGVQYXRoOjppc0xhc3RPbkxp
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFRyYXZlcnNhbDo6U2ltcGxl
UGF0aDo6aXNMYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJz
YWw6OlNpbXBsZVBhdGg6OnRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OnRyYXZlcnNlTmV4
dFRleHRCb3hJblRleHRPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0VHJhdmVy
c2FsOjpTaW1wbGVQYXRoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVMYXlvdXRUcmF2ZXJzYWw6OlNpbXBsZVBhdGg6OmF0RW5kIGNvbnN0KToKKwogMjAxOS0xMS0y
OSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10g
QWRkIHN1cHBvcnQgZm9yIHNpbXBsZSBoeXBoZW5hdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXgg
ZWZjMjc1ZjZkYTguLjY3NDRjOGU4ZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzMjAsNiAr
MTMyMCw4IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgKIAogICAgIHJlbmRlcmluZy9saW5lL0xp
bmVMYXlvdXRUcmF2ZXJzYWwuaAorICAgIHJlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJz
YWxDb21wbGV4UGF0aC5oCisgICAgcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbFNp
bXBsZVBhdGguaAogICAgIHJlbmRlcmluZy9saW5lL0xpbmVXaWR0aC5oCiAgICAgcmVuZGVyaW5n
L2xpbmUvVHJhaWxpbmdPYmplY3RzLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFhNmYxODgwODE4Li45ODI0MzJhYjU5OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNDc5NCw2ICs0Nzk0LDggQEAKIAkJRTQyOTVGQTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJl
c291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDI5NUZBMzEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3Jp
dHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NDJFNzZEQzFDN0FGNzc2MDBFMzYxNEQgLyogU3R5bGVVcGRhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MkU3NkRCMUM3QUY3NzYwMEUzNjE0RCAv
KiBTdHlsZVVwZGF0ZS5oICovOyB9OwogCQlFNDMxMDVCQjE2NzUwRjE2MDBEQjJGQjggLyogTm9k
ZVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNDM0M0QyMzIzOTI3Nzg0
MDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2
NiAvKiBMaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0MzQzRDI1MjM5Mjc3OTAwMEVCQkI2NiAv
KiBMaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MzQzRDI0MjM5Mjc3OEYwMEVCQkI2NiAvKiBMaW5l
TGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDNBMDIzQjE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVy
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTQzQTAyM0ExN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDNBRjhFNzFBQzVCN0VDMDBD
QTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDNBRjhFNTFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTQ0MEFBOTYxQzY4NDIwODAwQTI2NUNDIC8qIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQw
QUE5NTFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3Iu
aCAqLzsgfTsKQEAgLTE1MTA3LDYgKzE1MTA5LDggQEAKIAkJRTQyRTc2REIxQzdBRjc3NjAwRTM2
MTREIC8qIFN0eWxlVXBkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
eWxlVXBkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MzEwNUI3MTY3NTBG
MEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJh
dmVyc2FsU2ltcGxlUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5l
TGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNDM0M0QyNDIzOTI3NzhGMDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQ
YXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRUcmF2ZXJz
YWxDb21wbGV4UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDNBMDIzQTE3
RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0M0EwMjNDMTdFQjM3MTMwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxp
ZGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFs
aWRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODcyNSw2ICsyODcy
OSw4IEBACiAJCQkJRkZFRkFCMjkxODM4MERBMDAwNTE0NTM0IC8qIExpbmVMYXlvdXRTdGF0ZS5o
ICovLAogCQkJCUU0ODRBMzNEMjMwNTUzMDMwMDlBREU2QSAvKiBMaW5lTGF5b3V0VHJhdmVyc2Fs
LmNwcCAqLywKIAkJCQlFNDg0QTMzQjIzMDU1MzAzMDA5QURFNkEgLyogTGluZUxheW91dFRyYXZl
cnNhbC5oICovLAorCQkJCUU0MzQzRDIxMjM5Mjc3ODMwMEVCQkI2NiAvKiBMaW5lTGF5b3V0VHJh
dmVyc2FsU2ltcGxlUGF0aC5oICovLAorCQkJCUU0MzQzRDI0MjM5Mjc3OEYwMEVCQkI2NiAvKiBM
aW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGguaCAqLywKIAkJCQlGRkRCQzA0NjE4M0QyN0I3
MDA0MDcxMDkgLyogTGluZVdpZHRoLmNwcCAqLywKIAkJCQlGRkRCQzA0NTE4M0QyN0I3MDA0MDcx
MDkgLyogTGluZVdpZHRoLmggKi8sCiAJCQkJRkZBQzMwRkQxODRGQjE0NTAwOEM0RjFFIC8qIFRy
YWlsaW5nT2JqZWN0cy5jcHAgKi8sCkBAIC0zMDUzNSw2ICszMDU0MSw3IEBACiAJCQkJODM3MDU2
OTAxRjUwOTE1QzAwRDkzNDI1IC8qIEpTRmlsZVN5c3RlbUVudHJ5Q2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgzM0I5RTM2MUY1MDhEODUwMEUwRTQyOCAvKiBKU0ZpbGVTeXN0ZW1GaWxl
RW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMkJFNDg4MUZFODY4NkEwMDIwMzFDQyAvKiBK
U0ZpbGxNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDM0M0QyNTIzOTI3NzkwMDBFQkJCNjYg
LyogTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
NkQ5RDI3QjE0RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMjgwODMzRjFDNkRDMjZGMDAxNDUxQjYgLyogSlNGb250RmFjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUMyNEVFQTkxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzE2ODIsNiArMzE2ODksNyBAQAogCQkJCTU3RENFRDc0MjE0MzA1RjAw
MDE2Qjg0NyAvKiBQdWJsaWNLZXlDcmVkZW50aWFsRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTczMDNCRUYyMDA5ODBDNjAwMzU1OTY1IC8qIFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0MwQTIwMDk5QkFEMDAzNTU5NjUgLyogUHVibGlj
S2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDM0M0Qy
MzIzOTI3Nzg0MDBFQkJCNjYgLyogTGluZUxheW91dFRyYXZlcnNhbFNpbXBsZVBhdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTU3MzAzQkVCMjAwOTdGNDAwMDM1NTk2NSAvKiBQdWJsaWNLZXlDcmVk
ZW50aWFsVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDA4MUZGMDAxNkIwQTJEMzAwOEFBQTdB
IC8qIFB1YmxpY1N1ZmZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTBGQjA4NEIxNEUxNUM3RTAw
QTNEQjk4IC8qIFB1YmxpY1VSTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDIxMzVhNTJiYzdlLi4z
MTNlM2U1MzBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcApAQCAtNDc3LDcgKzQ3Nyw3IEBAIHZvaWQgd3JpdGVEZWJ1Z0luZm8oVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBPcHRpb25TZXQ8UmVuZGVyCiAgICAg
fQogfQogCi1zdGF0aWMgdm9pZCB3cml0ZVRleHRCb3goVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlclRleHQmIG8sIGNvbnN0IExpbmVMYXlvdXRUcmF2ZXJzYWw6OlRleHRCb3hJdGVyYXRvcjo6
Qm94VHlwZSYgdGV4dEJveCkKK3N0YXRpYyB2b2lkIHdyaXRlVGV4dEJveChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyVGV4dCYgbywgY29uc3QgTGluZUxheW91dFRyYXZlcnNhbDo6VGV4dEJv
eCYgdGV4dEJveCkKIHsKICAgICBhdXRvIHJlY3QgPSB0ZXh0Qm94LnJlY3QoKTsKICAgICBhdXRv
IGxvZ2ljYWxSZWN0ID0gdGV4dEJveC5sb2dpY2FsUmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmNwcAppbmRleCA5MGU5
ZTA0ZGJiMy4uNzY1Yjk3ODcyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuY3BwCkBAIC0zMiw4OCArMzIsNTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgewogCiBUZXh0
Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVU
ZXh0Qm94KQotICAgIDogbV9wYXRoVmFyaWFudChDb21wbGV4UGF0aCB7IGlubGluZVRleHRCb3gs
IHsgfSB9KQorICAgIDogbV90ZXh0Qm94KENvbXBsZXhQYXRoIHsgaW5saW5lVGV4dEJveCwgeyB9
IH0pCiB7CiB9CiBUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcihWZWN0b3I8Y29uc3Qg
SW5saW5lVGV4dEJveCo+JiYgc29ydGVkLCBzaXplX3QgaW5kZXgpCi0gICAgOiBtX3BhdGhWYXJp
YW50KENvbXBsZXhQYXRoIHsgaW5kZXggPCBzb3J0ZWQuc2l6ZSgpID8gc29ydGVkW2luZGV4XSA6
IG51bGxwdHIsIFdURk1vdmUoc29ydGVkKSwgaW5kZXggfSkKKyAgICA6IG1fdGV4dEJveChDb21w
bGV4UGF0aCB7IGluZGV4IDwgc29ydGVkLnNpemUoKSA/IHNvcnRlZFtpbmRleF0gOiBudWxscHRy
LCBXVEZNb3ZlKHNvcnRlZCksIGluZGV4IH0pCiB7CiB9CiAKIFRleHRCb3hJdGVyYXRvcjo6VGV4
dEJveEl0ZXJhdG9yKFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRvciBpdGVy
YXRvciwgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGVuZCkKLSAgICA6
IG1fcGF0aFZhcmlhbnQoU2ltcGxlUGF0aCB7IGl0ZXJhdG9yLCBlbmQgfSkKKyAgICA6IG1fdGV4
dEJveChTaW1wbGVQYXRoIHsgaXRlcmF0b3IsIGVuZCB9KQogewogfQogCiBUZXh0Qm94SXRlcmF0
b3ImIFRleHRCb3hJdGVyYXRvcjo6dHJhdmVyc2VOZXh0SW5WaXN1YWxPcmRlcigpCiB7Ci0gICAg
YXV0byBzaW1wbGUgPSBbXShTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgICsrcGF0aC5pdGVy
YXRvcjsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oQ29tcGxleFBhdGgmIHBhdGgp
IHsKLSAgICAgICAgcGF0aC5pbmxpbmVCb3ggPSBwYXRoLmlubGluZUJveC0+bmV4dFRleHRCb3go
KTsKLSAgICB9OwotCi0gICAgV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNv
bXBsZXgpOwotCisgICAgV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFudCwgW10o
YXV0byYgcGF0aCkgeworICAgICAgICBwYXRoLnRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9y
ZGVyKCk7CisgICAgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1jb25zdCBJbmxpbmVUZXh0
Qm94KiBUZXh0Qm94SXRlcmF0b3I6OkNvbXBsZXhQYXRoOjpuZXh0SW5saW5lVGV4dEJveEluVGV4
dE9yZGVyKCkgY29uc3QKLXsKLSAgICBpZiAoIXNvcnRlZElubGluZVRleHRCb3hlcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgaWYgKHNvcnRlZElubGluZVRleHRCb3hJbmRleCArIDEgPCBzb3J0ZWRJ
bmxpbmVUZXh0Qm94ZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHNvcnRlZElubGluZVRl
eHRCb3hlc1tzb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggKyAxXTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBpbmxpbmVCb3gtPm5leHRUZXh0Qm94KCk7Ci19Ci0K
IFRleHRCb3hJdGVyYXRvciYgVGV4dEJveEl0ZXJhdG9yOjp0cmF2ZXJzZU5leHRJblRleHRPcmRl
cigpCiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAg
ICsrcGF0aC5pdGVyYXRvcjsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oQ29tcGxl
eFBhdGgmIHBhdGgpIHsKLSAgICAgICAgcGF0aC5pbmxpbmVCb3ggPSBwYXRoLm5leHRJbmxpbmVU
ZXh0Qm94SW5UZXh0T3JkZXIoKTsKLSAgICAgICAgaWYgKCFwYXRoLnNvcnRlZElubGluZVRleHRC
b3hlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICArK3BhdGguc29ydGVkSW5saW5lVGV4dEJveElu
ZGV4OwotICAgIH07Ci0KLSAgICBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIHNpbXBsZSwg
Y29tcGxleCk7Ci0KKyAgICBXVEY6OnN3aXRjaE9uKG1fdGV4dEJveC5tX3BhdGhWYXJpYW50LCBb
XShhdXRvJiBwYXRoKSB7CisgICAgICAgIHBhdGgudHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9y
ZGVyKCk7CisgICAgfSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiBib29sIFRleHRCb3hJdGVy
YXRvcjo6b3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAogewot
ICAgIGlmIChtX3BhdGhWYXJpYW50LmluZGV4KCkgIT0gb3RoZXIubV9wYXRoVmFyaWFudC5pbmRl
eCgpKQorICAgIGlmIChtX3RleHRCb3gubV9wYXRoVmFyaWFudC5pbmRleCgpICE9IG90aGVyLm1f
dGV4dEJveC5tX3BhdGhWYXJpYW50LmluZGV4KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8gc2ltcGxlID0gWyZdKGNvbnN0IFNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAg
cmV0dXJuIHBhdGguaXRlcmF0b3IgPT0gV1RGOjpnZXQ8U2ltcGxlUGF0aD4ob3RoZXIubV9wYXRo
VmFyaWFudCkuaXRlcmF0b3I7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFsmXShjb25z
dCBDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3ggPT0g
V1RGOjpnZXQ8Q29tcGxleFBhdGg+KG90aGVyLm1fcGF0aFZhcmlhbnQpLmlubGluZUJveDsKLSAg
ICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxlLCBj
b21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3RleHRCb3gubV9wYXRoVmFyaWFu
dCwgWyZdKGNvbnN0IGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGggPT0gV1RGOjpn
ZXQ8c3RkOjpkZWNheV90PGRlY2x0eXBlKHBhdGgpPj4ob3RoZXIubV90ZXh0Qm94Lm1fcGF0aFZh
cmlhbnQpOworICAgIH0pOwogfQogCiBib29sIFRleHRCb3hJdGVyYXRvcjo6YXRFbmQoKSBjb25z
dAogewotICAgIGF1dG8gc2ltcGxlID0gWyZdKGNvbnN0IFNpbXBsZVBhdGgmIHBhdGgpIHsKLSAg
ICAgICAgcmV0dXJuIHBhdGguaXRlcmF0b3IgPT0gcGF0aC5lbmQ7Ci0gICAgfTsKLQotICAgIGF1
dG8gY29tcGxleCA9IFsmXShjb25zdCBDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1
cm4gIXBhdGguaW5saW5lQm94OwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fdGV4dEJveC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVy
biBwYXRoLmF0RW5kKCk7CisgICAgfSk7CiB9CiAKIFRleHRCb3hJdGVyYXRvciBmaXJzdFRleHRC
b3hGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKQEAgLTE0NSwyNSArMTA3LDE5IEBAIFRleHRC
b3hSYW5nZSB0ZXh0Qm94ZXNGb3IoY29uc3QgUmVuZGVyVGV4dCYgdGV4dCkKIH0KIAogRWxlbWVu
dEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3IoY29uc3QgSW5saW5lRWxlbWVudEJveCog
aW5saW5lRWxlbWVudEJveCkKLSAgICA6IG1fcGF0aFZhcmlhbnQoQ29tcGxleFBhdGggeyBpbmxp
bmVFbGVtZW50Qm94IH0pCisgICAgOiBtX2JveChDb21wbGV4UGF0aCB7IGlubGluZUVsZW1lbnRC
b3gsIHsgfSB9KQogewogfQogRWxlbWVudEJveEl0ZXJhdG9yOjpFbGVtZW50Qm94SXRlcmF0b3Io
U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yLCBTaW1wbGVM
aW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5kKQotICAgIDogbV9wYXRoVmFyaWFu
dChTaW1wbGVQYXRoIHsgaXRlcmF0b3IsIGVuZCB9KQorICAgIDogbV9ib3goU2ltcGxlUGF0aCB7
IGl0ZXJhdG9yLCBlbmQgfSkKIHsKIH0KIAogYm9vbCBFbGVtZW50Qm94SXRlcmF0b3I6OmF0RW5k
KCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFsmXShjb25zdCBTaW1wbGVQYXRoJiBwYXRo
KSB7Ci0gICAgICAgIHJldHVybiBwYXRoLml0ZXJhdG9yID09IHBhdGguZW5kOwotICAgIH07Ci0K
LSAgICBhdXRvIGNvbXBsZXggPSBbJl0oY29uc3QgQ29tcGxleFBhdGgmIHBhdGgpIHsKLSAgICAg
ICAgcmV0dXJuICFwYXRoLmlubGluZUJveDsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX2JveC5tX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJl
dHVybiBwYXRoLmF0RW5kKCk7CisgICAgfSk7CiB9CiAKIEVsZW1lbnRCb3hJdGVyYXRvciBlbGVt
ZW50Qm94Rm9yKGNvbnN0IFJlbmRlckxpbmVCcmVhayYgcmVuZGVyRWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAppbmRl
eCBmNDAxZTgzMTFkMS4uMTM0ZjQyMGI1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsLmgKQEAgLTI1LDExICsyNSwxMCBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIklubGlu
ZUVsZW1lbnRCb3guaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGlu
ZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmgiCisjaW5jbHVkZSAiTGluZUxheW91dFRyYXZl
cnNhbFNpbXBsZVBhdGguaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiU2lt
cGxlTGluZUxheW91dFJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvSXRlcmF0b3JSYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC0z
OCwxOCArMzcsMjAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyTGluZUJy
ZWFrOwotY2xhc3MgUmVuZGVyVGV4dDsKIAogbmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwg
ewogCi1jbGFzcyBUZXh0Qm94Q29udGV4dDsKK2NsYXNzIEVsZW1lbnRCb3hJdGVyYXRvcjsKIGNs
YXNzIFRleHRCb3hJdGVyYXRvcjsKIAogc3RydWN0IEVuZEl0ZXJhdG9yIHsgfTsKIAotdGVtcGxh
dGU8Y2xhc3MgSXRlcmF0b3I+CiBjbGFzcyBCb3ggewogcHVibGljOgorICAgIHVzaW5nIFBhdGhW
YXJpYW50ID0gVmFyaWFudDxTaW1wbGVQYXRoLCBDb21wbGV4UGF0aD47CisKKyAgICBCb3goUGF0
aFZhcmlhbnQmJik7CisKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0OwogICAgIEZsb2F0UmVj
dCBsb2dpY2FsUmVjdCgpIGNvbnN0OwogCkBAIC01OCwxOSArNTksMTYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIEJveCgpID0gZGVm
YXVsdDsKLSAgICBCb3goY29uc3QgQm94JikgPSBkZWZhdWx0OwotICAgIEJveChCb3gmJikgPSBk
ZWZhdWx0OwotICAgIH5Cb3goKSA9IGRlZmF1bHQ7Ci0gICAgQm94JiBvcGVyYXRvcj0oY29uc3Qg
Qm94JikgPSBkZWZhdWx0OwotICAgIEJveCYgb3BlcmF0b3I9KEJveCYmKSA9IGRlZmF1bHQ7Ci0K
LSAgICBjb25zdCBJdGVyYXRvciYgaXRlcmF0b3IoKSBjb25zdDsKKyAgICBmcmllbmQgY2xhc3Mg
RWxlbWVudEJveEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBUZXh0Qm94SXRlcmF0b3I7CisK
KyAgICBQYXRoVmFyaWFudCBtX3BhdGhWYXJpYW50OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgSXRl
cmF0b3I+Ci1jbGFzcyBUZXh0Qm94IDogcHVibGljIEJveDxJdGVyYXRvcj4geworY2xhc3MgVGV4
dEJveCA6IHB1YmxpYyBCb3ggewogcHVibGljOgorICAgIFRleHRCb3goUGF0aFZhcmlhbnQmJik7
CisKICAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0OwogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNv
bnN0OwogCkBAIC04MSwyMSArNzksMTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0xhc3RPbkxp
bmUoKSBjb25zdDsKICAgICBib29sIGlzTGFzdCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAg
VGV4dEJveCgpID0gZGVmYXVsdDsKLSAgICBUZXh0Qm94KGNvbnN0IFRleHRCb3gmKSA9IGRlZmF1
bHQ7Ci0gICAgVGV4dEJveChUZXh0Qm94JiYpID0gZGVmYXVsdDsKLSAgICB+VGV4dEJveCgpID0g
ZGVmYXVsdDsKLSAgICBUZXh0Qm94JiBvcGVyYXRvcj0oY29uc3QgVGV4dEJveCYpID0gZGVmYXVs
dDsKLSAgICBUZXh0Qm94JiBvcGVyYXRvcj0oVGV4dEJveCYmKSA9IGRlZmF1bHQ7Ci0KLSAgICB1
c2luZyBCb3g8SXRlcmF0b3I+OjppdGVyYXRvcjsKIH07CiAKLWNsYXNzIFRleHRCb3hJdGVyYXRv
ciA6IHByaXZhdGUgVGV4dEJveDxUZXh0Qm94SXRlcmF0b3I+IHsKK2NsYXNzIFRleHRCb3hJdGVy
YXRvciB7CiBwdWJsaWM6Ci0gICAgVGV4dEJveEl0ZXJhdG9yKCkgOiBtX3BhdGhWYXJpYW50KENv
bXBsZXhQYXRoIHsgbnVsbHB0ciwgeyB9IH0pIHsgfTsKKyAgICBUZXh0Qm94SXRlcmF0b3IoKSA6
IG1fdGV4dEJveChDb21wbGV4UGF0aCB7IG51bGxwdHIsIHsgfSB9KSB7IH07CiAKICAgICBleHBs
aWNpdCBUZXh0Qm94SXRlcmF0b3IoY29uc3QgSW5saW5lVGV4dEJveCopOwogICAgIFRleHRCb3hJ
dGVyYXRvcihWZWN0b3I8Y29uc3QgSW5saW5lVGV4dEJveCo+JiYgc29ydGVkLCBzaXplX3QgaW5k
ZXgpOwpAQCAtMTEzLDU4ICsxMDEsMzEgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShF
bmRJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gYXRFbmQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3Ih
PShFbmRJdGVyYXRvcikgY29uc3QgeyByZXR1cm4gIWF0RW5kKCk7IH0KIAotICAgIGNvbnN0IFRl
eHRCb3gmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgY29uc3QgVGV4
dEJveCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBUZXh0
Qm94JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3RleHRCb3g7IH0KKyAgICBjb25zdCBU
ZXh0Qm94KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdGV4dEJveDsgfQogCiAgICAg
Ym9vbCBhdEVuZCgpIGNvbnN0OwogCi0gICAgdXNpbmcgQm94VHlwZSA9IFRleHRCb3g8VGV4dEJv
eEl0ZXJhdG9yPjsKLQogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQm94PFRleHRCb3hJdGVy
YXRvcj47Ci0gICAgZnJpZW5kIGNsYXNzIFRleHRCb3g8VGV4dEJveEl0ZXJhdG9yPjsKLQotICAg
IHN0cnVjdCBTaW1wbGVQYXRoIHsKLSAgICAgICAgU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yOwotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNv
bHZlcjo6SXRlcmF0b3IgZW5kOwotICAgIH07Ci0gICAgc3RydWN0IENvbXBsZXhQYXRoIHsKLSAg
ICAgICAgY29uc3QgSW5saW5lVGV4dEJveCogaW5saW5lQm94OwotICAgICAgICBWZWN0b3I8Y29u
c3QgSW5saW5lVGV4dEJveCo+IHNvcnRlZElubGluZVRleHRCb3hlczsKLSAgICAgICAgc2l6ZV90
IHNvcnRlZElubGluZVRleHRCb3hJbmRleCB7IDAgfTsKLQotICAgICAgICBjb25zdCBJbmxpbmVU
ZXh0Qm94KiBuZXh0SW5saW5lVGV4dEJveEluVGV4dE9yZGVyKCkgY29uc3Q7Ci0gICAgfTsKLSAg
ICBWYXJpYW50PFNpbXBsZVBhdGgsIENvbXBsZXhQYXRoPiBtX3BhdGhWYXJpYW50OworICAgIFRl
eHRCb3ggbV90ZXh0Qm94OwogfTsKIAotY2xhc3MgRWxlbWVudEJveEl0ZXJhdG9yIDogcHJpdmF0
ZSBCb3g8RWxlbWVudEJveEl0ZXJhdG9yPiB7CitjbGFzcyBFbGVtZW50Qm94SXRlcmF0b3Igewog
cHVibGljOgotICAgIEVsZW1lbnRCb3hJdGVyYXRvcigpIDogbV9wYXRoVmFyaWFudChDb21wbGV4
UGF0aCB7IG51bGxwdHIgfSkgeyB9OworICAgIEVsZW1lbnRCb3hJdGVyYXRvcigpIDogbV9ib3go
Q29tcGxleFBhdGggeyBudWxscHRyLCB7IH0gfSkgeyB9OwogCiAgICAgZXhwbGljaXQgRWxlbWVu
dEJveEl0ZXJhdG9yKGNvbnN0IElubGluZUVsZW1lbnRCb3gqKTsKICAgICBFbGVtZW50Qm94SXRl
cmF0b3IoU2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yLCBTaW1wbGVMaW5l
TGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5kKTsKIAogICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhYXRFbmQoKTsgfQogCi0gICAgY29uc3QgQm94JiBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQotICAgIGNvbnN0IEJveCogb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICBjb25zdCBCb3gmIG9wZXJhdG9yKigp
IGNvbnN0IHsgcmV0dXJuIG1fYm94OyB9CisgICAgY29uc3QgQm94KiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gJm1fYm94OyB9CiAKICAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAKLSAgICB1
c2luZyBCb3hUeXBlID0gQm94PEVsZW1lbnRCb3hJdGVyYXRvcj47Ci0KIHByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIEJveDxFbGVtZW50Qm94SXRlcmF0b3I+OwotCi0gICAgc3RydWN0IFNpbXBs
ZVBhdGggewotICAgICAgICBTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3Ig
aXRlcmF0b3I7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJdGVyYXRv
ciBlbmQ7Ci0gICAgfTsKLSAgICBzdHJ1Y3QgQ29tcGxleFBhdGggewotICAgICAgICBjb25zdCBJ
bmxpbmVFbGVtZW50Qm94KiBpbmxpbmVCb3g7Ci0gICAgfTsKLSAgICBWYXJpYW50PFNpbXBsZVBh
dGgsIENvbXBsZXhQYXRoPiBtX3BhdGhWYXJpYW50OworICAgIEJveCBtX2JveDsKIH07CiAKIGNs
YXNzIFRleHRCb3hSYW5nZSB7CkBAIC0xODgsMTcwICsxNDksOTggQEAgRWxlbWVudEJveEl0ZXJh
dG9yIGVsZW1lbnRCb3hGb3IoY29uc3QgUmVuZGVyTGluZUJyZWFrJik7CiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRlbXBsYXRlPGNsYXNz
IEl0ZXJhdG9yPiBpbmxpbmUgRmxvYXRSZWN0IEJveDxJdGVyYXRvcj46OnJlY3QoKSBjb25zdAor
aW5saW5lIEJveDo6Qm94KFBhdGhWYXJpYW50JiYgcGF0aCkKKyAgICA6IG1fcGF0aFZhcmlhbnQo
V1RGTW92ZShwYXRoKSkKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0
ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiAoKnBhdGguaXRlcmF0
b3IpLnJlY3QoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5h
bWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlu
bGluZUJveC0+ZnJhbWVSZWN0KCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKIH0KIAotdGVtcGxh
dGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBGbG9hdFJlY3QgQm94PEl0ZXJhdG9yPjo6bG9naWNh
bFJlY3QoKSBjb25zdAoraW5saW5lIEZsb2F0UmVjdCBCb3g6OnJlY3QoKSBjb25zdAogewotICAg
IGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBh
dGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikucmVjdCgpOwotICAgIH07Ci0K
LSAgICBhdXRvIGNvbXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBh
dGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5sb2dpY2FsRnJhbWVS
ZWN0KCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9w
YXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnJlY3Qo
KTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBib29sIEJv
eDxJdGVyYXRvcj46OmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdAoraW5saW5lIEZsb2F0
UmVjdCBCb3g6OmxvZ2ljYWxSZWN0KCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtdKGNv
bnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJikgewotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0
b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAg
ICByZXR1cm4gcGF0aC5sb2dpY2FsUmVjdCgpOworICAgIH0pOwogfQogCi10ZW1wbGF0ZTxjbGFz
cyBJdGVyYXRvcj4gaW5saW5lIGJvb2wgQm94PEl0ZXJhdG9yPjo6ZGlyT3ZlcnJpZGUoKSBjb25z
dAoraW5saW5lIGJvb2wgQm94Ojppc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QKIHsKLSAg
ICBhdXRvIHNpbXBsZSA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJikg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtd
KGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICBy
ZXR1cm4gcGF0aC5pbmxpbmVCb3gtPmRpck92ZXJyaWRlKCk7Ci0gICAgfTsKLQotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4
KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICB9
KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSBib29sIEJveDxJdGVyYXRv
cj46OmlzTGluZUJyZWFrKCkgY29uc3QKK2lubGluZSBib29sIEJveDo6ZGlyT3ZlcnJpZGUoKSBj
b25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNp
bXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICgqcGF0aC5pdGVyYXRvcikuaXNMaW5l
QnJlYWsoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4ID0gW10oY29uc3QgdHlwZW5hbWUg
SXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJldHVybiBwYXRoLmlubGlu
ZUJveC0+aXNMaW5lQnJlYWsoKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
aXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUsIGNvbXBsZXgpOworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0
dXJuIHBhdGguZGlyT3ZlcnJpZGUoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRl
cmF0b3I+IGlubGluZSBjb25zdCBJdGVyYXRvciYgQm94PEl0ZXJhdG9yPjo6aXRlcmF0b3IoKSBj
b25zdAoraW5saW5lIGJvb2wgQm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IEl0ZXJhdG9yJj4oKnRoaXMpOworICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBh
dGguaXNMaW5lQnJlYWsoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+
IGlubGluZSBib29sIFRleHRCb3g8SXRlcmF0b3I+OjpoYXNIeXBoZW4oKSBjb25zdAoraW5saW5l
IGJvb2wgVGV4dEJveDo6aGFzSHlwaGVuKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9IFtd
KGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAgIHJl
dHVybiAoKnBhdGguaXRlcmF0b3IpLmhhc0h5cGhlbigpOwotICAgIH07Ci0KLSAgICBhdXRvIGNv
bXBsZXggPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6Q29tcGxleFBhdGgmIHBhdGgpIHsK
LSAgICAgICAgcmV0dXJuIHBhdGguaW5saW5lQm94LT5oYXNIeXBoZW4oKTsKLSAgICB9OwotCi0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oaXRlcmF0b3IoKS5tX3BhdGhWYXJpYW50LCBzaW1wbGUs
IGNvbXBsZXgpOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFtdKGF1
dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguaGFzSHlwaGVuKCk7CisgICAgfSk7CiB9
CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgU3RyaW5nVmlldyBUZXh0Qm94PEl0
ZXJhdG9yPjo6dGV4dCgpIGNvbnN0CitpbmxpbmUgVGV4dEJveDo6VGV4dEJveChQYXRoVmFyaWFu
dCYmIHBhdGgpCisgICAgOiBCb3goV1RGTW92ZShwYXRoKSkKIHsKLSAgICBhdXRvIHNpbXBsZSA9
IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAg
IHJldHVybiAoKnBhdGguaXRlcmF0b3IpLnRleHQoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21w
bGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0g
ICAgICAgIHJldHVybiBTdHJpbmdWaWV3KHBhdGguaW5saW5lQm94LT5yZW5kZXJlcigpLnRleHQo
KSkuc3Vic3RyaW5nKHBhdGguaW5saW5lQm94LT5zdGFydCgpLCBwYXRoLmlubGluZUJveC0+bGVu
KCkpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihpdGVyYXRvcigpLm1fcGF0
aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9y
PiBpbmxpbmUgdW5zaWduZWQgVGV4dEJveDxJdGVyYXRvcj46OmxvY2FsU3RhcnRPZmZzZXQoKSBj
b25zdAoraW5saW5lIFN0cmluZ1ZpZXcgVGV4dEJveDo6dGV4dCgpIGNvbnN0CiB7Ci0gICAgYXV0
byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRvcjo6U2ltcGxlUGF0aCYgcGF0aCkg
ewotICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS5sb2NhbFN0YXJ0KCk7Ci0gICAgfTsK
LQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4
UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gcGF0aC5pbmxpbmVCb3gtPnN0YXJ0KCk7Ci0g
ICAgfTsKLQotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFu
dCwgc2ltcGxlLCBjb21wbGV4KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJp
YW50LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnRleHQoKTsKKyAgICB9
KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSB1bnNpZ25lZCBUZXh0Qm94
PEl0ZXJhdG9yPjo6bG9jYWxFbmRPZmZzZXQoKSBjb25zdAoraW5saW5lIHVuc2lnbmVkIFRleHRC
b3g6OmxvY2FsU3RhcnRPZmZzZXQoKSBjb25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29u
c3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNpbXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgcmV0dXJu
ICgqcGF0aC5pdGVyYXRvcikubG9jYWxFbmQoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21wbGV4
ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0gICAg
ICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+ZW5kKCk7Ci0gICAgfTsKLQotICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsK
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRoKSB7
CisgICAgICAgIHJldHVybiBwYXRoLmxvY2FsU3RhcnRPZmZzZXQoKTsKKyAgICB9KTsKIH0KIAot
dGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3I+IGlubGluZSB1bnNpZ25lZCBUZXh0Qm94PEl0ZXJhdG9y
Pjo6bGVuZ3RoKCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBUZXh0Qm94Ojpsb2NhbEVuZE9mZnNl
dCgpIGNvbnN0CiB7Ci0gICAgYXV0byBzaW1wbGUgPSBbXShjb25zdCB0eXBlbmFtZSBJdGVyYXRv
cjo6U2ltcGxlUGF0aCYgcGF0aCkgewotICAgICAgICByZXR1cm4gKCpwYXRoLml0ZXJhdG9yKS5l
bmQoKSAtICgqcGF0aC5pdGVyYXRvcikuc3RhcnQoKTsKLSAgICB9OwotCi0gICAgYXV0byBjb21w
bGV4ID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OkNvbXBsZXhQYXRoJiBwYXRoKSB7Ci0g
ICAgICAgIHJldHVybiBwYXRoLmlubGluZUJveC0+bGVuKCk7Ci0gICAgfTsKLQotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4
KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLmxvY2FsRW5kT2Zmc2V0KCk7CisgICAgfSk7CiB9CiAK
LXRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yPiBpbmxpbmUgYm9vbCBUZXh0Qm94PEl0ZXJhdG9yPjo6
aXNMYXN0T25MaW5lKCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBUZXh0Qm94OjpsZW5ndGgoKSBj
b25zdAogewotICAgIGF1dG8gc2ltcGxlID0gW10oY29uc3QgdHlwZW5hbWUgSXRlcmF0b3I6OlNp
bXBsZVBhdGgmIHBhdGgpIHsKLSAgICAgICAgYXV0byBuZXh0ID0gcGF0aC5pdGVyYXRvcjsKLSAg
ICAgICAgKytuZXh0OwotICAgICAgICByZXR1cm4gbmV4dCA9PSBwYXRoLmVuZCB8fCAoKnBhdGgu
aXRlcmF0b3IpLmxpbmVJbmRleCgpICE9ICgqbmV4dCkubGluZUluZGV4KCk7Ci0gICAgfTsKLQot
ICAgIGF1dG8gY29tcGxleCA9IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0
aCYgcGF0aCkgewotICAgICAgICBhdXRvKiBuZXh0ID0gcGF0aC5uZXh0SW5saW5lVGV4dEJveElu
VGV4dE9yZGVyKCk7Ci0gICAgICAgIHJldHVybiAhbmV4dCB8fCAmcGF0aC5pbmxpbmVCb3gtPnJv
b3QoKSAhPSAmbmV4dC0+cm9vdCgpOwotICAgIH07Ci0KLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihpdGVyYXRvcigpLm1fcGF0aFZhcmlhbnQsIHNpbXBsZSwgY29tcGxleCk7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICBy
ZXR1cm4gcGF0aC5sZW5ndGgoKTsKKyAgICB9KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgSXRlcmF0
b3I+IGlubGluZSBib29sIFRleHRCb3g8SXRlcmF0b3I+Ojppc0xhc3QoKSBjb25zdAoraW5saW5l
IGJvb2wgVGV4dEJveDo6aXNMYXN0T25MaW5lKCkgY29uc3QKIHsKLSAgICBhdXRvIHNpbXBsZSA9
IFtdKGNvbnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpTaW1wbGVQYXRoJiBwYXRoKSB7Ci0gICAgICAg
IGF1dG8gbmV4dCA9IHBhdGguaXRlcmF0b3I7Ci0gICAgICAgICsrbmV4dDsKLSAgICAgICAgcmV0
dXJuIG5leHQgPT0gcGF0aC5lbmQ7Ci0gICAgfTsKLQotICAgIGF1dG8gY29tcGxleCA9IFtdKGNv
bnN0IHR5cGVuYW1lIEl0ZXJhdG9yOjpDb21wbGV4UGF0aCYgcGF0aCkgewotICAgICAgICByZXR1
cm4gIXBhdGgubmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpOwotICAgIH07CisgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAg
ICByZXR1cm4gcGF0aC5pc0xhc3RPbkxpbmUoKTsKKyAgICB9KTsKK30KIAotICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGl0ZXJhdG9yKCkubV9wYXRoVmFyaWFudCwgc2ltcGxlLCBjb21wbGV4KTsK
K2lubGluZSBib29sIFRleHRCb3g6OmlzTGFzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4g
cGF0aC5pc0xhc3QoKTsKKyAgICB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvTGluZUxheW91dFRyYXZlcnNhbENvbXBsZXhQYXRoLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsQ29tcGxleFBhdGgu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzY0MzI4OGVjNDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lTGF5b3V0
VHJhdmVyc2FsQ29tcGxleFBhdGguaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
VGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIExpbmVMYXlvdXRUcmF2ZXJzYWwgeworCitjbGFzcyBDb21wbGV4UGF0aCB7Citw
dWJsaWM6CisgICAgQ29tcGxleFBhdGgoY29uc3QgSW5saW5lQm94KiBpbmxpbmVCb3gsIFZlY3Rv
cjxjb25zdCBJbmxpbmVUZXh0Qm94Kj4mJiBzb3J0ZWRJbmxpbmVUZXh0Qm94ZXMgPSB7IH0sIHNp
emVfdCBzb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggPSAwKQorICAgICAgICA6IG1faW5saW5lQm94
KGlubGluZUJveCkKKyAgICAgICAgLCBtX3NvcnRlZElubGluZVRleHRCb3hlcyhXVEZNb3ZlKHNv
cnRlZElubGluZVRleHRCb3hlcykpCisgICAgICAgICwgbV9zb3J0ZWRJbmxpbmVUZXh0Qm94SW5k
ZXgoc29ydGVkSW5saW5lVGV4dEJveEluZGV4KQorICAgIHsgfQorCisgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+ZnJhbWVSZWN0KCk7IH0KKyAgICBGbG9h
dFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveC0+bG9naWNhbEZy
YW1lUmVjdCgpOyB9CisKKyAgICBib29sIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOyB9CisgICAgYm9v
bCBkaXJPdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5kaXJPdmVycmlkZSgp
OyB9CisgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQm94LT5p
c0xpbmVCcmVhaygpOyB9CisKKyAgICBib29sIGhhc0h5cGhlbigpIGNvbnN0IHsgcmV0dXJuIGlu
bGluZVRleHRCb3goKS0+aGFzSHlwaGVuKCk7IH0KKyAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25z
dCB7IHJldHVybiBTdHJpbmdWaWV3KGlubGluZVRleHRCb3goKS0+cmVuZGVyZXIoKS50ZXh0KCkp
LnN1YnN0cmluZyhpbmxpbmVUZXh0Qm94KCktPnN0YXJ0KCksIGlubGluZVRleHRCb3goKS0+bGVu
KCkpOyB9CisgICAgdW5zaWduZWQgbG9jYWxTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlu
bGluZVRleHRCb3goKS0+c3RhcnQoKTsgfQorICAgIHVuc2lnbmVkIGxvY2FsRW5kT2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5lbmQoKTsgfQorICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+bGVuKCk7IH0KKworICAgIGlu
bGluZSBib29sIGlzTGFzdE9uTGluZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvKiBuZXh0
ID0gbmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpOworICAgICAgICByZXR1cm4gIW5leHQg
fHwgJmlubGluZVRleHRCb3goKS0+cm9vdCgpICE9ICZuZXh0LT5yb290KCk7CisgICAgfQorICAg
IGlubGluZSBib29sIGlzTGFzdCgpIGNvbnN0IHsgcmV0dXJuICFuZXh0SW5saW5lVGV4dEJveElu
VGV4dE9yZGVyKCk7IH07CisKKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9y
ZGVyKCkgeyBtX2lubGluZUJveCA9IGlubGluZVRleHRCb3goKS0+bmV4dFRleHRCb3goKTsgfQor
ICAgIHZvaWQgdHJhdmVyc2VOZXh0VGV4dEJveEluVGV4dE9yZGVyKCkKKyAgICB7CisgICAgICAg
IG1faW5saW5lQm94ID0gbmV4dElubGluZVRleHRCb3hJblRleHRPcmRlcigpOworICAgICAgICBp
ZiAoIW1fc29ydGVkSW5saW5lVGV4dEJveGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICsrbV9z
b3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbXBsZXhQYXRoJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3ggPT0gb3Ro
ZXIubV9pbmxpbmVCb3g7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1faW5s
aW5lQm94OyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW5saW5lVGV4dEJveCogaW5saW5lVGV4
dEJveCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZVRleHRCb3g+KG1faW5saW5lQm94
KTsgfQorICAgIGNvbnN0IElubGluZVRleHRCb3gqIG5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3Jk
ZXIoKSBjb25zdDsKKworICAgIGNvbnN0IElubGluZUJveCogbV9pbmxpbmVCb3g7CisgICAgVmVj
dG9yPGNvbnN0IElubGluZVRleHRCb3gqPiBtX3NvcnRlZElubGluZVRleHRCb3hlczsKKyAgICBz
aXplX3QgbV9zb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggeyAwIH07Cit9OworCitpbmxpbmUgY29u
c3QgSW5saW5lVGV4dEJveCogQ29tcGxleFBhdGg6Om5leHRJbmxpbmVUZXh0Qm94SW5UZXh0T3Jk
ZXIoKSBjb25zdAoreworICAgIGlmICghbV9zb3J0ZWRJbmxpbmVUZXh0Qm94ZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmIChtX3NvcnRlZElubGluZVRleHRCb3hJbmRleCArIDEgPCBtX3NvcnRl
ZElubGluZVRleHRCb3hlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV9zb3J0ZWRJbmxp
bmVUZXh0Qm94ZXNbbV9zb3J0ZWRJbmxpbmVUZXh0Qm94SW5kZXggKyAxXTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBpbmxpbmVUZXh0Qm94KCktPm5leHRUZXh0
Qm94KCk7Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9s
aW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9MaW5lTGF5b3V0VHJhdmVyc2FsU2ltcGxlUGF0aC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMTZkNzIxNzYxMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVMYXlvdXRUcmF2ZXJzYWxTaW1wbGVQ
YXRoLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiTGluZUxheW91dFRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRS
ZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGluZUxheW91dFRy
YXZlcnNhbCB7CisKK2NsYXNzIFNpbXBsZVBhdGggeworcHVibGljOgorICAgIFNpbXBsZVBhdGgo
U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIGl0ZXJhdG9yLCBTaW1wbGVM
aW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgZW5kKQorICAgICAgICA6IG1faXRlcmF0
b3IoaXRlcmF0b3IpCisgICAgICAgICwgbV9lbmQoZW5kKQorICAgIHsgfQorCisgICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLnJlY3QoKTsgfQorICAgIEZs
b2F0UmVjdCBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIHJlY3QoKTsgfQorCisgICAgYm9v
bCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJv
b2wgZGlyT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNMaW5l
QnJlYWsoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmlzTGluZUJyZWFrKCk7IH0KKwor
ICAgIGJvb2wgaGFzSHlwaGVuKCkgY29uc3QgeyByZXR1cm4gKCptX2l0ZXJhdG9yKS5oYXNIeXBo
ZW4oKTsgfQorICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuICgqbV9pdGVyYXRv
cikudGV4dCgpOyB9CisgICAgdW5zaWduZWQgbG9jYWxTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuICgqbV9pdGVyYXRvcikubG9jYWxTdGFydCgpOyB9CisgICAgdW5zaWduZWQgbG9jYWxFbmRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmxvY2FsRW5kKCk7IH0KKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiAoKm1faXRlcmF0b3IpLmVuZCgpIC0gKCpt
X2l0ZXJhdG9yKS5zdGFydCgpOyB9CisKKyAgICBib29sIGlzTGFzdE9uTGluZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBhdXRvIG5leHQgPSBtX2l0ZXJhdG9yOworICAgICAgICArK25leHQ7Cisg
ICAgICAgIHJldHVybiBuZXh0ID09IG1fZW5kIHx8ICgqbV9pdGVyYXRvcikubGluZUluZGV4KCkg
IT0gKCpuZXh0KS5saW5lSW5kZXgoKTsKKyAgICB9CisgICAgYm9vbCBpc0xhc3QoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgYXV0byBuZXh0ID0gbV9pdGVyYXRvcjsKKyAgICAgICAgKytuZXh0Owor
ICAgICAgICByZXR1cm4gbmV4dCA9PSBtX2VuZDsKKyAgICB9OworCisgICAgdm9pZCB0cmF2ZXJz
ZU5leHRUZXh0Qm94SW5WaXN1YWxPcmRlcigpCisgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIGNvbnNlY3V0aXZlIHRleHQgcnVucy4KKyAg
ICAgICAgKyttX2l0ZXJhdG9yOworICAgIH0KKyAgICB2b2lkIHRyYXZlcnNlTmV4dFRleHRCb3hJ
blRleHRPcmRlcigpIHsgIHRyYXZlcnNlTmV4dFRleHRCb3hJblZpc3VhbE9yZGVyKCk7IH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVQYXRoJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9pdGVyYXRvciA9PSBvdGhlci5tX2l0ZXJhdG9yOyB9CisgICAgYm9vbCBhdEVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXRlcmF0b3IgPT0gbV9lbmQ7IH0KKworcHJpdmF0ZToKKyAgICBTaW1w
bGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBTaW1w
bGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3IgbV9lbmQ7Cit9OworCit9Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>