<?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>227171</bug_id>
          
          <creation_ts>2021-06-18 10:50:46 -0700</creation_ts>
          <short_desc>Add a new pattern to instruction selector to use EXTR supported by ARM64</short_desc>
          <delta_ts>2021-07-01 10:25:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771039</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-18 10:50:46 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771768</commentid>
    <comment_count>1</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-22 13:10:01 -0700</bug_when>
    <thetext>This bug will be fixed in the ubfiz patch(bug 227204).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772729</commentid>
    <comment_count>2</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-25 11:02:00 -0700</bug_when>
    <thetext>This is fixed in bug 227204.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772741</commentid>
    <comment_count>3</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-25 12:28:41 -0700</bug_when>
    <thetext>Use this bug report for other purpose: Add ARM64 BFC into AIR opcode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772959</commentid>
    <comment_count>4</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-27 14:22:33 -0700</bug_when>
    <thetext>ARM64 BFC instruction is already added in bug 227202.

Use this bug report for another purpose: Add ARM64 BFXIL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773663</commentid>
    <comment_count>5</comment_count>
      <attachid>432567</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-29 23:14:06 -0700</bug_when>
    <thetext>Created attachment 432567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773664</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-29 23:14:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/79951628&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773764</commentid>
    <comment_count>7</comment_count>
      <attachid>432600</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-30 08:56:09 -0700</bug_when>
    <thetext>Created attachment 432600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773803</commentid>
    <comment_count>8</comment_count>
      <attachid>432600</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-30 10:14:51 -0700</bug_when>
    <thetext>Comment on attachment 432600
Patch

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773805</commentid>
    <comment_count>9</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-30 10:19:11 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #8)
&gt; Comment on attachment 432600 [details]
&gt; Patch
&gt; 
&gt; Nice!

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773806</commentid>
    <comment_count>10</comment_count>
      <attachid>432600</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-30 10:19:23 -0700</bug_when>
    <thetext>Comment on attachment 432600
Patch

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

I like it overall, but I am concerned that you may have broken the instruction selection for sbfiz.

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        ### Part A zero extend bitfield ###

I like that, as BitAnd(value, mask) is a lot more canonical throughout the compiler.
But I just checked, and your pattern for sbfiz looks for the ZShr(Shl(value, amount), amount) pattern.
Have you tried running testInsertSignedBitfieldInZero64 on ARM64 ? I would expect it to fail until you replace the pattern for sbfiz in B3LowerToAir.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1482
&gt; +                    uint64_t mask = width == datasize ? -1ULL : (1ULL &lt;&lt; width) - 1ULL;

nitpick: instead of `-1ULL` on the true side, I would put std::numeric_limits&lt;uint64_t&gt;::max(). It is almost certainly equivalent, but marking a negative number with U(unsigned)LL seems weird to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773807</commentid>
    <comment_count>11</comment_count>
      <attachid>432600</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-06-30 10:20:48 -0700</bug_when>
    <thetext>Comment on attachment 432600
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:50
&gt; +        Int @7 = ZShr(@1, @5))

@5 -&gt; @6

&gt; Source/JavaScriptCore/ChangeLog:51
&gt; +        Int @8 = BitOr(@7, @6)

@6 -&gt; @5

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2860
&gt; +                commitInternal(left-&gt;child(0));
&gt; +                commitInternal(left);
&gt; +                commitInternal(right);

Why is this valid to do? We never check canBeInternal. Since we&apos;re using &quot;is locked&quot; checks, isn&apos;t that enough to just grab the temp, but not commit internal?

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1482
&gt; +                    uint64_t mask = width == datasize ? -1ULL : (1ULL &lt;&lt; width) - 1ULL;

can we use numeric_limits&lt;uint64_t&gt;::max instead of &quot;-1ULL&quot;

also, if &quot;width == datasize&quot;, can&apos;t we just replace ourselves with &quot;value&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773813</commentid>
    <comment_count>12</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-30 10:51:09 -0700</bug_when>
    <thetext>(In reply to Robin Morisset from comment #10)
&gt; Comment on attachment 432600 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432600&amp;action=review
&gt; 
&gt; I like it overall, but I am concerned that you may have broken the
&gt; instruction selection for sbfiz.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:13
&gt; &gt; +        ### Part A zero extend bitfield ###
&gt; 
&gt; I like that, as BitAnd(value, mask) is a lot more canonical throughout the
&gt; compiler.
&gt; But I just checked, and your pattern for sbfiz looks for the ZShr(Shl(value,
&gt; amount), amount) pattern.
&gt; Have you tried running testInsertSignedBitfieldInZero64 on ARM64 ? I would
&gt; expect it to fail until you replace the pattern for sbfiz in B3LowerToAir.

Thanks for the review. That&apos;s a good question. The pattern of sbfiz is: 

((src &lt;&lt; amount) &gt;&gt; amount) &lt;&lt; lsb

where the right shift is signed. And the reduction rule introduced in this patch is an unsigned right shift.

Turn this: ZShr(Shl(value, amount)), amount)
Into this: BitAnd(value, mask)

&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1482
&gt; &gt; +                    uint64_t mask = width == datasize ? -1ULL : (1ULL &lt;&lt; width) - 1ULL;
&gt; 
&gt; nitpick: instead of `-1ULL` on the true side, I would put
&gt; std::numeric_limits&lt;uint64_t&gt;::max(). It is almost certainly equivalent, but
&gt; marking a negative number with U(unsigned)LL seems weird to me.

I&apos;ll update all of them. Great point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773815</commentid>
    <comment_count>13</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-30 10:59:27 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #11)
&gt; Comment on attachment 432600 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=432600&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:50
&gt; &gt; +        Int @7 = ZShr(@1, @5))
&gt; 
&gt; @5 -&gt; @6
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:51
&gt; &gt; +        Int @8 = BitOr(@7, @6)
&gt; 
&gt; @6 -&gt; @5
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2860
&gt; &gt; +                commitInternal(left-&gt;child(0));
&gt; &gt; +                commitInternal(left);
&gt; &gt; +                commitInternal(right);
&gt; 
&gt; Why is this valid to do? We never check canBeInternal. Since we&apos;re using &quot;is
&gt; locked&quot; checks, isn&apos;t that enough to just grab the temp, but not commit
&gt; internal?
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1482
&gt; &gt; +                    uint64_t mask = width == datasize ? -1ULL : (1ULL &lt;&lt; width) - 1ULL;
&gt; 
&gt; can we use numeric_limits&lt;uint64_t&gt;::max instead of &quot;-1ULL&quot;
&gt; 
&gt; also, if &quot;width == datasize&quot;, can&apos;t we just replace ourselves with &quot;value&quot;?

Thanks for the review. Working on them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773827</commentid>
    <comment_count>14</comment_count>
      <attachid>432613</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-30 11:26:58 -0700</bug_when>
    <thetext>Created attachment 432613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773867</commentid>
    <comment_count>15</comment_count>
      <attachid>432613</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-30 13:13:57 -0700</bug_when>
    <thetext>Comment on attachment 432613
Patch

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

r=me with a minor comment.
Thank you for the explanation about sbfiz, I had missed that it uses SShr instead of ZShr.
I&apos;ll cq+ once all the bots are green (unless you can/want to do it yourself).

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1491
&gt; +                        replaceWithIdentity(m_value-&gt;child(0)-&gt;child(0));

I don&apos;t think this is needed: in the case where amount1 == 0,the shifts will already be replaced by Identity in handleShiftAmount().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773869</commentid>
    <comment_count>16</comment_count>
      <attachid>432621</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-30 13:22:16 -0700</bug_when>
    <thetext>Created attachment 432621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1773870</commentid>
    <comment_count>17</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-06-30 13:23:12 -0700</bug_when>
    <thetext>(In reply to Robin Morisset from comment #15)
&gt; Comment on attachment 432613 [details]
&gt; Patch
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1491
&gt; &gt; +                        replaceWithIdentity(m_value-&gt;child(0)-&gt;child(0));
&gt; 
&gt; I don&apos;t think this is needed: in the case where amount1 == 0,the shifts will
&gt; already be replaced by Identity in handleShiftAmount().

Indeed, thanks for pointing it out. Updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774149</commentid>
    <comment_count>18</comment_count>
      <attachid>432621</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-07-01 10:09:18 -0700</bug_when>
    <thetext>Comment on attachment 432621
Patch

r=me; cq=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774155</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-01 10:25:33 -0700</bug_when>
    <thetext>Committed r279470 (239324@main): &lt;https://commits.webkit.org/239324@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432621.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432567</attachid>
            <date>2021-06-29 23:14:06 -0700</date>
            <delta_ts>2021-06-30 08:56:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227171-20210630011405.patch</filename>
            <type>text/plain</type>
            <size>21086</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDg4NmU5NDM1ZjA5ZDc3M2YxNjVlYzJiZDY5NDA3MWZjNDExZmQyLi5jYjM1OTk2ZDNkYTc5NjVk
OTEzNDg5MzQxOTEzODUxNDk3MmNjOTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAyMS0wNi0yOSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXNlIEVYVFIgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmV4dHIzMik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmV4dHI2NCk6CisgICAgICAgICogYXNzZW1ibGVyL3Rl
c3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdEV4dHIzMik6CisgICAgICAgIChKU0M6OnRl
c3RFeHRyNjQpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMv
QjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
OgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAg
ICAgICAgKHRlc3RCaXRmaWVsZFplcm9FeHRlbmQzMik6CisgICAgICAgICh0ZXN0Qml0ZmllbGRa
ZXJvRXh0ZW5kNjQpOgorICAgICAgICAodGVzdEV4dHIzMik6CisgICAgICAgICh0ZXN0RXh0cjY0
KToKKyAgICAgICAgKGFkZEJpdFRlc3RzKToKKwogMjAyMS0wNi0yOSAgWWlqaWEgSHVhbmcgIDx5
aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5z
dHJ1Y3Rpb24gc2VsZWN0b3IgdG8gdXNlIFNCWCBhbmQgU0JGSVogc3VwcG9ydGVkIGJ5IEFSTTY0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCmluZGV4IDU3ZGRkY2MxMzJhOGI0MmMzM2JkNmMyNjViNTFiYmU2Yzk1YzUyZjYu
LjE0MTUzMGVhODRjNTY0ZGYyMGZhMmY0MDQ0YWFlYTM3YTQ0YzFiYTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBA
IC01MzksNiArNTM5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2JmeDw2ND4o
ZGVzdCwgc3JjLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CiAgICAgfSAgICAKIAorICAg
IHZvaWQgZXh0cjMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgbHNi
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5leHRyPDMyPihkLCBu
LCBtLCBsc2IubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBleHRyNjQoUmVnaXN0ZXJJRCBu
LCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBsc2IsIFJlZ2lzdGVySUQgZCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmV4dHI8NjQ+KGQsIG4sIG0sIGxzYi5tX3ZhbHVlKTsKKyAgICB9
IAorCiAgICAgdm9pZCBjbGVhckJpdDY0KFJlZ2lzdGVySUQgYml0VG9DbGVhciwgUmVnaXN0ZXJJ
RCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2hGb3JNYXNrID0gSW52YWxpZEdQUlJlZykKICAgICB7
CiAgICAgICAgIGlmIChzY3JhdGNoRm9yTWFzayA9PSBJbnZhbGlkR1BSUmVnKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCAwM2QwNjFhYzgxNzkw
N2QxODA2ODg4YzEwN2Y2NmQxODhhOGRhZjE4Li5mZmNiZDViYzNlMWMyNTZkZTg2Zjg3NGVkYWM4
OGYxYWM2MzM0MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3Rt
YXNtLmNwcApAQCAtMTU3MCw2ICsxNTcwLDc2IEBAIHZvaWQgdGVzdEV4dHJhY3RTaWduZWRCaXRm
aWVsZDY0KCkKICAgICB9CiB9CiAKK3ZvaWQgdGVzdEV4dHIzMigpCit7CisgICAgVmVjdG9yPHVp
bnQzMl90PiBpbW1zID0geyAwLCAxLCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2Mywg
NjQgfTsKKyAgICB1aW50MzJfdCBkYXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQzMl90
KTsKKworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gbHNiIDog
aW1tcykgeworICAgICAgICAgICAgICAgIGlmICgwIDw9IGxzYiAmJiBsc2IgPCBkYXRhc2l6ZSkg
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGV4dHIzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmV4dHIzMihHUFJJbmZvOjph
cmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAvLyAoKG4gJiBtYXNrKSA8PCBo
aWdoV2lkdGgpIHwgKG0gPj4gbG93V2lkdGgpCisgICAgICAgICAgICAgICAgICAgIC8vIFdoZXJl
OiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRoCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICBtYXNrID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxzYjsKKyAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgbWFzayA9ICgxVSA8PCBsc2IpIC0gMVU7CisgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGxlZnQgPSBoaWdoV2lkdGggPT0gZGF0YXNpemUgPyAwVSA6IChuICYgbWFzaykgPDwg
aGlnaFdpZHRoOworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByaWdodCA9IChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obSkgPj4gbHNiKTsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
cmhzID0gbGVmdCB8IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsaHMgPSBp
bnZva2U8dWludDMyX3Q+KGV4dHIzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgICAgIENIRUNL
X0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEV4dHI2NCgpCit7CisgICAgVmVjdG9yPHVpbnQzMl90
PiBpbW1zID0geyAwLCAxLCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2MywgNjQgfTsK
KyAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQ2NF90KTsKKwor
ICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBt
IDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykg
eworICAgICAgICAgICAgICAgIGlmICgwIDwgbHNiICYmIGxzYiA8IGRhdGFzaXplKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gZXh0cjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZXh0cjY0KEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
Mihsc2IpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGhpZ2hXaWR0aCA9IGRhdGFz
aXplIC0gbHNiOworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrID0gKDFVTEwgPDwg
bHNiKSAtIDFVTEw7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxlZnQgPSBoaWdoV2lk
dGggPT0gZGF0YXNpemUgPyAwVUxMIDogKG4gJiBtYXNrKSA8PCBoaWdoV2lkdGg7CisgICAgICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IHJpZ2h0ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSA+
PiBsc2IpOworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByaHMgPSBsZWZ0IHwgcmlnaHQ7
CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4oZXh0
cjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KICNlbmRp
ZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtMzc2MCw2
ICszODMwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKSBXVEZfSUdOT1JFU19USFJF
QURfU0FGRVRZX0FOQUxZU0lTCiAgICAgUlVOKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVy
bzY0KCkpOwogICAgIFJVTih0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIoKSk7CiAgICAgUlVO
KHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCgpKTsKKyAgICBSVU4odGVzdEV4dHIzMigpKTsK
KyAgICBSVU4odGVzdEV4dHI2NCgpKTsKICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkgfHwgQ1BVKEFSTTY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcAppbmRleCBmMTIwMzFjMWRmNjFiNjRjNzJhYjRlN2EzOGU3MjIzM2Y5YmI5MThkLi4wY2Iy
NzhlMGRiMTgwNmQyOTVhOWRmMWRiNzcwN2FjZjM3ZWQ4YzRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMjgyMiw2ICsyODIyLDQ4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAg
ICAgVmFsdWUqIHJpZ2h0ID0gbV92YWx1ZS0+Y2hpbGQoMSk7CiAKKyAgICAgICAgICAgIC8vIEVY
VFIgUGF0dGVybjogZCA9ICgobiAmIG1hc2spIDw8IGhpZ2hXaWR0aCkgfCAobSA+PiBsb3dXaWR0
aCkKKyAgICAgICAgICAgIC8vIFdoZXJlOiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRo
CisgICAgICAgICAgICAvLyAgICAgICAgbWFzayA9ICgxIDw8IGxvd1dpZHRoKSAtIDEKKyAgICAg
ICAgICAgIGF1dG8gdHJ5QXBwZW5kRVhUUiA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2Rl
Rm9yVHlwZShFeHRyMzIsIEV4dHI2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwg
QXJnOjpUbXApKSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBTaGwgfHwgbGVmdC0+Y2hpbGQoMCktPm9wY29k
ZSgpICE9IEJpdEFuZCB8fCByaWdodC0+b3Bjb2RlKCkgIT0gWlNocikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IGxl
ZnQtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFza1ZhbHVl
ID0gbGVmdC0+Y2hpbGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBoaWdo
V2lkdGhWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBtVmFs
dWUgPSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxvd1dpZHRoVmFs
dWUgPSByaWdodC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRh
aW5zKG5WYWx1ZSkgfHwgbV9sb2NrZWQuY29udGFpbnMobVZhbHVlKSB8fCAhbWFza1ZhbHVlLT5o
YXNJbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmICghaW1tKGhpZ2hXaWR0aFZhbHVlKSB8fCBoaWdoV2lkdGhWYWx1ZS0+YXNJbnQoKSA8
IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWltbShsb3dXaWR0aFZhbHVlKSB8fCBsb3dXaWR0aFZhbHVlLT5hc0ludCgpIDwgMCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0
X3QgbWFzayA9IG1hc2tWYWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2sg
fHwgbWFzayAmIChtYXNrICsgMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrQml0Q291bnQgPSBXVEY6OmJpdENvdW50KG1h
c2spOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGhpZ2hXaWR0aCA9IGhpZ2hXaWR0aFZhbHVl
LT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxvd1dpZHRoID0gbG93V2lkdGhW
YWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29k
ZSA9PSBFeHRyMzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgIGlmIChsb3dXaWR0aCArIGhp
Z2hXaWR0aCAhPSBkYXRhc2l6ZSB8fCBtYXNrQml0Q291bnQgIT0gbG93V2lkdGgpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIHRtcChuVmFsdWUpLCB0bXAobVZhbHVlKSwgaW1tKGxvd1dpZHRoVmFsdWUpLCB0bXAobV92
YWx1ZSkpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQtPmNoaWxkKDApKTsK
KyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKyAgICAgICAgICAgICAgICBj
b21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kRVhUUihsZWZ0LCByaWdodCkg
fHwgdHJ5QXBwZW5kRVhUUihyaWdodCwgbGVmdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAg
ICAgICAgICAgCisKICAgICAgICAgICAgIC8vIEJGSSBQYXR0ZXJuOiBkID0gKChuICYgbWFzazEp
IDw8IGxzYikgfCAoZCAmIG1hc2syKQogICAgICAgICAgICAgLy8gV2hlcmU6IG1hc2sxID0gKCgx
IDw8IHdpZHRoKSAtIDEpCiAgICAgICAgICAgICAvLyAgICAgICAgbWFzazIgPSB+KG1hc2sxIDw8
IGxzYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApp
bmRleCBjNDc5ZTFmMzUzMTc3YWFmNGI0NGYzMzcyY2VkZjE2NzBmMWZhMWE0Li4zMjQxYjhkNDFk
YzhiYWNhNDcwZTlkNmViYmFmMmZlOTUyMWVjZDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCkBAIC0xNDYzLDYgKzE0NjMsMzMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBaU2hyKFNobCh2YWx1ZSwgYW1vdW50KSksIGFtb3VudCkKKyAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNrKQorICAgICAgICAgICAgLy8gQ29u
ZGl0aW9uczoKKyAgICAgICAgICAgIC8vIDEuIDAgPD0gYW1vdW50IDwgZGF0YXNpemUKKyAgICAg
ICAgICAgIC8vIDIuIHdpZHRoID0gZGF0YXNpemUgLSBhbW91bnQKKyAgICAgICAgICAgIC8vIDMu
IG1hc2sgaXMgIShtYXNrICYgKG1hc2sgKyAxKSkgd2hlcmUgYml0Q291bnQobWFzaykgPT0gd2lk
dGgKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU2hsCisg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKQor
ICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKSA+
PSAwCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAg
ICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkgPj0gMCkgeworICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGFtb3VudDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkt
PmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50MiA9IG1fdmFsdWUtPmNo
aWxkKDEpLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT50eXBlKCkgPT0gSW50NjQgPyA2NCA6IDMyOworICAg
ICAgICAgICAgICAgIGlmIChhbW91bnQxID09IGFtb3VudDIgJiYgYW1vdW50MSA8IGRhdGFzaXpl
KSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHdpZHRoID0gZGF0YXNpemUgLSBhbW91
bnQxOworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrID0gd2lkdGggPT0gZGF0YXNp
emUgPyAtMVVMTCA6ICgxVUxMIDw8IHdpZHRoKSAtIDFVTEw7CisgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBtYXNrVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhc2l6ZSA9PSAz
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXNrKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbWFza1ZhbHVl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1hc2spOworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1
ZT4oQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
LCBtYXNrVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogWlNocihCaXRB
bmQodmFsdWUsIG1hc2tTaGlmdCksIHNoaWZ0QW1vdW50KQogICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBCaXRBbmQoWlNocih2YWx1ZSwgc2hpZnRBbW91bnQpLCBtYXNrKQogICAgICAgICAgICAg
Ly8gQ29uZGl0aW9uczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCmluZGV4IGJlMjNmZjhiNzNmOGM1Zjc4NjhmZTExODZhNjQxOTkwZTM0M2Y4NzUu
LmRhNGU2MDJmNWYwMjlmNjg3YTUzMDEzNWQwZTg3MDdjOGZlMDJiZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtODY2LDYgKzg2Niwx
MiBAQCBhcm02NDogRXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIgVTpHOjMyLCBVOkc6MzIsIFU6Rzoz
MiwgWkQ6RzozMgogYXJtNjQ6IEV4dHJhY3RTaWduZWRCaXRmaWVsZDY0IFU6Rzo2NCwgVTpHOjMy
LCBVOkc6MzIsIEQ6Rzo2NAogICAgIFRtcCwgSW1tLCBJbW0sIFRtcAogCithcm02NDogRXh0cjMy
IFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAK
KworYXJtNjQ6IEV4dHI2NCBVOkc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKKyAgICBUbXAs
IFRtcCwgSW1tLCBUbXAKKwogIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyByYXguCiAjIEZJWE1FOiBU
aGlzIGZvcm11bGF0aW9uIG1lYW5zIHRoYXQgdGhlIGJvb2xlYW4gcmVzdWx0IGNhbm5vdCBiZSBw
dXQgaW4gZWF4LCBldmVuIHRob3VnaCBhbGwgdXNlcnMKICMgb2YgdGhpcyB3b3VsZCBiZSBPSyB3
aXRoIHRoYXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggODUwMDM1MzQ5OTVjMDZk
OWE0ZjVjZjZhNmM3YTIyNTM4NzZjMjQ0My4uOWU3ZDVhOWQ4ZGRjYzlmMWFkYzhiZmUxODRhNjU0
ZmJjODAzYjk4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtNDM2LDYgKzQzNiwx
MCBAQCB2b2lkIHRlc3RCSUMzMigpOwogdm9pZCB0ZXN0QklDNjQoKTsKIHZvaWQgdGVzdE9yTm90
MzIoKTsKIHZvaWQgdGVzdE9yTm90NjQoKTsKK3ZvaWQgdGVzdEJpdGZpZWxkWmVyb0V4dGVuZDMy
KCk7Cit2b2lkIHRlc3RCaXRmaWVsZFplcm9FeHRlbmQ2NCgpOwordm9pZCB0ZXN0RXh0cjMyKCk7
Cit2b2lkIHRlc3RFeHRyNjQoKTsKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJv
MzIoKTsKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQoKTsKIHZvaWQgdGVz
dEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18y
LmNwcAppbmRleCBkNDgyMzI0MjdhOGJkOTBlODJmMGI1YWRiNTkzNmUyMWU5MTNlZWZhLi40ZjU3
MTU3NTE5MWEzMjQyZjM2ZjVjZjMzNzZkNzcxMzkzODcxNTFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTM2OTksNiArMzY5OSwyMDAgQEAgdm9pZCB0ZXN0T3JOb3Q2
NCgpCiAgICAgfQogfQogCit2b2lkIHRlc3RCaXRmaWVsZFplcm9FeHRlbmQzMigpCit7CisgICAg
aWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE0LCAzMSB9OworCisgICAg
Ly8gVHVybiB0aGlzOiBaU2hyKFNobChuLCBhbW91bnQpKSwgYW1vdW50KQorICAgIC8vIEludG8g
dGhpczogQml0QW5kKG4sIG1hc2spCisgICAgLy8gQ29uZGl0aW9uczoKKyAgICAvLyAxLiAwIDw9
IGFtb3VudCA8IGRhdGFzaXplCisgICAgLy8gMi4gd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudAor
ICAgIC8vIDMuIG1hc2sgaXMgIShtYXNrICYgKG1hc2sgKyAxKSkgd2hlcmUgYml0Q291bnQobWFz
aykgPT0gd2lkdGgKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4sIHVpbnQzMl90IGFt
b3VudCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogYW1v
dW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
YW1vdW50KTsKKyAgICAgICAgVmFsdWUqIHNobFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTaGwsIE9yaWdpbigpLCBuVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgVmFs
dWUqIHpzaHJWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2lu
KCksIHNobFZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCB6c2hyVmFsdWUpOworCisgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpICYmIGFt
b3VudCA+IDApCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImFuZCIp
OworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbiwgYW1vdW50KTsKKyAg
ICB9OworCisgICAgdWludDMyX3QgZGF0YXNpemUgPSBDSEFSX0JJVCAqIHNpemVvZih1aW50MzJf
dCk7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAg
IGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICB1aW50MzJfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCA9IGRhdGFzaXplIC0g
YW1vdW50OworICAgICAgICAgICAgdWludDMyX3QgbWFzayA9IHdpZHRoID09IGRhdGFzaXplID8g
LTFVIDogKDFVIDw8IHdpZHRoKSAtIDFVOworICAgICAgICAgICAgdWludDMyX3QgbGhzID0gdGVz
dChuLCBhbW91bnQpOworICAgICAgICAgICAgdWludDMyX3QgcmhzID0gKG4gJiBtYXNrKTsKKyAg
ICAgICAgICAgIENIRUNLKGxocyA9PSByaHMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RCaXRmaWVsZFplcm9FeHRlbmQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDY0
X3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50
NjRfdCBuLCB1aW50NjRfdCBhbW91bnQpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIGFt
b3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGFtb3VudCk7CisgICAgICAgIFZhbHVlKiBzaGxWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgblZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZh
bHVlKiB6c2hyVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdp
bigpLCBzaGxWYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgenNoclZhbHVlKTsKKworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBh
bW91bnQgPiAwKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJhbmQi
KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIG4sIGFtb3VudCk7Cisg
ICAgfTsKKworICAgIHVpbnQ2NF90IGRhdGFzaXplID0gQ0hBUl9CSVQgKiBzaXplb2YodWludDY0
X3QpOworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgdWludDY0X3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgdWludDY0X3Qgd2lkdGggPSBkYXRhc2l6ZSAt
IGFtb3VudDsKKyAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSB3aWR0aCA9PSBkYXRhc2l6ZSA/
IC0xVUxMIDogKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAgICAgIHVpbnQ2NF90IGxo
cyA9IHRlc3QobiwgYW1vdW50KTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9IChuICYgbWFz
ayk7CisgICAgICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCB0ZXN0RXh0cjMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOyAgICAKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGxvd1dpZHRocyA9IHsgMCwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46ICgobiAm
IG1hc2sxKSA8PCBoaWdoV2lkdGgpIHwgKChtICYgbWFzazIpID4+IGxvd1dpZHRoKQorICAgIC8v
IFdoZXJlOiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRoCisgICAgLy8gICAgICAgIG1h
c2sxID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgIC8vICAgICAgICBtYXNrMiA9IH5tYXNrMQor
ICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWludDMyX3QgbSwgdWludDMyX3QgbWFz
azEsIHVpbnQzMl90IG1hc2syLCB1aW50MzJfdCBoaWdoV2lkdGgsIHVpbnQzMl90IGxvd1dpZHRo
KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBtYXNr
MVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1h
c2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2syVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazIpOworICAgICAgICBWYWx1ZSogaGlnaFdpZHRo
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaGln
aFdpZHRoKTsKKyAgICAgICAgVmFsdWUqIGxvd1dpZHRoVmFsdWUgPSByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbG93V2lkdGgpOworCisgICAgICAgIFZhbHVl
KiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3Jp
Z2luKCksIG5WYWx1ZSwgbWFzazFWYWx1ZSk7CisgICAgICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBsZWZ0QW5kVmFsdWUsIGhpZ2hX
aWR0aFZhbHVlKTsKKworICAgICAgICBWYWx1ZSogcmlnaHRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbVZhbHVlLCBtYXNrMlZhbHVlKTsK
KyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hy
LCBPcmlnaW4oKSwgcmlnaHRBbmRWYWx1ZSwgbG93V2lkdGhWYWx1ZSk7CisKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBP
cmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBsb3dXaWR0aCA+IDApCisgICAgICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImV4dHIiKTsKKyAgICAgICAgcmV0dXJu
IGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICB1aW50MzJfdCBk
YXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBmb3IgKGF1dG8gbk9w
ZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gbG93V2lkdGggOiBsb3dX
aWR0aHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7Cisg
ICAgICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIHVpbnQzMl90IGhpZ2hXaWR0aCA9IGRhdGFzaXplIC0gbG93V2lkdGg7CisgICAgICAgICAg
ICAgICAgdWludDMyX3QgbWFzazEgPSAoMVUgPDwgbG93V2lkdGgpIC0gMVU7CisgICAgICAgICAg
ICAgICAgdWludDMyX3QgbWFzazIgPSB+bWFzazE7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGVmdCA9IGhpZ2hXaWR0aCA9PSBkYXRhc2l6ZSA/IDBVIDogKChuICYgbWFzazEpIDw8IGhpZ2hX
aWR0aCk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgcmlnaHQgPSAoKG0gJiBtYXNrMikgPj4g
bG93V2lkdGgpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IGxlZnQgfCByaWdodDsK
KyAgICAgICAgICAgICAgICB1aW50MzJfdCBsaHMgPSB0ZXN0KG4sIG0sIG1hc2sxLCBtYXNrMiwg
aGlnaFdpZHRoLCBsb3dXaWR0aCk7CisgICAgICAgICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEV4dHI2NCgp
Cit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsgICAgCisgICAgVmVjdG9yPHVpbnQ2NF90PiBsb3dXaWR0aHMgPSB7IDAsIDM0
LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiAoKG4gJiBtYXNrMSkgPDwgaGlnaFdpZHRo
KSB8ICgobSAmIG1hc2syKSA+PiBsb3dXaWR0aCkKKyAgICAvLyBXaGVyZTogaGlnaFdpZHRoID0g
ZGF0YXNpemUgLSBsb3dXaWR0aAorICAgIC8vICAgICAgICBtYXNrMSA9ICgxIDw8IGxvd1dpZHRo
KSAtIDEKKyAgICAvLyAgICAgICAgbWFzazIgPSB+bWFzazEKKyAgICBhdXRvIHRlc3QgPSBbJl0g
KHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVpbnQ2NF90IG1hc2sxLCB1aW50NjRfdCBtYXNrMiwg
dWludDY0X3QgaGlnaFdpZHRoLCB1aW50NjRfdCBsb3dXaWR0aCkgLT4gdWludDY0X3QgeworICAg
ICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
ICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogbWFz
azFWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBt
YXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrMlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKyAgICAgICAgVmFsdWUqIGhpZ2hXaWR0
aFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGhp
Z2hXaWR0aCk7CisgICAgICAgIFZhbHVlKiBsb3dXaWR0aFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxvd1dpZHRoKTsKKworICAgICAgICBWYWx1
ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9y
aWdpbigpLCBuVmFsdWUsIG1hc2sxVmFsdWUpOworICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbGVmdEFuZFZhbHVlLCBoaWdo
V2lkdGhWYWx1ZSk7CisKKyAgICAgICAgVmFsdWUqIHJpZ2h0QW5kVmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG1WYWx1ZSwgbWFzazJWYWx1ZSk7
CisgICAgICAgIFZhbHVlKiByaWdodCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNo
ciwgT3JpZ2luKCksIHJpZ2h0QW5kVmFsdWUsIGxvd1dpZHRoVmFsdWUpOworCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwg
T3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkgJiYgbG93V2lkdGggPiAwKQorICAgICAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJleHRyIik7CisgICAgICAgIHJldHVy
biBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgdWludDY0X3Qg
ZGF0YXNpemUgPSBDSEFSX0JJVCAqIHNpemVvZih1aW50NjRfdCk7CisgICAgZm9yIChhdXRvIG5P
cGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6
IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGxvd1dpZHRoIDogbG93
V2lkdGhzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAg
ICAgICB1aW50NjRfdCBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRoOworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IG1hc2sxID0gKDFVTEwgPDwgbG93V2lkdGgpIC0gMVVMTDsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9IH5tYXNrMTsKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBsZWZ0ID0gaGlnaFdpZHRoID09IGRhdGFzaXplID8gMFVMTCA6ICgobiAmIG1hc2sxKSA8
PCBoaWdoV2lkdGgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJpZ2h0ID0gKChtICYgbWFz
azIpID4+IGxvd1dpZHRoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCByaHMgPSBsZWZ0IHwg
cmlnaHQ7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbGhzID0gdGVzdChuLCBtLCBtYXNrMSwg
bWFzazIsIGhpZ2hXaWR0aCwgbG93V2lkdGgpOworICAgICAgICAgICAgICAgIENIRUNLKGxocyA9
PSByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIHRlc3RC
aXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpCiB7CiAgICAgLy8gVHVybiB0aGlzOiAo
dG1wID4+IGltbSkgJiBtYXNrIApAQCAtNDU5OSw2ICs0NzkzLDEwIEBAIHZvaWQgYWRkQml0VGVz
dHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4m
IHRhc2tzKQogICAgIFJVTih0ZXN0QklDNjQoKSk7CiAgICAgUlVOKHRlc3RPck5vdDMyKCkpOwog
ICAgIFJVTih0ZXN0T3JOb3Q2NCgpKTsKKyAgICBSVU4odGVzdEJpdGZpZWxkWmVyb0V4dGVuZDMy
KCkpOworICAgIFJVTih0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kNjQoKSk7CisgICAgUlVOKHRlc3RF
eHRyMzIoKSk7CisgICAgUlVOKHRlc3RFeHRyNjQoKSk7CiAgICAgUlVOKHRlc3RJbnNlcnRTaWdu
ZWRCaXRmaWVsZEluWmVybzMyKCkpOwogICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJ
blplcm82NCgpKTsKICAgICBSVU4odGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432600</attachid>
            <date>2021-06-30 08:56:09 -0700</date>
            <delta_ts>2021-06-30 11:26:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227171-20210630105608.patch</filename>
            <type>text/plain</type>
            <size>25001</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDg4NmU5NDM1ZjA5ZDc3M2YxNjVlYzJiZDY5NDA3MWZjNDExZmQyLi5lMWMzZDg3OTFjOTBmMDky
OWRiZTkyZmY5YzlkZjZlMWQxYmE4YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NSBAQAorMjAyMS0wNi0yOSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXNlIEVYVFIgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIHR3byBtb2RpZmljYXRp
b25zOgorICAgICAgICAgICAgMS4gSW50cm9kdWNlIGEgc3RyZW5ndGggcmVkdWN0aW9uIHJ1bGUg
dG8gemVybyBleHRlbmQgYml0ZmllbGQuCisgICAgICAgICAgICAyLiBBZGQgRXh0cmFjdCBSZWdp
c3RlciAoRVhUUikgdG8gQWlyIG9wY29kZSB0byBzZXJ2ZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4K
KyAgICAgICAgCisgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyMjIFBhcnQgQSB6ZXJvIGV4dGVuZCBiaXRmaWVs
ZCAjIyMKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgICAgICBBIG5ldyBzdHJlbmd0aCByZWR1Y3Rpb24gcnVsZSBpcyBh
ZGRlZCBmb3IgdGhlIGNhbm9uaWNhbCBmb3JtIG9mIHRoZSB6ZXJvLWV4dGVuZCAKKyAgICAgICAg
Yml0ZmllbGQuCisKKyAgICAgICAgVHVybiB0aGlzOiBaU2hyKFNobCh2YWx1ZSwgYW1vdW50KSks
IGFtb3VudCkKKyAgICAgICAgSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisKKyAgICAg
ICAgd2l0aCBjb25zdHJhaW50czoKKyAgICAgICAgMS4gMCA8PSBhbW91bnQgPCBkYXRhc2l6ZQor
ICAgICAgICAyLiB3aWR0aCA9IGRhdGFzaXplIC0gYW1vdW50CisgICAgICAgIDMuIG1hc2sgaXMg
IShtYXNrICYgKG1hc2sgKyAxKSkgd2hlcmUgYml0Q291bnQobWFzaykgPT0gd2lkdGgKKworICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMjIyBQYXJ0IEIgRVhUUiAjIyMKKyAg
ICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIEdpdmVuIGluc3RydWN0aW9uOgor
ICAgICAgICBleHRyIFJkLCBSbiwgUm0sIGxvd1dpZHRoCisKKyAgICAgICAgRXh0cmFjdCByZWdp
c3RlciAoRVhUUikgZXh0cmFjdHMgYSByZWdpc3RlciBmcm9tIGEgcGFpciBvZiByZWdpc3RlcnMs
IHdoZXJlIAorICAgICAgICBjb25jYXQgPSBSbjpSbSBhbmQgUmQgPSBjb25jYXQ8bG93V2lkdGgg
KyBkYXRhc2l6ZSAtIDE6bG93V2lkdGg+LgorCisgICAgICAgIFRoZSBlcXVpdmFsZW50IHBhdHRl
cm4gb2YgdGhpcyBpbnN0cnVjdGlvbiBpczoKKworICAgICAgICBkID0gKChuICYgbWFzaykgPDwg
aGlnaFdpZHRoKSB8IChtID4+IGxvd1dpZHRoKQorICAgICAgICBoaWdoV2lkdGggPSBkYXRhc2l6
ZSAtIGxvd1dpZHRoCisgICAgICAgIG1hc2sgPSAoMSA8PCBsb3dXaWR0aCkgLSAxCisKKyAgICAg
ICAgR2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAg
ICAgSW50IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBtYXNrCisgICAg
ICAgIEludCBAMyA9IEJpdEFuZChAMCwgQDIpCisgICAgICAgIEludCBANCA9IGhpZ2hXaWR0aAor
ICAgICAgICBJbnQgQDUgPSBTaGwoQDMsIEA0KQorICAgICAgICBJbnQgQDYgPSBsb3dXaWR0aAor
ICAgICAgICBJbnQgQDcgPSBaU2hyKEAxLCBANSkpCisgICAgICAgIEludCBAOCA9IEJpdE9yKEA3
LCBANikKKyAgICAgICAgVm9pZEA5ID0gUmV0dXJuKEAxMCwgVGVybWluYWwpCisKKyAgICAgICAg
QmVmb3JlIEFkZGluZyBCSUM6CisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAg
IEluc2VydFVuc2lnbmVkQml0ZmllbGRJblplcm8gJXgwLCBoaWdoV2lkdGgsIGxvd1dpZHRoLCAl
eDAsIEA1CisgICAgICAgIFVyc2hpZnQgICAgICAgICAgICAgICAgICAgICAgJXgxLCAgbG93V2lk
dGgsICAgICAgJXgxLCAgICAgIEA3CisgICAgICAgIE9yICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJXgwLCAgICAgICAleDEsICAgICAgJXgwLCAgICAgIEA4CisgICAgICAgIFJldCAgICAgICAg
ICAgICAgICAgICAgICAgICAgJXgwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEA5CisKKyAg
ICAgICAgQWZ0ZXIgQWRkaW5nIEJJQzoKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAg
ICAgICAgRXh0cmFjdFJlZ2lzdGVyICAgJXgwLCAleDEsIGxvd1dpZHRoLCAleDAsIEAxMAorICAg
ICAgICBSZXQgICAgICAgICAgICAgICAleDAsICAgICAgICAgICAgICAgICAgICAgQDExCisKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0OjpleHRyYWN0UmVnaXN0ZXIzMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNNjQ6OmV4dHJhY3RSZWdpc3RlcjY0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0RXh0cmFjdFJlZ2lzdGVyMzIpOgor
ICAgICAgICAoSlNDOjp0ZXN0RXh0cmFjdFJlZ2lzdGVyNjQpOgorICAgICAgICAqIGIzL0IzTG93
ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAg
ICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAg
ICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKHRlc3RCaXRmaWVsZFplcm9FeHRlbmQz
Mik6CisgICAgICAgICh0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kNjQpOgorICAgICAgICAodGVzdEV4
dHJhY3RSZWdpc3RlcjMyKToKKyAgICAgICAgKHRlc3RFeHRyYWN0UmVnaXN0ZXI2NCk6CisgICAg
ICAgIChhZGRCaXRUZXN0cyk6CisKIDIwMjEtMDYtMjkgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVh
bmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIG5ldyBwYXR0ZXJuIHRvIGluc3RydWN0aW9u
IHNlbGVjdG9yIHRvIHVzZSBTQlggYW5kIFNCRklaIHN1cHBvcnRlZCBieSBBUk02NApAQCAtMTU4
LDggKzI0MCw4IEBACiAgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgogCiAgICAgICAg
IFRoaXMgcGF0Y2ggaW5jbHVkZXMgdGhyZWUgbW9kaWZpY2F0aW9uczoKLSAgICAgICAgICAgIDEu
IEFkZCBiaXQgY2xlYXIgKEJJQyksIG9yIG5vdCAoT1JOKSwgYW5kIGV4dHJhY3QgYW5kIGluc2Vy
dCBiaXRmaWVsZCBhdCBsb3dlciBlbmQgKEJGWElMKSAKLSAgICAgICAgICAgICAgIHRvIEFpciBv
cGNvZGUgdG8gc2VydmUgaW50cnVjaXRvbiBzZWxlY3Rvci4KKyAgICAgICAgICAgIDEuIEFkZCBi
aXQgY2xlYXIgKEJJQyksIG9yIG5vdCAoT1JOKSwgYW5kIGV4dHJhY3QgYW5kIGluc2VydCBiaXRm
aWVsZCBhdCB0aGUgCisgICAgICAgICAgICAgICBsb3dlciBlbmQgKEJGWElMKSB0byBBaXIgb3Bj
b2RlIHRvIHNlcnZlIGluc3RydWN0aW9uIHNlbGVjdG9yLgogICAgICAgICAgICAgMi4gQWRkIGJp
dGZpZWxkIGNsZWFyIChCRkMpIHRvIE1hY3JvQXNzZW1ibGVyLgogICAgICAgICAgICAgNC4gRG8g
cmVmYWN0b3JpbmcgLSByZW5hbWUgQWlyIG9wY29kZXMgYWRkZWQgaW4gdGhlIHByZXZpb3VzIHBh
dGNoZXMuCiAKQEAgLTE4MSw3ICsyNjMsNyBAQAogICAgICAgICBQYXR0ZXJuIDI6CiAgICAgICAg
ICAgICBkID0gbiAmIChtIF4gLTEpCiAKLSAgICAgICAgSW4gb3JkZXIgdG8gZ2V0IGJlbmVmaXRz
IGZvciBjb21wbGVtZW50IG9wZXJhdGlvbiwgY3VycmVudCBpbnN0cnVjdGlvbiBzZWxlY3RvciB1
c2VzIAorICAgICAgICBJbiBvcmRlciB0byBnZXQgYmVuZWZpdHMgZm9yIGNvbXBsZW1lbnQgb3Bl
cmF0aW9uLCB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBzZWxlY3RvciB1c2VzIAogICAgICAgICBt
dm4gaW5zdHJ1Y3Rpb24gdG8gbG93ZXIgdGhlIHBhdHRlcm4gdmFsdWUgXiAtMS4gVGhlbiwgYSBu
ZXcgc3RyZW5ndGggcmVkdWN0aW9uIHJ1bGUgaXMgCiAgICAgICAgIGludHJvZHVjZWQ6CiAgICAg
ICAgICAgICBUdXJuIHRoaXM6IC12YWx1ZSAtIDEgCkBAIC0xMDEzLDcgKzEwOTUsNyBAQAogICAg
ICAgICAgICAgQSkgQWRkIFVCRklaIHRvIGluc3RydWN0aW9uIHNlbGVjdG9yLgogICAgICAgICAg
ICAgQikgRml4IFVCRlgsIGludHJvZHVjZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNjk4NCwgCiAgICAgICAgICAgICAgICB0byBtYXRjaCBhbGwgcGF0dGVy
bnMuIAotICAgICAgICAgICAgQykgRml4IGVycm9yIGNvbmRpdGlvbiBpbiBvbmUgc3RyZW5ndGgg
cmVkdWN0aW9uIGludHJvZHVjZWQgCisgICAgICAgICAgICBDKSBGaXggZXJyb3IgY29uZGl0aW9u
IGluIG9uZSBzdHJlbmd0aCByZWR1Y3Rpb24gcnVsZSBpbnRyb2R1Y2VkIAogICAgICAgICAgICAg
ICAgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzEzOC4KIAog
ICAgICAgICBQYXJ0IEEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggNTdkZGRjYzEzMmE4YjQyYzMzYmQ2YzI2NWI1
MWJiZTZjOTVjNTJmNi4uYTZhNGVkZjg5NzUwNzVkNTk5NDE3NDhkYWY5MDM0OWQ2N2RiMWM5YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmgKQEAgLTUzOSw2ICs1MzksMTYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2Vt
Ymxlci5zYmZ4PDY0PihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5tX3ZhbHVlKTsKICAg
ICB9ICAgIAogCisgICAgdm9pZCBleHRyYWN0UmVnaXN0ZXIzMihSZWdpc3RlcklEIG4sIFJlZ2lz
dGVySUQgbSwgVHJ1c3RlZEltbTMyIGxzYiwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuZXh0cjwzMj4oZCwgbiwgbSwgbHNiLm1fdmFsdWUpOworICAgIH0KKworICAg
IHZvaWQgZXh0cmFjdFJlZ2lzdGVyNjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0
ZWRJbW0zMiBsc2IsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmV4
dHI8NjQ+KGQsIG4sIG0sIGxzYi5tX3ZhbHVlKTsKKyAgICB9IAorCiAgICAgdm9pZCBjbGVhckJp
dDY0KFJlZ2lzdGVySUQgYml0VG9DbGVhciwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNj
cmF0Y2hGb3JNYXNrID0gSW52YWxpZEdQUlJlZykKICAgICB7CiAgICAgICAgIGlmIChzY3JhdGNo
Rm9yTWFzayA9PSBJbnZhbGlkR1BSUmVnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAppbmRleCAwM2QwNjFhYzgxNzkwN2QxODA2ODg4YzEwN2Y2NmQxODhh
OGRhZjE4Li5iMWFiYTEwZThjOTJhOTQzNzVmNTUxMTMyODA3ZDIxZjk0OGVlMmFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMTU3MCw2ICsx
NTcwLDc2IEBAIHZvaWQgdGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDY0KCkKICAgICB9CiB9CiAK
K3ZvaWQgdGVzdEV4dHJhY3RSZWdpc3RlcjMyKCkKK3sKKyAgICBWZWN0b3I8dWludDMyX3Q+IGlt
bXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIsIDQyLCA1NiwgNjIsIDYzLCA2NCB9OworICAg
IHVpbnQzMl90IGRhdGFzaXplID0gQ0hBUl9CSVQgKiBzaXplb2YodWludDMyX3QpOworCisgICAg
Zm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBp
bnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBsc2IgOiBpbW1zKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKDAgPD0gbHNiICYmIGxzYiA8IGRhdGFzaXplKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZXh0cmFjdFJlZ2lzdGVyMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5leHRyYWN0UmVnaXN0ZXIz
MihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0
RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAvLyAoKG4g
JiBtYXNrKSA8PCBoaWdoV2lkdGgpIHwgKG0gPj4gbG93V2lkdGgpCisgICAgICAgICAgICAgICAg
ICAgIC8vIFdoZXJlOiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRoCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICBtYXNrID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxzYjsKKyAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgbWFzayA9ICgxVSA8PCBsc2IpIC0gMVU7CisgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGxlZnQgPSBoaWdoV2lkdGggPT0gZGF0YXNpemUgPyAwVSA6IChu
ICYgbWFzaykgPDwgaGlnaFdpZHRoOworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByaWdo
dCA9IChzdGF0aWNfY2FzdDx1aW50MzJfdD4obSkgPj4gbHNiKTsKKyAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgcmhzID0gbGVmdCB8IHJpZ2h0OworICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBsaHMgPSBpbnZva2U8dWludDMyX3Q+KGV4dHJhY3RSZWdpc3RlcjMyLCBuLCBtKTsKKyAg
ICAgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0RXh0cmFjdFJl
Z2lzdGVyNjQoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsgMCwgMSwgNSwgNywg
MzAsIDMxLCAzMiwgNDIsIDU2LCA2MiwgNjMsIDY0IH07CisgICAgdWludDY0X3QgZGF0YXNpemUg
PSBDSEFSX0JJVCAqIHNpemVvZih1aW50NjRfdCk7CisKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGxzYiA6IGltbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
MCA8IGxzYiAmJiBsc2IgPCBkYXRhc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGV4
dHJhY3RSZWdpc3RlcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuZXh0cmFjdFJlZ2lzdGVyNjQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGxzYiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgaGlnaFdpZHRoID0gZGF0YXNp
emUgLSBsc2I7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSAoMVVMTCA8PCBs
c2IpIC0gMVVMTDsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbGVmdCA9IGhpZ2hXaWR0
aCA9PSBkYXRhc2l6ZSA/IDBVTEwgOiAobiAmIG1hc2spIDw8IGhpZ2hXaWR0aDsKKyAgICAgICAg
ICAgICAgICAgICAgdWludDY0X3QgcmlnaHQgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG0pID4+
IGxzYik7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9IGxlZnQgfCByaWdodDsK
KyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbGhzID0gaW52b2tlPHVpbnQ2NF90PihleHRy
YWN0UmVnaXN0ZXI2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywg
cmhzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkK
QEAgLTM3NjAsNiArMzgzMCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lH
Tk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0
ZmllbGRJblplcm82NCgpKTsKICAgICBSVU4odGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCkp
OwogICAgIFJVTih0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQoKSk7CisgICAgUlVOKHRlc3RF
eHRyYWN0UmVnaXN0ZXIzMigpKTsKKyAgICBSVU4odGVzdEV4dHJhY3RSZWdpc3RlcjY0KCkpOwog
I2VuZGlmCiAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGYxMjAzMWMxZGY2MWI2
NGM3MmFiNGU3YTM4ZTcyMjMzZjliYjkxOGQuLmE5NWMzMmM5M2U1ZmU3YzQzMDNhMzY4MmVjOTYx
NTA4Yzk1ODQ1MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CkBAIC0yODIyLDYgKzI4MjIsNDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZhbHVlKiBsZWZ0
ID0gbV92YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBtX3ZhbHVl
LT5jaGlsZCgxKTsKIAorICAgICAgICAgICAgLy8gRVhUUiBQYXR0ZXJuOiBkID0gKChuICYgbWFz
aykgPDwgaGlnaFdpZHRoKSB8IChtID4+IGxvd1dpZHRoKQorICAgICAgICAgICAgLy8gV2hlcmU6
IGhpZ2hXaWR0aCA9IGRhdGFzaXplIC0gbG93V2lkdGgKKyAgICAgICAgICAgIC8vICAgICAgICBt
YXNrID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRFWFRS
ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEV4dHJhY3RSZWdpc3RlcjMy
LCBFeHRyYWN0UmVnaXN0ZXI2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJn
OjpUbXApKSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBTaGwgfHwgbGVmdC0+Y2hpbGQoMCktPm9wY29kZSgp
ICE9IEJpdEFuZCB8fCByaWdodC0+b3Bjb2RlKCkgIT0gWlNocikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IGxlZnQt
PmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbWFza1ZhbHVlID0g
bGVmdC0+Y2hpbGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBoaWdoV2lk
dGhWYWx1ZSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBtVmFsdWUg
PSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGxvd1dpZHRoVmFsdWUg
PSByaWdodC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5z
KG5WYWx1ZSkgfHwgbV9sb2NrZWQuY29udGFpbnMobVZhbHVlKSB8fCAhbWFza1ZhbHVlLT5oYXNJ
bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmICghaW1tKGhpZ2hXaWR0aFZhbHVlKSB8fCBoaWdoV2lkdGhWYWx1ZS0+YXNJbnQoKSA8IDAp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAo
IWltbShsb3dXaWR0aFZhbHVlKSB8fCBsb3dXaWR0aFZhbHVlLT5hc0ludCgpIDwgMCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0X3Qg
bWFzayA9IG1hc2tWYWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hc2sgfHwg
bWFzayAmIChtYXNrICsgMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrQml0Q291bnQgPSBXVEY6OmJpdENvdW50KG1hc2sp
OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGhpZ2hXaWR0aCA9IGhpZ2hXaWR0aFZhbHVlLT5h
c0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxvd1dpZHRoID0gbG93V2lkdGhWYWx1
ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG9wY29kZSA9
PSBFeHRyYWN0UmVnaXN0ZXIzMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAgICAgaWYgKGxvd1dp
ZHRoICsgaGlnaFdpZHRoICE9IGRhdGFzaXplIHx8IG1hc2tCaXRDb3VudCAhPSBsb3dXaWR0aCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgYXBw
ZW5kKG9wY29kZSwgdG1wKG5WYWx1ZSksIHRtcChtVmFsdWUpLCBpbW0obG93V2lkdGhWYWx1ZSks
IHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdC0+Y2hp
bGQoMCkpOworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAg
ICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRFWFRSKGxlZnQs
IHJpZ2h0KSB8fCB0cnlBcHBlbmRFWFRSKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47ICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gQkZJIFBhdHRlcm46IGQgPSAoKG4g
JiBtYXNrMSkgPDwgbHNiKSB8IChkICYgbWFzazIpCiAgICAgICAgICAgICAvLyBXaGVyZTogbWFz
azEgPSAoKDEgPDwgd2lkdGgpIC0gMSkKICAgICAgICAgICAgIC8vICAgICAgICBtYXNrMiA9IH4o
bWFzazEgPDwgbHNiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVk
dWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguY3BwCmluZGV4IGM0NzllMWYzNTMxNzdhYWY0YjQ0ZjMzNzJjZWRmMTY3MGYxZmExYTQuLjMy
NDFiOGQ0MWRjOGJhY2E0NzBlOWQ2ZWJiYWYyZmU5NTIxZWNkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAgLTE0NjMsNiArMTQ2MywzMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IFpTaHIoU2hsKHZhbHVlLCBhbW91bnQpKSwgYW1vdW50KQor
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgICAgICAg
ICAvLyBDb25kaXRpb25zOgorICAgICAgICAgICAgLy8gMS4gMCA8PSBhbW91bnQgPCBkYXRhc2l6
ZQorICAgICAgICAgICAgLy8gMi4gd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudAorICAgICAgICAg
ICAgLy8gMy4gbWFzayBpcyAhKG1hc2sgJiAobWFzayArIDEpKSB3aGVyZSBiaXRDb3VudChtYXNr
KSA9PSB3aWR0aAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBTaGwKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhh
c0ludCgpCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5h
c0ludCgpID49IDAKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50
KCkKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSA+PSAwKSB7
CisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBhbW91bnQyID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNp
emUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQ2NCA/IDY0IDog
MzI7CisgICAgICAgICAgICAgICAgaWYgKGFtb3VudDEgPT0gYW1vdW50MiAmJiBhbW91bnQxIDwg
ZGF0YXNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgd2lkdGggPSBkYXRhc2l6
ZSAtIGFtb3VudDE7CisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSB3aWR0aCA9
PSBkYXRhc2l6ZSA/IC0xVUxMIDogKDFVTEwgPDwgd2lkdGgpIC0gMVVMTDsKKyAgICAgICAgICAg
ICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFz
aXplID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgbWFza1ZhbHVlID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1h
c2spOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBt
YXNrVmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihtX2luZGV4LCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbWFzayk7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCksIG1hc2tWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBa
U2hyKEJpdEFuZCh2YWx1ZSwgbWFza1NoaWZ0KSwgc2hpZnRBbW91bnQpCiAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IEJpdEFuZChaU2hyKHZhbHVlLCBzaGlmdEFtb3VudCksIG1hc2spCiAgICAg
ICAgICAgICAvLyBDb25kaXRpb25zOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggYmUyM2ZmOGI3M2Y4YzVmNzg2OGZlMTE4NmE2NDE5OTBl
MzQzZjg3NS4uNGI4YTI4YmI3YzhjOTA1OTViMmY4ODE0OTA4MGRmZjk0YjAwMjAzYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC04NjYs
NiArODY2LDEyIEBAIGFybTY0OiBFeHRyYWN0U2lnbmVkQml0ZmllbGQzMiBVOkc6MzIsIFU6Rzoz
MiwgVTpHOjMyLCBaRDpHOjMyCiBhcm02NDogRXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQgVTpHOjY0
LCBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CiAgICAgVG1wLCBJbW0sIEltbSwgVG1wCiAKK2FybTY0
OiBFeHRyYWN0UmVnaXN0ZXIzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAg
VG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBFeHRyYWN0UmVnaXN0ZXI2NCBVOkc6NjQsIFU6
RzozMiwgVTpHOjMyLCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKwogIyBUaGUgZmly
c3Qgb3BlcmFuZCBpcyByYXguCiAjIEZJWE1FOiBUaGlzIGZvcm11bGF0aW9uIG1lYW5zIHRoYXQg
dGhlIGJvb2xlYW4gcmVzdWx0IGNhbm5vdCBiZSBwdXQgaW4gZWF4LCBldmVuIHRob3VnaCBhbGwg
dXNlcnMKICMgb2YgdGhpcyB3b3VsZCBiZSBPSyB3aXRoIHRoYXQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmgKaW5kZXggODUwMDM1MzQ5OTVjMDZkOWE0ZjVjZjZhNmM3YTIyNTM4NzZjMjQ0My4u
NzQ0NTRhMGJiN2NkMjNkMjY2ODI4ODY4YzM0NDg0ZmRjOWZhMjVjYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaApAQCAtNDM2LDYgKzQzNiwxMCBAQCB2b2lkIHRlc3RCSUMzMigpOwogdm9p
ZCB0ZXN0QklDNjQoKTsKIHZvaWQgdGVzdE9yTm90MzIoKTsKIHZvaWQgdGVzdE9yTm90NjQoKTsK
K3ZvaWQgdGVzdEJpdGZpZWxkWmVyb0V4dGVuZDMyKCk7Cit2b2lkIHRlc3RCaXRmaWVsZFplcm9F
eHRlbmQ2NCgpOwordm9pZCB0ZXN0RXh0cmFjdFJlZ2lzdGVyMzIoKTsKK3ZvaWQgdGVzdEV4dHJh
Y3RSZWdpc3RlcjY0KCk7CiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMyKCk7
CiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzY0KCk7CiB2b2lkIHRlc3RFeHRy
YWN0U2lnbmVkQml0ZmllbGQzMigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiM18yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAK
aW5kZXggZDQ4MjMyNDI3YThiZDkwZTgyZjBiNWFkYjU5MzZlMjFlOTEzZWVmYS4uNDNhNmYwYWM2
ZjAyMzk1OTI1ODNiY2QxMGM4OWQ5NGM4ZDVmYjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzIuY3BwCkBAIC0zNjk5LDYgKzM2OTksMjAwIEBAIHZvaWQgdGVzdE9yTm90NjQoKQog
ICAgIH0KIH0KIAordm9pZCB0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kMzIoKQoreworICAgIGlmIChK
U0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47Cisg
ICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNCwgMzEgfTsKKworICAgIC8vIFR1
cm4gdGhpczogWlNocihTaGwobiwgYW1vdW50KSksIGFtb3VudCkKKyAgICAvLyBJbnRvIHRoaXM6
IEJpdEFuZChuLCBtYXNrKQorICAgIC8vIENvbmRpdGlvbnM6CisgICAgLy8gMS4gMCA8PSBhbW91
bnQgPCBkYXRhc2l6ZQorICAgIC8vIDIuIHdpZHRoID0gZGF0YXNpemUgLSBhbW91bnQKKyAgICAv
LyAzLiBtYXNrIGlzICEobWFzayAmIChtYXNrICsgMSkpIHdoZXJlIGJpdENvdW50KG1hc2spID09
IHdpZHRoCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBuLCB1aW50MzJfdCBhbW91bnQp
IC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
IAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3Vu
dCk7CisgICAgICAgIFZhbHVlKiBzaGxWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgU2hsLCBPcmlnaW4oKSwgblZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB6
c2hyVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBz
aGxWYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgenNoclZhbHVlKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBhbW91bnQg
PiAwKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJhbmQiKTsKKyAg
ICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIGFtb3VudCk7CisgICAgfTsK
KworICAgIHVpbnQzMl90IGRhdGFzaXplID0gQ0hBUl9CSVQgKiBzaXplb2YodWludDMyX3QpOwor
ICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgdWludDMyX3Qgd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3Vu
dDsKKyAgICAgICAgICAgIHVpbnQzMl90IG1hc2sgPSB3aWR0aCA9PSBkYXRhc2l6ZSA/IC0xVSA6
ICgxVSA8PCB3aWR0aCkgLSAxVTsKKyAgICAgICAgICAgIHVpbnQzMl90IGxocyA9IHRlc3Qobiwg
YW1vdW50KTsKKyAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IChuICYgbWFzayk7CisgICAgICAg
ICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
Qml0ZmllbGRaZXJvRXh0ZW5kNjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQ2NF90PiBh
bW91bnRzID0geyAwLCAzNCwgNjMgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3Qg
biwgdWludDY0X3QgYW1vdW50KSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9j
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAg
IFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBhbW91bnRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91
bnQpOworICAgICAgICBWYWx1ZSogc2hsVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFNobCwgT3JpZ2luKCksIG5WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBWYWx1ZSog
enNoclZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwg
c2hsVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHpzaHJWYWx1ZSk7CisKKyAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkgJiYgYW1vdW50
ID4gMCkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiYW5kIik7Cisg
ICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBuLCBhbW91bnQpOworICAgIH07
CisKKyAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQ2NF90KTsK
KyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG4gPSBuT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHdpZHRoID0gZGF0YXNpemUgLSBhbW91
bnQ7CisgICAgICAgICAgICB1aW50NjRfdCBtYXNrID0gd2lkdGggPT0gZGF0YXNpemUgPyAtMVVM
TCA6ICgxVUxMIDw8IHdpZHRoKSAtIDFVTEw7CisgICAgICAgICAgICB1aW50NjRfdCBsaHMgPSB0
ZXN0KG4sIGFtb3VudCk7CisgICAgICAgICAgICB1aW50NjRfdCByaHMgPSAobiAmIG1hc2spOwor
ICAgICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgdGVzdEV4dHJhY3RSZWdpc3RlcjMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZh
dWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOyAgICAKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGxvd1dpZHRocyA9IHsgMCwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46
ICgobiAmIG1hc2sxKSA8PCBoaWdoV2lkdGgpIHwgKChtICYgbWFzazIpID4+IGxvd1dpZHRoKQor
ICAgIC8vIFdoZXJlOiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRoCisgICAgLy8gICAg
ICAgIG1hc2sxID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgIC8vICAgICAgICBtYXNrMiA9IH5t
YXNrMQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWludDMyX3QgbSwgdWludDMy
X3QgbWFzazEsIHVpbnQzMl90IG1hc2syLCB1aW50MzJfdCBoaWdoV2lkdGgsIHVpbnQzMl90IGxv
d1dpZHRoKSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBt
VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMs
IE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVl
KiBtYXNrMVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2syVmFsdWUgPSByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazIpOworICAgICAgICBWYWx1ZSogaGln
aFdpZHRoVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgaGlnaFdpZHRoKTsKKyAgICAgICAgVmFsdWUqIGxvd1dpZHRoVmFsdWUgPSByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbG93V2lkdGgpOworCisgICAgICAg
IFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFu
ZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFzazFWYWx1ZSk7CisgICAgICAgIFZhbHVlKiBsZWZ0ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBsZWZ0QW5kVmFsdWUs
IGhpZ2hXaWR0aFZhbHVlKTsKKworICAgICAgICBWYWx1ZSogcmlnaHRBbmRWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbVZhbHVlLCBtYXNrMlZh
bHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBaU2hyLCBPcmlnaW4oKSwgcmlnaHRBbmRWYWx1ZSwgbG93V2lkdGhWYWx1ZSk7CisKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dE9yLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBsb3dXaWR0aCA+IDApCisg
ICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImV4dHIiKTsKKyAgICAgICAg
cmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICB1aW50
MzJfdCBkYXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBmb3IgKGF1
dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVy
YW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gbG93V2lkdGgg
OiBsb3dXaWR0aHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFs
dWU7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGhpZ2hXaWR0aCA9IGRhdGFzaXplIC0gbG93V2lkdGg7CisgICAg
ICAgICAgICAgICAgdWludDMyX3QgbWFzazEgPSAoMVUgPDwgbG93V2lkdGgpIC0gMVU7CisgICAg
ICAgICAgICAgICAgdWludDMyX3QgbWFzazIgPSB+bWFzazE7CisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgbGVmdCA9IGhpZ2hXaWR0aCA9PSBkYXRhc2l6ZSA/IDBVIDogKChuICYgbWFzazEpIDw8
IGhpZ2hXaWR0aCk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgcmlnaHQgPSAoKG0gJiBtYXNr
MikgPj4gbG93V2lkdGgpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IGxlZnQgfCBy
aWdodDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBsaHMgPSB0ZXN0KG4sIG0sIG1hc2sxLCBt
YXNrMiwgaGlnaFdpZHRoLCBsb3dXaWR0aCk7CisgICAgICAgICAgICAgICAgQ0hFQ0sobGhzID09
IHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEV4
dHJhY3RSZWdpc3RlcjY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOyAgICAKKyAgICBWZWN0b3I8dWludDY0X3Q+IGxv
d1dpZHRocyA9IHsgMCwgMzQsIDYzIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46ICgobiAmIG1h
c2sxKSA8PCBoaWdoV2lkdGgpIHwgKChtICYgbWFzazIpID4+IGxvd1dpZHRoKQorICAgIC8vIFdo
ZXJlOiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRoCisgICAgLy8gICAgICAgIG1hc2sx
ID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgIC8vICAgICAgICBtYXNrMiA9IH5tYXNrMQorICAg
IGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbiwgdWludDY0X3QgbSwgdWludDY0X3QgbWFzazEs
IHVpbnQ2NF90IG1hc2syLCB1aW50NjRfdCBoaWdoV2lkdGgsIHVpbnQ2NF90IGxvd1dpZHRoKSAt
PiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIFZhbHVlKiBtYXNrMVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2syVmFsdWUgPSByb290
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazIpOworICAgICAg
ICBWYWx1ZSogaGlnaFdpZHRoVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgaGlnaFdpZHRoKTsKKyAgICAgICAgVmFsdWUqIGxvd1dpZHRoVmFsdWUg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbG93V2lkdGgp
OworCisgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFzazFWYWx1ZSk7CisgICAgICAgIFZh
bHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBs
ZWZ0QW5kVmFsdWUsIGhpZ2hXaWR0aFZhbHVlKTsKKworICAgICAgICBWYWx1ZSogcmlnaHRBbmRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbVZh
bHVlLCBtYXNrMlZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgcmlnaHRBbmRWYWx1ZSwgbG93V2lkdGhWYWx1
ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBsb3dX
aWR0aCA+IDApCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImV4dHIi
KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07
CisKKyAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQ2NF90KTsK
KyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8gbG93V2lkdGggOiBsb3dXaWR0aHMpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbSA9IG1PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGhpZ2hXaWR0aCA9IGRhdGFzaXplIC0gbG93
V2lkdGg7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzazEgPSAoMVVMTCA8PCBsb3dXaWR0
aCkgLSAxVUxMOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2syID0gfm1hc2sxOworICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IGxlZnQgPSBoaWdoV2lkdGggPT0gZGF0YXNpemUgPyAwVUxM
IDogKChuICYgbWFzazEpIDw8IGhpZ2hXaWR0aCk7CisgICAgICAgICAgICAgICAgdWludDY0X3Qg
cmlnaHQgPSAoKG0gJiBtYXNrMikgPj4gbG93V2lkdGgpOworICAgICAgICAgICAgICAgIHVpbnQ2
NF90IHJocyA9IGxlZnQgfCByaWdodDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBsaHMgPSB0
ZXN0KG4sIG0sIG1hc2sxLCBtYXNrMiwgaGlnaFdpZHRoLCBsb3dXaWR0aCk7CisgICAgICAgICAg
ICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKIHZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCkKIHsKICAg
ICAvLyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCkBAIC00NTk5LDYgKzQ3OTMsMTAg
QEAgdm9pZCBhZGRCaXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RCSUM2NCgpKTsKICAgICBSVU4o
dGVzdE9yTm90MzIoKSk7CiAgICAgUlVOKHRlc3RPck5vdDY0KCkpOworICAgIFJVTih0ZXN0Qml0
ZmllbGRaZXJvRXh0ZW5kMzIoKSk7CisgICAgUlVOKHRlc3RCaXRmaWVsZFplcm9FeHRlbmQ2NCgp
KTsKKyAgICBSVU4odGVzdEV4dHJhY3RSZWdpc3RlcjMyKCkpOworICAgIFJVTih0ZXN0RXh0cmFj
dFJlZ2lzdGVyNjQoKSk7CiAgICAgUlVOKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzMy
KCkpOwogICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82NCgpKTsKICAgICBS
VU4odGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432613</attachid>
            <date>2021-06-30 11:26:58 -0700</date>
            <delta_ts>2021-06-30 13:22:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227171-20210630132656.patch</filename>
            <type>text/plain</type>
            <size>25071</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDg4NmU5NDM1ZjA5ZDc3M2YxNjVlYzJiZDY5NDA3MWZjNDExZmQyLi4wYThlNDk4YzFjMDIxZTdl
NzJjYzY5MDJkYjVjZDhmMWU1NGY5ZThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NSBAQAorMjAyMS0wNi0yOSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXNlIEVYVFIgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIHR3byBtb2RpZmljYXRp
b25zOgorICAgICAgICAgICAgMS4gSW50cm9kdWNlIGEgc3RyZW5ndGggcmVkdWN0aW9uIHJ1bGUg
dG8gemVybyBleHRlbmQgYml0ZmllbGQuCisgICAgICAgICAgICAyLiBBZGQgRXh0cmFjdCBSZWdp
c3RlciAoRVhUUikgdG8gQWlyIG9wY29kZSB0byBzZXJ2ZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4K
KworICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgICAgICMjIyBQYXJ0IEEgemVybyBleHRlbmQgYml0ZmllbGQgIyMjCisg
ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgQSBuZXcgc3RyZW5ndGggcmVkdWN0aW9uIHJ1bGUgaXMgYWRkZWQgZm9y
IHRoZSBjYW5vbmljYWwgZm9ybSBvZiB0aGUgemVyby1leHRlbmQgCisgICAgICAgIGJpdGZpZWxk
LgorCisgICAgICAgIFR1cm4gdGhpczogWlNocihTaGwodmFsdWUsIGFtb3VudCkpLCBhbW91bnQp
CisgICAgICAgIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNrKQorCisgICAgICAgIHdpdGgg
Y29uc3RyYWludHM6CisgICAgICAgIDEuIDAgPD0gYW1vdW50IDwgZGF0YXNpemUKKyAgICAgICAg
Mi4gd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudAorICAgICAgICAzLiBtYXNrIGlzICEobWFzayAm
IChtYXNrICsgMSkpIHdoZXJlIGJpdENvdW50KG1hc2spID09IHdpZHRoCisKKyAgICAgICAgLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIyMgUGFydCBCIEVYVFIgIyMjCisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBHaXZlbiBpbnN0cnVjdGlvbjoKKyAgICAgICAg
ZXh0ciBSZCwgUm4sIFJtLCBsb3dXaWR0aAorCisgICAgICAgIEV4dHJhY3QgcmVnaXN0ZXIgKEVY
VFIpIGV4dHJhY3RzIGEgcmVnaXN0ZXIgZnJvbSBhIHBhaXIgb2YgcmVnaXN0ZXJzLCB3aGVyZSAK
KyAgICAgICAgY29uY2F0ID0gUm46Um0gYW5kIFJkID0gY29uY2F0PGxvd1dpZHRoICsgZGF0YXNp
emUgLSAxOmxvd1dpZHRoPi4KKworICAgICAgICBUaGUgZXF1aXZhbGVudCBwYXR0ZXJuIG9mIHRo
aXMgaW5zdHJ1Y3Rpb24gaXM6CisKKyAgICAgICAgZCA9ICgobiAmIG1hc2spIDw8IGhpZ2hXaWR0
aCkgfCAobSA+PiBsb3dXaWR0aCkKKyAgICAgICAgaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsb3dX
aWR0aAorICAgICAgICBtYXNrID0gKDEgPDwgbG93V2lkdGgpIC0gMQorCisgICAgICAgIEdpdmVu
IEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBA
MSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gbWFzaworICAgICAgICBJbnQg
QDMgPSBCaXRBbmQoQDAsIEAyKQorICAgICAgICBJbnQgQDQgPSBoaWdoV2lkdGgKKyAgICAgICAg
SW50IEA1ID0gU2hsKEAzLCBANCkKKyAgICAgICAgSW50IEA2ID0gbG93V2lkdGgKKyAgICAgICAg
SW50IEA3ID0gWlNocihAMSwgQDYpCisgICAgICAgIEludCBAOCA9IEJpdE9yKEA3LCBANSkKKyAg
ICAgICAgVm9pZEA5ID0gUmV0dXJuKEAxMCwgVGVybWluYWwpCisKKyAgICAgICAgQmVmb3JlIEFk
ZGluZyBCSUM6CisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIEluc2VydFVu
c2lnbmVkQml0ZmllbGRJblplcm8gJXgwLCBoaWdoV2lkdGgsIGxvd1dpZHRoLCAleDAsIEA1Cisg
ICAgICAgIFVyc2hpZnQgICAgICAgICAgICAgICAgICAgICAgJXgxLCAgbG93V2lkdGgsICAgICAg
JXgxLCAgICAgIEA3CisgICAgICAgIE9yICAgICAgICAgICAgICAgICAgICAgICAgICAgJXgwLCAg
ICAgICAleDEsICAgICAgJXgwLCAgICAgIEA4CisgICAgICAgIFJldCAgICAgICAgICAgICAgICAg
ICAgICAgICAgJXgwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEA5CisKKyAgICAgICAgQWZ0
ZXIgQWRkaW5nIEJJQzoKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAgRXh0
cmFjdFJlZ2lzdGVyICAgJXgwLCAleDEsIGxvd1dpZHRoLCAleDAsIEA4CisgICAgICAgIFJldCAg
ICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAgICAgICBAOQorCisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk02NDo6ZXh0cmFjdFJlZ2lzdGVyMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0OjpleHRyYWN0UmVnaXN0ZXI2NCk6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNt
LmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdEV4dHJhY3RSZWdpc3RlcjMyKToKKyAgICAgICAgKEpT
Qzo6dGVzdEV4dHJhY3RSZWdpc3RlcjY0KToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3Bw
OgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjNfMi5jcHA6CisgICAgICAgICh0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kMzIpOgorICAgICAg
ICAodGVzdEJpdGZpZWxkWmVyb0V4dGVuZDY0KToKKyAgICAgICAgKHRlc3RFeHRyYWN0UmVnaXN0
ZXIzMik6CisgICAgICAgICh0ZXN0RXh0cmFjdFJlZ2lzdGVyNjQpOgorICAgICAgICAoYWRkQml0
VGVzdHMpOgorCiAyMDIxLTA2LTI5ICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBpbnN0cnVjdGlvbiBzZWxlY3RvciB0
byB1c2UgU0JYIGFuZCBTQkZJWiBzdXBwb3J0ZWQgYnkgQVJNNjQKQEAgLTE1OCw4ICsyNDAsOCBA
QAogICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KIAogICAgICAgICBUaGlzIHBhdGNo
IGluY2x1ZGVzIHRocmVlIG1vZGlmaWNhdGlvbnM6Ci0gICAgICAgICAgICAxLiBBZGQgYml0IGNs
ZWFyIChCSUMpLCBvciBub3QgKE9STiksIGFuZCBleHRyYWN0IGFuZCBpbnNlcnQgYml0ZmllbGQg
YXQgbG93ZXIgZW5kIChCRlhJTCkgCi0gICAgICAgICAgICAgICB0byBBaXIgb3Bjb2RlIHRvIHNl
cnZlIGludHJ1Y2l0b24gc2VsZWN0b3IuCisgICAgICAgICAgICAxLiBBZGQgYml0IGNsZWFyIChC
SUMpLCBvciBub3QgKE9STiksIGFuZCBleHRyYWN0IGFuZCBpbnNlcnQgYml0ZmllbGQgYXQgdGhl
IAorICAgICAgICAgICAgICAgbG93ZXIgZW5kIChCRlhJTCkgdG8gQWlyIG9wY29kZSB0byBzZXJ2
ZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4KICAgICAgICAgICAgIDIuIEFkZCBiaXRmaWVsZCBjbGVh
ciAoQkZDKSB0byBNYWNyb0Fzc2VtYmxlci4KICAgICAgICAgICAgIDQuIERvIHJlZmFjdG9yaW5n
IC0gcmVuYW1lIEFpciBvcGNvZGVzIGFkZGVkIGluIHRoZSBwcmV2aW91cyBwYXRjaGVzLgogCkBA
IC0xODEsNyArMjYzLDcgQEAKICAgICAgICAgUGF0dGVybiAyOgogICAgICAgICAgICAgZCA9IG4g
JiAobSBeIC0xKQogCi0gICAgICAgIEluIG9yZGVyIHRvIGdldCBiZW5lZml0cyBmb3IgY29tcGxl
bWVudCBvcGVyYXRpb24sIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IgdXNlcyAKKyAgICAg
ICAgSW4gb3JkZXIgdG8gZ2V0IGJlbmVmaXRzIGZvciBjb21wbGVtZW50IG9wZXJhdGlvbiwgdGhl
IGN1cnJlbnQgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IgdXNlcyAKICAgICAgICAgbXZuIGluc3RydWN0
aW9uIHRvIGxvd2VyIHRoZSBwYXR0ZXJuIHZhbHVlIF4gLTEuIFRoZW4sIGEgbmV3IHN0cmVuZ3Ro
IHJlZHVjdGlvbiBydWxlIGlzIAogICAgICAgICBpbnRyb2R1Y2VkOgogICAgICAgICAgICAgVHVy
biB0aGlzOiAtdmFsdWUgLSAxIApAQCAtMTAxMyw3ICsxMDk1LDcgQEAKICAgICAgICAgICAgIEEp
IEFkZCBVQkZJWiB0byBpbnN0cnVjdGlvbiBzZWxlY3Rvci4KICAgICAgICAgICAgIEIpIEZpeCBV
QkZYLCBpbnRyb2R1Y2VkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjY5ODQsIAogICAgICAgICAgICAgICAgdG8gbWF0Y2ggYWxsIHBhdHRlcm5zLiAKLSAgICAg
ICAgICAgIEMpIEZpeCBlcnJvciBjb25kaXRpb24gaW4gb25lIHN0cmVuZ3RoIHJlZHVjdGlvbiBp
bnRyb2R1Y2VkIAorICAgICAgICAgICAgQykgRml4IGVycm9yIGNvbmRpdGlvbiBpbiBvbmUgc3Ry
ZW5ndGggcmVkdWN0aW9uIHJ1bGUgaW50cm9kdWNlZCAKICAgICAgICAgICAgICAgIGluIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxMzguCiAKICAgICAgICAgUGFy
dCBBCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oCmluZGV4IDU3ZGRkY2MxMzJhOGI0MmMzM2JkNmMyNjViNTFiYmU2Yzk1YzUy
ZjYuLmE2YTRlZGY4OTc1MDc1ZDU5OTQxNzQ4ZGFmOTAzNDlkNjdkYjFjOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
CkBAIC01MzksNiArNTM5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2JmeDw2
ND4oZGVzdCwgc3JjLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CiAgICAgfSAgICAKIAor
ICAgIHZvaWQgZXh0cmFjdFJlZ2lzdGVyMzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRy
dXN0ZWRJbW0zMiBsc2IsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmV4dHI8MzI+KGQsIG4sIG0sIGxzYi5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGV4dHJh
Y3RSZWdpc3RlcjY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgbHNi
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5leHRyPDY0PihkLCBu
LCBtLCBsc2IubV92YWx1ZSk7CisgICAgfSAKKwogICAgIHZvaWQgY2xlYXJCaXQ2NChSZWdpc3Rl
cklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoRm9yTWFz
ayA9IEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBpZiAoc2NyYXRjaEZvck1hc2sgPT0g
SW52YWxpZEdQUlJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvdGVzdG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFz
bS5jcHAKaW5kZXggMDNkMDYxYWM4MTc5MDdkMTgwNjg4OGMxMDdmNjZkMTg4YThkYWYxOC4uMGE4
YmQ4ZWVjMDk3ZjZlNDRhNmQyMDc5NjdlMThhNzJmMjc4YzY0YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTE1NzAsNiArMTU3MCw3NiBAQCB2
b2lkIHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCgpCiAgICAgfQogfQogCit2b2lkIHRlc3RF
eHRyYWN0UmVnaXN0ZXIzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAx
LCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2MywgNjQgfTsKKyAgICB1aW50MzJfdCBk
YXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIGZvciAoYXV0byBu
IDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5k
cygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAgICAgICAgICAg
ICAgIGlmICgwIDw9IGxzYiAmJiBsc2IgPCBkYXRhc2l6ZSkgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGV4dHJhY3RSZWdpc3RlcjMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZXh0cmFjdFJlZ2lzdGVyMzIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGxzYiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gKChuICYgbWFzaykgPDwg
aGlnaFdpZHRoKSB8IChtID4+IGxvd1dpZHRoKQorICAgICAgICAgICAgICAgICAgICAvLyBXaGVy
ZTogaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsb3dXaWR0aAorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgbWFzayA9ICgxIDw8IGxvd1dpZHRoKSAtIDEKKyAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsc2I7CisgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IG1hc2sgPSAoMVUgPDwgbHNiKSAtIDFVOworICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBsZWZ0ID0gaGlnaFdpZHRoID09IGRhdGFzaXplID8gMFUgOiAobiAmIG1hc2spIDw8
IGhpZ2hXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmlnaHQgPSAoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG0pID4+IGxzYik7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHJocyA9IGxlZnQgfCByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0g
aW52b2tlPHVpbnQzMl90PihleHRyYWN0UmVnaXN0ZXIzMiwgbiwgbSk7CisgICAgICAgICAgICAg
ICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEV4dHJhY3RSZWdpc3RlcjY0KCkK
K3sKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIs
IDQyLCA1NiwgNjIsIDYzLCA2NCB9OworICAgIHVpbnQ2NF90IGRhdGFzaXplID0gQ0hBUl9CSVQg
KiBzaXplb2YodWludDY0X3QpOworCisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgICAgICAgICAgaWYgKDAgPD0gbHNiICYm
IGxzYiA8IGRhdGFzaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXh0cmFjdFJlZ2lz
dGVyNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5leHRyYWN0UmVnaXN0ZXI2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxzYjsK
KyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9ICgxVUxMIDw8IGxzYikgLSAxVUxM
OworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBsZWZ0ID0gaGlnaFdpZHRoID09IGRhdGFz
aXplID8gMFVMTCA6IChuICYgbWFzaykgPDwgaGlnaFdpZHRoOworICAgICAgICAgICAgICAgICAg
ICB1aW50NjRfdCByaWdodCA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gbHNiKTsKKyAg
ICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gbGVmdCB8IHJpZ2h0OworICAgICAgICAg
ICAgICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KGV4dHJhY3RSZWdpc3Rl
cjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KICNlbmRp
ZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtMzc2MCw2
ICszODMwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKSBXVEZfSUdOT1JFU19USFJF
QURfU0FGRVRZX0FOQUxZU0lTCiAgICAgUlVOKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVy
bzY0KCkpOwogICAgIFJVTih0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIoKSk7CiAgICAgUlVO
KHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCgpKTsKKyAgICBSVU4odGVzdEV4dHJhY3RSZWdp
c3RlcjMyKCkpOworICAgIFJVTih0ZXN0RXh0cmFjdFJlZ2lzdGVyNjQoKSk7CiAjZW5kaWYKIAog
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggZjEyMDMxYzFkZjYxYjY0YzcyYWI0ZTdh
MzhlNzIyMzNmOWJiOTE4ZC4uMGYzN2I1OWVlYmQ1M2Q2MWM1YjNhYjBjN2U5NzU5YzIxMjU5OGNj
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTI4MjIs
NiArMjgyMiw0NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVl
LT5jaGlsZCgwKTsKICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEp
OwogCisgICAgICAgICAgICAvLyBFWFRSIFBhdHRlcm46IGQgPSAoKG4gJiBtYXNrKSA8PCBoaWdo
V2lkdGgpIHwgKG0gPj4gbG93V2lkdGgpCisgICAgICAgICAgICAvLyBXaGVyZTogaGlnaFdpZHRo
ID0gZGF0YXNpemUgLSBsb3dXaWR0aAorICAgICAgICAgICAgLy8gICAgICAgIG1hc2sgPSAoMSA8
PCBsb3dXaWR0aCkgLSAxCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEVYVFIgPSBbJl0gKFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoRXh0cmFjdFJlZ2lzdGVyMzIsIEV4dHJhY3RS
ZWdpc3RlcjY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGxl
ZnQtPm9wY29kZSgpICE9IFNobCB8fCBsZWZ0LT5jaGlsZCgwKS0+b3Bjb2RlKCkgIT0gQml0QW5k
IHx8IHJpZ2h0LT5vcGNvZGUoKSAhPSBaU2hyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogblZhbHVlID0gbGVmdC0+Y2hpbGQoMCkt
PmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSBsZWZ0LT5jaGls
ZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGhpZ2hXaWR0aFZhbHVlID0g
bGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJpZ2h0LT5j
aGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbG93V2lkdGhWYWx1ZSA9IHJpZ2h0LT5j
aGlsZCgxKTsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29udGFpbnMoblZhbHVlKSB8
fCBtX2xvY2tlZC5jb250YWlucyhtVmFsdWUpIHx8ICFtYXNrVmFsdWUtPmhhc0ludCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFpbW0o
aGlnaFdpZHRoVmFsdWUpIHx8IGhpZ2hXaWR0aFZhbHVlLT5hc0ludCgpIDwgMCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghaW1tKGxvd1dp
ZHRoVmFsdWUpIHx8IGxvd1dpZHRoVmFsdWUtPmFzSW50KCkgPCAwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrID0gbWFz
a1ZhbHVlLT5hc0ludCgpOworICAgICAgICAgICAgICAgIGlmICghbWFzayB8fCBtYXNrICYgKG1h
c2sgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IG1hc2tCaXRDb3VudCA9IFdURjo6Yml0Q291bnQobWFzayk7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgaGlnaFdpZHRoID0gaGlnaFdpZHRoVmFsdWUtPmFzSW50KCk7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgbG93V2lkdGggPSBsb3dXaWR0aFZhbHVlLT5hc0ludCgp
OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gb3Bjb2RlID09IEV4dHJhY3RS
ZWdpc3RlcjMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICBpZiAobG93V2lkdGggKyBoaWdo
V2lkdGggIT0gZGF0YXNpemUgfHwgbWFza0JpdENvdW50ICE9IGxvd1dpZHRoKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCB0bXAoblZhbHVlKSwgdG1wKG1WYWx1ZSksIGltbShsb3dXaWR0aFZhbHVlKSwgdG1wKG1fdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgIGlmICh0cnlBcHBlbmRFWFRSKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRFWFRS
KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAKKwogICAg
ICAgICAgICAgLy8gQkZJIFBhdHRlcm46IGQgPSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYg
bWFzazIpCiAgICAgICAgICAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkK
ICAgICAgICAgICAgIC8vICAgICAgICBtYXNrMiA9IH4obWFzazEgPDwgbHNiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IGM0NzllMWYzNTMx
NzdhYWY0YjQ0ZjMzNzJjZWRmMTY3MGYxZmExYTQuLmUxOTk3Yjc3YTkxY2RiZWI0YjQyMjYyMTc5
N2M1OWUyZmNkYmNiM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKQEAgLTE0NjMsNiArMTQ2MywzNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFpT
aHIoU2hsKHZhbHVlLCBhbW91bnQpKSwgYW1vdW50KQorICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgICAgICAgICAvLyBDb25kaXRpb25zOgorICAgICAg
ICAgICAgLy8gMS4gMCA8PSBhbW91bnQgPCBkYXRhc2l6ZQorICAgICAgICAgICAgLy8gMi4gd2lk
dGggPSBkYXRhc2l6ZSAtIGFtb3VudAorICAgICAgICAgICAgLy8gMy4gbWFzayBpcyAhKG1hc2sg
JiAobWFzayArIDEpKSB3aGVyZSBiaXRDb3VudChtYXNrKSA9PSB3aWR0aAorICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTaGwKKyAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpID49IDAKKyAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgYW1vdW50MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCBhbW91bnQyID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7
CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQ2NCA/IDY0IDogMzI7CisgICAgICAgICAgICAgICAgaWYg
KGFtb3VudDEgPT0gYW1vdW50MiAmJiBhbW91bnQxIDwgZGF0YXNpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGFtb3VudDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHdpZHRoID0gZGF0YXNpemUgLSBhbW91bnQxOworICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDY0X3QgbWFzayA9ICgxVUxMIDw8IHdpZHRoKSAtIDFVTEw7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogbWFza1ZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFz
aXplID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tWYWx1ZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigp
LCBtYXNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXNrVmFsdWUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVl
PihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFzayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtYXNrVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgCisgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBaU2hyKEJpdEFuZCh2YWx1ZSwgbWFza1NoaWZ0KSwgc2hpZnRBbW91bnQpCiAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChaU2hyKHZhbHVlLCBzaGlmdEFtb3VudCksIG1hc2sp
CiAgICAgICAgICAgICAvLyBDb25kaXRpb25zOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggYmUyM2ZmOGI3M2Y4YzVmNzg2OGZlMTE4NmE2
NDE5OTBlMzQzZjg3NS4uNGI4YTI4YmI3YzhjOTA1OTViMmY4ODE0OTA4MGRmZjk0YjAwMjAzYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBA
IC04NjYsNiArODY2LDEyIEBAIGFybTY0OiBFeHRyYWN0U2lnbmVkQml0ZmllbGQzMiBVOkc6MzIs
IFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiBhcm02NDogRXh0cmFjdFNpZ25lZEJpdGZpZWxkNjQg
VTpHOjY0LCBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CiAgICAgVG1wLCBJbW0sIEltbSwgVG1wCiAK
K2FybTY0OiBFeHRyYWN0UmVnaXN0ZXIzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMy
CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBFeHRyYWN0UmVnaXN0ZXI2NCBVOkc6
NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKwogIyBU
aGUgZmlyc3Qgb3BlcmFuZCBpcyByYXguCiAjIEZJWE1FOiBUaGlzIGZvcm11bGF0aW9uIG1lYW5z
IHRoYXQgdGhlIGJvb2xlYW4gcmVzdWx0IGNhbm5vdCBiZSBwdXQgaW4gZWF4LCBldmVuIHRob3Vn
aCBhbGwgdXNlcnMKICMgb2YgdGhpcyB3b3VsZCBiZSBPSyB3aXRoIHRoYXQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmgKaW5kZXggODUwMDM1MzQ5OTVjMDZkOWE0ZjVjZjZhNmM3YTIyNTM4NzZj
MjQ0My4uNzQ0NTRhMGJiN2NkMjNkMjY2ODI4ODY4YzM0NDg0ZmRjOWZhMjVjYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtNDM2LDYgKzQzNiwxMCBAQCB2b2lkIHRlc3RCSUMzMigp
Owogdm9pZCB0ZXN0QklDNjQoKTsKIHZvaWQgdGVzdE9yTm90MzIoKTsKIHZvaWQgdGVzdE9yTm90
NjQoKTsKK3ZvaWQgdGVzdEJpdGZpZWxkWmVyb0V4dGVuZDMyKCk7Cit2b2lkIHRlc3RCaXRmaWVs
ZFplcm9FeHRlbmQ2NCgpOwordm9pZCB0ZXN0RXh0cmFjdFJlZ2lzdGVyMzIoKTsKK3ZvaWQgdGVz
dEV4dHJhY3RSZWdpc3RlcjY0KCk7CiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVy
bzMyKCk7CiB2b2lkIHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVybzY0KCk7CiB2b2lkIHRl
c3RFeHRyYWN0U2lnbmVkQml0ZmllbGQzMigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiM18yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNf
Mi5jcHAKaW5kZXggZDQ4MjMyNDI3YThiZDkwZTgyZjBiNWFkYjU5MzZlMjFlOTEzZWVmYS4uMzZl
YmZjNDVhNzk4NjlhZjA5NmVkNjg4NDllNTdlOWM2NjY5Yjc3MiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzIuY3BwCkBAIC0zNjk5LDYgKzM2OTksMjAwIEBAIHZvaWQgdGVzdE9yTm90
NjQoKQogICAgIH0KIH0KIAordm9pZCB0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kMzIoKQoreworICAg
IGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNCwgMzEgfTsKKworICAg
IC8vIFR1cm4gdGhpczogWlNocihTaGwobiwgYW1vdW50KSksIGFtb3VudCkKKyAgICAvLyBJbnRv
IHRoaXM6IEJpdEFuZChuLCBtYXNrKQorICAgIC8vIENvbmRpdGlvbnM6CisgICAgLy8gMS4gMCA8
PSBhbW91bnQgPCBkYXRhc2l6ZQorICAgIC8vIDIuIHdpZHRoID0gZGF0YXNpemUgLSBhbW91bnQK
KyAgICAvLyAzLiBtYXNrIGlzICEobWFzayAmIChtYXNrICsgMSkpIHdoZXJlIGJpdENvdW50KG1h
c2spID09IHdpZHRoCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBuLCB1aW50MzJfdCBh
bW91bnQpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGFt
b3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGFtb3VudCk7CisgICAgICAgIFZhbHVlKiBzaGxWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgblZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZh
bHVlKiB6c2hyVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdp
bigpLCBzaGxWYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgenNoclZhbHVlKTsKKworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBh
bW91bnQgPiAwKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJhbmQi
KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIGFtb3VudCk7Cisg
ICAgfTsKKworICAgIHVpbnQzMl90IGRhdGFzaXplID0gQ0hBUl9CSVQgKiBzaXplb2YodWludDMy
X3QpOworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgdWludDMyX3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgdWludDMyX3Qgd2lkdGggPSBkYXRhc2l6ZSAt
IGFtb3VudDsKKyAgICAgICAgICAgIHVpbnQzMl90IG1hc2sgPSB3aWR0aCA9PSBkYXRhc2l6ZSA/
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSA6ICgxVSA8PCB3aWR0aCkgLSAx
VTsKKyAgICAgICAgICAgIHVpbnQzMl90IGxocyA9IHRlc3QobiwgYW1vdW50KTsKKyAgICAgICAg
ICAgIHVpbnQzMl90IHJocyA9IChuICYgbWFzayk7CisgICAgICAgICAgICBDSEVDSyhsaHMgPT0g
cmhzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5k
NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQor
ICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQ2NF90PiBhbW91bnRzID0geyAwLCAzNCwg
NjMgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbiwgdWludDY0X3QgYW1vdW50
KSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworICAgICAgICBWYWx1
ZSogc2hsVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCks
IG5WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBWYWx1ZSogenNoclZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgc2hsVmFsdWUsIGFtb3VudFZh
bHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHpzaHJWYWx1ZSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkgJiYgYW1vdW50ID4gMCkKKyAgICAgICAgICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiYW5kIik7CisgICAgICAgIHJldHVybiBpbnZv
a2U8dWludDY0X3Q+KCpjb2RlLCBuLCBhbW91bnQpOworICAgIH07CisKKyAgICB1aW50NjRfdCBk
YXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQ2NF90KTsKKyAgICBmb3IgKGF1dG8gbk9w
ZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFt
b3VudHMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IHdpZHRoID0gZGF0YXNpemUgLSBhbW91bnQ7CisgICAgICAgICAgICB1
aW50NjRfdCBtYXNrID0gd2lkdGggPT0gZGF0YXNpemUgPyBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkgOiAoMVVMTCA8PCB3aWR0aCkgLSAxVUxMOworICAgICAgICAgICAgdWlu
dDY0X3QgbGhzID0gdGVzdChuLCBhbW91bnQpOworICAgICAgICAgICAgdWludDY0X3QgcmhzID0g
KG4gJiBtYXNrKTsKKyAgICAgICAgICAgIENIRUNLKGxocyA9PSByaHMpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIHRlc3RFeHRyYWN0UmVnaXN0ZXIzMigpCit7CisgICAgaWYgKEpTQzo6
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsgICAgCisg
ICAgVmVjdG9yPHVpbnQzMl90PiBsb3dXaWR0aHMgPSB7IDAsIDE3LCAzMSB9OworCisgICAgLy8g
VGVzdCBQYXR0ZXJuOiAoKG4gJiBtYXNrMSkgPDwgaGlnaFdpZHRoKSB8ICgobSAmIG1hc2syKSA+
PiBsb3dXaWR0aCkKKyAgICAvLyBXaGVyZTogaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsb3dXaWR0
aAorICAgIC8vICAgICAgICBtYXNrMSA9ICgxIDw8IGxvd1dpZHRoKSAtIDEKKyAgICAvLyAgICAg
ICAgbWFzazIgPSB+bWFzazEKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4sIHVpbnQz
Ml90IG0sIHVpbnQzMl90IG1hc2sxLCB1aW50MzJfdCBtYXNrMiwgdWludDMyX3QgaGlnaFdpZHRo
LCB1aW50MzJfdCBsb3dXaWR0aCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAg
ICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAg
ICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwor
ICAgICAgICBWYWx1ZSogbWFzazFWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNrMlZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2syKTsKKyAgICAg
ICAgVmFsdWUqIGhpZ2hXaWR0aFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGhpZ2hXaWR0aCk7CisgICAgICAgIFZhbHVlKiBsb3dXaWR0aFZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGxvd1dpZHRo
KTsKKworICAgICAgICBWYWx1ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2sxVmFsdWUpOworICAgICAgICBW
YWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwg
bGVmdEFuZFZhbHVlLCBoaWdoV2lkdGhWYWx1ZSk7CisKKyAgICAgICAgVmFsdWUqIHJpZ2h0QW5k
VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG1W
YWx1ZSwgbWFzazJWYWx1ZSk7CisgICAgICAgIFZhbHVlKiByaWdodCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIHJpZ2h0QW5kVmFsdWUsIGxvd1dpZHRoVmFs
dWUpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CisKKyAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkgJiYgbG93
V2lkdGggPiAwKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJleHRy
Iik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9
OworCisgICAgdWludDMyX3QgZGF0YXNpemUgPSBDSEFSX0JJVCAqIHNpemVvZih1aW50MzJfdCk7
CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGxvd1dpZHRoIDogbG93V2lkdGhzKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxv
d1dpZHRoOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG1hc2sxID0gKDFVIDw8IGxvd1dpZHRo
KSAtIDFVOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG1hc2syID0gfm1hc2sxOworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGxlZnQgPSBoaWdoV2lkdGggPT0gZGF0YXNpemUgPyAwVSA6ICgo
biAmIG1hc2sxKSA8PCBoaWdoV2lkdGgpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHJpZ2h0
ID0gKChtICYgbWFzazIpID4+IGxvd1dpZHRoKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBy
aHMgPSBsZWZ0IHwgcmlnaHQ7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gdGVzdChu
LCBtLCBtYXNrMSwgbWFzazIsIGhpZ2hXaWR0aCwgbG93V2lkdGgpOworICAgICAgICAgICAgICAg
IENIRUNLKGxocyA9PSByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIHRlc3RFeHRyYWN0UmVnaXN0ZXI2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsgICAgCisgICAgVmVjdG9y
PHVpbnQ2NF90PiBsb3dXaWR0aHMgPSB7IDAsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0
ZXJuOiAoKG4gJiBtYXNrMSkgPDwgaGlnaFdpZHRoKSB8ICgobSAmIG1hc2syKSA+PiBsb3dXaWR0
aCkKKyAgICAvLyBXaGVyZTogaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsb3dXaWR0aAorICAgIC8v
ICAgICAgICBtYXNrMSA9ICgxIDw8IGxvd1dpZHRoKSAtIDEKKyAgICAvLyAgICAgICAgbWFzazIg
PSB+bWFzazEKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVp
bnQ2NF90IG1hc2sxLCB1aW50NjRfdCBtYXNrMiwgdWludDY0X3QgaGlnaFdpZHRoLCB1aW50NjRf
dCBsb3dXaWR0aCkgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSog
blZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogbWFzazFWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrMSk7CisgICAgICAgIFZhbHVlKiBtYXNr
MlZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1h
c2syKTsKKyAgICAgICAgVmFsdWUqIGhpZ2hXaWR0aFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGhpZ2hXaWR0aCk7CisgICAgICAgIFZhbHVlKiBs
b3dXaWR0aFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGxvd1dpZHRoKTsKKworICAgICAgICBWYWx1ZSogbGVmdEFuZFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIG1hc2sxVmFsdWUp
OworICAgICAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hs
LCBPcmlnaW4oKSwgbGVmdEFuZFZhbHVlLCBoaWdoV2lkdGhWYWx1ZSk7CisKKyAgICAgICAgVmFs
dWUqIHJpZ2h0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwg
T3JpZ2luKCksIG1WYWx1ZSwgbWFzazJWYWx1ZSk7CisgICAgICAgIFZhbHVlKiByaWdodCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIHJpZ2h0QW5kVmFsdWUs
IGxvd1dpZHRoVmFsdWUpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0KSk7CisK
KyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FS
TTY0KCkgJiYgbG93V2lkdGggPiAwKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsICJleHRyIik7CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBu
LCBtKTsKKyAgICB9OworCisgICAgdWludDY0X3QgZGF0YXNpemUgPSBDSEFSX0JJVCAqIHNpemVv
Zih1aW50NjRfdCk7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7
CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICAgICAgZm9yIChhdXRvIGxvd1dpZHRoIDogbG93V2lkdGhzKSB7CisgICAgICAgICAgICAgICAg
dWludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0g
PSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBoaWdoV2lkdGggPSBk
YXRhc2l6ZSAtIGxvd1dpZHRoOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2sxID0gKDFV
TEwgPDwgbG93V2lkdGgpIC0gMVVMTDsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrMiA9
IH5tYXNrMTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBsZWZ0ID0gaGlnaFdpZHRoID09IGRh
dGFzaXplID8gMFVMTCA6ICgobiAmIG1hc2sxKSA8PCBoaWdoV2lkdGgpOworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IHJpZ2h0ID0gKChtICYgbWFzazIpID4+IGxvd1dpZHRoKTsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCByaHMgPSBsZWZ0IHwgcmlnaHQ7CisgICAgICAgICAgICAgICAgdWlu
dDY0X3QgbGhzID0gdGVzdChuLCBtLCBtYXNrMSwgbWFzazIsIGhpZ2hXaWR0aCwgbG93V2lkdGgp
OworICAgICAgICAgICAgICAgIENIRUNLKGxocyA9PSByaHMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCiB2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1h
c2szMigpCiB7CiAgICAgLy8gVHVybiB0aGlzOiAodG1wID4+IGltbSkgJiBtYXNrIApAQCAtNDU5
OSw2ICs0NzkzLDEwIEBAIHZvaWQgYWRkQml0VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1
ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0QklDNjQo
KSk7CiAgICAgUlVOKHRlc3RPck5vdDMyKCkpOwogICAgIFJVTih0ZXN0T3JOb3Q2NCgpKTsKKyAg
ICBSVU4odGVzdEJpdGZpZWxkWmVyb0V4dGVuZDMyKCkpOworICAgIFJVTih0ZXN0Qml0ZmllbGRa
ZXJvRXh0ZW5kNjQoKSk7CisgICAgUlVOKHRlc3RFeHRyYWN0UmVnaXN0ZXIzMigpKTsKKyAgICBS
VU4odGVzdEV4dHJhY3RSZWdpc3RlcjY0KCkpOwogICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0
ZmllbGRJblplcm8zMigpKTsKICAgICBSVU4odGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJv
NjQoKSk7CiAgICAgUlVOKHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQzMigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432621</attachid>
            <date>2021-06-30 13:22:16 -0700</date>
            <delta_ts>2021-07-01 10:25:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227171-20210630152215.patch</filename>
            <type>text/plain</type>
            <size>24899</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDg4NmU5NDM1ZjA5ZDc3M2YxNjVlYzJiZDY5NDA3MWZjNDExZmQyLi4wYThlNDk4YzFjMDIxZTdl
NzJjYzY5MDJkYjVjZDhmMWU1NGY5ZThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NSBAQAorMjAyMS0wNi0yOSAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIGEgbmV3IHBhdHRlcm4gdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXNlIEVYVFIgc3VwcG9ydGVkIGJ5IEFSTTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIHR3byBtb2RpZmljYXRp
b25zOgorICAgICAgICAgICAgMS4gSW50cm9kdWNlIGEgc3RyZW5ndGggcmVkdWN0aW9uIHJ1bGUg
dG8gemVybyBleHRlbmQgYml0ZmllbGQuCisgICAgICAgICAgICAyLiBBZGQgRXh0cmFjdCBSZWdp
c3RlciAoRVhUUikgdG8gQWlyIG9wY29kZSB0byBzZXJ2ZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4K
KworICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgICAgICMjIyBQYXJ0IEEgemVybyBleHRlbmQgYml0ZmllbGQgIyMjCisg
ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgQSBuZXcgc3RyZW5ndGggcmVkdWN0aW9uIHJ1bGUgaXMgYWRkZWQgZm9y
IHRoZSBjYW5vbmljYWwgZm9ybSBvZiB0aGUgemVyby1leHRlbmQgCisgICAgICAgIGJpdGZpZWxk
LgorCisgICAgICAgIFR1cm4gdGhpczogWlNocihTaGwodmFsdWUsIGFtb3VudCkpLCBhbW91bnQp
CisgICAgICAgIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNrKQorCisgICAgICAgIHdpdGgg
Y29uc3RyYWludHM6CisgICAgICAgIDEuIDAgPD0gYW1vdW50IDwgZGF0YXNpemUKKyAgICAgICAg
Mi4gd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudAorICAgICAgICAzLiBtYXNrIGlzICEobWFzayAm
IChtYXNrICsgMSkpIHdoZXJlIGJpdENvdW50KG1hc2spID09IHdpZHRoCisKKyAgICAgICAgLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIyMgUGFydCBCIEVYVFIgIyMjCisgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBHaXZlbiBpbnN0cnVjdGlvbjoKKyAgICAgICAg
ZXh0ciBSZCwgUm4sIFJtLCBsb3dXaWR0aAorCisgICAgICAgIEV4dHJhY3QgcmVnaXN0ZXIgKEVY
VFIpIGV4dHJhY3RzIGEgcmVnaXN0ZXIgZnJvbSBhIHBhaXIgb2YgcmVnaXN0ZXJzLCB3aGVyZSAK
KyAgICAgICAgY29uY2F0ID0gUm46Um0gYW5kIFJkID0gY29uY2F0PGxvd1dpZHRoICsgZGF0YXNp
emUgLSAxOmxvd1dpZHRoPi4KKworICAgICAgICBUaGUgZXF1aXZhbGVudCBwYXR0ZXJuIG9mIHRo
aXMgaW5zdHJ1Y3Rpb24gaXM6CisKKyAgICAgICAgZCA9ICgobiAmIG1hc2spIDw8IGhpZ2hXaWR0
aCkgfCAobSA+PiBsb3dXaWR0aCkKKyAgICAgICAgaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsb3dX
aWR0aAorICAgICAgICBtYXNrID0gKDEgPDwgbG93V2lkdGgpIC0gMQorCisgICAgICAgIEdpdmVu
IEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBA
MSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gbWFzaworICAgICAgICBJbnQg
QDMgPSBCaXRBbmQoQDAsIEAyKQorICAgICAgICBJbnQgQDQgPSBoaWdoV2lkdGgKKyAgICAgICAg
SW50IEA1ID0gU2hsKEAzLCBANCkKKyAgICAgICAgSW50IEA2ID0gbG93V2lkdGgKKyAgICAgICAg
SW50IEA3ID0gWlNocihAMSwgQDYpCisgICAgICAgIEludCBAOCA9IEJpdE9yKEA3LCBANSkKKyAg
ICAgICAgVm9pZEA5ID0gUmV0dXJuKEAxMCwgVGVybWluYWwpCisKKyAgICAgICAgQmVmb3JlIEFk
ZGluZyBCSUM6CisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIEluc2VydFVu
c2lnbmVkQml0ZmllbGRJblplcm8gJXgwLCBoaWdoV2lkdGgsIGxvd1dpZHRoLCAleDAsIEA1Cisg
ICAgICAgIFVyc2hpZnQgICAgICAgICAgICAgICAgICAgICAgJXgxLCAgbG93V2lkdGgsICAgICAg
JXgxLCAgICAgIEA3CisgICAgICAgIE9yICAgICAgICAgICAgICAgICAgICAgICAgICAgJXgwLCAg
ICAgICAleDEsICAgICAgJXgwLCAgICAgIEA4CisgICAgICAgIFJldCAgICAgICAgICAgICAgICAg
ICAgICAgICAgJXgwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEA5CisKKyAgICAgICAgQWZ0
ZXIgQWRkaW5nIEJJQzoKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAgRXh0
cmFjdFJlZ2lzdGVyICAgJXgwLCAleDEsIGxvd1dpZHRoLCAleDAsIEA4CisgICAgICAgIFJldCAg
ICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAgICAgICBAOQorCisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk02NDo6ZXh0cmFjdFJlZ2lzdGVyMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0OjpleHRyYWN0UmVnaXN0ZXI2NCk6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNt
LmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdEV4dHJhY3RSZWdpc3RlcjMyKToKKyAgICAgICAgKEpT
Qzo6dGVzdEV4dHJhY3RSZWdpc3RlcjY0KToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3Bw
OgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90
ZXN0YjNfMi5jcHA6CisgICAgICAgICh0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kMzIpOgorICAgICAg
ICAodGVzdEJpdGZpZWxkWmVyb0V4dGVuZDY0KToKKyAgICAgICAgKHRlc3RFeHRyYWN0UmVnaXN0
ZXIzMik6CisgICAgICAgICh0ZXN0RXh0cmFjdFJlZ2lzdGVyNjQpOgorICAgICAgICAoYWRkQml0
VGVzdHMpOgorCiAyMDIxLTA2LTI5ICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgYSBuZXcgcGF0dGVybiB0byBpbnN0cnVjdGlvbiBzZWxlY3RvciB0
byB1c2UgU0JYIGFuZCBTQkZJWiBzdXBwb3J0ZWQgYnkgQVJNNjQKQEAgLTE1OCw4ICsyNDAsOCBA
QAogICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KIAogICAgICAgICBUaGlzIHBhdGNo
IGluY2x1ZGVzIHRocmVlIG1vZGlmaWNhdGlvbnM6Ci0gICAgICAgICAgICAxLiBBZGQgYml0IGNs
ZWFyIChCSUMpLCBvciBub3QgKE9STiksIGFuZCBleHRyYWN0IGFuZCBpbnNlcnQgYml0ZmllbGQg
YXQgbG93ZXIgZW5kIChCRlhJTCkgCi0gICAgICAgICAgICAgICB0byBBaXIgb3Bjb2RlIHRvIHNl
cnZlIGludHJ1Y2l0b24gc2VsZWN0b3IuCisgICAgICAgICAgICAxLiBBZGQgYml0IGNsZWFyIChC
SUMpLCBvciBub3QgKE9STiksIGFuZCBleHRyYWN0IGFuZCBpbnNlcnQgYml0ZmllbGQgYXQgdGhl
IAorICAgICAgICAgICAgICAgbG93ZXIgZW5kIChCRlhJTCkgdG8gQWlyIG9wY29kZSB0byBzZXJ2
ZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4KICAgICAgICAgICAgIDIuIEFkZCBiaXRmaWVsZCBjbGVh
ciAoQkZDKSB0byBNYWNyb0Fzc2VtYmxlci4KICAgICAgICAgICAgIDQuIERvIHJlZmFjdG9yaW5n
IC0gcmVuYW1lIEFpciBvcGNvZGVzIGFkZGVkIGluIHRoZSBwcmV2aW91cyBwYXRjaGVzLgogCkBA
IC0xODEsNyArMjYzLDcgQEAKICAgICAgICAgUGF0dGVybiAyOgogICAgICAgICAgICAgZCA9IG4g
JiAobSBeIC0xKQogCi0gICAgICAgIEluIG9yZGVyIHRvIGdldCBiZW5lZml0cyBmb3IgY29tcGxl
bWVudCBvcGVyYXRpb24sIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IgdXNlcyAKKyAgICAg
ICAgSW4gb3JkZXIgdG8gZ2V0IGJlbmVmaXRzIGZvciBjb21wbGVtZW50IG9wZXJhdGlvbiwgdGhl
IGN1cnJlbnQgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IgdXNlcyAKICAgICAgICAgbXZuIGluc3RydWN0
aW9uIHRvIGxvd2VyIHRoZSBwYXR0ZXJuIHZhbHVlIF4gLTEuIFRoZW4sIGEgbmV3IHN0cmVuZ3Ro
IHJlZHVjdGlvbiBydWxlIGlzIAogICAgICAgICBpbnRyb2R1Y2VkOgogICAgICAgICAgICAgVHVy
biB0aGlzOiAtdmFsdWUgLSAxIApAQCAtMTAxMyw3ICsxMDk1LDcgQEAKICAgICAgICAgICAgIEEp
IEFkZCBVQkZJWiB0byBpbnN0cnVjdGlvbiBzZWxlY3Rvci4KICAgICAgICAgICAgIEIpIEZpeCBV
QkZYLCBpbnRyb2R1Y2VkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjY5ODQsIAogICAgICAgICAgICAgICAgdG8gbWF0Y2ggYWxsIHBhdHRlcm5zLiAKLSAgICAg
ICAgICAgIEMpIEZpeCBlcnJvciBjb25kaXRpb24gaW4gb25lIHN0cmVuZ3RoIHJlZHVjdGlvbiBp
bnRyb2R1Y2VkIAorICAgICAgICAgICAgQykgRml4IGVycm9yIGNvbmRpdGlvbiBpbiBvbmUgc3Ry
ZW5ndGggcmVkdWN0aW9uIHJ1bGUgaW50cm9kdWNlZCAKICAgICAgICAgICAgICAgIGluIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcxMzguCiAKICAgICAgICAgUGFy
dCBBCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oCmluZGV4IDU3ZGRkY2MxMzJhOGI0MmMzM2JkNmMyNjViNTFiYmU2Yzk1YzUy
ZjYuLmE2YTRlZGY4OTc1MDc1ZDU5OTQxNzQ4ZGFmOTAzNDlkNjdkYjFjOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
CkBAIC01MzksNiArNTM5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc2JmeDw2
ND4oZGVzdCwgc3JjLCBsc2IubV92YWx1ZSwgd2lkdGgubV92YWx1ZSk7CiAgICAgfSAgICAKIAor
ICAgIHZvaWQgZXh0cmFjdFJlZ2lzdGVyMzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRy
dXN0ZWRJbW0zMiBsc2IsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmV4dHI8MzI+KGQsIG4sIG0sIGxzYi5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGV4dHJh
Y3RSZWdpc3RlcjY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgbHNi
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5leHRyPDY0PihkLCBu
LCBtLCBsc2IubV92YWx1ZSk7CisgICAgfSAKKwogICAgIHZvaWQgY2xlYXJCaXQ2NChSZWdpc3Rl
cklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoRm9yTWFz
ayA9IEludmFsaWRHUFJSZWcpCiAgICAgewogICAgICAgICBpZiAoc2NyYXRjaEZvck1hc2sgPT0g
SW52YWxpZEdQUlJlZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvdGVzdG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFz
bS5jcHAKaW5kZXggMDNkMDYxYWM4MTc5MDdkMTgwNjg4OGMxMDdmNjZkMTg4YThkYWYxOC4uMGE4
YmQ4ZWVjMDk3ZjZlNDRhNmQyMDc5NjdlMThhNzJmMjc4YzY0YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTE1NzAsNiArMTU3MCw3NiBAQCB2
b2lkIHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCgpCiAgICAgfQogfQogCit2b2lkIHRlc3RF
eHRyYWN0UmVnaXN0ZXIzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyAwLCAx
LCA1LCA3LCAzMCwgMzEsIDMyLCA0MiwgNTYsIDYyLCA2MywgNjQgfTsKKyAgICB1aW50MzJfdCBk
YXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIGZvciAoYXV0byBu
IDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5k
cygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gbHNiIDogaW1tcykgeworICAgICAgICAgICAg
ICAgIGlmICgwIDw9IGxzYiAmJiBsc2IgPCBkYXRhc2l6ZSkgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGV4dHJhY3RSZWdpc3RlcjMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuZXh0cmFjdFJlZ2lzdGVyMzIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGxzYiksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gKChuICYgbWFzaykgPDwg
aGlnaFdpZHRoKSB8IChtID4+IGxvd1dpZHRoKQorICAgICAgICAgICAgICAgICAgICAvLyBXaGVy
ZTogaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsb3dXaWR0aAorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgbWFzayA9ICgxIDw8IGxvd1dpZHRoKSAtIDEKKyAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaGlnaFdpZHRoID0gZGF0YXNpemUgLSBsc2I7CisgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IG1hc2sgPSAoMVUgPDwgbHNiKSAtIDFVOworICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBsZWZ0ID0gaGlnaFdpZHRoID09IGRhdGFzaXplID8gMFUgOiAobiAmIG1hc2spIDw8
IGhpZ2hXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmlnaHQgPSAoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG0pID4+IGxzYik7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHJocyA9IGxlZnQgfCByaWdodDsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0g
aW52b2tlPHVpbnQzMl90PihleHRyYWN0UmVnaXN0ZXIzMiwgbiwgbSk7CisgICAgICAgICAgICAg
ICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEV4dHJhY3RSZWdpc3RlcjY0KCkK
K3sKKyAgICBWZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDAsIDEsIDUsIDcsIDMwLCAzMSwgMzIs
IDQyLCA1NiwgNjIsIDYzLCA2NCB9OworICAgIHVpbnQ2NF90IGRhdGFzaXplID0gQ0hBUl9CSVQg
KiBzaXplb2YodWludDY0X3QpOworCisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byBsc2IgOiBpbW1zKSB7CisgICAgICAgICAgICAgICAgaWYgKDAgPD0gbHNiICYm
IGxzYiA8IGRhdGFzaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXh0cmFjdFJlZ2lz
dGVyNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5leHRyYWN0UmVnaXN0ZXI2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobHNiKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxzYjsK
KyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzayA9ICgxVUxMIDw8IGxzYikgLSAxVUxM
OworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBsZWZ0ID0gaGlnaFdpZHRoID09IGRhdGFz
aXplID8gMFVMTCA6IChuICYgbWFzaykgPDwgaGlnaFdpZHRoOworICAgICAgICAgICAgICAgICAg
ICB1aW50NjRfdCByaWdodCA9IChzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gbHNiKTsKKyAg
ICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gbGVmdCB8IHJpZ2h0OworICAgICAgICAg
ICAgICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KGV4dHJhY3RSZWdpc3Rl
cjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KICNlbmRp
ZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtMzc2MCw2
ICszODMwLDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKSBXVEZfSUdOT1JFU19USFJF
QURfU0FGRVRZX0FOQUxZU0lTCiAgICAgUlVOKHRlc3RJbnNlcnRTaWduZWRCaXRmaWVsZEluWmVy
bzY0KCkpOwogICAgIFJVTih0ZXN0RXh0cmFjdFNpZ25lZEJpdGZpZWxkMzIoKSk7CiAgICAgUlVO
KHRlc3RFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCgpKTsKKyAgICBSVU4odGVzdEV4dHJhY3RSZWdp
c3RlcjMyKCkpOworICAgIFJVTih0ZXN0RXh0cmFjdFJlZ2lzdGVyNjQoKSk7CiAjZW5kaWYKIAog
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggZjEyMDMxYzFkZjYxYjY0YzcyYWI0ZTdh
MzhlNzIyMzNmOWJiOTE4ZC4uMGYzN2I1OWVlYmQ1M2Q2MWM1YjNhYjBjN2U5NzU5YzIxMjU5OGNj
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTI4MjIs
NiArMjgyMiw0NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVl
LT5jaGlsZCgwKTsKICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEp
OwogCisgICAgICAgICAgICAvLyBFWFRSIFBhdHRlcm46IGQgPSAoKG4gJiBtYXNrKSA8PCBoaWdo
V2lkdGgpIHwgKG0gPj4gbG93V2lkdGgpCisgICAgICAgICAgICAvLyBXaGVyZTogaGlnaFdpZHRo
ID0gZGF0YXNpemUgLSBsb3dXaWR0aAorICAgICAgICAgICAgLy8gICAgICAgIG1hc2sgPSAoMSA8
PCBsb3dXaWR0aCkgLSAxCisgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEVYVFIgPSBbJl0gKFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoRXh0cmFjdFJlZ2lzdGVyMzIsIEV4dHJhY3RS
ZWdpc3RlcjY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGxl
ZnQtPm9wY29kZSgpICE9IFNobCB8fCBsZWZ0LT5jaGlsZCgwKS0+b3Bjb2RlKCkgIT0gQml0QW5k
IHx8IHJpZ2h0LT5vcGNvZGUoKSAhPSBaU2hyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgICAgICBWYWx1ZSogblZhbHVlID0gbGVmdC0+Y2hpbGQoMCkt
PmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrVmFsdWUgPSBsZWZ0LT5jaGls
ZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGhpZ2hXaWR0aFZhbHVlID0g
bGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJpZ2h0LT5j
aGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbG93V2lkdGhWYWx1ZSA9IHJpZ2h0LT5j
aGlsZCgxKTsKKyAgICAgICAgICAgICAgICBpZiAobV9sb2NrZWQuY29udGFpbnMoblZhbHVlKSB8
fCBtX2xvY2tlZC5jb250YWlucyhtVmFsdWUpIHx8ICFtYXNrVmFsdWUtPmhhc0ludCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFpbW0o
aGlnaFdpZHRoVmFsdWUpIHx8IGhpZ2hXaWR0aFZhbHVlLT5hc0ludCgpIDwgMCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghaW1tKGxvd1dp
ZHRoVmFsdWUpIHx8IGxvd1dpZHRoVmFsdWUtPmFzSW50KCkgPCAwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXNrID0gbWFz
a1ZhbHVlLT5hc0ludCgpOworICAgICAgICAgICAgICAgIGlmICghbWFzayB8fCBtYXNrICYgKG1h
c2sgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IG1hc2tCaXRDb3VudCA9IFdURjo6Yml0Q291bnQobWFzayk7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgaGlnaFdpZHRoID0gaGlnaFdpZHRoVmFsdWUtPmFzSW50KCk7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgbG93V2lkdGggPSBsb3dXaWR0aFZhbHVlLT5hc0ludCgp
OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gb3Bjb2RlID09IEV4dHJhY3RS
ZWdpc3RlcjMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICBpZiAobG93V2lkdGggKyBoaWdo
V2lkdGggIT0gZGF0YXNpemUgfHwgbWFza0JpdENvdW50ICE9IGxvd1dpZHRoKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCB0bXAoblZhbHVlKSwgdG1wKG1WYWx1ZSksIGltbShsb3dXaWR0aFZhbHVlKSwgdG1wKG1fdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgIGlmICh0cnlBcHBlbmRFWFRSKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRFWFRS
KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAKKwogICAg
ICAgICAgICAgLy8gQkZJIFBhdHRlcm46IGQgPSAoKG4gJiBtYXNrMSkgPDwgbHNiKSB8IChkICYg
bWFzazIpCiAgICAgICAgICAgICAvLyBXaGVyZTogbWFzazEgPSAoKDEgPDwgd2lkdGgpIC0gMSkK
ICAgICAgICAgICAgIC8vICAgICAgICBtYXNrMiA9IH4obWFzazEgPDwgbHNiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IGM0NzllMWYzNTMx
NzdhYWY0YjQ0ZjMzNzJjZWRmMTY3MGYxZmExYTQuLjIyODBmZDc3MTI1MmU3MjYwZjY4NTA1MDky
ZmQ1NDNjZmUwNjE4NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKQEAgLTE0NjMsNiArMTQ2MywzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFpT
aHIoU2hsKHZhbHVlLCBhbW91bnQpKSwgYW1vdW50KQorICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgICAgICAgICAvLyBDb25kaXRpb25zOgorICAgICAg
ICAgICAgLy8gMS4gMCA8PSBhbW91bnQgPCBkYXRhc2l6ZQorICAgICAgICAgICAgLy8gMi4gd2lk
dGggPSBkYXRhc2l6ZSAtIGFtb3VudAorICAgICAgICAgICAgLy8gMy4gbWFzayBpcyAhKG1hc2sg
JiAobWFzayArIDEpKSB3aGVyZSBiaXRDb3VudChtYXNrKSA9PSB3aWR0aAorICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTaGwKKyAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpID49IDAKKyAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgYW1vdW50MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCBhbW91bnQyID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7
CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQ2NCA/IDY0IDogMzI7CisgICAgICAgICAgICAgICAgaWYg
KGFtb3VudDEgPT0gYW1vdW50MiAmJiBhbW91bnQxIDwgZGF0YXNpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3Qgd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudDE7CisgICAgICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSAoMVVMTCA8PCB3aWR0aCkgLSAxVUxMOworICAgICAg
ICAgICAgICAgICAgICBWYWx1ZSogbWFza1ZhbHVlOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZGF0YXNpemUgPT0gMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVmFsdWUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbWFzayk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hc2tWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1faW5k
ZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXNrKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXc8VmFsdWU+KEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgwKSwgbWFza1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFpTaHIoQml0QW5kKHZhbHVlLCBtYXNrU2hpZnQpLCBzaGlmdEFtb3VudCkKICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQml0QW5kKFpTaHIodmFsdWUsIHNoaWZ0QW1vdW50KSwgbWFzaykK
ICAgICAgICAgICAgIC8vIENvbmRpdGlvbnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCBiZTIzZmY4YjczZjhjNWY3ODY4ZmUxMTg2YTY0
MTk5MGUzNDNmODc1Li40YjhhMjhiYjdjOGM5MDU5NWIyZjg4MTQ5MDgwZGZmOTRiMDAyMDNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAg
LTg2Niw2ICs4NjYsMTIgQEAgYXJtNjQ6IEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyIFU6RzozMiwg
VTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKIGFybTY0OiBFeHRyYWN0U2lnbmVkQml0ZmllbGQ2NCBV
Okc6NjQsIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIEltbSwgSW1tLCBUbXAKIAor
YXJtNjQ6IEV4dHJhY3RSZWdpc3RlcjMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIK
KyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IEV4dHJhY3RSZWdpc3RlcjY0IFU6Rzo2
NCwgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCiAjIFRo
ZSBmaXJzdCBvcGVyYW5kIGlzIHJheC4KICMgRklYTUU6IFRoaXMgZm9ybXVsYXRpb24gbWVhbnMg
dGhhdCB0aGUgYm9vbGVhbiByZXN1bHQgY2Fubm90IGJlIHB1dCBpbiBlYXgsIGV2ZW4gdGhvdWdo
IGFsbCB1c2VycwogIyBvZiB0aGlzIHdvdWxkIGJlIE9LIHdpdGggdGhhdC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaAppbmRleCA4NTAwMzUzNDk5NWMwNmQ5YTRmNWNmNmE2YzdhMjI1Mzg3NmMy
NDQzLi43NDQ1NGEwYmI3Y2QyM2QyNjY4Mjg4NjhjMzQ0ODRmZGM5ZmEyNWNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC00MzYsNiArNDM2LDEwIEBAIHZvaWQgdGVzdEJJQzMyKCk7
CiB2b2lkIHRlc3RCSUM2NCgpOwogdm9pZCB0ZXN0T3JOb3QzMigpOwogdm9pZCB0ZXN0T3JOb3Q2
NCgpOwordm9pZCB0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kMzIoKTsKK3ZvaWQgdGVzdEJpdGZpZWxk
WmVyb0V4dGVuZDY0KCk7Cit2b2lkIHRlc3RFeHRyYWN0UmVnaXN0ZXIzMigpOwordm9pZCB0ZXN0
RXh0cmFjdFJlZ2lzdGVyNjQoKTsKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJv
MzIoKTsKIHZvaWQgdGVzdEluc2VydFNpZ25lZEJpdGZpZWxkSW5aZXJvNjQoKTsKIHZvaWQgdGVz
dEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18y
LmNwcAppbmRleCBkNDgyMzI0MjdhOGJkOTBlODJmMGI1YWRiNTkzNmUyMWU5MTNlZWZhLi4zNmVi
ZmM0NWE3OTg2OWFmMDk2ZWQ2ODg0OWU1N2U5YzY2NjliNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTM2OTksNiArMzY5OSwyMDAgQEAgdm9pZCB0ZXN0T3JOb3Q2
NCgpCiAgICAgfQogfQogCit2b2lkIHRlc3RCaXRmaWVsZFplcm9FeHRlbmQzMigpCit7CisgICAg
aWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE0LCAzMSB9OworCisgICAg
Ly8gVHVybiB0aGlzOiBaU2hyKFNobChuLCBhbW91bnQpKSwgYW1vdW50KQorICAgIC8vIEludG8g
dGhpczogQml0QW5kKG4sIG1hc2spCisgICAgLy8gQ29uZGl0aW9uczoKKyAgICAvLyAxLiAwIDw9
IGFtb3VudCA8IGRhdGFzaXplCisgICAgLy8gMi4gd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudAor
ICAgIC8vIDMuIG1hc2sgaXMgIShtYXNrICYgKG1hc2sgKyAxKSkgd2hlcmUgYml0Q291bnQobWFz
aykgPT0gd2lkdGgKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4sIHVpbnQzMl90IGFt
b3VudCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogYW1v
dW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
YW1vdW50KTsKKyAgICAgICAgVmFsdWUqIHNobFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTaGwsIE9yaWdpbigpLCBuVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgVmFs
dWUqIHpzaHJWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2lu
KCksIHNobFZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCB6c2hyVmFsdWUpOworCisgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpICYmIGFt
b3VudCA+IDApCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImFuZCIp
OworICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbiwgYW1vdW50KTsKKyAg
ICB9OworCisgICAgdWludDMyX3QgZGF0YXNpemUgPSBDSEFSX0JJVCAqIHNpemVvZih1aW50MzJf
dCk7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAg
IGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICB1aW50MzJfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCA9IGRhdGFzaXplIC0g
YW1vdW50OworICAgICAgICAgICAgdWludDMyX3QgbWFzayA9IHdpZHRoID09IGRhdGFzaXplID8g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpIDogKDFVIDw8IHdpZHRoKSAtIDFV
OworICAgICAgICAgICAgdWludDMyX3QgbGhzID0gdGVzdChuLCBhbW91bnQpOworICAgICAgICAg
ICAgdWludDMyX3QgcmhzID0gKG4gJiBtYXNrKTsKKyAgICAgICAgICAgIENIRUNLKGxocyA9PSBy
aHMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RCaXRmaWVsZFplcm9FeHRlbmQ2
NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2
MyB9OworCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBuLCB1aW50NjRfdCBhbW91bnQp
IC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisgICAgICAgIFZhbHVl
KiBzaGxWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwg
blZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB6c2hyVmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBzaGxWYWx1ZSwgYW1vdW50VmFs
dWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgenNoclZhbHVlKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhw
cm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBhbW91bnQgPiAwKQorICAgICAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJhbmQiKTsKKyAgICAgICAgcmV0dXJuIGludm9r
ZTx1aW50NjRfdD4oKmNvZGUsIG4sIGFtb3VudCk7CisgICAgfTsKKworICAgIHVpbnQ2NF90IGRh
dGFzaXplID0gQ0hBUl9CSVQgKiBzaXplb2YodWludDY0X3QpOworICAgIGZvciAoYXV0byBuT3Bl
cmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1v
dW50cykgeworICAgICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgdWludDY0X3Qgd2lkdGggPSBkYXRhc2l6ZSAtIGFtb3VudDsKKyAgICAgICAgICAgIHVp
bnQ2NF90IG1hc2sgPSB3aWR0aCA9PSBkYXRhc2l6ZSA/IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDY0X3Q+OjptYXgoKSA6ICgxVUxMIDw8IHdpZHRoKSAtIDFVTEw7CisgICAgICAgICAgICB1aW50
NjRfdCBsaHMgPSB0ZXN0KG4sIGFtb3VudCk7CisgICAgICAgICAgICB1aW50NjRfdCByaHMgPSAo
biAmIG1hc2spOworICAgICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdEV4dHJhY3RSZWdpc3RlcjMyKCkKK3sKKyAgICBpZiAoSlNDOjpP
cHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOyAgICAKKyAg
ICBWZWN0b3I8dWludDMyX3Q+IGxvd1dpZHRocyA9IHsgMCwgMTcsIDMxIH07CisKKyAgICAvLyBU
ZXN0IFBhdHRlcm46ICgobiAmIG1hc2sxKSA8PCBoaWdoV2lkdGgpIHwgKChtICYgbWFzazIpID4+
IGxvd1dpZHRoKQorICAgIC8vIFdoZXJlOiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRo
CisgICAgLy8gICAgICAgIG1hc2sxID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgIC8vICAgICAg
ICBtYXNrMiA9IH5tYXNrMQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWludDMy
X3QgbSwgdWludDMyX3QgbWFzazEsIHVpbnQzMl90IG1hc2syLCB1aW50MzJfdCBoaWdoV2lkdGgs
IHVpbnQzMl90IGxvd1dpZHRoKSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9j
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAg
IFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAg
ICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7Cisg
ICAgICAgIFZhbHVlKiBtYXNrMVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2syVmFsdWUgPSByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzazIpOworICAgICAg
ICBWYWx1ZSogaGlnaFdpZHRoVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgaGlnaFdpZHRoKTsKKyAgICAgICAgVmFsdWUqIGxvd1dpZHRoVmFsdWUg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbG93V2lkdGgp
OworCisgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFzazFWYWx1ZSk7CisgICAgICAgIFZh
bHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBs
ZWZ0QW5kVmFsdWUsIGhpZ2hXaWR0aFZhbHVlKTsKKworICAgICAgICBWYWx1ZSogcmlnaHRBbmRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbVZh
bHVlLCBtYXNrMlZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgcmlnaHRBbmRWYWx1ZSwgbG93V2lkdGhWYWx1
ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSAmJiBsb3dX
aWR0aCA+IDApCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImV4dHIi
KTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07
CisKKyAgICB1aW50MzJfdCBkYXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9mKHVpbnQzMl90KTsK
KyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8gbG93V2lkdGggOiBsb3dXaWR0aHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIHVpbnQzMl90IGhpZ2hXaWR0aCA9IGRhdGFzaXplIC0gbG93
V2lkdGg7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbWFzazEgPSAoMVUgPDwgbG93V2lkdGgp
IC0gMVU7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbWFzazIgPSB+bWFzazE7CisgICAgICAg
ICAgICAgICAgdWludDMyX3QgbGVmdCA9IGhpZ2hXaWR0aCA9PSBkYXRhc2l6ZSA/IDBVIDogKChu
ICYgbWFzazEpIDw8IGhpZ2hXaWR0aCk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgcmlnaHQg
PSAoKG0gJiBtYXNrMikgPj4gbG93V2lkdGgpOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHJo
cyA9IGxlZnQgfCByaWdodDsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBsaHMgPSB0ZXN0KG4s
IG0sIG1hc2sxLCBtYXNrMiwgaGlnaFdpZHRoLCBsb3dXaWR0aCk7CisgICAgICAgICAgICAgICAg
Q0hFQ0sobGhzID09IHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdEV4dHJhY3RSZWdpc3RlcjY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOyAgICAKKyAgICBWZWN0b3I8
dWludDY0X3Q+IGxvd1dpZHRocyA9IHsgMCwgMzQsIDYzIH07CisKKyAgICAvLyBUZXN0IFBhdHRl
cm46ICgobiAmIG1hc2sxKSA8PCBoaWdoV2lkdGgpIHwgKChtICYgbWFzazIpID4+IGxvd1dpZHRo
KQorICAgIC8vIFdoZXJlOiBoaWdoV2lkdGggPSBkYXRhc2l6ZSAtIGxvd1dpZHRoCisgICAgLy8g
ICAgICAgIG1hc2sxID0gKDEgPDwgbG93V2lkdGgpIC0gMQorICAgIC8vICAgICAgICBtYXNrMiA9
IH5tYXNrMQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbiwgdWludDY0X3QgbSwgdWlu
dDY0X3QgbWFzazEsIHVpbnQ2NF90IG1hc2syLCB1aW50NjRfdCBoaWdoV2lkdGgsIHVpbnQ2NF90
IGxvd1dpZHRoKSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBu
VmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBtYXNrMVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sxKTsKKyAgICAgICAgVmFsdWUqIG1hc2sy
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFz
azIpOworICAgICAgICBWYWx1ZSogaGlnaFdpZHRoVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaGlnaFdpZHRoKTsKKyAgICAgICAgVmFsdWUqIGxv
d1dpZHRoVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbG93V2lkdGgpOworCisgICAgICAgIFZhbHVlKiBsZWZ0QW5kVmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgbWFzazFWYWx1ZSk7
CisgICAgICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGws
IE9yaWdpbigpLCBsZWZ0QW5kVmFsdWUsIGhpZ2hXaWR0aFZhbHVlKTsKKworICAgICAgICBWYWx1
ZSogcmlnaHRBbmRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBP
cmlnaW4oKSwgbVZhbHVlLCBtYXNrMlZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0ID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgcmlnaHRBbmRWYWx1ZSwg
bG93V2lkdGhWYWx1ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAor
ICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpKTsKKwor
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJN
NjQoKSAmJiBsb3dXaWR0aCA+IDApCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgImV4dHIiKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIG4s
IG0pOworICAgIH07CisKKyAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IENIQVJfQklUICogc2l6ZW9m
KHVpbnQ2NF90KTsKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gbG93V2lkdGggOiBsb3dXaWR0aHMpIHsKKyAgICAgICAgICAgICAgICB1
aW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbSA9
IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGhpZ2hXaWR0aCA9IGRh
dGFzaXplIC0gbG93V2lkdGg7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbWFzazEgPSAoMVVM
TCA8PCBsb3dXaWR0aCkgLSAxVUxMOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1hc2syID0g
fm1hc2sxOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxlZnQgPSBoaWdoV2lkdGggPT0gZGF0
YXNpemUgPyAwVUxMIDogKChuICYgbWFzazEpIDw8IGhpZ2hXaWR0aCk7CisgICAgICAgICAgICAg
ICAgdWludDY0X3QgcmlnaHQgPSAoKG0gJiBtYXNrMikgPj4gbG93V2lkdGgpOworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IHJocyA9IGxlZnQgfCByaWdodDsKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBsaHMgPSB0ZXN0KG4sIG0sIG1hc2sxLCBtYXNrMiwgaGlnaFdpZHRoLCBsb3dXaWR0aCk7
CisgICAgICAgICAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIHZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFz
azMyKCkKIHsKICAgICAvLyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCkBAIC00NTk5
LDYgKzQ3OTMsMTAgQEAgdm9pZCBhZGRCaXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVl
PFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RCSUM2NCgp
KTsKICAgICBSVU4odGVzdE9yTm90MzIoKSk7CiAgICAgUlVOKHRlc3RPck5vdDY0KCkpOworICAg
IFJVTih0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kMzIoKSk7CisgICAgUlVOKHRlc3RCaXRmaWVsZFpl
cm9FeHRlbmQ2NCgpKTsKKyAgICBSVU4odGVzdEV4dHJhY3RSZWdpc3RlcjMyKCkpOworICAgIFJV
Tih0ZXN0RXh0cmFjdFJlZ2lzdGVyNjQoKSk7CiAgICAgUlVOKHRlc3RJbnNlcnRTaWduZWRCaXRm
aWVsZEluWmVybzMyKCkpOwogICAgIFJVTih0ZXN0SW5zZXJ0U2lnbmVkQml0ZmllbGRJblplcm82
NCgpKTsKICAgICBSVU4odGVzdEV4dHJhY3RTaWduZWRCaXRmaWVsZDMyKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>