<?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>41473</bug_id>
          
          <creation_ts>2010-07-01 11:08:09 -0700</creation_ts>
          <short_desc>Fix issues in boundary situations for WebGLRenderingContext::drawArrays/drawElements</short_desc>
          <delta_ts>2010-07-15 14:36:46 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>42409</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>bjacob</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>245430</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 11:08:09 -0700</bug_when>
    <thetext>in &quot;first + count&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245576</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 15:12:01 -0700</bug_when>
    <thetext>1) in drawArrays, possible overflow for (first + count)
2) drawArrays(first, count=0) where first is out-of-range should generate INVALID_OPERATION.
3) drawElements(count=0, offset=0) with buffer of size 0 should not generate an error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245581</commentid>
    <comment_count>2</comment_count>
      <attachid>60295</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 15:18:46 -0700</bug_when>
    <thetext>Created attachment 60295
patch

CheckedInt.h is imported from mozilla as recommended by kbr to deal with integer overflow situation.  Modification is made to the file to remove further dependencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245582</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 15:19:54 -0700</bug_when>
    <thetext>Attachment 60295 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
 use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:214:  twice_bigger_type_is_supported is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:219:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:230:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:241:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:247:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/html/canvas/CheckedInt.h:247:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:250:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/html/canvas/CheckedInt.h:255:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/html/canvas/CheckedInt.h:265:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:269:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/html/canvas/CheckedInt.h:269:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:283:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:285:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:340:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:409:  CheckedInt_internal::is_sub_valid is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:468:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:469:  return_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:475:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:476:  return_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:490:  COMPOUND_OP is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:509:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 39 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245634</commentid>
    <comment_count>4</comment_count>
      <attachid>60295</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 16:24:28 -0700</bug_when>
    <thetext>Comment on attachment 60295
patch

Looks good. I think we need Darin&apos;s feedback on whether it&apos;s okay to incorporate CheckedInt verbatim. In order to be able to take future updates from Mozilla I really think we should not force the code into WebKit style. One comment.


WebCore/html/canvas/WebGLRenderingContext.cpp:859
 +      if (!(checkedFirst + checkedCount).valid() || !validateRenderingState(first + count)) {
How about

mozilla::CheckedInt checkedSum = checkedFirst + checkedCount;
if (!checkedSum.valid() || !validateRenderingState(checkedSum.value()) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245642</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-01 16:35:41 -0700</bug_when>
    <thetext>WebKit has several other source files imported from Mozilla.  I don&apos;t know what the process is for adding more.

Preserving the original formatting and style of the code makes sense to me, but we might want to make the interface more WebKit friendly.  For example, instead of the mozilla namespace, perhaps we&apos;d want to just have this code live in the WebCore namespace.

That way instead of writing:

  mozilla::CheckedInt&lt;int32_t&gt; checkedCount(count);

We could just write:

  CheckedInt&lt;int32_t&gt; checkedCount(count);

I doubt the cost of renaming the namespace would cause that much of a merge headache, especially considering the other changes that were needed to support the removal of prtypes.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245646</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 16:38:58 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Preserving the original formatting and style of the code makes sense to me, but we might want to make the interface more WebKit friendly.  For example, instead of the mozilla namespace, perhaps we&apos;d want to just have this code live in the WebCore namespace.

Agree with renaming the namespace -- usage is tedious otherwise.

BTW, the only reason we placed this class here was to keep it close to its only current uses. We plan to use it more in the WebGL implementation. Open to suggestions of where to incorporate it in the tree. (Hoping there aren&apos;t any issues doing so -- Mozilla encouraged us to integrate it.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245662</commentid>
    <comment_count>7</comment_count>
      <attachid>60316</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-01 17:00:48 -0700</bug_when>
    <thetext>Created attachment 60316
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245663</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 17:01:30 -0700</bug_when>
    <thetext>Attachment 60316 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
 use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:215:  twice_bigger_type_is_supported is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:220:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:231:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:242:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:248:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/html/canvas/CheckedInt.h:248:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:251:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/html/canvas/CheckedInt.h:256:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/html/canvas/CheckedInt.h:266:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:270:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/html/canvas/CheckedInt.h:270:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:284:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:286:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:341:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:410:  CheckedInt_internal::is_sub_valid is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:469:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:470:  return_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:476:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:477:  return_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:491:  COMPOUND_OP is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:510:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 39 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245666</commentid>
    <comment_count>9</comment_count>
      <attachid>60316</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-01 17:08:07 -0700</bug_when>
    <thetext>Comment on attachment 60316
revised patch

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245722</commentid>
    <comment_count>10</comment_count>
      <attachid>60316</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-01 20:09:59 -0700</bug_when>
    <thetext>Comment on attachment 60316
revised patch

WebCore/html/canvas/CheckedInt.h:44
 +  #ifndef mozilla_CheckedInt_h
one more nit: let&apos;s rename this include guard to be CheckedInt_h
to match WebKit style.  it seems valuable to follow this rule
since it is related to the naming conventions for files.

otherwise, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245944</commentid>
    <comment_count>11</comment_count>
      <attachid>60373</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-02 09:57:21 -0700</bug_when>
    <thetext>Created attachment 60373
revised patch: changed define to CheckedInt_h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245947</commentid>
    <comment_count>12</comment_count>
      <attachid>60373</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-02 10:12:00 -0700</bug_when>
    <thetext>Comment on attachment 60373
revised patch: changed define to CheckedInt_h

thanks, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245975</commentid>
    <comment_count>13</comment_count>
      <attachid>60373</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 11:03:27 -0700</bug_when>
    <thetext>Comment on attachment 60373
revised patch: changed define to CheckedInt_h

Rejecting patch 60373 from commit-queue.

Failed to run &quot;[u&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Darin Fisher&apos;, u&apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
 (offset 18 lines).
Hunk #3 succeeded at 871 (offset 18 lines).
Hunk #4 succeeded at 915 (offset 26 lines).
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds-expected.txt
patching file LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds.html
patching file LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds-expected.txt
patching file LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds.html

Full output: http://webkit-commit-queue.appspot.com/results/3410090</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245985</commentid>
    <comment_count>14</comment_count>
      <attachid>60382</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-02 11:18:26 -0700</bug_when>
    <thetext>Created attachment 60382
revised patch: resolve a svn merge conflict</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245986</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 11:19:46 -0700</bug_when>
    <thetext>Attachment 60382 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
 use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:216:  twice_bigger_type_is_supported is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:221:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:232:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:243:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:249:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/html/canvas/CheckedInt.h:249:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:252:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/html/canvas/CheckedInt.h:257:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/html/canvas/CheckedInt.h:267:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:271:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/html/canvas/CheckedInt.h:271:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:285:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:287:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/html/canvas/CheckedInt.h:342:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:411:  CheckedInt_internal::is_sub_valid is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:470:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:471:  return_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:477:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/html/canvas/CheckedInt.h:478:  return_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:492:  COMPOUND_OP is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/html/canvas/CheckedInt.h:511:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 38 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245988</commentid>
    <comment_count>16</comment_count>
      <attachid>60382</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-02 11:21:20 -0700</bug_when>
    <thetext>Comment on attachment 60382
revised patch: resolve a svn merge conflict

once more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246020</commentid>
    <comment_count>17</comment_count>
      <attachid>60382</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 12:24:21 -0700</bug_when>
    <thetext>Comment on attachment 60382
revised patch: resolve a svn merge conflict

Clearing flags on attachment: 60382

Committed r62397: &lt;http://trac.webkit.org/changeset/62397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246021</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-02 12:24:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250617</commentid>
    <comment_count>19</comment_count>
    <who name="Benoit Jacob">bjacob</who>
    <bug_when>2010-07-13 10:44:11 -0700</bug_when>
    <thetext>Hi, I wanted to let you know that we also have an extensive unit test for CheckedInt, in case you might want to import that too:

http://hg.mozilla.org/mozilla-central/file/tip/xpcom/tests/TestCheckedInt.cpp</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60295</attachid>
            <date>2010-07-01 15:18:46 -0700</date>
            <delta_ts>2010-07-01 17:00:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>overflow.patch</filename>
            <type>text/plain</type>
            <size>37832</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjMwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDctMDEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaXNz
dWVzIGluIGJvdW5kYXJ5IHNpdHVhdGlvbnMgZm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0FycmF5cy9kcmF3RWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDczCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBDaGVja2Vk
SW50LmguCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQg
Q2hlY2tlZEludC5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NoZWNrZWRJbnQuaDogQWRkZWQg
c3VwcG9ydCBvZiBzYWZlIGludGVnZXIgb3BlcmF0aW9ucy4KKyAgICAgICAgKG1vemlsbGE6OkNo
ZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvOjop
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfdW5zdXBwb3J0ZWRf
dHlwZTo6KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6Oik6CisgICAg
ICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppbnRlZ2VyX3RyYWl0czo6KToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHJhaXRzOjptaW4p
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90cmFpdHM6
Om1heCk6CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjpoYXNfc2lnbl9i
aXQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6YmluYXJ5X2NvbXBs
ZW1lbnQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfaW5fcmFu
Z2UpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfYWRkX3ZhbGlk
KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmlzX3N1Yl92YWxpZCk6
CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppc19tdWxfdmFsaWQpOgor
ICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfZGl2X3ZhbGlkKToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnQ6OkNoZWNrZWRJbnQpOgorICAgICAgICAobW96aWxs
YTo6Q2hlY2tlZEludDo6dmFsdWUpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6dmFs
aWQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6b3BlcmF0b3IgLSk6CisgICAgICAg
IChtb3ppbGxhOjpDaGVja2VkSW50OjpvcGVyYXRvciA9PSk6CisgICAgICAgIChtb3ppbGxhOjpD
aGVja2VkSW50OjpvcGVyYXRvciAhPSk6CisgICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciAvKToK
KyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludF9pbXBsOjpydW4pOgorICAgICAg
ICAobW96aWxsYTo6KToKKyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludCk6Cisg
ICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciA9PSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKTogRml4IGEgYnVnIGFnYWlu
c3QgMC1zaXplIGJ1ZmZlciBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBEZWFsIHdpdGggb3ZlcmZsb3dzIGFuZCBjb3VudD09
MCBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdFbGVtZW50cyk6IERlYWwgd2l0aCBjb3VudD09MCBzaXR1YXRpb24uCisKIDIwMTAtMDctMDEg
IEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYyMjczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksNiArMTQ1OSw3IEBACiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvVWludDE2QXJyYXkuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9VaW50
MTZBcnJheS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DaGVja2VkSW50LmgnLAogICAg
ICAgICAgICAgJ2h0bWwvQ29sbGVjdGlvbkNhY2hlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9D
b2xsZWN0aW9uQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9Db2xsZWN0aW9uVHlwZS5oJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2MjI3MykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjA4LDYgKzI2MDgsNyBAQAogCQk5RkZFM0U3QjExQjU5QzVEMDAz
Nzg3NEUgLyogTWVtb3J5SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUZGRTNFNzkxMUI1OUM1RDAwMzc4NzRFIC8qIE1lbW9yeUluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5RkZFM0VBNTEx
QjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGRkUzRUEzMTFCNUE0MzkwMDM3ODc0RSAvKiBKU01l
bW9yeUluZm8uY3BwICovOyB9OwogCQk5RkZFM0VBNjExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1v
cnlJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmggKi87IH07CisJCUEwNDY2
QTZDMTFERDQyQTgwMDY1RDU3NCAvKiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDQ2NkE2QjExREQ0MkE4MDA2NUQ1NzQgLyogQ2hl
Y2tlZEludC5oICovOyB9OwogCQlBMTM2QTAwQzExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLzsgfTsKIAkJQTEzNkEwMEQxMTM0REJE
MjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTM2QTAwQjExMzREQkQy
MDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLzsgfTsK
IAkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdDODEyMDBGMkE1
Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKQEAgLTgyNjQsNiAr
ODI2NSw3IEBACiAJCTlGRkUzRTdDMTFCNTlDNkUwMDM3ODc0RSAvKiBNZW1vcnlJbmZvLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZW1vcnlJbmZvLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUZGRTNFQTMxMUI1QTQzOTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lbW9yeUluZm8uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyog
SlNNZW1vcnlJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVtb3J5
SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMDQ2NkE2QjExREQ0MkE4MDA2
NUQ1NzQgLyogQ2hlY2tlZEludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
aGVja2VkSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBBMTEzNERC
RDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBC
MTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMDBG
MkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTU3OCw2ICsxMTU4MCw3IEBACiAJCTQ5NDg0RkFFMTAyQ0Yw
MUUwMDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCUEwNDY2QTZCMTFERDQyQTgwMDY1RDU3NCAvKiBDaGVja2VkSW50LmggKi8s
CiAJCQkJNDlFRUNEQ0ExMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyLmNwcCAqLywKIAkJ
CQk0OUVFQ0RDQjEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaCAqLywKIAkJCQk0OUVF
Q0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLApAQCAtMTk2NzgsNiAr
MTk2ODEsNyBAQAogCQkJCUJDNjQ2NDk4MTFEODIzNDkwMDY0NTVCMCAvKiBKU0RPTVN0cmluZ01h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNTYzQjQxMURCM0QxMDAwM0FDMkYwIC8qIEhUTUxF
bGVtZW50U3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTU2NEE1MTFEQzBFNTkwMDNBQzJG
MCAvKiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMDQ2
NkE2QzExREQ0MkE4MDA2NUQ1NzQgLyogQ2hlY2tlZEludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NoZWNrZWRJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NoZWNrZWRJbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2hlY2tlZEludC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyNSBAQAorLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLworLyogdmltOnNldCB0cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVudDog
Ki8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5z
ZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUuCisgKgorICogVGhl
IEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxhIENv
cnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg
YXJlIENvcHlyaWdodCAoQykgMjAwOQorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICogIEJlbm9pdCBKYWNvYiA8
YmphY29iQG1vemlsbGEuY29tPgorICogIEplZmYgTXVpemVsYWFyIDxqbXVpemVsYWFyQG1vemls
bGEuY29tPgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIg
KHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BM
IG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkg
ZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhl
IExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUg
dGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAq
ICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8vIE5lY2Vzc2FyeSBtb2RpZmlj
YXRpb25zIGFyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBDaGVja2VkSW50LmggZmlsZSB0byByZW1v
dmUKKy8vIGRlcGVuZGVuY2llcyBvbiBwcnR5cGVzLgorCisjaWZuZGVmIG1vemlsbGFfQ2hlY2tl
ZEludF9oCisjZGVmaW5lIG1vemlsbGFfQ2hlY2tlZEludF9oCisKKyNpbmNsdWRlIDxjbGltaXRz
PgorCituYW1lc3BhY2UgbW96aWxsYSB7CisKK25hbWVzcGFjZSBDaGVja2VkSW50X2ludGVybmFs
IHsKKworLyogd2UgZG9uJ3Qgd2FudCB0byB1c2Ugc3RkOjpudW1lcmljX2xpbWl0cyBoZXJlIGJl
Y2F1c2UgUFJJbnQuLi4gdHlwZXMgbWF5IG5vdCBzdXBwb3J0IGl0LAorICogZGVwZW5kaW5nIG9u
IHRoZSBwbGF0Zm9ybSwgZS5nLiBvbiBjZXJ0YWluIHBsYXRmb3JtIHRoZXkgdXNlIG5vbnN0YW5k
YXJkIGJ1aWx0LWluIHR5cGVzCisgKi8KKworLyoqKiBTdGVwIDE6IG1hbnVhbGx5IHJlY29yZCBp
bmZvcm1hdGlvbiBmb3IgYWxsIHRoZSB0eXBlcyB0aGF0IHdlIHdhbnQgdG8gc3VwcG9ydAorICoq
Ki8KKworc3RydWN0IHVuc3VwcG9ydGVkX3R5cGUge307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBpbnRlZ2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbworeworICAgIGVudW0g
eyBpc19zdXBwb3J0ZWQgPSAwIH07CisgICAgdHlwZWRlZiB1bnN1cHBvcnRlZF90eXBlIHR3aWNl
X2JpZ2dlcl90eXBlOworfTsKKworCisjZGVmaW5lIENIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9S
VEVEX1RZUEUoVCxfdHdpY2VfYmlnZ2VyX3R5cGUpICBcCit0ZW1wbGF0ZTw+IHN0cnVjdCBpbnRl
Z2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPiAgICAgICBcCit7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ZW51bSB7IGlzX3N1cHBvcnRlZCA9IDEgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgdHlwZWRlZiBfdHdpY2VfYmlnZ2VyX3R5cGUgdHdpY2VfYmlnZ2VyX3R5cGU7ICAg
ICAgICAgICAgICBcCisgICAgc3RhdGljIHZvaWQgVFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNr
ZWRJbnQoKSB7fSAgICAgICAgICAgICBcCit9OworCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBP
UlRFRF9UWVBFKGludDhfdCwgICBpbnQxNl90KQorQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JU
RURfVFlQRSh1aW50OF90LCAgdWludDE2X3QpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRF
RF9UWVBFKGludDE2X3QsICBpbnQzMl90KQorQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURf
VFlQRSh1aW50MTZfdCwgdWludDMyX3QpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9U
WVBFKGludDMyX3QsICBpbnQ2NF90KQorQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQ
RSh1aW50MzJfdCwgdWludDY0X3QpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9UWVBF
KGludDY0X3QsICB1bnN1cHBvcnRlZF90eXBlKQorQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JU
RURfVFlQRSh1aW50NjRfdCwgdW5zdXBwb3J0ZWRfdHlwZSkKKworCisvKioqIFN0ZXAgMjogcmVj
b3JkIHNvbWUgaW5mbyBhYm91dCBhIGdpdmVuIGludGVnZXIgdHlwZSwKKyAqKiogICAgICAgICBp
bmNsdWRpbmcgd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQsIHdoZXRoZXIgYSB0d2ljZSBiaWdnZXIg
aW50ZWdlciB0eXBlCisgKioqICAgICAgICAgaXMgc3VwcG9ydGVkLCB3aGF0IHRoYXQgdHdpY2Ug
YmlnZ2VyIHR5cGUgaXMsIGFuZCBzb21lIHN0dWZmIGFzIGZvdW5kCisgKioqICAgICAgICAgaW4g
c3RkOjpudW1lcmljX2xpbWl0cyAod2hpY2ggd2UgZG9uJ3QgdXNlIGJlY2F1c2UgUFJJbnQuLiB0
eXBlcyBtYXkKKyAqKiogICAgICAgICBub3Qgc3VwcG9ydCBpdCwgaWYgdGhleSBhcmUgZGVmaW5l
ZCBkaXJlY3RseSBmcm9tIGNvbXBpbGVyIGJ1aWx0LWluIHR5cGVzKS4KKyAqKiovCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBpc191bnN1cHBvcnRlZF90eXBlIHsgZW51bSB7IGFuc3dl
ciA9IDAgfTsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IGlzX3Vuc3VwcG9ydGVkX3R5cGU8dW5zdXBw
b3J0ZWRfdHlwZT4geyBlbnVtIHsgYW5zd2VyID0gMSB9OyB9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgaW50ZWdlcl90cmFpdHMKK3sKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGludGVn
ZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZSB0d2lj
ZV9iaWdnZXJfdHlwZTsKKworICAgIGVudW0geworICAgICAgICBpc19zdXBwb3J0ZWQgPSBpbnRl
Z2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPjo6aXNfc3VwcG9ydGVkLAorICAgICAg
ICB0d2ljZV9iaWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQKKyAgICAgICAgICAgID0gaXNfdW5zdXBw
b3J0ZWRfdHlwZTwKKyAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGludGVnZXJfdHlwZV9tYW51
YWxseV9yZWNvcmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZQorICAgICAgICAgICAgICA+
OjphbnN3ZXIgPyAwIDogMSwKKyAgICAgICAgc2l6ZSA9IHNpemVvZihUKSwKKyAgICAgICAgcG9z
aXRpb25fb2Zfc2lnbl9iaXQgPSBDSEFSX0JJVCAqIHNpemUgLSAxLAorICAgICAgICBpc19zaWdu
ZWQgPSAoVCgtMSkgPiBUKDApKSA/IDAgOiAxCisgICAgfTsKKworICAgIHN0YXRpYyBUIG1pbigp
CisgICAgeworICAgICAgICAvLyBiaXR3aXNlIG9wcyBtYXkgcmV0dXJuIGEgbGFyZ2VyIHR5cGUs
IHRoYXQncyB3aHkgd2UgY2FzdCBleHBsaWNpdGx5IHRvIFQKKyAgICAgICAgcmV0dXJuIGlzX3Np
Z25lZCA/IFQoVCgxKSA8PCBwb3NpdGlvbl9vZl9zaWduX2JpdCkgOiBUKDApOworICAgIH0KKwor
ICAgIHN0YXRpYyBUIG1heCgpCisgICAgeworICAgICAgICByZXR1cm4gfm1pbigpOworICAgIH0K
K307CisKKy8qKiogU3RlcCAzOiBJbXBsZW1lbnQgdGhlIGFjdHVhbCB2YWxpZGl0eSBjaGVja3Mg
LS0tIGlkZWFzIHRha2VuIGZyb20gSW50ZWdlckxpYiwgY29kZSBkaWZmZXJlbnQuCisgKioqLwor
CisvLyBiaXR3aXNlIG9wcyBtYXkgcmV0dXJuIGEgbGFyZ2VyIHR5cGUsIHNvIGl0J3MgZ29vZCB0
byB1c2UgdGhlc2UgaW5saW5lIGhlbHBlcnMgZ3VhcmFudGVlaW5nIHRoYXQKKy8vIHRoZSByZXN1
bHQgaXMgcmVhbGx5IG9mIHR5cGUgVAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBo
YXNfc2lnbl9iaXQoVCB4KQoreworICAgIHJldHVybiB4ID4+IGludGVnZXJfdHJhaXRzPFQ+Ojpw
b3NpdGlvbl9vZl9zaWduX2JpdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQg
YmluYXJ5X2NvbXBsZW1lbnQoVCB4KQoreworICAgIHJldHVybiB+eDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwKKyAgICAgICAgIGJvb2wgaXNfVF9zaWduZWQgPSBpbnRl
Z2VyX3RyYWl0czxUPjo6aXNfc2lnbmVkLAorICAgICAgICAgYm9vbCBpc19VX3NpZ25lZCA9IGlu
dGVnZXJfdHJhaXRzPFU+Ojppc19zaWduZWQ+CitzdHJ1Y3QgaXNfaW5fcmFuZ2VfaW1wbCB7fTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBpc19pbl9yYW5nZV9p
bXBsPFQsIFUsIHRydWUsIHRydWU+Cit7CisgICAgc3RhdGljIFQgcnVuKFUgeCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAoeCA8PSBpbnRlZ2VyX3RyYWl0czxUPjo6bWF4KCkpICYKKyAgICAgICAg
ICAgICAgICh4ID49IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBpc19pbl9yYW5nZV9pbXBsPFQs
IFUsIGZhbHNlLCBmYWxzZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVSB4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHggPD0gaW50ZWdlcl90cmFpdHM8VD46Om1heCgpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgaXNfaW5fcmFuZ2VfaW1wbDxU
LCBVLCB0cnVlLCBmYWxzZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVSB4KQorICAgIHsKKyAgICAg
ICAgaWYgKHNpemVvZihUKSA+IHNpemVvZihVKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4geCA8PSBVKGludGVnZXJfdHJhaXRzPFQ+Ojpt
YXgoKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0
cnVjdCBpc19pbl9yYW5nZV9pbXBsPFQsIFUsIGZhbHNlLCB0cnVlPgoreworICAgIHN0YXRpYyBU
IHJ1bihVIHgpCisgICAgeworICAgICAgICBpZiAoc2l6ZW9mKFQpID49IHNpemVvZihVKSkKKyAg
ICAgICAgICAgIHJldHVybiB4ID49IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biB4ID49IDAgJiYgeCA8PSBVKGludGVnZXJfdHJhaXRzPFQ+OjptYXgoKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFQgaXNfaW5fcmFuZ2Uo
VSB4KQoreworICAgIHJldHVybiBpc19pbl9yYW5nZV9pbXBsPFQsIFU+OjpydW4oeCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX2FkZF92YWxpZChUIHgsIFQgeSwgVCBy
ZXN1bHQpCit7CisgICAgcmV0dXJuIGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWduZWQgPworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYWRkaXRpb24gaXMgdmFsaWQgaWYgdGhlIHNpZ24gb2Yg
eCt5IGlzIGVxdWFsIHRvIGVpdGhlciB0aGF0IG9mIHggb3IgdGhhdCBvZiB5LgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQmV3YXJlISBUaGVzZSBiaXR3aXNlIG9wZXJhdGlvbnMgY2FuIHJl
dHVybiBhIGxhcmdlciBpbnRlZ2VyIHR5cGUsIGlmIFQgd2FzIGEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHNtYWxsIHR5cGUgbGlrZSBpbnQ4LCBzbyB3ZSBleHBsaWNpdGx5IGNhc3QgdG8g
VC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19zaWduX2JpdChiaW5hcnlfY29tcGxlbWVu
dChUKChyZXN1bHReeCkgJiAocmVzdWx0XnkpKSkpCisgICAgICAgICAgICAgICAgICAgIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeV9jb21wbGVtZW50KHgpID49IHk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX3N1Yl92YWxpZChUIHgsIFQgeSwgVCByZXN1
bHQpCit7CisgICAgcmV0dXJuIGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWduZWQgPworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc3Vic3RyYWN0aW9uIGlzIHZhbGlkIGlmIGVpdGhlciB4IGFu
ZCB5IGhhdmUgc2FtZSBzaWduLCBvciB4LXkgYW5kIHggaGF2ZSBzYW1lIHNpZ24KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhhc19zaWduX2JpdChiaW5hcnlfY29tcGxlbWVudChUKChyZXN1bHRe
eCkgJiAoeF55KSkpKQorICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAg
ICAgICB4ID49IHk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsCisgICAgICAgICBib29sIGlz
X3NpZ25lZCA9ICBpbnRlZ2VyX3RyYWl0czxUPjo6aXNfc2lnbmVkLAorICAgICAgICAgYm9vbCB0
d2ljZV9iaWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQgPSBpbnRlZ2VyX3RyYWl0czxUPjo6dHdpY2Vf
YmlnZ2VyX3R5cGVfaXNfc3VwcG9ydGVkPgorc3RydWN0IGlzX211bF92YWxpZF9pbXBsIHt9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGlzX211bF92YWxpZF9pbXBsPFQsIHRydWUs
IHRydWU+Cit7CisgICAgc3RhdGljIFQgcnVuKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpbnRlZ2VyX3RyYWl0czxUPjo6dHdpY2VfYmlnZ2VyX3R5cGUgdHdpY2Vf
YmlnZ2VyX3R5cGU7CisgICAgICAgIHR3aWNlX2JpZ2dlcl90eXBlIHByb2R1Y3QgPSB0d2ljZV9i
aWdnZXJfdHlwZSh4KSAqIHR3aWNlX2JpZ2dlcl90eXBlKHkpOworICAgICAgICByZXR1cm4gaXNf
aW5fcmFuZ2U8VD4ocHJvZHVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBpc19tdWxfdmFsaWRfaW1wbDxULCBmYWxzZSwgdHJ1ZT4KK3sKKyAgICBzdGF0aWMg
VCBydW4oVCB4LCBUIHkpCisgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGludGVnZXJf
dHJhaXRzPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZSB0d2ljZV9iaWdnZXJfdHlwZTsKKyAgICAgICAg
dHdpY2VfYmlnZ2VyX3R5cGUgcHJvZHVjdCA9IHR3aWNlX2JpZ2dlcl90eXBlKHgpICogdHdpY2Vf
YmlnZ2VyX3R5cGUoeSk7CisgICAgICAgIHJldHVybiBpc19pbl9yYW5nZTxUPihwcm9kdWN0KTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGlzX211bF92YWxpZF9p
bXBsPFQsIHRydWUsIGZhbHNlPgoreworICAgIHN0YXRpYyBUIHJ1bihUIHgsIFQgeSkKKyAgICB7
CisgICAgICAgIGNvbnN0IFQgbWF4X3ZhbHVlID0gaW50ZWdlcl90cmFpdHM8VD46Om1heCgpOwor
ICAgICAgICBjb25zdCBUIG1pbl92YWx1ZSA9IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKTsKKwor
ICAgICAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYg
KHggPiAwKSB7CisgICAgICAgICAgICBpZiAoeSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
IHggPD0gbWF4X3ZhbHVlIC8geTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geSA+PSBtaW5fdmFsdWUgLyB4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKHkgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiB4ID49IG1pbl92YWx1ZSAvIHk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHkgPj0gbWF4X3ZhbHVlIC8g
eDsKKyAgICAgICAgfQorICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
aXNfbXVsX3ZhbGlkX2ltcGw8VCwgZmFsc2UsIGZhbHNlPgoreworICAgIHN0YXRpYyBUIHJ1bihU
IHgsIFQgeSkKKyAgICB7CisgICAgICAgIGNvbnN0IFQgbWF4X3ZhbHVlID0gaW50ZWdlcl90cmFp
dHM8VD46Om1heCgpOworICAgICAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiB4IDw9IG1heF92YWx1ZSAvIHk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgaXNfbXVsX3ZhbGlkKFQgeCwgVCB5LCBUIC8qcmVzdWx0
IG5vdCB1c2VkKi8pCit7CisgICAgcmV0dXJuIGlzX211bF92YWxpZF9pbXBsPFQ+OjpydW4oeCwg
eSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX2Rpdl92YWxpZChUIHgs
IFQgeSkKK3sKKyAgICByZXR1cm4gaW50ZWdlcl90cmFpdHM8VD46OmlzX3NpZ25lZCA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGluIG1pbmQgdGhhdCBtaW4vLTEgaXMgaW52YWxp
ZCBiZWNhdXNlIGFicyhtaW4pPm1heAorICAgICAgICAgICAgICAgICAgICAgICAgeSAhPSAwICYm
ICh4ICE9IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKSB8fCB5ICE9IFQoLTEpKQorICAgICAgICAg
ICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICB5ICE9IDA7Cit9CisKK30gLy8g
ZW5kIG5hbWVzcGFjZSBDaGVja2VkSW50X2ludGVybmFsCisKKworLyoqKiBTdGVwIDQ6IE5vdyBk
ZWZpbmUgdGhlIENoZWNrZWRJbnQgY2xhc3MuCisgKioqLworCisvKiogXGNsYXNzIENoZWNrZWRJ
bnQKKyAgKiBcYnJpZWYgSW50ZWdlciB3cmFwcGVyIGNsYXNzIGNoZWNraW5nIGZvciBpbnRlZ2Vy
IG92ZXJmbG93IGFuZCBvdGhlciBlcnJvcnMKKyAgKiBccGFyYW0gVCB0aGUgaW50ZWdlciB0eXBl
IHRvIHdyYXAuIENhbiBiZSBhbnkgb2YgaW50OF90LCB1aW50OF90LCBpbnQxNl90LCB1aW50MTZf
dCwKKyAgKiAgICAgICAgICBpbnQzMl90LCB1aW50MzJfdCwgaW50NjRfdCwgdWludDY0X3QuCisg
ICoKKyAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ3VhcmRlZCBpbnRlZ2VyIGFyaXRobWV0aWMu
IERvIGEgY29tcHV0YXRpb24sIHRoZW4gY2hlY2sgdGhhdAorICAqIHZhbGlkKCkgcmV0dXJucyB0
cnVlLCB5b3UgdGhlbiBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgbm8gcHJvYmxlbSwgc3VjaCBhcyBp
bnRlZ2VyIG92ZXJmbG93LAorICAqIGhhcHBlbmVkIGR1cmluZyB0aGlzIGNvbXB1dGF0aW9uLgor
ICAqCisgICogVGhlIGFyaXRobWV0aWMgb3BlcmF0b3JzIGluIHRoaXMgY2xhc3MgYXJlIGd1YXJh
bnRlZWQgbm90IHRvIGNyYXNoIHlvdXIgYXBwCisgICogaW4gY2FzZSBvZiBhIGRpdmlzaW9uIGJ5
IHplcm8uCisgICoKKyAgKiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IHlvdSB3YW50IHRvIGlt
cGxlbWVudCBhIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgKHgreSkveiwKKyAgKiB0aGF0IGRvZXNu
J3QgY3Jhc2ggaWYgej09MCwgYW5kIHRoYXQgcmVwb3J0cyBvbiBlcnJvciAoZGl2aWRlIGJ5IHpl
cm8gb3IgaW50ZWdlciBvdmVyZmxvdykuCisgICogWW91IGNvdWxkIGNvZGUgaXQgYXMgZm9sbG93
czoKKyAgICBcY29kZQorICAgIGJvb2wgY29tcHV0ZV94X3BsdXNfeV9vdmVyX3ooaW50MzJfdCB4
LCBpbnQzMl90IHksIGludDMyX3QgeiwgaW50MzJfdCAqcmVzdWx0KQorICAgIHsKKyAgICAgICAg
Q2hlY2tlZEludDxpbnQzMl90PiBjaGVja2VkX3Jlc3VsdCA9IChDaGVja2VkSW50PGludDMyX3Q+
KHgpICsgeSkgLyB6OworICAgICAgICAqcmVzdWx0ID0gY2hlY2tlZF9yZXN1bHQudmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIGNoZWNrZWRfcmVzdWx0LnZhbGlkKCk7CisgICAgfQorICAgIFxlbmRj
b2RlCisgICoKKyAgKiBJbXBsaWNpdCBjb252ZXJzaW9uIGZyb20gcGxhaW4gaW50ZWdlcnMgdG8g
Y2hlY2tlZCBpbnRlZ2VycyBpcyBhbGxvd2VkLiBUaGUgcGxhaW4gaW50ZWdlcgorICAqIGlzIGNo
ZWNrZWQgdG8gYmUgaW4gcmFuZ2UgYmVmb3JlIGJlaW5nIGNhc3RlZCB0byB0aGUgZGVzdGluYXRp
b24gdHlwZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgKiBsaW5lcyBhbGwgY29t
cGlsZSwgYW5kIHRoZSByZXN1bHRpbmcgQ2hlY2tlZEludHMgYXJlIGNvcnJlY3RseSBkZXRlY3Rl
ZCBhcyB2YWxpZCBvciBpbnZhbGlkOgorICAqIFxjb2RlCisgICAgQ2hlY2tlZEludDx1aW50OF90
PiB4KDEpOyAgIC8vIDEgaXMgb2YgdHlwZSBpbnQsIGlzIGZvdW5kIHRvIGJlIGluIHJhbmdlIGZv
ciB1aW50OF90LCB4IGlzIHZhbGlkCisgICAgQ2hlY2tlZEludDx1aW50OF90PiB4KC0xKTsgIC8v
IC0xIGlzIG9mIHR5cGUgaW50LCBpcyBmb3VuZCBub3QgdG8gYmUgaW4gcmFuZ2UgZm9yIHVpbnQ4
X3QsIHggaXMgaW52YWxpZAorICAgIENoZWNrZWRJbnQ8aW50OF90PiB4KC0xKTsgICAvLyAtMSBp
cyBvZiB0eXBlIGludCwgaXMgZm91bmQgdG8gYmUgaW4gcmFuZ2UgZm9yIGludDhfdCwgeCBpcyB2
YWxpZAorICAgIENoZWNrZWRJbnQ8aW50OF90PiB4KGludDE2X3QoMTAwMCkpOyAvLyAxMDAwIGlz
IG9mIHR5cGUgaW50MTZfdCwgaXMgZm91bmQgbm90IHRvIGJlIGluIHJhbmdlIGZvciBpbnQ4X3Qs
IHggaXMgaW52YWxpZAorICAgIENoZWNrZWRJbnQ8aW50MzJfdD4geCh1aW50MzJfdCgxMjM0NTY3
ODkpKTsgLy8gMzEyMzQ1Njc4OSBpcyBvZiB0eXBlIHVpbnQzMl90LCBpcyBmb3VuZCBub3QgdG8g
YmUgaW4gcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGZvciBpbnQzMl90LCB4IGlzIGludmFsaWQKKyAgKiBcZW5kY29kZQorICAqIEltcGxpY2l0
IGNvbnZlcnNpb24gZnJvbQorICAqIGNoZWNrZWQgaW50ZWdlcnMgdG8gcGxhaW4gaW50ZWdlcnMg
aXMgbm90IGFsbG93ZWQuIEFzIHNob3duIGluIHRoZQorICAqIGFib3ZlIGV4YW1wbGUsIHRvIGdl
dCB0aGUgdmFsdWUgb2YgYSBjaGVja2VkIGludGVnZXIgYXMgYSBub3JtYWwgaW50ZWdlciwgY2Fs
bCB2YWx1ZSgpLgorICAqCisgICogQXJpdGhtZXRpYyBvcGVyYXRpb25zIGJldHdlZW4gY2hlY2tl
ZCBhbmQgcGxhaW4gaW50ZWdlcnMgaXMgYWxsb3dlZDsgdGhlIHJlc3VsdCB0eXBlCisgICogaXMg
dGhlIHR5cGUgb2YgdGhlIGNoZWNrZWQgaW50ZWdlci4KKyAgKgorICAqIFNhZmUgaW50ZWdlcnMg
b2YgZGlmZmVyZW50IHR5cGVzIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGFyaXRobWV0aWMg
ZXhwcmVzc2lvbi4KKyAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDaGVja2VkSW50
Cit7Citwcm90ZWN0ZWQ6CisgICAgVCBtVmFsdWU7CisgICAgVCBtSXNWYWxpZDsgLy8gc3RvcmVk
IGFzIGEgVCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGludGVnZXIgY29udmVyc2lvbnMgd2hlbgor
ICAgICAgICAgICAgICAgIC8vIGV2YWx1YXRpbmcgbmVzdGVkIGFyaXRobWV0aWMgZXhwcmVzc2lv
bnMuCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIENoZWNrZWRJbnQoY29uc3QgVSYg
dmFsdWUsIGJvb2wgaXNWYWxpZCkgOiBtVmFsdWUodmFsdWUpLCBtSXNWYWxpZChpc1ZhbGlkKQor
ICAgIHsKKyAgICAgICAgQ2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90eXBlX21hbnVhbGx5
X3JlY29yZGVkX2luZm88VD4KKyAgICAgICAgICAgIDo6VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0No
ZWNrZWRJbnQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAvKiogQ29uc3RydWN0cyBhIGNoZWNr
ZWQgaW50ZWdlciB3aXRoIGdpdmVuIFxhIHZhbHVlLiBUaGUgY2hlY2tlZCBpbnRlZ2VyIGlzIGlu
aXRpYWxpemVkIGFzIHZhbGlkIG9yIGludmFsaWQKKyAgICAgICogZGVwZW5kaW5nIG9uIHdoZXRo
ZXIgdGhlIFxhIHZhbHVlIGlzIGluIHJhbmdlLgorICAgICAgKgorICAgICAgKiBUaGlzIGNvbnN0
cnVjdG9yIGlzIG5vdCBleHBsaWNpdC4gSW5zdGVhZCwgdGhlIHR5cGUgb2YgaXRzIGFyZ3VtZW50
IGlzIGEgc2VwYXJhdGUgdGVtcGxhdGUgcGFyYW1ldGVyLAorICAgICAgKiBlbnN1cmluZyB0aGF0
IG5vIGNvbnZlcnNpb24gaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGlzIGNvbnN0cnVjdG9yIGlzIGFj
dHVhbGx5IGNhbGxlZC4KKyAgICAgICogQXMgZXhwbGFpbmVkIGluIHRoZSBhYm92ZSBkb2N1bWVu
dGF0aW9uIGZvciBjbGFzcyBDaGVja2VkSW50LCB0aGlzIGNvbnN0cnVjdG9yIGNoZWNrcyB0aGF0
IGl0cyBhcmd1bWVudCBpcworICAgICAgKiB2YWxpZC4KKyAgICAgICovCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBDaGVja2VkSW50KGNvbnN0IFUmIHZhbHVlKQorICAgICAgICA6IG1W
YWx1ZSh2YWx1ZSksCisgICAgICAgICAgbUlzVmFsaWQoQ2hlY2tlZEludF9pbnRlcm5hbDo6aXNf
aW5fcmFuZ2U8VD4odmFsdWUpKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZEludF9pbnRlcm5hbDo6
aW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88VD4KKyAgICAgICAgICAgIDo6VFlQ
RV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQoKTsKKyAgICB9CisKKyAgICAvKiogQ29uc3Ry
dWN0cyBhIHZhbGlkIGNoZWNrZWQgaW50ZWdlciB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWUgKi8K
KyAgICBDaGVja2VkSW50KCkgOiBtSXNWYWxpZCgxKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZElu
dF9pbnRlcm5hbDo6aW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88VD4KKyAgICAg
ICAgICAgIDo6VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQoKTsKKyAgICB9CisKKyAg
ICAvKiogXHJldHVybnMgdGhlIGFjdHVhbCB2YWx1ZSAqLworICAgIFQgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtVmFsdWU7IH0KKworICAgIC8qKiBccmV0dXJucyBQUl9UUlVFIGlmIHRoZSBjaGVj
a2VkIGludGVnZXIgaXMgdmFsaWQsIGkuZS4gaXMgbm90IHRoZSByZXN1bHQKKyAgICAgICogb2Yg
YW4gaW52YWxpZCBvcGVyYXRpb24gb3Igb2YgYW4gb3BlcmF0aW9uIGludm9sdmluZyBhbiBpbnZh
bGlkIGNoZWNrZWQgaW50ZWdlcgorICAgICAgKi8KKyAgICBib29sIHZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbUlzVmFsaWQ7IH0KKworICAgIC8qKiBccmV0dXJucyB0aGUgc3VtLiBDaGVja3MgZm9y
IG92ZXJmbG93LiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBDaGVja2VkSW50
PFU+IG9wZXJhdG9yICsoY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25zdCBDaGVja2VkSW50
PFU+JiByaHMpOworICAgIC8qKiBBZGRzLiBDaGVja3MgZm9yIG92ZXJmbG93LiBccmV0dXJucyBz
ZWxmIHJlZmVyZW5jZSAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENoZWNrZWRJbnQmIG9w
ZXJhdG9yICs9KGNvbnN0IFUgJnJocyk7CisgICAgLyoqIFxyZXR1cm5zIHRoZSBkaWZmZXJlbmNl
LiBDaGVja3MgZm9yIG92ZXJmbG93LiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVu
ZCBDaGVja2VkSW50PFU+IG9wZXJhdG9yIC0oY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25z
dCBDaGVja2VkSW50PFU+ICZyaHMpOworICAgIC8qKiBTdWJzdHJhY3RzLiBDaGVja3MgZm9yIG92
ZXJmbG93LiBccmV0dXJucyBzZWxmIHJlZmVyZW5jZSAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IENoZWNrZWRJbnQmIG9wZXJhdG9yIC09KGNvbnN0IFUgJnJocyk7CisgICAgLyoqIFxyZXR1
cm5zIHRoZSBwcm9kdWN0LiBDaGVja3MgZm9yIG92ZXJmbG93LiAqLworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IGZyaWVuZCBDaGVja2VkSW50PFU+IG9wZXJhdG9yICooY29uc3QgQ2hlY2tlZElu
dDxVPiYgbGhzLCBjb25zdCBDaGVja2VkSW50PFU+ICZyaHMpOworICAgIC8qKiBNdWx0aXBsaWVz
LiBDaGVja3MgZm9yIG92ZXJmbG93LiBccmV0dXJucyBzZWxmIHJlZmVyZW5jZSAqLworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IENoZWNrZWRJbnQmIG9wZXJhdG9yICo9KGNvbnN0IFUgJnJocyk7
CisgICAgLyoqIFxyZXR1cm5zIHRoZSBxdW90aWVudC4gQ2hlY2tzIGZvciBvdmVyZmxvdyBhbmQg
Zm9yIGRpdmlkZS1ieS16ZXJvLiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBD
aGVja2VkSW50PFU+IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25zdCBD
aGVja2VkSW50PFU+ICZyaHMpOworICAgIC8qKiBEaXZpZGVzLiBDaGVja3MgZm9yIG92ZXJmbG93
IGFuZCBmb3IgZGl2aWRlLWJ5LXplcm8uIFxyZXR1cm5zIHNlbGYgcmVmZXJlbmNlICovCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2hlY2tlZEludCYgb3BlcmF0b3IgLz0oY29uc3QgVSAmcmhz
KTsKKworICAgIC8qKiBccmV0dXJucyB0aGUgb3Bwb3NpdGUgdmFsdWUuIENoZWNrcyBmb3Igb3Zl
cmZsb3cuICovCisgICAgQ2hlY2tlZEludCBvcGVyYXRvciAtKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIFQgcmVzdWx0ID0gLXZhbHVlKCk7CisgICAgICAgIC8qIGdpdmUgdGhlIGNvbXBpbGVyIGEg
Z29vZCBjaGFuY2UgdG8gcGVyZm9ybSBSVk8gKi8KKyAgICAgICAgcmV0dXJuIENoZWNrZWRJbnQo
cmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICBtSXNWYWxpZCAmIENoZWNrZWRJbnRfaW50
ZXJuYWw6OmlzX3N1Yl92YWxpZChUKDApLCB2YWx1ZSgpLCByZXN1bHQpKTsKKyAgICB9CisKKyAg
ICAvKiogXHJldHVybnMgdHJ1ZSBpZiB0aGUgbGVmdCBhbmQgcmlnaHQgaGFuZCBzaWRlcyBhcmUg
dmFsaWQgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWUuICovCisgICAgYm9vbCBvcGVyYXRvciA9PShj
b25zdCBDaGVja2VkSW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBib29s
KG1Jc1ZhbGlkICYgb3RoZXIubUlzVmFsaWQgJiBUKHZhbHVlKCkgPT0gb3RoZXIudmFsdWUoKSkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICAvKiogb3BlcmF0b3IhPSBpcyBkaXNhYmxlZC4gSW5k
ZWVkOiAoYSE9Yikgc2hvdWxkIGJlIHRoZSBzYW1lIGFzICEoYT09YikgYnV0IHRoYXQKKyAgICAg
ICogd291bGQgbWVhbiB0aGF0IGlmIGEgb3IgYiBpcyBpbnZhbGlkLCAoYSE9YikgaXMgYWx3YXlz
IHRydWUsIHdoaWNoIGlzIHZlcnkgdHJpY2t5LgorICAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgVSYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Cit9OworCisjZGVmaW5lIENIRUNLRURJTlRfQkFTSUNf
QklOQVJZX09QRVJBVE9SKE5BTUUsIE9QKSAgICAgICAgICAgICAgIFwKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoraW5saW5l
IENoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgT1AoY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25z
dCBDaGVja2VkSW50PFQ+ICZyaHMpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgeCA9IGxocy52YWx1ZSgpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVCB5ID0gcmhzLnZh
bHVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUIHJl
c3VsdCA9IHggT1AgeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIFQgaXNfb3BfdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgID0gQ2hlY2tlZEludF9pbnRlcm5hbDo6aXNfIyNOQU1FIyNfdmFsaWQo
eCwgeSwgcmVzdWx0KTsgIFwKKyAgICAvKiBnaXZlIHRoZSBjb21waWxlciBhIGdvb2QgY2hhbmNl
IHRvIHBlcmZvcm0gUlZPICovICAgICAgXAorICAgIHJldHVybiBDaGVja2VkSW50PFQ+KHJlc3Vs
dCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg
ICAgbGhzLm1Jc1ZhbGlkICYgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAgICAgICByaHMubUlzVmFsaWQgJiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgICAgICAgIGlzX29wX3ZhbGlkKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCit9CisKK0NIRUNLRURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKGFkZCwgKykKK0NIRUNL
RURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKHN1YiwgLSkKK0NIRUNLRURJTlRfQkFTSUNfQklO
QVJZX09QRVJBVE9SKG11bCwgKikKKworLy8gZGl2aXNpb24gY2FuJ3QgYmUgaW1wbGVtZW50ZWQg
YnkgQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1IKKy8vIGJlY2F1c2UgaWYgcmhzID09
IDAsIHdlIGFyZSBub3QgYWxsb3dlZCB0byBldmVuIHRyeSB0byBjb21wdXRlIHRoZSBxdW90aWVu
dC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgQ2hlY2tlZEludDxUPiBvcGVyYXRvciAv
KGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKQorewor
ICAgIFQgeCA9IGxocy52YWx1ZSgpOworICAgIFQgeSA9IHJocy52YWx1ZSgpOworICAgIFQgaXNf
b3BfdmFsaWQgPSBDaGVja2VkSW50X2ludGVybmFsOjppc19kaXZfdmFsaWQoeCwgeSk7CisgICAg
VCByZXN1bHQgPSBpc19vcF92YWxpZCA/ICh4IC8geSkgOiAwOworICAgIC8qIGdpdmUgdGhlIGNv
bXBpbGVyIGEgZ29vZCBjaGFuY2UgdG8gcGVyZm9ybSBSVk8gKi8KKyAgICByZXR1cm4gQ2hlY2tl
ZEludDxUPihyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgbGhzLm1Jc1ZhbGlkICYKKyAg
ICAgICAgICAgICAgICAgICAgICByaHMubUlzVmFsaWQgJgorICAgICAgICAgICAgICAgICAgICAg
IGlzX29wX3ZhbGlkKTsKK30KKworLy8gaW1wbGVtZW50IGNhc3RfdG9fQ2hlY2tlZEludDxUPih4
KSwgbWFraW5nIHN1cmUgdGhhdAorLy8gIC0gaXQgYWxsb3dzIHggdG8gYmUgZWl0aGVyIGEgQ2hl
Y2tlZEludDxUPiBvciBhbnkgaW50ZWdlciB0eXBlIHRoYXQgY2FuIGJlIGNhc3RlZCB0byBUCisv
LyAgLSBpZiB4IGlzIGFscmVhZHkgYSBDaGVja2VkSW50PFQ+LCB3ZSBqdXN0IHJldHVybiBhIHJl
ZmVyZW5jZSB0byBpdCwgaW5zdGVhZCBvZiBjb3B5aW5nIGl0IChvcHRpbWl6YXRpb24pCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgY2FzdF90b19DaGVja2VkSW50
X2ltcGwKK3sKKyAgICB0eXBlZGVmIENoZWNrZWRJbnQ8VD4gcmV0dXJuX3R5cGU7CisgICAgc3Rh
dGljIENoZWNrZWRJbnQ8VD4gcnVuKGNvbnN0IFUmIHUpIHsgcmV0dXJuIHU7IH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgY2FzdF90b19DaGVja2VkSW50X2ltcGw8VCwgQ2hl
Y2tlZEludDxUPiA+Cit7CisgICAgdHlwZWRlZiBjb25zdCBDaGVja2VkSW50PFQ+JiByZXR1cm5f
dHlwZTsKKyAgICBzdGF0aWMgY29uc3QgQ2hlY2tlZEludDxUPiYgcnVuKGNvbnN0IENoZWNrZWRJ
bnQ8VD4mIHUpIHsgcmV0dXJuIHU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+CitpbmxpbmUgdHlwZW5hbWUgY2FzdF90b19DaGVja2VkSW50X2ltcGw8VCwgVT46OnJl
dHVybl90eXBlCitjYXN0X3RvX0NoZWNrZWRJbnQoY29uc3QgVSYgdSkKK3sKKyAgICByZXR1cm4g
Y2FzdF90b19DaGVja2VkSW50X2ltcGw8VCwgVT46OnJ1bih1KTsKK30KKworI2RlZmluZSBDSEVD
S0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoT1AsIENPTVBPVU5EX09QKSBcCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK3RlbXBsYXRlPHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorQ2hlY2tlZEludDxUPiYgQ2hlY2tlZEludDxUPjo6b3BlcmF0b3IgQ09N
UE9VTkRfT1AoY29uc3QgVSAmcmhzKSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqdGhpcyA9ICp0aGlzIE9Q
IGNhc3RfdG9fQ2hlY2tlZEludDxUPihyaHMpOyAgICAgICAgICAgICAgICAgXAorICAgIHJldHVy
biAqdGhpczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAoraW5saW5lIENoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgT1AoY29uc3QgQ2hl
Y2tlZEludDxUPiAmbGhzLCBjb25zdCBVICZyaHMpIFwKK3sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBsaHMg
T1AgY2FzdF90b19DaGVja2VkSW50PFQ+KHJocyk7ICAgICAgICAgICAgICAgICAgICBcCit9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAoraW5saW5lIENoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgT1AoY29uc3QgVSAmIGxo
cywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gY2FzdF90
b19DaGVja2VkSW50PFQ+KGxocykgT1AgcmhzOyAgICAgICAgICAgICAgICAgICAgXAorfQorCitD
SEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoKywgKz0pCitDSEVDS0VESU5U
X0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoKiwgKj0pCitDSEVDS0VESU5UX0NPTlZFTklF
TkNFX0JJTkFSWV9PUEVSQVRPUlMoLSwgLT0pCitDSEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFS
WV9PUEVSQVRPUlMoLywgLz0pCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Citp
bmxpbmUgYm9vbCBvcGVyYXRvciA9PShjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMsIGNvbnN0IFUg
JnJocykKK3sKKyAgICByZXR1cm4gbGhzID09IGNhc3RfdG9fQ2hlY2tlZEludDxUPihyaHMpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgoraW5saW5lIGJvb2wgb3BlcmF0
b3IgPT0oY29uc3QgVSAmIGxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKQoreworICAgIHJl
dHVybiBjYXN0X3RvX0NoZWNrZWRJbnQ8VD4obGhzKSA9PSByaHM7Cit9CisKK30gLy8gZW5kIG5h
bWVzcGFjZSBtb3ppbGxhCisKKyNlbmRpZiAvKiBtb3ppbGxhX0NoZWNrZWRJbnRfaCAqLwpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gNjIyNzMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQ2hlY2tlZEludC5oIgogI2luY2x1ZGUg
IkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCkBAIC03MTcsMTYgKzcxOCwyNCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVJbmRlCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBu
dW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVy
KCktPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxl
bWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRleCwgc3Rh
dGljX2Nhc3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAg
ICAgICAgICAgICAgICBtYXhJbmRleCA9IDA7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigp
LT5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1F
bGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQ6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ib3VuZEVs
ZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsK
LSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlC
dWZmZXIoKS0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gbWF4KG1heEluZGV4
LCBzdGF0aWNfY2FzdDxsb25nPihwW2ldKSk7CisgICAgICAgICAgICBpZiAoIW51bUVsZW1lbnRz
KQorICAgICAgICAgICAgICAgIG1heEluZGV4ID0gMDsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlC
dWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXgo
bWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+KHBbaV0pKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CkBAIC04NDQsMTEgKzg1
MywxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyh1CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm47Ci0KICAg
ICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgIGlmICghdmFs
aWRhdGVSZW5kZXJpbmdTdGF0ZShmaXJzdCArIGNvdW50KSkgeworICAgIG1vemlsbGE6OkNoZWNr
ZWRJbnQ8aW50MzJfdD4gY2hlY2tlZEZpcnN0KGZpcnN0KTsKKyAgICBtb3ppbGxhOjpDaGVja2Vk
SW50PGludDMyX3Q+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgaWYgKCEoY2hlY2tlZEZpcnN0
ICsgY2hlY2tlZENvdW50KS52YWxpZCgpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKGZpcnN0
ICsgY291bnQpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTg4MCw5ICs4ODgsNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNvdW50KQotICAgICAgICBy
ZXR1cm47Ci0KICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQog
ICAgIGxvbmcgbnVtRWxlbWVudHM7CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjMwMSkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTA3LTAxICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGlzc3VlcyBpbiBib3VuZGFyeSBz
aXR1YXRpb25zIGZvciBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMvZHJhd0VsZW1l
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTQ3
MworCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5k
cy1leHBlY3RlZC50eHQ6IFRlc3QgYWdhaW5zdCBvdmVyZmxvdywgc2l6ZS0wIGJ1ZmZlciwgYW5k
IGNvdW50PT0wIHNpdHVhdGlvbnMuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1h
cnJheXMtb3V0LW9mLWJvdW5kcy5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93
ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0OiBEaXR0by4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMuaHRt
bDogRGl0dG8uCisKIDIwMTAtMDctMDEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91
dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MjI3MykKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcsNyBAQCBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhj
b250ZXh0LlRSSUFOR0xFCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xF
UywgMCwgLTEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBB
U1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAtMSwgMCkgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LmRyYXdBcnJh
eXMoY29udGV4dC5UUklBTkdMRVMsIDAsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjog
Tk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMTAw
LCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgorUEFTUyBjb250ZXh0
LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDEwMCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KIAogVGVzdCBidWZmZXIgd2l0aCAzIGZsb2F0
IHZlY3RvcnMKIFBBU1MgY29udGV4dC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGNvbnRleHQuRlJB
TUVCVUZGRVIpIGlzIGNvbnRleHQuRlJBTUVCVUZGRVJfQ09NUExFVEUKQEAgLTE5LDcgKzE5LDEy
IEBAIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEUKIFBBU1MgY29udGV4
dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAtMSkgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LmRyYXdBcnJheXMoY29udGV4
dC5UUklBTkdMRVMsIC0xLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURf
VkFMVUUuCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgMCkg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBBU1MgY29udGV4dC5kcmF3
QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBl
cnJvcjogTk9fRVJST1IuCitQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xF
UywgMTAwLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9O
LgorUEFTUyBjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIDB4ZmZmZmZm
ZmYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KK1BBU1MgY29u
dGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAweGZmZmZmZmZmLCAxKSBnZW5lcmF0
ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitQQVNTIGNvbnRleHQuZHJhd0Fy
cmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZikgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LmRyYXdBcnJh
eXMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIDEpIGdlbmVyYXRlZCBleHBlY3RlZCBH
TCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCitQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250
ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgMHg3ZmZmZmZmZikgZ2VuZXJhdGVkIGV4cGVjdGVk
IEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KIAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWFycmF5
cy1vdXQtb2YtYm91bmRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy5odG1sCShyZXZpc2lvbiA2MjI3MykK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91dC1vZi1ib3Vu
ZHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQCBzaG91bGRHZW5lcmF0ZUdM
RXJyb3IoY29udGV4dCwgY29udGV4dC5JCiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwg
Y29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5H
TEVTLCAwLCAtMSkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklO
VkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIC0xLCAw
KSIpOwogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuTk9fRVJST1IsICJj
b250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIDApIik7Ci1zaG91bGRHZW5l
cmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQuZHJhd0FycmF5
cyhjb250ZXh0LlRSSUFOR0xFUywgMTAwLCAwKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNv
bnRleHQsIGNvbnRleHQuSU5WQUxJRF9PUEVSQVRJT04sICJjb250ZXh0LmRyYXdBcnJheXMoY29u
dGV4dC5UUklBTkdMRVMsIDEwMCwgMCkiKTsKIAogZGVidWcoIiIpCiBkZWJ1ZygiVGVzdCBidWZm
ZXIgd2l0aCAzIGZsb2F0IHZlY3RvcnMiKQpAQCAtNDEsNyArNDEsMTYgQEAgc2hvdWxkR2VuZXJh
dGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSQogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRl
eHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRS
SUFOR0xFUywgMCwgLTEpIik7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4
dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAt
MSwgMCkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9S
LCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAwKSIpOwotc2hvdWxk
R2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuTk9fRVJST1IsICJjb250ZXh0LmRyYXdB
cnJheXMoY29udGV4dC5UUklBTkdMRVMsIDEwMCwgMCkiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJv
cihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OLCAiY29udGV4dC5kcmF3QXJyYXlz
KGNvbnRleHQuVFJJQU5HTEVTLCAxMDAsIDApIik7CisKKy8vIDB4ZmZmZmZmZmYgbmVlZHMgdG8g
Y29udmVydCB0byBhICdsb25nJyBJREwgYXJndW1lbnQgYXMgLTEsIGFzIHBlcgorLy8gV2ViSURM
IDQuMS43LiAgSlMgVG9JbnQzMigweGZmZmZmZmZmKSA9PSAtMSwgd2hpY2ggaXMgdGhlIGZpcnN0
IHN0ZXAKKy8vIG9mIHRoZSBjb252ZXJzaW9uLiAgVGh1cyBJTlZBTElEX1ZBTFVFLgorc2hvdWxk
R2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQu
ZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgMHhmZmZmZmZmZikiKTsKK3Nob3VsZEdl
bmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRy
YXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIDEpIik7CitzaG91bGRHZW5l
cmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3
QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKSIpOworc2hv
dWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9PUEVSQVRJT04sICJj
b250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIDEpIik7Citz
aG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX09QRVJBVElPTiwg
ImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgMHg3ZmZm
ZmZmZikiKTsKIAogZGVidWcoIiIpCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MjI3
MykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9m
LWJvdW5kcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDEwIEBAIFBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkcKIFBBU1MgY29udGV4dC5kcmF3
RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDAp
IGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBBU1MgY29udGV4
dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllU
RSwgLTEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBBU1Mg
Y29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250ZXh0LlVOU0lH
TkVEX0JZVEUsIDEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4K
LVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQu
VU5TSUdORURfQllURSwgNCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4K
K1BBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQu
VU5TSUdORURfQllURSwgNCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09Q
RVJBVElPTi4KK1BBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4
ZmZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdM
IGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0
LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0
ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgorUEFTUyBjb250ZXh0LmRy
YXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05F
RF9CWVRFLCAweDdmZmZmZmZmKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURf
T1BFUkFUSU9OLgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxl
bWVudHMtb3V0LW9mLWJvdW5kcy5odG1sCShyZXZpc2lvbiA2MjI3MykKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0NywxMCBAQCBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4
dCwgY29udGV4dC5JCiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZB
TElEX1ZBTFVFLCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBj
b250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIik7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4
dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5U
UklBTkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgLTEpIik7CiBzaG91bGRHZW5lcmF0
ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3RWxl
bWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDEpIik7
Ci1zaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRl
eHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX0JZ
VEUsIDQpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElE
X09QRVJBVElPTiwgImNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCBj
b250ZXh0LlVOU0lHTkVEX0JZVEUsIDQpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4
dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5U
UklBTkdMRVMsIDB4ZmZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkiKTsKK3Nob3Vs
ZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OLCAiY29u
dGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIGNvbnRleHQu
VU5TSUdORURfQllURSwgMCkiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250
ZXh0LklOVkFMSURfT1BFUkFUSU9OLCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklB
TkdMRVMsIDB4N2ZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwgMHg3ZmZmZmZmZikiKTsK
IAogZGVidWcoIiIpCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60316</attachid>
            <date>2010-07-01 17:00:48 -0700</date>
            <delta_ts>2010-07-02 09:57:21 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>overflow.patch</filename>
            <type>text/plain</type>
            <size>37936</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjMwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDctMDEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaXNz
dWVzIGluIGJvdW5kYXJ5IHNpdHVhdGlvbnMgZm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0FycmF5cy9kcmF3RWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDczCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBDaGVja2Vk
SW50LmguCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQg
Q2hlY2tlZEludC5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NoZWNrZWRJbnQuaDogQWRkZWQg
c3VwcG9ydCBvZiBzYWZlIGludGVnZXIgb3BlcmF0aW9ucy4KKyAgICAgICAgKG1vemlsbGE6OkNo
ZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvOjop
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfdW5zdXBwb3J0ZWRf
dHlwZTo6KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6Oik6CisgICAg
ICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppbnRlZ2VyX3RyYWl0czo6KToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHJhaXRzOjptaW4p
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90cmFpdHM6
Om1heCk6CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjpoYXNfc2lnbl9i
aXQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6YmluYXJ5X2NvbXBs
ZW1lbnQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfaW5fcmFu
Z2UpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfYWRkX3ZhbGlk
KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmlzX3N1Yl92YWxpZCk6
CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppc19tdWxfdmFsaWQpOgor
ICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfZGl2X3ZhbGlkKToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnQ6OkNoZWNrZWRJbnQpOgorICAgICAgICAobW96aWxs
YTo6Q2hlY2tlZEludDo6dmFsdWUpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6dmFs
aWQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6b3BlcmF0b3IgLSk6CisgICAgICAg
IChtb3ppbGxhOjpDaGVja2VkSW50OjpvcGVyYXRvciA9PSk6CisgICAgICAgIChtb3ppbGxhOjpD
aGVja2VkSW50OjpvcGVyYXRvciAhPSk6CisgICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciAvKToK
KyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludF9pbXBsOjpydW4pOgorICAgICAg
ICAobW96aWxsYTo6KToKKyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludCk6Cisg
ICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciA9PSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKTogRml4IGEgYnVnIGFnYWlu
c3QgMC1zaXplIGJ1ZmZlciBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBEZWFsIHdpdGggb3ZlcmZsb3dzIGFuZCBjb3VudD09
MCBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdFbGVtZW50cyk6IERlYWwgd2l0aCBjb3VudD09MCBzaXR1YXRpb24uCisKIDIwMTAtMDctMDEg
IEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYyMjczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksNiArMTQ1OSw3IEBACiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvVWludDE2QXJyYXkuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9VaW50
MTZBcnJheS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DaGVja2VkSW50LmgnLAogICAg
ICAgICAgICAgJ2h0bWwvQ29sbGVjdGlvbkNhY2hlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9D
b2xsZWN0aW9uQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9Db2xsZWN0aW9uVHlwZS5oJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2MjI3MykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjA4LDYgKzI2MDgsNyBAQAogCQk5RkZFM0U3QjExQjU5QzVEMDAz
Nzg3NEUgLyogTWVtb3J5SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUZGRTNFNzkxMUI1OUM1RDAwMzc4NzRFIC8qIE1lbW9yeUluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5RkZFM0VBNTEx
QjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGRkUzRUEzMTFCNUE0MzkwMDM3ODc0RSAvKiBKU01l
bW9yeUluZm8uY3BwICovOyB9OwogCQk5RkZFM0VBNjExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1v
cnlJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmggKi87IH07CisJCUEwNDY2
QTZDMTFERDQyQTgwMDY1RDU3NCAvKiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDQ2NkE2QjExREQ0MkE4MDA2NUQ1NzQgLyogQ2hl
Y2tlZEludC5oICovOyB9OwogCQlBMTM2QTAwQzExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLzsgfTsKIAkJQTEzNkEwMEQxMTM0REJE
MjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTM2QTAwQjExMzREQkQy
MDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLzsgfTsK
IAkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdDODEyMDBGMkE1
Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKQEAgLTgyNjQsNiAr
ODI2NSw3IEBACiAJCTlGRkUzRTdDMTFCNTlDNkUwMDM3ODc0RSAvKiBNZW1vcnlJbmZvLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZW1vcnlJbmZvLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUZGRTNFQTMxMUI1QTQzOTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lbW9yeUluZm8uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyog
SlNNZW1vcnlJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVtb3J5
SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMDQ2NkE2QjExREQ0MkE4MDA2
NUQ1NzQgLyogQ2hlY2tlZEludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
aGVja2VkSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBBMTEzNERC
RDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBC
MTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMDBG
MkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTU3OCw2ICsxMTU4MCw3IEBACiAJCTQ5NDg0RkFFMTAyQ0Yw
MUUwMDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCUEwNDY2QTZCMTFERDQyQTgwMDY1RDU3NCAvKiBDaGVja2VkSW50LmggKi8s
CiAJCQkJNDlFRUNEQ0ExMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyLmNwcCAqLywKIAkJ
CQk0OUVFQ0RDQjEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaCAqLywKIAkJCQk0OUVF
Q0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLApAQCAtMTk2NzgsNiAr
MTk2ODEsNyBAQAogCQkJCUJDNjQ2NDk4MTFEODIzNDkwMDY0NTVCMCAvKiBKU0RPTVN0cmluZ01h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNTYzQjQxMURCM0QxMDAwM0FDMkYwIC8qIEhUTUxF
bGVtZW50U3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTU2NEE1MTFEQzBFNTkwMDNBQzJG
MCAvKiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMDQ2
NkE2QzExREQ0MkE4MDA2NUQ1NzQgLyogQ2hlY2tlZEludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NoZWNrZWRJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NoZWNrZWRJbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2hlY2tlZEludC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyNiBAQAorLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLworLyogdmltOnNldCB0cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVudDog
Ki8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5z
ZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUuCisgKgorICogVGhl
IEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxhIENv
cnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg
YXJlIENvcHlyaWdodCAoQykgMjAwOQorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICogIEJlbm9pdCBKYWNvYiA8
YmphY29iQG1vemlsbGEuY29tPgorICogIEplZmYgTXVpemVsYWFyIDxqbXVpemVsYWFyQG1vemls
bGEuY29tPgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIg
KHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BM
IG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkg
ZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhl
IExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUg
dGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAq
ICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8vIE5lY2Vzc2FyeSBtb2RpZmlj
YXRpb25zIGFyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBDaGVja2VkSW50LmggZmlsZSB0byByZW1v
dmUKKy8vIGRlcGVuZGVuY2llcyBvbiBwcnR5cGVzLgorLy8gQWxzbywgY2hhbmdlIG5hbWVzcGFj
ZSBmcm9tIG1vemlsbGEgdG8gV2ViQ29yZSBmb3IgZWFzaWVyIHVzYWdlLgorCisjaWZuZGVmIG1v
emlsbGFfQ2hlY2tlZEludF9oCisjZGVmaW5lIG1vemlsbGFfQ2hlY2tlZEludF9oCisKKyNpbmNs
dWRlIDxjbGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBDaGVja2Vk
SW50X2ludGVybmFsIHsKKworLyogd2UgZG9uJ3Qgd2FudCB0byB1c2Ugc3RkOjpudW1lcmljX2xp
bWl0cyBoZXJlIGJlY2F1c2UgUFJJbnQuLi4gdHlwZXMgbWF5IG5vdCBzdXBwb3J0IGl0LAorICog
ZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSwgZS5nLiBvbiBjZXJ0YWluIHBsYXRmb3JtIHRoZXkg
dXNlIG5vbnN0YW5kYXJkIGJ1aWx0LWluIHR5cGVzCisgKi8KKworLyoqKiBTdGVwIDE6IG1hbnVh
bGx5IHJlY29yZCBpbmZvcm1hdGlvbiBmb3IgYWxsIHRoZSB0eXBlcyB0aGF0IHdlIHdhbnQgdG8g
c3VwcG9ydAorICoqKi8KKworc3RydWN0IHVuc3VwcG9ydGVkX3R5cGUge307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBpbnRlZ2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbwor
eworICAgIGVudW0geyBpc19zdXBwb3J0ZWQgPSAwIH07CisgICAgdHlwZWRlZiB1bnN1cHBvcnRl
ZF90eXBlIHR3aWNlX2JpZ2dlcl90eXBlOworfTsKKworCisjZGVmaW5lIENIRUNLRURJTlRfUkVH
SVNURVJfU1VQUE9SVEVEX1RZUEUoVCxfdHdpY2VfYmlnZ2VyX3R5cGUpICBcCit0ZW1wbGF0ZTw+
IHN0cnVjdCBpbnRlZ2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPiAgICAgICBcCit7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgZW51bSB7IGlzX3N1cHBvcnRlZCA9IDEgfTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgdHlwZWRlZiBfdHdpY2VfYmlnZ2VyX3R5cGUgdHdpY2VfYmln
Z2VyX3R5cGU7ICAgICAgICAgICAgICBcCisgICAgc3RhdGljIHZvaWQgVFlQRV9OT1RfU1VQUE9S
VEVEX0JZX0NoZWNrZWRJbnQoKSB7fSAgICAgICAgICAgICBcCit9OworCitDSEVDS0VESU5UX1JF
R0lTVEVSX1NVUFBPUlRFRF9UWVBFKGludDhfdCwgICBpbnQxNl90KQorQ0hFQ0tFRElOVF9SRUdJ
U1RFUl9TVVBQT1JURURfVFlQRSh1aW50OF90LCAgdWludDE2X3QpCitDSEVDS0VESU5UX1JFR0lT
VEVSX1NVUFBPUlRFRF9UWVBFKGludDE2X3QsICBpbnQzMl90KQorQ0hFQ0tFRElOVF9SRUdJU1RF
Ul9TVVBQT1JURURfVFlQRSh1aW50MTZfdCwgdWludDMyX3QpCitDSEVDS0VESU5UX1JFR0lTVEVS
X1NVUFBPUlRFRF9UWVBFKGludDMyX3QsICBpbnQ2NF90KQorQ0hFQ0tFRElOVF9SRUdJU1RFUl9T
VVBQT1JURURfVFlQRSh1aW50MzJfdCwgdWludDY0X3QpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NV
UFBPUlRFRF9UWVBFKGludDY0X3QsICB1bnN1cHBvcnRlZF90eXBlKQorQ0hFQ0tFRElOVF9SRUdJ
U1RFUl9TVVBQT1JURURfVFlQRSh1aW50NjRfdCwgdW5zdXBwb3J0ZWRfdHlwZSkKKworCisvKioq
IFN0ZXAgMjogcmVjb3JkIHNvbWUgaW5mbyBhYm91dCBhIGdpdmVuIGludGVnZXIgdHlwZSwKKyAq
KiogICAgICAgICBpbmNsdWRpbmcgd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQsIHdoZXRoZXIgYSB0
d2ljZSBiaWdnZXIgaW50ZWdlciB0eXBlCisgKioqICAgICAgICAgaXMgc3VwcG9ydGVkLCB3aGF0
IHRoYXQgdHdpY2UgYmlnZ2VyIHR5cGUgaXMsIGFuZCBzb21lIHN0dWZmIGFzIGZvdW5kCisgKioq
ICAgICAgICAgaW4gc3RkOjpudW1lcmljX2xpbWl0cyAod2hpY2ggd2UgZG9uJ3QgdXNlIGJlY2F1
c2UgUFJJbnQuLiB0eXBlcyBtYXkKKyAqKiogICAgICAgICBub3Qgc3VwcG9ydCBpdCwgaWYgdGhl
eSBhcmUgZGVmaW5lZCBkaXJlY3RseSBmcm9tIGNvbXBpbGVyIGJ1aWx0LWluIHR5cGVzKS4KKyAq
KiovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBpc191bnN1cHBvcnRlZF90eXBlIHsg
ZW51bSB7IGFuc3dlciA9IDAgfTsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IGlzX3Vuc3VwcG9ydGVk
X3R5cGU8dW5zdXBwb3J0ZWRfdHlwZT4geyBlbnVtIHsgYW5zd2VyID0gMSB9OyB9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgaW50ZWdlcl90cmFpdHMKK3sKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdn
ZXJfdHlwZSB0d2ljZV9iaWdnZXJfdHlwZTsKKworICAgIGVudW0geworICAgICAgICBpc19zdXBw
b3J0ZWQgPSBpbnRlZ2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPjo6aXNfc3VwcG9y
dGVkLAorICAgICAgICB0d2ljZV9iaWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQKKyAgICAgICAgICAg
ID0gaXNfdW5zdXBwb3J0ZWRfdHlwZTwKKyAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGludGVn
ZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZQorICAg
ICAgICAgICAgICA+OjphbnN3ZXIgPyAwIDogMSwKKyAgICAgICAgc2l6ZSA9IHNpemVvZihUKSwK
KyAgICAgICAgcG9zaXRpb25fb2Zfc2lnbl9iaXQgPSBDSEFSX0JJVCAqIHNpemUgLSAxLAorICAg
ICAgICBpc19zaWduZWQgPSAoVCgtMSkgPiBUKDApKSA/IDAgOiAxCisgICAgfTsKKworICAgIHN0
YXRpYyBUIG1pbigpCisgICAgeworICAgICAgICAvLyBiaXR3aXNlIG9wcyBtYXkgcmV0dXJuIGEg
bGFyZ2VyIHR5cGUsIHRoYXQncyB3aHkgd2UgY2FzdCBleHBsaWNpdGx5IHRvIFQKKyAgICAgICAg
cmV0dXJuIGlzX3NpZ25lZCA/IFQoVCgxKSA8PCBwb3NpdGlvbl9vZl9zaWduX2JpdCkgOiBUKDAp
OworICAgIH0KKworICAgIHN0YXRpYyBUIG1heCgpCisgICAgeworICAgICAgICByZXR1cm4gfm1p
bigpOworICAgIH0KK307CisKKy8qKiogU3RlcCAzOiBJbXBsZW1lbnQgdGhlIGFjdHVhbCB2YWxp
ZGl0eSBjaGVja3MgLS0tIGlkZWFzIHRha2VuIGZyb20gSW50ZWdlckxpYiwgY29kZSBkaWZmZXJl
bnQuCisgKioqLworCisvLyBiaXR3aXNlIG9wcyBtYXkgcmV0dXJuIGEgbGFyZ2VyIHR5cGUsIHNv
IGl0J3MgZ29vZCB0byB1c2UgdGhlc2UgaW5saW5lIGhlbHBlcnMgZ3VhcmFudGVlaW5nIHRoYXQK
Ky8vIHRoZSByZXN1bHQgaXMgcmVhbGx5IG9mIHR5cGUgVAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgVCBoYXNfc2lnbl9iaXQoVCB4KQoreworICAgIHJldHVybiB4ID4+IGludGVnZXJf
dHJhaXRzPFQ+Ojpwb3NpdGlvbl9vZl9zaWduX2JpdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFQgYmluYXJ5X2NvbXBsZW1lbnQoVCB4KQoreworICAgIHJldHVybiB+eDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwKKyAgICAgICAgIGJvb2wgaXNfVF9z
aWduZWQgPSBpbnRlZ2VyX3RyYWl0czxUPjo6aXNfc2lnbmVkLAorICAgICAgICAgYm9vbCBpc19V
X3NpZ25lZCA9IGludGVnZXJfdHJhaXRzPFU+Ojppc19zaWduZWQ+CitzdHJ1Y3QgaXNfaW5fcmFu
Z2VfaW1wbCB7fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBp
c19pbl9yYW5nZV9pbXBsPFQsIFUsIHRydWUsIHRydWU+Cit7CisgICAgc3RhdGljIFQgcnVuKFUg
eCkKKyAgICB7CisgICAgICAgIHJldHVybiAoeCA8PSBpbnRlZ2VyX3RyYWl0czxUPjo6bWF4KCkp
ICYKKyAgICAgICAgICAgICAgICh4ID49IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBpc19pbl9y
YW5nZV9pbXBsPFQsIFUsIGZhbHNlLCBmYWxzZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVSB4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHggPD0gaW50ZWdlcl90cmFpdHM8VD46Om1heCgpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgaXNfaW5f
cmFuZ2VfaW1wbDxULCBVLCB0cnVlLCBmYWxzZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVSB4KQor
ICAgIHsKKyAgICAgICAgaWYgKHNpemVvZihUKSA+IHNpemVvZihVKSkKKyAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4geCA8PSBVKGludGVnZXJf
dHJhaXRzPFQ+OjptYXgoKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KK3N0cnVjdCBpc19pbl9yYW5nZV9pbXBsPFQsIFUsIGZhbHNlLCB0cnVlPgorewor
ICAgIHN0YXRpYyBUIHJ1bihVIHgpCisgICAgeworICAgICAgICBpZiAoc2l6ZW9mKFQpID49IHNp
emVvZihVKSkKKyAgICAgICAgICAgIHJldHVybiB4ID49IDA7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJldHVybiB4ID49IDAgJiYgeCA8PSBVKGludGVnZXJfdHJhaXRzPFQ+OjptYXgoKSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFQg
aXNfaW5fcmFuZ2UoVSB4KQoreworICAgIHJldHVybiBpc19pbl9yYW5nZV9pbXBsPFQsIFU+Ojpy
dW4oeCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX2FkZF92YWxpZChU
IHgsIFQgeSwgVCByZXN1bHQpCit7CisgICAgcmV0dXJuIGludGVnZXJfdHJhaXRzPFQ+Ojppc19z
aWduZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkaXRpb24gaXMgdmFsaWQgaWYg
dGhlIHNpZ24gb2YgeCt5IGlzIGVxdWFsIHRvIGVpdGhlciB0aGF0IG9mIHggb3IgdGhhdCBvZiB5
LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmV3YXJlISBUaGVzZSBiaXR3aXNlIG9wZXJh
dGlvbnMgY2FuIHJldHVybiBhIGxhcmdlciBpbnRlZ2VyIHR5cGUsIGlmIFQgd2FzIGEKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNtYWxsIHR5cGUgbGlrZSBpbnQ4LCBzbyB3ZSBleHBsaWNp
dGx5IGNhc3QgdG8gVC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19zaWduX2JpdChiaW5h
cnlfY29tcGxlbWVudChUKChyZXN1bHReeCkgJiAocmVzdWx0XnkpKSkpCisgICAgICAgICAgICAg
ICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeV9jb21wbGVtZW50KHgpID49
IHk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX3N1Yl92YWxpZChUIHgs
IFQgeSwgVCByZXN1bHQpCit7CisgICAgcmV0dXJuIGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWdu
ZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Vic3RyYWN0aW9uIGlzIHZhbGlkIGlm
IGVpdGhlciB4IGFuZCB5IGhhdmUgc2FtZSBzaWduLCBvciB4LXkgYW5kIHggaGF2ZSBzYW1lIHNp
Z24KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19zaWduX2JpdChiaW5hcnlfY29tcGxlbWVu
dChUKChyZXN1bHReeCkgJiAoeF55KSkpKQorICAgICAgICAgICAgICAgICAgICA6CisgICAgICAg
ICAgICAgICAgICAgICAgICB4ID49IHk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsCisgICAg
ICAgICBib29sIGlzX3NpZ25lZCA9ICBpbnRlZ2VyX3RyYWl0czxUPjo6aXNfc2lnbmVkLAorICAg
ICAgICAgYm9vbCB0d2ljZV9iaWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQgPSBpbnRlZ2VyX3RyYWl0
czxUPjo6dHdpY2VfYmlnZ2VyX3R5cGVfaXNfc3VwcG9ydGVkPgorc3RydWN0IGlzX211bF92YWxp
ZF9pbXBsIHt9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGlzX211bF92YWxpZF9p
bXBsPFQsIHRydWUsIHRydWU+Cit7CisgICAgc3RhdGljIFQgcnVuKFQgeCwgVCB5KQorICAgIHsK
KyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpbnRlZ2VyX3RyYWl0czxUPjo6dHdpY2VfYmlnZ2Vy
X3R5cGUgdHdpY2VfYmlnZ2VyX3R5cGU7CisgICAgICAgIHR3aWNlX2JpZ2dlcl90eXBlIHByb2R1
Y3QgPSB0d2ljZV9iaWdnZXJfdHlwZSh4KSAqIHR3aWNlX2JpZ2dlcl90eXBlKHkpOworICAgICAg
ICByZXR1cm4gaXNfaW5fcmFuZ2U8VD4ocHJvZHVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3N0cnVjdCBpc19tdWxfdmFsaWRfaW1wbDxULCBmYWxzZSwgdHJ1ZT4KK3sK
KyAgICBzdGF0aWMgVCBydW4oVCB4LCBUIHkpCisgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIGludGVnZXJfdHJhaXRzPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZSB0d2ljZV9iaWdnZXJfdHlw
ZTsKKyAgICAgICAgdHdpY2VfYmlnZ2VyX3R5cGUgcHJvZHVjdCA9IHR3aWNlX2JpZ2dlcl90eXBl
KHgpICogdHdpY2VfYmlnZ2VyX3R5cGUoeSk7CisgICAgICAgIHJldHVybiBpc19pbl9yYW5nZTxU
Pihwcm9kdWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGlz
X211bF92YWxpZF9pbXBsPFQsIHRydWUsIGZhbHNlPgoreworICAgIHN0YXRpYyBUIHJ1bihUIHgs
IFQgeSkKKyAgICB7CisgICAgICAgIGNvbnN0IFQgbWF4X3ZhbHVlID0gaW50ZWdlcl90cmFpdHM8
VD46Om1heCgpOworICAgICAgICBjb25zdCBUIG1pbl92YWx1ZSA9IGludGVnZXJfdHJhaXRzPFQ+
OjptaW4oKTsKKworICAgICAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkgcmV0dXJuIHRydWU7CisK
KyAgICAgICAgaWYgKHggPiAwKSB7CisgICAgICAgICAgICBpZiAoeSA+IDApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHggPD0gbWF4X3ZhbHVlIC8geTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByZXR1cm4geSA+PSBtaW5fdmFsdWUgLyB4OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHkgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiB4ID49IG1pbl92
YWx1ZSAvIHk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHkgPj0g
bWF4X3ZhbHVlIC8geDsKKyAgICAgICAgfQorICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgaXNfbXVsX3ZhbGlkX2ltcGw8VCwgZmFsc2UsIGZhbHNlPgoreworICAgIHN0
YXRpYyBUIHJ1bihUIHgsIFQgeSkKKyAgICB7CisgICAgICAgIGNvbnN0IFQgbWF4X3ZhbHVlID0g
aW50ZWdlcl90cmFpdHM8VD46Om1heCgpOworICAgICAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB4IDw9IG1heF92YWx1ZSAvIHk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgaXNfbXVsX3ZhbGlkKFQgeCwgVCB5
LCBUIC8qcmVzdWx0IG5vdCB1c2VkKi8pCit7CisgICAgcmV0dXJuIGlzX211bF92YWxpZF9pbXBs
PFQ+OjpydW4oeCwgeSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX2Rp
dl92YWxpZChUIHgsIFQgeSkKK3sKKyAgICByZXR1cm4gaW50ZWdlcl90cmFpdHM8VD46OmlzX3Np
Z25lZCA/CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGluIG1pbmQgdGhhdCBtaW4v
LTEgaXMgaW52YWxpZCBiZWNhdXNlIGFicyhtaW4pPm1heAorICAgICAgICAgICAgICAgICAgICAg
ICAgeSAhPSAwICYmICh4ICE9IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKSB8fCB5ICE9IFQoLTEp
KQorICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICB5ICE9IDA7
Cit9CisKK30gLy8gZW5kIG5hbWVzcGFjZSBDaGVja2VkSW50X2ludGVybmFsCisKKworLyoqKiBT
dGVwIDQ6IE5vdyBkZWZpbmUgdGhlIENoZWNrZWRJbnQgY2xhc3MuCisgKioqLworCisvKiogXGNs
YXNzIENoZWNrZWRJbnQKKyAgKiBcYnJpZWYgSW50ZWdlciB3cmFwcGVyIGNsYXNzIGNoZWNraW5n
IGZvciBpbnRlZ2VyIG92ZXJmbG93IGFuZCBvdGhlciBlcnJvcnMKKyAgKiBccGFyYW0gVCB0aGUg
aW50ZWdlciB0eXBlIHRvIHdyYXAuIENhbiBiZSBhbnkgb2YgaW50OF90LCB1aW50OF90LCBpbnQx
Nl90LCB1aW50MTZfdCwKKyAgKiAgICAgICAgICBpbnQzMl90LCB1aW50MzJfdCwgaW50NjRfdCwg
dWludDY0X3QuCisgICoKKyAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgZ3VhcmRlZCBpbnRlZ2Vy
IGFyaXRobWV0aWMuIERvIGEgY29tcHV0YXRpb24sIHRoZW4gY2hlY2sgdGhhdAorICAqIHZhbGlk
KCkgcmV0dXJucyB0cnVlLCB5b3UgdGhlbiBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgbm8gcHJvYmxl
bSwgc3VjaCBhcyBpbnRlZ2VyIG92ZXJmbG93LAorICAqIGhhcHBlbmVkIGR1cmluZyB0aGlzIGNv
bXB1dGF0aW9uLgorICAqCisgICogVGhlIGFyaXRobWV0aWMgb3BlcmF0b3JzIGluIHRoaXMgY2xh
c3MgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGNyYXNoIHlvdXIgYXBwCisgICogaW4gY2FzZSBvZiBh
IGRpdmlzaW9uIGJ5IHplcm8uCisgICoKKyAgKiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IHlv
dSB3YW50IHRvIGltcGxlbWVudCBhIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgKHgreSkveiwKKyAg
KiB0aGF0IGRvZXNuJ3QgY3Jhc2ggaWYgej09MCwgYW5kIHRoYXQgcmVwb3J0cyBvbiBlcnJvciAo
ZGl2aWRlIGJ5IHplcm8gb3IgaW50ZWdlciBvdmVyZmxvdykuCisgICogWW91IGNvdWxkIGNvZGUg
aXQgYXMgZm9sbG93czoKKyAgICBcY29kZQorICAgIGJvb2wgY29tcHV0ZV94X3BsdXNfeV9vdmVy
X3ooaW50MzJfdCB4LCBpbnQzMl90IHksIGludDMyX3QgeiwgaW50MzJfdCAqcmVzdWx0KQorICAg
IHsKKyAgICAgICAgQ2hlY2tlZEludDxpbnQzMl90PiBjaGVja2VkX3Jlc3VsdCA9IChDaGVja2Vk
SW50PGludDMyX3Q+KHgpICsgeSkgLyB6OworICAgICAgICAqcmVzdWx0ID0gY2hlY2tlZF9yZXN1
bHQudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGNoZWNrZWRfcmVzdWx0LnZhbGlkKCk7CisgICAg
fQorICAgIFxlbmRjb2RlCisgICoKKyAgKiBJbXBsaWNpdCBjb252ZXJzaW9uIGZyb20gcGxhaW4g
aW50ZWdlcnMgdG8gY2hlY2tlZCBpbnRlZ2VycyBpcyBhbGxvd2VkLiBUaGUgcGxhaW4gaW50ZWdl
cgorICAqIGlzIGNoZWNrZWQgdG8gYmUgaW4gcmFuZ2UgYmVmb3JlIGJlaW5nIGNhc3RlZCB0byB0
aGUgZGVzdGluYXRpb24gdHlwZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgKiBs
aW5lcyBhbGwgY29tcGlsZSwgYW5kIHRoZSByZXN1bHRpbmcgQ2hlY2tlZEludHMgYXJlIGNvcnJl
Y3RseSBkZXRlY3RlZCBhcyB2YWxpZCBvciBpbnZhbGlkOgorICAqIFxjb2RlCisgICAgQ2hlY2tl
ZEludDx1aW50OF90PiB4KDEpOyAgIC8vIDEgaXMgb2YgdHlwZSBpbnQsIGlzIGZvdW5kIHRvIGJl
IGluIHJhbmdlIGZvciB1aW50OF90LCB4IGlzIHZhbGlkCisgICAgQ2hlY2tlZEludDx1aW50OF90
PiB4KC0xKTsgIC8vIC0xIGlzIG9mIHR5cGUgaW50LCBpcyBmb3VuZCBub3QgdG8gYmUgaW4gcmFu
Z2UgZm9yIHVpbnQ4X3QsIHggaXMgaW52YWxpZAorICAgIENoZWNrZWRJbnQ8aW50OF90PiB4KC0x
KTsgICAvLyAtMSBpcyBvZiB0eXBlIGludCwgaXMgZm91bmQgdG8gYmUgaW4gcmFuZ2UgZm9yIGlu
dDhfdCwgeCBpcyB2YWxpZAorICAgIENoZWNrZWRJbnQ8aW50OF90PiB4KGludDE2X3QoMTAwMCkp
OyAvLyAxMDAwIGlzIG9mIHR5cGUgaW50MTZfdCwgaXMgZm91bmQgbm90IHRvIGJlIGluIHJhbmdl
IGZvciBpbnQ4X3QsIHggaXMgaW52YWxpZAorICAgIENoZWNrZWRJbnQ8aW50MzJfdD4geCh1aW50
MzJfdCgxMjM0NTY3ODkpKTsgLy8gMzEyMzQ1Njc4OSBpcyBvZiB0eXBlIHVpbnQzMl90LCBpcyBm
b3VuZCBub3QgdG8gYmUgaW4gcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGZvciBpbnQzMl90LCB4IGlzIGludmFsaWQKKyAgKiBcZW5kY29kZQor
ICAqIEltcGxpY2l0IGNvbnZlcnNpb24gZnJvbQorICAqIGNoZWNrZWQgaW50ZWdlcnMgdG8gcGxh
aW4gaW50ZWdlcnMgaXMgbm90IGFsbG93ZWQuIEFzIHNob3duIGluIHRoZQorICAqIGFib3ZlIGV4
YW1wbGUsIHRvIGdldCB0aGUgdmFsdWUgb2YgYSBjaGVja2VkIGludGVnZXIgYXMgYSBub3JtYWwg
aW50ZWdlciwgY2FsbCB2YWx1ZSgpLgorICAqCisgICogQXJpdGhtZXRpYyBvcGVyYXRpb25zIGJl
dHdlZW4gY2hlY2tlZCBhbmQgcGxhaW4gaW50ZWdlcnMgaXMgYWxsb3dlZDsgdGhlIHJlc3VsdCB0
eXBlCisgICogaXMgdGhlIHR5cGUgb2YgdGhlIGNoZWNrZWQgaW50ZWdlci4KKyAgKgorICAqIFNh
ZmUgaW50ZWdlcnMgb2YgZGlmZmVyZW50IHR5cGVzIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBzYW1l
IGFyaXRobWV0aWMgZXhwcmVzc2lvbi4KKyAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBDaGVja2VkSW50Cit7Citwcm90ZWN0ZWQ6CisgICAgVCBtVmFsdWU7CisgICAgVCBtSXNWYWxp
ZDsgLy8gc3RvcmVkIGFzIGEgVCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGludGVnZXIgY29udmVy
c2lvbnMgd2hlbgorICAgICAgICAgICAgICAgIC8vIGV2YWx1YXRpbmcgbmVzdGVkIGFyaXRobWV0
aWMgZXhwcmVzc2lvbnMuCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIENoZWNrZWRJ
bnQoY29uc3QgVSYgdmFsdWUsIGJvb2wgaXNWYWxpZCkgOiBtVmFsdWUodmFsdWUpLCBtSXNWYWxp
ZChpc1ZhbGlkKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90
eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88VD4KKyAgICAgICAgICAgIDo6VFlQRV9OT1RfU1VQ
UE9SVEVEX0JZX0NoZWNrZWRJbnQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAvKiogQ29uc3Ry
dWN0cyBhIGNoZWNrZWQgaW50ZWdlciB3aXRoIGdpdmVuIFxhIHZhbHVlLiBUaGUgY2hlY2tlZCBp
bnRlZ2VyIGlzIGluaXRpYWxpemVkIGFzIHZhbGlkIG9yIGludmFsaWQKKyAgICAgICogZGVwZW5k
aW5nIG9uIHdoZXRoZXIgdGhlIFxhIHZhbHVlIGlzIGluIHJhbmdlLgorICAgICAgKgorICAgICAg
KiBUaGlzIGNvbnN0cnVjdG9yIGlzIG5vdCBleHBsaWNpdC4gSW5zdGVhZCwgdGhlIHR5cGUgb2Yg
aXRzIGFyZ3VtZW50IGlzIGEgc2VwYXJhdGUgdGVtcGxhdGUgcGFyYW1ldGVyLAorICAgICAgKiBl
bnN1cmluZyB0aGF0IG5vIGNvbnZlcnNpb24gaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGlzIGNvbnN0
cnVjdG9yIGlzIGFjdHVhbGx5IGNhbGxlZC4KKyAgICAgICogQXMgZXhwbGFpbmVkIGluIHRoZSBh
Ym92ZSBkb2N1bWVudGF0aW9uIGZvciBjbGFzcyBDaGVja2VkSW50LCB0aGlzIGNvbnN0cnVjdG9y
IGNoZWNrcyB0aGF0IGl0cyBhcmd1bWVudCBpcworICAgICAgKiB2YWxpZC4KKyAgICAgICovCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBDaGVja2VkSW50KGNvbnN0IFUmIHZhbHVlKQor
ICAgICAgICA6IG1WYWx1ZSh2YWx1ZSksCisgICAgICAgICAgbUlzVmFsaWQoQ2hlY2tlZEludF9p
bnRlcm5hbDo6aXNfaW5fcmFuZ2U8VD4odmFsdWUpKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZElu
dF9pbnRlcm5hbDo6aW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88VD4KKyAgICAg
ICAgICAgIDo6VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQoKTsKKyAgICB9CisKKyAg
ICAvKiogQ29uc3RydWN0cyBhIHZhbGlkIGNoZWNrZWQgaW50ZWdlciB3aXRoIHVuaW5pdGlhbGl6
ZWQgdmFsdWUgKi8KKyAgICBDaGVja2VkSW50KCkgOiBtSXNWYWxpZCgxKQorICAgIHsKKyAgICAg
ICAgQ2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2lu
Zm88VD4KKyAgICAgICAgICAgIDo6VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQoKTsK
KyAgICB9CisKKyAgICAvKiogXHJldHVybnMgdGhlIGFjdHVhbCB2YWx1ZSAqLworICAgIFQgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtVmFsdWU7IH0KKworICAgIC8qKiBccmV0dXJucyBQUl9UUlVF
IGlmIHRoZSBjaGVja2VkIGludGVnZXIgaXMgdmFsaWQsIGkuZS4gaXMgbm90IHRoZSByZXN1bHQK
KyAgICAgICogb2YgYW4gaW52YWxpZCBvcGVyYXRpb24gb3Igb2YgYW4gb3BlcmF0aW9uIGludm9s
dmluZyBhbiBpbnZhbGlkIGNoZWNrZWQgaW50ZWdlcgorICAgICAgKi8KKyAgICBib29sIHZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbUlzVmFsaWQ7IH0KKworICAgIC8qKiBccmV0dXJucyB0aGUgc3Vt
LiBDaGVja3MgZm9yIG92ZXJmbG93LiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVu
ZCBDaGVja2VkSW50PFU+IG9wZXJhdG9yICsoY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25z
dCBDaGVja2VkSW50PFU+JiByaHMpOworICAgIC8qKiBBZGRzLiBDaGVja3MgZm9yIG92ZXJmbG93
LiBccmV0dXJucyBzZWxmIHJlZmVyZW5jZSAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENo
ZWNrZWRJbnQmIG9wZXJhdG9yICs9KGNvbnN0IFUgJnJocyk7CisgICAgLyoqIFxyZXR1cm5zIHRo
ZSBkaWZmZXJlbmNlLiBDaGVja3MgZm9yIG92ZXJmbG93LiAqLworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IGZyaWVuZCBDaGVja2VkSW50PFU+IG9wZXJhdG9yIC0oY29uc3QgQ2hlY2tlZEludDxV
PiYgbGhzLCBjb25zdCBDaGVja2VkSW50PFU+ICZyaHMpOworICAgIC8qKiBTdWJzdHJhY3RzLiBD
aGVja3MgZm9yIG92ZXJmbG93LiBccmV0dXJucyBzZWxmIHJlZmVyZW5jZSAqLworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IENoZWNrZWRJbnQmIG9wZXJhdG9yIC09KGNvbnN0IFUgJnJocyk7Cisg
ICAgLyoqIFxyZXR1cm5zIHRoZSBwcm9kdWN0LiBDaGVja3MgZm9yIG92ZXJmbG93LiAqLworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBDaGVja2VkSW50PFU+IG9wZXJhdG9yICooY29u
c3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25zdCBDaGVja2VkSW50PFU+ICZyaHMpOworICAgIC8q
KiBNdWx0aXBsaWVzLiBDaGVja3MgZm9yIG92ZXJmbG93LiBccmV0dXJucyBzZWxmIHJlZmVyZW5j
ZSAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENoZWNrZWRJbnQmIG9wZXJhdG9yICo9KGNv
bnN0IFUgJnJocyk7CisgICAgLyoqIFxyZXR1cm5zIHRoZSBxdW90aWVudC4gQ2hlY2tzIGZvciBv
dmVyZmxvdyBhbmQgZm9yIGRpdmlkZS1ieS16ZXJvLiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IGZyaWVuZCBDaGVja2VkSW50PFU+IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tlZEludDxVPiYg
bGhzLCBjb25zdCBDaGVja2VkSW50PFU+ICZyaHMpOworICAgIC8qKiBEaXZpZGVzLiBDaGVja3Mg
Zm9yIG92ZXJmbG93IGFuZCBmb3IgZGl2aWRlLWJ5LXplcm8uIFxyZXR1cm5zIHNlbGYgcmVmZXJl
bmNlICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2hlY2tlZEludCYgb3BlcmF0b3IgLz0o
Y29uc3QgVSAmcmhzKTsKKworICAgIC8qKiBccmV0dXJucyB0aGUgb3Bwb3NpdGUgdmFsdWUuIENo
ZWNrcyBmb3Igb3ZlcmZsb3cuICovCisgICAgQ2hlY2tlZEludCBvcGVyYXRvciAtKCkgY29uc3QK
KyAgICB7CisgICAgICAgIFQgcmVzdWx0ID0gLXZhbHVlKCk7CisgICAgICAgIC8qIGdpdmUgdGhl
IGNvbXBpbGVyIGEgZ29vZCBjaGFuY2UgdG8gcGVyZm9ybSBSVk8gKi8KKyAgICAgICAgcmV0dXJu
IENoZWNrZWRJbnQocmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICBtSXNWYWxpZCAmIENo
ZWNrZWRJbnRfaW50ZXJuYWw6OmlzX3N1Yl92YWxpZChUKDApLCB2YWx1ZSgpLCByZXN1bHQpKTsK
KyAgICB9CisKKyAgICAvKiogXHJldHVybnMgdHJ1ZSBpZiB0aGUgbGVmdCBhbmQgcmlnaHQgaGFu
ZCBzaWRlcyBhcmUgdmFsaWQgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWUuICovCisgICAgYm9vbCBv
cGVyYXRvciA9PShjb25zdCBDaGVja2VkSW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBib29sKG1Jc1ZhbGlkICYgb3RoZXIubUlzVmFsaWQgJiBUKHZhbHVlKCkgPT0gb3Ro
ZXIudmFsdWUoKSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvKiogb3BlcmF0b3IhPSBpcyBk
aXNhYmxlZC4gSW5kZWVkOiAoYSE9Yikgc2hvdWxkIGJlIHRoZSBzYW1lIGFzICEoYT09YikgYnV0
IHRoYXQKKyAgICAgICogd291bGQgbWVhbiB0aGF0IGlmIGEgb3IgYiBpcyBpbnZhbGlkLCAoYSE9
YikgaXMgYWx3YXlzIHRydWUsIHdoaWNoIGlzIHZlcnkgdHJpY2t5LgorICAgICAgKi8KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgVSYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Cit9OworCisjZGVmaW5lIENIRUNL
RURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKE5BTUUsIE9QKSAgICAgICAgICAgICAgIFwKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAoraW5saW5lIENoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgT1AoY29uc3QgQ2hlY2tlZEludDxU
PiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpIFwKK3sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgeCA9IGxo
cy52YWx1ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
VCB5ID0gcmhzLnZhbHVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBUIHJlc3VsdCA9IHggT1AgeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIFQgaXNfb3BfdmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgID0gQ2hlY2tlZEludF9pbnRlcm5hbDo6aXNfIyNO
QU1FIyNfdmFsaWQoeCwgeSwgcmVzdWx0KTsgIFwKKyAgICAvKiBnaXZlIHRoZSBjb21waWxlciBh
IGdvb2QgY2hhbmNlIHRvIHBlcmZvcm0gUlZPICovICAgICAgXAorICAgIHJldHVybiBDaGVja2Vk
SW50PFQ+KHJlc3VsdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgICAgICAgbGhzLm1Jc1ZhbGlkICYgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICAgICAgICByaHMubUlzVmFsaWQgJiAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIGlzX29wX3ZhbGlkKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCit9CisKK0NIRUNLRURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKGFk
ZCwgKykKK0NIRUNLRURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKHN1YiwgLSkKK0NIRUNLRURJ
TlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKG11bCwgKikKKworLy8gZGl2aXNpb24gY2FuJ3QgYmUg
aW1wbGVtZW50ZWQgYnkgQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1IKKy8vIGJlY2F1
c2UgaWYgcmhzID09IDAsIHdlIGFyZSBub3QgYWxsb3dlZCB0byBldmVuIHRyeSB0byBjb21wdXRl
IHRoZSBxdW90aWVudC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgQ2hlY2tlZEludDxU
PiBvcGVyYXRvciAvKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxU
PiAmcmhzKQoreworICAgIFQgeCA9IGxocy52YWx1ZSgpOworICAgIFQgeSA9IHJocy52YWx1ZSgp
OworICAgIFQgaXNfb3BfdmFsaWQgPSBDaGVja2VkSW50X2ludGVybmFsOjppc19kaXZfdmFsaWQo
eCwgeSk7CisgICAgVCByZXN1bHQgPSBpc19vcF92YWxpZCA/ICh4IC8geSkgOiAwOworICAgIC8q
IGdpdmUgdGhlIGNvbXBpbGVyIGEgZ29vZCBjaGFuY2UgdG8gcGVyZm9ybSBSVk8gKi8KKyAgICBy
ZXR1cm4gQ2hlY2tlZEludDxUPihyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgbGhzLm1J
c1ZhbGlkICYKKyAgICAgICAgICAgICAgICAgICAgICByaHMubUlzVmFsaWQgJgorICAgICAgICAg
ICAgICAgICAgICAgIGlzX29wX3ZhbGlkKTsKK30KKworLy8gaW1wbGVtZW50IGNhc3RfdG9fQ2hl
Y2tlZEludDxUPih4KSwgbWFraW5nIHN1cmUgdGhhdAorLy8gIC0gaXQgYWxsb3dzIHggdG8gYmUg
ZWl0aGVyIGEgQ2hlY2tlZEludDxUPiBvciBhbnkgaW50ZWdlciB0eXBlIHRoYXQgY2FuIGJlIGNh
c3RlZCB0byBUCisvLyAgLSBpZiB4IGlzIGFscmVhZHkgYSBDaGVja2VkSW50PFQ+LCB3ZSBqdXN0
IHJldHVybiBhIHJlZmVyZW5jZSB0byBpdCwgaW5zdGVhZCBvZiBjb3B5aW5nIGl0IChvcHRpbWl6
YXRpb24pCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgY2FzdF90
b19DaGVja2VkSW50X2ltcGwKK3sKKyAgICB0eXBlZGVmIENoZWNrZWRJbnQ8VD4gcmV0dXJuX3R5
cGU7CisgICAgc3RhdGljIENoZWNrZWRJbnQ8VD4gcnVuKGNvbnN0IFUmIHUpIHsgcmV0dXJuIHU7
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgY2FzdF90b19DaGVja2VkSW50
X2ltcGw8VCwgQ2hlY2tlZEludDxUPiA+Cit7CisgICAgdHlwZWRlZiBjb25zdCBDaGVja2VkSW50
PFQ+JiByZXR1cm5fdHlwZTsKKyAgICBzdGF0aWMgY29uc3QgQ2hlY2tlZEludDxUPiYgcnVuKGNv
bnN0IENoZWNrZWRJbnQ8VD4mIHUpIHsgcmV0dXJuIHU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+CitpbmxpbmUgdHlwZW5hbWUgY2FzdF90b19DaGVja2VkSW50X2lt
cGw8VCwgVT46OnJldHVybl90eXBlCitjYXN0X3RvX0NoZWNrZWRJbnQoY29uc3QgVSYgdSkKK3sK
KyAgICByZXR1cm4gY2FzdF90b19DaGVja2VkSW50X2ltcGw8VCwgVT46OnJ1bih1KTsKK30KKwor
I2RlZmluZSBDSEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoT1AsIENPTVBP
VU5EX09QKSBcCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK3RlbXBsYXRlPHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorQ2hlY2tlZEludDxUPiYgQ2hlY2tlZEludDxUPjo6
b3BlcmF0b3IgQ09NUE9VTkRfT1AoY29uc3QgVSAmcmhzKSAgICBcCit7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqdGhp
cyA9ICp0aGlzIE9QIGNhc3RfdG9fQ2hlY2tlZEludDxUPihyaHMpOyAgICAgICAgICAgICAgICAg
XAorICAgIHJldHVybiAqdGhpczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAoraW5saW5lIENoZWNrZWRJbnQ8VD4gb3BlcmF0b3Ig
T1AoY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBVICZyaHMpIFwKK3sgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJldHVybiBsaHMgT1AgY2FzdF90b19DaGVja2VkSW50PFQ+KHJocyk7ICAgICAgICAgICAgICAg
ICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAoraW5saW5lIENoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgT1Ao
Y29uc3QgVSAmIGxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKSBcCit7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBy
ZXR1cm4gY2FzdF90b19DaGVja2VkSW50PFQ+KGxocykgT1AgcmhzOyAgICAgICAgICAgICAgICAg
ICAgXAorfQorCitDSEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoKywgKz0p
CitDSEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoKiwgKj0pCitDSEVDS0VE
SU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoLSwgLT0pCitDSEVDS0VESU5UX0NPTlZF
TklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoLywgLz0pCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+CitpbmxpbmUgYm9vbCBvcGVyYXRvciA9PShjb25zdCBDaGVja2VkSW50PFQ+ICZs
aHMsIGNvbnN0IFUgJnJocykKK3sKKyAgICByZXR1cm4gbGhzID09IGNhc3RfdG9fQ2hlY2tlZElu
dDxUPihyaHMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgoraW5saW5l
IGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgVSAmIGxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhz
KQoreworICAgIHJldHVybiBjYXN0X3RvX0NoZWNrZWRJbnQ8VD4obGhzKSA9PSByaHM7Cit9CisK
K30gLy8gZW5kIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvKiBtb3ppbGxhX0NoZWNrZWRJ
bnRfaCAqLwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gNjIyNzMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQ2hlY2tlZEludC5o
IgogI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAj
aW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC03MTcsMTYgKzcxOCwyNCBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRlCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVM
ZW5ndGgoKTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVu
dEFycmF5QnVmZmVyKCktPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heCht
YXhJbmRleCwgc3RhdGljX2Nhc3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAgaWYgKCFudW1F
bGVtZW50cykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IDA7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRB
cnJheUJ1ZmZlcigpLT5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgICAgICBtYXhJbmRleCA9
IG1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlQ6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gc2l6ZW9mKHVuc2ln
bmVkIHNob3J0KTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5l
bGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0g
bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxsb25nPihwW2ldKSk7CisgICAgICAgICAgICBpZiAo
IW51bUVsZW1lbnRzKQorICAgICAgICAgICAgICAgIG1heEluZGV4ID0gMDsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5l
bGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgbWF4
SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+KHBbaV0pKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CkBA
IC04NDQsMTEgKzg1MywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5
cyh1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNvdW50KQotICAgICAgICBy
ZXR1cm47Ci0KICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQot
ICAgIGlmICghdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShmaXJzdCArIGNvdW50KSkgeworICAgIENo
ZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZEZpcnN0KGZpcnN0KTsKKyAgICBDaGVja2VkSW50PGlu
dDMyX3Q+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgQ2hlY2tlZEludDxpbnQzMl90PiBjaGVj
a2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tlZENvdW50OworICAgIGlmICghY2hlY2tlZFN1
bS52YWxpZCgpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKGNoZWNrZWRTdW0udmFsdWUoKSkp
IHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODgwLDkg
Kzg4OSw2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCiAgICAgbG9uZyBu
dW1FbGVtZW50czsKICAgICAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMzAxKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMDEg
IFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaXNzdWVzIGluIGJvdW5kYXJ5IHNpdHVhdGlvbnMg
Zm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cy9kcmF3RWxlbWVudHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDczCisKKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWFycmF5cy1vdXQtb2YtYm91bmRzLWV4cGVjdGVk
LnR4dDogVGVzdCBhZ2FpbnN0IG92ZXJmbG93LCBzaXplLTAgYnVmZmVyLCBhbmQgY291bnQ9PTAg
c2l0dWF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWFycmF5cy1vdXQt
b2YtYm91bmRzLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2RyYXct
ZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy5odG1sOiBEaXR0by4K
KwogMjAxMC0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5k
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjczKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTcsNyArNyw3IEBAIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJ
QU5HTEUKIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAtMSkg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0
LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIC0xLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0
LlRSSUFOR0xFUywgMCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4K
LVBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAsIDApIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCitQQVNTIGNvbnRleHQuZHJhd0FycmF5
cyhjb250ZXh0LlRSSUFOR0xFUywgMTAwLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6
IElOVkFMSURfT1BFUkFUSU9OLgogCiBUZXN0IGJ1ZmZlciB3aXRoIDMgZmxvYXQgdmVjdG9ycwog
UEFTUyBjb250ZXh0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoY29udGV4dC5GUkFNRUJVRkZFUikg
aXMgY29udGV4dC5GUkFNRUJVRkZFUl9DT01QTEVURQpAQCAtMTksNyArMTksMTIgQEAgUEFTUyBj
b250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRQogUEFTUyBjb250ZXh0LmRyYXdBcnJh
eXMoY29udGV4dC5UUklBTkdMRVMsIDAsIC0xKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6
IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xF
UywgLTEsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KIFBB
U1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAwKSBnZW5lcmF0ZWQg
ZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdBcnJheXMoY29u
dGV4dC5UUklBTkdMRVMsIDEwMCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19F
UlJPUi4KK1BBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAsIDAp
IGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCitQQVNTIGNv
bnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgMHhmZmZmZmZmZikgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LmRyYXdB
cnJheXMoY29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIDEpIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KK1BBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRl
eHQuVFJJQU5HTEVTLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKSBnZW5lcmF0ZWQgZXhwZWN0ZWQg
R0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0
LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJ
TlZBTElEX09QRVJBVElPTi4KK1BBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5H
TEVTLCAweDdmZmZmZmZmLCAweDdmZmZmZmZmKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6
IElOVkFMSURfT1BFUkFUSU9OLgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91dC1vZi1i
b3VuZHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9k
cmF3LWFycmF5cy1vdXQtb2YtYm91bmRzLmh0bWwJKHJldmlzaW9uIDYyMjczKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250
ZXh0LCBjb250ZXh0LkkKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklO
VkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIC0x
KSIpOwogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxV
RSwgImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIDApIik7CiBzaG91
bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQuZHJh
d0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgMCkiKTsKLXNob3VsZEdlbmVyYXRlR0xFcnJv
cihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQu
VFJJQU5HTEVTLCAxMDAsIDApIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29u
dGV4dC5JTlZBTElEX09QRVJBVElPTiwgImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFO
R0xFUywgMTAwLCAwKSIpOwogCiBkZWJ1ZygiIikKIGRlYnVnKCJUZXN0IGJ1ZmZlciB3aXRoIDMg
ZmxvYXQgdmVjdG9ycyIpCkBAIC00MSw3ICs0MSwxNiBAQCBzaG91bGRHZW5lcmF0ZUdMRXJyb3Io
Y29udGV4dCwgY29udGV4dC5JCiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4
dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAw
LCAtMSkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURf
VkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIC0xLCAwKSIpOwog
c2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuTk9fRVJST1IsICJjb250ZXh0
LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIDApIik7Ci1zaG91bGRHZW5lcmF0ZUdM
RXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQuZHJhd0FycmF5cyhjb250
ZXh0LlRSSUFOR0xFUywgMTAwLCAwKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQs
IGNvbnRleHQuSU5WQUxJRF9PUEVSQVRJT04sICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5U
UklBTkdMRVMsIDEwMCwgMCkiKTsKKworLy8gMHhmZmZmZmZmZiBuZWVkcyB0byBjb252ZXJ0IHRv
IGEgJ2xvbmcnIElETCBhcmd1bWVudCBhcyAtMSwgYXMgcGVyCisvLyBXZWJJREwgNC4xLjcuICBK
UyBUb0ludDMyKDB4ZmZmZmZmZmYpID09IC0xLCB3aGljaCBpcyB0aGUgZmlyc3Qgc3RlcAorLy8g
b2YgdGhlIGNvbnZlcnNpb24uICBUaHVzIElOVkFMSURfVkFMVUUuCitzaG91bGRHZW5lcmF0ZUdM
RXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJyYXlz
KGNvbnRleHQuVFJJQU5HTEVTLCAwLCAweGZmZmZmZmZmKSIpOworc2hvdWxkR2VuZXJhdGVHTEVy
cm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQuZHJhd0FycmF5cyhj
b250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZmZiwgMSkiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJv
cihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29u
dGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpIik7CitzaG91bGRHZW5lcmF0
ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX09QRVJBVElPTiwgImNvbnRleHQuZHJh
d0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgMSkiKTsKK3Nob3VsZEdlbmVy
YXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OLCAiY29udGV4dC5k
cmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCAweDdmZmZmZmZmKSIpOwog
CiBkZWJ1ZygiIikKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxl
bWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjczKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsMTAgQEAgUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFORwogUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhj
b250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJhdGVk
IGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LmRyYXdFbGVt
ZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LmRy
YXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwg
MSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBjb250
ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9C
WVRFLCA0KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgorUEFTUyBjb250
ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9C
WVRFLCA0KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgor
UEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZmZiwg
Y29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElO
VkFMSURfVkFMVUUuCitQQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVT
LCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3Rl
ZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCitQQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRz
KGNvbnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDB4
N2ZmZmZmZmYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04u
CiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQt
b2YtYm91bmRzLmh0bWwJKHJldmlzaW9uIDYyMjczKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDEwIEBAIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0
LkkKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUs
ICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5T
SUdORURfQllURSwgMCkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0
LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywg
MCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihj
b250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250
ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMSkiKTsKLXNob3VsZEdl
bmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5kcmF3RWxl
bWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgNCkiKTsK
K3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFUSU9O
LCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQuVU5T
SUdORURfQllURSwgNCkiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0
LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywg
MHhmZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSIpOworc2hvdWxkR2VuZXJhdGVH
TEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9PUEVSQVRJT04sICJjb250ZXh0LmRyYXdF
bGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9C
WVRFLCAwKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJ
RF9PUEVSQVRJT04sICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3
ZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAweDdmZmZmZmZmKSIpOwogCiBkZWJ1Zygi
IikKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="47730"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="47731"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60373</attachid>
            <date>2010-07-02 09:57:21 -0700</date>
            <delta_ts>2010-07-02 11:18:26 -0700</delta_ts>
            <desc>revised patch: changed define to CheckedInt_h</desc>
            <filename>overflow.patch</filename>
            <type>text/plain</type>
            <size>37961</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjMwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDctMDEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaXNz
dWVzIGluIGJvdW5kYXJ5IHNpdHVhdGlvbnMgZm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0FycmF5cy9kcmF3RWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDczCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBDaGVja2Vk
SW50LmguCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQg
Q2hlY2tlZEludC5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NoZWNrZWRJbnQuaDogQWRkZWQg
c3VwcG9ydCBvZiBzYWZlIGludGVnZXIgb3BlcmF0aW9ucy4KKyAgICAgICAgKG1vemlsbGE6OkNo
ZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvOjop
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfdW5zdXBwb3J0ZWRf
dHlwZTo6KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6Oik6CisgICAg
ICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppbnRlZ2VyX3RyYWl0czo6KToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHJhaXRzOjptaW4p
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90cmFpdHM6
Om1heCk6CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjpoYXNfc2lnbl9i
aXQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6YmluYXJ5X2NvbXBs
ZW1lbnQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfaW5fcmFu
Z2UpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfYWRkX3ZhbGlk
KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmlzX3N1Yl92YWxpZCk6
CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppc19tdWxfdmFsaWQpOgor
ICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfZGl2X3ZhbGlkKToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnQ6OkNoZWNrZWRJbnQpOgorICAgICAgICAobW96aWxs
YTo6Q2hlY2tlZEludDo6dmFsdWUpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6dmFs
aWQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6b3BlcmF0b3IgLSk6CisgICAgICAg
IChtb3ppbGxhOjpDaGVja2VkSW50OjpvcGVyYXRvciA9PSk6CisgICAgICAgIChtb3ppbGxhOjpD
aGVja2VkSW50OjpvcGVyYXRvciAhPSk6CisgICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciAvKToK
KyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludF9pbXBsOjpydW4pOgorICAgICAg
ICAobW96aWxsYTo6KToKKyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludCk6Cisg
ICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciA9PSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKTogRml4IGEgYnVnIGFnYWlu
c3QgMC1zaXplIGJ1ZmZlciBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBEZWFsIHdpdGggb3ZlcmZsb3dzIGFuZCBjb3VudD09
MCBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdFbGVtZW50cyk6IERlYWwgd2l0aCBjb3VudD09MCBzaXR1YXRpb24uCisKIDIwMTAtMDctMDEg
IEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYyMjczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksNiArMTQ1OSw3IEBACiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvVWludDE2QXJyYXkuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9VaW50
MTZBcnJheS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DaGVja2VkSW50LmgnLAogICAg
ICAgICAgICAgJ2h0bWwvQ29sbGVjdGlvbkNhY2hlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9D
b2xsZWN0aW9uQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9Db2xsZWN0aW9uVHlwZS5oJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2MjI3MykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjA4LDYgKzI2MDgsNyBAQAogCQk5RkZFM0U3QjExQjU5QzVEMDAz
Nzg3NEUgLyogTWVtb3J5SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUZGRTNFNzkxMUI1OUM1RDAwMzc4NzRFIC8qIE1lbW9yeUluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5RkZFM0VBNTEx
QjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGRkUzRUEzMTFCNUE0MzkwMDM3ODc0RSAvKiBKU01l
bW9yeUluZm8uY3BwICovOyB9OwogCQk5RkZFM0VBNjExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1v
cnlJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyogSlNNZW1vcnlJbmZvLmggKi87IH07CisJCUEwNDY2
QTZDMTFERDQyQTgwMDY1RDU3NCAvKiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMDQ2NkE2QjExREQ0MkE4MDA2NUQ1NzQgLyogQ2hl
Y2tlZEludC5oICovOyB9OwogCQlBMTM2QTAwQzExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLzsgfTsKIAkJQTEzNkEwMEQxMTM0REJE
MjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTM2QTAwQjExMzREQkQy
MDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLzsgfTsK
IAkJQTE3QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdDODEyMDBGMkE1
Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKQEAgLTgyNjQsNiAr
ODI2NSw3IEBACiAJCTlGRkUzRTdDMTFCNTlDNkUwMDM3ODc0RSAvKiBNZW1vcnlJbmZvLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZW1vcnlJbmZvLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUZGRTNFQTMxMUI1QTQzOTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lbW9yeUluZm8uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RkZFM0VBNDExQjVBNDM5MDAzNzg3NEUgLyog
SlNNZW1vcnlJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVtb3J5
SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMDQ2NkE2QjExREQ0MkE4MDA2
NUQ1NzQgLyogQ2hlY2tlZEludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
aGVja2VkSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBBMTEzNERC
RDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMzZBMDBC
MTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMDBG
MkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMTU3OCw2ICsxMTU4MCw3IEBACiAJCTQ5NDg0RkFFMTAyQ0Yw
MUUwMDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCUEwNDY2QTZCMTFERDQyQTgwMDY1RDU3NCAvKiBDaGVja2VkSW50LmggKi8s
CiAJCQkJNDlFRUNEQ0ExMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyLmNwcCAqLywKIAkJ
CQk0OUVFQ0RDQjEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaCAqLywKIAkJCQk0OUVF
Q0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLApAQCAtMTk2NzgsNiAr
MTk2ODEsNyBAQAogCQkJCUJDNjQ2NDk4MTFEODIzNDkwMDY0NTVCMCAvKiBKU0RPTVN0cmluZ01h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNTYzQjQxMURCM0QxMDAwM0FDMkYwIC8qIEhUTUxF
bGVtZW50U3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTU2NEE1MTFEQzBFNTkwMDNBQzJG
MCAvKiBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBMDQ2
NkE2QzExREQ0MkE4MDA2NUQ1NzQgLyogQ2hlY2tlZEludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NoZWNrZWRJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NoZWNrZWRJbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2hlY2tlZEludC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyNyBAQAorLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLSAqLworLyogdmltOnNldCB0cz0yIHN3PTIgc3RzPTIgZXQgY2luZGVudDog
Ki8KKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAx
LjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5z
ZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIGNvZGUuCisgKgorICogVGhl
IEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNb3ppbGxhIENv
cnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg
YXJlIENvcHlyaWdodCAoQykgMjAwOQorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICogIEJlbm9pdCBKYWNvYiA8
YmphY29iQG1vemlsbGEuY29tPgorICogIEplZmYgTXVpemVsYWFyIDxqbXVpemVsYWFyQG1vemls
bGEuY29tPgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIg
KHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BM
IG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkg
ZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhl
IExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUg
dGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAq
ICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8vIE5lY2Vzc2FyeSBtb2RpZmlj
YXRpb25zIGFyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBDaGVja2VkSW50LmggZmlsZSB0byByZW1v
dmUKKy8vIGRlcGVuZGVuY2llcyBvbiBwcnR5cGVzLgorLy8gQWxzbywgY2hhbmdlIGRlZmluZSBN
b3ppbGxhX0NoZWNrZWRJbnRfaCB0byBDaGVja2VkSW50X2gsIGNoYW5nZSBuYW1lc3BhY2UKKy8v
IGZyb20gbW96aWxsYSB0byBXZWJDb3JlIGZvciBlYXNpZXIgdXNhZ2UuCisKKyNpZm5kZWYgQ2hl
Y2tlZEludF9oCisjZGVmaW5lIENoZWNrZWRJbnRfaAorCisjaW5jbHVkZSA8Y2xpbWl0cz4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgQ2hlY2tlZEludF9pbnRlcm5hbCB7CisK
Ky8qIHdlIGRvbid0IHdhbnQgdG8gdXNlIHN0ZDo6bnVtZXJpY19saW1pdHMgaGVyZSBiZWNhdXNl
IGludC4uLiB0eXBlcyBtYXkgbm90IHN1cHBvcnQgaXQsCisgKiBkZXBlbmRpbmcgb24gdGhlIHBs
YXRmb3JtLCBlLmcuIG9uIGNlcnRhaW4gcGxhdGZvcm0gdGhleSB1c2Ugbm9uc3RhbmRhcmQgYnVp
bHQtaW4gdHlwZXMKKyAqLworCisvKioqIFN0ZXAgMTogbWFudWFsbHkgcmVjb3JkIGluZm9ybWF0
aW9uIGZvciBhbGwgdGhlIHR5cGVzIHRoYXQgd2Ugd2FudCB0byBzdXBwb3J0CisgKioqLworCitz
dHJ1Y3QgdW5zdXBwb3J0ZWRfdHlwZSB7fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvCit7CisgICAgZW51bSB7IGlzX3N1
cHBvcnRlZCA9IDAgfTsKKyAgICB0eXBlZGVmIHVuc3VwcG9ydGVkX3R5cGUgdHdpY2VfYmlnZ2Vy
X3R5cGU7Cit9OworCisKKyNkZWZpbmUgQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQ
RShULF90d2ljZV9iaWdnZXJfdHlwZSkgIFwKK3RlbXBsYXRlPD4gc3RydWN0IGludGVnZXJfdHlw
ZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvPFQ+ICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbnVtIHsg
aXNfc3VwcG9ydGVkID0gMSB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB0eXBlZGVmIF90d2ljZV9iaWdnZXJfdHlwZSB0d2ljZV9iaWdnZXJfdHlwZTsgICAgICAgICAg
ICAgIFwKKyAgICBzdGF0aWMgdm9pZCBUWVBFX05PVF9TVVBQT1JURURfQllfQ2hlY2tlZEludCgp
IHt9ICAgICAgICAgICAgIFwKK307CisKK0NIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZ
UEUoaW50OF90LCAgIGludDE2X3QpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9UWVBF
KHVpbnQ4X3QsICB1aW50MTZfdCkKK0NIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUo
aW50MTZfdCwgIGludDMyX3QpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9UWVBFKHVp
bnQxNl90LCB1aW50MzJfdCkKK0NIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUoaW50
MzJfdCwgIGludDY0X3QpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9UWVBFKHVpbnQz
Ml90LCB1aW50NjRfdCkKK0NIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUoaW50NjRf
dCwgIHVuc3VwcG9ydGVkX3R5cGUpCitDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9UWVBF
KHVpbnQ2NF90LCB1bnN1cHBvcnRlZF90eXBlKQorCisKKy8qKiogU3RlcCAyOiByZWNvcmQgc29t
ZSBpbmZvIGFib3V0IGEgZ2l2ZW4gaW50ZWdlciB0eXBlLAorICoqKiAgICAgICAgIGluY2x1ZGlu
ZyB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZCwgd2hldGhlciBhIHR3aWNlIGJpZ2dlciBpbnRlZ2Vy
IHR5cGUKKyAqKiogICAgICAgICBpcyBzdXBwb3J0ZWQsIHdoYXQgdGhhdCB0d2ljZSBiaWdnZXIg
dHlwZSBpcywgYW5kIHNvbWUgc3R1ZmYgYXMgZm91bmQKKyAqKiogICAgICAgICBpbiBzdGQ6Om51
bWVyaWNfbGltaXRzICh3aGljaCB3ZSBkb24ndCB1c2UgYmVjYXVzZSBpbnQuLiB0eXBlcyBtYXkK
KyAqKiogICAgICAgICBub3Qgc3VwcG9ydCBpdCwgaWYgdGhleSBhcmUgZGVmaW5lZCBkaXJlY3Rs
eSBmcm9tIGNvbXBpbGVyIGJ1aWx0LWluIHR5cGVzKS4KKyAqKiovCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBpc191bnN1cHBvcnRlZF90eXBlIHsgZW51bSB7IGFuc3dlciA9IDAgfTsg
fTsKK3RlbXBsYXRlPD4gc3RydWN0IGlzX3Vuc3VwcG9ydGVkX3R5cGU8dW5zdXBwb3J0ZWRfdHlw
ZT4geyBlbnVtIHsgYW5zd2VyID0gMSB9OyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgaW50ZWdlcl90cmFpdHMKK3sKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGludGVnZXJfdHlwZV9t
YW51YWxseV9yZWNvcmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZSB0d2ljZV9iaWdnZXJf
dHlwZTsKKworICAgIGVudW0geworICAgICAgICBpc19zdXBwb3J0ZWQgPSBpbnRlZ2VyX3R5cGVf
bWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPjo6aXNfc3VwcG9ydGVkLAorICAgICAgICB0d2ljZV9i
aWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQKKyAgICAgICAgICAgID0gaXNfdW5zdXBwb3J0ZWRfdHlw
ZTwKKyAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNv
cmRlZF9pbmZvPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZQorICAgICAgICAgICAgICA+OjphbnN3ZXIg
PyAwIDogMSwKKyAgICAgICAgc2l6ZSA9IHNpemVvZihUKSwKKyAgICAgICAgcG9zaXRpb25fb2Zf
c2lnbl9iaXQgPSBDSEFSX0JJVCAqIHNpemUgLSAxLAorICAgICAgICBpc19zaWduZWQgPSAoVCgt
MSkgPiBUKDApKSA/IDAgOiAxCisgICAgfTsKKworICAgIHN0YXRpYyBUIG1pbigpCisgICAgewor
ICAgICAgICAvLyBiaXR3aXNlIG9wcyBtYXkgcmV0dXJuIGEgbGFyZ2VyIHR5cGUsIHRoYXQncyB3
aHkgd2UgY2FzdCBleHBsaWNpdGx5IHRvIFQKKyAgICAgICAgcmV0dXJuIGlzX3NpZ25lZCA/IFQo
VCgxKSA8PCBwb3NpdGlvbl9vZl9zaWduX2JpdCkgOiBUKDApOworICAgIH0KKworICAgIHN0YXRp
YyBUIG1heCgpCisgICAgeworICAgICAgICByZXR1cm4gfm1pbigpOworICAgIH0KK307CisKKy8q
KiogU3RlcCAzOiBJbXBsZW1lbnQgdGhlIGFjdHVhbCB2YWxpZGl0eSBjaGVja3MgLS0tIGlkZWFz
IHRha2VuIGZyb20gSW50ZWdlckxpYiwgY29kZSBkaWZmZXJlbnQuCisgKioqLworCisvLyBiaXR3
aXNlIG9wcyBtYXkgcmV0dXJuIGEgbGFyZ2VyIHR5cGUsIHNvIGl0J3MgZ29vZCB0byB1c2UgdGhl
c2UgaW5saW5lIGhlbHBlcnMgZ3VhcmFudGVlaW5nIHRoYXQKKy8vIHRoZSByZXN1bHQgaXMgcmVh
bGx5IG9mIHR5cGUgVAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBoYXNfc2lnbl9i
aXQoVCB4KQoreworICAgIHJldHVybiB4ID4+IGludGVnZXJfdHJhaXRzPFQ+Ojpwb3NpdGlvbl9v
Zl9zaWduX2JpdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgYmluYXJ5X2Nv
bXBsZW1lbnQoVCB4KQoreworICAgIHJldHVybiB+eDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwKKyAgICAgICAgIGJvb2wgaXNfVF9zaWduZWQgPSBpbnRlZ2VyX3RyYWl0
czxUPjo6aXNfc2lnbmVkLAorICAgICAgICAgYm9vbCBpc19VX3NpZ25lZCA9IGludGVnZXJfdHJh
aXRzPFU+Ojppc19zaWduZWQ+CitzdHJ1Y3QgaXNfaW5fcmFuZ2VfaW1wbCB7fTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBpc19pbl9yYW5nZV9pbXBsPFQsIFUs
IHRydWUsIHRydWU+Cit7CisgICAgc3RhdGljIFQgcnVuKFUgeCkKKyAgICB7CisgICAgICAgIHJl
dHVybiAoeCA8PSBpbnRlZ2VyX3RyYWl0czxUPjo6bWF4KCkpICYKKyAgICAgICAgICAgICAgICh4
ID49IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBpc19pbl9yYW5nZV9pbXBsPFQsIFUsIGZhbHNl
LCBmYWxzZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVSB4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHggPD0gaW50ZWdlcl90cmFpdHM8VD46Om1heCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgaXNfaW5fcmFuZ2VfaW1wbDxULCBVLCB0cnVl
LCBmYWxzZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVSB4KQorICAgIHsKKyAgICAgICAgaWYgKHNp
emVvZihUKSA+IHNpemVvZihVKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4geCA8PSBVKGludGVnZXJfdHJhaXRzPFQ+OjptYXgoKSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0cnVjdCBpc19p
bl9yYW5nZV9pbXBsPFQsIFUsIGZhbHNlLCB0cnVlPgoreworICAgIHN0YXRpYyBUIHJ1bihVIHgp
CisgICAgeworICAgICAgICBpZiAoc2l6ZW9mKFQpID49IHNpemVvZihVKSkKKyAgICAgICAgICAg
IHJldHVybiB4ID49IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB4ID49IDAg
JiYgeCA8PSBVKGludGVnZXJfdHJhaXRzPFQ+OjptYXgoKSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFQgaXNfaW5fcmFuZ2UoVSB4KQorewor
ICAgIHJldHVybiBpc19pbl9yYW5nZV9pbXBsPFQsIFU+OjpydW4oeCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX2FkZF92YWxpZChUIHgsIFQgeSwgVCByZXN1bHQpCit7
CisgICAgcmV0dXJuIGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWduZWQgPworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYWRkaXRpb24gaXMgdmFsaWQgaWYgdGhlIHNpZ24gb2YgeCt5IGlzIGVx
dWFsIHRvIGVpdGhlciB0aGF0IG9mIHggb3IgdGhhdCBvZiB5LgorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQmV3YXJlISBUaGVzZSBiaXR3aXNlIG9wZXJhdGlvbnMgY2FuIHJldHVybiBhIGxh
cmdlciBpbnRlZ2VyIHR5cGUsIGlmIFQgd2FzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNtYWxsIHR5cGUgbGlrZSBpbnQ4LCBzbyB3ZSBleHBsaWNpdGx5IGNhc3QgdG8gVC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc19zaWduX2JpdChiaW5hcnlfY29tcGxlbWVudChUKChyZXN1
bHReeCkgJiAocmVzdWx0XnkpKSkpCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJpbmFyeV9jb21wbGVtZW50KHgpID49IHk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBUIGlzX3N1Yl92YWxpZChUIHgsIFQgeSwgVCByZXN1bHQpCit7Cisg
ICAgcmV0dXJuIGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWduZWQgPworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc3Vic3RyYWN0aW9uIGlzIHZhbGlkIGlmIGVpdGhlciB4IGFuZCB5IGhhdmUg
c2FtZSBzaWduLCBvciB4LXkgYW5kIHggaGF2ZSBzYW1lIHNpZ24KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhc19zaWduX2JpdChiaW5hcnlfY29tcGxlbWVudChUKChyZXN1bHReeCkgJiAoeF55
KSkpKQorICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICB4ID49
IHk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsCisgICAgICAgICBib29sIGlzX3NpZ25lZCA9
ICBpbnRlZ2VyX3RyYWl0czxUPjo6aXNfc2lnbmVkLAorICAgICAgICAgYm9vbCB0d2ljZV9iaWdn
ZXJfdHlwZV9pc19zdXBwb3J0ZWQgPSBpbnRlZ2VyX3RyYWl0czxUPjo6dHdpY2VfYmlnZ2VyX3R5
cGVfaXNfc3VwcG9ydGVkPgorc3RydWN0IGlzX211bF92YWxpZF9pbXBsIHt9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IGlzX211bF92YWxpZF9pbXBsPFQsIHRydWUsIHRydWU+Cit7
CisgICAgc3RhdGljIFQgcnVuKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpbnRlZ2VyX3RyYWl0czxUPjo6dHdpY2VfYmlnZ2VyX3R5cGUgdHdpY2VfYmlnZ2VyX3R5
cGU7CisgICAgICAgIHR3aWNlX2JpZ2dlcl90eXBlIHByb2R1Y3QgPSB0d2ljZV9iaWdnZXJfdHlw
ZSh4KSAqIHR3aWNlX2JpZ2dlcl90eXBlKHkpOworICAgICAgICByZXR1cm4gaXNfaW5fcmFuZ2U8
VD4ocHJvZHVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBp
c19tdWxfdmFsaWRfaW1wbDxULCBmYWxzZSwgdHJ1ZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVCB4
LCBUIHkpCisgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGludGVnZXJfdHJhaXRzPFQ+
Ojp0d2ljZV9iaWdnZXJfdHlwZSB0d2ljZV9iaWdnZXJfdHlwZTsKKyAgICAgICAgdHdpY2VfYmln
Z2VyX3R5cGUgcHJvZHVjdCA9IHR3aWNlX2JpZ2dlcl90eXBlKHgpICogdHdpY2VfYmlnZ2VyX3R5
cGUoeSk7CisgICAgICAgIHJldHVybiBpc19pbl9yYW5nZTxUPihwcm9kdWN0KTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGlzX211bF92YWxpZF9pbXBsPFQsIHRy
dWUsIGZhbHNlPgoreworICAgIHN0YXRpYyBUIHJ1bihUIHgsIFQgeSkKKyAgICB7CisgICAgICAg
IGNvbnN0IFQgbWF4X3ZhbHVlID0gaW50ZWdlcl90cmFpdHM8VD46Om1heCgpOworICAgICAgICBj
b25zdCBUIG1pbl92YWx1ZSA9IGludGVnZXJfdHJhaXRzPFQ+OjptaW4oKTsKKworICAgICAgICBp
ZiAoeCA9PSAwIHx8IHkgPT0gMCkgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHggPiAwKSB7
CisgICAgICAgICAgICBpZiAoeSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHggPD0gbWF4
X3ZhbHVlIC8geTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geSA+
PSBtaW5fdmFsdWUgLyB4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHkgPiAw
KQorICAgICAgICAgICAgICAgIHJldHVybiB4ID49IG1pbl92YWx1ZSAvIHk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHkgPj0gbWF4X3ZhbHVlIC8geDsKKyAgICAg
ICAgfQorICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaXNfbXVsX3Zh
bGlkX2ltcGw8VCwgZmFsc2UsIGZhbHNlPgoreworICAgIHN0YXRpYyBUIHJ1bihUIHgsIFQgeSkK
KyAgICB7CisgICAgICAgIGNvbnN0IFQgbWF4X3ZhbHVlID0gaW50ZWdlcl90cmFpdHM8VD46Om1h
eCgpOworICAgICAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiB4IDw9IG1heF92YWx1ZSAvIHk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFQgaXNfbXVsX3ZhbGlkKFQgeCwgVCB5LCBUIC8qcmVzdWx0IG5vdCB1c2Vk
Ki8pCit7CisgICAgcmV0dXJuIGlzX211bF92YWxpZF9pbXBsPFQ+OjpydW4oeCwgeSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGlzX2Rpdl92YWxpZChUIHgsIFQgeSkKK3sK
KyAgICByZXR1cm4gaW50ZWdlcl90cmFpdHM8VD46OmlzX3NpZ25lZCA/CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBrZWVwIGluIG1pbmQgdGhhdCBtaW4vLTEgaXMgaW52YWxpZCBiZWNhdXNl
IGFicyhtaW4pPm1heAorICAgICAgICAgICAgICAgICAgICAgICAgeSAhPSAwICYmICh4ICE9IGlu
dGVnZXJfdHJhaXRzPFQ+OjptaW4oKSB8fCB5ICE9IFQoLTEpKQorICAgICAgICAgICAgICAgICAg
ICA6CisgICAgICAgICAgICAgICAgICAgICAgICB5ICE9IDA7Cit9CisKK30gLy8gZW5kIG5hbWVz
cGFjZSBDaGVja2VkSW50X2ludGVybmFsCisKKworLyoqKiBTdGVwIDQ6IE5vdyBkZWZpbmUgdGhl
IENoZWNrZWRJbnQgY2xhc3MuCisgKioqLworCisvKiogXGNsYXNzIENoZWNrZWRJbnQKKyAgKiBc
YnJpZWYgSW50ZWdlciB3cmFwcGVyIGNsYXNzIGNoZWNraW5nIGZvciBpbnRlZ2VyIG92ZXJmbG93
IGFuZCBvdGhlciBlcnJvcnMKKyAgKiBccGFyYW0gVCB0aGUgaW50ZWdlciB0eXBlIHRvIHdyYXAu
IENhbiBiZSBhbnkgb2YgaW50OF90LCB1aW50OF90LCBpbnQxNl90LCB1aW50MTZfdCwKKyAgKiAg
ICAgICAgICBpbnQzMl90LCB1aW50MzJfdCwgaW50NjRfdCwgdWludDY0X3QuCisgICoKKyAgKiBU
aGlzIGNsYXNzIGltcGxlbWVudHMgZ3VhcmRlZCBpbnRlZ2VyIGFyaXRobWV0aWMuIERvIGEgY29t
cHV0YXRpb24sIHRoZW4gY2hlY2sgdGhhdAorICAqIHZhbGlkKCkgcmV0dXJucyB0cnVlLCB5b3Ug
dGhlbiBoYXZlIGEgZ3VhcmFudGVlIHRoYXQgbm8gcHJvYmxlbSwgc3VjaCBhcyBpbnRlZ2VyIG92
ZXJmbG93LAorICAqIGhhcHBlbmVkIGR1cmluZyB0aGlzIGNvbXB1dGF0aW9uLgorICAqCisgICog
VGhlIGFyaXRobWV0aWMgb3BlcmF0b3JzIGluIHRoaXMgY2xhc3MgYXJlIGd1YXJhbnRlZWQgbm90
IHRvIGNyYXNoIHlvdXIgYXBwCisgICogaW4gY2FzZSBvZiBhIGRpdmlzaW9uIGJ5IHplcm8uCisg
ICoKKyAgKiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGF0IHlvdSB3YW50IHRvIGltcGxlbWVudCBh
IGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgKHgreSkveiwKKyAgKiB0aGF0IGRvZXNuJ3QgY3Jhc2gg
aWYgej09MCwgYW5kIHRoYXQgcmVwb3J0cyBvbiBlcnJvciAoZGl2aWRlIGJ5IHplcm8gb3IgaW50
ZWdlciBvdmVyZmxvdykuCisgICogWW91IGNvdWxkIGNvZGUgaXQgYXMgZm9sbG93czoKKyAgICBc
Y29kZQorICAgIGJvb2wgY29tcHV0ZV94X3BsdXNfeV9vdmVyX3ooaW50MzJfdCB4LCBpbnQzMl90
IHksIGludDMyX3QgeiwgaW50MzJfdCAqcmVzdWx0KQorICAgIHsKKyAgICAgICAgQ2hlY2tlZElu
dDxpbnQzMl90PiBjaGVja2VkX3Jlc3VsdCA9IChDaGVja2VkSW50PGludDMyX3Q+KHgpICsgeSkg
LyB6OworICAgICAgICAqcmVzdWx0ID0gY2hlY2tlZF9yZXN1bHQudmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIGNoZWNrZWRfcmVzdWx0LnZhbGlkKCk7CisgICAgfQorICAgIFxlbmRjb2RlCisgICoK
KyAgKiBJbXBsaWNpdCBjb252ZXJzaW9uIGZyb20gcGxhaW4gaW50ZWdlcnMgdG8gY2hlY2tlZCBp
bnRlZ2VycyBpcyBhbGxvd2VkLiBUaGUgcGxhaW4gaW50ZWdlcgorICAqIGlzIGNoZWNrZWQgdG8g
YmUgaW4gcmFuZ2UgYmVmb3JlIGJlaW5nIGNhc3RlZCB0byB0aGUgZGVzdGluYXRpb24gdHlwZS4g
VGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgKiBsaW5lcyBhbGwgY29tcGlsZSwgYW5k
IHRoZSByZXN1bHRpbmcgQ2hlY2tlZEludHMgYXJlIGNvcnJlY3RseSBkZXRlY3RlZCBhcyB2YWxp
ZCBvciBpbnZhbGlkOgorICAqIFxjb2RlCisgICAgQ2hlY2tlZEludDx1aW50OF90PiB4KDEpOyAg
IC8vIDEgaXMgb2YgdHlwZSBpbnQsIGlzIGZvdW5kIHRvIGJlIGluIHJhbmdlIGZvciB1aW50OF90
LCB4IGlzIHZhbGlkCisgICAgQ2hlY2tlZEludDx1aW50OF90PiB4KC0xKTsgIC8vIC0xIGlzIG9m
IHR5cGUgaW50LCBpcyBmb3VuZCBub3QgdG8gYmUgaW4gcmFuZ2UgZm9yIHVpbnQ4X3QsIHggaXMg
aW52YWxpZAorICAgIENoZWNrZWRJbnQ8aW50OF90PiB4KC0xKTsgICAvLyAtMSBpcyBvZiB0eXBl
IGludCwgaXMgZm91bmQgdG8gYmUgaW4gcmFuZ2UgZm9yIGludDhfdCwgeCBpcyB2YWxpZAorICAg
IENoZWNrZWRJbnQ8aW50OF90PiB4KGludDE2X3QoMTAwMCkpOyAvLyAxMDAwIGlzIG9mIHR5cGUg
aW50MTZfdCwgaXMgZm91bmQgbm90IHRvIGJlIGluIHJhbmdlIGZvciBpbnQ4X3QsIHggaXMgaW52
YWxpZAorICAgIENoZWNrZWRJbnQ8aW50MzJfdD4geCh1aW50MzJfdCgxMjM0NTY3ODkpKTsgLy8g
MzEyMzQ1Njc4OSBpcyBvZiB0eXBlIHVpbnQzMl90LCBpcyBmb3VuZCBub3QgdG8gYmUgaW4gcmFu
Z2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBp
bnQzMl90LCB4IGlzIGludmFsaWQKKyAgKiBcZW5kY29kZQorICAqIEltcGxpY2l0IGNvbnZlcnNp
b24gZnJvbQorICAqIGNoZWNrZWQgaW50ZWdlcnMgdG8gcGxhaW4gaW50ZWdlcnMgaXMgbm90IGFs
bG93ZWQuIEFzIHNob3duIGluIHRoZQorICAqIGFib3ZlIGV4YW1wbGUsIHRvIGdldCB0aGUgdmFs
dWUgb2YgYSBjaGVja2VkIGludGVnZXIgYXMgYSBub3JtYWwgaW50ZWdlciwgY2FsbCB2YWx1ZSgp
LgorICAqCisgICogQXJpdGhtZXRpYyBvcGVyYXRpb25zIGJldHdlZW4gY2hlY2tlZCBhbmQgcGxh
aW4gaW50ZWdlcnMgaXMgYWxsb3dlZDsgdGhlIHJlc3VsdCB0eXBlCisgICogaXMgdGhlIHR5cGUg
b2YgdGhlIGNoZWNrZWQgaW50ZWdlci4KKyAgKgorICAqIFNhZmUgaW50ZWdlcnMgb2YgZGlmZmVy
ZW50IHR5cGVzIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGFyaXRobWV0aWMgZXhwcmVzc2lv
bi4KKyAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBDaGVja2VkSW50Cit7Citwcm90
ZWN0ZWQ6CisgICAgVCBtVmFsdWU7CisgICAgVCBtSXNWYWxpZDsgLy8gc3RvcmVkIGFzIGEgVCB0
byBsaW1pdCB0aGUgbnVtYmVyIG9mIGludGVnZXIgY29udmVyc2lvbnMgd2hlbgorICAgICAgICAg
ICAgICAgIC8vIGV2YWx1YXRpbmcgbmVzdGVkIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMuCisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIENoZWNrZWRJbnQoY29uc3QgVSYgdmFsdWUsIGJv
b2wgaXNWYWxpZCkgOiBtVmFsdWUodmFsdWUpLCBtSXNWYWxpZChpc1ZhbGlkKQorICAgIHsKKyAg
ICAgICAgQ2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVk
X2luZm88VD4KKyAgICAgICAgICAgIDo6VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQo
KTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICAvKiogQ29uc3RydWN0cyBhIGNoZWNrZWQgaW50ZWdl
ciB3aXRoIGdpdmVuIFxhIHZhbHVlLiBUaGUgY2hlY2tlZCBpbnRlZ2VyIGlzIGluaXRpYWxpemVk
IGFzIHZhbGlkIG9yIGludmFsaWQKKyAgICAgICogZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIFxh
IHZhbHVlIGlzIGluIHJhbmdlLgorICAgICAgKgorICAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlz
IG5vdCBleHBsaWNpdC4gSW5zdGVhZCwgdGhlIHR5cGUgb2YgaXRzIGFyZ3VtZW50IGlzIGEgc2Vw
YXJhdGUgdGVtcGxhdGUgcGFyYW1ldGVyLAorICAgICAgKiBlbnN1cmluZyB0aGF0IG5vIGNvbnZl
cnNpb24gaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGlzIGNvbnN0cnVjdG9yIGlzIGFjdHVhbGx5IGNh
bGxlZC4KKyAgICAgICogQXMgZXhwbGFpbmVkIGluIHRoZSBhYm92ZSBkb2N1bWVudGF0aW9uIGZv
ciBjbGFzcyBDaGVja2VkSW50LCB0aGlzIGNvbnN0cnVjdG9yIGNoZWNrcyB0aGF0IGl0cyBhcmd1
bWVudCBpcworICAgICAgKiB2YWxpZC4KKyAgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBDaGVja2VkSW50KGNvbnN0IFUmIHZhbHVlKQorICAgICAgICA6IG1WYWx1ZSh2YWx1
ZSksCisgICAgICAgICAgbUlzVmFsaWQoQ2hlY2tlZEludF9pbnRlcm5hbDo6aXNfaW5fcmFuZ2U8
VD4odmFsdWUpKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90
eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88VD4KKyAgICAgICAgICAgIDo6VFlQRV9OT1RfU1VQ
UE9SVEVEX0JZX0NoZWNrZWRJbnQoKTsKKyAgICB9CisKKyAgICAvKiogQ29uc3RydWN0cyBhIHZh
bGlkIGNoZWNrZWQgaW50ZWdlciB3aXRoIHVuaW5pdGlhbGl6ZWQgdmFsdWUgKi8KKyAgICBDaGVj
a2VkSW50KCkgOiBtSXNWYWxpZCgxKQorICAgIHsKKyAgICAgICAgQ2hlY2tlZEludF9pbnRlcm5h
bDo6aW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88VD4KKyAgICAgICAgICAgIDo6
VFlQRV9OT1RfU1VQUE9SVEVEX0JZX0NoZWNrZWRJbnQoKTsKKyAgICB9CisKKyAgICAvKiogXHJl
dHVybnMgdGhlIGFjdHVhbCB2YWx1ZSAqLworICAgIFQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
VmFsdWU7IH0KKworICAgIC8qKiBccmV0dXJucyB0cnVlIGlmIHRoZSBjaGVja2VkIGludGVnZXIg
aXMgdmFsaWQsIGkuZS4gaXMgbm90IHRoZSByZXN1bHQKKyAgICAgICogb2YgYW4gaW52YWxpZCBv
cGVyYXRpb24gb3Igb2YgYW4gb3BlcmF0aW9uIGludm9sdmluZyBhbiBpbnZhbGlkIGNoZWNrZWQg
aW50ZWdlcgorICAgICAgKi8KKyAgICBib29sIHZhbGlkKCkgY29uc3QgeyByZXR1cm4gbUlzVmFs
aWQ7IH0KKworICAgIC8qKiBccmV0dXJucyB0aGUgc3VtLiBDaGVja3MgZm9yIG92ZXJmbG93LiAq
LworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBDaGVja2VkSW50PFU+IG9wZXJhdG9y
ICsoY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25zdCBDaGVja2VkSW50PFU+JiByaHMpOwor
ICAgIC8qKiBBZGRzLiBDaGVja3MgZm9yIG92ZXJmbG93LiBccmV0dXJucyBzZWxmIHJlZmVyZW5j
ZSAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENoZWNrZWRJbnQmIG9wZXJhdG9yICs9KGNv
bnN0IFUgJnJocyk7CisgICAgLyoqIFxyZXR1cm5zIHRoZSBkaWZmZXJlbmNlLiBDaGVja3MgZm9y
IG92ZXJmbG93LiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBDaGVja2VkSW50
PFU+IG9wZXJhdG9yIC0oY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25zdCBDaGVja2VkSW50
PFU+ICZyaHMpOworICAgIC8qKiBTdWJzdHJhY3RzLiBDaGVja3MgZm9yIG92ZXJmbG93LiBccmV0
dXJucyBzZWxmIHJlZmVyZW5jZSAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENoZWNrZWRJ
bnQmIG9wZXJhdG9yIC09KGNvbnN0IFUgJnJocyk7CisgICAgLyoqIFxyZXR1cm5zIHRoZSBwcm9k
dWN0LiBDaGVja3MgZm9yIG92ZXJmbG93LiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZy
aWVuZCBDaGVja2VkSW50PFU+IG9wZXJhdG9yICooY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBj
b25zdCBDaGVja2VkSW50PFU+ICZyaHMpOworICAgIC8qKiBNdWx0aXBsaWVzLiBDaGVja3MgZm9y
IG92ZXJmbG93LiBccmV0dXJucyBzZWxmIHJlZmVyZW5jZSAqLworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IENoZWNrZWRJbnQmIG9wZXJhdG9yICo9KGNvbnN0IFUgJnJocyk7CisgICAgLyoqIFxy
ZXR1cm5zIHRoZSBxdW90aWVudC4gQ2hlY2tzIGZvciBvdmVyZmxvdyBhbmQgZm9yIGRpdmlkZS1i
eS16ZXJvLiAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBDaGVja2VkSW50PFU+
IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tlZEludDxVPiYgbGhzLCBjb25zdCBDaGVja2VkSW50PFU+
ICZyaHMpOworICAgIC8qKiBEaXZpZGVzLiBDaGVja3MgZm9yIG92ZXJmbG93IGFuZCBmb3IgZGl2
aWRlLWJ5LXplcm8uIFxyZXR1cm5zIHNlbGYgcmVmZXJlbmNlICovCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gQ2hlY2tlZEludCYgb3BlcmF0b3IgLz0oY29uc3QgVSAmcmhzKTsKKworICAgIC8q
KiBccmV0dXJucyB0aGUgb3Bwb3NpdGUgdmFsdWUuIENoZWNrcyBmb3Igb3ZlcmZsb3cuICovCisg
ICAgQ2hlY2tlZEludCBvcGVyYXRvciAtKCkgY29uc3QKKyAgICB7CisgICAgICAgIFQgcmVzdWx0
ID0gLXZhbHVlKCk7CisgICAgICAgIC8qIGdpdmUgdGhlIGNvbXBpbGVyIGEgZ29vZCBjaGFuY2Ug
dG8gcGVyZm9ybSBSVk8gKi8KKyAgICAgICAgcmV0dXJuIENoZWNrZWRJbnQocmVzdWx0LAorICAg
ICAgICAgICAgICAgICAgICAgICBtSXNWYWxpZCAmIENoZWNrZWRJbnRfaW50ZXJuYWw6OmlzX3N1
Yl92YWxpZChUKDApLCB2YWx1ZSgpLCByZXN1bHQpKTsKKyAgICB9CisKKyAgICAvKiogXHJldHVy
bnMgdHJ1ZSBpZiB0aGUgbGVmdCBhbmQgcmlnaHQgaGFuZCBzaWRlcyBhcmUgdmFsaWQgYW5kIGhh
dmUgdGhlIHNhbWUgdmFsdWUuICovCisgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBDaGVja2Vk
SW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBib29sKG1Jc1ZhbGlkICYg
b3RoZXIubUlzVmFsaWQgJiBUKHZhbHVlKCkgPT0gb3RoZXIudmFsdWUoKSkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICAvKiogb3BlcmF0b3IhPSBpcyBkaXNhYmxlZC4gSW5kZWVkOiAoYSE9Yikg
c2hvdWxkIGJlIHRoZSBzYW1lIGFzICEoYT09YikgYnV0IHRoYXQKKyAgICAgICogd291bGQgbWVh
biB0aGF0IGlmIGEgb3IgYiBpcyBpbnZhbGlkLCAoYSE9YikgaXMgYWx3YXlzIHRydWUsIHdoaWNo
IGlzIHZlcnkgdHJpY2t5LgorICAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgVSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOyB9Cit9OworCisjZGVmaW5lIENIRUNLRURJTlRfQkFTSUNfQklOQVJZX09QRVJB
VE9SKE5BTUUsIE9QKSAgICAgICAgICAgICAgIFwKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoraW5saW5lIENoZWNrZWRJbnQ8
VD4gb3BlcmF0b3IgT1AoY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50
PFQ+ICZyaHMpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIFQgeCA9IGxocy52YWx1ZSgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVCB5ID0gcmhzLnZhbHVlKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUIHJlc3VsdCA9IHggT1Ag
eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFQgaXNfb3Bf
dmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgID0gQ2hlY2tlZEludF9pbnRlcm5hbDo6aXNfIyNOQU1FIyNfdmFsaWQoeCwgeSwgcmVzdWx0
KTsgIFwKKyAgICAvKiBnaXZlIHRoZSBjb21waWxlciBhIGdvb2QgY2hhbmNlIHRvIHBlcmZvcm0g
UlZPICovICAgICAgXAorICAgIHJldHVybiBDaGVja2VkSW50PFQ+KHJlc3VsdCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgbGhzLm1Jc1Zh
bGlkICYgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICBy
aHMubUlzVmFsaWQgJiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
ICAgICAgIGlzX29wX3ZhbGlkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKK0NI
RUNLRURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9SKGFkZCwgKykKK0NIRUNLRURJTlRfQkFTSUNf
QklOQVJZX09QRVJBVE9SKHN1YiwgLSkKK0NIRUNLRURJTlRfQkFTSUNfQklOQVJZX09QRVJBVE9S
KG11bCwgKikKKworLy8gZGl2aXNpb24gY2FuJ3QgYmUgaW1wbGVtZW50ZWQgYnkgQ0hFQ0tFRElO
VF9CQVNJQ19CSU5BUllfT1BFUkFUT1IKKy8vIGJlY2F1c2UgaWYgcmhzID09IDAsIHdlIGFyZSBu
b3QgYWxsb3dlZCB0byBldmVuIHRyeSB0byBjb21wdXRlIHRoZSBxdW90aWVudC4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitpbmxpbmUgQ2hlY2tlZEludDxUPiBvcGVyYXRvciAvKGNvbnN0IENoZWNr
ZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKQoreworICAgIFQgeCA9IGxo
cy52YWx1ZSgpOworICAgIFQgeSA9IHJocy52YWx1ZSgpOworICAgIFQgaXNfb3BfdmFsaWQgPSBD
aGVja2VkSW50X2ludGVybmFsOjppc19kaXZfdmFsaWQoeCwgeSk7CisgICAgVCByZXN1bHQgPSBp
c19vcF92YWxpZCA/ICh4IC8geSkgOiAwOworICAgIC8qIGdpdmUgdGhlIGNvbXBpbGVyIGEgZ29v
ZCBjaGFuY2UgdG8gcGVyZm9ybSBSVk8gKi8KKyAgICByZXR1cm4gQ2hlY2tlZEludDxUPihyZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgbGhzLm1Jc1ZhbGlkICYKKyAgICAgICAgICAgICAg
ICAgICAgICByaHMubUlzVmFsaWQgJgorICAgICAgICAgICAgICAgICAgICAgIGlzX29wX3ZhbGlk
KTsKK30KKworLy8gaW1wbGVtZW50IGNhc3RfdG9fQ2hlY2tlZEludDxUPih4KSwgbWFraW5nIHN1
cmUgdGhhdAorLy8gIC0gaXQgYWxsb3dzIHggdG8gYmUgZWl0aGVyIGEgQ2hlY2tlZEludDxUPiBv
ciBhbnkgaW50ZWdlciB0eXBlIHRoYXQgY2FuIGJlIGNhc3RlZCB0byBUCisvLyAgLSBpZiB4IGlz
IGFscmVhZHkgYSBDaGVja2VkSW50PFQ+LCB3ZSBqdXN0IHJldHVybiBhIHJlZmVyZW5jZSB0byBp
dCwgaW5zdGVhZCBvZiBjb3B5aW5nIGl0IChvcHRpbWl6YXRpb24pCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+CitzdHJ1Y3QgY2FzdF90b19DaGVja2VkSW50X2ltcGwKK3sKKyAg
ICB0eXBlZGVmIENoZWNrZWRJbnQ8VD4gcmV0dXJuX3R5cGU7CisgICAgc3RhdGljIENoZWNrZWRJ
bnQ8VD4gcnVuKGNvbnN0IFUmIHUpIHsgcmV0dXJuIHU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgY2FzdF90b19DaGVja2VkSW50X2ltcGw8VCwgQ2hlY2tlZEludDxUPiA+
Cit7CisgICAgdHlwZWRlZiBjb25zdCBDaGVja2VkSW50PFQ+JiByZXR1cm5fdHlwZTsKKyAgICBz
dGF0aWMgY29uc3QgQ2hlY2tlZEludDxUPiYgcnVuKGNvbnN0IENoZWNrZWRJbnQ8VD4mIHUpIHsg
cmV0dXJuIHU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Citpbmxp
bmUgdHlwZW5hbWUgY2FzdF90b19DaGVja2VkSW50X2ltcGw8VCwgVT46OnJldHVybl90eXBlCitj
YXN0X3RvX0NoZWNrZWRJbnQoY29uc3QgVSYgdSkKK3sKKyAgICByZXR1cm4gY2FzdF90b19DaGVj
a2VkSW50X2ltcGw8VCwgVT46OnJ1bih1KTsKK30KKworI2RlZmluZSBDSEVDS0VESU5UX0NPTlZF
TklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoT1AsIENPTVBPVU5EX09QKSBcCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3RlbXBs
YXRlPHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorQ2hlY2tlZEludDxUPiYgQ2hlY2tlZEludDxUPjo6b3BlcmF0b3IgQ09NUE9VTkRfT1AoY29u
c3QgVSAmcmhzKSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAqdGhpcyA9ICp0aGlzIE9QIGNhc3RfdG9fQ2hl
Y2tlZEludDxUPihyaHMpOyAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiAqdGhpczsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAoraW5saW5lIENoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgT1AoY29uc3QgQ2hlY2tlZEludDxUPiAm
bGhzLCBjb25zdCBVICZyaHMpIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBsaHMgT1AgY2FzdF90b19D
aGVja2VkSW50PFQ+KHJocyk7ICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
aW5saW5lIENoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgT1AoY29uc3QgVSAmIGxocywgY29uc3QgQ2hl
Y2tlZEludDxUPiAmcmhzKSBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gY2FzdF90b19DaGVja2VkSW50
PFQ+KGxocykgT1AgcmhzOyAgICAgICAgICAgICAgICAgICAgXAorfQorCitDSEVDS0VESU5UX0NP
TlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMoKywgKz0pCitDSEVDS0VESU5UX0NPTlZFTklFTkNF
X0JJTkFSWV9PUEVSQVRPUlMoKiwgKj0pCitDSEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9P
UEVSQVRPUlMoLSwgLT0pCitDSEVDS0VESU5UX0NPTlZFTklFTkNFX0JJTkFSWV9PUEVSQVRPUlMo
LywgLz0pCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitpbmxpbmUgYm9vbCBv
cGVyYXRvciA9PShjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMsIGNvbnN0IFUgJnJocykKK3sKKyAg
ICByZXR1cm4gbGhzID09IGNhc3RfdG9fQ2hlY2tlZEludDxUPihyaHMpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgoraW5saW5lIGJvb2wgb3BlcmF0b3IgPT0oY29uc3Qg
VSAmIGxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKQoreworICAgIHJldHVybiBjYXN0X3Rv
X0NoZWNrZWRJbnQ8VD4obGhzKSA9PSByaHM7Cit9CisKK30gLy8gZW5kIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvKiBDaGVja2VkSW50X2ggKi8KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYyMjczKQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
IAorI2luY2x1ZGUgIkNoZWNrZWRJbnQuaCIKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5Lmgi
CiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgpAQCAtNzE3LDE2
ICs3MTgsMjQgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZQogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURTogewogICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBtX2JvdW5k
RWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAg
ICAgICAgICAgbWF4SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+KHBbaV0p
KTsKKyAgICAgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICAgICAgbWF4SW5k
ZXggPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogcCA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihtX2JvdW5kRWxl
bWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAg
ICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+
KHBbaV0pKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5
dGVMZW5ndGgoKSAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci0gICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4obV9i
b3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAg
ICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8bG9uZz4o
cFtpXSkpOworICAgICAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgICAgICAgICBt
YXhJbmRleCA9IDA7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4obV9i
b3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKysp
CisgICAgICAgICAgICAgICAgICAgIG1heEluZGV4ID0gbWF4KG1heEluZGV4LCBzdGF0aWNfY2Fz
dDxsb25nPihwW2ldKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBkZWZhdWx0OgpAQCAtODQ0LDExICs4NTMsMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRW5zdXJlIHdlIGhhdmUg
YSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKLSAgICBpZiAoIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUo
Zmlyc3QgKyBjb3VudCkpIHsKKyAgICBDaGVja2VkSW50PGludDMyX3Q+IGNoZWNrZWRGaXJzdChm
aXJzdCk7CisgICAgQ2hlY2tlZEludDxpbnQzMl90PiBjaGVja2VkQ291bnQoY291bnQpOworICAg
IENoZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZFN1bSA9IGNoZWNrZWRGaXJzdCArIGNoZWNrZWRD
b3VudDsKKyAgICBpZiAoIWNoZWNrZWRTdW0udmFsaWQoKSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdT
dGF0ZShjaGVja2VkU3VtLnZhbHVlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTg4MCw5ICs4ODksNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd0VsZW1lbnRzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNv
dW50KQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJl
bmRlcmluZyBzdGF0ZQogICAgIGxvbmcgbnVtRWxlbWVudHM7CiAgICAgCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MjMwMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDEwLTA3LTAxICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGlzc3Vl
cyBpbiBib3VuZGFyeSBzaXR1YXRpb25zIGZvciBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdB
cnJheXMvZHJhd0VsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MTQ3MworCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1hcnJh
eXMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQ6IFRlc3QgYWdhaW5zdCBvdmVyZmxvdywgc2l6
ZS0wIGJ1ZmZlciwgYW5kIGNvdW50PT0wIHNpdHVhdGlvbnMuCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy5odG1sOiBEaXR0by4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQu
dHh0OiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91
dC1vZi1ib3VuZHMuaHRtbDogRGl0dG8uCisKIDIwMTAtMDctMDEgIE9saXZlciBIdW50ICA8b2xp
dmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91dC1vZi1ib3VuZHMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2RyYXctYXJyYXlzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MjI3MykK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91dC1vZi1ib3Vu
ZHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcsNyBAQCBQQVNTIGNvbnRl
eHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhj
b250ZXh0LlRSSUFOR0xFUywgMCwgLTEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5W
QUxJRF9WQUxVRS4KIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAt
MSwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBj
b250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIDApIGdlbmVyYXRlZCBleHBl
Y3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCi1QQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0
LlRSSUFOR0xFUywgMTAwLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9S
LgorUEFTUyBjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDEwMCwgMCkgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KIAogVGVzdCBidWZm
ZXIgd2l0aCAzIGZsb2F0IHZlY3RvcnMKIFBBU1MgY29udGV4dC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGNvbnRleHQuRlJBTUVCVUZGRVIpIGlzIGNvbnRleHQuRlJBTUVCVUZGRVJfQ09NUExFVEUK
QEAgLTE5LDcgKzE5LDEyIEBAIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5H
TEUKIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAtMSkgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LmRy
YXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIC0xLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wg
ZXJyb3I6IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRS
SUFOR0xFUywgMCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJPUi4KLVBB
U1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAsIDApIGdlbmVyYXRl
ZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCitQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhj
b250ZXh0LlRSSUFOR0xFUywgMTAwLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElO
VkFMSURfT1BFUkFUSU9OLgorUEFTUyBjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdM
RVMsIDAsIDB4ZmZmZmZmZmYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9W
QUxVRS4KK1BBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAweGZmZmZm
ZmZmLCAxKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitQQVNT
IGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZmZiwgMHhmZmZm
ZmZmZikgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBj
b250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIDEpIGdlbmVy
YXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCitQQVNTIGNvbnRleHQu
ZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgMHg3ZmZmZmZmZikgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX09QRVJBVElPTi4KIAogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9kcmF3LWFycmF5cy1vdXQtb2YtYm91bmRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy5odG1sCShy
ZXZpc2lvbiA2MjI3MykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJy
YXlzLW91dC1vZi1ib3VuZHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQCBz
aG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JCiBzaG91bGRHZW5lcmF0ZUdM
RXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJyYXlz
KGNvbnRleHQuVFJJQU5HTEVTLCAwLCAtMSkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250
ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5U
UklBTkdMRVMsIC0xLCAwKSIpOwogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRl
eHQuTk9fRVJST1IsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIDAp
Iik7Ci1zaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNv
bnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMTAwLCAwKSIpOworc2hvdWxkR2Vu
ZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9PUEVSQVRJT04sICJjb250ZXh0
LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDEwMCwgMCkiKTsKIAogZGVidWcoIiIpCiBk
ZWJ1ZygiVGVzdCBidWZmZXIgd2l0aCAzIGZsb2F0IHZlY3RvcnMiKQpAQCAtNDEsNyArNDEsMTYg
QEAgc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSQogc2hvdWxkR2VuZXJh
dGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQuZHJhd0Fy
cmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgLTEpIik7CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3Io
Y29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRl
eHQuVFJJQU5HTEVTLCAtMSwgMCkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBj
b250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAw
LCAwKSIpOwotc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuTk9fRVJST1Is
ICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDEwMCwgMCkiKTsKK3Nob3Vs
ZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OLCAiY29u
dGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAsIDApIik7CisKKy8vIDB4ZmZm
ZmZmZmYgbmVlZHMgdG8gY29udmVydCB0byBhICdsb25nJyBJREwgYXJndW1lbnQgYXMgLTEsIGFz
IHBlcgorLy8gV2ViSURMIDQuMS43LiAgSlMgVG9JbnQzMigweGZmZmZmZmZmKSA9PSAtMSwgd2hp
Y2ggaXMgdGhlIGZpcnN0IHN0ZXAKKy8vIG9mIHRoZSBjb252ZXJzaW9uLiAgVGh1cyBJTlZBTElE
X1ZBTFVFLgorc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9W
QUxVRSwgImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgMHhmZmZmZmZm
ZikiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFM
VUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIDEp
Iik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVF
LCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAweGZmZmZmZmZmLCAweGZm
ZmZmZmZmKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJ
RF9PUEVSQVRJT04sICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDB4N2Zm
ZmZmZmYsIDEpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZB
TElEX09QRVJBVElPTiwgImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3
ZmZmZmZmZiwgMHg3ZmZmZmZmZikiKTsKIAogZGVidWcoIiIpCiBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50
cy1vdXQtb2YtYm91bmRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA2MjI3MykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXct
ZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDcgKzIxLDEwIEBAIFBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkcKIFBB
U1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250ZXh0LlVO
U0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxV
RS4KIFBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRl
eHQuVU5TSUdORURfQllURSwgLTEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJ
RF9WQUxVRS4KIFBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0x
LCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDEpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjog
SU5WQUxJRF9WQUxVRS4KLVBBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdM
RVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgNCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVy
cm9yOiBOT19FUlJPUi4KK1BBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdM
RVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgNCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVy
cm9yOiBJTlZBTElEX09QRVJBVElPTi4KK1BBU1MgY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4
dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LmRyYXdF
bGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9C
WVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgor
UEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwg
Y29udGV4dC5VTlNJR05FRF9CWVRFLCAweDdmZmZmZmZmKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wg
ZXJyb3I6IElOVkFMSURfT1BFUkFUSU9OLgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMt
b3V0LW9mLWJvdW5kcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy5odG1sCShyZXZpc2lvbiA2MjI3MykK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJv
dW5kcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0NywxMCBAQCBzaG91bGRHZW5lcmF0
ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JCiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4
dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5U
UklBTkdMRVMsIC0xLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIik7CiBzaG91bGRHZW5lcmF0
ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3RWxl
bWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgLTEpIik7
CiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAi
Y29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIC0xLCBjb250ZXh0LlVOU0lH
TkVEX0JZVEUsIDEpIik7Ci1zaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5O
T19FUlJPUiwgImNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCBjb250
ZXh0LlVOU0lHTkVEX0JZVEUsIDQpIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwg
Y29udGV4dC5JTlZBTElEX09QRVJBVElPTiwgImNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQu
VFJJQU5HTEVTLCAwLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDQpIik7CitzaG91bGRHZW5lcmF0
ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3RWxl
bWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllU
RSwgMCkiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURf
T1BFUkFUSU9OLCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDB4N2Zm
ZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJv
cihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OLCAiY29udGV4dC5kcmF3RWxlbWVu
dHMoY29udGV4dC5UUklBTkdMRVMsIDB4N2ZmZmZmZmYsIGNvbnRleHQuVU5TSUdORURfQllURSwg
MHg3ZmZmZmZmZikiKTsKIAogZGVidWcoIiIpCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="47826"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="47824"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60382</attachid>
            <date>2010-07-02 11:18:26 -0700</date>
            <delta_ts>2010-07-02 12:24:21 -0700</delta_ts>
            <desc>revised patch: resolve a svn merge conflict</desc>
            <filename>overflow.patch</filename>
            <type>text/plain</type>
            <size>40903</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjMwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDctMDEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaXNz
dWVzIGluIGJvdW5kYXJ5IHNpdHVhdGlvbnMgZm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0FycmF5cy9kcmF3RWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQxNDczCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBDaGVja2Vk
SW50LmguCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQg
Q2hlY2tlZEludC5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NoZWNrZWRJbnQuaDogQWRkZWQg
c3VwcG9ydCBvZiBzYWZlIGludGVnZXIgb3BlcmF0aW9ucy4KKyAgICAgICAgKG1vemlsbGE6OkNo
ZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZvOjop
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfdW5zdXBwb3J0ZWRf
dHlwZTo6KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6Oik6CisgICAg
ICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppbnRlZ2VyX3RyYWl0czo6KToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmludGVnZXJfdHJhaXRzOjptaW4p
OgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aW50ZWdlcl90cmFpdHM6
Om1heCk6CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjpoYXNfc2lnbl9i
aXQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6YmluYXJ5X2NvbXBs
ZW1lbnQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfaW5fcmFu
Z2UpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfYWRkX3ZhbGlk
KToKKyAgICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnRfaW50ZXJuYWw6OmlzX3N1Yl92YWxpZCk6
CisgICAgICAgIChtb3ppbGxhOjpDaGVja2VkSW50X2ludGVybmFsOjppc19tdWxfdmFsaWQpOgor
ICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludF9pbnRlcm5hbDo6aXNfZGl2X3ZhbGlkKToKKyAg
ICAgICAgKG1vemlsbGE6OkNoZWNrZWRJbnQ6OkNoZWNrZWRJbnQpOgorICAgICAgICAobW96aWxs
YTo6Q2hlY2tlZEludDo6dmFsdWUpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6dmFs
aWQpOgorICAgICAgICAobW96aWxsYTo6Q2hlY2tlZEludDo6b3BlcmF0b3IgLSk6CisgICAgICAg
IChtb3ppbGxhOjpDaGVja2VkSW50OjpvcGVyYXRvciA9PSk6CisgICAgICAgIChtb3ppbGxhOjpD
aGVja2VkSW50OjpvcGVyYXRvciAhPSk6CisgICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciAvKToK
KyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludF9pbXBsOjpydW4pOgorICAgICAg
ICAobW96aWxsYTo6KToKKyAgICAgICAgKG1vemlsbGE6OmNhc3RfdG9fQ2hlY2tlZEludCk6Cisg
ICAgICAgIChtb3ppbGxhOjpvcGVyYXRvciA9PSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKTogRml4IGEgYnVnIGFnYWlu
c3QgMC1zaXplIGJ1ZmZlciBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBEZWFsIHdpdGggb3ZlcmZsb3dzIGFuZCBjb3VudD09
MCBzaXR1YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdFbGVtZW50cyk6IERlYWwgd2l0aCBjb3VudD09MCBzaXR1YXRpb24uCisKIDIwMTAtMDctMDEg
IEFuZHJlYXMgS2xpbmcgIDxhbmRyZWFzLmtsaW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYyMjczKQorKysgV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE0NTksNiArMTQ1OSw3IEBACiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvVWludDE2QXJyYXkuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9VaW50
MTZBcnJheS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DaGVja2VkSW50LmgnLAogICAg
ICAgICAgICAgJ2h0bWwvQ29sbGVjdGlvbkNhY2hlLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9D
b2xsZWN0aW9uQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9Db2xsZWN0aW9uVHlwZS5oJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2MjM5MSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzAwLDggKzIzMDAsNiBAQAogCQk4OUNEMDI5MzExQzg1Qjg3MDA3
MEI3OTEgLyogSlNCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4OUNEMDI5MTExQzg1Qjg3MDA3MEI3OTEgLyogSlNCbG9iQnVpbGRl
ci5jcHAgKi87IH07CiAJCTg5Q0QwMjk0MTFDODVCODcwMDcwQjc5MSAvKiBKU0Jsb2JCdWlsZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OUNEMDI5
MjExQzg1Qjg3MDA3MEI3OTEgLyogSlNCbG9iQnVpbGRlci5oICovOyB9OwogCQk4QTgxQkY4NTEx
RENGRDkwMDBEQTJCOTggLyogUmVzb3VyY2VMb2FkVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QTgxQkY4NDExRENGRDkwMDBEQTJCOTggLyog
UmVzb3VyY2VMb2FkVGltaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJOEE4NDRDRkUxMUQzQzE3QzAwMTQwNjVDIC8qIE5hdmlnYXRpb25UaW1p
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEE4
NDRDRkIxMUQzQzE3QzAwMTQwNjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuY3BwICovOyB9OwotCQk4
QTg0NENGRjExRDNDMTdDMDAxNDA2NUMgLyogTmF2aWdhdGlvblRpbWluZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEE4NDRDRkMxMUQzQzE3QzAwMTQw
NjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuaCAqLzsgfTsKIAkJOEE4NDREMDQxMUQzQzE4RTAwMTQw
NjVDIC8qIFBlcmZvcm1hbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhBODQ0RDAxMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5jcHAg
Ki87IH07CiAJCThBODQ0RDA1MTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEE4NDREMDIxMUQzQzE4
RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmggKi87IH07CiAJCThBRjRFNTU1MTFEQzVBMzYwMDBF
RDNERSAvKiBOYXZpZ2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhBRjRFNTUyMTFEQzVBMzYwMDBFRDNERSAvKiBOYXZpZ2F0aW9uLmNwcCAq
LzsgfTsKQEAgLTI2MTMsNiArMjYxMSw3IEBACiAJCTlGRkUzRTdCMTFCNTlDNUQwMDM3ODc0RSAv
KiBNZW1vcnlJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5RkZFM0U3OTExQjU5QzVEMDAzNzg3NEUgLyogTWVtb3J5SW5mby5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlGRkUzRUE1MTFCNUE0Mzkw
MDM3ODc0RSAvKiBKU01lbW9yeUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUZGRTNFQTMxMUI1QTQzOTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5m
by5jcHAgKi87IH07CiAJCTlGRkUzRUE2MTFCNUE0MzkwMDM3ODc0RSAvKiBKU01lbW9yeUluZm8u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGRkUzRUE0
MTFCNUE0MzkwMDM3ODc0RSAvKiBKU01lbW9yeUluZm8uaCAqLzsgfTsKKwkJQTAwQjcyMUExMURF
NjQyODAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEEwMEI3MjE5MTFERTY0MjcwMDhBQjlGRiAvKiBDaGVja2VkSW50
LmggKi87IH07CiAJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMTM2QTAwQTExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwICovOyB9OwogCQlBMTM2QTAwRDExMzREQkQyMDBDQzhE
NTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMzZBMDBCMTEzNERCRDIwMENDOEQ1
MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oICovOyB9OwogCQlBMTdD
ODEyMjBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExN0M4MTIwMEYyQTVDRjcwMDVE
QUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuY3BwICovOyB9OwpAQCAtNzk3OCw5ICs3OTc3LDYg
QEAKIAkJODlDRDAyOTExMUM4NUI4NzAwNzBCNzkxIC8qIEpTQmxvYkJ1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCbG9iQnVpbGRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5Q0QwMjkyMTFDODVCODcwMDcwQjc5MSAvKiBKU0Js
b2JCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmxvYkJ1aWxk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEE4MUJGODQxMURDRkQ5MDAwREEy
Qjk4IC8qIFJlc291cmNlTG9hZFRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNvdXJjZUxvYWRUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OEE4NDRDRkIxMUQzQzE3QzAwMTQwNjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdGlvblRpbWluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThBODQ0Q0ZDMTFEM0MxN0MwMDE0MDY1QyAvKiBOYXZp
Z2F0aW9uVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRp
b25UaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEE4NDRDRkQxMUQzQzE3
QzAwMTQwNjVDIC8qIE5hdmlnYXRpb25UaW1pbmcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IE5hdmlnYXRpb25UaW1pbmcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTg0
NEQwMTExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGVyZm9ybWFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4QTg0NEQwMjExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9ybWFuY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOEE4NDREMDMxMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04Mjc3LDYgKzgyNzMsNyBAQAogCQk5RkZFM0U3QzExQjU5QzZF
MDAzNzg3NEUgLyogTWVtb3J5SW5mby5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVtb3J5
SW5mby5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGRkUzRUEzMTFCNUE0Mzkw
MDM3ODc0RSAvKiBKU01lbW9yeUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZW1vcnlJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OUZGRTNFQTQxMUI1QTQzOTAwMzc4NzRFIC8qIEpTTWVtb3J5SW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU01lbW9yeUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTAwQjcyMTkxMURFNjQyNzAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2hlY2tlZEludC5oOyBwYXRoID0gY2FudmFzL0No
ZWNrZWRJbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEzNkEwMEExMTM0REJE
MjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEzNkEwMEIx
MTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudFRocm90dGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExN0M4MTIwMEYy
QTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1lbnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTExNTkyLDYgKzExNTg5LDcgQEAKIAkJNDk0ODRGQUUxMDJDRjAx
RTAwMTg3REQzIC8qIGNhbnZhcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJQTAwQjcyMTkxMURFNjQyNzAwOEFCOUZGIC8qIENoZWNrZWRJbnQuaCAqLywK
IAkJCQk0OUVFQ0RDQTEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuY3BwICovLAogCQkJ
CTQ5RUVDRENCMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5oICovLAogCQkJCTQ5RUVD
RENDMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwgKi8sCkBAIC0xOTY5OCw2ICsx
OTY5Niw3IEBACiAJCQkJOEE4MUJGODUxMURDRkQ5MDAwREEyQjk4IC8qIFJlc291cmNlTG9hZFRp
bWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEFGNEU1NTYxMURDNUEzNjAwMEVEM0RFIC8qIE5h
dmlnYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCThBRjRFNTVDMTFEQzVBNjMwMDBFRDNERSAv
KiBUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUEwMEI3MjFBMTFERTY0MjgwMDhBQjlGRiAv
KiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2hlY2tlZEludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2hlY2tlZElu
dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DaGVja2VkSW50LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTI3IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6
IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotICovCisvKiB2
aW06c2V0IHRzPTIgc3c9MiBzdHM9MiBldCBjaW5kZW50OiAqLworLyogKioqKiogQkVHSU4gTElD
RU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisg
KgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxs
YSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93
d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhl
IExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBh
bmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIE1vemlsbGEgY29kZS4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2Yg
dGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE1vemlsbGEgQ29ycG9yYXRpb24uCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA5
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKiAgQmVub2l0IEphY29iIDxiamFjb2JAbW96aWxsYS5jb20+Cisg
KiAgSmVmZiBNdWl6ZWxhYXIgPGptdWl6ZWxhYXJAbW96aWxsYS5jb20+CisgKgorICogQWx0ZXJu
YXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUg
dGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxp
Y2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBv
ZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8K
KyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
TVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9u
cyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHBy
b3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBk
ZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRo
ZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxP
Q0sgKioqKiogKi8KKworLy8gTmVjZXNzYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gdGhl
IG9yaWdpbmFsIENoZWNrZWRJbnQuaCBmaWxlIHRvIHJlbW92ZQorLy8gZGVwZW5kZW5jaWVzIG9u
IHBydHlwZXMuCisvLyBBbHNvLCBjaGFuZ2UgZGVmaW5lIE1vemlsbGFfQ2hlY2tlZEludF9oIHRv
IENoZWNrZWRJbnRfaCwgY2hhbmdlIG5hbWVzcGFjZQorLy8gZnJvbSBtb3ppbGxhIHRvIFdlYkNv
cmUgZm9yIGVhc2llciB1c2FnZS4KKworI2lmbmRlZiBDaGVja2VkSW50X2gKKyNkZWZpbmUgQ2hl
Y2tlZEludF9oCisKKyNpbmNsdWRlIDxjbGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBDaGVja2VkSW50X2ludGVybmFsIHsKKworLyogd2UgZG9uJ3Qgd2FudCB0byB1
c2Ugc3RkOjpudW1lcmljX2xpbWl0cyBoZXJlIGJlY2F1c2UgaW50Li4uIHR5cGVzIG1heSBub3Qg
c3VwcG9ydCBpdCwKKyAqIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIGUuZy4gb24gY2VydGFp
biBwbGF0Zm9ybSB0aGV5IHVzZSBub25zdGFuZGFyZCBidWlsdC1pbiB0eXBlcworICovCisKKy8q
KiogU3RlcCAxOiBtYW51YWxseSByZWNvcmQgaW5mb3JtYXRpb24gZm9yIGFsbCB0aGUgdHlwZXMg
dGhhdCB3ZSB3YW50IHRvIHN1cHBvcnQKKyAqKiovCisKK3N0cnVjdCB1bnN1cHBvcnRlZF90eXBl
IHt9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgaW50ZWdlcl90eXBlX21hbnVhbGx5
X3JlY29yZGVkX2luZm8KK3sKKyAgICBlbnVtIHsgaXNfc3VwcG9ydGVkID0gMCB9OworICAgIHR5
cGVkZWYgdW5zdXBwb3J0ZWRfdHlwZSB0d2ljZV9iaWdnZXJfdHlwZTsKK307CisKKworI2RlZmlu
ZSBDSEVDS0VESU5UX1JFR0lTVEVSX1NVUFBPUlRFRF9UWVBFKFQsX3R3aWNlX2JpZ2dlcl90eXBl
KSAgXAordGVtcGxhdGU8PiBzdHJ1Y3QgaW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2lu
Zm88VD4gICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVudW0geyBpc19zdXBwb3J0ZWQgPSAxIH07ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHR5cGVkZWYgX3R3aWNlX2JpZ2dl
cl90eXBlIHR3aWNlX2JpZ2dlcl90eXBlOyAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyB2b2lk
IFRZUEVfTk9UX1NVUFBPUlRFRF9CWV9DaGVja2VkSW50KCkge30gICAgICAgICAgICAgXAorfTsK
KworQ0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQRShpbnQ4X3QsICAgaW50MTZfdCkK
K0NIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUodWludDhfdCwgIHVpbnQxNl90KQor
Q0hFQ0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQRShpbnQxNl90LCAgaW50MzJfdCkKK0NI
RUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUodWludDE2X3QsIHVpbnQzMl90KQorQ0hF
Q0tFRElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQRShpbnQzMl90LCAgaW50NjRfdCkKK0NIRUNL
RURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUodWludDMyX3QsIHVpbnQ2NF90KQorQ0hFQ0tF
RElOVF9SRUdJU1RFUl9TVVBQT1JURURfVFlQRShpbnQ2NF90LCAgdW5zdXBwb3J0ZWRfdHlwZSkK
K0NIRUNLRURJTlRfUkVHSVNURVJfU1VQUE9SVEVEX1RZUEUodWludDY0X3QsIHVuc3VwcG9ydGVk
X3R5cGUpCisKKworLyoqKiBTdGVwIDI6IHJlY29yZCBzb21lIGluZm8gYWJvdXQgYSBnaXZlbiBp
bnRlZ2VyIHR5cGUsCisgKioqICAgICAgICAgaW5jbHVkaW5nIHdoZXRoZXIgaXQgaXMgc3VwcG9y
dGVkLCB3aGV0aGVyIGEgdHdpY2UgYmlnZ2VyIGludGVnZXIgdHlwZQorICoqKiAgICAgICAgIGlz
IHN1cHBvcnRlZCwgd2hhdCB0aGF0IHR3aWNlIGJpZ2dlciB0eXBlIGlzLCBhbmQgc29tZSBzdHVm
ZiBhcyBmb3VuZAorICoqKiAgICAgICAgIGluIHN0ZDo6bnVtZXJpY19saW1pdHMgKHdoaWNoIHdl
IGRvbid0IHVzZSBiZWNhdXNlIGludC4uIHR5cGVzIG1heQorICoqKiAgICAgICAgIG5vdCBzdXBw
b3J0IGl0LCBpZiB0aGV5IGFyZSBkZWZpbmVkIGRpcmVjdGx5IGZyb20gY29tcGlsZXIgYnVpbHQt
aW4gdHlwZXMpLgorICoqKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGlzX3Vuc3Vw
cG9ydGVkX3R5cGUgeyBlbnVtIHsgYW5zd2VyID0gMCB9OyB9OwordGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfdW5zdXBwb3J0ZWRfdHlwZTx1bnN1cHBvcnRlZF90eXBlPiB7IGVudW0geyBhbnN3ZXIgPSAx
IH07IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBpbnRlZ2VyX3RyYWl0cworewor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88
VD46OnR3aWNlX2JpZ2dlcl90eXBlIHR3aWNlX2JpZ2dlcl90eXBlOworCisgICAgZW51bSB7Cisg
ICAgICAgIGlzX3N1cHBvcnRlZCA9IGludGVnZXJfdHlwZV9tYW51YWxseV9yZWNvcmRlZF9pbmZv
PFQ+Ojppc19zdXBwb3J0ZWQsCisgICAgICAgIHR3aWNlX2JpZ2dlcl90eXBlX2lzX3N1cHBvcnRl
ZAorICAgICAgICAgICAgPSBpc191bnN1cHBvcnRlZF90eXBlPAorICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgaW50ZWdlcl90eXBlX21hbnVhbGx5X3JlY29yZGVkX2luZm88VD46OnR3aWNlX2Jp
Z2dlcl90eXBlCisgICAgICAgICAgICAgID46OmFuc3dlciA/IDAgOiAxLAorICAgICAgICBzaXpl
ID0gc2l6ZW9mKFQpLAorICAgICAgICBwb3NpdGlvbl9vZl9zaWduX2JpdCA9IENIQVJfQklUICog
c2l6ZSAtIDEsCisgICAgICAgIGlzX3NpZ25lZCA9IChUKC0xKSA+IFQoMCkpID8gMCA6IDEKKyAg
ICB9OworCisgICAgc3RhdGljIFQgbWluKCkKKyAgICB7CisgICAgICAgIC8vIGJpdHdpc2Ugb3Bz
IG1heSByZXR1cm4gYSBsYXJnZXIgdHlwZSwgdGhhdCdzIHdoeSB3ZSBjYXN0IGV4cGxpY2l0bHkg
dG8gVAorICAgICAgICByZXR1cm4gaXNfc2lnbmVkID8gVChUKDEpIDw8IHBvc2l0aW9uX29mX3Np
Z25fYml0KSA6IFQoMCk7CisgICAgfQorCisgICAgc3RhdGljIFQgbWF4KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB+bWluKCk7CisgICAgfQorfTsKKworLyoqKiBTdGVwIDM6IEltcGxlbWVudCB0
aGUgYWN0dWFsIHZhbGlkaXR5IGNoZWNrcyAtLS0gaWRlYXMgdGFrZW4gZnJvbSBJbnRlZ2VyTGli
LCBjb2RlIGRpZmZlcmVudC4KKyAqKiovCisKKy8vIGJpdHdpc2Ugb3BzIG1heSByZXR1cm4gYSBs
YXJnZXIgdHlwZSwgc28gaXQncyBnb29kIHRvIHVzZSB0aGVzZSBpbmxpbmUgaGVscGVycyBndWFy
YW50ZWVpbmcgdGhhdAorLy8gdGhlIHJlc3VsdCBpcyByZWFsbHkgb2YgdHlwZSBUCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGhhc19zaWduX2JpdChUIHgpCit7CisgICAgcmV0dXJu
IHggPj4gaW50ZWdlcl90cmFpdHM8VD46OnBvc2l0aW9uX29mX3NpZ25fYml0OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBiaW5hcnlfY29tcGxlbWVudChUIHgpCit7CisgICAg
cmV0dXJuIH54OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLAorICAgICAg
ICAgYm9vbCBpc19UX3NpZ25lZCA9IGludGVnZXJfdHJhaXRzPFQ+Ojppc19zaWduZWQsCisgICAg
ICAgICBib29sIGlzX1Vfc2lnbmVkID0gaW50ZWdlcl90cmFpdHM8VT46OmlzX3NpZ25lZD4KK3N0
cnVjdCBpc19pbl9yYW5nZV9pbXBsIHt9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPgorc3RydWN0IGlzX2luX3JhbmdlX2ltcGw8VCwgVSwgdHJ1ZSwgdHJ1ZT4KK3sKKyAgICBz
dGF0aWMgVCBydW4oVSB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuICh4IDw9IGludGVnZXJfdHJh
aXRzPFQ+OjptYXgoKSkgJgorICAgICAgICAgICAgICAgKHggPj0gaW50ZWdlcl90cmFpdHM8VD46
Om1pbigpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgor
c3RydWN0IGlzX2luX3JhbmdlX2ltcGw8VCwgVSwgZmFsc2UsIGZhbHNlPgoreworICAgIHN0YXRp
YyBUIHJ1bihVIHgpCisgICAgeworICAgICAgICByZXR1cm4geCA8PSBpbnRlZ2VyX3RyYWl0czxU
Pjo6bWF4KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
K3N0cnVjdCBpc19pbl9yYW5nZV9pbXBsPFQsIFUsIHRydWUsIGZhbHNlPgoreworICAgIHN0YXRp
YyBUIHJ1bihVIHgpCisgICAgeworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gc2l6ZW9mKFUpKQor
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB4
IDw9IFUoaW50ZWdlcl90cmFpdHM8VD46Om1heCgpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorc3RydWN0IGlzX2luX3JhbmdlX2ltcGw8VCwgVSwgZmFs
c2UsIHRydWU+Cit7CisgICAgc3RhdGljIFQgcnVuKFUgeCkKKyAgICB7CisgICAgICAgIGlmIChz
aXplb2YoVCkgPj0gc2l6ZW9mKFUpKQorICAgICAgICAgICAgcmV0dXJuIHggPj0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHggPj0gMCAmJiB4IDw9IFUoaW50ZWdlcl90cmFp
dHM8VD46Om1heCgpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgVCBpc19pbl9yYW5nZShVIHgpCit7CisgICAgcmV0dXJuIGlzX2luX3Jhbmdl
X2ltcGw8VCwgVT46OnJ1bih4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQg
aXNfYWRkX3ZhbGlkKFQgeCwgVCB5LCBUIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gaW50ZWdlcl90
cmFpdHM8VD46OmlzX3NpZ25lZCA/CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGRpdGlv
biBpcyB2YWxpZCBpZiB0aGUgc2lnbiBvZiB4K3kgaXMgZXF1YWwgdG8gZWl0aGVyIHRoYXQgb2Yg
eCBvciB0aGF0IG9mIHkuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZXdhcmUhIFRoZXNl
IGJpdHdpc2Ugb3BlcmF0aW9ucyBjYW4gcmV0dXJuIGEgbGFyZ2VyIGludGVnZXIgdHlwZSwgaWYg
VCB3YXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc21hbGwgdHlwZSBsaWtlIGludDgs
IHNvIHdlIGV4cGxpY2l0bHkgY2FzdCB0byBULgorICAgICAgICAgICAgICAgICAgICAgICAgaGFz
X3NpZ25fYml0KGJpbmFyeV9jb21wbGVtZW50KFQoKHJlc3VsdF54KSAmIChyZXN1bHReeSkpKSkK
KyAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5X2Nv
bXBsZW1lbnQoeCkgPj0geTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgaXNf
c3ViX3ZhbGlkKFQgeCwgVCB5LCBUIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gaW50ZWdlcl90cmFp
dHM8VD46OmlzX3NpZ25lZCA/CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWJzdHJhY3Rp
b24gaXMgdmFsaWQgaWYgZWl0aGVyIHggYW5kIHkgaGF2ZSBzYW1lIHNpZ24sIG9yIHgteSBhbmQg
eCBoYXZlIHNhbWUgc2lnbgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzX3NpZ25fYml0KGJp
bmFyeV9jb21wbGVtZW50KFQoKHJlc3VsdF54KSAmICh4XnkpKSkpCisgICAgICAgICAgICAgICAg
ICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPj0geTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwKKyAgICAgICAgIGJvb2wgaXNfc2lnbmVkID0gIGludGVnZXJfdHJhaXRzPFQ+Ojpp
c19zaWduZWQsCisgICAgICAgICBib29sIHR3aWNlX2JpZ2dlcl90eXBlX2lzX3N1cHBvcnRlZCA9
IGludGVnZXJfdHJhaXRzPFQ+Ojp0d2ljZV9iaWdnZXJfdHlwZV9pc19zdXBwb3J0ZWQ+CitzdHJ1
Y3QgaXNfbXVsX3ZhbGlkX2ltcGwge307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
aXNfbXVsX3ZhbGlkX2ltcGw8VCwgdHJ1ZSwgdHJ1ZT4KK3sKKyAgICBzdGF0aWMgVCBydW4oVCB4
LCBUIHkpCisgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGludGVnZXJfdHJhaXRzPFQ+
Ojp0d2ljZV9iaWdnZXJfdHlwZSB0d2ljZV9iaWdnZXJfdHlwZTsKKyAgICAgICAgdHdpY2VfYmln
Z2VyX3R5cGUgcHJvZHVjdCA9IHR3aWNlX2JpZ2dlcl90eXBlKHgpICogdHdpY2VfYmlnZ2VyX3R5
cGUoeSk7CisgICAgICAgIHJldHVybiBpc19pbl9yYW5nZTxUPihwcm9kdWN0KTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IGlzX211bF92YWxpZF9pbXBsPFQsIGZh
bHNlLCB0cnVlPgoreworICAgIHN0YXRpYyBUIHJ1bihUIHgsIFQgeSkKKyAgICB7CisgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaW50ZWdlcl90cmFpdHM8VD46OnR3aWNlX2JpZ2dlcl90eXBlIHR3
aWNlX2JpZ2dlcl90eXBlOworICAgICAgICB0d2ljZV9iaWdnZXJfdHlwZSBwcm9kdWN0ID0gdHdp
Y2VfYmlnZ2VyX3R5cGUoeCkgKiB0d2ljZV9iaWdnZXJfdHlwZSh5KTsKKyAgICAgICAgcmV0dXJu
IGlzX2luX3JhbmdlPFQ+KHByb2R1Y3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgaXNfbXVsX3ZhbGlkX2ltcGw8VCwgdHJ1ZSwgZmFsc2U+Cit7CisgICAgc3Rh
dGljIFQgcnVuKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgY29uc3QgVCBtYXhfdmFsdWUgPSBp
bnRlZ2VyX3RyYWl0czxUPjo6bWF4KCk7CisgICAgICAgIGNvbnN0IFQgbWluX3ZhbHVlID0gaW50
ZWdlcl90cmFpdHM8VD46Om1pbigpOworCisgICAgICAgIGlmICh4ID09IDAgfHwgeSA9PSAwKSBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoeCA+IDApIHsKKyAgICAgICAgICAgIGlmICh5ID4g
MCkKKyAgICAgICAgICAgICAgICByZXR1cm4geCA8PSBtYXhfdmFsdWUgLyB5OworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB5ID49IG1pbl92YWx1ZSAvIHg7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoeSA+IDApCisgICAgICAgICAgICAgICAgcmV0
dXJuIHggPj0gbWluX3ZhbHVlIC8geTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXR1cm4geSA+PSBtYXhfdmFsdWUgLyB4OworICAgICAgICB9CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBpc19tdWxfdmFsaWRfaW1wbDxULCBmYWxzZSwgZmFs
c2U+Cit7CisgICAgc3RhdGljIFQgcnVuKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgY29uc3Qg
VCBtYXhfdmFsdWUgPSBpbnRlZ2VyX3RyYWl0czxUPjo6bWF4KCk7CisgICAgICAgIGlmICh4ID09
IDAgfHwgeSA9PSAwKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHggPD0gbWF4X3ZhbHVl
IC8geTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBpc19tdWxf
dmFsaWQoVCB4LCBUIHksIFQgLypyZXN1bHQgbm90IHVzZWQqLykKK3sKKyAgICByZXR1cm4gaXNf
bXVsX3ZhbGlkX2ltcGw8VD46OnJ1bih4LCB5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFQgaXNfZGl2X3ZhbGlkKFQgeCwgVCB5KQoreworICAgIHJldHVybiBpbnRlZ2VyX3Ry
YWl0czxUPjo6aXNfc2lnbmVkID8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgaW4g
bWluZCB0aGF0IG1pbi8tMSBpcyBpbnZhbGlkIGJlY2F1c2UgYWJzKG1pbik+bWF4CisgICAgICAg
ICAgICAgICAgICAgICAgICB5ICE9IDAgJiYgKHggIT0gaW50ZWdlcl90cmFpdHM8VD46Om1pbigp
IHx8IHkgIT0gVCgtMSkpCisgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHkgIT0gMDsKK30KKworfSAvLyBlbmQgbmFtZXNwYWNlIENoZWNrZWRJbnRfaW50ZXJu
YWwKKworCisvKioqIFN0ZXAgNDogTm93IGRlZmluZSB0aGUgQ2hlY2tlZEludCBjbGFzcy4KKyAq
KiovCisKKy8qKiBcY2xhc3MgQ2hlY2tlZEludAorICAqIFxicmllZiBJbnRlZ2VyIHdyYXBwZXIg
Y2xhc3MgY2hlY2tpbmcgZm9yIGludGVnZXIgb3ZlcmZsb3cgYW5kIG90aGVyIGVycm9ycworICAq
IFxwYXJhbSBUIHRoZSBpbnRlZ2VyIHR5cGUgdG8gd3JhcC4gQ2FuIGJlIGFueSBvZiBpbnQ4X3Qs
IHVpbnQ4X3QsIGludDE2X3QsIHVpbnQxNl90LAorICAqICAgICAgICAgIGludDMyX3QsIHVpbnQz
Ml90LCBpbnQ2NF90LCB1aW50NjRfdC4KKyAgKgorICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBn
dWFyZGVkIGludGVnZXIgYXJpdGhtZXRpYy4gRG8gYSBjb21wdXRhdGlvbiwgdGhlbiBjaGVjayB0
aGF0CisgICogdmFsaWQoKSByZXR1cm5zIHRydWUsIHlvdSB0aGVuIGhhdmUgYSBndWFyYW50ZWUg
dGhhdCBubyBwcm9ibGVtLCBzdWNoIGFzIGludGVnZXIgb3ZlcmZsb3csCisgICogaGFwcGVuZWQg
ZHVyaW5nIHRoaXMgY29tcHV0YXRpb24uCisgICoKKyAgKiBUaGUgYXJpdGhtZXRpYyBvcGVyYXRv
cnMgaW4gdGhpcyBjbGFzcyBhcmUgZ3VhcmFudGVlZCBub3QgdG8gY3Jhc2ggeW91ciBhcHAKKyAg
KiBpbiBjYXNlIG9mIGEgZGl2aXNpb24gYnkgemVyby4KKyAgKgorICAqIEZvciBleGFtcGxlLCBz
dXBwb3NlIHRoYXQgeW91IHdhbnQgdG8gaW1wbGVtZW50IGEgZnVuY3Rpb24gdGhhdCBjb21wdXRl
cyAoeCt5KS96LAorICAqIHRoYXQgZG9lc24ndCBjcmFzaCBpZiB6PT0wLCBhbmQgdGhhdCByZXBv
cnRzIG9uIGVycm9yIChkaXZpZGUgYnkgemVybyBvciBpbnRlZ2VyIG92ZXJmbG93KS4KKyAgKiBZ
b3UgY291bGQgY29kZSBpdCBhcyBmb2xsb3dzOgorICAgIFxjb2RlCisgICAgYm9vbCBjb21wdXRl
X3hfcGx1c195X292ZXJfeihpbnQzMl90IHgsIGludDMyX3QgeSwgaW50MzJfdCB6LCBpbnQzMl90
ICpyZXN1bHQpCisgICAgeworICAgICAgICBDaGVja2VkSW50PGludDMyX3Q+IGNoZWNrZWRfcmVz
dWx0ID0gKENoZWNrZWRJbnQ8aW50MzJfdD4oeCkgKyB5KSAvIHo7CisgICAgICAgICpyZXN1bHQg
PSBjaGVja2VkX3Jlc3VsdC52YWx1ZSgpOworICAgICAgICByZXR1cm4gY2hlY2tlZF9yZXN1bHQu
dmFsaWQoKTsKKyAgICB9CisgICAgXGVuZGNvZGUKKyAgKgorICAqIEltcGxpY2l0IGNvbnZlcnNp
b24gZnJvbSBwbGFpbiBpbnRlZ2VycyB0byBjaGVja2VkIGludGVnZXJzIGlzIGFsbG93ZWQuIFRo
ZSBwbGFpbiBpbnRlZ2VyCisgICogaXMgY2hlY2tlZCB0byBiZSBpbiByYW5nZSBiZWZvcmUgYmVp
bmcgY2FzdGVkIHRvIHRoZSBkZXN0aW5hdGlvbiB0eXBlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZv
bGxvd2luZworICAqIGxpbmVzIGFsbCBjb21waWxlLCBhbmQgdGhlIHJlc3VsdGluZyBDaGVja2Vk
SW50cyBhcmUgY29ycmVjdGx5IGRldGVjdGVkIGFzIHZhbGlkIG9yIGludmFsaWQ6CisgICogXGNv
ZGUKKyAgICBDaGVja2VkSW50PHVpbnQ4X3Q+IHgoMSk7ICAgLy8gMSBpcyBvZiB0eXBlIGludCwg
aXMgZm91bmQgdG8gYmUgaW4gcmFuZ2UgZm9yIHVpbnQ4X3QsIHggaXMgdmFsaWQKKyAgICBDaGVj
a2VkSW50PHVpbnQ4X3Q+IHgoLTEpOyAgLy8gLTEgaXMgb2YgdHlwZSBpbnQsIGlzIGZvdW5kIG5v
dCB0byBiZSBpbiByYW5nZSBmb3IgdWludDhfdCwgeCBpcyBpbnZhbGlkCisgICAgQ2hlY2tlZElu
dDxpbnQ4X3Q+IHgoLTEpOyAgIC8vIC0xIGlzIG9mIHR5cGUgaW50LCBpcyBmb3VuZCB0byBiZSBp
biByYW5nZSBmb3IgaW50OF90LCB4IGlzIHZhbGlkCisgICAgQ2hlY2tlZEludDxpbnQ4X3Q+IHgo
aW50MTZfdCgxMDAwKSk7IC8vIDEwMDAgaXMgb2YgdHlwZSBpbnQxNl90LCBpcyBmb3VuZCBub3Qg
dG8gYmUgaW4gcmFuZ2UgZm9yIGludDhfdCwgeCBpcyBpbnZhbGlkCisgICAgQ2hlY2tlZEludDxp
bnQzMl90PiB4KHVpbnQzMl90KDEyMzQ1Njc4OSkpOyAvLyAzMTIzNDU2Nzg5IGlzIG9mIHR5cGUg
dWludDMyX3QsIGlzIGZvdW5kIG5vdCB0byBiZSBpbiByYW5nZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGludDMyX3QsIHggaXMgaW52YWxpZAor
ICAqIFxlbmRjb2RlCisgICogSW1wbGljaXQgY29udmVyc2lvbiBmcm9tCisgICogY2hlY2tlZCBp
bnRlZ2VycyB0byBwbGFpbiBpbnRlZ2VycyBpcyBub3QgYWxsb3dlZC4gQXMgc2hvd24gaW4gdGhl
CisgICogYWJvdmUgZXhhbXBsZSwgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBhIGNoZWNrZWQgaW50ZWdl
ciBhcyBhIG5vcm1hbCBpbnRlZ2VyLCBjYWxsIHZhbHVlKCkuCisgICoKKyAgKiBBcml0aG1ldGlj
IG9wZXJhdGlvbnMgYmV0d2VlbiBjaGVja2VkIGFuZCBwbGFpbiBpbnRlZ2VycyBpcyBhbGxvd2Vk
OyB0aGUgcmVzdWx0IHR5cGUKKyAgKiBpcyB0aGUgdHlwZSBvZiB0aGUgY2hlY2tlZCBpbnRlZ2Vy
LgorICAqCisgICogU2FmZSBpbnRlZ2VycyBvZiBkaWZmZXJlbnQgdHlwZXMgY2Fubm90IGJlIHVz
ZWQgaW4gdGhlIHNhbWUgYXJpdGhtZXRpYyBleHByZXNzaW9uLgorICAqLwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIENoZWNrZWRJbnQKK3sKK3Byb3RlY3RlZDoKKyAgICBUIG1WYWx1ZTsK
KyAgICBUIG1Jc1ZhbGlkOyAvLyBzdG9yZWQgYXMgYSBUIHRvIGxpbWl0IHRoZSBudW1iZXIgb2Yg
aW50ZWdlciBjb252ZXJzaW9ucyB3aGVuCisgICAgICAgICAgICAgICAgLy8gZXZhbHVhdGluZyBu
ZXN0ZWQgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgQ2hlY2tlZEludChjb25zdCBVJiB2YWx1ZSwgYm9vbCBpc1ZhbGlkKSA6IG1WYWx1ZSh2
YWx1ZSksIG1Jc1ZhbGlkKGlzVmFsaWQpCisgICAgeworICAgICAgICBDaGVja2VkSW50X2ludGVy
bmFsOjppbnRlZ2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRfaW5mbzxUPgorICAgICAgICAgICAg
OjpUWVBFX05PVF9TVVBQT1JURURfQllfQ2hlY2tlZEludCgpOworICAgIH0KKworcHVibGljOgor
ICAgIC8qKiBDb25zdHJ1Y3RzIGEgY2hlY2tlZCBpbnRlZ2VyIHdpdGggZ2l2ZW4gXGEgdmFsdWUu
IFRoZSBjaGVja2VkIGludGVnZXIgaXMgaW5pdGlhbGl6ZWQgYXMgdmFsaWQgb3IgaW52YWxpZAor
ICAgICAgKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgXGEgdmFsdWUgaXMgaW4gcmFuZ2UuCisg
ICAgICAqCisgICAgICAqIFRoaXMgY29uc3RydWN0b3IgaXMgbm90IGV4cGxpY2l0LiBJbnN0ZWFk
LCB0aGUgdHlwZSBvZiBpdHMgYXJndW1lbnQgaXMgYSBzZXBhcmF0ZSB0ZW1wbGF0ZSBwYXJhbWV0
ZXIsCisgICAgICAqIGVuc3VyaW5nIHRoYXQgbm8gY29udmVyc2lvbiBpcyBwZXJmb3JtZWQgYmVm
b3JlIHRoaXMgY29uc3RydWN0b3IgaXMgYWN0dWFsbHkgY2FsbGVkLgorICAgICAgKiBBcyBleHBs
YWluZWQgaW4gdGhlIGFib3ZlIGRvY3VtZW50YXRpb24gZm9yIGNsYXNzIENoZWNrZWRJbnQsIHRo
aXMgY29uc3RydWN0b3IgY2hlY2tzIHRoYXQgaXRzIGFyZ3VtZW50IGlzCisgICAgICAqIHZhbGlk
LgorICAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIENoZWNrZWRJbnQoY29u
c3QgVSYgdmFsdWUpCisgICAgICAgIDogbVZhbHVlKHZhbHVlKSwKKyAgICAgICAgICBtSXNWYWxp
ZChDaGVja2VkSW50X2ludGVybmFsOjppc19pbl9yYW5nZTxUPih2YWx1ZSkpCisgICAgeworICAg
ICAgICBDaGVja2VkSW50X2ludGVybmFsOjppbnRlZ2VyX3R5cGVfbWFudWFsbHlfcmVjb3JkZWRf
aW5mbzxUPgorICAgICAgICAgICAgOjpUWVBFX05PVF9TVVBQT1JURURfQllfQ2hlY2tlZEludCgp
OworICAgIH0KKworICAgIC8qKiBDb25zdHJ1Y3RzIGEgdmFsaWQgY2hlY2tlZCBpbnRlZ2VyIHdp
dGggdW5pbml0aWFsaXplZCB2YWx1ZSAqLworICAgIENoZWNrZWRJbnQoKSA6IG1Jc1ZhbGlkKDEp
CisgICAgeworICAgICAgICBDaGVja2VkSW50X2ludGVybmFsOjppbnRlZ2VyX3R5cGVfbWFudWFs
bHlfcmVjb3JkZWRfaW5mbzxUPgorICAgICAgICAgICAgOjpUWVBFX05PVF9TVVBQT1JURURfQllf
Q2hlY2tlZEludCgpOworICAgIH0KKworICAgIC8qKiBccmV0dXJucyB0aGUgYWN0dWFsIHZhbHVl
ICovCisgICAgVCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1WYWx1ZTsgfQorCisgICAgLyoqIFxy
ZXR1cm5zIHRydWUgaWYgdGhlIGNoZWNrZWQgaW50ZWdlciBpcyB2YWxpZCwgaS5lLiBpcyBub3Qg
dGhlIHJlc3VsdAorICAgICAgKiBvZiBhbiBpbnZhbGlkIG9wZXJhdGlvbiBvciBvZiBhbiBvcGVy
YXRpb24gaW52b2x2aW5nIGFuIGludmFsaWQgY2hlY2tlZCBpbnRlZ2VyCisgICAgICAqLworICAg
IGJvb2wgdmFsaWQoKSBjb25zdCB7IHJldHVybiBtSXNWYWxpZDsgfQorCisgICAgLyoqIFxyZXR1
cm5zIHRoZSBzdW0uIENoZWNrcyBmb3Igb3ZlcmZsb3cuICovCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gZnJpZW5kIENoZWNrZWRJbnQ8VT4gb3BlcmF0b3IgKyhjb25zdCBDaGVja2VkSW50PFU+
JiBsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VT4mIHJocyk7CisgICAgLyoqIEFkZHMuIENoZWNrcyBm
b3Igb3ZlcmZsb3cuIFxyZXR1cm5zIHNlbGYgcmVmZXJlbmNlICovCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gQ2hlY2tlZEludCYgb3BlcmF0b3IgKz0oY29uc3QgVSAmcmhzKTsKKyAgICAvKiog
XHJldHVybnMgdGhlIGRpZmZlcmVuY2UuIENoZWNrcyBmb3Igb3ZlcmZsb3cuICovCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gZnJpZW5kIENoZWNrZWRJbnQ8VT4gb3BlcmF0b3IgLShjb25zdCBD
aGVja2VkSW50PFU+JiBsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VT4gJnJocyk7CisgICAgLyoqIFN1
YnN0cmFjdHMuIENoZWNrcyBmb3Igb3ZlcmZsb3cuIFxyZXR1cm5zIHNlbGYgcmVmZXJlbmNlICov
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2hlY2tlZEludCYgb3BlcmF0b3IgLT0oY29uc3Qg
VSAmcmhzKTsKKyAgICAvKiogXHJldHVybnMgdGhlIHByb2R1Y3QuIENoZWNrcyBmb3Igb3ZlcmZs
b3cuICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gZnJpZW5kIENoZWNrZWRJbnQ8VT4gb3Bl
cmF0b3IgKihjb25zdCBDaGVja2VkSW50PFU+JiBsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VT4gJnJo
cyk7CisgICAgLyoqIE11bHRpcGxpZXMuIENoZWNrcyBmb3Igb3ZlcmZsb3cuIFxyZXR1cm5zIHNl
bGYgcmVmZXJlbmNlICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ2hlY2tlZEludCYgb3Bl
cmF0b3IgKj0oY29uc3QgVSAmcmhzKTsKKyAgICAvKiogXHJldHVybnMgdGhlIHF1b3RpZW50LiBD
aGVja3MgZm9yIG92ZXJmbG93IGFuZCBmb3IgZGl2aWRlLWJ5LXplcm8uICovCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gZnJpZW5kIENoZWNrZWRJbnQ8VT4gb3BlcmF0b3IgLyhjb25zdCBDaGVj
a2VkSW50PFU+JiBsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VT4gJnJocyk7CisgICAgLyoqIERpdmlk
ZXMuIENoZWNrcyBmb3Igb3ZlcmZsb3cgYW5kIGZvciBkaXZpZGUtYnktemVyby4gXHJldHVybnMg
c2VsZiByZWZlcmVuY2UgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBDaGVja2VkSW50JiBv
cGVyYXRvciAvPShjb25zdCBVICZyaHMpOworCisgICAgLyoqIFxyZXR1cm5zIHRoZSBvcHBvc2l0
ZSB2YWx1ZS4gQ2hlY2tzIGZvciBvdmVyZmxvdy4gKi8KKyAgICBDaGVja2VkSW50IG9wZXJhdG9y
IC0oKSBjb25zdAorICAgIHsKKyAgICAgICAgVCByZXN1bHQgPSAtdmFsdWUoKTsKKyAgICAgICAg
LyogZ2l2ZSB0aGUgY29tcGlsZXIgYSBnb29kIGNoYW5jZSB0byBwZXJmb3JtIFJWTyAqLworICAg
ICAgICByZXR1cm4gQ2hlY2tlZEludChyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgIG1J
c1ZhbGlkICYgQ2hlY2tlZEludF9pbnRlcm5hbDo6aXNfc3ViX3ZhbGlkKFQoMCksIHZhbHVlKCks
IHJlc3VsdCkpOworICAgIH0KKworICAgIC8qKiBccmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IGFu
ZCByaWdodCBoYW5kIHNpZGVzIGFyZSB2YWxpZCBhbmQgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gKi8K
KyAgICBib29sIG9wZXJhdG9yID09KGNvbnN0IENoZWNrZWRJbnQmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJvb2wobUlzVmFsaWQgJiBvdGhlci5tSXNWYWxpZCAmIFQodmFs
dWUoKSA9PSBvdGhlci52YWx1ZSgpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIC8qKiBvcGVy
YXRvciE9IGlzIGRpc2FibGVkLiBJbmRlZWQ6IChhIT1iKSBzaG91bGQgYmUgdGhlIHNhbWUgYXMg
IShhPT1iKSBidXQgdGhhdAorICAgICAgKiB3b3VsZCBtZWFuIHRoYXQgaWYgYSBvciBiIGlzIGlu
dmFsaWQsIChhIT1iKSBpcyBhbHdheXMgdHJ1ZSwgd2hpY2ggaXMgdmVyeSB0cmlja3kuCisgICAg
ICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgYm9vbCBvcGVyYXRvciAhPShjb25z
dCBVJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KK307CisKKyNk
ZWZpbmUgQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1IoTkFNRSwgT1ApICAgICAgICAg
ICAgICAgXAordGVtcGxhdGU8dHlwZW5hbWUgVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCitpbmxpbmUgQ2hlY2tlZEludDxUPiBvcGVyYXRvciBPUChjb25zdCBD
aGVja2VkSW50PFQ+ICZsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VD4gJnJocykgXAoreyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgVCB4ID0gbGhzLnZhbHVlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBUIHkgPSByaHMudmFsdWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIFQgcmVzdWx0ID0geCBPUCB5OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgVCBpc19vcF92YWxpZCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgPSBDaGVja2VkSW50X2ludGVy
bmFsOjppc18jI05BTUUjI192YWxpZCh4LCB5LCByZXN1bHQpOyAgXAorICAgIC8qIGdpdmUgdGhl
IGNvbXBpbGVyIGEgZ29vZCBjaGFuY2UgdG8gcGVyZm9ybSBSVk8gKi8gICAgICBcCisgICAgcmV0
dXJuIENoZWNrZWRJbnQ8VD4ocmVzdWx0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICAgICAgICBsaHMubUlzVmFsaWQgJiAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHJocy5tSXNWYWxpZCAmICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgaXNfb3BfdmFsaWQpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllf
T1BFUkFUT1IoYWRkLCArKQorQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1Ioc3ViLCAt
KQorQ0hFQ0tFRElOVF9CQVNJQ19CSU5BUllfT1BFUkFUT1IobXVsLCAqKQorCisvLyBkaXZpc2lv
biBjYW4ndCBiZSBpbXBsZW1lbnRlZCBieSBDSEVDS0VESU5UX0JBU0lDX0JJTkFSWV9PUEVSQVRP
UgorLy8gYmVjYXVzZSBpZiByaHMgPT0gMCwgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIGV2ZW4gdHJ5
IHRvIGNvbXB1dGUgdGhlIHF1b3RpZW50LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBD
aGVja2VkSW50PFQ+IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBD
aGVja2VkSW50PFQ+ICZyaHMpCit7CisgICAgVCB4ID0gbGhzLnZhbHVlKCk7CisgICAgVCB5ID0g
cmhzLnZhbHVlKCk7CisgICAgVCBpc19vcF92YWxpZCA9IENoZWNrZWRJbnRfaW50ZXJuYWw6Omlz
X2Rpdl92YWxpZCh4LCB5KTsKKyAgICBUIHJlc3VsdCA9IGlzX29wX3ZhbGlkID8gKHggLyB5KSA6
IDA7CisgICAgLyogZ2l2ZSB0aGUgY29tcGlsZXIgYSBnb29kIGNoYW5jZSB0byBwZXJmb3JtIFJW
TyAqLworICAgIHJldHVybiBDaGVja2VkSW50PFQ+KHJlc3VsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICBsaHMubUlzVmFsaWQgJgorICAgICAgICAgICAgICAgICAgICAgIHJocy5tSXNWYWxpZCAm
CisgICAgICAgICAgICAgICAgICAgICAgaXNfb3BfdmFsaWQpOworfQorCisvLyBpbXBsZW1lbnQg
Y2FzdF90b19DaGVja2VkSW50PFQ+KHgpLCBtYWtpbmcgc3VyZSB0aGF0CisvLyAgLSBpdCBhbGxv
d3MgeCB0byBiZSBlaXRoZXIgYSBDaGVja2VkSW50PFQ+IG9yIGFueSBpbnRlZ2VyIHR5cGUgdGhh
dCBjYW4gYmUgY2FzdGVkIHRvIFQKKy8vICAtIGlmIHggaXMgYWxyZWFkeSBhIENoZWNrZWRJbnQ8
VD4sIHdlIGp1c3QgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGl0LCBpbnN0ZWFkIG9mIGNvcHlpbmcg
aXQgKG9wdGltaXphdGlvbikKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK3N0
cnVjdCBjYXN0X3RvX0NoZWNrZWRJbnRfaW1wbAoreworICAgIHR5cGVkZWYgQ2hlY2tlZEludDxU
PiByZXR1cm5fdHlwZTsKKyAgICBzdGF0aWMgQ2hlY2tlZEludDxUPiBydW4oY29uc3QgVSYgdSkg
eyByZXR1cm4gdTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBjYXN0X3Rv
X0NoZWNrZWRJbnRfaW1wbDxULCBDaGVja2VkSW50PFQ+ID4KK3sKKyAgICB0eXBlZGVmIGNvbnN0
IENoZWNrZWRJbnQ8VD4mIHJldHVybl90eXBlOworICAgIHN0YXRpYyBjb25zdCBDaGVja2VkSW50
PFQ+JiBydW4oY29uc3QgQ2hlY2tlZEludDxUPiYgdSkgeyByZXR1cm4gdTsgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2lubGluZSB0eXBlbmFtZSBjYXN0X3RvX0No
ZWNrZWRJbnRfaW1wbDxULCBVPjo6cmV0dXJuX3R5cGUKK2Nhc3RfdG9fQ2hlY2tlZEludChjb25z
dCBVJiB1KQoreworICAgIHJldHVybiBjYXN0X3RvX0NoZWNrZWRJbnRfaW1wbDxULCBVPjo6cnVu
KHUpOworfQorCisjZGVmaW5lIENIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9S
UyhPUCwgQ09NUE9VTkRfT1ApIFwKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAordGVtcGxhdGU8dHlwZW5hbWUgVT4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitDaGVja2VkSW50PFQ+JiBDaGVj
a2VkSW50PFQ+OjpvcGVyYXRvciBDT01QT1VORF9PUChjb25zdCBVICZyaHMpICAgIFwKK3sgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICp0aGlzID0gKnRoaXMgT1AgY2FzdF90b19DaGVja2VkSW50PFQ+KHJocyk7ICAgICAg
ICAgICAgICAgICBcCisgICAgcmV0dXJuICp0aGlzOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbmxpbmUgQ2hlY2tlZEludDxU
PiBvcGVyYXRvciBPUChjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMsIGNvbnN0IFUgJnJocykgXAor
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgcmV0dXJuIGxocyBPUCBjYXN0X3RvX0NoZWNrZWRJbnQ8VD4ocmhzKTsgICAg
ICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitpbmxpbmUgQ2hlY2tlZEludDxUPiBv
cGVyYXRvciBPUChjb25zdCBVICYgbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpIFwKK3sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHJldHVybiBjYXN0X3RvX0NoZWNrZWRJbnQ8VD4obGhzKSBPUCByaHM7ICAgICAg
ICAgICAgICAgICAgICBcCit9CisKK0NIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJB
VE9SUygrLCArPSkKK0NIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUygqLCAq
PSkKK0NIRUNLRURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUygtLCAtPSkKK0NIRUNL
RURJTlRfQ09OVkVOSUVOQ0VfQklOQVJZX09QRVJBVE9SUygvLCAvPSkKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2lubGluZSBib29sIG9wZXJhdG9yID09KGNvbnN0IENoZWNr
ZWRJbnQ8VD4gJmxocywgY29uc3QgVSAmcmhzKQoreworICAgIHJldHVybiBsaHMgPT0gY2FzdF90
b19DaGVja2VkSW50PFQ+KHJocyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+CitpbmxpbmUgYm9vbCBvcGVyYXRvciA9PShjb25zdCBVICYgbGhzLCBjb25zdCBDaGVja2Vk
SW50PFQ+ICZyaHMpCit7CisgICAgcmV0dXJuIGNhc3RfdG9fQ2hlY2tlZEludDxUPihsaHMpID09
IHJoczsKK30KKworfSAvLyBlbmQgbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8qIENoZWNr
ZWRJbnRfaCAqLwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAkocmV2aXNpb24gNjIyNzMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiQ2hlY2tlZElu
dC5oIgogI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKICNpbmNsdWRlICJDb25zb2xlLmgi
CiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC03MTcsMTYgKzcxOCwyNCBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRlCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewog
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5
dGVMZW5ndGgoKTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAgPSBzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxl
bWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1h
eChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAgaWYgKCFu
dW1FbGVtZW50cykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IDA7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1l
bnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgICAgICBtYXhJbmRl
eCA9IG1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8bG9uZz4ocFtpXSkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQ6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1l
bnRzID0gbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gc2l6ZW9mKHVu
c2lnbmVkIHNob3J0KTsKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVy
LT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heEluZGV4
ID0gbWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxsb25nPihwW2ldKSk7CisgICAgICAgICAgICBp
ZiAoIW51bUVsZW1lbnRzKQorICAgICAgICAgICAgICAgIG1heEluZGV4ID0gMDsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBwID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVy
LT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICAgICAg
bWF4SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+KHBbaV0pKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6
CkBAIC04NDQsMTEgKzg1MywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0Fy
cmF5cyh1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWNvdW50KQotICAgICAg
ICByZXR1cm47Ci0KICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0
ZQotICAgIGlmICghdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShmaXJzdCArIGNvdW50KSkgeworICAg
IENoZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZEZpcnN0KGZpcnN0KTsKKyAgICBDaGVja2VkSW50
PGludDMyX3Q+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgQ2hlY2tlZEludDxpbnQzMl90PiBj
aGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tlZENvdW50OworICAgIGlmICghY2hlY2tl
ZFN1bS52YWxpZCgpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKGNoZWNrZWRTdW0udmFsdWUo
KSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODgw
LDkgKzg4OSw2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybjsK
LQogICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCiAgICAgbG9u
ZyBudW1FbGVtZW50czsKICAgICAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMzAxKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDct
MDEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaXNzdWVzIGluIGJvdW5kYXJ5IHNpdHVhdGlv
bnMgZm9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cy9kcmF3RWxlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNDczCisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWFycmF5cy1vdXQtb2YtYm91bmRzLWV4cGVj
dGVkLnR4dDogVGVzdCBhZ2FpbnN0IG92ZXJmbG93LCBzaXplLTAgYnVmZmVyLCBhbmQgY291bnQ9
PTAgc2l0dWF0aW9ucy4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWFycmF5cy1v
dXQtb2YtYm91bmRzLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2Ry
YXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQ6IERpdHRvLgorICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL2RyYXctZWxlbWVudHMtb3V0LW9mLWJvdW5kcy5odG1sOiBEaXR0
by4KKwogMjAxMC0wNy0wMSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJv
dW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjczKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTcsNyArNyw3IEBAIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQu
VFJJQU5HTEUKIFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAt
MSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250
ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIC0xLCAwKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250
ZXh0LlRSSUFOR0xFUywgMCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBOT19FUlJP
Ui4KLVBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAsIDApIGdl
bmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogTk9fRVJST1IuCitQQVNTIGNvbnRleHQuZHJhd0Fy
cmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMTAwLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJy
b3I6IElOVkFMSURfT1BFUkFUSU9OLgogCiBUZXN0IGJ1ZmZlciB3aXRoIDMgZmxvYXQgdmVjdG9y
cwogUEFTUyBjb250ZXh0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoY29udGV4dC5GUkFNRUJVRkZF
UikgaXMgY29udGV4dC5GUkFNRUJVRkZFUl9DT01QTEVURQpAQCAtMTksNyArMTksMTIgQEAgUEFT
UyBjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRQogUEFTUyBjb250ZXh0LmRyYXdB
cnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIC0xKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJy
b3I6IElOVkFMSURfVkFMVUUuCiBQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFO
R0xFUywgLTEsIDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4K
IFBBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAwKSBnZW5lcmF0
ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgotUEFTUyBjb250ZXh0LmRyYXdBcnJheXMo
Y29udGV4dC5UUklBTkdMRVMsIDEwMCwgMCkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBO
T19FUlJPUi4KK1BBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAxMDAs
IDApIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCitQQVNT
IGNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgMHhmZmZmZmZmZikgZ2Vu
ZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgorUEFTUyBjb250ZXh0LmRy
YXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIDEpIGdlbmVyYXRlZCBleHBl
Y3RlZCBHTCBlcnJvcjogSU5WQUxJRF9WQUxVRS4KK1BBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNv
bnRleHQuVFJJQU5HTEVTLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKSBnZW5lcmF0ZWQgZXhwZWN0
ZWQgR0wgZXJyb3I6IElOVkFMSURfVkFMVUUuCitQQVNTIGNvbnRleHQuZHJhd0FycmF5cyhjb250
ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9y
OiBJTlZBTElEX09QRVJBVElPTi4KK1BBU1MgY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJ
QU5HTEVTLCAweDdmZmZmZmZmLCAweDdmZmZmZmZmKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJy
b3I6IElOVkFMSURfT1BFUkFUSU9OLgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXctYXJyYXlzLW91dC1v
Zi1ib3VuZHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9kcmF3LWFycmF5cy1vdXQtb2YtYm91bmRzLmh0bWwJKHJldmlzaW9uIDYyMjczKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1hcnJheXMtb3V0LW9mLWJvdW5kcy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIHNob3VsZEdlbmVyYXRlR0xFcnJvcihj
b250ZXh0LCBjb250ZXh0LkkKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0
LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAs
IC0xKSIpOwogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9W
QUxVRSwgImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIDApIik7CiBz
aG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQu
ZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgMCkiKTsKLXNob3VsZEdlbmVyYXRlR0xF
cnJvcihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRl
eHQuVFJJQU5HTEVTLCAxMDAsIDApIik7CitzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwg
Y29udGV4dC5JTlZBTElEX09QRVJBVElPTiwgImNvbnRleHQuZHJhd0FycmF5cyhjb250ZXh0LlRS
SUFOR0xFUywgMTAwLCAwKSIpOwogCiBkZWJ1ZygiIikKIGRlYnVnKCJUZXN0IGJ1ZmZlciB3aXRo
IDMgZmxvYXQgdmVjdG9ycyIpCkBAIC00MSw3ICs0MSwxNiBAQCBzaG91bGRHZW5lcmF0ZUdMRXJy
b3IoY29udGV4dCwgY29udGV4dC5JCiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29u
dGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVT
LCAwLCAtMSkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFM
SURfVkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIC0xLCAwKSIp
Owogc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuTk9fRVJST1IsICJjb250
ZXh0LmRyYXdBcnJheXMoY29udGV4dC5UUklBTkdMRVMsIDAsIDApIik7Ci1zaG91bGRHZW5lcmF0
ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5OT19FUlJPUiwgImNvbnRleHQuZHJhd0FycmF5cyhj
b250ZXh0LlRSSUFOR0xFUywgMTAwLCAwKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRl
eHQsIGNvbnRleHQuSU5WQUxJRF9PUEVSQVRJT04sICJjb250ZXh0LmRyYXdBcnJheXMoY29udGV4
dC5UUklBTkdMRVMsIDEwMCwgMCkiKTsKKworLy8gMHhmZmZmZmZmZiBuZWVkcyB0byBjb252ZXJ0
IHRvIGEgJ2xvbmcnIElETCBhcmd1bWVudCBhcyAtMSwgYXMgcGVyCisvLyBXZWJJREwgNC4xLjcu
ICBKUyBUb0ludDMyKDB4ZmZmZmZmZmYpID09IC0xLCB3aGljaCBpcyB0aGUgZmlyc3Qgc3RlcAor
Ly8gb2YgdGhlIGNvbnZlcnNpb24uICBUaHVzIElOVkFMSURfVkFMVUUuCitzaG91bGRHZW5lcmF0
ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX1ZBTFVFLCAiY29udGV4dC5kcmF3QXJy
YXlzKGNvbnRleHQuVFJJQU5HTEVTLCAwLCAweGZmZmZmZmZmKSIpOworc2hvdWxkR2VuZXJhdGVH
TEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9WQUxVRSwgImNvbnRleHQuZHJhd0FycmF5
cyhjb250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZmZiwgMSkiKTsKK3Nob3VsZEdlbmVyYXRlR0xF
cnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdBcnJheXMo
Y29udGV4dC5UUklBTkdMRVMsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpIik7CitzaG91bGRHZW5l
cmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4dC5JTlZBTElEX09QRVJBVElPTiwgImNvbnRleHQu
ZHJhd0FycmF5cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgMSkiKTsKK3Nob3VsZEdl
bmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFUSU9OLCAiY29udGV4
dC5kcmF3QXJyYXlzKGNvbnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCAweDdmZmZmZmZmKSIp
OwogCiBkZWJ1ZygiIikKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9kcmF3LWVsZW1lbnRzLW91dC1vZi1ib3VuZHMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RyYXct
ZWxlbWVudHMtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyMjczKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRz
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsMTAgQEAgUEFTUyBjb250
ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFORwogUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50
cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMCkgZ2VuZXJh
dGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0LmRyYXdF
bGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkg
Z2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgogUEFTUyBjb250ZXh0
LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllU
RSwgMSkgZ2VuZXJhdGVkIGV4cGVjdGVkIEdMIGVycm9yOiBJTlZBTElEX1ZBTFVFLgotUEFTUyBj
b250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05F
RF9CWVRFLCA0KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IE5PX0VSUk9SLgorUEFTUyBj
b250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMCwgY29udGV4dC5VTlNJR05F
RF9CWVRFLCA0KSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6IElOVkFMSURfT1BFUkFUSU9O
LgorUEFTUyBjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHhmZmZmZmZm
ZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSBnZW5lcmF0ZWQgZXhwZWN0ZWQgR0wgZXJyb3I6
IElOVkFMSURfVkFMVUUuCitQQVNTIGNvbnRleHQuZHJhd0VsZW1lbnRzKGNvbnRleHQuVFJJQU5H
TEVTLCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUsIDApIGdlbmVyYXRlZCBleHBl
Y3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJT04uCitQQVNTIGNvbnRleHQuZHJhd0VsZW1l
bnRzKGNvbnRleHQuVFJJQU5HTEVTLCAweDdmZmZmZmZmLCBjb250ZXh0LlVOU0lHTkVEX0JZVEUs
IDB4N2ZmZmZmZmYpIGdlbmVyYXRlZCBleHBlY3RlZCBHTCBlcnJvcjogSU5WQUxJRF9PUEVSQVRJ
T04uCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1v
dXQtb2YtYm91bmRzLmh0bWwJKHJldmlzaW9uIDYyMjczKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvZHJhdy1lbGVtZW50cy1vdXQtb2YtYm91bmRzLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDEwIEBAIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250
ZXh0LkkKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFM
VUUsICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQu
VU5TSUdORURfQllURSwgMCkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250
ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xF
UywgMCwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAtMSkiKTsKIHNob3VsZEdlbmVyYXRlR0xFcnJv
cihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdFbGVtZW50cyhj
b250ZXh0LlRSSUFOR0xFUywgLTEsIGNvbnRleHQuVU5TSUdORURfQllURSwgMSkiKTsKLXNob3Vs
ZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0Lk5PX0VSUk9SLCAiY29udGV4dC5kcmF3
RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQuVU5TSUdORURfQllURSwgNCki
KTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250ZXh0LklOVkFMSURfT1BFUkFU
SU9OLCAiY29udGV4dC5kcmF3RWxlbWVudHMoY29udGV4dC5UUklBTkdMRVMsIDAsIGNvbnRleHQu
VU5TSUdORURfQllURSwgNCkiKTsKK3Nob3VsZEdlbmVyYXRlR0xFcnJvcihjb250ZXh0LCBjb250
ZXh0LklOVkFMSURfVkFMVUUsICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xF
UywgMHhmZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAwKSIpOworc2hvdWxkR2VuZXJh
dGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5WQUxJRF9PUEVSQVRJT04sICJjb250ZXh0LmRy
YXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywgMHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05F
RF9CWVRFLCAwKSIpOworc2hvdWxkR2VuZXJhdGVHTEVycm9yKGNvbnRleHQsIGNvbnRleHQuSU5W
QUxJRF9PUEVSQVRJT04sICJjb250ZXh0LmRyYXdFbGVtZW50cyhjb250ZXh0LlRSSUFOR0xFUywg
MHg3ZmZmZmZmZiwgY29udGV4dC5VTlNJR05FRF9CWVRFLCAweDdmZmZmZmZmKSIpOwogCiBkZWJ1
ZygiIikKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>