<?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>226158</bug_id>
          
          <creation_ts>2021-05-23 13:51:48 -0700</creation_ts>
          <short_desc>Add CheckedPtr</short_desc>
          <delta_ts>2022-01-27 10:25:41 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=227164</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=235723</see_also>
          <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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762956</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-23 13:51:48 -0700</bug_when>
    <thetext>Add a new smart pointer type, CheckedPtr, which increments &amp; decrements the internal counter of an object like RefPtr
but simply release asserts that there is no outstanding pointer (i.e. count is 0) instead of keeping the object alive
when the count is greater than 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762994</commentid>
    <comment_count>1</comment_count>
      <attachid>429494</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-23 18:59:20 -0700</bug_when>
    <thetext>Created attachment 429494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763011</commentid>
    <comment_count>2</comment_count>
      <attachid>429500</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-23 21:32:39 -0700</bug_when>
    <thetext>Created attachment 429500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763012</commentid>
    <comment_count>3</comment_count>
      <attachid>429500</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 21:41:48 -0700</bug_when>
    <thetext>Comment on attachment 429500
Patch

The name CheckedPtr doesn’t seem descriptive enough. But maybe I’ll get used to it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763013</commentid>
    <comment_count>4</comment_count>
      <attachid>429500</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 21:41:49 -0700</bug_when>
    <thetext>Comment on attachment 429500
Patch

The name CheckedPtr doesn’t seem descriptive enough. But maybe I’ll get used to it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763043</commentid>
    <comment_count>5</comment_count>
      <attachid>429508</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-24 00:36:44 -0700</bug_when>
    <thetext>Created attachment 429508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763247</commentid>
    <comment_count>6</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-05-24 14:18:09 -0700</bug_when>
    <thetext>This seems an unique concept. I&apos;d like to know the use case of this.
Which existing classes do you plan to apply CanMakeCheckedPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763251</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-24 14:21:44 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #6)
&gt; This seems an unique concept. I&apos;d like to know the use case of this.
&gt; Which existing classes do you plan to apply CanMakeCheckedPtr?

I admit I am also a bit confused about what this smart pointer does (even after reading the changelog) and how we plan to use this. I am sure I&apos;ll get it once I see it used in actual code but for now it is difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763337</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-24 17:02:12 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; (In reply to Fujii Hironori from comment #6)
&gt; &gt; This seems an unique concept. I&apos;d like to know the use case of this.
&gt; &gt; Which existing classes do you plan to apply CanMakeCheckedPtr?
&gt; 
&gt; I admit I am also a bit confused about what this smart pointer does (even
&gt; after reading the changelog) and how we plan to use this. I am sure I&apos;ll get
&gt; it once I see it used in actual code but for now it is difficult.

CheckedPtr is useful when we have an object which is kept alive by unique_ptr or it&apos;s simply a member of another class. Right now, there is no a way to safely return a pointer to such an object because the object which holds unique_ptr could clear it. In the case of a member class variable, the whole object could be deleted. It&apos;s not trivial to find the &quot;real&quot; owner and ensure that the owner outlives all references to it since unique_ptr and class variable membership could nest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763515</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-25 08:24:52 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #8)
&gt; (In reply to Chris Dumez from comment #7)
&gt; &gt; (In reply to Fujii Hironori from comment #6)
&gt; &gt; &gt; This seems an unique concept. I&apos;d like to know the use case of this.
&gt; &gt; &gt; Which existing classes do you plan to apply CanMakeCheckedPtr?
&gt; &gt; 
&gt; &gt; I admit I am also a bit confused about what this smart pointer does (even
&gt; &gt; after reading the changelog) and how we plan to use this. I am sure I&apos;ll get
&gt; &gt; it once I see it used in actual code but for now it is difficult.
&gt; 
&gt; CheckedPtr is useful when we have an object which is kept alive by
&gt; unique_ptr or it&apos;s simply a member of another class. Right now, there is no
&gt; a way to safely return a pointer to such an object because the object which
&gt; holds unique_ptr could clear it. In the case of a member class variable, the
&gt; whole object could be deleted. It&apos;s not trivial to find the &quot;real&quot; owner and
&gt; ensure that the owner outlives all references to it since unique_ptr and
&gt; class variable membership could nest.

One pattern that already exists in the code is to use UniqueRef&lt;&gt; for the data member, and have the data member forward its RefCounting to its owning class (for example Document &amp; DOMImplementation). I am not sure if it can apply to the cases you had in mind as you said unique_ptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763623</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-05-25 12:37:39 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt;
&gt; One pattern that already exists in the code is to use UniqueRef&lt;&gt; for the
&gt; data member, and have the data member forward its RefCounting to its owning
&gt; class (for example Document &amp; DOMImplementation). I am not sure if it can
&gt; apply to the cases you had in mind as you said unique_ptr.

That works so long as such a forwarding is possible &amp; it&apos;s permissible, which isn&apos;t always the case.

Consider the following scenario.

class A : public RefCounted&lt;A&gt; {
...
   SharedMember&amp; sharedMember() { return m_sharedMember; }
...
private:
    unsigned m_value;
    SharedMember m_sharedMember;
}

class B : public RefCounted&lt;B&gt; {
...
   SharedMember&amp; sharedMember() { return m_sharedMember; }
...
private:
    String m_name;
    String m_value;
    SharedMember m_sharedMember;
}

In this scenario, there isn&apos;t really a way for SharedMember to easily forward ref/deref to A and B without A &amp; B having to subclass SharedMember with their virtual ref/deref overrides.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765254</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-30 13:52:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/78667625&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765898</commentid>
    <comment_count>12</comment_count>
      <attachid>429508</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-02 01:07:50 -0700</bug_when>
    <thetext>Comment on attachment 429508
Patch

Seems like a good idea to me. It can replace existing defensive use of WeakPtr in a number of places (see bug 226369 for example) while having tighter semantics and being more efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765912</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-02 01:35:37 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #12)
&gt; Comment on attachment 429508 [details]
&gt; Patch
&gt; 
&gt; Seems like a good idea to me. It can replace existing defensive use of
&gt; WeakPtr in a number of places (see bug 226369 for example) while having
&gt; tighter semantics and being more efficient.

Yeah, I suspect many uses of WeakPtr can be replaced with CheckedPtr now that we have it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765915</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-02 01:43:17 -0700</bug_when>
    <thetext>Committed r278344 (238376@main): &lt;https://commits.webkit.org/238376@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765916</commentid>
    <comment_count>15</comment_count>
      <attachid>429508</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-02 01:48:48 -0700</bug_when>
    <thetext>Comment on attachment 429508
Patch

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

&gt; Source/WTF/wtf/CheckedPtr.h:207
&gt; +    uint16_t m_count { 0 };

Any particular reason to limit this to a relatively small count?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765917</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-02 01:53:26 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #15)
&gt; Comment on attachment 429508 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429508&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/CheckedPtr.h:207
&gt; &gt; +    uint16_t m_count { 0 };
&gt; 
&gt; Any particular reason to limit this to a relatively small count?

Well, my reasoning is that I&apos;d expect CheckedPtr instance to have a relatively small number of instances since unlike Ref/RefPtr, you&apos;re relying on the correct object lifetime management across multiple objects. I guess it&apos;s possible to have something like Vector&lt;T&gt; where T all refers to the same CheckedPtr object but that sounds more of an edge case than anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765920</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-02 02:20:16 -0700</bug_when>
    <thetext>Atomic version of the base class would also be good to have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765921</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-02 02:38:52 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #17)
&gt; Atomic version of the base class would also be good to have.

Right, also CheckedRef.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429494</attachid>
            <date>2021-05-23 18:59:20 -0700</date>
            <delta_ts>2021-05-23 21:32:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226158-20210523185919.patch</filename>
            <type>text/plain</type>
            <size>29764</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDMxNmNiZjA2ZTBhNjhmZmI3OWZjNWNk
ZTgwY2Q2YjJjNmYzMDM0NjIuLjE4ZjlmZDZmODcwZWQwYjA4OTdmMWQ1NjJlMTc5ZjUxYmIwODc2
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMjEtMDUtMjMgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIENoZWNrZWRQdHIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE1OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5l
dyB0eXBlIG9mIHNtYXJ0IHBvaW50ZXIsIENoZWNrZWRQdHIsIHdoaWNoIGJlaGF2ZXMgbGlrZSBS
ZWZQdHIgYW5kCisgICAgICAgIGxldCBlYWNoIG9iamVjdCBrZWVwIHRyYWNrIG9mIHBvaW50ZXJz
IHBvaW50aW5nIHRvIHRoZSBvYmplY3QuIFVubGlrZSBDaGVja2VkUHRyLCB0aGUgcHVycG9zZSBv
ZgorICAgICAgICB0aGlzIGludGVybmFsIGNvdW50ZXIgaXMgdG8gcmVsZWFzZSBhc3NlcnQgdGhh
dCB0aGVyZSBpcyBubyBvdXRzdGFuZGluZyBwb2ludGVyIGF0IHRoZSB0aW1lCisgICAgICAgIG9m
IGRlc3RydWN0aW9uIGluc3RlYWQgb2Yga2VlcGluZyB0aGUgb2JqZWN0IGFsaXZlIHdoZW4gdGhl
cmUgaXMgb25lLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogd3RmL0NoZWNrZWRQdHIuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQ
dHIpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6Q2hlY2tlZFB0cik6IEFkZGVk
LgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjp+Q2hlY2tlZFB0cik6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpDaGVja2VkUHRyOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6IEFkZGVk
LgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBl
IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6Om9wZXJhdG9yISBjb25z
dCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpnZXQgY29uc3QpOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6Z2V0KTogQWRkZWQuCisgICAgICAgIChXVEY6OkNo
ZWNrZWRQdHI6Om9wZXJhdG9yKiBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2Vk
UHRyOjpvcGVyYXRvciopOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6b3BlcmF0
b3ItPiBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpvcGVyYXRvci0+
KTogQWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6Om9wZXJhdG9yPT0gY29uc3QpOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6b3BlcmF0b3I9KTogQWRkZWQuCisgICAg
ICAgIChXVEY6OkNoZWNrZWRQdHI6OnVuc3BlY2lmaWVkQm9vbFR5cGVJbnN0YW5jZSBjb25zdCk6
IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpyZWZJZk5vdE51bGwpOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6ZGVyZWZJZk5vdE51bGwpOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6bWFrZUNoZWNrZWRQdHIpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6aXMpOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q2FuTWFrZUNoZWNrZWRQdHIpOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6Q2FuTWFrZUNoZWNrZWRQdHI6On5DYW5NYWtlQ2hlY2tlZFB0cik6IEFkZGVkLiBSZWxlYXNl
IGFzc2VydCB0aGF0IG1fcHRyQ291bnQgaXMgMC4KKyAgICAgICAgKFdURjo6Q2FuTWFrZUNoZWNr
ZWRQdHI6OnB0ckNvdW50IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXVEY6OkNhbk1ha2VDaGVj
a2VkUHRyOjppbmNyZW1lbnRQdHJDb3VudCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDYW5NYWtl
Q2hlY2tlZFB0cjo6ZGVjcmVtZW50UHRyQ291bnQpOiBBZGRlZC4gTm90ZSB0aGF0IHdlIGRvbid0
IGRvIGFueXRoaW5nIHdoZW4gbV9wdHJDb3VudAorICAgICAgICBiZWNvbWVzIDAgdW5saWtlIFJl
ZlB0ci4KKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxDaGVja2VkUHRyPFA+Pik6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPENoZWNrZWRQdHI8UD4+OjplbXB0eVZhbHVlKTogQWRk
ZWQuCisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8Q2hlY2tlZFB0cjxQPj46OnBlZWspOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxDaGVja2VkUHRyPFA+Pjo6Y3VzdG9tRGVsZXRl
QnVja2V0KTogQWRkZWQuCisKIDIwMjEtMDUtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbmFtZSB0b0ludGVncmFsVHlwZSB0byBwYXJzZUludGVnZXIgYW5k
IHByZXBhcmUgdG8gdXNlIGl0IHRvIHJlcGxhY2UgYWxsIG91ciBpbnRlZ2VyLXBhcnNpbmcgZnVu
Y3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYWUw
NWU3MDE1ZTU2MmRkZDRkMjYzZGIxM2YwNzQ5NzMxMGNmZTJjLi44ZWNlNTJlNjU2YzBjYWZhMWFl
YjI5M2YyZjg4OTg3OGFhOTZjNTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTUwNSw2ICs1MDUsNyBAQAogCQk5OTZCMTc4NDFFQkE0NDFDMDA3RTEwRUIg
LyogRGVidWdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVi
dWdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI2N0YzRjEyMjI4
RDUzMTAwMzBERTlDIC8qIFdlYWtIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYXNoU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCOTZFOUIzMjRGRjc3QjgwMDE3NTZD
MyAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdFVuaXF1
ZVB0clR1cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQjkxRjUxMjY0OEVB
NEQwMEE1NjIxNyAvKiBDaGVja2VkUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRQdHIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJDNzBGMDQxNzZDMzc5RDAwMTAxREVDIC8q
IEF0b21TdHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBdG9tU3RyaW5nVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ4
RjQwQTE3NkMyQUQ4MDAwMkQ4NjUgLyogQXRvbVN0cmluZ1RhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF0b21TdHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QzY3QzU0
MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTgzLDYgKzk4NCw3IEBACiAJCQkJQThBNDcyNkIx
NTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCiAJCQkJN0IyNzM5RjAyNjMx
NzlDMzAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb24uaCAqLywKIAkJCQk3QjI3MzlERDI2MjRE
QUMzMDA0MEYxODIgLyogQ2hlY2tlZExvY2suaCAqLywKKwkJCQk5QkI5MUY1MTI2NDhFQTREMDBB
NTYyMTcgLyogQ2hlY2tlZFB0ci5oICovLAogCQkJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAv
KiBDbG9ja1R5cGUuY3BwICovLAogCQkJCTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9j
a1R5cGUuaCAqLywKIAkJCQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVy
LmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkUHRyLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9DaGVja2VkUHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVjMmExMTYxZDExMzI0YThjYmVkMmMz
MGZiMzlkMjZjNjExZGM5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0NoZWNr
ZWRQdHIuaApAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvUmF3UHRyVHJhaXRzLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJU
cmFpdHMgPSBSYXdQdHJUcmFpdHM8VD4+CitjbGFzcyBDaGVja2VkUHRyIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIENoZWNrZWRQdHIoKQorICAgICAgICA6
IG1fcHRyKG51bGxwdHIpCisgICAgeyB9CisKKyAgICBDaGVja2VkUHRyKHN0ZDo6bnVsbHB0cl90
KQorICAgICAgICA6IG1fcHRyKG51bGxwdHIpCisgICAgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IENoZWNrZWRQdHIoVCogcHRyKQorICAgICAgICA6IG1fcHRyIHsgcHRyIH0KKyAgICB7CisgICAg
ICAgIHJlZklmTm90TnVsbCgpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgQ2hlY2tlZFB0
cihjb25zdCBDaGVja2VkUHRyJiBvdGhlcikKKyAgICAgICAgOiBtX3B0ciB7IG90aGVyLm1fcHRy
IH0KKyAgICB7CisgICAgICAgIHJlZklmTm90TnVsbCgpOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgQ2hlY2tlZFB0cihDaGVja2VkUHRyJiYgb3RoZXIpCisgICAgICAgIDogbV9wdHIgeyBQ
dHJUcmFpdHM6OmV4Y2hhbmdlKG90aGVyLm1fcHRyLCBudWxscHRyKSB9CisgICAgeyB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIH5DaGVja2VkUHRyKCkKKyAgICB7CisgICAgICAgIGRlcmVmSWZOb3RO
dWxsKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlLCB0eXBlbmFt
ZSBPdGhlclB0clRyYWl0cz4gQ2hlY2tlZFB0cihjb25zdCBDaGVja2VkUHRyPE90aGVyVHlwZSwg
T3RoZXJQdHJUcmFpdHM+JiBvdGhlcikKKyAgICAgICAgOiBtX3B0ciB7IG90aGVyLm1fcHRyIH0K
KyAgICB7CisgICAgICAgIHJlZklmTm90TnVsbCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyVHlwZSwgdHlwZW5hbWUgT3RoZXJQdHJUcmFpdHM+IENoZWNrZWRQdHIoQ2hl
Y2tlZFB0cjxPdGhlclR5cGUsIE90aGVyUHRyVHJhaXRzPiYmIG90aGVyKQorICAgICAgICA6IG1f
cHRyIHsgUHRyVHJhaXRzOjpleGNoYW5nZShvdGhlci5tX3B0ciwgbnVsbHB0cikgfQorICAgIHsg
fQorCisgICAgQ2hlY2tlZFB0cihIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6
IG1fcHRyKFB0clRyYWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgeyB9CisKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gUHRyVHJhaXRz
Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZShtX3B0cik7IH0KKworICAgIC8vIFRoaXMgY29udmVy
c2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3Qg
dG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB1c2luZyBVbnNwZWNpZmllZEJvb2xUeXBlID0g
dm9pZCAoQ2hlY2tlZFB0cjo6KikoKSBjb25zdDsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmQ2hlY2tlZFB0cjo6dW5zcGVjaWZpZWRC
b29sVHlwZUluc3RhbmNlIDogbnVsbHB0cjsgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFQdHJUcmFpdHM6OnVud3JhcChtX3B0cik7IH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gUHRyVHJhaXRz
Ojp1bndyYXAobV9wdHIpOyB9CisgICAgQUxXQVlTX0lOTElORSBUKiBnZXQoKSB7IHJldHVybiBQ
dHJUcmFpdHM6OnVud3JhcChtX3B0cik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFQmIG9w
ZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKHRoaXMpOyByZXR1cm4gKmdldCgpOyB9CisgICAgQUxX
QVlTX0lOTElORSBUJiBvcGVyYXRvciooKSB7IEFTU0VSVCh0aGlzKTsgcmV0dXJuICpnZXQoKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IGdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gZ2V0
KCk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUKiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV9wdHIgPT0gb3RoZXI7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIG9wZXJh
dG9yPT0oVSogb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09IG90aGVyOyB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ2hlY2tlZFB0ciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
cHRyID09IG90aGVyLm1fcHRyOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGUs
IHR5cGVuYW1lIE90aGVyUHRyVHJhaXRzPgorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDaGVj
a2VkUHRyPE90aGVyVHlwZSwgT3RoZXJQdHJUcmFpdHM+JiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9wdHIgPT0gb3RoZXIubV9wdHI7IH0KKworICAgIENoZWNrZWRQdHImIG9wZXJhdG9yPShzdGQ6
Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIGRlcmVmSWZOb3ROdWxsKCk7CisgICAgICAgIG1f
cHRyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIENoZWNr
ZWRQdHImIG9wZXJhdG9yPShUKiBwdHIpCisgICAgeworICAgICAgICBDaGVja2VkUHRyIGNvcHkg
eyBwdHIgfTsKKyAgICAgICAgUHRyVHJhaXRzOjpzd2FwKG1fcHRyLCBjb3B5Lm1fcHRyKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIENoZWNrZWRQdHImIG9wZXJhdG9yPShj
b25zdCBDaGVja2VkUHRyJiBvdGhlcikKKyAgICB7CisgICAgICAgIENoZWNrZWRQdHIgY29weSB7
IG90aGVyIH07CisgICAgICAgIFB0clRyYWl0czo6c3dhcChtX3B0ciwgY29weS5tX3B0cik7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhl
clR5cGUsIHR5cGVuYW1lIE90aGVyUHRyVHJhaXRzPiBDaGVja2VkUHRyJiBvcGVyYXRvcj0oY29u
c3QgQ2hlY2tlZFB0cjxPdGhlclR5cGUsIE90aGVyUHRyVHJhaXRzPiYgb3RoZXIpCisgICAgewor
ICAgICAgICBDaGVja2VkUHRyIGNvcHkgeyBvdGhlciB9OworICAgICAgICBQdHJUcmFpdHM6OnN3
YXAobV9wdHIsIGNvcHkubV9wdHIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgQ2hlY2tlZFB0ciYgb3BlcmF0b3I9KENoZWNrZWRQdHImJiBvdGhlcikKKyAgICB7CisgICAg
ICAgIENoZWNrZWRQdHIgbW92ZWQgeyBXVEZNb3ZlKG90aGVyKSB9OworICAgICAgICBQdHJUcmFp
dHM6OnN3YXAobV9wdHIsIG1vdmVkLm1fcHRyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZSwgdHlwZW5hbWUgT3RoZXJQdHJU
cmFpdHM+IENoZWNrZWRQdHImIG9wZXJhdG9yPShDaGVja2VkUHRyPE90aGVyVHlwZSwgT3RoZXJQ
dHJUcmFpdHM+JiYgb3RoZXIpCisgICAgeworICAgICAgICBDaGVja2VkUHRyIG1vdmVkIHsgV1RG
TW92ZShvdGhlcikgfTsKKyAgICAgICAgUHRyVHJhaXRzOjpzd2FwKG1fcHRyLCBtb3ZlZC5tX3B0
cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3RoZXJUeXBlLCB0eXBlbmFtZSBPdGhlclB0clRyYWl0cz4gZnJpZW5kIGNs
YXNzIENoZWNrZWRQdHI7CisKKyAgICB2b2lkIHVuc3BlY2lmaWVkQm9vbFR5cGVJbnN0YW5jZSgp
IGNvbnN0IHsgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlZklmTm90TnVsbCgpCisgICAg
eworICAgICAgICBpZiAoVCogcHRyID0gUHRyVHJhaXRzOjp1bndyYXAobV9wdHIpOyBMSUtFTFko
cHRyKSkKKyAgICAgICAgICAgIHB0ci0+aW5jcmVtZW50UHRyQ291bnQoKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVyZWZJZk5vdE51bGwoKQorICAgIHsKKyAgICAgICAgaWYg
KFQqIHB0ciA9IFB0clRyYWl0czo6dW53cmFwKG1fcHRyKTsgTElLRUxZKHB0cikpCisgICAgICAg
ICAgICBwdHItPmRlY3JlbWVudFB0ckNvdW50KCk7CisgICAgfQorCisgICAgdHlwZW5hbWUgUHRy
VHJhaXRzOjpTdG9yYWdlVHlwZSBtX3B0cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFB0clRyYWl0cyA9IFJhd1B0clRyYWl0czxUPj4gaW5saW5lIENoZWNrZWRQdHI8VCwg
UHRyVHJhaXRzPiBtYWtlQ2hlY2tlZFB0cihUKiBwb2ludGVyKQoreworICAgIHJldHVybiBwb2lu
dGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHMgPSBSYXdQ
dHJUcmFpdHM8VD4+IGlubGluZSBDaGVja2VkUHRyPFQsIFB0clRyYWl0cz4gbWFrZUNoZWNrZWRQ
dHIoVCYgcmVmZXJlbmNlKQoreworICAgIHJldHVybiAmcmVmZXJlbmNlOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzPgorc3RydWN0IEdldFB0ckhlbHBlcjxD
aGVja2VkUHRyPFQsIFB0clRyYWl0cz4+IHsKKyAgICB0eXBlZGVmIFQqIFB0clR5cGU7CisgICAg
c3RhdGljIFQqIGdldFB0cihjb25zdCBDaGVja2VkUHRyPFQsIFB0clRyYWl0cz4mIHApIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8VCo+KHAuZ2V0KCkpOyB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBJc1NtYXJ0UHRyPENoZWNrZWRQdHI8VCwgVT4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBlLCB0eXBlbmFtZSBBcmdQdHJUcmFp
dHM+CitpbmxpbmUgYm9vbCBpcyhDaGVja2VkUHRyPEFyZ1R5cGUsIEFyZ1B0clRyYWl0cz4mIHNv
dXJjZSkKK3sKKyAgICByZXR1cm4gaXM8RXhwZWN0ZWRUeXBlPihzb3VyY2UuZ2V0KCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFeHBlY3RlZFR5cGUsIHR5cGVuYW1lIEFyZ1R5cGUsIHR5cGVu
YW1lIEFyZ1B0clRyYWl0cz4KK2lubGluZSBib29sIGlzKGNvbnN0IENoZWNrZWRQdHI8QXJnVHlw
ZSwgQXJnUHRyVHJhaXRzPiYgc291cmNlKQoreworICAgIHJldHVybiBpczxFeHBlY3RlZFR5cGU+
KHNvdXJjZS5nZXQoKSk7Cit9CisKK2NsYXNzIENhbk1ha2VDaGVja2VkUHRyIHsKK3B1YmxpYzoK
KyAgICB+Q2FuTWFrZUNoZWNrZWRQdHIoKSB7IFJFTEVBU0VfQVNTRVJUKCFtX2NvdW50KTsgfQor
CisgICAgdWludDE2X3QgcHRyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50OyB9CisgICAg
dm9pZCBpbmNyZW1lbnRQdHJDb3VudCgpIHsgKyttX2NvdW50OyB9CisgICAgdm9pZCBkZWNyZW1l
bnRQdHJDb3VudCgpIHsgQVNTRVJUKG1fY291bnQpOyAtLW1fY291bnQ7IH0KK3ByaXZhdGU6Cisg
ICAgdWludDE2X3QgbV9jb3VudCB7IDAgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFA+IHN0
cnVjdCBIYXNoVHJhaXRzPENoZWNrZWRQdHI8UD4+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENo
ZWNrZWRQdHI8UD4+IHsKKyAgICBzdGF0aWMgUCogZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIG51bGxw
dHI7IH0KKworICAgIHR5cGVkZWYgUCogUGVla1R5cGU7CisgICAgc3RhdGljIFBlZWtUeXBlIHBl
ZWsoY29uc3QgQ2hlY2tlZFB0cjxQPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmdldCgpOyB9Cisg
ICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoUCogdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisKKyAg
ICBzdGF0aWMgdm9pZCBjdXN0b21EZWxldGVCdWNrZXQoQ2hlY2tlZFB0cjxQPiYgdmFsdWUpCisg
ICAgeworICAgICAgICAvLyBTZWUgdW5pcXVlX3B0cidzIGN1c3RvbURlbGV0ZUJ1Y2tldCgpIGZv
ciBhbiBleHBsYW5hdGlvbi4KKyAgICAgICAgQVNTRVJUKCFTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
Q2hlY2tlZFB0cjxQPj46OmlzRGVsZXRlZFZhbHVlKHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFs
dWVUb0JlRGVzdHJveWVkID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxDaGVja2VkUHRyPFA+Pjo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8Q2hlY2tl
ZFB0cjxQPj4gOiBQdHJIYXNoPENoZWNrZWRQdHI8UD4+IHsgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6Q2hlY2tlZFB0cjsKK3VzaW5nIFdURjo6Q2FuTWFrZUNoZWNrZWRQ
dHI7Cit1c2luZyBXVEY6Om1ha2VDaGVja2VkUHRyOworCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjdmMWI0M2Q3YTI0ZThmYTY5NTQ2NGMwYmQ0
MmFjNTg2ODVkOWMwMC4uMzIzMjU1OTRiOGE4YmM2ZDUyMmVjM2QyZDFhNTBlNWU1YjFlYTZjZSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIwIEBACisyMDIxLTA1LTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEFkZCBDaGVja2VkUHRyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjYxNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBiYXNpYyB0ZXN0cy4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRQdHIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkNoZWNrZWRPYmplY3QpOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkRlcml2ZWRDaGVja2VkT2JqZWN0KTogQWRkZWQuCisgICAgICAgIChXVEZfQ2hlY2tl
ZFB0ci5CYXNpYyk6CisgICAgICAgIChXVEZfQ2hlY2tlZFB0ci5EZXJpdmVkQ2xhc3MpOgorICAg
ICAgICAoV1RGX0NoZWNrZWRQdHIuSGFzaFNldCk6CisKIDIwMjEtMDUtMDkgIE15bGVzIEMuIE1h
eGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIFNp
bXBsaWZ5IERpc3BsYXlMaXN0OjpJdGVyYXRvciBwYXJ0IDY6IE1pZ3JhdGUgSXRlbUJ1ZmZlcldy
aXRpbmdDbGllbnQgZnJvbSBJdGVtSGFuZGxlIHRvIGEgY29uc3QgVmFyaWFudCYKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYWE0OTUxMmZmZDNlYWE5NzhlNWY2Y2IwOGQ2M2UwYTUzODJkMWY1
Mi4uNTQzNjMxZmZkNzFhYjMwMzQ0YjJkOTczMmZjMzhhMmZhOThmZDE5MSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTg2OCw4ICs4NjgsOCBAQAogCQk5M0Y1NkRBNzFFNUY5MTc0MDAzRURF
ODQgLyogbGliaWN1Y29yZS5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDODNFMDMzMUQwQTVGMjcwMEZFQkNGMyAvKiBsaWJpY3Vjb3JlLmR5
bGliICovOyB9OwogCQk5M0Y1NkRBOTFFNUY5MTlEMDAzRURFODQgLyogV0tXZWJWaWV3U25hcHNo
b3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y1
NkRBODFFNUY5MTgxMDAzRURFODQgLyogV0tXZWJWaWV3U25hcHNob3QubW0gKi87IH07CiAJCTkz
RjdFODZGMTREQzhFNUMwMEM4NEE5OSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
cmFtZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzRjdFODZFMTREQzhFNUIwMEM4NEE5OSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGcmFtZXNfQnVuZGxlLmNwcCAqLzsgfTsKLQkJOTUwOTVGMjAyNjJGRkZBNTAwMDBE
OTIwIC8qIFNhbXBsZWRQYWdlVG9wQ29sb3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NTA5NUYxRjI2MkZGRkE1MDAwMEQ5MjAgLyogU2FtcGxlZFBh
Z2VUb3BDb2xvci5tbSAqLzsgfTsKIAkJOTNGQ0RCMzQyNjM2MzE1NjAwNDZERDdEIC8qIFNvcnRl
ZEFycmF5TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzRkNEQjMzMjYzNjMxNTYwMDQ2REQ3RCAvKiBTb3J0ZWRBcnJheU1hcC5jcHAgKi87IH07
CisJCTk1MDk1RjIwMjYyRkZGQTUwMDAwRDkyMCAvKiBTYW1wbGVkUGFnZVRvcENvbG9yLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUwOTVGMUYyNjJG
RkZBNTAwMDBEOTIwIC8qIFNhbXBsZWRQYWdlVG9wQ29sb3IubW0gKi87IH07CiAJCTk1MEU0Q0Mx
MjUyRTc1MjQwMDcxNjU5RiAvKiBpT1NTdHlsdXNTdXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUwRTRDQzAyNTJFNzUyMzAwNzE2NTlGIC8q
IGlPU1N0eWx1c1N1cHBvcnQubW0gKi87IH07CiAJCTk1M0FCQjM1MjVDMEQ2ODIwMDRDOEI3MyAv
KiBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTNBQkIzNDI1QzBENjgxMDA0QzhCNzMgLyogUGFnZUV4
dGVuZGVkQmFja2dyb3VuZENvbG9yLm1tICovOyB9OwogCQk5NUE1MjQ5NTI1ODFBMTBEMDA0NjFG
RTkgLyogV0tXZWJWaWV3VGhlbWVDb2xvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBXS1dlYlZpZXdU
aGVtZUNvbG9yLm1tICovOyB9OwpAQCAtODk4LDYgKzg5OCw3IEBACiAJCTlCOTMzMkNFMjMyMEM3
NDUwMDJENTBFOCAvKiBjb2NvYS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjkzMzJDRDIz
MjBDNzNFMDAyRDUwRTggLyogY29jb2Etd3JpdGVyLW1hcmt1cC13aXRoLWxpc3RzLmh0bWwgKi87
IH07CiAJCTlCQUQ3RjNFMjI2OTBGMjAwMEY4REE2NiAvKiBEZWFsbG9jV2ViVmlld0luRXZlbnRM
aXN0ZW5lci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCQUQ3RjNEMjI2OTBGMTQwMEY4REE2NiAvKiBEZWFsbG9jV2ViVmlld0luRXZlbnRMaXN0ZW5l
ci5tbSAqLzsgfTsKIAkJOUJBRTE3N0IyMkUyQkJGQjAwREYzMDk4IC8qIGNvY29hLXdyaXRlci1t
YXJrdXAtd2l0aC1zeXN0ZW0tZm9udHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFFMTc3QTIyRTJCQjZCMDBERjMwOTggLyogY29j
b2Etd3JpdGVyLW1hcmt1cC13aXRoLXN5c3RlbS1mb250cy5odG1sICovOyB9OworCQk5QkJDQTRE
RjI2NUFDQTVCMDBERkU3MjMgLyogQ2hlY2tlZFB0ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkJDQTRERTI2NUFDQTVCMDBERkU3MjMgLyogQ2hl
Y2tlZFB0ci5jcHAgKi87IH07CiAJCTlCQ0I3QzI4MjAxMzA2MDAwMDNFN0MwQyAvKiBQYXN0ZUhU
TUwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkNC
N0MyNjIwMTMwNjAwMDAzRTdDMEMgLyogUGFzdGVIVE1MLm1tICovOyB9OwogCQk5QkNENDExQTIw
NkRCQ0EzMDAxRDcxQkUgLyogbXNvLWxpc3Qtb24taDQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkNENDExOTIwNkQ1RUQ3MDAxRDcx
QkUgLyogbXNvLWxpc3Qtb24taDQuaHRtbCAqLzsgfTsKIAkJOUJENDIzOUExRTA0QkQ5ODAwMjAw
Mzk1IC8qIEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlV2l0aEltYWdlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJENDIzOTkxRTA0
QkQ5ODAwMjAwMzk1IC8qIEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlV2l0aElt
YWdlLm1tICovOyB9OwpAQCAtMjU2NCw4ICsyNTY1LDggQEAKIAkJOTNGNTZEQTgxRTVGOTE4MTAw
M0VERTg0IC8qIFdLV2ViVmlld1NuYXBzaG90Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3U25hcHNob3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRjdFODZCMTREQzhFNEQwMEM4NEE5OSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGcmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNGN0U4NkUxNERDOEU1QjAwQzg0QTk5IC8qIE5ld0ZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dEZyYW1lc19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzX0J1
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk1MDk1RjFGMjYyRkZGQTUw
MDAwRDkyMCAvKiBTYW1wbGVkUGFnZVRvcENvbG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2FtcGxlZFBhZ2VUb3BDb2xvci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTNGQ0RCMzMyNjM2MzE1NjAwNDZERDdEIC8qIFNvcnRlZEFycmF5TWFw
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvcnRlZEFycmF5TWFw
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTUwOTVGMUYyNjJGRkZBNTAwMDBE
OTIwIC8qIFNhbXBsZWRQYWdlVG9wQ29sb3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBTYW1wbGVkUGFnZVRvcENvbG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NTBFNENDMDI1MkU3NTIzMDA3MTY1OUYgLyogaU9TU3R5bHVzU3VwcG9ydC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IGlPU1N0eWx1c1N1cHBv
cnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk1M0FCQjM0MjVDMEQ2ODEwMDRD
OEI3MyAvKiBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk1QTUyNDk0MjU4MUExMEQwMDQ2MUZFOSAvKiBX
S1dlYlZpZXdUaGVtZUNvbG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tXZWJWaWV3VGhlbWVDb2xvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI1OTgsNiArMjU5OSw3IEBACiAJCTlCOTMzMkNEMjMyMEM3M0UwMDJENTBFOCAvKiBjb2Nv
YS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0
aCA9ICJjb2NvYS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTlCQUQ3RjNEMjI2OTBGMTQwMEY4REE2NiAvKiBEZWFsbG9jV2ViVmll
d0luRXZlbnRMaXN0ZW5lci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERlYWxsb2NXZWJWaWV3SW5FdmVudExpc3RlbmVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QkFFMTc3QTIyRTJCQjZCMDBERjMwOTggLyogY29jb2Etd3JpdGVyLW1hcmt1
cC13aXRoLXN5c3RlbS1mb250cy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImNvY29hLXdyaXRlci1tYXJrdXAt
d2l0aC1zeXN0ZW0tZm9udHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlC
QkNBNERFMjY1QUNBNUIwMERGRTcyMyAvKiBDaGVja2VkUHRyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENoZWNrZWRQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkNCN0My
NjIwMTMwNjAwMDAzRTdDMEMgLyogUGFzdGVIVE1MLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
UGFzdGVIVE1MLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkNENDExOTIwNkQ1
RUQ3MDAxRDcxQkUgLyogbXNvLWxpc3Qtb24taDQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJtc28tbGlzdC1v
bi1oNC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJENDIzOTkxRTA0QkQ5
ODAwMjAwMzk1IC8qIEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlV2l0aEltYWdl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXR0cmlidXRlZFN1
YnN0cmluZ0ZvclByb3Bvc2VkUmFuZ2VXaXRoSW1hZ2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00MzgzLDYgKzQzODUsNyBAQAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlC
NCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCTdCMjczOUVFMjYz
MTVFN0QwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgKi8sCiAJCQkJN0IyNzM5
REYyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrVGVzdC5jcHAgKi8sCisJCQkJOUJCQ0E0
REUyNjVBQ0E1QjAwREZFNzIzIC8qIENoZWNrZWRQdHIuY3BwICovLAogCQkJCUUzMDJCREE5MjQw
NEI5MjMwMDg2NTI3NyAvKiBDb21wYWN0UmVmUHRyVHVwbGUuY3BwICovLAogCQkJCTlCMEMwNTE4
MjRGREZCNzAwMEYyRkUzMSAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuY3BwICovLAogCQkJCTBG
MzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgKi8sCkBA
IC01MTQyLDYgKzUxNDUsNyBAQAogCQkJCTdDODNERUEwMUQwQTU5MEMwMEZFQkNGMyAvKiBDaGVj
a2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0IyNzM5RUYy
NjMxNUU3RTAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdCMjczOUUwMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9ja1Rlc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJOUJCQ0E0REYyNjVBQ0E1QjAwREZFNzIzIC8qIENoZWNrZWRQdHIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMwMkJEQUEyNDA0QjkyNDAwODY1Mjc3IC8qIENvbXBh
Y3RSZWZQdHJUdXBsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjBDMDUxOTI0RkRGQjdEMDBG
MkZFMzEgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNldC5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNr
ZWRQdHIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tlZFB0ci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjQ1Njc3NTM5NWMzNDkyZGMxZTA0MGRkYzZkZDU0YmVhNjBiNjNiMAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NoZWNrZWRQdHIu
Y3BwCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8d3RmL0NoZWNrZWRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBDaGVja2VkT2JqZWN0IDogcHVibGljIENhbk1h
a2VDaGVja2VkUHRyIHsKK3B1YmxpYzoKKyAgICBpbnQgc29tZUZ1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gLTc7IH0KK307CisKK2NsYXNzIERlcml2ZWRDaGVja2VkT2JqZWN0IDogcHVibGljIENo
ZWNrZWRPYmplY3QgeworfTsKKworVEVTVChXVEZfQ2hlY2tlZFB0ciwgQmFzaWMpCit7CisgICAg
eworICAgICAgICBDaGVja2VkT2JqZWN0IGNoZWNrZWRPYmplY3Q7CisgICAgICAgIEVYUEVDVF9F
UShjaGVja2VkT2JqZWN0LnB0ckNvdW50KCksIDApOworICAgIH0KKworICAgIHsKKyAgICAgICAg
Q2hlY2tlZE9iamVjdCBjaGVja2VkT2JqZWN0OworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9i
amVjdC5wdHJDb3VudCgpLCAwKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwdHIgPSBt
YWtlQ2hlY2tlZFB0cihjaGVja2VkT2JqZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCEh
cHRyKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShwdHIuZ2V0KCksICZjaGVja2VkT2JqZWN0KTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShwdHItPnNvbWVGdW5jdGlvbigpLCAtNyk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKyAgICAgICAgfQor
ICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAwKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIENoZWNrZWRPYmplY3QgY2hlY2tlZE9iamVjdDsKKyAgICAgICAgRVhQ
RUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMCk7CisKKyAgICAgICAgYXV0byBwdHIg
PSBtYWtlQ2hlY2tlZFB0cihjaGVja2VkT2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFw
dHIpOworICAgICAgICBFWFBFQ1RfRVEocHRyLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAg
ICAgIEVYUEVDVF9FUShwdHItPnNvbWVGdW5jdGlvbigpLCAtNyk7CisgICAgICAgIEVYUEVDVF9F
UShjaGVja2VkT2JqZWN0LnB0ckNvdW50KCksIDEpOworICAgICAgICBwdHIgPSBudWxscHRyOwor
CisgICAgICAgIEVYUEVDVF9GQUxTRSghIXB0cik7CisgICAgICAgIEVYUEVDVF9FUShwdHIuZ2V0
KCksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgp
LCAwKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENoZWNrZWRPYmplY3QgY2hlY2tlZE9iamVj
dDsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMCk7CisKKyAg
ICAgICAgYXV0byBwdHIxID0gbWFrZUNoZWNrZWRQdHIoY2hlY2tlZE9iamVjdCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKCEhcHRyMSk7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLmdldCgpLCAmY2hl
Y2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLT5zb21lRnVuY3Rpb24oKSwgLTcp
OworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKworICAg
ICAgICBjb25zdCBDaGVja2VkUHRyPENoZWNrZWRPYmplY3Q+IHB0cjIgPSBtYWtlQ2hlY2tlZFB0
cigmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhcHRyMik7CisgICAgICAg
IEVYUEVDVF9FUShwdHIyLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9F
UShwdHIyLT5zb21lRnVuY3Rpb24oKSwgLTcpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9i
amVjdC5wdHJDb3VudCgpLCAyKTsKKworICAgICAgICBDaGVja2VkUHRyPENoZWNrZWRPYmplY3Q+
IHB0cjMgPSBwdHIyOworICAgICAgICBFWFBFQ1RfVFJVRSghIXB0cjMpOworICAgICAgICBFWFBF
Q1RfRVEocHRyMy5nZXQoKSwgJmNoZWNrZWRPYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEoY2hl
Y2tlZE9iamVjdC5wdHJDb3VudCgpLCAzKTsKKworICAgICAgICBwdHIxID0gbnVsbHB0cjsKKyAg
ICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMik7CisgICAgICAgIEVY
UEVDVF9FUShwdHIxLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjIuZ2V0
KCksICZjaGVja2VkT2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjMuZ2V0KCksICZjaGVj
a2VkT2JqZWN0KTsKKworICAgICAgICBwdHIxID0gV1RGTW92ZShwdHIzKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMik7CisgICAgICAgIEVYUEVDVF9FUShw
dHIxLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIyLmdldCgp
LCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIzLmdldCgpLCBudWxscHRy
KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0NoZWNrZWRQdHIsIERlcml2ZWRDbGFzcykKK3sKKyAg
ICB7CisgICAgICAgIERlcml2ZWRDaGVja2VkT2JqZWN0IGNoZWNrZWRPYmplY3Q7CisgICAgICAg
IEVYUEVDVF9FUShjaGVja2VkT2JqZWN0LnB0ckNvdW50KCksIDApOworICAgIH0KKworICAgIHsK
KyAgICAgICAgRGVyaXZlZENoZWNrZWRPYmplY3QgY2hlY2tlZE9iamVjdDsKKyAgICAgICAgRVhQ
RUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMCk7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8gcHRyID0gbWFrZUNoZWNrZWRQdHIoY2hlY2tlZE9iamVjdCk7CisgICAgICAgICAg
ICBFWFBFQ1RfVFJVRSghIXB0cik7CisgICAgICAgICAgICBFWFBFQ1RfRVEocHRyLmdldCgpLCAm
Y2hlY2tlZE9iamVjdCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEocHRyLT5zb21lRnVuY3Rpb24o
KSwgLTcpOworICAgICAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwg
MSk7CisgICAgICAgIH0KKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQo
KSwgMCk7CisgICAgfQorCisgICAgeworICAgICAgICBDaGVja2VkT2JqZWN0IGNoZWNrZWRPYmpl
Y3Q7CisgICAgICAgIEVYUEVDVF9FUShjaGVja2VkT2JqZWN0LnB0ckNvdW50KCksIDApOworCisg
ICAgICAgIENoZWNrZWRQdHI8Q2hlY2tlZE9iamVjdD4gcHRyID0gbWFrZUNoZWNrZWRQdHIoY2hl
Y2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhcHRyKTsKKyAgICAgICAgRVhQRUNU
X0VRKHB0ci5nZXQoKSwgJmNoZWNrZWRPYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEocHRyLT5z
b21lRnVuY3Rpb24oKSwgLTcpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJD
b3VudCgpLCAxKTsKKyAgICAgICAgcHRyID0gbnVsbHB0cjsKKworICAgICAgICBFWFBFQ1RfRkFM
U0UoISFwdHIpOworICAgICAgICBFWFBFQ1RfRVEocHRyLmdldCgpLCBudWxscHRyKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMCk7CisgICAgfQorCisgICAg
eworICAgICAgICBEZXJpdmVkQ2hlY2tlZE9iamVjdCBjaGVja2VkT2JqZWN0OworICAgICAgICBF
WFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAwKTsKKworICAgICAgICBDaGVja2Vk
UHRyPERlcml2ZWRDaGVja2VkT2JqZWN0PiBwdHIxID0gbWFrZUNoZWNrZWRQdHIoY2hlY2tlZE9i
amVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhcHRyMSk7CisgICAgICAgIEVYUEVDVF9FUShw
dHIxLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLT5zb21l
RnVuY3Rpb24oKSwgLTcpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3Vu
dCgpLCAxKTsKKworICAgICAgICBjb25zdCBDaGVja2VkUHRyPENoZWNrZWRPYmplY3Q+IHB0cjIg
PSBwdHIxOworICAgICAgICBFWFBFQ1RfVFJVRSghIXB0cjIpOworICAgICAgICBFWFBFQ1RfRVEo
cHRyMi5nZXQoKSwgJmNoZWNrZWRPYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEocHRyMi0+c29t
ZUZ1bmN0aW9uKCksIC03KTsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291
bnQoKSwgMik7CisKKyAgICAgICAgQ2hlY2tlZFB0cjxDaGVja2VkT2JqZWN0PiBwdHIzID0gcHRy
MTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFwdHIzKTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjMu
Z2V0KCksICZjaGVja2VkT2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3Qu
cHRyQ291bnQoKSwgMyk7CisKKyAgICAgICAgcHRyMSA9IG51bGxwdHI7CisgICAgICAgIEVYUEVD
VF9FUShjaGVja2VkT2JqZWN0LnB0ckNvdW50KCksIDIpOworICAgICAgICBFWFBFQ1RfRVEocHRy
MS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShwdHIyLmdldCgpLCAmY2hlY2tl
ZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIzLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7
CisKKyAgICAgICAgQ2hlY2tlZFB0cjxDaGVja2VkT2JqZWN0PiBwdHI0ID0gV1RGTW92ZShwdHIz
KTsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMik7CisgICAg
ICAgIEVYUEVDVF9FUShwdHIxLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHB0
cjIuZ2V0KCksICZjaGVja2VkT2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjMuZ2V0KCks
IG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEocHRyNC5nZXQoKSwgJmNoZWNrZWRPYmplY3Qp
OworICAgIH0KK30KKworVEVTVChXVEZfQ2hlY2tlZFB0ciwgSGFzaFNldCkKK3sKKyAgICB7Cisg
ICAgICAgIENoZWNrZWRPYmplY3QgY2hlY2tlZE9iamVjdDsKKyAgICAgICAgRVhQRUNUX0VRKGNo
ZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMCk7CisKKyAgICAgICAgYXV0byBwdHIgPSBtYWtlQ2hl
Y2tlZFB0cihjaGVja2VkT2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHB0ci5nZXQoKSwgJmNo
ZWNrZWRPYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgp
LCAxKTsKKworICAgICAgICBIYXNoU2V0PENoZWNrZWRQdHI8Q2hlY2tlZE9iamVjdD4+IHNldDsK
KyAgICAgICAgc2V0LmFkZChwdHIpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5w
dHJDb3VudCgpLCAyKTsKKworICAgICAgICBwdHIgPSBudWxscHRyOworICAgICAgICBFWFBFQ1Rf
RVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IENoZWNrZWRPYmplY3Qgb2JqZWN0MTsKKyAgICAgICAgRGVyaXZlZENoZWNrZWRPYmplY3Qgb2Jq
ZWN0MjsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdDEucHRyQ291bnQoKSwgMCk7CisgICAgICAg
IEVYUEVDVF9FUShvYmplY3QyLnB0ckNvdW50KCksIDApOworCisgICAgICAgIEhhc2hTZXQ8Q2hl
Y2tlZFB0cjxDaGVja2VkT2JqZWN0Pj4gc2V0OworICAgICAgICBzZXQuYWRkKCZvYmplY3QxKTsK
KyAgICAgICAgRVhQRUNUX0VRKG9iamVjdDEucHRyQ291bnQoKSwgMSk7CisgICAgICAgIEVYUEVD
VF9FUShvYmplY3QyLnB0ckNvdW50KCksIDApOworCisgICAgICAgIHNldC5hZGQoJm9iamVjdDEp
OworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0MS5wdHJDb3VudCgpLCAxKTsKKyAgICAgICAgRVhQ
RUNUX0VRKG9iamVjdDIucHRyQ291bnQoKSwgMCk7CisKKyAgICAgICAgQ2hlY2tlZFB0cjxEZXJp
dmVkQ2hlY2tlZE9iamVjdD4gcHRyIHsgJm9iamVjdDIgfTsKKyAgICAgICAgc2V0LmFkZChwdHIp
OworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0MS5wdHJDb3VudCgpLCAxKTsKKyAgICAgICAgRVhQ
RUNUX0VRKG9iamVjdDIucHRyQ291bnQoKSwgMik7CisgICAgICAgIHB0ciA9IG51bGxwdHI7CisK
KyAgICAgICAgRVhQRUNUX0VRKG9iamVjdDEucHRyQ291bnQoKSwgMSk7CisgICAgICAgIEVYUEVD
VF9FUShvYmplY3QyLnB0ckNvdW50KCksIDEpOworCisgICAgICAgIHNldC5yZW1vdmUoJm9iamVj
dDEpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0MS5wdHJDb3VudCgpLCAwKTsKKyAgICAgICAg
RVhQRUNUX0VRKG9iamVjdDIucHRyQ291bnQoKSwgMSk7CisgICAgfQorCisgICAgeworICAgICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENoZWNrZWRPYmplY3Q+PiBvYmplY3RzOworICAgICAg
ICBvYmplY3RzLmFwcGVuZChtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxDaGVja2Vk
T2JqZWN0PigpKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdHNbMF0tPnB0ckNvdW50KCksIDAp
OworCisgICAgICAgIEhhc2hTZXQ8Q2hlY2tlZFB0cjxDaGVja2VkT2JqZWN0Pj4gc2V0OworICAg
ICAgICBzZXQuYWRkKG9iamVjdHNbMF0uZ2V0KCkpOworICAgICAgICBhdXRvIGluaXRpYWxDYXBh
Y2l0eSA9IHNldC5jYXBhY2l0eSgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHNl
dC5jYXBhY2l0eSgpID09IGluaXRpYWxDYXBhY2l0eTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
aSAlIDIpCisgICAgICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQobWFrZVVuaXF1ZVdpdGhvdXRG
YXN0TWFsbG9jQ2hlY2s8RGVyaXZlZENoZWNrZWRPYmplY3Q+KCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKG1ha2VVbmlxdWVXaXRob3V0RmFzdE1h
bGxvY0NoZWNrPENoZWNrZWRPYmplY3Q+KCkpOworICAgICAgICAgICAgc2V0LmFkZChvYmplY3Rz
Lmxhc3QoKS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIG9iamVjdCA6
IG9iamVjdHMpCisgICAgICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5wdHJDb3VudCgpLCAxKTsK
KworICAgICAgICBhdXRvIHNldFZlY3RvciA9IFdURjo6Y29weVRvVmVjdG9yKHNldCk7CisKKyAg
ICAgICAgZm9yIChhdXRvJiBvYmplY3QgOiBvYmplY3RzKQorICAgICAgICAgICAgRVhQRUNUX0VR
KG9iamVjdC0+cHRyQ291bnQoKSwgMik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429500</attachid>
            <date>2021-05-23 21:32:39 -0700</date>
            <delta_ts>2021-05-24 00:36:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226158-20210523213238.patch</filename>
            <type>text/plain</type>
            <size>11142</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc5NDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDIxLTA1LTIzICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBDaGVja2VkUHRyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBu
ZXcgdHlwZSBvZiBzbWFydCBwb2ludGVyLCBDaGVja2VkUHRyLCB3aGljaCBiZWhhdmVzIGxpa2Ug
UmVmUHRyIGFuZAorICAgICAgICBsZXQgZWFjaCBvYmplY3Qga2VlcCB0cmFjayBvZiBwb2ludGVy
cyBwb2ludGluZyB0byB0aGUgb2JqZWN0LiBVbmxpa2UgQ2hlY2tlZFB0ciwgdGhlIHB1cnBvc2Ug
b2YKKyAgICAgICAgdGhpcyBpbnRlcm5hbCBjb3VudGVyIGlzIHRvIHJlbGVhc2UgYXNzZXJ0IHRo
YXQgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgcG9pbnRlciBhdCB0aGUgdGltZQorICAgICAgICBv
ZiBkZXN0cnVjdGlvbiBpbnN0ZWFkIG9mIGtlZXBpbmcgdGhlIG9iamVjdCBhbGl2ZSB3aGVuIHRo
ZXJlIGlzIG9uZS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9DaGVja2VkUHRyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2Vk
UHRyKTogQWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6OkNoZWNrZWRQdHIpOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6fkNoZWNrZWRQdHIpOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6Q2hlY2tlZFB0cjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpvcGVyYXRvciEgY29u
c3QpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6Z2V0IGNvbnN0KTogQWRkZWQu
CisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6OmdldCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpD
aGVja2VkUHRyOjpvcGVyYXRvciogY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tl
ZFB0cjo6b3BlcmF0b3IqKTogQWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6Om9wZXJh
dG9yLT4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6b3BlcmF0b3It
Pik6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpvcGVyYXRvcj09IGNvbnN0KTog
QWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6Om9wZXJhdG9yPSk6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpDaGVja2VkUHRyOjp1bnNwZWNpZmllZEJvb2xUeXBlSW5zdGFuY2UgY29uc3Qp
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6cmVmSWZOb3ROdWxsKTogQWRkZWQu
CisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6OmRlcmVmSWZOb3ROdWxsKTogQWRkZWQuCisgICAg
ICAgIChXVEY6Om1ha2VDaGVja2VkUHRyKTogQWRkZWQuCisgICAgICAgIChXVEY6OmlzKTogQWRk
ZWQuCisgICAgICAgIChXVEY6OkNhbk1ha2VDaGVja2VkUHRyKTogQWRkZWQuCisgICAgICAgIChX
VEY6OkNhbk1ha2VDaGVja2VkUHRyOjp+Q2FuTWFrZUNoZWNrZWRQdHIpOiBBZGRlZC4gUmVsZWFz
ZSBhc3NlcnQgdGhhdCBtX3B0ckNvdW50IGlzIDAuCisgICAgICAgIChXVEY6OkNhbk1ha2VDaGVj
a2VkUHRyOjpwdHJDb3VudCBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDYW5NYWtlQ2hl
Y2tlZFB0cjo6aW5jcmVtZW50UHRyQ291bnQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2FuTWFr
ZUNoZWNrZWRQdHI6OmRlY3JlbWVudFB0ckNvdW50KTogQWRkZWQuIE5vdGUgdGhhdCB3ZSBkb24n
dCBkbyBhbnl0aGluZyB3aGVuIG1fcHRyQ291bnQKKyAgICAgICAgYmVjb21lcyAwIHVubGlrZSBS
ZWZQdHIuCisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8Q2hlY2tlZFB0cjxQPj4pOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxDaGVja2VkUHRyPFA+Pjo6ZW1wdHlWYWx1ZSk6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPENoZWNrZWRQdHI8UD4+OjpwZWVrKTogQWRk
ZWQuCisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8Q2hlY2tlZFB0cjxQPj46OmN1c3RvbURlbGV0
ZUJ1Y2tldCk6IEFkZGVkLgorCiAyMDIxLTA1LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgRU5BQkxFKE1BU01fUFJPQkUpIGZsYWcuCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3Nzk0MCkK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUwOSw2ICs1MDksNyBAQAogCQk5OTZCMTc4NDFFQkE0NDFDMDA3RTEwRUIgLyogRGVi
dWdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdVdGls
aXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI2N0YzRjEyMjI4RDUzMTAw
MzBERTlDIC8qIFdlYWtIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYXNoU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCOTZFOUIzMjRGRjc3QjgwMDE3NTZDMyAvKiBD
b21wYWN0VW5pcXVlUHRyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdFVuaXF1ZVB0clR1
cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQjkxRjUxMjY0OEVBNEQwMEE1
NjIxNyAvKiBDaGVja2VkUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRQdHIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJDNzBGMDQxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21T
dHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9t
U3RyaW5nVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ4RjQwQTE3
NkMyQUQ4MDAwMkQ4NjUgLyogQXRvbVN0cmluZ1RhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21T
dHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0
OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTg3LDYgKzk4OCw3IEBACiAJCQkJQThBNDcyNkIxNTFBODI1
QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCiAJCQkJN0IyNzM5RjAyNjMxNzlDMzAw
NDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb24uaCAqLywKIAkJCQk3QjI3MzlERDI2MjREQUMzMDA0
MEYxODIgLyogQ2hlY2tlZExvY2suaCAqLywKKwkJCQk5QkI5MUY1MTI2NDhFQTREMDBBNTYyMTcg
LyogQ2hlY2tlZFB0ci5oICovLAogCQkJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9j
a1R5cGUuY3BwICovLAogCQkJCTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUu
aCAqLywKIAkJCQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8s
CkBAIC0xMDk3LDYgKzEwOTksOCBAQAogCQkJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBM
YW5ndWFnZS5jcHAgKi8sCiAJCQkJQzJCQ0ZDM0YxRjYxRDEzMDAwQzkyMjJDIC8qIExhbmd1YWdl
LmggKi8sCiAJCQkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLywK
KwkJCQkzMzdCMkQ2ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZEludGVn
ZXJTZXQuY3BwICovLAorCQkJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldC5oICovLAogCQkJCUE3MERBMDgzMTc5OUYwNEQwMDUyOUE5QiAv
KiBMaXN0RHVtcC5oICovLAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oICovLAogCQkJCTBGRjRCNEM0MUU4ODkzOUMwMERCQkU4NiAvKiBMaXZlbmVzcy5oICov
LApAQCAtMTI1MSw4ICsxMjU1LDYgQEAKIAkJCQlBOEE0NzMwQzE1MUE4MjVCMDA0MTIzRkYgLyog
U2l6ZUxpbWl0cy5jcHAgKi8sCiAJCQkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxs
U2V0LmNwcCAqLywKIAkJCQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQgLyogU21hbGxTZXQuaCAq
LywKLQkJCQkzMzdCMkQ2ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuY3BwICovLAotCQkJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oICovLAogCQkJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1
NCAvKiBTb2Z0TGlua2luZy5oICovLAogCQkJCTkzMTU2QzhEMjYyQzk4MjIwMEVBRTI3QiAvKiBT
b3J0ZWRBcnJheU1hcC5oICovLAogCQkJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFu
bmluZ1RyZWUuaCAqLywKQEAgLTE3MDcsNyArMTcwOSw2IEBACiAJCQkJQThBNDczQjUxNTFBODI1
QjAwNDEyM0ZGIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAqLywKIAkJCQkxQTFEOEI5RTE3
MzE4Nzk4MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkzMzdCMkQ2QTI2NTQ2RUIzMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMEJBOTAxRTc4NzA4RTAwMkNBODQ3
IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNDRDg5MkExNUMwMzkw
MjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xNzE4LDYgKzE3MTksNyBAQAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5n
dWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkJDRkM0MjFGNjFENjE2MDBDOTIyMkMgLyog
TGFuZ3VhZ2VDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzUwM0JFNjIzQUFFMEFFMDA3MkU2
NkIgLyogTGFuZ3VhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMzN0IyRDZBMjY1NDZF
QjMwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0I4RTQxRDI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQ
b29sSUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzU1MUY2MjFGM0YwMEM5MjIyQyAv
KiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQw
MEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTQwKQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMDUtMjMgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIENoZWNrZWRQdHIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE1OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGJh
c2ljIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
Q2hlY2tlZFB0ci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q2hlY2tlZE9i
amVjdCk6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyaXZlZENoZWNrZWRPYmpl
Y3QpOiBBZGRlZC4KKyAgICAgICAgKFdURl9DaGVja2VkUHRyLkJhc2ljKToKKyAgICAgICAgKFdU
Rl9DaGVja2VkUHRyLkRlcml2ZWRDbGFzcyk6CisgICAgICAgIChXVEZfQ2hlY2tlZFB0ci5IYXNo
U2V0KToKKwogMjAyMS0wNS0yMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQ29udmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNz
IHdyYXBwaW5nIGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cg
cG9ydHMsIGV0Yy4pCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc3OTQw
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw2ICs5MDUsNyBAQAogCQk5QjkzMzJDRTIz
MjBDNzQ1MDAyRDUwRTggLyogY29jb2Etd3JpdGVyLW1hcmt1cC13aXRoLWxpc3RzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI5MzMy
Q0QyMzIwQzczRTAwMkQ1MEU4IC8qIGNvY29hLXdyaXRlci1tYXJrdXAtd2l0aC1saXN0cy5odG1s
ICovOyB9OwogCQk5QkFEN0YzRTIyNjkwRjIwMDBGOERBNjYgLyogRGVhbGxvY1dlYlZpZXdJbkV2
ZW50TGlzdGVuZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QkFEN0YzRDIyNjkwRjE0MDBGOERBNjYgLyogRGVhbGxvY1dlYlZpZXdJbkV2ZW50TGlz
dGVuZXIubW0gKi87IH07CiAJCTlCQUUxNzdCMjJFMkJCRkIwMERGMzA5OCAvKiBjb2NvYS13cml0
ZXItbWFya3VwLXdpdGgtc3lzdGVtLWZvbnRzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBRTE3N0EyMkUyQkI2QjAwREYzMDk4IC8q
IGNvY29hLXdyaXRlci1tYXJrdXAtd2l0aC1zeXN0ZW0tZm9udHMuaHRtbCAqLzsgfTsKKwkJOUJC
Q0E0REYyNjVBQ0E1QjAwREZFNzIzIC8qIENoZWNrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJCQ0E0REUyNjVBQ0E1QjAwREZFNzIzIC8q
IENoZWNrZWRQdHIuY3BwICovOyB9OwogCQk5QkNCN0MyODIwMTMwNjAwMDAzRTdDMEMgLyogUGFz
dGVIVE1MLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUJDQjdDMjYyMDEzMDYwMDAwM0U3QzBDIC8qIFBhc3RlSFRNTC5tbSAqLzsgfTsKIAkJOUJDRDQx
MUEyMDZEQkNBMzAwMUQ3MUJFIC8qIG1zby1saXN0LW9uLWg0Lmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJDRDQxMTkyMDZENUVENzAw
MUQ3MUJFIC8qIG1zby1saXN0LW9uLWg0Lmh0bWwgKi87IH07CiAJCTlCRDQyMzlBMUUwNEJEOTgw
MDIwMDM5NSAvKiBBdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZVdpdGhJbWFnZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDQyMzk5
MUUwNEJEOTgwMDIwMDM5NSAvKiBBdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZVdp
dGhJbWFnZS5tbSAqLzsgfTsKQEAgLTI2MTcsNiArMjYxOCw3IEBACiAJCTlCOTMzMkNEMjMyMEM3
M0UwMDJENTBFOCAvKiBjb2NvYS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMuaHRtbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJjb2NvYS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMuaHRt
bCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQUQ3RjNEMjI2OTBGMTQwMEY4REE2
NiAvKiBEZWFsbG9jV2ViVmlld0luRXZlbnRMaXN0ZW5lci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERlYWxsb2NXZWJWaWV3SW5FdmVudExpc3RlbmVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkFFMTc3QTIyRTJCQjZCMDBERjMwOTggLyog
Y29jb2Etd3JpdGVyLW1hcmt1cC13aXRoLXN5c3RlbS1mb250cy5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImNv
Y29hLXdyaXRlci1tYXJrdXAtd2l0aC1zeXN0ZW0tZm9udHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlCQkNBNERFMjY1QUNBNUIwMERGRTcyMyAvKiBDaGVja2VkUHRyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoZWNrZWRQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QkNCN0MyNjIwMTMwNjAwMDAzRTdDMEMgLyogUGFzdGVIVE1MLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gUGFzdGVIVE1MLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5QkNENDExOTIwNkQ1RUQ3MDAxRDcxQkUgLyogbXNvLWxpc3Qtb24taDQuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9ICJtc28tbGlzdC1vbi1oNC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOUJENDIzOTkxRTA0QkQ5ODAwMjAwMzk1IC8qIEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9w
b3NlZFJhbmdlV2l0aEltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFuZ2VXaXRoSW1hZ2UubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDE0LDYgKzQ0MTYsNyBAQAogCQkJCUE3QTk2
NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICov
LAogCQkJCTdCMjczOUVFMjYzMTVFN0QwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uVGVzdC5j
cHAgKi8sCiAJCQkJN0IyNzM5REYyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrVGVzdC5j
cHAgKi8sCisJCQkJOUJCQ0E0REUyNjVBQ0E1QjAwREZFNzIzIC8qIENoZWNrZWRQdHIuY3BwICov
LAogCQkJCUUzMDJCREE5MjQwNEI5MjMwMDg2NTI3NyAvKiBDb21wYWN0UmVmUHRyVHVwbGUuY3Bw
ICovLAogCQkJCTlCMEMwNTE4MjRGREZCNzAwMEYyRkUzMSAvKiBDb21wYWN0VW5pcXVlUHRyVHVw
bGUuY3BwICovLAogCQkJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgKi8sCkBAIC01MTc4LDYgKzUxODEsNyBAQAogCQkJCTdDODNERUEwMUQwQTU5
MEMwMEZFQkNGMyAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0IyNzM5RUYyNjMxNUU3RTAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdCMjczOUUwMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVj
a2VkTG9ja1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUJCQ0E0REYyNjVBQ0E1QjAwREZF
NzIzIC8qIENoZWNrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMwMkJEQUEyNDA0Qjky
NDAwODY1Mjc3IC8qIENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
QjBDMDUxOTI0RkRGQjdEMDBGMkZFMzEgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRy
SGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429508</attachid>
            <date>2021-05-24 00:36:44 -0700</date>
            <delta_ts>2021-06-02 01:07:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226158-20210524003643.patch</filename>
            <type>text/plain</type>
            <size>27919</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzc5NDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDIxLTA1LTIzICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBDaGVja2VkUHRyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBu
ZXcgdHlwZSBvZiBzbWFydCBwb2ludGVyLCBDaGVja2VkUHRyLCB3aGljaCBiZWhhdmVzIGxpa2Ug
UmVmUHRyIGFuZAorICAgICAgICBsZXQgZWFjaCBvYmplY3Qga2VlcCB0cmFjayBvZiBwb2ludGVy
cyBwb2ludGluZyB0byB0aGUgb2JqZWN0LiBVbmxpa2UgQ2hlY2tlZFB0ciwgdGhlIHB1cnBvc2Ug
b2YKKyAgICAgICAgdGhpcyBpbnRlcm5hbCBjb3VudGVyIGlzIHRvIHJlbGVhc2UgYXNzZXJ0IHRo
YXQgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcgcG9pbnRlciBhdCB0aGUgdGltZQorICAgICAgICBv
ZiBkZXN0cnVjdGlvbiBpbnN0ZWFkIG9mIGtlZXBpbmcgdGhlIG9iamVjdCBhbGl2ZSB3aGVuIHRo
ZXJlIGlzIG9uZS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9DaGVja2VkUHRyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2Vk
UHRyKTogQWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6OkNoZWNrZWRQdHIpOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6fkNoZWNrZWRQdHIpOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6Q2hlY2tlZFB0cjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpvcGVyYXRvciEgY29u
c3QpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6Z2V0IGNvbnN0KTogQWRkZWQu
CisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6OmdldCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpD
aGVja2VkUHRyOjpvcGVyYXRvciogY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tl
ZFB0cjo6b3BlcmF0b3IqKTogQWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6Om9wZXJh
dG9yLT4gY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6b3BlcmF0b3It
Pik6IEFkZGVkLgorICAgICAgICAoV1RGOjpDaGVja2VkUHRyOjpvcGVyYXRvcj09IGNvbnN0KTog
QWRkZWQuCisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6Om9wZXJhdG9yPSk6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpDaGVja2VkUHRyOjp1bnNwZWNpZmllZEJvb2xUeXBlSW5zdGFuY2UgY29uc3Qp
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2hlY2tlZFB0cjo6cmVmSWZOb3ROdWxsKTogQWRkZWQu
CisgICAgICAgIChXVEY6OkNoZWNrZWRQdHI6OmRlcmVmSWZOb3ROdWxsKTogQWRkZWQuCisgICAg
ICAgIChXVEY6Om1ha2VDaGVja2VkUHRyKTogQWRkZWQuCisgICAgICAgIChXVEY6OmlzKTogQWRk
ZWQuCisgICAgICAgIChXVEY6OkNhbk1ha2VDaGVja2VkUHRyKTogQWRkZWQuCisgICAgICAgIChX
VEY6OkNhbk1ha2VDaGVja2VkUHRyOjp+Q2FuTWFrZUNoZWNrZWRQdHIpOiBBZGRlZC4gUmVsZWFz
ZSBhc3NlcnQgdGhhdCBtX3B0ckNvdW50IGlzIDAuCisgICAgICAgIChXVEY6OkNhbk1ha2VDaGVj
a2VkUHRyOjpwdHJDb3VudCBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpDYW5NYWtlQ2hl
Y2tlZFB0cjo6aW5jcmVtZW50UHRyQ291bnQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q2FuTWFr
ZUNoZWNrZWRQdHI6OmRlY3JlbWVudFB0ckNvdW50KTogQWRkZWQuIE5vdGUgdGhhdCB3ZSBkb24n
dCBkbyBhbnl0aGluZyB3aGVuIG1fcHRyQ291bnQKKyAgICAgICAgYmVjb21lcyAwIHVubGlrZSBS
ZWZQdHIuCisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8Q2hlY2tlZFB0cjxQPj4pOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxDaGVja2VkUHRyPFA+Pjo6ZW1wdHlWYWx1ZSk6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpIYXNoVHJhaXRzPENoZWNrZWRQdHI8UD4+OjpwZWVrKTogQWRk
ZWQuCisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8Q2hlY2tlZFB0cjxQPj46OmN1c3RvbURlbGV0
ZUJ1Y2tldCk6IEFkZGVkLgorCiAyMDIxLTA1LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgRU5BQkxFKE1BU01fUFJPQkUpIGZsYWcuCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3Nzk0MCkK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUwOSw2ICs1MDksNyBAQAogCQk5OTZCMTc4NDFFQkE0NDFDMDA3RTEwRUIgLyogRGVi
dWdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdVdGls
aXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUI2N0YzRjEyMjI4RDUzMTAw
MzBERTlDIC8qIFdlYWtIYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtIYXNoU2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCOTZFOUIzMjRGRjc3QjgwMDE3NTZDMyAvKiBD
b21wYWN0VW5pcXVlUHRyVHVwbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdFVuaXF1ZVB0clR1
cGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQjkxRjUxMjY0OEVBNEQwMEE1
NjIxNyAvKiBDaGVja2VkUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRQdHIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJDNzBGMDQxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21T
dHJpbmdUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9t
U3RyaW5nVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ4RjQwQTE3
NkMyQUQ4MDAwMkQ4NjUgLyogQXRvbVN0cmluZ1RhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21T
dHJpbmdUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0
OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRDb250YWluZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTg3LDYgKzk4OCw3IEBACiAJCQkJQThBNDcyNkIxNTFBODI1
QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFuLmggKi8sCiAJCQkJN0IyNzM5RjAyNjMxNzlDMzAw
NDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb24uaCAqLywKIAkJCQk3QjI3MzlERDI2MjREQUMzMDA0
MEYxODIgLyogQ2hlY2tlZExvY2suaCAqLywKKwkJCQk5QkI5MUY1MTI2NDhFQTREMDBBNTYyMTcg
LyogQ2hlY2tlZFB0ci5oICovLAogCQkJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9j
a1R5cGUuY3BwICovLAogCQkJCTBGNjZCMjgxMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUu
aCAqLywKIAkJCQkwRkM0RURFNTE2OTYxNDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8s
CkBAIC0xMDk3LDYgKzEwOTksOCBAQAogCQkJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBM
YW5ndWFnZS5jcHAgKi8sCiAJCQkJQzJCQ0ZDM0YxRjYxRDEzMDAwQzkyMjJDIC8qIExhbmd1YWdl
LmggKi8sCiAJCQkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLywK
KwkJCQkzMzdCMkQ2ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZEludGVn
ZXJTZXQuY3BwICovLAorCQkJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldC5oICovLAogCQkJCUE3MERBMDgzMTc5OUYwNEQwMDUyOUE5QiAv
KiBMaXN0RHVtcC5oICovLAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFz
aFNldC5oICovLAogCQkJCTBGRjRCNEM0MUU4ODkzOUMwMERCQkU4NiAvKiBMaXZlbmVzcy5oICov
LApAQCAtMTI1MSw4ICsxMjU1LDYgQEAKIAkJCQlBOEE0NzMwQzE1MUE4MjVCMDA0MTIzRkYgLyog
U2l6ZUxpbWl0cy5jcHAgKi8sCiAJCQkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxs
U2V0LmNwcCAqLywKIAkJCQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQgLyogU21hbGxTZXQuaCAq
LywKLQkJCQkzMzdCMkQ2ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuY3BwICovLAotCQkJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oICovLAogCQkJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1
NCAvKiBTb2Z0TGlua2luZy5oICovLAogCQkJCTkzMTU2QzhEMjYyQzk4MjIwMEVBRTI3QiAvKiBT
b3J0ZWRBcnJheU1hcC5oICovLAogCQkJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFu
bmluZ1RyZWUuaCAqLywKQEAgLTE3MDcsNyArMTcwOSw2IEBACiAJCQkJQThBNDczQjUxNTFBODI1
QjAwNDEyM0ZGIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAqLywKIAkJCQkxQTFEOEI5RTE3
MzE4Nzk4MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkzMzdCMkQ2QTI2NTQ2RUIzMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzMEJBOTAxRTc4NzA4RTAwMkNBODQ3
IC8qIEdsb2JhbFZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNDRDg5MkExNUMwMzkw
MjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xNzE4LDYgKzE3MTksNyBAQAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5n
dWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkJDRkM0MjFGNjFENjE2MDBDOTIyMkMgLyog
TGFuZ3VhZ2VDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzUwM0JFNjIzQUFFMEFFMDA3MkU2
NkIgLyogTGFuZ3VhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMzN0IyRDZBMjY1NDZF
QjMwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0I4RTQxRDI0RTdDRTkyMDAzNjU1RDggLyogTGluZUJyZWFrSXRlcmF0b3JQ
b29sSUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzU1MUY2MjFGM0YwMEM5MjIyQyAv
KiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQw
MEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ2hl
Y2tlZFB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NoZWNrZWRQdHIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9DaGVja2VkUHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL1Jhd1B0clRyYWl0cy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzID0g
UmF3UHRyVHJhaXRzPFQ+PgorY2xhc3MgQ2hlY2tlZFB0ciB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBDaGVja2VkUHRyKCkKKyAgICAgICAgOiBtX3B0cihu
dWxscHRyKQorICAgIHsgfQorCisgICAgQ2hlY2tlZFB0cihzdGQ6Om51bGxwdHJfdCkKKyAgICAg
ICAgOiBtX3B0cihudWxscHRyKQorICAgIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBDaGVja2Vk
UHRyKFQqIHB0cikKKyAgICAgICAgOiBtX3B0ciB7IHB0ciB9CisgICAgeworICAgICAgICByZWZJ
Zk5vdE51bGwoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIENoZWNrZWRQdHIoY29uc3Qg
Q2hlY2tlZFB0ciYgb3RoZXIpCisgICAgICAgIDogbV9wdHIgeyBvdGhlci5tX3B0ciB9CisgICAg
eworICAgICAgICByZWZJZk5vdE51bGwoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIENo
ZWNrZWRQdHIoQ2hlY2tlZFB0ciYmIG90aGVyKQorICAgICAgICA6IG1fcHRyIHsgUHRyVHJhaXRz
OjpleGNoYW5nZShvdGhlci5tX3B0ciwgbnVsbHB0cikgfQorICAgIHsgfQorCisgICAgQUxXQVlT
X0lOTElORSB+Q2hlY2tlZFB0cigpCisgICAgeworICAgICAgICBkZXJlZklmTm90TnVsbCgpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZSwgdHlwZW5hbWUgT3RoZXJQ
dHJUcmFpdHM+IENoZWNrZWRQdHIoY29uc3QgQ2hlY2tlZFB0cjxPdGhlclR5cGUsIE90aGVyUHRy
VHJhaXRzPiYgb3RoZXIpCisgICAgICAgIDogbV9wdHIgeyBvdGhlci5tX3B0ciB9CisgICAgewor
ICAgICAgICByZWZJZk5vdE51bGwoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
dGhlclR5cGUsIHR5cGVuYW1lIE90aGVyUHRyVHJhaXRzPiBDaGVja2VkUHRyKENoZWNrZWRQdHI8
T3RoZXJUeXBlLCBPdGhlclB0clRyYWl0cz4mJiBvdGhlcikKKyAgICAgICAgOiBtX3B0ciB7IFB0
clRyYWl0czo6ZXhjaGFuZ2Uob3RoZXIubV9wdHIsIG51bGxwdHIpIH0KKyAgICB7IH0KKworICAg
IENoZWNrZWRQdHIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3B0cihQ
dHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQorICAgIHsgfQorCisgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFB0clRyYWl0czo6aXNIYXNo
VGFibGVEZWxldGVkVmFsdWUobV9wdHIpOyB9CisKKyAgICAvLyBUaGlzIGNvbnZlcnNpb24gb3Bl
cmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90aGVy
IGludGVnZXIgdHlwZXMuCisgICAgdXNpbmcgVW5zcGVjaWZpZWRCb29sVHlwZSA9IHZvaWQgKENo
ZWNrZWRQdHI6OiopKCkgY29uc3Q7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHRyID8gJkNoZWNrZWRQdHI6OnVuc3BlY2lmaWVkQm9vbFR5cGVJ
bnN0YW5jZSA6IG51bGxwdHI7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhUHRyVHJhaXRzOjp1bndyYXAobV9wdHIpOyB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIGNvbnN0IFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIFB0clRyYWl0czo6dW53cmFw
KG1fcHRyKTsgfQorICAgIEFMV0FZU19JTkxJTkUgVCogZ2V0KCkgeyByZXR1cm4gUHRyVHJhaXRz
Ojp1bndyYXAobV9wdHIpOyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUJiBvcGVyYXRvcioo
KSBjb25zdCB7IEFTU0VSVCh0aGlzKTsgcmV0dXJuICpnZXQoKTsgfQorICAgIEFMV0FZU19JTkxJ
TkUgVCYgb3BlcmF0b3IqKCkgeyBBU1NFUlQodGhpcyk7IHJldHVybiAqZ2V0KCk7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgVCogb3BlcmF0b3ItPigpIHsgcmV0dXJuIGdldCgpOyB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVCogb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcHRy
ID09IG90aGVyOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRvcj09KFUq
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBvdGhlcjsgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENoZWNrZWRQdHImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBv
dGhlci5tX3B0cjsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlLCB0eXBlbmFt
ZSBPdGhlclB0clRyYWl0cz4KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hlY2tlZFB0cjxP
dGhlclR5cGUsIE90aGVyUHRyVHJhaXRzPiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09
IG90aGVyLm1fcHRyOyB9CisKKyAgICBDaGVja2VkUHRyJiBvcGVyYXRvcj0oc3RkOjpudWxscHRy
X3QpCisgICAgeworICAgICAgICBkZXJlZklmTm90TnVsbCgpOworICAgICAgICBtX3B0ciA9IG51
bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBDaGVja2VkUHRyJiBv
cGVyYXRvcj0oVCogcHRyKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZFB0ciBjb3B5IHsgcHRyIH07
CisgICAgICAgIFB0clRyYWl0czo6c3dhcChtX3B0ciwgY29weS5tX3B0cik7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBDaGVja2VkUHRyJiBvcGVyYXRvcj0oY29uc3QgQ2hl
Y2tlZFB0ciYgb3RoZXIpCisgICAgeworICAgICAgICBDaGVja2VkUHRyIGNvcHkgeyBvdGhlciB9
OworICAgICAgICBQdHJUcmFpdHM6OnN3YXAobV9wdHIsIGNvcHkubV9wdHIpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlLCB0
eXBlbmFtZSBPdGhlclB0clRyYWl0cz4gQ2hlY2tlZFB0ciYgb3BlcmF0b3I9KGNvbnN0IENoZWNr
ZWRQdHI8T3RoZXJUeXBlLCBPdGhlclB0clRyYWl0cz4mIG90aGVyKQorICAgIHsKKyAgICAgICAg
Q2hlY2tlZFB0ciBjb3B5IHsgb3RoZXIgfTsKKyAgICAgICAgUHRyVHJhaXRzOjpzd2FwKG1fcHRy
LCBjb3B5Lm1fcHRyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIENoZWNr
ZWRQdHImIG9wZXJhdG9yPShDaGVja2VkUHRyJiYgb3RoZXIpCisgICAgeworICAgICAgICBDaGVj
a2VkUHRyIG1vdmVkIHsgV1RGTW92ZShvdGhlcikgfTsKKyAgICAgICAgUHRyVHJhaXRzOjpzd2Fw
KG1fcHRyLCBtb3ZlZC5tX3B0cik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGUsIHR5cGVuYW1lIE90aGVyUHRyVHJhaXRzPiBD
aGVja2VkUHRyJiBvcGVyYXRvcj0oQ2hlY2tlZFB0cjxPdGhlclR5cGUsIE90aGVyUHRyVHJhaXRz
PiYmIG90aGVyKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZFB0ciBtb3ZlZCB7IFdURk1vdmUob3Ro
ZXIpIH07CisgICAgICAgIFB0clRyYWl0czo6c3dhcChtX3B0ciwgbW92ZWQubV9wdHIpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE90aGVyVHlwZSwgdHlwZW5hbWUgT3RoZXJQdHJUcmFpdHM+IGZyaWVuZCBjbGFzcyBDaGVj
a2VkUHRyOworCisgICAgdm9pZCB1bnNwZWNpZmllZEJvb2xUeXBlSW5zdGFuY2UoKSBjb25zdCB7
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWZJZk5vdE51bGwoKQorICAgIHsKKyAgICAg
ICAgaWYgKFQqIHB0ciA9IFB0clRyYWl0czo6dW53cmFwKG1fcHRyKTsgTElLRUxZKHB0cikpCisg
ICAgICAgICAgICBwdHItPmluY3JlbWVudFB0ckNvdW50KCk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIGRlcmVmSWZOb3ROdWxsKCkKKyAgICB7CisgICAgICAgIGlmIChUKiBwdHIg
PSBQdHJUcmFpdHM6OnVud3JhcChtX3B0cik7IExJS0VMWShwdHIpKQorICAgICAgICAgICAgcHRy
LT5kZWNyZW1lbnRQdHJDb3VudCgpOworICAgIH0KKworICAgIHR5cGVuYW1lIFB0clRyYWl0czo6
U3RvcmFnZVR5cGUgbV9wdHI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQ
dHJUcmFpdHMgPSBSYXdQdHJUcmFpdHM8VD4+IGlubGluZSBDaGVja2VkUHRyPFQsIFB0clRyYWl0
cz4gbWFrZUNoZWNrZWRQdHIoVCogcG9pbnRlcikKK3sKKyAgICByZXR1cm4gcG9pbnRlcjsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzID0gUmF3UHRyVHJhaXRz
PFQ+PiBpbmxpbmUgQ2hlY2tlZFB0cjxULCBQdHJUcmFpdHM+IG1ha2VDaGVja2VkUHRyKFQmIHJl
ZmVyZW5jZSkKK3sKKyAgICByZXR1cm4gJnJlZmVyZW5jZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFB0clRyYWl0cz4KK3N0cnVjdCBHZXRQdHJIZWxwZXI8Q2hlY2tlZFB0
cjxULCBQdHJUcmFpdHM+PiB7CisgICAgdHlwZWRlZiBUKiBQdHJUeXBlOworICAgIHN0YXRpYyBU
KiBnZXRQdHIoY29uc3QgQ2hlY2tlZFB0cjxULCBQdHJUcmFpdHM+JiBwKSB7IHJldHVybiBjb25z
dF9jYXN0PFQqPihwLmdldCgpKTsgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+CitzdHJ1Y3QgSXNTbWFydFB0cjxDaGVja2VkUHRyPFQsIFU+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZhbHVlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEV4
cGVjdGVkVHlwZSwgdHlwZW5hbWUgQXJnVHlwZSwgdHlwZW5hbWUgQXJnUHRyVHJhaXRzPgoraW5s
aW5lIGJvb2wgaXMoQ2hlY2tlZFB0cjxBcmdUeXBlLCBBcmdQdHJUcmFpdHM+JiBzb3VyY2UpCit7
CisgICAgcmV0dXJuIGlzPEV4cGVjdGVkVHlwZT4oc291cmNlLmdldCgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRXhwZWN0ZWRUeXBlLCB0eXBlbmFtZSBBcmdUeXBlLCB0eXBlbmFtZSBBcmdQ
dHJUcmFpdHM+CitpbmxpbmUgYm9vbCBpcyhjb25zdCBDaGVja2VkUHRyPEFyZ1R5cGUsIEFyZ1B0
clRyYWl0cz4mIHNvdXJjZSkKK3sKKyAgICByZXR1cm4gaXM8RXhwZWN0ZWRUeXBlPihzb3VyY2Uu
Z2V0KCkpOworfQorCitjbGFzcyBDYW5NYWtlQ2hlY2tlZFB0ciB7CitwdWJsaWM6CisgICAgfkNh
bk1ha2VDaGVja2VkUHRyKCkgeyBSRUxFQVNFX0FTU0VSVCghbV9jb3VudCk7IH0KKworICAgIHVp
bnQxNl90IHB0ckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQorICAgIHZvaWQgaW5j
cmVtZW50UHRyQ291bnQoKSB7ICsrbV9jb3VudDsgfQorICAgIHZvaWQgZGVjcmVtZW50UHRyQ291
bnQoKSB7IEFTU0VSVChtX2NvdW50KTsgLS1tX2NvdW50OyB9Citwcml2YXRlOgorICAgIHVpbnQx
Nl90IG1fY291bnQgeyAwIH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgSGFz
aFRyYWl0czxDaGVja2VkUHRyPFA+PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDaGVja2VkUHRy
PFA+PiB7CisgICAgc3RhdGljIFAqIGVtcHR5VmFsdWUoKSB7IHJldHVybiBudWxscHRyOyB9CisK
KyAgICB0eXBlZGVmIFAqIFBlZWtUeXBlOworICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0
IENoZWNrZWRQdHI8UD4mIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQorICAgIHN0YXRp
YyBQZWVrVHlwZSBwZWVrKFAqIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQorCisgICAgc3RhdGlj
IHZvaWQgY3VzdG9tRGVsZXRlQnVja2V0KENoZWNrZWRQdHI8UD4mIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgLy8gU2VlIHVuaXF1ZV9wdHIncyBjdXN0b21EZWxldGVCdWNrZXQoKSBmb3IgYW4gZXhw
bGFuYXRpb24uCisgICAgICAgIEFTU0VSVCghU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPENoZWNrZWRQ
dHI8UD4+Ojppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlVG9CZURl
c3Ryb3llZCA9IFdURk1vdmUodmFsdWUpOworICAgICAgICBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
Q2hlY2tlZFB0cjxQPj46OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSh2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IERlZmF1bHRIYXNoPENoZWNrZWRQdHI8UD4+
IDogUHRySGFzaDxDaGVja2VkUHRyPFA+PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkNoZWNrZWRQdHI7Cit1c2luZyBXVEY6OkNhbk1ha2VDaGVja2VkUHRyOwordXNp
bmcgV1RGOjptYWtlQ2hlY2tlZFB0cjsKKwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTQwKQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMDUtMjMgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIENoZWNrZWRQdHIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE1OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGJhc2ljIHRl
c3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ2hlY2tl
ZFB0ci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q2hlY2tlZE9iamVjdCk6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RGVyaXZlZENoZWNrZWRPYmplY3QpOiBB
ZGRlZC4KKyAgICAgICAgKFdURl9DaGVja2VkUHRyLkJhc2ljKToKKyAgICAgICAgKFdURl9DaGVj
a2VkUHRyLkRlcml2ZWRDbGFzcyk6CisgICAgICAgIChXVEZfQ2hlY2tlZFB0ci5IYXNoU2V0KToK
KwogMjAyMS0wNS0yMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
Q29udmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBw
aW5nIGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMs
IGV0Yy4pCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc3OTQwKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw2ICs5MDUsNyBAQAogCQk5QjkzMzJDRTIzMjBDNzQ1
MDAyRDUwRTggLyogY29jb2Etd3JpdGVyLW1hcmt1cC13aXRoLWxpc3RzLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI5MzMyQ0QyMzIw
QzczRTAwMkQ1MEU4IC8qIGNvY29hLXdyaXRlci1tYXJrdXAtd2l0aC1saXN0cy5odG1sICovOyB9
OwogCQk5QkFEN0YzRTIyNjkwRjIwMDBGOERBNjYgLyogRGVhbGxvY1dlYlZpZXdJbkV2ZW50TGlz
dGVuZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
QkFEN0YzRDIyNjkwRjE0MDBGOERBNjYgLyogRGVhbGxvY1dlYlZpZXdJbkV2ZW50TGlzdGVuZXIu
bW0gKi87IH07CiAJCTlCQUUxNzdCMjJFMkJCRkIwMERGMzA5OCAvKiBjb2NvYS13cml0ZXItbWFy
a3VwLXdpdGgtc3lzdGVtLWZvbnRzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBRTE3N0EyMkUyQkI2QjAwREYzMDk4IC8qIGNvY29h
LXdyaXRlci1tYXJrdXAtd2l0aC1zeXN0ZW0tZm9udHMuaHRtbCAqLzsgfTsKKwkJOUJCQ0E0REYy
NjVBQ0E1QjAwREZFNzIzIC8qIENoZWNrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJCQ0E0REUyNjVBQ0E1QjAwREZFNzIzIC8qIENoZWNr
ZWRQdHIuY3BwICovOyB9OwogCQk5QkNCN0MyODIwMTMwNjAwMDAzRTdDMEMgLyogUGFzdGVIVE1M
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJDQjdD
MjYyMDEzMDYwMDAwM0U3QzBDIC8qIFBhc3RlSFRNTC5tbSAqLzsgfTsKIAkJOUJDRDQxMUEyMDZE
QkNBMzAwMUQ3MUJFIC8qIG1zby1saXN0LW9uLWg0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJDRDQxMTkyMDZENUVENzAwMUQ3MUJF
IC8qIG1zby1saXN0LW9uLWg0Lmh0bWwgKi87IH07CiAJCTlCRDQyMzlBMUUwNEJEOTgwMDIwMDM5
NSAvKiBBdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZVdpdGhJbWFnZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCRDQyMzk5MUUwNEJE
OTgwMDIwMDM5NSAvKiBBdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZVdpdGhJbWFn
ZS5tbSAqLzsgfTsKQEAgLTI2MTcsNiArMjYxOCw3IEBACiAJCTlCOTMzMkNEMjMyMEM3M0UwMDJE
NTBFOCAvKiBjb2NvYS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9ICJjb2NvYS13cml0ZXItbWFya3VwLXdpdGgtbGlzdHMuaHRtbCI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQUQ3RjNEMjI2OTBGMTQwMEY4REE2NiAvKiBE
ZWFsbG9jV2ViVmlld0luRXZlbnRMaXN0ZW5lci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERlYWxsb2NXZWJWaWV3SW5FdmVudExpc3RlbmVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5QkFFMTc3QTIyRTJCQjZCMDBERjMwOTggLyogY29jb2Et
d3JpdGVyLW1hcmt1cC13aXRoLXN5c3RlbS1mb250cy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImNvY29hLXdy
aXRlci1tYXJrdXAtd2l0aC1zeXN0ZW0tZm9udHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTlCQkNBNERFMjY1QUNBNUIwMERGRTcyMyAvKiBDaGVja2VkUHRyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENoZWNrZWRQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5QkNCN0MyNjIwMTMwNjAwMDAzRTdDMEMgLyogUGFzdGVIVE1MLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUGFzdGVIVE1MLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QkNENDExOTIwNkQ1RUQ3MDAxRDcxQkUgLyogbXNvLWxpc3Qtb24taDQuaHRtbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
ICJtc28tbGlzdC1vbi1oNC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJE
NDIzOTkxRTA0QkQ5ODAwMjAwMzk1IC8qIEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJh
bmdlV2l0aEltYWdlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
QXR0cmlidXRlZFN1YnN0cmluZ0ZvclByb3Bvc2VkUmFuZ2VXaXRoSW1hZ2UubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDE0LDYgKzQ0MTYsNyBAQAogCQkJCUE3QTk2NkRBMTQw
RUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJ
CTdCMjczOUVFMjYzMTVFN0QwMDQwRjE4MiAvKiBDaGVja2VkQ29uZGl0aW9uVGVzdC5jcHAgKi8s
CiAJCQkJN0IyNzM5REYyNjI1NzFDQzAwNDBGMTgyIC8qIENoZWNrZWRMb2NrVGVzdC5jcHAgKi8s
CisJCQkJOUJCQ0E0REUyNjVBQ0E1QjAwREZFNzIzIC8qIENoZWNrZWRQdHIuY3BwICovLAogCQkJ
CUUzMDJCREE5MjQwNEI5MjMwMDg2NTI3NyAvKiBDb21wYWN0UmVmUHRyVHVwbGUuY3BwICovLAog
CQkJCTlCMEMwNTE4MjRGREZCNzAwMEYyRkUzMSAvKiBDb21wYWN0VW5pcXVlUHRyVHVwbGUuY3Bw
ICovLAogCQkJCTBGMzBDQjVCMUZDRTE3OTIwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNl
dC5jcHAgKi8sCkBAIC01MTc4LDYgKzUxODEsNyBAQAogCQkJCTdDODNERUEwMUQwQTU5MEMwMEZF
QkNGMyAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0IyNzM5RUYyNjMxNUU3RTAwNDBGMTgyIC8qIENoZWNrZWRDb25kaXRpb25UZXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdCMjczOUUwMjYyNTcxQ0MwMDQwRjE4MiAvKiBDaGVja2VkTG9j
a1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUJCQ0E0REYyNjVBQ0E1QjAwREZFNzIzIC8q
IENoZWNrZWRQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMwMkJEQUEyNDA0QjkyNDAwODY1
Mjc3IC8qIENvbXBhY3RSZWZQdHJUdXBsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjBDMDUx
OTI0RkRGQjdEMDBGMkZFMzEgLyogQ29tcGFjdFVuaXF1ZVB0clR1cGxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzBDQjVDMUZDRTE3OTYwMDRCNTMyMyAvKiBDb25jdXJyZW50UHRySGFzaFNl
dC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0NoZWNrZWRQdHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0NoZWNrZWRQdHIuY3BwCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0NoZWNrZWRQdHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVXRpbGl0aWVz
LmgiCisjaW5jbHVkZSA8d3RmL0NoZWNrZWRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewor
CitjbGFzcyBDaGVja2VkT2JqZWN0IDogcHVibGljIENhbk1ha2VDaGVja2VkUHRyIHsKK3B1Ymxp
YzoKKyAgICBpbnQgc29tZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gLTc7IH0KK307CisKK2Ns
YXNzIERlcml2ZWRDaGVja2VkT2JqZWN0IDogcHVibGljIENoZWNrZWRPYmplY3QgeworfTsKKwor
VEVTVChXVEZfQ2hlY2tlZFB0ciwgQmFzaWMpCit7CisgICAgeworICAgICAgICBDaGVja2VkT2Jq
ZWN0IGNoZWNrZWRPYmplY3Q7CisgICAgICAgIEVYUEVDVF9FUShjaGVja2VkT2JqZWN0LnB0ckNv
dW50KCksIDApOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ2hlY2tlZE9iamVjdCBjaGVja2Vk
T2JqZWN0OworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAwKTsK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byBwdHIgPSBtYWtlQ2hlY2tlZFB0cihjaGVja2Vk
T2JqZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCEhcHRyKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUShwdHIuZ2V0KCksICZjaGVja2VkT2JqZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9F
UShwdHItPnNvbWVGdW5jdGlvbigpLCAtNyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY2hlY2tl
ZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEoY2hl
Y2tlZE9iamVjdC5wdHJDb3VudCgpLCAwKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENoZWNr
ZWRPYmplY3QgY2hlY2tlZE9iamVjdDsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3Qu
cHRyQ291bnQoKSwgMCk7CisKKyAgICAgICAgYXV0byBwdHIgPSBtYWtlQ2hlY2tlZFB0cihjaGVj
a2VkT2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFwdHIpOworICAgICAgICBFWFBFQ1Rf
RVEocHRyLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHItPnNv
bWVGdW5jdGlvbigpLCAtNyk7CisgICAgICAgIEVYUEVDVF9FUShjaGVja2VkT2JqZWN0LnB0ckNv
dW50KCksIDEpOworICAgICAgICBwdHIgPSBudWxscHRyOworCisgICAgICAgIEVYUEVDVF9GQUxT
RSghIXB0cik7CisgICAgICAgIEVYUEVDVF9FUShwdHIuZ2V0KCksIG51bGxwdHIpOworICAgICAg
ICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAwKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIENoZWNrZWRPYmplY3QgY2hlY2tlZE9iamVjdDsKKyAgICAgICAgRVhQRUNUX0VR
KGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMCk7CisKKyAgICAgICAgYXV0byBwdHIxID0gbWFr
ZUNoZWNrZWRQdHIoY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhcHRyMSk7
CisgICAgICAgIEVYUEVDVF9FUShwdHIxLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAg
IEVYUEVDVF9FUShwdHIxLT5zb21lRnVuY3Rpb24oKSwgLTcpOworICAgICAgICBFWFBFQ1RfRVEo
Y2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKworICAgICAgICBjb25zdCBDaGVja2VkUHRy
PENoZWNrZWRPYmplY3Q+IHB0cjIgPSBtYWtlQ2hlY2tlZFB0cigmY2hlY2tlZE9iamVjdCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCEhcHRyMik7CisgICAgICAgIEVYUEVDVF9FUShwdHIyLmdldCgp
LCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIyLT5zb21lRnVuY3Rpb24o
KSwgLTcpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAyKTsK
KworICAgICAgICBDaGVja2VkUHRyPENoZWNrZWRPYmplY3Q+IHB0cjMgPSBwdHIyOworICAgICAg
ICBFWFBFQ1RfVFJVRSghIXB0cjMpOworICAgICAgICBFWFBFQ1RfRVEocHRyMy5nZXQoKSwgJmNo
ZWNrZWRPYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgp
LCAzKTsKKworICAgICAgICBwdHIxID0gbnVsbHB0cjsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNr
ZWRPYmplY3QucHRyQ291bnQoKSwgMik7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLmdldCgpLCBu
dWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjIuZ2V0KCksICZjaGVja2VkT2JqZWN0KTsK
KyAgICAgICAgRVhQRUNUX0VRKHB0cjMuZ2V0KCksICZjaGVja2VkT2JqZWN0KTsKKworICAgICAg
ICBwdHIxID0gV1RGTW92ZShwdHIzKTsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3Qu
cHRyQ291bnQoKSwgMik7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLmdldCgpLCAmY2hlY2tlZE9i
amVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIyLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7Cisg
ICAgICAgIEVYUEVDVF9FUShwdHIzLmdldCgpLCBudWxscHRyKTsKKyAgICB9Cit9CisKK1RFU1Qo
V1RGX0NoZWNrZWRQdHIsIERlcml2ZWRDbGFzcykKK3sKKyAgICB7CisgICAgICAgIERlcml2ZWRD
aGVja2VkT2JqZWN0IGNoZWNrZWRPYmplY3Q7CisgICAgICAgIEVYUEVDVF9FUShjaGVja2VkT2Jq
ZWN0LnB0ckNvdW50KCksIDApOworICAgIH0KKworICAgIHsKKyAgICAgICAgRGVyaXZlZENoZWNr
ZWRPYmplY3QgY2hlY2tlZE9iamVjdDsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3Qu
cHRyQ291bnQoKSwgMCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcHRyID0gbWFrZUNo
ZWNrZWRQdHIoY2hlY2tlZE9iamVjdCk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghIXB0cik7
CisgICAgICAgICAgICBFWFBFQ1RfRVEocHRyLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAg
ICAgICAgICBFWFBFQ1RfRVEocHRyLT5zb21lRnVuY3Rpb24oKSwgLTcpOworICAgICAgICAgICAg
RVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMSk7CisgICAgICAgIH0KKyAgICAg
ICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMCk7CisgICAgfQorCisgICAg
eworICAgICAgICBDaGVja2VkT2JqZWN0IGNoZWNrZWRPYmplY3Q7CisgICAgICAgIEVYUEVDVF9F
UShjaGVja2VkT2JqZWN0LnB0ckNvdW50KCksIDApOworCisgICAgICAgIENoZWNrZWRQdHI8Q2hl
Y2tlZE9iamVjdD4gcHRyID0gbWFrZUNoZWNrZWRQdHIoY2hlY2tlZE9iamVjdCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKCEhcHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHB0ci5nZXQoKSwgJmNoZWNr
ZWRPYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEocHRyLT5zb21lRnVuY3Rpb24oKSwgLTcpOwor
ICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKyAgICAgICAg
cHRyID0gbnVsbHB0cjsKKworICAgICAgICBFWFBFQ1RfRkFMU0UoISFwdHIpOworICAgICAgICBF
WFBFQ1RfRVEocHRyLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRP
YmplY3QucHRyQ291bnQoKSwgMCk7CisgICAgfQorCisgICAgeworICAgICAgICBEZXJpdmVkQ2hl
Y2tlZE9iamVjdCBjaGVja2VkT2JqZWN0OworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVj
dC5wdHJDb3VudCgpLCAwKTsKKworICAgICAgICBDaGVja2VkUHRyPERlcml2ZWRDaGVja2VkT2Jq
ZWN0PiBwdHIxID0gbWFrZUNoZWNrZWRQdHIoY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVYUEVD
VF9UUlVFKCEhcHRyMSk7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLmdldCgpLCAmY2hlY2tlZE9i
amVjdCk7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLT5zb21lRnVuY3Rpb24oKSwgLTcpOworICAg
ICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKworICAgICAgICBj
b25zdCBDaGVja2VkUHRyPENoZWNrZWRPYmplY3Q+IHB0cjIgPSBwdHIxOworICAgICAgICBFWFBF
Q1RfVFJVRSghIXB0cjIpOworICAgICAgICBFWFBFQ1RfRVEocHRyMi5nZXQoKSwgJmNoZWNrZWRP
YmplY3QpOworICAgICAgICBFWFBFQ1RfRVEocHRyMi0+c29tZUZ1bmN0aW9uKCksIC03KTsKKyAg
ICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMik7CisKKyAgICAgICAg
Q2hlY2tlZFB0cjxDaGVja2VkT2JqZWN0PiBwdHIzID0gcHRyMTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoISFwdHIzKTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjMuZ2V0KCksICZjaGVja2VkT2JqZWN0
KTsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMyk7CisKKyAg
ICAgICAgcHRyMSA9IG51bGxwdHI7CisgICAgICAgIEVYUEVDVF9FUShjaGVja2VkT2JqZWN0LnB0
ckNvdW50KCksIDIpOworICAgICAgICBFWFBFQ1RfRVEocHRyMS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgICAgIEVYUEVDVF9FUShwdHIyLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisgICAgICAgIEVY
UEVDVF9FUShwdHIzLmdldCgpLCAmY2hlY2tlZE9iamVjdCk7CisKKyAgICAgICAgQ2hlY2tlZFB0
cjxDaGVja2VkT2JqZWN0PiBwdHI0ID0gV1RGTW92ZShwdHIzKTsKKyAgICAgICAgRVhQRUNUX0VR
KGNoZWNrZWRPYmplY3QucHRyQ291bnQoKSwgMik7CisgICAgICAgIEVYUEVDVF9FUShwdHIxLmdl
dCgpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjIuZ2V0KCksICZjaGVja2VkT2Jq
ZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHB0cjMuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBF
WFBFQ1RfRVEocHRyNC5nZXQoKSwgJmNoZWNrZWRPYmplY3QpOworICAgIH0KK30KKworVEVTVChX
VEZfQ2hlY2tlZFB0ciwgSGFzaFNldCkKK3sKKyAgICB7CisgICAgICAgIENoZWNrZWRPYmplY3Qg
Y2hlY2tlZE9iamVjdDsKKyAgICAgICAgRVhQRUNUX0VRKGNoZWNrZWRPYmplY3QucHRyQ291bnQo
KSwgMCk7CisKKyAgICAgICAgYXV0byBwdHIgPSBtYWtlQ2hlY2tlZFB0cihjaGVja2VkT2JqZWN0
KTsKKyAgICAgICAgRVhQRUNUX0VRKHB0ci5nZXQoKSwgJmNoZWNrZWRPYmplY3QpOworICAgICAg
ICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAxKTsKKworICAgICAgICBIYXNo
U2V0PENoZWNrZWRQdHI8Q2hlY2tlZE9iamVjdD4+IHNldDsKKyAgICAgICAgc2V0LmFkZChwdHIp
OworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJDb3VudCgpLCAyKTsKKworICAg
ICAgICBwdHIgPSBudWxscHRyOworICAgICAgICBFWFBFQ1RfRVEoY2hlY2tlZE9iamVjdC5wdHJD
b3VudCgpLCAxKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENoZWNrZWRPYmplY3Qgb2JqZWN0
MTsKKyAgICAgICAgRGVyaXZlZENoZWNrZWRPYmplY3Qgb2JqZWN0MjsKKyAgICAgICAgRVhQRUNU
X0VRKG9iamVjdDEucHRyQ291bnQoKSwgMCk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QyLnB0
ckNvdW50KCksIDApOworCisgICAgICAgIEhhc2hTZXQ8Q2hlY2tlZFB0cjxDaGVja2VkT2JqZWN0
Pj4gc2V0OworICAgICAgICBzZXQuYWRkKCZvYmplY3QxKTsKKyAgICAgICAgRVhQRUNUX0VRKG9i
amVjdDEucHRyQ291bnQoKSwgMSk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QyLnB0ckNvdW50
KCksIDApOworCisgICAgICAgIHNldC5hZGQoJm9iamVjdDEpOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0MS5wdHJDb3VudCgpLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdDIucHRyQ291
bnQoKSwgMCk7CisKKyAgICAgICAgQ2hlY2tlZFB0cjxEZXJpdmVkQ2hlY2tlZE9iamVjdD4gcHRy
IHsgJm9iamVjdDIgfTsKKyAgICAgICAgc2V0LmFkZChwdHIpOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0MS5wdHJDb3VudCgpLCAxKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdDIucHRyQ291
bnQoKSwgMik7CisgICAgICAgIHB0ciA9IG51bGxwdHI7CisKKyAgICAgICAgRVhQRUNUX0VRKG9i
amVjdDEucHRyQ291bnQoKSwgMSk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QyLnB0ckNvdW50
KCksIDEpOworCisgICAgICAgIHNldC5yZW1vdmUoJm9iamVjdDEpOworICAgICAgICBFWFBFQ1Rf
RVEob2JqZWN0MS5wdHJDb3VudCgpLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdDIucHRy
Q291bnQoKSwgMSk7CisgICAgfQorCisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPENoZWNrZWRPYmplY3Q+PiBvYmplY3RzOworICAgICAgICBvYmplY3RzLmFwcGVuZChtYWtl
VW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxDaGVja2VkT2JqZWN0PigpKTsKKyAgICAgICAg
RVhQRUNUX0VRKG9iamVjdHNbMF0tPnB0ckNvdW50KCksIDApOworCisgICAgICAgIEhhc2hTZXQ8
Q2hlY2tlZFB0cjxDaGVja2VkT2JqZWN0Pj4gc2V0OworICAgICAgICBzZXQuYWRkKG9iamVjdHNb
MF0uZ2V0KCkpOworICAgICAgICBhdXRvIGluaXRpYWxDYXBhY2l0eSA9IHNldC5jYXBhY2l0eSgp
OworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHNldC5jYXBhY2l0eSgpID09IGluaXRp
YWxDYXBhY2l0eTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAlIDIpCisgICAgICAgICAgICAg
ICAgb2JqZWN0cy5hcHBlbmQobWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8RGVyaXZl
ZENoZWNrZWRPYmplY3Q+KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9i
amVjdHMuYXBwZW5kKG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPENoZWNrZWRPYmpl
Y3Q+KCkpOworICAgICAgICAgICAgc2V0LmFkZChvYmplY3RzLmxhc3QoKS5nZXQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIG9iamVjdCA6IG9iamVjdHMpCisgICAgICAgICAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5wdHJDb3VudCgpLCAxKTsKKworICAgICAgICBhdXRvIHNldFZl
Y3RvciA9IFdURjo6Y29weVRvVmVjdG9yKHNldCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBvYmpl
Y3QgOiBvYmplY3RzKQorICAgICAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+cHRyQ291bnQoKSwg
Mik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="450707"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>