<?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>194007</bug_id>
          
          <creation_ts>2019-01-29 23:03:49 -0800</creation_ts>
          <short_desc>[JSC][BigEndians] Several JSC stress tests failing</short_desc>
          <delta_ts>2020-03-19 10:45:23 -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="Tomas Popela">tpopela</reporter>
          <assigned_to name="Tomas Popela">tpopela</assigned_to>
          <cc>dominik.infuehr</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1499915</commentid>
    <comment_count>0</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-01-29 23:03:49 -0800</bug_when>
    <thetext>After bug 132333 has been fixed by Mark (thanks again!) I can run the stress suite again on big endian machines. Nearly everything passes, but these fails:

+ &apos;[&apos; -f ./results/failed &apos;]&apos;
+ cat ./results/failed
stress/dataview-jit-get.js.default
stress/dataview-jit-neuter.js.default
stress/dataview-jit-set.js.default
stress/dataview-get-cse.js.default
stress/dataview-jit-set-nan.js.default

Running stress/dataview-jit-get.js.default
stress/dataview-jit-get.js.default: Exception: Error: Bad!
stress/dataview-jit-get.js.default: assert@dataview-jit-get.js:5:24
stress/dataview-jit-get.js.default: test1@dataview-jit-get.js:28:15
stress/dataview-jit-get.js.default: global code@dataview-jit-get.js:67:6
stress/dataview-jit-get.js.default: ERROR: Unexpected exit code: 3
FAIL: stress/dataview-jit-get.js.default

Running stress/dataview-jit-neuter.js.default
stress/dataview-jit-neuter.js.default: Exception: Error: Bad!
stress/dataview-jit-neuter.js.default: assert@dataview-jit-neuter.js:5:24
stress/dataview-jit-neuter.js.default: test@dataview-jit-neuter.js:20:15
stress/dataview-jit-neuter.js.default: global code@dataview-jit-neuter.js:32:5
FAIL: stress/dataview-jit-neuter.js.default

Running stress/dataview-jit-set.js.default
stress/dataview-jit-set.js.default: Exception: Error
stress/dataview-jit-set.js.default: assert@dataview-jit-set.js:5:24
stress/dataview-jit-set.js.default: test@dataview-jit-set.js:64:15
stress/dataview-jit-set.js.default: global code@dataview-jit-set.js:112:5
stress/dataview-jit-set.js.default: ERROR: Unexpected exit code: 3
FAIL: stress/dataview-jit-set.js.default

stress/dataview-get-cse.js.default: Exception: Error
stress/dataview-get-cse.js.default: assert@dataview-get-cse.js:5:24
stress/dataview-get-cse.js.default: test3@dataview-get-cse.js:57:15
stress/dataview-get-cse.js.default: global code@dataview-get-cse.js:60:6
stress/dataview-get-cse.js.default: ERROR: Unexpected exit code: 3
FAIL: stress/dataview-get-cse.js.default

Running stress/dataview-jit-set-nan.js.default
stress/dataview-jit-set-nan.js.default: Exception: Error
stress/dataview-jit-set-nan.js.default: assert@dataview-jit-set-nan.js:7:24
stress/dataview-jit-set-nan.js.default: test@dataview-jit-set-nan.js:33:15
stress/dataview-jit-set-nan.js.default: global code@dataview-jit-set-nan.js:52:5
stress/dataview-jit-set-nan.js.default: ERROR: Unexpected exit code: 3
FAIL: stress/dataview-jit-set-nan.js.default

I see that some of these tests do have something to do with endianess (as stated in them). But I&apos;m not sure whether it&apos;s broken, or these tests should be skipped when running on CLoop (on x86_64, ppc64le and others they passes - so probably the big endian part is buggy). What makes me thing about skipping them is that when Tools/Scripts/run-jsc-stress-tests --no-jit --memory-limited is involved then all the failing tests are printed prefixed with &quot;Skipped&quot;, but they are run in the end.

Can you please Saam (as an author of these tests) clarify what&apos;s wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499945</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-30 01:46:51 -0800</bug_when>
    <thetext>All of these are JIT tests. They say so in their names (note: CSE refers to a JIT optimization).  Hence, they are not relevant to the CLoop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499955</commentid>
    <comment_count>2</comment_count>
      <attachid>360569</attachid>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-01-30 04:19:57 -0800</bug_when>
    <thetext>Created attachment 360569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499956</commentid>
    <comment_count>3</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-01-30 04:20:20 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #1)
&gt; All of these are JIT tests. They say so in their names (note: CSE refers to
&gt; a JIT optimization).  Hence, they are not relevant to the CLoop.

Thank you for the clarification Mark!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499979</commentid>
    <comment_count>4</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2019-01-30 06:31:13 -0800</bug_when>
    <thetext>Not sure these tests should be skipped if `$jitTests` is false, since we do run these tests successfully on little endian both with C_LOOP and disabled DFG.

Couldn&apos;t you just disable them just for big endian instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499980</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-30 06:31:57 -0800</bug_when>
    <thetext>Hmmm, I know I said that these tests are for the JIT.  However, they do seem to pass on x86_64.  So I wonder if your errors aren’t real.  Can you investigate first why they fail?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499981</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-30 06:32:39 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #5)
&gt; Hmmm, I know I said that these tests are for the JIT.  However, they do seem
&gt; to pass on x86_64.  So I wonder if your errors aren’t real.  Can you
&gt; investigate first why they fail?

I mean they pass for CLoop on x86_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500417</commentid>
    <comment_count>7</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-01-30 21:46:52 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #6)
&gt; (In reply to Mark Lam from comment #5)
&gt; &gt; Hmmm, I know I said that these tests are for the JIT.  However, they do seem
&gt; &gt; to pass on x86_64.  So I wonder if your errors aren’t real.  Can you
&gt; &gt; investigate first why they fail?
&gt; 
&gt; I mean they pass for CLoop on x86_64.

Yes, that&apos;s what I wrote in the first comment - they do pass on x86_64, ppc64le on other little endian arches. That&apos;s why I wanted some clarification. I will look for the reason why they are failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500420</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-30 21:59:45 -0800</bug_when>
    <thetext>(In reply to Tomas Popela from comment #7)
&gt; (In reply to Mark Lam from comment #6)
&gt; &gt; (In reply to Mark Lam from comment #5)
&gt; &gt; &gt; Hmmm, I know I said that these tests are for the JIT.  However, they do seem
&gt; &gt; &gt; to pass on x86_64.  So I wonder if your errors aren’t real.  Can you
&gt; &gt; &gt; investigate first why they fail?
&gt; &gt; 
&gt; &gt; I mean they pass for CLoop on x86_64.
&gt; 
&gt; Yes, that&apos;s what I wrote in the first comment - they do pass on x86_64,
&gt; ppc64le on other little endian arches. That&apos;s why I wanted some
&gt; clarification. I will look for the reason why they are failing.

Sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500537</commentid>
    <comment_count>9</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-01-31 04:33:58 -0800</bug_when>
    <thetext>Just a quick check - if I reverse all the expected results in stress/dataview-jit-get.js (the little ones with big) then the test passes on big endians, but fails on little :)..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500589</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-31 08:40:21 -0800</bug_when>
    <thetext>(In reply to Tomas Popela from comment #9)
&gt; Just a quick check - if I reverse all the expected results in
&gt; stress/dataview-jit-get.js (the little ones with big) then the test passes
&gt; on big endians, but fails on little :)..

This isn’t at all surprising. With typed arrays, JS can observe endianness. So it’s also not surprising that we have tests that are dependent on endianness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501062</commentid>
    <comment_count>11</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-02-01 02:00:21 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #10)
&gt; (In reply to Tomas Popela from comment #9)
&gt; &gt; Just a quick check - if I reverse all the expected results in
&gt; &gt; stress/dataview-jit-get.js (the little ones with big) then the test passes
&gt; &gt; on big endians, but fails on little :)..
&gt; 
&gt; This isn’t at all surprising. With typed arrays, JS can observe endianness.
&gt; So it’s also not surprising that we have tests that are dependent on
&gt; endianness.

Ok, it&apos;s not surprising, but then there is something wrong with the test.

If we will look at parts of dataview-jit-set.js

    function storeLittleEndian(dv, index, value) {
        dv.setInt16(index, value, true);
    }

    let buffer = new ArrayBuffer(2);
    let arr = new Uint16Array(buffer);
    let dv = new DataView(buffer);

    for (let i = 0; i &lt; 10000; ++i) {
        storeLittleEndian(dv, 0, 0xfaba);
        throw new Error(&quot;Value: &quot; + arr[0]);
        assert(arr[0] === 0xfaba);

Then on x86_64 it will print:

Exception: Error: Value: 0xfaba

And that&apos;s expected. But on real big endian hardware it will print:

Exception: Error: Value: 0xbafa

So it stored 0xfaba not as a little indian value, but as a big endian value (as it&apos;s running on big endian arch).

Then the assert will fail on the hardcoded value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501841</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-04 08:58:13 -0800</bug_when>
    <thetext>(In reply to Tomas Popela from comment #11)
&gt; (In reply to Saam Barati from comment #10)
&gt; &gt; (In reply to Tomas Popela from comment #9)
&gt; &gt; &gt; Just a quick check - if I reverse all the expected results in
&gt; &gt; &gt; stress/dataview-jit-get.js (the little ones with big) then the test passes
&gt; &gt; &gt; on big endians, but fails on little :)..
&gt; &gt; 
&gt; &gt; This isn’t at all surprising. With typed arrays, JS can observe endianness.
&gt; &gt; So it’s also not surprising that we have tests that are dependent on
&gt; &gt; endianness.
&gt; 
&gt; Ok, it&apos;s not surprising, but then there is something wrong with the test.
&gt; 
&gt; If we will look at parts of dataview-jit-set.js
&gt; 
&gt;     function storeLittleEndian(dv, index, value) {
&gt;         dv.setInt16(index, value, true);
&gt;     }
&gt; 
&gt;     let buffer = new ArrayBuffer(2);
&gt;     let arr = new Uint16Array(buffer);
&gt;     let dv = new DataView(buffer);
&gt; 
&gt;     for (let i = 0; i &lt; 10000; ++i) {
&gt;         storeLittleEndian(dv, 0, 0xfaba);
&gt;         throw new Error(&quot;Value: &quot; + arr[0]);
&gt;         assert(arr[0] === 0xfaba);
&gt; 
&gt; Then on x86_64 it will print:
&gt; 
&gt; Exception: Error: Value: 0xfaba
&gt; 
&gt; And that&apos;s expected. But on real big endian hardware it will print:
&gt; 
&gt; Exception: Error: Value: 0xbafa
&gt; 
&gt; So it stored 0xfaba not as a little indian value, but as a big endian value
&gt; (as it&apos;s running on big endian arch).
&gt; 
&gt; Then the assert will fail on the hardcoded value.

Again, this isn’t surprising since it’s doing a single load of the value. It should instead read byte-by-byte.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501843</commentid>
    <comment_count>13</comment_count>
      <attachid>360569</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-04 08:59:44 -0800</bug_when>
    <thetext>Comment on attachment 360569
Patch

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

&gt; JSTests/ChangeLog:8
&gt; +        Skip these tests when JIT is not enabled, as they require it.

This is definitely not right. DataView exists with the JIT off. Why not just fix the test to be endian agnostic? Alternatively, I’m ok with you skipping if it’s not a little endian architecture</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501871</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-04 10:03:47 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #12)
&gt; Again, this isn’t surprising since it’s doing a single load of the value. It
&gt; should instead read byte-by-byte.

Tomas, this is how you can fix the test to work for big endian platforms as well:
1. Add a isBigEndian() function to the JSDollarVM object.  See the &quot;getpid&quot; function as examples.
2. In the tests, add a adjustForEndianess(x) function that adjusts swizzle the bytes if $vm.isBigEndian().
3. Modify the tests to swizzle value to set e.g.
       ta[0] = adjustForEndianess(0x01020304);

Note: all JSC tests will automatically be run with the --useDollarVM=true option specified.  Hence, you can use the $vm object in the test.  If you&apos;re testing with the jsc manually, you&apos;ll need to specify the --useDollarVM=true option yourself at the jsc command line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501920</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-04 11:26:01 -0800</bug_when>
    <thetext>You can also write an isBegEndian function solely in JS. You don’t need the help of C++</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501922</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-04 11:26:46 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #15)
&gt; You can also write an isBegEndian function solely in JS. You don’t need the
&gt; help of C++

Oh, good point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507248</commentid>
    <comment_count>17</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-02-18 04:22:09 -0800</bug_when>
    <thetext>While working on patch I found one case where the suggested solution doesn&apos;t work:

&quot;use strict&quot;;

function assert(b) {
    if (!b)
        throw new Error;
}

function getIsLittleEndian() {
    let ab = new ArrayBuffer(2);
    let ta = new Int16Array(ab);
    ta[0] = 0x0102;
    let dv = new DataView(ab);
    return dv.getInt16(0, true) === 0x0102;
}

let isLittleEndian = getIsLittleEndian();

function adjustForEndianessFloat32(value) {
    if (isLittleEndian)
        return value;

    let ab = new ArrayBuffer(4);
    let ta = new Float32Array(ab);
    ta[0] = value;
    let dv = new DataView(ab);
    return dv.getFloat32(0, true);
}

function test() {
    function storeLittleEndian(dv, index, value) {
        dv.setFloat32(index, value, true);
    }
    noInline(storeLittleEndian);

    function store(dv, index, value, littleEndian) {
        dv.setFloat32(index, value, littleEndian);
    }
    noInline(store);

    let buffer = new ArrayBuffer(4);
    let arr = new Float32Array(buffer);
    let bits = new Uint32Array(buffer);
    let dv = new DataView(buffer);

    for (let i = 0; i &lt; 10000; ++i) {
        storeLittleEndian(dv, 0, adjustForEndianessFloat32(12912.124123215122));
        assert(arr[0] === 12912.1240234375);
        assert(bits[0] === 0x4649c07f);
    }
}
test();


On big endian machine the arr[0] contains 6.905458702346266e-41 and bits[0] 0xc07f.

If I replace the storeLittleEndian() call with:

store(dv, 0, 12912.124123215122, isLittleEndian);

then it does work, but it&apos;s strange that the storeLittleEndian() doesn&apos;t.

Is the 12912.124123215122 number somehow special? If I observe what&apos;s in arr[0], when I change that number then it&apos;s:

input to adjustForEndianessFloat32() : arr[0] value
12912 : 12912
12912.1 : 12912.099609375
12912.12 : 12912.1201171875
12912.124 : 6.905458702346266e-41

Does anyone have an idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516493</commentid>
    <comment_count>18</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-03-14 06:41:44 -0700</bug_when>
    <thetext>I&apos;m gonna upload the patch that I&apos;ve been using in downstream JSC CI for some time. It still has the problem described in comment 17.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516494</commentid>
    <comment_count>19</comment_count>
      <attachid>364657</attachid>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2019-03-14 06:43:02 -0700</bug_when>
    <thetext>Created attachment 364657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631695</commentid>
    <comment_count>20</comment_count>
      <attachid>364657</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-19 09:50:12 -0700</bug_when>
    <thetext>Comment on attachment 364657
Patch

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

Skimming over this patch, it looks good to me. Hope it still applies more or less cleanly.

&gt; JSTests/stress/dataview-jit-set-nan.js:57
&gt; -        storeLittleEndian(dv, 0, 12912.124123215122);
&gt; +        store(dv, 0, 12912.124123215122, isLittleEndian);
&gt; +        //storeLittleEndian(dv, 0, adjustForEndianessFloat32(12912.124123215122));

Please report a new bug for this, and add a FIXME comment pointing to the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631705</commentid>
    <comment_count>21</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2020-03-19 10:08:13 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #20)
&gt; Comment on attachment 364657 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=364657&amp;action=review
&gt; 
&gt; Skimming over this patch, it looks good to me. Hope it still applies more or
&gt; less cleanly.
&gt; 
&gt; &gt; JSTests/stress/dataview-jit-set-nan.js:57
&gt; &gt; -        storeLittleEndian(dv, 0, 12912.124123215122);
&gt; &gt; +        store(dv, 0, 12912.124123215122, isLittleEndian);
&gt; &gt; +        //storeLittleEndian(dv, 0, adjustForEndianessFloat32(12912.124123215122));
&gt; 
&gt; Please report a new bug for this, and add a FIXME comment pointing to the
&gt; bug.

Opened https://bugs.webkit.org/show_bug.cgi?id=209289</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631718</commentid>
    <comment_count>22</comment_count>
      <attachid>393992</attachid>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2020-03-19 10:22:16 -0700</bug_when>
    <thetext>Created attachment 393992
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631725</commentid>
    <comment_count>23</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-03-19 10:44:28 -0700</bug_when>
    <thetext>Committed r258710: &lt;https://trac.webkit.org/changeset/258710&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 393992.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631726</commentid>
    <comment_count>24</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-19 10:45:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/60640238&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360569</attachid>
            <date>2019-01-30 04:19:57 -0800</date>
            <delta_ts>2019-03-14 06:42:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194007-20190130131956.patch</filename>
            <type>text/plain</type>
            <size>2743</size>
            <attacher name="Tomas Popela">tpopela</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwNzA3CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxv
ZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDRjZmNkNTA2NjYyNDU2MDM5NmYxOGE5NzgyYTky
ZmU2MmZmNTc0MjIuLjg2ODFmMDU0NTM5ZTU4YjI2NjY0OWJmYjk0NjY0N2MxN2FhODZjMmEgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTktMDEtMzAgIFRvbWFzIFBvcGVsYSAgPHRwb3BlbGFAcmVkaGF0LmNv
bT4KKworICAgICAgICBbSlNDXVtCaWdFbmRpYW5zXSBTZXZlcmFsIEpTQyBzdHJlc3MgdGVzdHMg
ZmFpbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk0MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2tpcCB0aGVzZSB0ZXN0cyB3aGVuIEpJVCBpcyBub3QgZW5hYmxlZCwgYXMgdGhleSByZXF1aXJl
IGl0LgorCisgICAgICAgICogc3RyZXNzL2RhdGF2aWV3LWdldC1jc2UuanM6CisgICAgICAgICog
c3RyZXNzL2RhdGF2aWV3LWppdC1nZXQuanM6CisgICAgICAgICogc3RyZXNzL2RhdGF2aWV3LWpp
dC1uZXV0ZXIuanM6CisgICAgICAgICogc3RyZXNzL2RhdGF2aWV3LWppdC1zZXQtbmFuLmpzOgor
ICAgICAgICAqIHN0cmVzcy9kYXRhdmlldy1qaXQtc2V0LmpzOgorCiAyMDE5LTAxLTI5ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBWYWx1ZVJlY292ZXJ5OjpyZWNv
dmVyKCkgc2hvdWxkIHB1cmlmeSBOYU4gdmFsdWVzIGl0IHJlY292ZXJzLgpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctZ2V0LWNzZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2RhdGF2
aWV3LWdldC1jc2UuanMKaW5kZXggZTNkNDdhOTM4ZTU4MWJhYzc5NzVjMzQ3NThmMWUxMTQ4ZTQz
MGQ5NS4uYTVhNzJkZDhhNTlmYWMyMzQxMzM5NzFmZWI4YWQyYTQ1NWYzMWRhNSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctZ2V0LWNzZS5qcworKysgYi9KU1Rlc3RzL3N0cmVz
cy9kYXRhdmlldy1nZXQtY3NlLmpzCkBAIC0xLDMgKzEsNCBAQAorLy9AIHNraXAgaWYgbm90ICRq
aXRUZXN0cwogInVzZSBzdHJpY3QiOwogCiBmdW5jdGlvbiBhc3NlcnQoYikgewpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LWdldC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Rh
dGF2aWV3LWppdC1nZXQuanMKaW5kZXggZTA2NjVhZjIwYzI0YjEwMzdkYWIxZWQwMjVjNmFmYmU1
YTI4NjdlNi4uNmRkZmQ2ZDdjMDhlMWJkMjQ2MDE4NzNiNjZlODU3MTllNDBiMzI0MyAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LWdldC5qcworKysgYi9KU1Rlc3RzL3N0
cmVzcy9kYXRhdmlldy1qaXQtZ2V0LmpzCkBAIC0xLDMgKzEsNCBAQAorLy9AIHNraXAgaWYgbm90
ICRqaXRUZXN0cwogInVzZSBzdHJpY3QiOwogCiBmdW5jdGlvbiBhc3NlcnQoYikgewpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LW5ldXRlci5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL2RhdGF2aWV3LWppdC1uZXV0ZXIuanMKaW5kZXggNjM1ZmM0YzcxMmRmMmY5ZTY2M2M2NDI5
Yjc5YjE0OWE4YmU1MDFiZi4uZmVjNDY3MmQ3NTIwOTllOGI4ODRmNzg3NGI2MTU4MTZmYjFkMTdi
YSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LW5ldXRlci5qcworKysg
Yi9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtbmV1dGVyLmpzCkBAIC0xLDMgKzEsNCBAQAor
Ly9AIHNraXAgaWYgbm90ICRqaXRUZXN0cwogInVzZSBzdHJpY3QiOwogCiBmdW5jdGlvbiBhc3Nl
cnQoYikgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LXNldC1uYW4u
anMgYi9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LW5hbi5qcwppbmRleCBjYmQxY2Ri
M2FmZTE3OWMwMzM5ZmUwZGEyOWFlZmU1YjY3NjVhZjMwLi44ZDdiNDRlMDI3MjhlNjA2Yjc5OWYx
OGU1MjU3ZjJiODhhYzNlYmI5IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1q
aXQtc2V0LW5hbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LW5hbi5q
cwpAQCAtMSwzICsxLDQgQEAKKy8vQCBza2lwIGlmIG5vdCAkaml0VGVzdHMKIC8vQCBza2lwIGlm
ICRhcmNoaXRlY3R1cmUgPT0gIm1pcHMiCiAKICJ1c2Ugc3RyaWN0IjsKQEAgLTQ5LDQgKzUwLDQg
QEAgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAgICAgYXNzZXJ0KGJpdHNbMF0gPT09IDB4MDQwMzAy
MDEpOwogICAgIH0KIH0KLXRlc3QoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit0ZXN0
KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LmpzIGIvSlNU
ZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LXNldC5qcwppbmRleCA5MjM4ZWI3M2Y5MWRkMDY0OWU5
YjdmOGIxNjIxMmQ4OGM3ZjQ2MmNhLi5hOGM1NzdiN2M1N2UzMmMzODNlZTIxMWM1YjRmMzM5NjFm
MTc4MWYyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWppdC1zZXQuanMKQEAgLTEsMyArMSw0IEBACisv
L0Agc2tpcCBpZiBub3QgJGppdFRlc3RzCiAidXNlIHN0cmljdCI7CiAKIGZ1bmN0aW9uIGFzc2Vy
dChiKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364657</attachid>
            <date>2019-03-14 06:43:02 -0700</date>
            <delta_ts>2020-03-19 10:22:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194007-20190314144301.patch</filename>
            <type>text/plain</type>
            <size>25605</size>
            <attacher name="Tomas Popela">tpopela</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyOTQxCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxv
ZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFmZTZmNjc1NDNhMGQxMDVlZmE2MjU2MjEzZDcx
NTRlYjQyZmQzN2MuLmUyYWI1ZDVmZmUzODViZGM4M2ZjMjljNDM4MDI4ZjkwOTUxOTBmNzkgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTggQEAKKzIwMTktMDMtMTQgIFRvbWFzIFBvcGVsYSAgPHRwb3BlbGFAcmVkaGF0LmNv
bT4KKworICAgICAgICBbSlNDXVtCaWdFbmRpYW5zXSBTZXZlcmFsIEpTQyBzdHJlc3MgdGVzdHMg
ZmFpbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk0MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRhcHQgdGhlIERhdGFWaWV3IHRlc3RzIHRvIGJlIGFibGUgdG8gcGFzcyBvbiBsaXR0bGUgZW5k
aWFuIGFzIHdlbGwKKyAgICAgICAgYXMgdGhlIGJpZyBlbmRpYW4gaGFyZHdhcmUuIERvIHNvIGJ5
IGludHJvZHVjaW5nIG1ldGhvZCB0aGF0IGRldGVybWluZQorICAgICAgICB0aGUgZW5kaWFuZXNz
IGFuZCBiYXNlZCBvbiBpdHMgdmFsdWUgaXQgc2F2ZXMgdGhlIGV4cGVjdGVkIHJlc3VsdHMgaW4K
KyAgICAgICAgdGhlIHJpZ2h0IGZvcm1hdC4KKworICAgICAgICAqIHN0cmVzcy9kYXRhdmlldy1n
ZXQtY3NlLmpzOgorICAgICAgICAoZ2V0SXNMaXR0bGVFbmRpYW4pOgorICAgICAgICAoYWRqdXN0
Rm9yRW5kaWFuZXNzKToKKyAgICAgICAgKHRlc3QzLmZvbyk6CisgICAgICAgICh0ZXN0Myk6Cisg
ICAgICAgICogc3RyZXNzL2RhdGF2aWV3LWppdC1nZXQuanM6CisgICAgICAgIChnZXRJc0xpdHRs
ZUVuZGlhbik6CisgICAgICAgICh0ZXN0MS5hZGp1c3RGb3JFbmRpYW5lc3MpOgorICAgICAgICAo
dGVzdDEpOgorICAgICAgICAodGVzdDIuYWRqdXN0Rm9yRW5kaWFuZXNzKToKKyAgICAgICAgKHRl
c3QyKToKKyAgICAgICAgKHRlc3QzLmFkanVzdEZvckVuZGlhbmVzcyk6CisgICAgICAgICh0ZXN0
Myk6CisgICAgICAgIChhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIpOgorICAgICAgICAodGVzdDQp
OgorICAgICAgICAodGVzdDUpOgorICAgICAgICAodGVzdDYpOgorICAgICAgICAodGVzdDcpOgor
ICAgICAgICAodGVzdDgpOgorICAgICAgICAqIHN0cmVzcy9kYXRhdmlldy1qaXQtbmV1dGVyLmpz
OgorICAgICAgICAoZ2V0SXNMaXR0bGVFbmRpYW4pOgorICAgICAgICAoYWRqdXN0Rm9yRW5kaWFu
ZXNzKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAodGVzdDIpOgorICAgICAgICAqIHN0cmVz
cy9kYXRhdmlldy1qaXQtc2V0LW5hbi5qczoKKyAgICAgICAgKGdldElzTGl0dGxlRW5kaWFuKToK
KyAgICAgICAgKGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0MzIpOgorICAgICAgICAodGVzdCk6Cisg
ICAgICAgICogc3RyZXNzL2RhdGF2aWV3LWppdC1zZXQuanM6CisgICAgICAgIChnZXRJc0xpdHRs
ZUVuZGlhbik6CisgICAgICAgIChyZWFkSGV4KToKKyAgICAgICAgKGFkanVzdEZvckVuZGlhbmVz
c1VpbnQxNik6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKHRlc3QyKToKKyAgICAgICAgKGFk
anVzdEZvckVuZGlhbmVzc1VpbnQzMik6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAgICh0ZXN0
NCk6CisgICAgICAgIChhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKToKKyAgICAgICAgKHRlc3Q1
KToKKyAgICAgICAgKGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0NjQpOgorICAgICAgICAodGVzdDYp
OgorICAgICAgICAoaXNMaXR0bGVFbmRpYW4pOiBEZWxldGVkLgorCiAyMDE5LTAzLTEzICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBHYXJkZW5pbmc6IHJlZHVjaW5n
IHRoZSB2YXJpYW50cyBvbiAyIHRlc3RzIHRvIGF2b2lkIHRpbWluZyBvdXQgb24gSlNDIERlYnVn
IHF1ZXVlLgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctZ2V0LWNzZS5qcyBi
L0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWdldC1jc2UuanMKaW5kZXggZTNkNDdhOTM4ZTU4MWJh
Yzc5NzVjMzQ3NThmMWUxMTQ4ZTQzMGQ5NS4uMmNiOGUzNmIyYzU2ODFmNmQwNDUzMjk3YjhmOTMz
MWUxYzQzNDljNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctZ2V0LWNzZS5q
cworKysgYi9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1nZXQtY3NlLmpzCkBAIC01LDYgKzUsMjYg
QEAgZnVuY3Rpb24gYXNzZXJ0KGIpIHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9yOwogfQogCitm
dW5jdGlvbiBnZXRJc0xpdHRsZUVuZGlhbigpIHsKKyAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZm
ZXIoMik7CisgICAgbGV0IHRhID0gbmV3IEludDE2QXJyYXkoYWIpOworICAgIHRhWzBdID0gMHgw
MTAyOworICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgcmV0dXJuIGR2LmdldElu
dDE2KDAsIHRydWUpID09PSAweDAxMDI7Cit9CisKK2xldCBpc0xpdHRsZUVuZGlhbiA9IGdldElz
TGl0dGxlRW5kaWFuKCk7CisKK2Z1bmN0aW9uIGFkanVzdEZvckVuZGlhbmVzcyh2YWx1ZSkgewor
ICAgIGlmIChpc0xpdHRsZUVuZGlhbikKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGV0
IGFiID0gbmV3IEFycmF5QnVmZmVyKDgpOworICAgIGxldCB0YSA9IG5ldyBGbG9hdDY0QXJyYXko
YWIpOworICAgIHRhWzBdID0gdmFsdWU7CisgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsK
KyAgICByZXR1cm4gZHYuZ2V0RmxvYXQ2NCgwLCB0cnVlKTsKK30KIAogZnVuY3Rpb24gdGVzdDEo
KSB7CiAgICAgZnVuY3Rpb24gZm9vKGR2KSB7CkBAIC00MSw3ICs2MSw3IEBAIHRlc3QyKCk7CiBm
dW5jdGlvbiB0ZXN0MygpIHsKICAgICBmdW5jdGlvbiBmb28oZHYsIHRhKSB7CiAgICAgICAgIGxl
dCBhID0gZHYuZ2V0RmxvYXQ2NCgwLCB0cnVlKTsKLSAgICAgICAgdGFbMF0gPSBNYXRoLlBJOwor
ICAgICAgICB0YVswXSA9IGFkanVzdEZvckVuZGlhbmVzcyhNYXRoLlBJKTsKICAgICAgICAgbGV0
IGIgPSBkdi5nZXRGbG9hdDY0KDAsIHRydWUpOwogICAgICAgICByZXR1cm4gW2EsIGJdOwogICAg
IH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWppdC1nZXQuanMgYi9KU1Rl
c3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtZ2V0LmpzCmluZGV4IGUwNjY1YWYyMGMyNGIxMDM3ZGFi
MWVkMDI1YzZhZmJlNWEyODY3ZTYuLjFkMWVkMDZjYThmOWIzY2Y1ZDAyNzUzNmI0MTMwMDgyZTVk
MjY0MzUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWppdC1nZXQuanMKKysr
IGIvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LWdldC5qcwpAQCAtNSw2ICs1LDE2IEBAIGZ1
bmN0aW9uIGFzc2VydChiKSB7CiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkISIpOwogfQog
CitmdW5jdGlvbiBnZXRJc0xpdHRsZUVuZGlhbigpIHsKKyAgICBsZXQgYWIgPSBuZXcgQXJyYXlC
dWZmZXIoMik7CisgICAgbGV0IHRhID0gbmV3IEludDE2QXJyYXkoYWIpOworICAgIHRhWzBdID0g
MHgwMTAyOworICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgcmV0dXJuIGR2Lmdl
dEludDE2KDAsIHRydWUpID09PSAweDAxMDI7Cit9CisKK2xldCBpc0xpdHRsZUVuZGlhbiA9IGdl
dElzTGl0dGxlRW5kaWFuKCk7CisKIGZ1bmN0aW9uIHRlc3QxKCkgewogICAgIGZ1bmN0aW9uIGJp
Z0VuZGlhbihvLCBpKSB7CiAgICAgICAgIHJldHVybiBvLmdldEludDMyKGksIGZhbHNlKTsKQEAg
LTE4LDEwICsyOCwyMCBAQCBmdW5jdGlvbiB0ZXN0MSgpIHsKICAgICAgICAgcmV0dXJuIG8uZ2V0
SW50MzIoaSwgYik7CiAgICAgfQogICAgIG5vSW5saW5lKGJpRW5kaWFuKTsKKyAgICBmdW5jdGlv
biBhZGp1c3RGb3JFbmRpYW5lc3ModmFsdWUpIHsKKyAgICAgICAgaWYgKGlzTGl0dGxlRW5kaWFu
KQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgICAgIGxldCBhYiA9IG5ldyBBcnJh
eUJ1ZmZlcig0KTsKKyAgICAgICAgbGV0IHRhID0gbmV3IEludDMyQXJyYXkoYWIpOworICAgICAg
ICB0YVswXSA9IHZhbHVlOworICAgICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYWIpOworICAg
ICAgICByZXR1cm4gZHYuZ2V0SW50MzIoMCwgdHJ1ZSk7CisgICAgfQogCiAgICAgbGV0IGFiID0g
bmV3IEFycmF5QnVmZmVyKDQpOwogICAgIGxldCB0YSA9IG5ldyBJbnQzMkFycmF5KGFiKTsKLSAg
ICB0YVswXSA9IDB4MDEwMjAzMDQ7CisgICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3MoMHgw
MTAyMDMwNCk7CiAgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKIAogICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewpAQCAtNDMsNyArNjMsNyBAQCBmdW5jdGlvbiB0ZXN0
MSgpIHsKICAgICB9CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZ2V0IHRoZSByaWdodCBzaWduLgot
ICAgIHRhWzBdID0gLTMyMzYxMzg2OyAvLyAweGZlMTIzNDU2CisgICAgdGFbMF0gPSBhZGp1c3RG
b3JFbmRpYW5lc3MoLTMyMzYxMzg2KTsgLy8gMHhmZTEyMzQ1NgogICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgewogICAgICAgICBhc3NlcnQoYmlnRW5kaWFuKGR2LCAwKSA9PT0g
MHg1NjM0MTJmZSk7CiAgICAgICAgIGFzc2VydChsaXR0bGVFbmRpYW4oZHYsIDApID09PSAtMzIz
NjEzODYpOwpAQCAtNTQsNyArNzQsNyBAQCBmdW5jdGlvbiB0ZXN0MSgpIHsKICAgICB9CiAKICAg
ICAvLyAtMjE0NjI5MDYwMiA9PSAoaW50KTB4ODAxMjM0NTYKLSAgICB0YVswXSA9IDB4NTYzNDEy
ODA7CisgICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3MoMHg1NjM0MTI4MCk7CiAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgICAgIGFzc2VydChiaWdFbmRpYW4o
ZHYsIDApID09PSAtMjE0NjI5MDYwMik7CiAgICAgICAgIGFzc2VydChsaXR0bGVFbmRpYW4oZHYs
IDApID09PSAweDU2MzQxMjgwKTsKQEAgLTc5LDEwICs5OSwyMCBAQCBmdW5jdGlvbiB0ZXN0Migp
IHsKICAgICAgICAgcmV0dXJuIG8uZ2V0SW50MTYoaSwgYik7CiAgICAgfQogICAgIG5vSW5saW5l
KGJpRW5kaWFuKTsKKyAgICBmdW5jdGlvbiBhZGp1c3RGb3JFbmRpYW5lc3ModmFsdWUpIHsKKyAg
ICAgICAgaWYgKGlzTGl0dGxlRW5kaWFuKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworCisg
ICAgICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAgICAgICAgbGV0IHRhID0gbmV3
IEludDE2QXJyYXkoYWIpOworICAgICAgICB0YVswXSA9IHZhbHVlOworICAgICAgICBsZXQgZHYg
PSBuZXcgRGF0YVZpZXcoYWIpOworICAgICAgICByZXR1cm4gZHYuZ2V0SW50MTYoMCwgdHJ1ZSk7
CisgICAgfQogCiAgICAgbGV0IGFiID0gbmV3IEFycmF5QnVmZmVyKDIpOwogICAgIGxldCB0YSA9
IG5ldyBJbnQxNkFycmF5KGFiKTsKLSAgICB0YVswXSA9IDB4MDEwMjsKKyAgICB0YVswXSA9IGFk
anVzdEZvckVuZGlhbmVzcygweDAxMDIpOwogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7
CiAKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKQEAgLTk1LDcgKzEyNSw3
IEBAIGZ1bmN0aW9uIHRlc3QyKCkgewogICAgIH0KIAogICAgIC8vIENoZWNrIHNpZ24uCi0gICAg
dGFbMF0gPSAtNTEyOyAvLyAweGZlMDAKKyAgICB0YVswXSA9IGFkanVzdEZvckVuZGlhbmVzcygt
NTEyKTsgLy8gMHhmZTAwCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAg
ICAgICAgIGFzc2VydChiaWdFbmRpYW4oZHYsIDApID09PSAweDAwZmUpOwogICAgICAgICBhc3Nl
cnQobGl0dGxlRW5kaWFuKGR2LCAwKSA9PT0gLTUxMik7CkBAIC0xMDYsNyArMTM2LDcgQEAgZnVu
Y3Rpb24gdGVzdDIoKSB7CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgc2lnbiBleHRlbnNpb24uCi0g
ICAgdGFbMF0gPSAweDAwZmU7CisgICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3MoMHgwMGZl
KTsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICAgICAgYXNzZXJ0
KGJpZ0VuZGlhbihkdiwgMCkgPT09IC01MTIpOwogICAgICAgICBhc3NlcnQobGl0dGxlRW5kaWFu
KGR2LCAwKSA9PT0gMHgwMGZlKTsKQEAgLTEzMSw2ICsxNjEsMTYgQEAgZnVuY3Rpb24gdGVzdDMo
KSB7CiAgICAgICAgIHJldHVybiBvLmdldEZsb2F0MzIoaSwgYik7CiAgICAgfQogICAgIG5vSW5s
aW5lKGJpRW5kaWFuKTsKKyAgICBmdW5jdGlvbiBhZGp1c3RGb3JFbmRpYW5lc3ModmFsdWUpIHsK
KyAgICAgICAgaWYgKGlzTGl0dGxlRW5kaWFuKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwor
CisgICAgICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKKyAgICAgICAgbGV0IHRhID0g
bmV3IEZsb2F0MzJBcnJheShhYik7CisgICAgICAgIHRhWzBdID0gdmFsdWU7CisgICAgICAgIGxl
dCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgICAgIHJldHVybiBkdi5nZXRGbG9hdDMyKDAs
IHRydWUpOworICAgIH0KIAogICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKICAgICBs
ZXQgdGEgPSBuZXcgRmxvYXQzMkFycmF5KGFiKTsKQEAgLTEzOCw3ICsxNzgsNyBAQCBmdW5jdGlv
biB0ZXN0MygpIHsKICAgICBjb25zdCBub3JtYWxBc0RvdWJsZSA9IDEyOTEyLjQwMzMyMDMxMjUw
MDsKIAogICAgIGNvbnN0IGZsaXBwZWQgPSAtNS4xMTYyNDM3NTg5OTE4ODg0ZS0yMTsKLSAgICB0
YVswXSA9IG5vcm1hbDsKKyAgICB0YVswXSA9IGFkanVzdEZvckVuZGlhbmVzcyhub3JtYWwpOwog
CiAgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKQEAgLTE1Miw2ICsxOTIsMTcgQEAgZnVuY3Rpb24gdGVzdDMoKSB7CiB9
CiB0ZXN0MygpOwogCitmdW5jdGlvbiBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIodmFsdWUpIHsK
KyAgICBpZiAoaXNMaXR0bGVFbmRpYW4pCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxl
dCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKKyAgICBsZXQgdGEgPSBuZXcgVWludDMyQXJyYXko
YWIpOworICAgIHRhWzBdID0gdmFsdWU7CisgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsK
KyAgICByZXR1cm4gZHYuZ2V0VWludDMyKDAsIHRydWUpOworfQorCiBmdW5jdGlvbiB0ZXN0NCgp
IHsKICAgICBmdW5jdGlvbiBiaWdFbmRpYW4obywgaSkgewogICAgICAgICByZXR1cm4gby5nZXRV
aW50MzIoaSwgZmFsc2UpOwpAQCAtMTY4LDcgKzIxOSw3IEBAIGZ1bmN0aW9uIHRlc3Q0KCkgewog
CiAgICAgbGV0IGFiID0gbmV3IEFycmF5QnVmZmVyKDQpOwogICAgIGxldCB0YSA9IG5ldyBVaW50
MzJBcnJheShhYik7Ci0gICAgdGFbMF0gPSAweGEwYjBkMGYwOworICAgIHRhWzBdID0gYWRqdXN0
Rm9yRW5kaWFuZXNzVWludDMyKDB4YTBiMGQwZjApOwogCiAgICAgbGV0IGR2ID0gbmV3IERhdGFW
aWV3KGFiKTsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKQEAgLTE5OCw3
ICsyNDksNyBAQCBmdW5jdGlvbiB0ZXN0NSgpIHsKIAogICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1
ZmZlcig0KTsKICAgICBsZXQgdGEgPSBuZXcgVWludDMyQXJyYXkoYWIpOwotICAgIHRhWzBdID0g
MHhhMGIwZDBmMDsKKyAgICB0YVswXSA9IGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGEwYjBk
MGYwKTsKIAogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CiAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CkBAIC0yMzksNyArMjkwLDcgQEAgZnVuY3Rpb24gdGVzdDYo
KSB7CiAKICAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7CiAgICAgbGV0IHRhID0gbmV3
IFVpbnQzMkFycmF5KGFiKTsKLSAgICB0YVswXSA9IDB4YTA3MGZhMDE7CisgICAgdGFbMF0gPSBh
ZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhhMDcwZmEwMSk7CiAKICAgICBsZXQgZHYgPSBuZXcg
RGF0YVZpZXcoYWIpOwogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewpAQCAt
MjcyLDcgKzMyMyw3IEBAIGZ1bmN0aW9uIHRlc3Q3KCkgewogCiAgICAgbGV0IGFiID0gbmV3IEFy
cmF5QnVmZmVyKDQpOwogICAgIGxldCB0YSA9IG5ldyBVaW50MzJBcnJheShhYik7Ci0gICAgdGFb
MF0gPSAweGEwNzBmYTAxOworICAgIHRhWzBdID0gYWRqdXN0Rm9yRW5kaWFuZXNzVWludDMyKDB4
YTA3MGZhMDEpOwogCiAgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKQEAgLTI5Miw3ICszNDMsNyBAQCBmdW5jdGlvbiB0
ZXN0OCgpIHsKIAogICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKICAgICBsZXQgdGEg
PSBuZXcgVWludDMyQXJyYXkoYWIpOwotICAgIHRhWzBdID0gMHhhMDcwZmEwMTsKKyAgICB0YVsw
XSA9IGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGEwNzBmYTAxKTsKIAogICAgIGxldCBkdiA9
IG5ldyBEYXRhVmlldyhhYik7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtbmV1dGVyLmpzIGIvSlNU
ZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LW5ldXRlci5qcwppbmRleCA2MzVmYzRjNzEyZGYyZjll
NjYzYzY0MjliNzliMTQ5YThiZTUwMWJmLi5mZjhjYWExYTI5MmYzYjA0Yjc1NjEwNWQyODdkMmQz
ZTI4ZWJiMmJmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtbmV1dGVy
LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWppdC1uZXV0ZXIuanMKQEAgLTUsNiAr
NSwyNyBAQCBmdW5jdGlvbiBhc3NlcnQoYikgewogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZCEiKTsKIH0KIAorZnVuY3Rpb24gZ2V0SXNMaXR0bGVFbmRpYW4oKSB7CisgICAgbGV0IGFiID0g
bmV3IEFycmF5QnVmZmVyKDIpOworICAgIGxldCB0YSA9IG5ldyBJbnQxNkFycmF5KGFiKTsKKyAg
ICB0YVswXSA9IDB4MDEwMjsKKyAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYWIpOworICAgIHJl
dHVybiBkdi5nZXRJbnQxNigwLCB0cnVlKSA9PT0gMHgwMTAyOworfQorCitsZXQgaXNMaXR0bGVF
bmRpYW4gPSBnZXRJc0xpdHRsZUVuZGlhbigpOworCitmdW5jdGlvbiBhZGp1c3RGb3JFbmRpYW5l
c3ModmFsdWUpIHsKKyAgICBpZiAoaXNMaXR0bGVFbmRpYW4pCisgICAgICAgIHJldHVybiB2YWx1
ZTsKKworICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKKyAgICBsZXQgdGEgPSBuZXcg
VWludDMyQXJyYXkoYWIpOworICAgIHRhWzBdID0gdmFsdWU7CisgICAgbGV0IGR2ID0gbmV3IERh
dGFWaWV3KGFiKTsKKyAgICByZXR1cm4gZHYuZ2V0VWludDMyKDAsIHRydWUpOworfQorCiBmdW5j
dGlvbiB0ZXN0KCkgewogICAgIGZ1bmN0aW9uIGxvYWQobywgaSkgewogICAgICAgICByZXR1cm4g
by5nZXRVaW50OChpKTsKQEAgLTEzLDcgKzM0LDcgQEAgZnVuY3Rpb24gdGVzdCgpIHsKIAogICAg
IGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKICAgICBsZXQgdGEgPSBuZXcgVWludDMyQXJy
YXkoYWIpOwotICAgIHRhWzBdID0gMHhhMDcwZmEwMTsKKyAgICB0YVswXSA9IGFkanVzdEZvckVu
ZGlhbmVzcygweGEwNzBmYTAxKTsKICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYWIpOwogCiAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKQEAgLTQwLDcgKzYxLDcgQEAgZnVu
Y3Rpb24gdGVzdDIoKSB7CiAKICAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7CiAgICAg
bGV0IHRhID0gbmV3IFVpbnQzMkFycmF5KGFiKTsKLSAgICB0YVswXSA9IDB4YTA3MGZhMDE7Cisg
ICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3MoMHhhMDcwZmEwMSk7CiAgICAgbGV0IGR2ID0g
bmV3IERhdGFWaWV3KGFiKTsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
ewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LXNldC1uYW4uanMgYi9K
U1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LW5hbi5qcwppbmRleCBjYmQxY2RiM2FmZTE3
OWMwMzM5ZmUwZGEyOWFlZmU1YjY3NjVhZjMwLi5iYzNlOWFmNDY1MjVlNjhlNzMwMmI4Zjc4ODVm
OTE1NWM2NWY0NjRlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0
LW5hbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LW5hbi5qcwpAQCAt
Nyw2ICs3LDI3IEBAIGZ1bmN0aW9uIGFzc2VydChiKSB7CiAgICAgICAgIHRocm93IG5ldyBFcnJv
cjsKIH0KIAorZnVuY3Rpb24gZ2V0SXNMaXR0bGVFbmRpYW4oKSB7CisgICAgbGV0IGFiID0gbmV3
IEFycmF5QnVmZmVyKDIpOworICAgIGxldCB0YSA9IG5ldyBJbnQxNkFycmF5KGFiKTsKKyAgICB0
YVswXSA9IDB4MDEwMjsKKyAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYWIpOworICAgIHJldHVy
biBkdi5nZXRJbnQxNigwLCB0cnVlKSA9PT0gMHgwMTAyOworfQorCitsZXQgaXNMaXR0bGVFbmRp
YW4gPSBnZXRJc0xpdHRsZUVuZGlhbigpOworCitmdW5jdGlvbiBhZGp1c3RGb3JFbmRpYW5lc3NG
bG9hdDMyKHZhbHVlKSB7CisgICAgaWYgKGlzTGl0dGxlRW5kaWFuKQorICAgICAgICByZXR1cm4g
dmFsdWU7CisKKyAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7CisgICAgbGV0IHRhID0g
bmV3IEZsb2F0MzJBcnJheShhYik7CisgICAgdGFbMF0gPSB2YWx1ZTsKKyAgICBsZXQgZHYgPSBu
ZXcgRGF0YVZpZXcoYWIpOworICAgIHJldHVybiBkdi5nZXRGbG9hdDMyKDAsIHRydWUpOworfQor
CiBmdW5jdGlvbiB0ZXN0KCkgewogICAgIGZ1bmN0aW9uIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCBp
bmRleCwgdmFsdWUpIHsKICAgICAgICAgZHYuc2V0RmxvYXQzMihpbmRleCwgdmFsdWUsIHRydWUp
OwpAQCAtMjksMjQgKzUwLDI1IEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgbGV0IGR2ID0gbmV3
IERhdGFWaWV3KGJ1ZmZlcik7CiAKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIDEuNSk7CisgICAgICAgIHN0b3Jl
TGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKDEuNSkpOwogICAg
ICAgICBhc3NlcnQoYXJyWzBdID09PSAxLjUpOwogCi0gICAgICAgIHN0b3JlTGl0dGxlRW5kaWFu
KGR2LCAwLCAxMjkxMi4xMjQxMjMyMTUxMjIpOworICAgICAgICBzdG9yZShkdiwgMCwgMTI5MTIu
MTI0MTIzMjE1MTIyLCBpc0xpdHRsZUVuZGlhbik7CisgICAgICAgIC8vc3RvcmVMaXR0bGVFbmRp
YW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0MzIoMTI5MTIuMTI0MTIzMjE1MTIyKSk7
CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDEyOTEyLjEyNDAyMzQzNzUpOwogICAgICAgICBh
c3NlcnQoYml0c1swXSA9PT0gMHg0NjQ5YzA3Zik7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRp
YW4oZHYsIDAsIE5hTik7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RG
b3JFbmRpYW5lc3NGbG9hdDMyKE5hTikpOwogICAgICAgICBhc3NlcnQoaXNOYU4oYXJyWzBdKSk7
CiAgICAgICAgIGFzc2VydChiaXRzWzBdID09PSAweDdGQzAwMDAwKTsKIAotICAgICAgICBzdG9y
ZUxpdHRsZUVuZGlhbihkdiwgMCwgMi4zODc5MzkzZS0zOCk7CisgICAgICAgIHN0b3JlTGl0dGxl
RW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKDIuMzg3OTM5M2UtMzgpKTsK
ICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMi4zODc5MzkyNjA1OTA2NjNlLTM4KTsKICAgICAg
ICAgYXNzZXJ0KGJpdHNbMF0gPT09IDB4MDEwMjAzMDQpOwogCi0gICAgICAgIHN0b3JlQmlnRW5k
aWFuKGR2LCAwLCAyLjM4NzkzOTNlLTM4KTsKKyAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAs
IGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0MzIoMi4zODc5MzkzZS0zOCkpOwogICAgICAgICBhc3Nl
cnQoYXJyWzBdID09PSAxLjUzOTk4OTYxNDQzOTU1OGUtMzYpOwogICAgICAgICBhc3NlcnQoYml0
c1swXSA9PT0gMHgwNDAzMDIwMSk7CiAgICAgfQogfQotdGVzdCgpOwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3
LWppdC1zZXQuanMgYi9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LmpzCmluZGV4IDky
MzhlYjczZjkxZGQwNjQ5ZTliN2Y4YjE2MjEyZDg4YzdmNDYyY2EuLjE5NWU0MDQyMzI4Y2Y2NDgx
ZGM4M2FiMjZmZWUyNzZjZjA3MzM5ODAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2RhdGF2
aWV3LWppdC1zZXQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LXNldC5qcwpA
QCAtNSwxMyArNSwxNyBAQCBmdW5jdGlvbiBhc3NlcnQoYikgewogICAgICAgICB0aHJvdyBuZXcg
RXJyb3I7CiB9CiAKK2Z1bmN0aW9uIGdldElzTGl0dGxlRW5kaWFuKCkgeworICAgIGxldCBhYiA9
IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAgICBsZXQgdGEgPSBuZXcgSW50MTZBcnJheShhYik7Cisg
ICAgdGFbMF0gPSAweDAxMDI7CisgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICBy
ZXR1cm4gZHYuZ2V0SW50MTYoMCwgdHJ1ZSkgPT09IDB4MDEwMjsKK30KKworbGV0IGlzTGl0dGxl
RW5kaWFuID0gZ2V0SXNMaXR0bGVFbmRpYW4oKTsKKwogZnVuY3Rpb24gcmVhZEhleChkdiwgYnl0
ZXMpIHsKLSAgICBmdW5jdGlvbiBpc0xpdHRsZUVuZGlhbigpIHsgCi0gICAgICAgIGxldCBiID0g
bmV3IEFycmF5QnVmZmVyKDQpOwotICAgICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYik7Ci0g
ICAgICAgIGR2LnNldEludDMyKDAsIDB4MDAxMTIyMzMsIHRydWUpOwotICAgICAgICByZXR1cm4g
ZHYuZ2V0VWludDgoMCkgPT09IDB4MzM7Ci0gICAgfQogICAgIGxldCBzdHIgPSAiIjsKICAgICBm
dW5jdGlvbiByZWFkQnl0ZShpKSB7CiAgICAgICAgIGxldCBiID0gZHYuZ2V0VWludDgoaSkudG9T
dHJpbmcoMTYpOwpAQCAtMjEsNyArMjUsNyBAQCBmdW5jdGlvbiByZWFkSGV4KGR2LCBieXRlcykg
ewogICAgICAgICAgICAgYXNzZXJ0KGIubGVuZ3RoID09PSAyKQogICAgICAgICByZXR1cm4gYjsK
ICAgICB9Ci0gICAgaWYgKGlzTGl0dGxlRW5kaWFuKCkpIHsKKyAgICBpZiAoaXNMaXR0bGVFbmRp
YW4pIHsKICAgICAgICAgZm9yIChsZXQgaSA9IGJ5dGVzOyBpLS07KQogICAgICAgICAgICAgc3Ry
ID0gc3RyICsgcmVhZEJ5dGUoaSk7CiAgICAgfSBlbHNlIHsKQEAgLTM1LDEwICszOSwyMSBAQCBm
dW5jdGlvbiByZWFkSGV4KGR2LCBieXRlcykgewogewogICAgIGxldCBiID0gbmV3IEFycmF5QnVm
ZmVyKDQpOwogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhiKTsKLSAgICBkdi5zZXRJbnQzMigw
LCAweDAwMTEyMjMzLCB0cnVlKTsKKyAgICBkdi5zZXRJbnQzMigwLCAweDAwMTEyMjMzLCBpc0xp
dHRsZUVuZGlhbik7CiAgICAgYXNzZXJ0KHJlYWRIZXgoZHYsIDQpID09PSAiMHgwMDExMjIzMyIp
OwogfQogCitmdW5jdGlvbiBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYodmFsdWUpIHsKKyAgICBp
ZiAoaXNMaXR0bGVFbmRpYW4pCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxldCBhYiA9
IG5ldyBBcnJheUJ1ZmZlcig0KTsKKyAgICBsZXQgdGEgPSBuZXcgVWludDE2QXJyYXkoYWIpOwor
ICAgIHRhWzBdID0gdmFsdWU7CisgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICBy
ZXR1cm4gZHYuZ2V0VWludDE2KDAsIHRydWUpOworfQorCiBmdW5jdGlvbiB0ZXN0KCkgewogICAg
IGZ1bmN0aW9uIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCBpbmRleCwgdmFsdWUpIHsKICAgICAgICAg
ZHYuc2V0SW50MTYoaW5kZXgsIHZhbHVlLCB0cnVlKTsKQEAgLTYwLDUyICs3NSw1MiBAQCBmdW5j
dGlvbiB0ZXN0KCkgewogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhidWZmZXIpOwogCiAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgICAgIHN0b3JlTGl0dGxlRW5k
aWFuKGR2LCAwLCAweGZhYmEpOworICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgYWRq
dXN0Rm9yRW5kaWFuZXNzVWludDE2KDB4ZmFiYSkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09
PSAweGZhYmEpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAweGFiY2QsIHRydWUpOworICAgICAg
ICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KDB4YWJjZCksIHRydWUpOwog
ICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGFiY2QpOwogCi0gICAgICAgIHN0b3JlKGR2LCAw
LCAweGJhZGJlZWYsIHRydWUpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFu
ZXNzVWludDE2KDB4YmFkYmVlZiksIHRydWUpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAw
eGJlZWYpOwogCi0gICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCAweGJiNGRiMzNmLCB0
cnVlKTsKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVz
c1VpbnQxNigweGJiNGRiMzNmKSwgdHJ1ZSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4
YjMzZik7CiAKLSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIDB4ZmFkYSk7CisgICAgICAg
IHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYoMHhmYWRhKSk7
CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4ZGFmYSk7CiAKLSAgICAgICAgc3RvcmVCaWdF
bmRpYW4oZHYsIDAsIDB4MTJhYik7CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1
c3RGb3JFbmRpYW5lc3NVaW50MTYoMHgxMmFiKSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09
IDB4YWIxMik7CiAKLSAgICAgICAgc3RvcmUoZHYsIDAsIDB4MTIzNCwgZmFsc2UpOworICAgICAg
ICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KDB4MTIzNCksIGZhbHNlKTsK
ICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHgzNDEyKTsKIAotICAgICAgICBzdG9yZShkdiwg
MCwgMHgwMTAyLCBmYWxzZSk7CisgICAgICAgIHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5l
c3NVaW50MTYoMHgwMTAyKSwgZmFsc2UpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDAy
MDEpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAtMSwgZmFsc2UpOworICAgICAgICBzdG9yZShk
diwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0xKSwgZmFsc2UpOwogICAgICAgICBhc3Nl
cnQoYXJyWzBdID09PSAweGZmZmYpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAtMiwgZmFsc2Up
OworICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yKSwgZmFs
c2UpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGZlZmYpOwogCi0gICAgICAgIHN0b3Jl
QmlnRW5kaWFuKGR2LCAwLCAtMSk7CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1
c3RGb3JFbmRpYW5lc3NVaW50MTYoLTEpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhm
ZmZmKTsKIAotICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgLTIpOworICAgICAgICBzdG9y
ZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yKSk7CiAgICAgICAg
IGFzc2VydChhcnJbMF0gPT09IDB4ZmVmZik7CiAKLSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYs
IDAsIC0yMTQ3NDgzNjQ4KTsgCisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RG
b3JFbmRpYW5lc3NVaW50MTYoLTIxNDc0ODM2NDgpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9
PT0gMHgwMDAwKTsKIAotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgLTIxNDc0ODM2
NDgpOyAKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVz
c1VpbnQxNigtMjE0NzQ4MzY0OCkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDAwMDAp
OwogCi0gICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCAtMjE0NzQ3ODk4OCk7IAorICAg
ICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0y
MTQ3NDc4OTg4KSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4MTIzNCk7CiAKLSAgICAg
ICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIC0yMTQ3NDc4OTg4KTsgCisgICAgICAgIHN0b3JlQmln
RW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYoLTIxNDc0Nzg5ODgpKTsKICAg
ICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHgzNDEyKTsKICAgICB9CiB9CkBAIC0xMzIsNTcgKzE0
Nyw2OCBAQCBmdW5jdGlvbiB0ZXN0MigpIHsKICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYnVm
ZmVyKTsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBz
dG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgMHhmYWJhKTsKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRp
YW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigweGZhYmEpKTsKICAgICAgICAgYXNz
ZXJ0KGFyclswXSA9PT0gMHhmYWJhKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgMHhhYmNkLCB0
cnVlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigweGFi
Y2QpLCB0cnVlKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhhYmNkKTsKIAotICAgICAg
ICBzdG9yZShkdiwgMCwgMHhiYWRiZWVmLCB0cnVlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFk
anVzdEZvckVuZGlhbmVzc1VpbnQxNigweGJhZGJlZWYpLCB0cnVlKTsKICAgICAgICAgYXNzZXJ0
KGFyclswXSA9PT0gMHhiZWVmKTsKIAotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwg
MHhiYjRkYjMzZiwgdHJ1ZSk7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1
c3RGb3JFbmRpYW5lc3NVaW50MTYoMHhiYjRkYjMzZiksIHRydWUpOwogICAgICAgICBhc3NlcnQo
YXJyWzBdID09PSAweGIzM2YpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAweGZh
ZGEpOworICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWlu
dDE2KDB4ZmFkYSkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGRhZmEpOwogCi0gICAg
ICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAweDEyYWIpOworICAgICAgICBzdG9yZUJpZ0VuZGlh
bihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KDB4MTJhYikpOwogICAgICAgICBhc3Nl
cnQoYXJyWzBdID09PSAweGFiMTIpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAweDEyMzQsIGZh
bHNlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigweDEy
MzQpLCBmYWxzZSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4MzQxMik7CiAKLSAgICAg
ICAgc3RvcmUoZHYsIDAsIDB4MDEwMiwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRq
dXN0Rm9yRW5kaWFuZXNzVWludDE2KDB4MDEwMiksIGZhbHNlKTsKICAgICAgICAgYXNzZXJ0KGFy
clswXSA9PT0gMHgwMjAxKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgLTEsIGZhbHNlKTsKKyAg
ICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigtMSksIGZhbHNlKTsK
ICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhmZmZmKTsKIAotICAgICAgICBzdG9yZShkdiwg
MCwgLTIsIGZhbHNlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1Vp
bnQxNigtMiksIGZhbHNlKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhmZWZmKTsKIAot
ICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgLTEpOworICAgICAgICBzdG9yZUJpZ0VuZGlh
bihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0xKSk7CiAgICAgICAgIGFzc2VydChh
cnJbMF0gPT09IDB4ZmZmZik7CiAKLSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIC0yKTsK
KyAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigt
MikpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGZlZmYpOwogCi0gICAgICAgIHN0b3Jl
QmlnRW5kaWFuKGR2LCAwLCAtMjE0NzQ4MzY0OCk7IAorICAgICAgICBzdG9yZUJpZ0VuZGlhbihk
diwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yMTQ3NDgzNjQ4KSk7CiAgICAgICAgIGFz
c2VydChhcnJbMF0gPT09IDB4MDAwMCk7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYs
IDAsIC0yMTQ3NDgzNjQ4KTsgCisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1
c3RGb3JFbmRpYW5lc3NVaW50MTYoLTIxNDc0ODM2NDgpKTsKICAgICAgICAgYXNzZXJ0KGFyclsw
XSA9PT0gMHgwMDAwKTsKIAotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgLTIxNDc0
Nzg5ODgpOyAKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlh
bmVzc1VpbnQxNigtMjE0NzQ3ODk4OCkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDEy
MzQpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAtMjE0NzQ3ODk4OCk7IAorICAg
ICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yMTQ3
NDc4OTg4KSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4MzQxMik7CiAgICAgfQogfQog
dGVzdDIoKTsKIAorZnVuY3Rpb24gYWRqdXN0Rm9yRW5kaWFuZXNzVWludDMyKHZhbHVlKSB7Cisg
ICAgaWYgKGlzTGl0dGxlRW5kaWFuKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBsZXQg
YWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7CisgICAgbGV0IHRhID0gbmV3IFVpbnQzMkFycmF5KGFi
KTsKKyAgICB0YVswXSA9IHZhbHVlOworICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7Cisg
ICAgcmV0dXJuIGR2LmdldFVpbnQzMigwLCB0cnVlKTsKK30KKwogZnVuY3Rpb24gdGVzdDMoKSB7
CiAgICAgZnVuY3Rpb24gc3RvcmVMaXR0bGVFbmRpYW4oZHYsIGluZGV4LCB2YWx1ZSkgewogICAg
ICAgICBkdi5zZXRVaW50MzIoaW5kZXgsIHZhbHVlLCB0cnVlKTsKQEAgLTIwNSwyOSArMjMxLDI5
IEBAIGZ1bmN0aW9uIHRlc3QzKCkgewogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhidWZmZXIp
OwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgICAgIHN0b3Jl
TGl0dGxlRW5kaWFuKGR2LCAwLCAweGZmZmZmZmZmKTsKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRp
YW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGZmZmZmZmZmKSk7CiAgICAgICAg
IGFzc2VydChhcnJbMF0gPT09IDB4ZmZmZmZmZmYpOwogICAgICAgICBhc3NlcnQoYXJyMlswXSA9
PT0gLTEpOwogCi0gICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCAweGZmYWFiYmNjKTsK
KyAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQz
MigweGZmYWFiYmNjKSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4ZmZhYWJiY2MpOwog
Ci0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAweDEyMzQ1Njc4KTsKKyAgICAgICAgc3Rv
cmVCaWdFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweDEyMzQ1Njc4KSk7
CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4Nzg1NjM0MTIpOwogCi0gICAgICAgIHN0b3Jl
QmlnRW5kaWFuKGR2LCAwLCAweGZmYWFiYmNjKTsKKyAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYs
IDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGZmYWFiYmNjKSk7CiAgICAgICAgIGFzc2Vy
dChhcnJbMF0gPT09IDB4Y2NiYmFhZmYpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAweGZhZWFk
YWNhLCBmYWxzZSk7CisgICAgICAgIHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50
MzIoMHhmYWVhZGFjYSksIGZhbHNlKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhjYWRh
ZWFmYSk7CiAKLSAgICAgICAgc3RvcmUoZHYsIDAsIDB4Y2FkYWVhZmEsIGZhbHNlKTsKKyAgICAg
ICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGNhZGFlYWZhKSwgZmFs
c2UpOwogICAgICAgICBhc3NlcnQoYXJyMlswXSA9PT0gLTg1MjcxODYyKTsKIAotICAgICAgICBz
dG9yZShkdiwgMCwgMHgxMjM0NTY3OCwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRq
dXN0Rm9yRW5kaWFuZXNzVWludDMyKDB4MTIzNDU2NzgpLCBmYWxzZSk7CiAgICAgICAgIGFzc2Vy
dChhcnJbMF0gPT09IDB4Nzg1NjM0MTIpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAw
LCAweGJlZWZmZWViKTsKKyAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVu
ZGlhbmVzc1VpbnQzMigweGJlZWZmZWViKSk7CiAgICAgICAgIGFzc2VydChhcnIyWzBdID09PSAt
MzM1NjE0MDE4KTsKICAgICB9CiB9CkBAIC0yNTUsMzQgKzI4MSw0NSBAQCBmdW5jdGlvbiB0ZXN0
NCgpIHsKICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTsKIAogICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwg
MCwgMHhmZmZmZmZmZik7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RG
b3JFbmRpYW5lc3NVaW50MzIoMHhmZmZmZmZmZikpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09
PSAweGZmZmZmZmZmKTsKICAgICAgICAgYXNzZXJ0KGFycjJbMF0gPT09IC0xKTsKIAotICAgICAg
ICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgMHhmZmFhYmJjYyk7CisgICAgICAgIHN0b3JlTGl0
dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhmZmFhYmJjYykpOwog
ICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGZmYWFiYmNjKTsKIAotICAgICAgICBzdG9yZUJp
Z0VuZGlhbihkdiwgMCwgMHgxMjM0NTY3OCk7CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAw
LCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHgxMjM0NTY3OCkpOwogICAgICAgICBhc3NlcnQo
YXJyWzBdID09PSAweDc4NTYzNDEyKTsKIAotICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwg
MHhmZmFhYmJjYyk7CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRp
YW5lc3NVaW50MzIoMHhmZmFhYmJjYykpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGNj
YmJhYWZmKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgMHhmYWVhZGFjYSwgZmFsc2UpOworICAg
ICAgICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDMyKDB4ZmFlYWRhY2EpLCBm
YWxzZSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4Y2FkYWVhZmEpOwogCi0gICAgICAg
IHN0b3JlKGR2LCAwLCAweGNhZGFlYWZhLCBmYWxzZSk7CisgICAgICAgIHN0b3JlKGR2LCAwLCBh
ZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhjYWRhZWFmYSksIGZhbHNlKTsKICAgICAgICAgYXNz
ZXJ0KGFycjJbMF0gPT09IC04NTI3MTg2Mik7CiAKLSAgICAgICAgc3RvcmUoZHYsIDAsIDB4MTIz
NDU2NzgsIGZhbHNlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1Vp
bnQzMigweDEyMzQ1Njc4KSwgZmFsc2UpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDc4
NTYzNDEyKTsKIAotICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgMHhiZWVmZmVlYik7Cisg
ICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhi
ZWVmZmVlYikpOwogICAgICAgICBhc3NlcnQoYXJyMlswXSA9PT0gLTMzNTYxNDAxOCk7CiAgICAg
fQogfQogdGVzdDQoKTsKIAorZnVuY3Rpb24gYWRqdXN0Rm9yRW5kaWFuZXNzRmxvYXQzMih2YWx1
ZSkgeworICAgIGlmIChpc0xpdHRsZUVuZGlhbikKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisg
ICAgbGV0IGFiID0gbmV3IEFycmF5QnVmZmVyKDQpOworICAgIGxldCB0YSA9IG5ldyBGbG9hdDMy
QXJyYXkoYWIpOworICAgIHRhWzBdID0gdmFsdWU7CisgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3
KGFiKTsKKyAgICByZXR1cm4gZHYuZ2V0RmxvYXQzMigwLCB0cnVlKTsKK30KKwogZnVuY3Rpb24g
dGVzdDUoKSB7CiAgICAgZnVuY3Rpb24gc3RvcmVMaXR0bGVFbmRpYW4oZHYsIGluZGV4LCB2YWx1
ZSkgewogICAgICAgICBkdi5zZXRGbG9hdDMyKGluZGV4LCB2YWx1ZSwgdHJ1ZSk7CkBAIC0zMDUs
MjcgKzM0MiwzOCBAQCBmdW5jdGlvbiB0ZXN0NSgpIHsKICAgICBsZXQgZHYgPSBuZXcgRGF0YVZp
ZXcoYnVmZmVyKTsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAg
ICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgMS41KTsKKyAgICAgICAgc3RvcmVMaXR0bGVF
bmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0MzIoMS41KSk7CiAgICAgICAgIGFz
c2VydChhcnJbMF0gPT09IDEuNSk7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAs
IDEyOTEyLjEyNDEyMzIxNTEyMik7Ci0gICAgICAgIGFzc2VydChhcnJbMF0gPT09IDEyOTEyLjEy
NDAyMzQzNzUpOworICAgICAgICBzdG9yZShkdiwgMCwgMTI5MTIuMTI0MTIzMjE1MTIyLCBpc0xp
dHRsZUVuZGlhbik7CiAgICAgICAgIGFzc2VydChiaXRzWzBdID09PSAweDQ2NDljMDdmKTsKKyAg
ICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMTI5MTIuMTI0MDIzNDM3NSk7CiAKLSAgICAgICAgc3Rv
cmVMaXR0bGVFbmRpYW4oZHYsIDAsIE5hTik7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2
LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKE5hTikpOwogICAgICAgICBhc3NlcnQoaXNO
YU4oYXJyWzBdKSk7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIDIuMzg3OTM5
M2UtMzgpOworICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFu
ZXNzRmxvYXQzMigyLjM4NzkzOTNlLTM4KSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDIu
Mzg3OTM5MjYwNTkwNjYzZS0zOCk7CiAgICAgICAgIGFzc2VydChiaXRzWzBdID09PSAweDAxMDIw
MzA0KTsKIAotICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgMi4zODc5MzkzZS0zOCk7Cisg
ICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKDIu
Mzg3OTM5M2UtMzgpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMS41Mzk5ODk2MTQ0Mzk1
NThlLTM2KTsKICAgICAgICAgYXNzZXJ0KGJpdHNbMF0gPT09IDB4MDQwMzAyMDEpOwogICAgIH0K
IH0KIHRlc3Q1KCk7CiAKK2Z1bmN0aW9uIGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0NjQodmFsdWUp
IHsKKyAgICBpZiAoaXNMaXR0bGVFbmRpYW4pCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAg
IGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig4KTsKKyAgICBsZXQgdGEgPSBuZXcgRmxvYXQ2NEFy
cmF5KGFiKTsKKyAgICB0YVswXSA9IHZhbHVlOworICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhh
Yik7CisgICAgcmV0dXJuIGR2LmdldEZsb2F0NjQoMCwgdHJ1ZSk7Cit9CisKIGZ1bmN0aW9uIHRl
c3Q2KCkgewogICAgIGZ1bmN0aW9uIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCBpbmRleCwgdmFsdWUp
IHsKICAgICAgICAgZHYuc2V0RmxvYXQ2NChpbmRleCwgdmFsdWUsIHRydWUpOwpAQCAtMzQ3LDMw
ICszOTUsMzAgQEAgZnVuY3Rpb24gdGVzdDYoKSB7CiAgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3
KGJ1ZmZlcik7CiAKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAg
ICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIE5hTik7CisgICAgICAgIHN0b3JlTGl0dGxlRW5k
aWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDY0KE5hTikpOwogICAgICAgICBhc3Nl
cnQoaXNOYU4oYXJyWzBdKSk7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIC0y
LjUwNzUxODcwODQxMzUxNjJlKzI4NCk7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAw
LCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDY0KC0yLjUwNzUxODcwODQxMzUxNjJlKzI4NCkpOwog
ICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAtMi41MDc1MTg3MDg0MTM1MTYyZSsyODQpOwogICAg
ICAgICBhc3NlcnQocmVhZEhleChkdiwgOCkgPT09ICIweGZhZmFmYWZhZmFmYWZhZmEiKTsKIAot
ICAgICAgICBzdG9yZShkdiwgMCwgMTI0LjU1MywgdHJ1ZSk7CisgICAgICAgIHN0b3JlKGR2LCAw
LCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDY0KDEyNC41NTMpLCB0cnVlKTsKICAgICAgICAgYXNz
ZXJ0KHJlYWRIZXgoZHYsIDgpID09PSAiMHg0MDVmMjM2NDVhMWNhYzA4Iik7CiAKLSAgICAgICAg
c3RvcmUoZHYsIDAsIEluZmluaXR5LCB0cnVlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVz
dEZvckVuZGlhbmVzc0Zsb2F0NjQoSW5maW5pdHkpLCB0cnVlKTsKICAgICAgICAgYXNzZXJ0KHJl
YWRIZXgoZHYsIDgpID09PSAiMHg3ZmYwMDAwMDAwMDAwMDAwIik7CiAKLSAgICAgICAgc3RvcmUo
ZHYsIDAsIEluZmluaXR5LCBmYWxzZSk7CisgICAgICAgIHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JF
bmRpYW5lc3NGbG9hdDY0KEluZmluaXR5KSwgZmFsc2UpOwogICAgICAgICBhc3NlcnQocmVhZEhl
eChkdiwgOCkgPT09ICIweDAwMDAwMDAwMDAwMGYwN2YiKTsKIAotICAgICAgICBzdG9yZShkdiwg
MCwgLUluZmluaXR5LCB0cnVlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlh
bmVzc0Zsb2F0NjQoLUluZmluaXR5KSwgdHJ1ZSk7CiAgICAgICAgIGFzc2VydChyZWFkSGV4KGR2
LCA4KSA9PT0gIjB4ZmZmMDAwMDAwMDAwMDAwMCIpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFu
KGR2LCAwLCAtMi41MDc1MTg3MDg0MTM1MTYyZSsyODQpOworICAgICAgICBzdG9yZUJpZ0VuZGlh
bihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzRmxvYXQ2NCgtMi41MDc1MTg3MDg0MTM1MTYyZSsy
ODQpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gLTIuNTA3NTE4NzA4NDEzNTE2MmUrMjg0
KTsKICAgICAgICAgYXNzZXJ0KHJlYWRIZXgoZHYsIDgpID09PSAiMHhmYWZhZmFmYWZhZmFmYWZh
Iik7CiAKLSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIDEyNC41NTMpOworICAgICAgICBz
dG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzRmxvYXQ2NCgxMjQuNTUzKSk7
CiAgICAgICAgIGFzc2VydChyZWFkSGV4KGR2LCA4KSA9PT0gIjB4MDhhYzFjNWE2NDIzNWY0MCIp
OwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393992</attachid>
            <date>2020-03-19 10:22:16 -0700</date>
            <delta_ts>2020-03-19 10:44:29 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-194007-20200319182214.patch</filename>
            <type>text/plain</type>
            <size>25812</size>
            <attacher name="Tomas Popela">tpopela</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NzAzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxv
ZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUxYWIzYjk0ZDcwN2I4YzliYmNmMGJlMDczMjM1
YmU4NjVjYzBhZGUuLjkxNzVjYjVkZGZjNDVmOWVhNjY5ODIzOTU2OGZkZDViOTEyNzIzMzUgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTggQEAKKzIwMjAtMDMtMTkgIFRvbWFzIFBvcGVsYSAgPHRwb3BlbGFAcmVkaGF0LmNv
bT4KKworICAgICAgICBbSlNDXVtCaWdFbmRpYW5zXSBTZXZlcmFsIEpTQyBzdHJlc3MgdGVzdHMg
ZmFpbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk0MDA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAg
ICAgQWRhcHQgdGhlIERhdGFWaWV3IHRlc3RzIHRvIGJlIGFibGUgdG8gcGFzcyBvbiBsaXR0bGUg
ZW5kaWFuIGFzIHdlbGwKKyAgICAgICAgYXMgdGhlIGJpZyBlbmRpYW4gaGFyZHdhcmUuIERvIHNv
IGJ5IGludHJvZHVjaW5nIG1ldGhvZCB0aGF0IGRldGVybWluZQorICAgICAgICB0aGUgZW5kaWFu
ZXNzIGFuZCBiYXNlZCBvbiBpdHMgdmFsdWUgaXQgc2F2ZXMgdGhlIGV4cGVjdGVkIHJlc3VsdHMg
aW4KKyAgICAgICAgdGhlIHJpZ2h0IGZvcm1hdC4KKworICAgICAgICAqIHN0cmVzcy9kYXRhdmll
dy1nZXQtY3NlLmpzOgorICAgICAgICAoZ2V0SXNMaXR0bGVFbmRpYW4pOgorICAgICAgICAoYWRq
dXN0Rm9yRW5kaWFuZXNzKToKKyAgICAgICAgKHRlc3QzLmZvbyk6CisgICAgICAgICh0ZXN0Myk6
CisgICAgICAgICogc3RyZXNzL2RhdGF2aWV3LWppdC1nZXQuanM6CisgICAgICAgIChnZXRJc0xp
dHRsZUVuZGlhbik6CisgICAgICAgICh0ZXN0MS5hZGp1c3RGb3JFbmRpYW5lc3MpOgorICAgICAg
ICAodGVzdDEpOgorICAgICAgICAodGVzdDIuYWRqdXN0Rm9yRW5kaWFuZXNzKToKKyAgICAgICAg
KHRlc3QyKToKKyAgICAgICAgKHRlc3QzLmFkanVzdEZvckVuZGlhbmVzcyk6CisgICAgICAgICh0
ZXN0Myk6CisgICAgICAgIChhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIpOgorICAgICAgICAodGVz
dDQpOgorICAgICAgICAodGVzdDUpOgorICAgICAgICAodGVzdDYpOgorICAgICAgICAodGVzdDcp
OgorICAgICAgICAodGVzdDgpOgorICAgICAgICAqIHN0cmVzcy9kYXRhdmlldy1qaXQtbmV1dGVy
LmpzOgorICAgICAgICAoZ2V0SXNMaXR0bGVFbmRpYW4pOgorICAgICAgICAoYWRqdXN0Rm9yRW5k
aWFuZXNzKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAodGVzdDIpOgorICAgICAgICAqIHN0
cmVzcy9kYXRhdmlldy1qaXQtc2V0LW5hbi5qczoKKyAgICAgICAgKGdldElzTGl0dGxlRW5kaWFu
KToKKyAgICAgICAgKGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0MzIpOgorICAgICAgICAodGVzdCk6
CisgICAgICAgICogc3RyZXNzL2RhdGF2aWV3LWppdC1zZXQuanM6CisgICAgICAgIChnZXRJc0xp
dHRsZUVuZGlhbik6CisgICAgICAgIChyZWFkSGV4KToKKyAgICAgICAgKGFkanVzdEZvckVuZGlh
bmVzc1VpbnQxNik6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKHRlc3QyKToKKyAgICAgICAg
KGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMik6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAgICh0
ZXN0NCk6CisgICAgICAgIChhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKToKKyAgICAgICAgKHRl
c3Q1KToKKyAgICAgICAgKGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0NjQpOgorICAgICAgICAodGVz
dDYpOgorICAgICAgICAoaXNMaXR0bGVFbmRpYW4pOiBEZWxldGVkLgorCiAyMDIwLTAzLTE4ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgd2F5IHRv
IG1hcmsgYSByZWplY3RlZCBwcm9taXNlIGFzIGhhbmRsZWQKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2RhdGF2aWV3LWdldC1jc2UuanMgYi9KU1Rlc3RzL3N0cmVzcy9kYXRhdmlldy1nZXQt
Y3NlLmpzCmluZGV4IGUzZDQ3YTkzOGU1ODFiYWM3OTc1YzM0NzU4ZjFlMTE0OGU0MzBkOTUuLjJj
YjhlMzZiMmM1NjgxZjZkMDQ1MzI5N2I4ZjkzMzFlMWM0MzQ5YzcgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvc3RyZXNzL2RhdGF2aWV3LWdldC1jc2UuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZGF0YXZp
ZXctZ2V0LWNzZS5qcwpAQCAtNSw2ICs1LDI2IEBAIGZ1bmN0aW9uIGFzc2VydChiKSB7CiAgICAg
ICAgIHRocm93IG5ldyBFcnJvcjsKIH0KIAorZnVuY3Rpb24gZ2V0SXNMaXR0bGVFbmRpYW4oKSB7
CisgICAgbGV0IGFiID0gbmV3IEFycmF5QnVmZmVyKDIpOworICAgIGxldCB0YSA9IG5ldyBJbnQx
NkFycmF5KGFiKTsKKyAgICB0YVswXSA9IDB4MDEwMjsKKyAgICBsZXQgZHYgPSBuZXcgRGF0YVZp
ZXcoYWIpOworICAgIHJldHVybiBkdi5nZXRJbnQxNigwLCB0cnVlKSA9PT0gMHgwMTAyOworfQor
CitsZXQgaXNMaXR0bGVFbmRpYW4gPSBnZXRJc0xpdHRsZUVuZGlhbigpOworCitmdW5jdGlvbiBh
ZGp1c3RGb3JFbmRpYW5lc3ModmFsdWUpIHsKKyAgICBpZiAoaXNMaXR0bGVFbmRpYW4pCisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig4KTsKKyAg
ICBsZXQgdGEgPSBuZXcgRmxvYXQ2NEFycmF5KGFiKTsKKyAgICB0YVswXSA9IHZhbHVlOworICAg
IGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgcmV0dXJuIGR2LmdldEZsb2F0NjQoMCwg
dHJ1ZSk7Cit9CiAKIGZ1bmN0aW9uIHRlc3QxKCkgewogICAgIGZ1bmN0aW9uIGZvbyhkdikgewpA
QCAtNDEsNyArNjEsNyBAQCB0ZXN0MigpOwogZnVuY3Rpb24gdGVzdDMoKSB7CiAgICAgZnVuY3Rp
b24gZm9vKGR2LCB0YSkgewogICAgICAgICBsZXQgYSA9IGR2LmdldEZsb2F0NjQoMCwgdHJ1ZSk7
Ci0gICAgICAgIHRhWzBdID0gTWF0aC5QSTsKKyAgICAgICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRp
YW5lc3MoTWF0aC5QSSk7CiAgICAgICAgIGxldCBiID0gZHYuZ2V0RmxvYXQ2NCgwLCB0cnVlKTsK
ICAgICAgICAgcmV0dXJuIFthLCBiXTsKICAgICB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9kYXRhdmlldy1qaXQtZ2V0LmpzIGIvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LWdldC5q
cwppbmRleCBlMDY2NWFmMjBjMjRiMTAzN2RhYjFlZDAyNWM2YWZiZTVhMjg2N2U2Li4xZDFlZDA2
Y2E4ZjliM2NmNWQwMjc1MzZiNDEzMDA4MmU1ZDI2NDM1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0
cmVzcy9kYXRhdmlldy1qaXQtZ2V0LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWpp
dC1nZXQuanMKQEAgLTUsNiArNSwxNiBAQCBmdW5jdGlvbiBhc3NlcnQoYikgewogICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkJhZCEiKTsKIH0KIAorZnVuY3Rpb24gZ2V0SXNMaXR0bGVFbmRpYW4o
KSB7CisgICAgbGV0IGFiID0gbmV3IEFycmF5QnVmZmVyKDIpOworICAgIGxldCB0YSA9IG5ldyBJ
bnQxNkFycmF5KGFiKTsKKyAgICB0YVswXSA9IDB4MDEwMjsKKyAgICBsZXQgZHYgPSBuZXcgRGF0
YVZpZXcoYWIpOworICAgIHJldHVybiBkdi5nZXRJbnQxNigwLCB0cnVlKSA9PT0gMHgwMTAyOwor
fQorCitsZXQgaXNMaXR0bGVFbmRpYW4gPSBnZXRJc0xpdHRsZUVuZGlhbigpOworCiBmdW5jdGlv
biB0ZXN0MSgpIHsKICAgICBmdW5jdGlvbiBiaWdFbmRpYW4obywgaSkgewogICAgICAgICByZXR1
cm4gby5nZXRJbnQzMihpLCBmYWxzZSk7CkBAIC0xOCwxMCArMjgsMjAgQEAgZnVuY3Rpb24gdGVz
dDEoKSB7CiAgICAgICAgIHJldHVybiBvLmdldEludDMyKGksIGIpOwogICAgIH0KICAgICBub0lu
bGluZShiaUVuZGlhbik7CisgICAgZnVuY3Rpb24gYWRqdXN0Rm9yRW5kaWFuZXNzKHZhbHVlKSB7
CisgICAgICAgIGlmIChpc0xpdHRsZUVuZGlhbikKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
KworICAgICAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7CisgICAgICAgIGxldCB0YSA9
IG5ldyBJbnQzMkFycmF5KGFiKTsKKyAgICAgICAgdGFbMF0gPSB2YWx1ZTsKKyAgICAgICAgbGV0
IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICAgICAgcmV0dXJuIGR2LmdldEludDMyKDAsIHRy
dWUpOworICAgIH0KIAogICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKICAgICBsZXQg
dGEgPSBuZXcgSW50MzJBcnJheShhYik7Ci0gICAgdGFbMF0gPSAweDAxMDIwMzA0OworICAgIHRh
WzBdID0gYWRqdXN0Rm9yRW5kaWFuZXNzKDB4MDEwMjAzMDQpOwogICAgIGxldCBkdiA9IG5ldyBE
YXRhVmlldyhhYik7CiAKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKQEAg
LTQzLDcgKzYzLDcgQEAgZnVuY3Rpb24gdGVzdDEoKSB7CiAgICAgfQogCiAgICAgLy8gTWFrZSBz
dXJlIHdlIGdldCB0aGUgcmlnaHQgc2lnbi4KLSAgICB0YVswXSA9IC0zMjM2MTM4NjsgLy8gMHhm
ZTEyMzQ1NgorICAgIHRhWzBdID0gYWRqdXN0Rm9yRW5kaWFuZXNzKC0zMjM2MTM4Nik7IC8vIDB4
ZmUxMjM0NTYKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICAgICAg
YXNzZXJ0KGJpZ0VuZGlhbihkdiwgMCkgPT09IDB4NTYzNDEyZmUpOwogICAgICAgICBhc3NlcnQo
bGl0dGxlRW5kaWFuKGR2LCAwKSA9PT0gLTMyMzYxMzg2KTsKQEAgLTU0LDcgKzc0LDcgQEAgZnVu
Y3Rpb24gdGVzdDEoKSB7CiAgICAgfQogCiAgICAgLy8gLTIxNDYyOTA2MDIgPT0gKGludCkweDgw
MTIzNDU2Ci0gICAgdGFbMF0gPSAweDU2MzQxMjgwOworICAgIHRhWzBdID0gYWRqdXN0Rm9yRW5k
aWFuZXNzKDB4NTYzNDEyODApOwogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
ewogICAgICAgICBhc3NlcnQoYmlnRW5kaWFuKGR2LCAwKSA9PT0gLTIxNDYyOTA2MDIpOwogICAg
ICAgICBhc3NlcnQobGl0dGxlRW5kaWFuKGR2LCAwKSA9PT0gMHg1NjM0MTI4MCk7CkBAIC03OSwx
MCArOTksMjAgQEAgZnVuY3Rpb24gdGVzdDIoKSB7CiAgICAgICAgIHJldHVybiBvLmdldEludDE2
KGksIGIpOwogICAgIH0KICAgICBub0lubGluZShiaUVuZGlhbik7CisgICAgZnVuY3Rpb24gYWRq
dXN0Rm9yRW5kaWFuZXNzKHZhbHVlKSB7CisgICAgICAgIGlmIChpc0xpdHRsZUVuZGlhbikKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgICAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZm
ZXIoMik7CisgICAgICAgIGxldCB0YSA9IG5ldyBJbnQxNkFycmF5KGFiKTsKKyAgICAgICAgdGFb
MF0gPSB2YWx1ZTsKKyAgICAgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICAgICAg
cmV0dXJuIGR2LmdldEludDE2KDAsIHRydWUpOworICAgIH0KIAogICAgIGxldCBhYiA9IG5ldyBB
cnJheUJ1ZmZlcigyKTsKICAgICBsZXQgdGEgPSBuZXcgSW50MTZBcnJheShhYik7Ci0gICAgdGFb
MF0gPSAweDAxMDI7CisgICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3MoMHgwMTAyKTsKICAg
ICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYWIpOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CkBAIC05NSw3ICsxMjUsNyBAQCBmdW5jdGlvbiB0ZXN0MigpIHsKICAgICB9
CiAKICAgICAvLyBDaGVjayBzaWduLgotICAgIHRhWzBdID0gLTUxMjsgLy8gMHhmZTAwCisgICAg
dGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3MoLTUxMik7IC8vIDB4ZmUwMAogICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewogICAgICAgICBhc3NlcnQoYmlnRW5kaWFuKGR2LCAw
KSA9PT0gMHgwMGZlKTsKICAgICAgICAgYXNzZXJ0KGxpdHRsZUVuZGlhbihkdiwgMCkgPT09IC01
MTIpOwpAQCAtMTA2LDcgKzEzNiw3IEBAIGZ1bmN0aW9uIHRlc3QyKCkgewogICAgIH0KIAogICAg
IC8vIENoZWNrIHNpZ24gZXh0ZW5zaW9uLgotICAgIHRhWzBdID0gMHgwMGZlOworICAgIHRhWzBd
ID0gYWRqdXN0Rm9yRW5kaWFuZXNzKDB4MDBmZSk7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CiAgICAgICAgIGFzc2VydChiaWdFbmRpYW4oZHYsIDApID09PSAtNTEyKTsK
ICAgICAgICAgYXNzZXJ0KGxpdHRsZUVuZGlhbihkdiwgMCkgPT09IDB4MDBmZSk7CkBAIC0xMzEs
NiArMTYxLDE2IEBAIGZ1bmN0aW9uIHRlc3QzKCkgewogICAgICAgICByZXR1cm4gby5nZXRGbG9h
dDMyKGksIGIpOwogICAgIH0KICAgICBub0lubGluZShiaUVuZGlhbik7CisgICAgZnVuY3Rpb24g
YWRqdXN0Rm9yRW5kaWFuZXNzKHZhbHVlKSB7CisgICAgICAgIGlmIChpc0xpdHRsZUVuZGlhbikK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgICAgICBsZXQgYWIgPSBuZXcgQXJyYXlC
dWZmZXIoNCk7CisgICAgICAgIGxldCB0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYWIpOworICAgICAg
ICB0YVswXSA9IHZhbHVlOworICAgICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYWIpOworICAg
ICAgICByZXR1cm4gZHYuZ2V0RmxvYXQzMigwLCB0cnVlKTsKKyAgICB9CiAKICAgICBsZXQgYWIg
PSBuZXcgQXJyYXlCdWZmZXIoNCk7CiAgICAgbGV0IHRhID0gbmV3IEZsb2F0MzJBcnJheShhYik7
CkBAIC0xMzgsNyArMTc4LDcgQEAgZnVuY3Rpb24gdGVzdDMoKSB7CiAgICAgY29uc3Qgbm9ybWFs
QXNEb3VibGUgPSAxMjkxMi40MDMzMjAzMTI1MDA7CiAKICAgICBjb25zdCBmbGlwcGVkID0gLTUu
MTE2MjQzNzU4OTkxODg4NGUtMjE7Ci0gICAgdGFbMF0gPSBub3JtYWw7CisgICAgdGFbMF0gPSBh
ZGp1c3RGb3JFbmRpYW5lc3Mobm9ybWFsKTsKIAogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhh
Yik7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CkBAIC0xNTIsNiArMTky
LDE3IEBAIGZ1bmN0aW9uIHRlc3QzKCkgewogfQogdGVzdDMoKTsKIAorZnVuY3Rpb24gYWRqdXN0
Rm9yRW5kaWFuZXNzVWludDMyKHZhbHVlKSB7CisgICAgaWYgKGlzTGl0dGxlRW5kaWFuKQorICAg
ICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7Cisg
ICAgbGV0IHRhID0gbmV3IFVpbnQzMkFycmF5KGFiKTsKKyAgICB0YVswXSA9IHZhbHVlOworICAg
IGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgcmV0dXJuIGR2LmdldFVpbnQzMigwLCB0
cnVlKTsKK30KKwogZnVuY3Rpb24gdGVzdDQoKSB7CiAgICAgZnVuY3Rpb24gYmlnRW5kaWFuKG8s
IGkpIHsKICAgICAgICAgcmV0dXJuIG8uZ2V0VWludDMyKGksIGZhbHNlKTsKQEAgLTE2OCw3ICsy
MTksNyBAQCBmdW5jdGlvbiB0ZXN0NCgpIHsKIAogICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZl
cig0KTsKICAgICBsZXQgdGEgPSBuZXcgVWludDMyQXJyYXkoYWIpOwotICAgIHRhWzBdID0gMHhh
MGIwZDBmMDsKKyAgICB0YVswXSA9IGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGEwYjBkMGYw
KTsKIAogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CiAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CkBAIC0xOTgsNyArMjQ5LDcgQEAgZnVuY3Rpb24gdGVzdDUoKSB7
CiAKICAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7CiAgICAgbGV0IHRhID0gbmV3IFVp
bnQzMkFycmF5KGFiKTsKLSAgICB0YVswXSA9IDB4YTBiMGQwZjA7CisgICAgdGFbMF0gPSBhZGp1
c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhhMGIwZDBmMCk7CiAKICAgICBsZXQgZHYgPSBuZXcgRGF0
YVZpZXcoYWIpOwogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewpAQCAtMjM5
LDcgKzI5MCw3IEBAIGZ1bmN0aW9uIHRlc3Q2KCkgewogCiAgICAgbGV0IGFiID0gbmV3IEFycmF5
QnVmZmVyKDQpOwogICAgIGxldCB0YSA9IG5ldyBVaW50MzJBcnJheShhYik7Ci0gICAgdGFbMF0g
PSAweGEwNzBmYTAxOworICAgIHRhWzBdID0gYWRqdXN0Rm9yRW5kaWFuZXNzVWludDMyKDB4YTA3
MGZhMDEpOwogCiAgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKQEAgLTI3Miw3ICszMjMsNyBAQCBmdW5jdGlvbiB0ZXN0
NygpIHsKIAogICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsKICAgICBsZXQgdGEgPSBu
ZXcgVWludDMyQXJyYXkoYWIpOwotICAgIHRhWzBdID0gMHhhMDcwZmEwMTsKKyAgICB0YVswXSA9
IGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGEwNzBmYTAxKTsKIAogICAgIGxldCBkdiA9IG5l
dyBEYXRhVmlldyhhYik7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CkBA
IC0yOTIsNyArMzQzLDcgQEAgZnVuY3Rpb24gdGVzdDgoKSB7CiAKICAgICBsZXQgYWIgPSBuZXcg
QXJyYXlCdWZmZXIoNCk7CiAgICAgbGV0IHRhID0gbmV3IFVpbnQzMkFycmF5KGFiKTsKLSAgICB0
YVswXSA9IDB4YTA3MGZhMDE7CisgICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIo
MHhhMDcwZmEwMSk7CiAKICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYWIpOwogICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
ZGF0YXZpZXctaml0LW5ldXRlci5qcyBiL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWppdC1uZXV0
ZXIuanMKaW5kZXggNjM1ZmM0YzcxMmRmMmY5ZTY2M2M2NDI5Yjc5YjE0OWE4YmU1MDFiZi4uZmY4
Y2FhMWEyOTJmM2IwNGI3NTYxMDVkMjg3ZDJkM2UyOGViYjJiZiAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvZGF0YXZpZXctaml0LW5ldXRlci5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9kYXRh
dmlldy1qaXQtbmV1dGVyLmpzCkBAIC01LDYgKzUsMjcgQEAgZnVuY3Rpb24gYXNzZXJ0KGIpIHsK
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQhIik7CiB9CiAKK2Z1bmN0aW9uIGdldElzTGl0
dGxlRW5kaWFuKCkgeworICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAgICBsZXQg
dGEgPSBuZXcgSW50MTZBcnJheShhYik7CisgICAgdGFbMF0gPSAweDAxMDI7CisgICAgbGV0IGR2
ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICByZXR1cm4gZHYuZ2V0SW50MTYoMCwgdHJ1ZSkgPT09
IDB4MDEwMjsKK30KKworbGV0IGlzTGl0dGxlRW5kaWFuID0gZ2V0SXNMaXR0bGVFbmRpYW4oKTsK
KworZnVuY3Rpb24gYWRqdXN0Rm9yRW5kaWFuZXNzKHZhbHVlKSB7CisgICAgaWYgKGlzTGl0dGxl
RW5kaWFuKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBsZXQgYWIgPSBuZXcgQXJyYXlC
dWZmZXIoNCk7CisgICAgbGV0IHRhID0gbmV3IFVpbnQzMkFycmF5KGFiKTsKKyAgICB0YVswXSA9
IHZhbHVlOworICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgcmV0dXJuIGR2Lmdl
dFVpbnQzMigwLCB0cnVlKTsKK30KKwogZnVuY3Rpb24gdGVzdCgpIHsKICAgICBmdW5jdGlvbiBs
b2FkKG8sIGkpIHsKICAgICAgICAgcmV0dXJuIG8uZ2V0VWludDgoaSk7CkBAIC0xMyw3ICszNCw3
IEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAKICAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIoNCk7
CiAgICAgbGV0IHRhID0gbmV3IFVpbnQzMkFycmF5KGFiKTsKLSAgICB0YVswXSA9IDB4YTA3MGZh
MDE7CisgICAgdGFbMF0gPSBhZGp1c3RGb3JFbmRpYW5lc3MoMHhhMDcwZmEwMSk7CiAgICAgbGV0
IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsg
KytpKSB7CkBAIC00MCw3ICs2MSw3IEBAIGZ1bmN0aW9uIHRlc3QyKCkgewogCiAgICAgbGV0IGFi
ID0gbmV3IEFycmF5QnVmZmVyKDQpOwogICAgIGxldCB0YSA9IG5ldyBVaW50MzJBcnJheShhYik7
Ci0gICAgdGFbMF0gPSAweGEwNzBmYTAxOworICAgIHRhWzBdID0gYWRqdXN0Rm9yRW5kaWFuZXNz
KDB4YTA3MGZhMDEpOwogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CiAKICAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2RhdGF2aWV3LWppdC1zZXQtbmFuLmpzIGIvSlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LXNl
dC1uYW4uanMKaW5kZXggY2JkMWNkYjNhZmUxNzljMDMzOWZlMGRhMjlhZWZlNWI2NzY1YWYzMC4u
YjViZmM5NTlkZjkxNjhlNDlhMjlkMmY4NWQzNzg0YzE0MmEyZWJhOCAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LXNldC1uYW4uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
ZGF0YXZpZXctaml0LXNldC1uYW4uanMKQEAgLTcsNiArNywyNyBAQCBmdW5jdGlvbiBhc3NlcnQo
YikgewogICAgICAgICB0aHJvdyBuZXcgRXJyb3I7CiB9CiAKK2Z1bmN0aW9uIGdldElzTGl0dGxl
RW5kaWFuKCkgeworICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAgICBsZXQgdGEg
PSBuZXcgSW50MTZBcnJheShhYik7CisgICAgdGFbMF0gPSAweDAxMDI7CisgICAgbGV0IGR2ID0g
bmV3IERhdGFWaWV3KGFiKTsKKyAgICByZXR1cm4gZHYuZ2V0SW50MTYoMCwgdHJ1ZSkgPT09IDB4
MDEwMjsKK30KKworbGV0IGlzTGl0dGxlRW5kaWFuID0gZ2V0SXNMaXR0bGVFbmRpYW4oKTsKKwor
ZnVuY3Rpb24gYWRqdXN0Rm9yRW5kaWFuZXNzRmxvYXQzMih2YWx1ZSkgeworICAgIGlmIChpc0xp
dHRsZUVuZGlhbikKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGV0IGFiID0gbmV3IEFy
cmF5QnVmZmVyKDQpOworICAgIGxldCB0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYWIpOworICAgIHRh
WzBdID0gdmFsdWU7CisgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICByZXR1cm4g
ZHYuZ2V0RmxvYXQzMigwLCB0cnVlKTsKK30KKwogZnVuY3Rpb24gdGVzdCgpIHsKICAgICBmdW5j
dGlvbiBzdG9yZUxpdHRsZUVuZGlhbihkdiwgaW5kZXgsIHZhbHVlKSB7CiAgICAgICAgIGR2LnNl
dEZsb2F0MzIoaW5kZXgsIHZhbHVlLCB0cnVlKTsKQEAgLTI5LDI0ICs1MCwyOCBAQCBmdW5jdGlv
biB0ZXN0KCkgewogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhidWZmZXIpOwogCiAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgICAgIHN0b3JlTGl0dGxlRW5kaWFu
KGR2LCAwLCAxLjUpOworICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgYWRqdXN0Rm9y
RW5kaWFuZXNzRmxvYXQzMigxLjUpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMS41KTsK
IAotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgMTI5MTIuMTI0MTIzMjE1MTIyKTsK
KyAgICAgICAgLy8gVGhlIHJpZ2h0IHdheSBob3cgdG8gcHJvY2VzcyB0aGlzIHRlc3QgaXMgdG8g
dW5jb21tZW50IHRoZSBsaW5lIGJlbG93CisgICAgICAgIC8vIGFuZCBjb21tZW50IG91dCB0aGUg
bGluZSBiZWxvdyBpdC4gQnV0IHN0cmFuZ2VseSBpdCBkb2Vzbid0IHdvcmsuIEkKKyAgICAgICAg
Ly8gb3BlbmVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyODkg
Zm9yIGl0LgorICAgICAgICAvL3N0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRp
YW5lc3NGbG9hdDMyKDEyOTEyLjEyNDEyMzIxNTEyMikpOworICAgICAgICBzdG9yZShkdiwgMCwg
MTI5MTIuMTI0MTIzMjE1MTIyLCBpc0xpdHRsZUVuZGlhbik7CiAgICAgICAgIGFzc2VydChhcnJb
MF0gPT09IDEyOTEyLjEyNDAyMzQzNzUpOwogICAgICAgICBhc3NlcnQoYml0c1swXSA9PT0gMHg0
NjQ5YzA3Zik7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIE5hTik7CisgICAg
ICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKE5h
TikpOwogICAgICAgICBhc3NlcnQoaXNOYU4oYXJyWzBdKSk7CiAgICAgICAgIGFzc2VydChiaXRz
WzBdID09PSAweDdGQzAwMDAwKTsKIAotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwg
Mi4zODc5MzkzZS0zOCk7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RG
b3JFbmRpYW5lc3NGbG9hdDMyKDIuMzg3OTM5M2UtMzgpKTsKICAgICAgICAgYXNzZXJ0KGFyclsw
XSA9PT0gMi4zODc5MzkyNjA1OTA2NjNlLTM4KTsKICAgICAgICAgYXNzZXJ0KGJpdHNbMF0gPT09
IDB4MDEwMjAzMDQpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAyLjM4NzkzOTNl
LTM4KTsKKyAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc0Zs
b2F0MzIoMi4zODc5MzkzZS0zOCkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAxLjUzOTk4
OTYxNDQzOTU1OGUtMzYpOwogICAgICAgICBhc3NlcnQoYml0c1swXSA9PT0gMHgwNDAzMDIwMSk7
CiAgICAgfQogfQotdGVzdCgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3Rlc3QoKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWppdC1zZXQuanMgYi9KU1Rlc3Rz
L3N0cmVzcy9kYXRhdmlldy1qaXQtc2V0LmpzCmluZGV4IDkyMzhlYjczZjkxZGQwNjQ5ZTliN2Y4
YjE2MjEyZDg4YzdmNDYyY2EuLjE5NWU0MDQyMzI4Y2Y2NDgxZGM4M2FiMjZmZWUyNzZjZjA3MzM5
ODAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2RhdGF2aWV3LWppdC1zZXQuanMKKysrIGIv
SlNUZXN0cy9zdHJlc3MvZGF0YXZpZXctaml0LXNldC5qcwpAQCAtNSwxMyArNSwxNyBAQCBmdW5j
dGlvbiBhc3NlcnQoYikgewogICAgICAgICB0aHJvdyBuZXcgRXJyb3I7CiB9CiAKK2Z1bmN0aW9u
IGdldElzTGl0dGxlRW5kaWFuKCkgeworICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcigyKTsK
KyAgICBsZXQgdGEgPSBuZXcgSW50MTZBcnJheShhYik7CisgICAgdGFbMF0gPSAweDAxMDI7Cisg
ICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICByZXR1cm4gZHYuZ2V0SW50MTYoMCwg
dHJ1ZSkgPT09IDB4MDEwMjsKK30KKworbGV0IGlzTGl0dGxlRW5kaWFuID0gZ2V0SXNMaXR0bGVF
bmRpYW4oKTsKKwogZnVuY3Rpb24gcmVhZEhleChkdiwgYnl0ZXMpIHsKLSAgICBmdW5jdGlvbiBp
c0xpdHRsZUVuZGlhbigpIHsgCi0gICAgICAgIGxldCBiID0gbmV3IEFycmF5QnVmZmVyKDQpOwot
ICAgICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYik7Ci0gICAgICAgIGR2LnNldEludDMyKDAs
IDB4MDAxMTIyMzMsIHRydWUpOwotICAgICAgICByZXR1cm4gZHYuZ2V0VWludDgoMCkgPT09IDB4
MzM7Ci0gICAgfQogICAgIGxldCBzdHIgPSAiIjsKICAgICBmdW5jdGlvbiByZWFkQnl0ZShpKSB7
CiAgICAgICAgIGxldCBiID0gZHYuZ2V0VWludDgoaSkudG9TdHJpbmcoMTYpOwpAQCAtMjEsNyAr
MjUsNyBAQCBmdW5jdGlvbiByZWFkSGV4KGR2LCBieXRlcykgewogICAgICAgICAgICAgYXNzZXJ0
KGIubGVuZ3RoID09PSAyKQogICAgICAgICByZXR1cm4gYjsKICAgICB9Ci0gICAgaWYgKGlzTGl0
dGxlRW5kaWFuKCkpIHsKKyAgICBpZiAoaXNMaXR0bGVFbmRpYW4pIHsKICAgICAgICAgZm9yIChs
ZXQgaSA9IGJ5dGVzOyBpLS07KQogICAgICAgICAgICAgc3RyID0gc3RyICsgcmVhZEJ5dGUoaSk7
CiAgICAgfSBlbHNlIHsKQEAgLTM1LDEwICszOSwyMSBAQCBmdW5jdGlvbiByZWFkSGV4KGR2LCBi
eXRlcykgewogewogICAgIGxldCBiID0gbmV3IEFycmF5QnVmZmVyKDQpOwogICAgIGxldCBkdiA9
IG5ldyBEYXRhVmlldyhiKTsKLSAgICBkdi5zZXRJbnQzMigwLCAweDAwMTEyMjMzLCB0cnVlKTsK
KyAgICBkdi5zZXRJbnQzMigwLCAweDAwMTEyMjMzLCBpc0xpdHRsZUVuZGlhbik7CiAgICAgYXNz
ZXJ0KHJlYWRIZXgoZHYsIDQpID09PSAiMHgwMDExMjIzMyIpOwogfQogCitmdW5jdGlvbiBhZGp1
c3RGb3JFbmRpYW5lc3NVaW50MTYodmFsdWUpIHsKKyAgICBpZiAoaXNMaXR0bGVFbmRpYW4pCisg
ICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1ZmZlcig0KTsK
KyAgICBsZXQgdGEgPSBuZXcgVWludDE2QXJyYXkoYWIpOworICAgIHRhWzBdID0gdmFsdWU7Cisg
ICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICByZXR1cm4gZHYuZ2V0VWludDE2KDAs
IHRydWUpOworfQorCiBmdW5jdGlvbiB0ZXN0KCkgewogICAgIGZ1bmN0aW9uIHN0b3JlTGl0dGxl
RW5kaWFuKGR2LCBpbmRleCwgdmFsdWUpIHsKICAgICAgICAgZHYuc2V0SW50MTYoaW5kZXgsIHZh
bHVlLCB0cnVlKTsKQEAgLTYwLDUyICs3NSw1MiBAQCBmdW5jdGlvbiB0ZXN0KCkgewogICAgIGxl
dCBkdiA9IG5ldyBEYXRhVmlldyhidWZmZXIpOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7Ci0gICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCAweGZhYmEpOwor
ICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2
KDB4ZmFiYSkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGZhYmEpOwogCi0gICAgICAg
IHN0b3JlKGR2LCAwLCAweGFiY2QsIHRydWUpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0
Rm9yRW5kaWFuZXNzVWludDE2KDB4YWJjZCksIHRydWUpOwogICAgICAgICBhc3NlcnQoYXJyWzBd
ID09PSAweGFiY2QpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAweGJhZGJlZWYsIHRydWUpOwor
ICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KDB4YmFkYmVlZiks
IHRydWUpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGJlZWYpOwogCi0gICAgICAgIHN0
b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCAweGJiNGRiMzNmLCB0cnVlKTsKKyAgICAgICAgc3RvcmVM
aXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigweGJiNGRiMzNmKSwg
dHJ1ZSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4YjMzZik7CiAKLSAgICAgICAgc3Rv
cmVCaWdFbmRpYW4oZHYsIDAsIDB4ZmFkYSk7CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAw
LCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYoMHhmYWRhKSk7CiAgICAgICAgIGFzc2VydChhcnJb
MF0gPT09IDB4ZGFmYSk7CiAKLSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIDB4MTJhYik7
CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYo
MHgxMmFiKSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4YWIxMik7CiAKLSAgICAgICAg
c3RvcmUoZHYsIDAsIDB4MTIzNCwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0
Rm9yRW5kaWFuZXNzVWludDE2KDB4MTIzNCksIGZhbHNlKTsKICAgICAgICAgYXNzZXJ0KGFyclsw
XSA9PT0gMHgzNDEyKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgMHgwMTAyLCBmYWxzZSk7Cisg
ICAgICAgIHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYoMHgwMTAyKSwgZmFs
c2UpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDAyMDEpOwogCi0gICAgICAgIHN0b3Jl
KGR2LCAwLCAtMSwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFu
ZXNzVWludDE2KC0xKSwgZmFsc2UpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGZmZmYp
OwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAtMiwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwg
MCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yKSwgZmFsc2UpOwogICAgICAgICBhc3NlcnQo
YXJyWzBdID09PSAweGZlZmYpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAtMSk7
CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYo
LTEpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhmZmZmKTsKIAotICAgICAgICBzdG9y
ZUJpZ0VuZGlhbihkdiwgMCwgLTIpOworICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRq
dXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yKSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4
ZmVmZik7CiAKLSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIC0yMTQ3NDgzNjQ4KTsgCisg
ICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYoLTIx
NDc0ODM2NDgpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHgwMDAwKTsKIAotICAgICAg
ICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgLTIxNDc0ODM2NDgpOyAKKyAgICAgICAgc3RvcmVM
aXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigtMjE0NzQ4MzY0OCkp
OwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDAwMDApOwogCi0gICAgICAgIHN0b3JlTGl0
dGxlRW5kaWFuKGR2LCAwLCAtMjE0NzQ3ODk4OCk7IAorICAgICAgICBzdG9yZUxpdHRsZUVuZGlh
bihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yMTQ3NDc4OTg4KSk7CiAgICAgICAg
IGFzc2VydChhcnJbMF0gPT09IDB4MTIzNCk7CiAKLSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYs
IDAsIC0yMTQ3NDc4OTg4KTsgCisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RG
b3JFbmRpYW5lc3NVaW50MTYoLTIxNDc0Nzg5ODgpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9
PT0gMHgzNDEyKTsKICAgICB9CiB9CkBAIC0xMzIsNTcgKzE0Nyw2OCBAQCBmdW5jdGlvbiB0ZXN0
MigpIHsKICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTsKIAogICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwg
MCwgMHhmYWJhKTsKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVu
ZGlhbmVzc1VpbnQxNigweGZhYmEpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhmYWJh
KTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgMHhhYmNkLCB0cnVlKTsKKyAgICAgICAgc3RvcmUo
ZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigweGFiY2QpLCB0cnVlKTsKICAgICAgICAg
YXNzZXJ0KGFyclswXSA9PT0gMHhhYmNkKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgMHhiYWRi
ZWVmLCB0cnVlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQx
NigweGJhZGJlZWYpLCB0cnVlKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhiZWVmKTsK
IAotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgMHhiYjRkYjMzZiwgdHJ1ZSk7Cisg
ICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYo
MHhiYjRkYjMzZiksIHRydWUpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGIzM2YpOwog
Ci0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAweGZhZGEpOworICAgICAgICBzdG9yZUJp
Z0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KDB4ZmFkYSkpOwogICAgICAg
ICBhc3NlcnQoYXJyWzBdID09PSAweGRhZmEpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2
LCAwLCAweDEyYWIpOworICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5k
aWFuZXNzVWludDE2KDB4MTJhYikpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGFiMTIp
OwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAweDEyMzQsIGZhbHNlKTsKKyAgICAgICAgc3RvcmUo
ZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigweDEyMzQpLCBmYWxzZSk7CiAgICAgICAg
IGFzc2VydChhcnJbMF0gPT09IDB4MzQxMik7CiAKLSAgICAgICAgc3RvcmUoZHYsIDAsIDB4MDEw
MiwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2
KDB4MDEwMiksIGZhbHNlKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHgwMjAxKTsKIAot
ICAgICAgICBzdG9yZShkdiwgMCwgLTEsIGZhbHNlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFk
anVzdEZvckVuZGlhbmVzc1VpbnQxNigtMSksIGZhbHNlKTsKICAgICAgICAgYXNzZXJ0KGFyclsw
XSA9PT0gMHhmZmZmKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgLTIsIGZhbHNlKTsKKyAgICAg
ICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigtMiksIGZhbHNlKTsKICAg
ICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhmZWZmKTsKIAotICAgICAgICBzdG9yZUJpZ0VuZGlh
bihkdiwgMCwgLTEpOworICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5k
aWFuZXNzVWludDE2KC0xKSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4ZmZmZik7CiAK
LSAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIC0yKTsKKyAgICAgICAgc3RvcmVCaWdFbmRp
YW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigtMikpOwogICAgICAgICBhc3NlcnQo
YXJyWzBdID09PSAweGZlZmYpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAtMjE0
NzQ4MzY0OCk7IAorICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFu
ZXNzVWludDE2KC0yMTQ3NDgzNjQ4KSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4MDAw
MCk7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIC0yMTQ3NDgzNjQ4KTsgCisg
ICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MTYo
LTIxNDc0ODM2NDgpKTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHgwMDAwKTsKIAotICAg
ICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgLTIxNDc0Nzg5ODgpOyAKKyAgICAgICAgc3Rv
cmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQxNigtMjE0NzQ3ODk4
OCkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDEyMzQpOwogCi0gICAgICAgIHN0b3Jl
QmlnRW5kaWFuKGR2LCAwLCAtMjE0NzQ3ODk4OCk7IAorICAgICAgICBzdG9yZUJpZ0VuZGlhbihk
diwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDE2KC0yMTQ3NDc4OTg4KSk7CiAgICAgICAgIGFz
c2VydChhcnJbMF0gPT09IDB4MzQxMik7CiAgICAgfQogfQogdGVzdDIoKTsKIAorZnVuY3Rpb24g
YWRqdXN0Rm9yRW5kaWFuZXNzVWludDMyKHZhbHVlKSB7CisgICAgaWYgKGlzTGl0dGxlRW5kaWFu
KQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBsZXQgYWIgPSBuZXcgQXJyYXlCdWZmZXIo
NCk7CisgICAgbGV0IHRhID0gbmV3IFVpbnQzMkFycmF5KGFiKTsKKyAgICB0YVswXSA9IHZhbHVl
OworICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgcmV0dXJuIGR2LmdldFVpbnQz
MigwLCB0cnVlKTsKK30KKwogZnVuY3Rpb24gdGVzdDMoKSB7CiAgICAgZnVuY3Rpb24gc3RvcmVM
aXR0bGVFbmRpYW4oZHYsIGluZGV4LCB2YWx1ZSkgewogICAgICAgICBkdi5zZXRVaW50MzIoaW5k
ZXgsIHZhbHVlLCB0cnVlKTsKQEAgLTIwNSwyOSArMjMxLDI5IEBAIGZ1bmN0aW9uIHRlc3QzKCkg
ewogICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhidWZmZXIpOwogCiAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCAw
eGZmZmZmZmZmKTsKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVu
ZGlhbmVzc1VpbnQzMigweGZmZmZmZmZmKSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4
ZmZmZmZmZmYpOwogICAgICAgICBhc3NlcnQoYXJyMlswXSA9PT0gLTEpOwogCi0gICAgICAgIHN0
b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCAweGZmYWFiYmNjKTsKKyAgICAgICAgc3RvcmVMaXR0bGVF
bmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGZmYWFiYmNjKSk7CiAgICAg
ICAgIGFzc2VydChhcnJbMF0gPT09IDB4ZmZhYWJiY2MpOwogCi0gICAgICAgIHN0b3JlQmlnRW5k
aWFuKGR2LCAwLCAweDEyMzQ1Njc4KTsKKyAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIGFk
anVzdEZvckVuZGlhbmVzc1VpbnQzMigweDEyMzQ1Njc4KSk7CiAgICAgICAgIGFzc2VydChhcnJb
MF0gPT09IDB4Nzg1NjM0MTIpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAweGZm
YWFiYmNjKTsKKyAgICAgICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVz
c1VpbnQzMigweGZmYWFiYmNjKSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4Y2NiYmFh
ZmYpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAweGZhZWFkYWNhLCBmYWxzZSk7CisgICAgICAg
IHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhmYWVhZGFjYSksIGZhbHNl
KTsKICAgICAgICAgYXNzZXJ0KGFyclswXSA9PT0gMHhjYWRhZWFmYSk7CiAKLSAgICAgICAgc3Rv
cmUoZHYsIDAsIDB4Y2FkYWVhZmEsIGZhbHNlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVz
dEZvckVuZGlhbmVzc1VpbnQzMigweGNhZGFlYWZhKSwgZmFsc2UpOwogICAgICAgICBhc3NlcnQo
YXJyMlswXSA9PT0gLTg1MjcxODYyKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgMHgxMjM0NTY3
OCwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzVWludDMy
KDB4MTIzNDU2NzgpLCBmYWxzZSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDB4Nzg1NjM0
MTIpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAweGJlZWZmZWViKTsKKyAgICAg
ICAgc3RvcmVCaWdFbmRpYW4oZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweGJlZWZm
ZWViKSk7CiAgICAgICAgIGFzc2VydChhcnIyWzBdID09PSAtMzM1NjE0MDE4KTsKICAgICB9CiB9
CkBAIC0yNTUsMzQgKzI4MSw0NSBAQCBmdW5jdGlvbiB0ZXN0NCgpIHsKICAgICBsZXQgZHYgPSBu
ZXcgRGF0YVZpZXcoYnVmZmVyKTsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgewotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihkdiwgMCwgMHhmZmZmZmZmZik7CisgICAg
ICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhm
ZmZmZmZmZikpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGZmZmZmZmZmKTsKICAgICAg
ICAgYXNzZXJ0KGFycjJbMF0gPT09IC0xKTsKIAotICAgICAgICBzdG9yZUxpdHRsZUVuZGlhbihk
diwgMCwgMHhmZmFhYmJjYyk7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1
c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhmZmFhYmJjYykpOwogICAgICAgICBhc3NlcnQoYXJyWzBd
ID09PSAweGZmYWFiYmNjKTsKIAotICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgMHgxMjM0
NTY3OCk7CisgICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NV
aW50MzIoMHgxMjM0NTY3OCkpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDc4NTYzNDEy
KTsKIAotICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgMHhmZmFhYmJjYyk7CisgICAgICAg
IHN0b3JlQmlnRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhmZmFhYmJj
YykpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweGNjYmJhYWZmKTsKIAotICAgICAgICBz
dG9yZShkdiwgMCwgMHhmYWVhZGFjYSwgZmFsc2UpOworICAgICAgICBzdG9yZShkdiwgMCwgYWRq
dXN0Rm9yRW5kaWFuZXNzVWludDMyKDB4ZmFlYWRhY2EpLCBmYWxzZSk7CiAgICAgICAgIGFzc2Vy
dChhcnJbMF0gPT09IDB4Y2FkYWVhZmEpOwogCi0gICAgICAgIHN0b3JlKGR2LCAwLCAweGNhZGFl
YWZhLCBmYWxzZSk7CisgICAgICAgIHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50
MzIoMHhjYWRhZWFmYSksIGZhbHNlKTsKICAgICAgICAgYXNzZXJ0KGFycjJbMF0gPT09IC04NTI3
MTg2Mik7CiAKLSAgICAgICAgc3RvcmUoZHYsIDAsIDB4MTIzNDU2NzgsIGZhbHNlKTsKKyAgICAg
ICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc1VpbnQzMigweDEyMzQ1Njc4KSwgZmFs
c2UpOwogICAgICAgICBhc3NlcnQoYXJyWzBdID09PSAweDc4NTYzNDEyKTsKIAotICAgICAgICBz
dG9yZUJpZ0VuZGlhbihkdiwgMCwgMHhiZWVmZmVlYik7CisgICAgICAgIHN0b3JlQmlnRW5kaWFu
KGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NVaW50MzIoMHhiZWVmZmVlYikpOwogICAgICAgICBh
c3NlcnQoYXJyMlswXSA9PT0gLTMzNTYxNDAxOCk7CiAgICAgfQogfQogdGVzdDQoKTsKIAorZnVu
Y3Rpb24gYWRqdXN0Rm9yRW5kaWFuZXNzRmxvYXQzMih2YWx1ZSkgeworICAgIGlmIChpc0xpdHRs
ZUVuZGlhbikKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGV0IGFiID0gbmV3IEFycmF5
QnVmZmVyKDQpOworICAgIGxldCB0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYWIpOworICAgIHRhWzBd
ID0gdmFsdWU7CisgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGFiKTsKKyAgICByZXR1cm4gZHYu
Z2V0RmxvYXQzMigwLCB0cnVlKTsKK30KKwogZnVuY3Rpb24gdGVzdDUoKSB7CiAgICAgZnVuY3Rp
b24gc3RvcmVMaXR0bGVFbmRpYW4oZHYsIGluZGV4LCB2YWx1ZSkgewogICAgICAgICBkdi5zZXRG
bG9hdDMyKGluZGV4LCB2YWx1ZSwgdHJ1ZSk7CkBAIC0zMDUsMjcgKzM0MiwzOCBAQCBmdW5jdGlv
biB0ZXN0NSgpIHsKICAgICBsZXQgZHYgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTsKIAogICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBzdG9yZUxpdHRsZUVuZGlh
bihkdiwgMCwgMS41KTsKKyAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIGFkanVzdEZv
ckVuZGlhbmVzc0Zsb2F0MzIoMS41KSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDEuNSk7
CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIDEyOTEyLjEyNDEyMzIxNTEyMik7
Ci0gICAgICAgIGFzc2VydChhcnJbMF0gPT09IDEyOTEyLjEyNDAyMzQzNzUpOworICAgICAgICBz
dG9yZShkdiwgMCwgMTI5MTIuMTI0MTIzMjE1MTIyLCBpc0xpdHRsZUVuZGlhbik7CiAgICAgICAg
IGFzc2VydChiaXRzWzBdID09PSAweDQ2NDljMDdmKTsKKyAgICAgICAgYXNzZXJ0KGFyclswXSA9
PT0gMTI5MTIuMTI0MDIzNDM3NSk7CiAKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAs
IE5hTik7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5l
c3NGbG9hdDMyKE5hTikpOwogICAgICAgICBhc3NlcnQoaXNOYU4oYXJyWzBdKSk7CiAKLSAgICAg
ICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIDIuMzg3OTM5M2UtMzgpOworICAgICAgICBzdG9y
ZUxpdHRsZUVuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5kaWFuZXNzRmxvYXQzMigyLjM4NzkzOTNl
LTM4KSk7CiAgICAgICAgIGFzc2VydChhcnJbMF0gPT09IDIuMzg3OTM5MjYwNTkwNjYzZS0zOCk7
CiAgICAgICAgIGFzc2VydChiaXRzWzBdID09PSAweDAxMDIwMzA0KTsKIAotICAgICAgICBzdG9y
ZUJpZ0VuZGlhbihkdiwgMCwgMi4zODc5MzkzZS0zOCk7CisgICAgICAgIHN0b3JlQmlnRW5kaWFu
KGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDMyKDIuMzg3OTM5M2UtMzgpKTsKICAgICAg
ICAgYXNzZXJ0KGFyclswXSA9PT0gMS41Mzk5ODk2MTQ0Mzk1NThlLTM2KTsKICAgICAgICAgYXNz
ZXJ0KGJpdHNbMF0gPT09IDB4MDQwMzAyMDEpOwogICAgIH0KIH0KIHRlc3Q1KCk7CiAKK2Z1bmN0
aW9uIGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0NjQodmFsdWUpIHsKKyAgICBpZiAoaXNMaXR0bGVF
bmRpYW4pCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxldCBhYiA9IG5ldyBBcnJheUJ1
ZmZlcig4KTsKKyAgICBsZXQgdGEgPSBuZXcgRmxvYXQ2NEFycmF5KGFiKTsKKyAgICB0YVswXSA9
IHZhbHVlOworICAgIGxldCBkdiA9IG5ldyBEYXRhVmlldyhhYik7CisgICAgcmV0dXJuIGR2Lmdl
dEZsb2F0NjQoMCwgdHJ1ZSk7Cit9CisKIGZ1bmN0aW9uIHRlc3Q2KCkgewogICAgIGZ1bmN0aW9u
IHN0b3JlTGl0dGxlRW5kaWFuKGR2LCBpbmRleCwgdmFsdWUpIHsKICAgICAgICAgZHYuc2V0Rmxv
YXQ2NChpbmRleCwgdmFsdWUsIHRydWUpOwpAQCAtMzQ3LDMwICszOTUsMzAgQEAgZnVuY3Rpb24g
dGVzdDYoKSB7CiAgICAgbGV0IGR2ID0gbmV3IERhdGFWaWV3KGJ1ZmZlcik7CiAKICAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4o
ZHYsIDAsIE5hTik7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JF
bmRpYW5lc3NGbG9hdDY0KE5hTikpOwogICAgICAgICBhc3NlcnQoaXNOYU4oYXJyWzBdKSk7CiAK
LSAgICAgICAgc3RvcmVMaXR0bGVFbmRpYW4oZHYsIDAsIC0yLjUwNzUxODcwODQxMzUxNjJlKzI4
NCk7CisgICAgICAgIHN0b3JlTGl0dGxlRW5kaWFuKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NG
bG9hdDY0KC0yLjUwNzUxODcwODQxMzUxNjJlKzI4NCkpOwogICAgICAgICBhc3NlcnQoYXJyWzBd
ID09PSAtMi41MDc1MTg3MDg0MTM1MTYyZSsyODQpOwogICAgICAgICBhc3NlcnQocmVhZEhleChk
diwgOCkgPT09ICIweGZhZmFmYWZhZmFmYWZhZmEiKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwg
MTI0LjU1MywgdHJ1ZSk7CisgICAgICAgIHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NG
bG9hdDY0KDEyNC41NTMpLCB0cnVlKTsKICAgICAgICAgYXNzZXJ0KHJlYWRIZXgoZHYsIDgpID09
PSAiMHg0MDVmMjM2NDVhMWNhYzA4Iik7CiAKLSAgICAgICAgc3RvcmUoZHYsIDAsIEluZmluaXR5
LCB0cnVlKTsKKyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0NjQo
SW5maW5pdHkpLCB0cnVlKTsKICAgICAgICAgYXNzZXJ0KHJlYWRIZXgoZHYsIDgpID09PSAiMHg3
ZmYwMDAwMDAwMDAwMDAwIik7CiAKLSAgICAgICAgc3RvcmUoZHYsIDAsIEluZmluaXR5LCBmYWxz
ZSk7CisgICAgICAgIHN0b3JlKGR2LCAwLCBhZGp1c3RGb3JFbmRpYW5lc3NGbG9hdDY0KEluZmlu
aXR5KSwgZmFsc2UpOwogICAgICAgICBhc3NlcnQocmVhZEhleChkdiwgOCkgPT09ICIweDAwMDAw
MDAwMDAwMGYwN2YiKTsKIAotICAgICAgICBzdG9yZShkdiwgMCwgLUluZmluaXR5LCB0cnVlKTsK
KyAgICAgICAgc3RvcmUoZHYsIDAsIGFkanVzdEZvckVuZGlhbmVzc0Zsb2F0NjQoLUluZmluaXR5
KSwgdHJ1ZSk7CiAgICAgICAgIGFzc2VydChyZWFkSGV4KGR2LCA4KSA9PT0gIjB4ZmZmMDAwMDAw
MDAwMDAwMCIpOwogCi0gICAgICAgIHN0b3JlQmlnRW5kaWFuKGR2LCAwLCAtMi41MDc1MTg3MDg0
MTM1MTYyZSsyODQpOworICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwgYWRqdXN0Rm9yRW5k
aWFuZXNzRmxvYXQ2NCgtMi41MDc1MTg3MDg0MTM1MTYyZSsyODQpKTsKICAgICAgICAgYXNzZXJ0
KGFyclswXSA9PT0gLTIuNTA3NTE4NzA4NDEzNTE2MmUrMjg0KTsKICAgICAgICAgYXNzZXJ0KHJl
YWRIZXgoZHYsIDgpID09PSAiMHhmYWZhZmFmYWZhZmFmYWZhIik7CiAKLSAgICAgICAgc3RvcmVC
aWdFbmRpYW4oZHYsIDAsIDEyNC41NTMpOworICAgICAgICBzdG9yZUJpZ0VuZGlhbihkdiwgMCwg
YWRqdXN0Rm9yRW5kaWFuZXNzRmxvYXQ2NCgxMjQuNTUzKSk7CiAgICAgICAgIGFzc2VydChyZWFk
SGV4KGR2LCA4KSA9PT0gIjB4MDhhYzFjNWE2NDIzNWY0MCIpOwogICAgIH0KIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>