<?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>98977</bug_id>
          
          <creation_ts>2012-10-10 17:54:24 -0700</creation_ts>
          <short_desc>Shader translator needs option to clamp uniform array accesses in vertex shaders</short_desc>
          <delta_ts>2012-12-21 17:45:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>99873</blocked>
    
    <blocked>105218</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>alokp</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>kbr</cc>
    
    <cc>peter+ews</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>739442</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-10 17:54:24 -0700</bug_when>
    <thetext>This is the WebKit version of https://code.google.com/p/angleproject/issues/detail?id=49

&lt;rdar://problem/12402024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739460</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-10 18:15:00 -0700</bug_when>
    <thetext>I&apos;m about to upload a patch. Unfortunately, I&apos;m not permitted to submit this to ANGLE, so I&apos;ll submit here under a license that would allow it to be merged into the ANGLE trunk.

This is my first time in the ANGLE code, so I won&apos;t be surprised if I&apos;m doing something incorrectly. Unfortunately there were some complications which I&apos;ve described in the ChangeLog.

I need to write some LayoutTests, but for now here are some examples:

TEST 1 INPUT
------------
attribute vec4 in_position;
attribute float in_index;
uniform vec4 weights[16];
void main() {
  gl_Position = in_position * weights[int(in_index)];
}

TEST 1 OUTPUT
-------------
attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weights[16];
void main(){
(gl_Position = (in_position * weights[int(clamp(float(int(in_index)), 0.0, 15.0))]));
}

TEST 2 INPUT
------------
attribute vec4 in_position;
attribute float in_index;
uniform vec4 weight;
void main() {
  gl_Position = in_position * weight[int(in_index)];
}

TEST 2 OUTPUT
-------------
attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weight;
void main(){
(gl_Position = (in_position * weight[int(clamp(float(int(in_index)), 0.0, 3.0))]));
}

TEST 3 INPUT
------------
attribute vec4 in_position;
attribute float in_index;
uniform mat2 weights;
void main() {
  gl_Position = in_position * weights[int(in_index)][int(in_index * 5.0)];
}

TEST 3 OUTPUT
-------------
attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp mat2 weights;
void main(){
(gl_Position = (in_position * weights[int(clamp(float(int(in_index)), 0.0, 1.0))][int(clamp(float(int((in_index * 5.0))), 0.0, 1.0))]));
}

TEST 4 INPUT
------------
attribute vec4 in_position;
attribute float in_index;
uniform vec4 weights[10];
vec4 temp[10]; // not a uniform
void main() {
  temp[int(in_index)] = weights[9];
  gl_Position = in_position * temp[int(in_index * 5.0)];
}


TEST 4 OUTPUT
-------------
attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weights[10];
highp vec4 temp[10];
void main(){
(temp[int(clamp(float(int(in_index)), 0.0, 9.0))] = weights[9]);
(gl_Position = (in_position * temp[int(clamp(float(int((in_index * 5.0))), 0.0, 9.0))]));
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739461</commentid>
    <comment_count>2</comment_count>
      <attachid>168110</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-10 18:18:09 -0700</bug_when>
    <thetext>Created attachment 168110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739464</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-10 18:18:30 -0700</bug_when>
    <thetext>Style bot will hate this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739465</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 18:20:45 -0700</bug_when>
    <thetext>Attachment 168110 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/ThirdParty/ANGLE/ANGLE.xcodeproj/pr...&quot; exit_code: 1
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.h:12:  Alphabetical sorting problem.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:39:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:42:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:50:  One space before end of line comments  [whitespace/comments] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:26:  #ifndef header guard has wrong style, please use: ArrayBoundsClamper_h  [build/header_guard] [5]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:242:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:244:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:247:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:248:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:250:  Declaration has space between type name and * in TIntermTyped *left  [whitespace/declaration] [3]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:254:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:258:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:259:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:265:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:266:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:267:  Use 0 instead of NULL.  [readability/null] [5]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:151:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 23 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>739479</commentid>
    <comment_count>5</comment_count>
      <attachid>168110</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-10 18:36:41 -0700</bug_when>
    <thetext>Comment on attachment 168110
Patch

Attachment 168110 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14259291</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739488</commentid>
    <comment_count>6</comment_count>
      <attachid>168110</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-10 18:45:49 -0700</bug_when>
    <thetext>Comment on attachment 168110
Patch

Attachment 168110 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14259296</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740292</commentid>
    <comment_count>7</comment_count>
      <attachid>168110</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-10-11 15:08:32 -0700</bug_when>
    <thetext>Comment on attachment 168110
Patch

This looks pretty good to me as a first step. Alok, could you take a look too?

Any indication of sites that break while enforcing this new rule?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740384</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-11 16:17:31 -0700</bug_when>
    <thetext>I haven&apos;t tested much. I&apos;ll try living on it.

Our GL team suggested that it is inefficient to have all the float&lt;-&gt;int casts, so I&apos;ll submit a second patch that has a single global int variable used for the array index expression, and then does a simple ?: test. Unfortunately this might be a little more work in the ANGLE code.

I&apos;ll also make sure to update the other port build configurations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740437</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-10-11 16:54:29 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I haven&apos;t tested much. I&apos;ll try living on it.
&gt; 
&gt; Our GL team suggested that it is inefficient to have all the float&lt;-&gt;int casts, so I&apos;ll submit a second patch that has a single global int variable used for the array index expression, and then does a simple ?: test. Unfortunately this might be a little more work in the ANGLE code.

That sounds problematic. How about just doing the clamp on an integer value? Is that supported?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740476</commentid>
    <comment_count>10</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-11 17:48:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; I haven&apos;t tested much. I&apos;ll try living on it.
&gt; &gt; 
&gt; &gt; Our GL team suggested that it is inefficient to have all the float&lt;-&gt;int casts, so I&apos;ll submit a second patch that has a single global int variable used for the array index expression, and then does a simple ?: test. Unfortunately this might be a little more work in the ANGLE code.
&gt; 
&gt; That sounds problematic. How about just doing the clamp on an integer value? Is that supported?

Unfortunately clamp does not accept floats. I&apos;m going to inject a _webgl_int_clamp function though. It seems the cleanest way to rewrite the shader, without doing major analysis and surgery on the AST.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741199</commentid>
    <comment_count>11</comment_count>
      <attachid>168481</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-12 14:19:35 -0700</bug_when>
    <thetext>Created attachment 168481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741200</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-12 14:21:21 -0700</bug_when>
    <thetext>Updated patch. It will obviously fail the style check but hopefully build on Qt. I still need to add a couple of real WebGL tests.

Test 1 - basic array index
Test 2 - indexing on a vec rather than array
Test 3 - indexing on a mat rather than array
Test 4 - array indexing in an lvalue
Test 5 - multiple indexing on the same line
Test 6 - non-expression indexing, should be unchanged (no generated/injected function)

TEST 1 INPUT
-------------

attribute vec4 in_position;
attribute float in_index;
uniform vec4 weights[16];
void main() {
 gl_Position = in_position * weights[int(in_index)];
}

TEST 1 OUTPUT
--------------

// BEGIN: Generated code for array bounds clamping

int webgl_int_clamp(int value, int minValue, int maxValue) { return ((value &lt; minValue) ? minValue : ((value &gt; maxValue) ? maxValue : value)); }

// END: Generated code for array bounds clamping

attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weights[16];
void main(){
(gl_Position = (in_position * weights[webgl_int_clamp(int(in_index), 0, 15)]));
}


TEST 2 INPUT
-------------

attribute vec4 in_position;
attribute float in_index;
uniform vec4 weight;
void main() {
 gl_Position = in_position * weight[int(in_index)];
}

TEST 2 OUTPUT
--------------

// BEGIN: Generated code for array bounds clamping

int webgl_int_clamp(int value, int minValue, int maxValue) { return ((value &lt; minValue) ? minValue : ((value &gt; maxValue) ? maxValue : value)); }

// END: Generated code for array bounds clamping

attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weight;
void main(){
(gl_Position = (in_position * weight[webgl_int_clamp(int(in_index), 0, 3)]));
}


TEST 3 INPUT
-------------

attribute vec4 in_position;
attribute float in_index;
uniform mat2 weights;
void main() {
 gl_Position = in_position * weights[int(in_index)][int(in_index * 5.0)];
}

TEST 3 OUTPUT
--------------

// BEGIN: Generated code for array bounds clamping

int webgl_int_clamp(int value, int minValue, int maxValue) { return ((value &lt; minValue) ? minValue : ((value &gt; maxValue) ? maxValue : value)); }

// END: Generated code for array bounds clamping

attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp mat2 weights;
void main(){
(gl_Position = (in_position * weights[webgl_int_clamp(int(in_index), 0, 1)][webgl_int_clamp(int((in_index * 5.0)), 0, 1)]));
}

TEST 4 INPUT
-------------

attribute vec4 in_position;
attribute float in_index;
uniform vec4 weights[10];
vec4 temp[10];
void main() {
 temp[int(in_index)] = weights[9];
 gl_Position = in_position * temp[int(in_index * 5.0)];
}

TEST 4 OUTPUT
--------------

// BEGIN: Generated code for array bounds clamping

int webgl_int_clamp(int value, int minValue, int maxValue) { return ((value &lt; minValue) ? minValue : ((value &gt; maxValue) ? maxValue : value)); }

// END: Generated code for array bounds clamping

attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weights[10];
highp vec4 temp[10];
void main(){
(temp[webgl_int_clamp(int(in_index), 0, 9)] = weights[9]);
(gl_Position = (in_position * temp[webgl_int_clamp(int((in_index * 5.0)), 0, 9)]));
}

TEST 5 INPUT
-------------

attribute vec4 in_position;
attribute float in_index;
uniform vec4 weights[16];
void main() {
 int index = int(in_index);
 gl_Position = in_position * weights[index] + weights[index * 2] + weights[index * 3 + 1];
}

TEST 5 OUTPUT
--------------

// BEGIN: Generated code for array bounds clamping

int webgl_int_clamp(int value, int minValue, int maxValue) { return ((value &lt; minValue) ? minValue : ((value &gt; maxValue) ? maxValue : value)); }

// END: Generated code for array bounds clamping

attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weights[16];
void main(){
highp int index = int(in_index);
(gl_Position = (((in_position * weights[webgl_int_clamp(index, 0, 15)]) + weights[webgl_int_clamp((index * 2), 0, 15)]) + weights[webgl_int_clamp(((index * 3) + 1), 0, 15)]));
}

TEST 6 INPUT
-------------

attribute vec4 in_position;
attribute float in_index;
uniform vec4 weights[16];
void main() {
 gl_Position = in_position * weights[8];
}

TEST 6 OUTPUT
--------------

attribute highp vec4 in_position;
attribute highp float in_index;
uniform highp vec4 weights[16];
void main(){
(gl_Position = (in_position * weights[8]));
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741202</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-12 14:22:37 -0700</bug_when>
    <thetext>Attachment 168481 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/ThirdParty/ANGLE/ANGLE.xcodeproj/pr...&quot; exit_code: 1
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.h:12:  Alphabetical sorting problem.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:42:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:45:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:56:  One space before end of line comments  [whitespace/comments] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:26:  #ifndef header guard has wrong style, please use: ArrayBoundsClamper_h  [build/header_guard] [5]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:242:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:244:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:247:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:248:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:250:  Declaration has space between type name and * in TIntermTyped *left  [whitespace/declaration] [3]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:254:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:258:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:259:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:265:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:266:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:267:  Use 0 instead of NULL.  [readability/null] [5]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:151:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 23 in 14 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>742307</commentid>
    <comment_count>14</comment_count>
      <attachid>168760</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-15 12:45:50 -0700</bug_when>
    <thetext>Created attachment 168760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742309</commentid>
    <comment_count>15</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-15 12:46:45 -0700</bug_when>
    <thetext>Really ready for review now. Style bot will still obviously complain about the ANGLE coding style.

Includes code to enable the flag in WebKit, and a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742432</commentid>
    <comment_count>16</comment_count>
      <attachid>168760</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-10-15 14:19:28 -0700</bug_when>
    <thetext>Comment on attachment 168760
Patch

I do not think there is any need for one full traversal of the AST just to mark nodes with a bool. The work that is being done during that traversal can be easily done while writing the GLSL shader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742649</commentid>
    <comment_count>17</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-15 17:41:26 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 168760 [details])
&gt; I do not think there is any need for one full traversal of the AST just to mark nodes with a bool. The work that is being done during that traversal can be easily done while writing the GLSL shader.

Except I need to traverse the tree in order to know if I should output the webgl_int_clamp function before the main shader content.

Alternatives would be:
- only do the traversal within the TranslateGLSL and TranslateESSL translate methods
- always inject this function when the compile option is set (and let the compiler do extra work to remove it)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742650</commentid>
    <comment_count>18</comment_count>
      <attachid>168760</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-15 17:41:53 -0700</bug_when>
    <thetext>Comment on attachment 168760
Patch

Setting back to r? waiting for feedback from Alok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743205</commentid>
    <comment_count>19</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-10-16 09:26:29 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 168760 [details] [details])
&gt; &gt; I do not think there is any need for one full traversal of the AST just to mark nodes with a bool. The work that is being done during that traversal can be easily done while writing the GLSL shader.
&gt; 
&gt; Except I need to traverse the tree in order to know if I should output the webgl_int_clamp function before the main shader content.
&gt; 
&gt; Alternatives would be:
&gt; - only do the traversal within the TranslateGLSL and TranslateESSL translate methods
&gt; - always inject this function when the compile option is set (and let the compiler do extra work to remove it)

Ah I see. I would always emit webgl_int_clamp function (or maybe just the declaration).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743244</commentid>
    <comment_count>20</comment_count>
      <attachid>168760</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-10-16 10:17:10 -0700</bug_when>
    <thetext>Comment on attachment 168760
Patch

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

I noticed some minor nits. I have not reviewed this patch for correctness. The license block text in ArrayBoundsClamper.{cpp, h} is out-of-date as it references Apple Computer, Inc. It should reference Apple Inc. For comparison, see the license block text in &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/LICENSE-APPLE&gt;.

&gt; Source/ThirdParty/ANGLE/ANGLE.xcodeproj/project.pbxproj:721
&gt; +				31ED471D1624EFD100245078 /* ArrayBoundsClamper.h in Headers */,

I haven&apos;t opened this Xcode project file, will this header be listed in lexicographic order in the Project Navigator pane?

&gt; Source/ThirdParty/ANGLE/ANGLE.xcodeproj/project.pbxproj:839
&gt; +				31ED471C1624EFD100245078 /* ArrayBoundsClamper.cpp in Sources */,

Ditto.

&gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:39
&gt; +    virtual bool visitBinary(Visit visit, TIntermBinary* node)

The parameter visit is unused and its name matches the name of its data type (so it doesn&apos;t provide additional clarification on the purpose of this parameter). I suggest that we omit the parameter name.

On another note, we may want to consider building ANGLE with -Wunused or -Wunused-parameter to catch such usage of unused parameters among other things. This can be done in a separate patch.

&gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:39
&gt; +    bool GetArrayBoundsClampNeeded() { return mNeedsClamping; }

Can this function be made const?

&gt; Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:250
&gt; +                    TIntermTyped *left = node-&gt;getLeft();

Nit: The &apos;*&apos; should be on the other side.

&gt; Source/ThirdParty/ANGLE/src/compiler/intermediate.h:405
&gt; +

Can this function be made const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743349</commentid>
    <comment_count>21</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 11:33:44 -0700</bug_when>
    <thetext>(In reply to comment #19)

&gt; Ah I see. I would always emit webgl_int_clamp function (or maybe just the declaration).

OK. I&apos;ll always emit the declaration and only add the function if it was needed. New patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743355</commentid>
    <comment_count>22</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 11:36:02 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 168760 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168760&amp;action=review
&gt; 
&gt; I noticed some minor nits. I have not reviewed this patch for correctness. The license block text in ArrayBoundsClamper.{cpp, h} is out-of-date as it references Apple Computer, Inc. It should reference Apple Inc. For comparison, see the license block text in &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/LICENSE-APPLE&gt;.
&gt; 
&gt; &gt; Source/ThirdParty/ANGLE/ANGLE.xcodeproj/project.pbxproj:721
&gt; &gt; +				31ED471D1624EFD100245078 /* ArrayBoundsClamper.h in Headers */,
&gt; 
&gt; I haven&apos;t opened this Xcode project file, will this header be listed in lexicographic order in the Project Navigator pane?

Yes. I hate when that&apos;s not done.

&gt; &gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:39
&gt; &gt; +    virtual bool visitBinary(Visit visit, TIntermBinary* node)
&gt; 
&gt; The parameter visit is unused and its name matches the name of its data type (so it doesn&apos;t provide additional clarification on the purpose of this parameter). I suggest that we omit the parameter name.
&gt; 
&gt; On another note, we may want to consider building ANGLE with -Wunused or -Wunused-parameter to catch such usage of unused parameters among other things. This can be done in a separate patch.

Note that this intentionally does not conform to WebKit style. Rather to the style of the ANGLE project.

&gt; 
&gt; &gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:39
&gt; &gt; +    bool GetArrayBoundsClampNeeded() { return mNeedsClamping; }
&gt; 
&gt; Can this function be made const?

Yes.

&gt; 
&gt; &gt; Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:250
&gt; &gt; +                    TIntermTyped *left = node-&gt;getLeft();
&gt; 
&gt; Nit: The &apos;*&apos; should be on the other side.

DItto on ANGLE style.

&gt; 
&gt; &gt; Source/ThirdParty/ANGLE/src/compiler/intermediate.h:405
&gt; &gt; +
&gt; 
&gt; Can this function be made const?

yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743386</commentid>
    <comment_count>23</comment_count>
      <attachid>168760</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-10-16 11:59:09 -0700</bug_when>
    <thetext>Comment on attachment 168760
Patch

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

&gt;&gt;&gt; Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:250
&gt;&gt;&gt; +                    TIntermTyped *left = node-&gt;getLeft();
&gt;&gt; 
&gt;&gt; Nit: The &apos;*&apos; should be on the other side.
&gt; 
&gt; DItto on ANGLE style.

Notice that this will be the only line in this file that has the &apos;*&apos; on the right side. Briefly searching through the ANGLE code the placement of the &apos;*&apos; is inconsistent across files. I&apos;ll trust your judgement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743567</commentid>
    <comment_count>24</comment_count>
      <attachid>169029</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 14:34:25 -0700</bug_when>
    <thetext>Created attachment 169029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743569</commentid>
    <comment_count>25</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 14:37:07 -0700</bug_when>
    <thetext>OK. Here&apos;s a version that only adds clamping at the output/translation stage. I think it&apos;s a little more invasive, since we have to pass compile options down into the translators, and keep around an object to determine if we need to add definitions, but at least it avoids another tree traversal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743571</commentid>
    <comment_count>26</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 14:37:46 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 168760 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168760&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:250
&gt; &gt;&gt;&gt; +                    TIntermTyped *left = node-&gt;getLeft();
&gt; &gt;&gt; 
&gt; &gt;&gt; Nit: The &apos;*&apos; should be on the other side.
&gt; &gt; 
&gt; &gt; DItto on ANGLE style.
&gt; 
&gt; Notice that this will be the only line in this file that has the &apos;*&apos; on the right side. Briefly searching through the ANGLE code the placement of the &apos;*&apos; is inconsistent across files. I&apos;ll trust your judgement.

Yeah, I was wrong. Fixed in new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743597</commentid>
    <comment_count>27</comment_count>
      <attachid>169029</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 14:59:18 -0700</bug_when>
    <thetext>Comment on attachment 169029
Patch

Attachment 169029 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14392295</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743622</commentid>
    <comment_count>28</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 15:13:42 -0700</bug_when>
    <thetext>Of course changing the Compiler API breaks Chromium. I&apos;m not sure what to do here. The other translation approaches all do a tree traversal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743626</commentid>
    <comment_count>29</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 15:18:02 -0700</bug_when>
    <thetext>Oops. No, the problem is that Chromium is not using the ANGLE from WebKit, and thus doesn&apos;t see the new flag. I&apos;ll wrap it in #if PLATFORM but I think the review can go ahead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743633</commentid>
    <comment_count>30</comment_count>
      <attachid>169029</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-16 15:24:58 -0700</bug_when>
    <thetext>Comment on attachment 169029
Patch

Attachment 169029 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14390304</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743642</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 15:38:51 -0700</bug_when>
    <thetext>Attachment 169029 did not pass style-queue:

Source/ThirdParty/ANGLE/src/compiler/OutputGLSL.h:16:  The parameter name &quot;arrayBoundsClamper&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:72:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:73:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:243:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:247:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:248:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:249:  Use 0 instead of NULL.  [readability/null] [5]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.h:12:  Alphabetical sorting problem.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.h:20:  The parameter name &quot;arrayBoundsClamper&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:56:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:59:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:60:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:66:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:70:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:71:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:81:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:84:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorESSL.cpp:15:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorESSL.cpp:27:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorESSL.cpp:38:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorGLSL.cpp:28:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorGLSL.cpp:40:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorGLSL.cpp:51:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputESSL.h:15:  The parameter name &quot;arrayBoundsClamper&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:26:  #ifndef header guard has wrong style, please use: ArrayBoundsClamper_h  [build/header_guard] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:48:  The parameter name &quot;visit&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:145:  Weird number of spaces at line-start.Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:151:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 33 in 24 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>743730</commentid>
    <comment_count>32</comment_count>
      <attachid>169062</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 17:19:10 -0700</bug_when>
    <thetext>Created attachment 169062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743732</commentid>
    <comment_count>33</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-16 17:19:49 -0700</bug_when>
    <thetext>Will hopefully build on Chromium now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743734</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 17:22:55 -0700</bug_when>
    <thetext>Attachment 169062 did not pass style-queue:

Source/ThirdParty/ANGLE/src/compiler/OutputGLSL.h:16:  The parameter name &quot;arrayBoundsClamper&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:72:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:73:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:243:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:247:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:248:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:249:  Use 0 instead of NULL.  [readability/null] [5]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.h:12:  Alphabetical sorting problem.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.h:20:  The parameter name &quot;arrayBoundsClamper&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:56:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:59:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:60:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:66:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:70:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:71:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:81:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:84:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorESSL.cpp:15:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorESSL.cpp:27:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorESSL.cpp:38:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorGLSL.cpp:28:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorGLSL.cpp:40:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/TranslatorGLSL.cpp:51:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputESSL.h:15:  The parameter name &quot;arrayBoundsClamper&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:26:  #ifndef header guard has wrong style, please use: ArrayBoundsClamper_h  [build/header_guard] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:48:  The parameter name &quot;visit&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:145:  Weird number of spaces at line-start.Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:151:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 33 in 24 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>743770</commentid>
    <comment_count>35</comment_count>
      <attachid>169062</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 18:29:10 -0700</bug_when>
    <thetext>Comment on attachment 169062
Patch

Attachment 169062 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14392359

New failing tests:
fast/canvas/webgl/array-bounds-clamping.html
platform/chromium/virtual/gpu/fast/canvas/webgl/array-bounds-clamping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743801</commentid>
    <comment_count>36</comment_count>
      <attachid>169062</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 19:28:38 -0700</bug_when>
    <thetext>Comment on attachment 169062
Patch

Attachment 169062 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14395356

New failing tests:
fast/canvas/webgl/array-bounds-clamping.html
platform/chromium/virtual/gpu/fast/canvas/webgl/array-bounds-clamping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744433</commentid>
    <comment_count>37</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-17 11:16:32 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 169062 [details])
&gt; Attachment 169062 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/14395356
&gt; 
&gt; New failing tests:
&gt; fast/canvas/webgl/array-bounds-clamping.html
&gt; platform/chromium/virtual/gpu/fast/canvas/webgl/array-bounds-clamping.html

I will add this to the Chromium test expectations. Obviously it will fail until Chromium upstreams this patch into ANGLE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744649</commentid>
    <comment_count>38</comment_count>
      <attachid>169062</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-10-17 14:51:19 -0700</bug_when>
    <thetext>Comment on attachment 169062
Patch

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

TranslatorHLSL have a similar problem. You should look at it for inspiration on how they separate writing out a header and body. I would do it in a different way:

class TOutputGLSL {
  TOutputGLSL(Spec, bool clampArrayIndex);

  void output(TInfoSinkBase&amp; sink) {
    TOutputXXX traverser(clamp);
    root-&gt;traverse(&amp;traverser);
    sink &lt;&lt; traverser.header();
    sink &lt;&lt; traverser.body();
  }
};

If you want I can take submit a patch to ANGLE.

&gt; Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:69
&gt; +TOutputGLSLBase::TOutputGLSLBase(TInfoSinkBase&amp; objSink, ArrayBoundsClamper&amp; arrayBoundsClamper)

Adding a dependency on ArrayBoundsClamper does not seem right.

&gt; Source/ThirdParty/ANGLE/src/compiler/TranslatorGLSL.cpp:49
&gt; +    // Write array bounds clamping definition if necessary.

duplicated code from TranslatorESSL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744700</commentid>
    <comment_count>39</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-10-17 15:23:42 -0700</bug_when>
    <thetext>I noticed that you are using the pattern used in BuiltInFunctionEmulator, which also unnecessarily makes an additional pass. I think it is better to be consistent with an existing pattern. After you land your patch I will do some refactoring to consolidate these traversals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745583</commentid>
    <comment_count>40</comment_count>
      <attachid>169476</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-18 14:30:02 -0700</bug_when>
    <thetext>Created attachment 169476
Patch

Reverting to tree traversal approach after discussion with Alok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745588</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 14:35:50 -0700</bug_when>
    <thetext>Attachment 169476 did not pass style-queue:

Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:39:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:41:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:42:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:44:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:44:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:47:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:52:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:59:  One space before end of line comments  [whitespace/comments] [5]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:69:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:26:  #ifndef header guard has wrong style, please use: ArrayBoundsClamper_h  [build/header_guard] [5]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:242:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:244:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:247:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:248:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:250:  Declaration has space between type name and * in TIntermTyped *left  [whitespace/declaration] [3]
Source/ThirdParty/ANGLE/src/Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
compiler/OutputGLSLBase.cpp:254:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:258:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:259:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:265:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:266:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/OutputGLSLBase.cpp:267:  Use 0 instead of NULL.  [readability/null] [5]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/include/GLSLANG/ShaderLang.h:151:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 38 in 19 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>745593</commentid>
    <comment_count>42</comment_count>
      <attachid>169476</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-10-18 14:46:48 -0700</bug_when>
    <thetext>Comment on attachment 169476
Patch

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

Minor nits. Looks fine otherwise.

&gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:36
&gt; +    ArrayBoundsClamperMarker(ArrayBoundsClamper&amp; clamper)

I think it will be better to not add a dependency on ArrayBoundsClamper.

&gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:56
&gt; +    ArrayBoundsClamper&amp; mClamper;

Instead of a dependency on ArrayBoundsClamper, you could have a bool that indicates if clamping is required. This bool can be queried by the client after traversal.

&gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.h:38
&gt; +    bool GetArrayBoundsClampDefinitionNeeded() const { return mArrayBoundsClampDefinitionNeeded; }

These do not need to be public if you remove the dependency from Marker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745649</commentid>
    <comment_count>43</comment_count>
      <attachid>169476</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 15:35:57 -0700</bug_when>
    <thetext>Comment on attachment 169476
Patch

Attachment 169476 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14455246

New failing tests:
platform/chromium/virtual/gpu/fast/canvas/webgl/array-bounds-clamping.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745653</commentid>
    <comment_count>44</comment_count>
      <attachid>169476</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-10-18 15:42:19 -0700</bug_when>
    <thetext>Comment on attachment 169476
Patch

Thanks Alok for the thorough review. Those nits aside, looks good to me. (The cr-ews failure looks unrelated -- and unfortunate.) r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746527</commentid>
    <comment_count>45</comment_count>
      <attachid>169476</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-19 12:21:52 -0700</bug_when>
    <thetext>Comment on attachment 169476
Patch

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

&gt;&gt; Source/ThirdParty/ANGLE/src/compiler/ArrayBoundsClamper.cpp:36
&gt;&gt; +    ArrayBoundsClamperMarker(ArrayBoundsClamper&amp; clamper)
&gt; 
&gt; I think it will be better to not add a dependency on ArrayBoundsClamper.

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746558</commentid>
    <comment_count>46</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-19 12:51:54 -0700</bug_when>
    <thetext>Committed r131933: &lt;http://trac.webkit.org/changeset/131933&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168110</attachid>
            <date>2012-10-10 18:18:09 -0700</date>
            <delta_ts>2012-10-12 14:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98977-20121011121707.patch</filename>
            <type>text/plain</type>
            <size>17652</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGJiMTUyMTJkZWJkZjkwM2ZhMTYxODg4NGU3ZTkyNDBhYzVhNTkzOC4uMTYxNmVhMmMwMDc0
NzllODc4NGE0NDUwZDJhMDI4YWRiM2E0NzE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEwLTEwICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRpb24gdG8gY2xhbXAg
dW5pZm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAgICAgaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD00OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIGRvZXMgbm90
IGFsbG93IEdMU0wgY29kZSB0byBpbmRleCBhIHVuaWZvcm0gYXJyYXkgb3V0c2lkZSBpdHMgYm91
bmRzLiBBZGQgYQorICAgICAgICBmbGFnIHRvIHRoZSBBTkdMRSBjb21waWxlciB0byBpbnNlcnQg
Y2xhbXAgc3RhdGVtZW50cyBhcm91bmQgc3VjaCBpbmRleGluZy4KKyAgICAgICAgU2luY2UgaXQg
aXMgcG9zc2libGUgdG8gYWNjZXNzIHZlYzIvMy80IGFuZCBtYXQyLzMvNCBjb21wb25lbnRzIGJ5
IGFycmF5IGluZGV4aW5nLAorICAgICAgICB0aGV5IG11c3QgYmUgc2ltaWxhcmx5IGNsYW1wZWQu
CisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgaXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0
byBhbHdheXMgZGV0ZXJtaW5lIHRoYXQgdGhlIGluZGV4aW5nIGlzCisgICAgICAgIG9wZXJhdGlu
ZyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgInVu
aWZvcm0gbWF0NCBhIi4gQU5HTEUKKyAgICAgICAgaXMgY3VycmVudGx5IG5vdCBhYmxlIHRvIHRl
bGwgdXMgdGhhdCB0aGUgcnZhbHVlIG9mICJhWzBdIiBpcyBhIHVuaWZvcm0sIGp1c3QgdGhhdAor
ICAgICAgICBpdCBoYXMgYSBzaXplIG9mIDQuIFRoZXJlZm9yZSwgdGhlIGNsYW1waW5nIGlzIGRv
bmUgb24gYWxsIGluZGlyZWN0IGFycmF5IGluZGV4aW5nLgorCisgICAgICAgIFRoaXMgd2lsbCBo
YXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBGdXR1cmUgZW5oYW5jZW1lbnRzIG1heSBiZSBhYmxl
IHRvIGRldGVybWluZQorICAgICAgICBjYXNlcyB3aGVyZSB0aGUgY2xhbXBpbmcgaXMgbm90IG5l
Y2Vzc2FyeS4gQ3VycmVudGx5IG9ubHkgZGlyZWN0IGluZGV4aW5nIGlzIHNraXBwZWQKKyAgICAg
ICAgKGkuZS4gbG9va2luZyB1cCBhIHZhbHVlIHVzaW5nIGEgY29uc3RhbnQgaW5kZXgpLgorCisg
ICAgICAgIFRoZSBjbGFtcCBpbnNlcnRpb24gaXMgb25seSBwZXJmb3JtZWQgb24gdGhlIEdMU0wg
b3V0cHV0LiBEaXJlY3QzRCBhbHJlYWR5IGd1YXJhbnRlZXMKKyAgICAgICAgdGhhdCBvdXQtb2Yt
Ym91bmRzIHVuaWZvcm0gYXJyYXkgYWNjZXNzIHJldHVybnMgYSB6ZXJvIHZhbHVlLgorCisgICAg
ICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbmNsdWRl
L0dMU0xBTkcvU2hhZGVyTGFuZy5oOiBOZXcgY29tcGlsZXIgb3B0aW9uLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEFycmF5
Qm91bmRzQ2xhbXBlcjo6QXJyYXlCb3VuZHNDbGFtcGVyKToKKyAgICAgICAgKEFycmF5Qm91bmRz
Q2xhbXBlcjo6TWFya0luZGlyZWN0QXJyYXlCb3VuZHNGb3JDbGFtcGluZyk6IFN0YXRpYyBtZXRo
b2QgZm9yIGV4YW1pbmluZyB0aGUgQVNULCBsb29raW5nIGZvciBhcnJheSBhY2Nlc3MuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oOiBBZGRlZC4KKyAgICAgICAg
KEFycmF5Qm91bmRzQ2xhbXBlcik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNw
cDogUnVuIHRoZSBjbGFtcGluZyBjb2RlIGlmIHRoZSBvcHRpb24gd2FzIHNldC4KKyAgICAgICAg
KFRDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEdMU0xC
YXNlLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkpOiBJZiB0aGUg
ZXhwcmVzc2lvbiBoYXMgYmVlbiBmbGFnZ2VkLCBpbnNlcnQgYW4gYXBwcm9wcmlhdGUgImNsYW1w
IiBzdGF0ZW1lbnQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmg6Cisg
ICAgICAgIChUT3V0cHV0R0xTTEJhc2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1P
dXQuY3BwOgorICAgICAgICAoVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKTogQWRkIGFycmF5IHNp
emUgdG8gaW50ZXJtZWRpYXRlIHRyZWUgb3V0cHV0LgorICAgICAgICAqIHNyYy9jb21waWxlci9p
bnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnNldEFkZEluZGV4Q2xhbXAp
OiBOZXcgZmxhZyBmb3IgaW5kaWNhdGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG5lZWRzIGNsYW1w
aW5nLgorICAgICAgICAoVEludGVybUJpbmFyeTo6Z2V0QWRkSW5kZXhDbGFtcCk6CisgICAgICAg
IChUSW50ZXJtQmluYXJ5KToKKwogMjAxMi0wOS0xMyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUu
Y29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI1NTcyMD4gRml4IHRoZSBidWlsZCB3
aXRoIG5ld2VyIENsYW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZjJiZTYwZjU0OGE2ZjQ4OTk5M2Jl
ZjQ2OWFlNjRkZmNhZDU2MzYyLi5iODMyN2ZkMDY2Y2UzOGVmY2MxOTAwODk1OTY5MGVlMDMwMGQw
N2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTksNiArOSw4IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3Qg
aW4gQ29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5
MTVGRUM5MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FF
NTAwOTdFQkM3IC8qIEFOR0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsg
fTsKKwkJMzFFRDQ3MUMxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUVENDcxQTE2
MjRFRkQxMDAyNDUwNzggLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsgfTsKKwkJMzFFRDQ3
MUQxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFRDQ3MUIxNjI0RUZEMTAwMjQ1MDc4
IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oICovOyB9OwogCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5
NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAq
LzsgfTsKIAkJNDk5NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87
IH07CiAJCTQ5OTUxQzBBMTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFD
MDYxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi87IH07CkBA
IC0xMzYsNiArMTM4LDggQEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwog
CQkzMTJCREIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnBsaXN0LnhtbDsgcGF0aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTJCREIwQTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IEFOR0xFLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFRDQ3
MUExNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJvdW5kc0NsYW1wZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMUVENDcxQjE2MjRFRkQxMDAyNDUwNzggLyogQXJyYXlC
b3VuZHNDbGFtcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5Qm91
bmRzQ2xhbXBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTk1MUMwMjE0QjdB
QUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OTUxQzA2MTRCN0FBRDgwMDYw
RTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTQ0LDYgKzU0OCw4IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAv
KiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMzFFRDQ3MUExNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgKi8s
CisJCQkJMzFFRDQ3MUIxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oICov
LAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJCQk0
OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICov
LAogCQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oICovLApAQCAtNzEyLDYgKzcxOCw3IEBACiAJCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5
IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4NDEx
NTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUEyNjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNo
YWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzFFRDQ3MUQxNjI0RUZEMTAwMjQ1MDc4
IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC04MjksNiArODM2LDcg
QEAKIAkJCQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVy
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4
NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxRUQ0NzFDMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAppbmRleCA5YTRhMzZkYmYzMGIxZDExNWZj
M2VmMmRhM2NjZWQzOGFmZjdjYmZiLi5kODI5MzFlYTFiYjU3OWU4OGEwYTgyZmIxM2E1MWQxZDhk
MDYwM2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xT
TEFORy9TaGFkZXJMYW5nLmgKQEAgLTE0Miw3ICsxNDIsMTMgQEAgdHlwZWRlZiBlbnVtIHsKICAg
Ly8gLSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KICAgLy8gLSBUaGUgY29tcGls
ZSBvcHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMgZmxhZy4KICAgLy8g
LSBUaGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgotICBTSF9ERVBFTkRFTkNZ
X0dSQVBIID0gMHgwNDAwCisgIFNIX0RFUEVOREVOQ1lfR1JBUEggPSAweDA0MDAsCisKKyAgLy8g
VGhpcyBmbGFnIGVuc3VyZXMgYWxsIGluZGlyZWN0IChleHByZXNzaW9uLWJhc2VkKSBhcnJheSBp
bmRleGluZworICAvLyBpcyBjbGFtcGVkIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5LiBUaGlz
IGVuc3VyZXMsIGZvciBleGFtcGxlLAorICAvLyB0aGF0IHlvdSBjYW5ub3QgcmVhZCBvZmYgdGhl
IGVuZCBvZiBhIHVuaWZvcm0sIHdoZXRoZXIgYW4gYXJyYXkKKyAgLy8gdmVjMjM0LCBvciBtYXQy
MzQgdHlwZS4KKyAgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTID0gMHgwODAwCiB9IFNo
Q29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIy
YWU4YjFjNjRiOWY5MDNmMzM1MDM5YmE2NTE2OTM5NGM5NmIyZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVy
LmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmgiCisKK25hbWVzcGFjZSB7CisKKyAgICBjbGFzcyBBcnJheUJvdW5kc0Ns
YW1wZXJNYXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CisgICAgcHVibGljOgorICAg
ICAgICBBcnJheUJvdW5kc0NsYW1wZXJNYXJrZXIoKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5h
cnkqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRPcCgpID09IEVP
cEluZGV4SW5kaXJlY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVEludGVybVR5
cGVkKiBsZWZ0ID0gbm9kZS0+Z2V0TGVmdCgpOworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5p
c0FycmF5KCkgfHwgbGVmdC0+aXNWZWN0b3IoKSB8fCBsZWZ0LT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QWRkSW5kZXhDbGFtcCgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitB
cnJheUJvdW5kc0NsYW1wZXI6OkFycmF5Qm91bmRzQ2xhbXBlcigpCit7Cit9CisKK3ZvaWQgQXJy
YXlCb3VuZHNDbGFtcGVyOjpNYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKFRJbnRl
cm1Ob2RlKiByb290KQoreworICAgIEFTU0VSVChyb290KTsKKworICAgIEFycmF5Qm91bmRzQ2xh
bXBlck1hcmtlciBjbGFtcGVyOworICAgIHJvb3QtPnRyYXZlcnNlKCZjbGFtcGVyKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0FycmF5Qm91
bmRzQ2xhbXBlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0FycmF5
Qm91bmRzQ2xhbXBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljZDFlZTc3NzdiZGE0ZTFkNTcyMDdlZTk5NWEw
MGI1NWQ4OGE2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXworI2RlZmluZSBDT01Q
SUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL2ludGVybWVkaWF0ZS5oIgorCitjbGFzcyBBcnJheUJvdW5kc0NsYW1wZXIgeworcHVibGlj
OgorICAgIEFycmF5Qm91bmRzQ2xhbXBlcigpOworCisgICAgc3RhdGljIHZvaWQgTWFya0luZGly
ZWN0QXJyYXlCb3VuZHNGb3JDbGFtcGluZyhUSW50ZXJtTm9kZSogcm9vdCk7Cit9OworCisjZW5k
aWYgLy8gQ09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmluZGV4IGNhYjgwNTZiY2Vl
NTU1MWI5ZTMzYmM5MTAxMGRjMGI2Y2U3MjBkMGIuLjQzMzdlNzc2NGZkNWYyY2VmNjAwNjIwZmQ5
MGIwOWI5OGIwODYxZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtNCw2ICs0LDcgQEAKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwogCisjaW5jbHVkZSAiY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRl
ICJjb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCIKICNpbmNsdWRlICJjb21waWxlci9Gb3JMb29w
VW5yb2xsLmgiCkBAIC0xODYsNiArMTg3LDEwIEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNv
bnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMpKQogICAgICAg
ICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuTWFya0J1aWx0SW5GdW5jdGlvbnNGb3JFbXVs
YXRpb24ocm9vdCk7CiAKKyAgICAgICAgLy8gQ2xhbXBpbmcgdW5pZm9ybSBhcnJheSBib3VuZHMg
bmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KKyAgICAgICAg
aWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlf
Qk9VTkRTKSkKKyAgICAgICAgICAgIEFycmF5Qm91bmRzQ2xhbXBlcjo6TWFya0luZGlyZWN0QXJy
YXlCb3VuZHNGb3JDbGFtcGluZyhyb290KTsKKwogICAgICAgICAvLyBDYWxsIG1hcExvbmdWYXJp
YWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgogICAgICAg
ICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBtYXBwZWQg
c3ltYm9sIG5hbWVzIGFuZAogICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFwcGVkIGFu
ZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCmluZGV4IDU1MmZhNTA2NmRl
MmZmMjU4ZmFhM2JkNGRiNjMyY2FjNWEyOTdhNTUuLjA3ZmQxYWE1NGVjNGRjYTEzMWJhZGJiMzAy
ODQ1Y2I3YTY3ZGEzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApAQCAtMjM1LDkgKzIzNSwzOCBAQCBib29s
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OgotICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CiAgICAgICAgICAgICB3cml0ZVRyaXBs
ZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QWRkSW5kZXhD
bGFtcCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZp
c2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJbaW50
KGNsYW1wKGZsb2F0KCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGludCBtYXhTaXplOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmxl
ZnQgPSBub2RlLT5nZXRMZWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIFRUeXBlIGxlZnRUeXBl
ID0gbGVmdC0+Z2V0VHlwZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc0Fy
cmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBzaGFkZXIgd2lsbCBmYWlsIHZhbGlkYXRpb24gaWYgdGhlIGFycmF5IGxlbmd0aCBpcyBu
b3QgPiAwLgorICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldEFy
cmF5U2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
eFNpemUgPSBsZWZ0VHlwZS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiksIDAuMCwgIiA8PCBtYXhTaXplIDw8
ICIuMCkpXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwg
TlVMTCwgIlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CiAgICAgICAgICAgICBpZiAodmlzaXQgPT0g
SW5WaXNpdCkKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmgKaW5kZXggZWZkMGI1ZmMyZDhmYjc1Zjg1
MTk4Y2E2YmRkNjMyMTc2ZDU0MjQyNC4uZDk4ZTI5MGM1NWYzOGM0ZDBiZmZlYmFlY2JlNjE3OTBh
ODI3NzY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEdMU0xCYXNlLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0xCYXNlLmgKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxzZXQ+CiAK
KyNpbmNsdWRlICJjb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKICNpbmNsdWRlICJjb21w
aWxlci9Gb3JMb29wVW5yb2xsLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKQEAgLTQ3LDYgKzQ4LDcgQEAgcHJp
dmF0ZToKICAgICB0eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKICAg
ICBEZWNsYXJlZFN0cnVjdHMgbURlY2xhcmVkU3RydWN0czsKIAorICAgIEFycmF5Qm91bmRzQ2xh
bXBlciBtQXJyYXlDbGFtcGVyOwogICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJt
T3V0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQu
Y3BwCmluZGV4IGU4M2M3YjcyZjJhMzA4NjEyNjBiZWFmZTFkYzUwNGRkYjRkYTAyODkuLmY0OGEw
NDljNjMzZGVlZDZkODE4Mjg3MjM0M2JmNzQ5OGQ1ZDZhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIFRTdHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKICAgICBpZiAocXVh
bGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKQogICAgICAg
ICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IGdldFByZWNpc2lvblN0
cmluZygpIDw8ICIgIjsKICAgICBpZiAoYXJyYXkpCi0gICAgICAgIHN0cmVhbSA8PCAiYXJyYXkg
b2YgIjsKKyAgICAgICAgc3RyZWFtIDw8ICJhcnJheVsiIDw8IGdldEFycmF5U2l6ZSgpIDw8ICJd
IG9mICI7CiAgICAgaWYgKG1hdHJpeCkKICAgICAgICAgc3RyZWFtIDw8IHNpemUgPDwgIlgiIDw8
IHNpemUgPDwgIiBtYXRyaXggb2YgIjsKICAgICBlbHNlIGlmIChzaXplID4gMSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAppbmRl
eCA4NDNjNDBlYmI1YzZmMWFkNjAzZWY2ODcxNGM2OTE5YWMwYjc1NTFiLi5iNzVlNjAwOWI3MDQ5
ZGM0MjUwYWVlY2E5NjEzMDliNTVkNzc5ZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCkBAIC00MDAsOSArNDAwLDE1IEBA
IHB1YmxpYzoKICAgICBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gcmln
aHQ7IH0KICAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7CiAKKyAgICB2b2lkIHNldEFkZElu
ZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9CisgICAgYm9vbCBnZXRBZGRJbmRl
eENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVElu
dGVybVR5cGVkKiBsZWZ0OwogICAgIFRJbnRlcm1UeXBlZCogcmlnaHQ7CisKKyAgICAvLyBJZiBz
ZXQgdG8gdHJ1ZSwgd3JhcCBhbnkgRU9wSW5kZXhJbmRpcmVjdCB3aXRoIGEgY2xhbXAgdG8gYm91
bmRzCisgICAgYm9vbCBhZGRJbmRleENsYW1wOwogfTsKIAogLy8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168481</attachid>
            <date>2012-10-12 14:19:35 -0700</date>
            <delta_ts>2012-10-15 12:45:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98977-20121013081829.patch</filename>
            <type>text/plain</type>
            <size>23301</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGJiMTUyMTJkZWJkZjkwM2ZhMTYxODg4NGU3ZTkyNDBhYzVhNTkzOC4uNzBkYTRlZmVhYzRi
MmQ4OWM2YWJlOTk3MzQwNGY1ZTk4MDIzM2UyZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEwLTEyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRpb24gdG8gY2xhbXAg
dW5pZm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAgICAgaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD00OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIGRvZXMgbm90
IGFsbG93IEdMU0wgY29kZSB0byBpbmRleCBhIHVuaWZvcm0gYXJyYXkgb3V0c2lkZSBpdHMgYm91
bmRzLiBBZGQgYQorICAgICAgICBmbGFnIHRvIHRoZSBBTkdMRSBjb21waWxlciB0byBpbnNlcnQg
Y2xhbXAgc3RhdGVtZW50cyBhcm91bmQgc3VjaCBpbmRleGluZy4KKyAgICAgICAgU2luY2UgaXQg
aXMgcG9zc2libGUgdG8gYWNjZXNzIHZlYzIvMy80IGFuZCBtYXQyLzMvNCBjb21wb25lbnRzIGJ5
IGFycmF5IGluZGV4aW5nLAorICAgICAgICB0aGV5IG11c3QgYmUgc2ltaWxhcmx5IGNsYW1wZWQu
CisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgaXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0
byBhbHdheXMgZGV0ZXJtaW5lIHRoYXQgdGhlIGluZGV4aW5nIGlzCisgICAgICAgIG9wZXJhdGlu
ZyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgInVu
aWZvcm0gbWF0NCBhIi4gQU5HTEUKKyAgICAgICAgaXMgY3VycmVudGx5IG5vdCBhYmxlIHRvIHRl
bGwgdXMgdGhhdCB0aGUgcnZhbHVlIG9mICJhWzBdIiBpcyBhIHVuaWZvcm0sIGp1c3QgdGhhdAor
ICAgICAgICBpdCBoYXMgYSBzaXplIG9mIDQuIFRoZXJlZm9yZSwgdGhlIGNsYW1waW5nIGlzIGRv
bmUgb24gYWxsIGluZGlyZWN0IGFycmF5IGluZGV4aW5nLgorCisgICAgICAgIFRoaXMgd2lsbCBo
YXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBGdXR1cmUgZW5oYW5jZW1lbnRzIG1heSBiZSBhYmxl
IHRvIGRldGVybWluZQorICAgICAgICBjYXNlcyB3aGVyZSB0aGUgY2xhbXBpbmcgaXMgbm90IG5l
Y2Vzc2FyeS4gQ3VycmVudGx5IG9ubHkgZGlyZWN0IGluZGV4aW5nIGlzIHNraXBwZWQKKyAgICAg
ICAgKGkuZS4gbG9va2luZyB1cCBhIHZhbHVlIHVzaW5nIGEgY29uc3RhbnQgaW5kZXgpLgorCisg
ICAgICAgIFRoZSBjbGFtcCBpbnNlcnRpb24gaXMgb25seSBwZXJmb3JtZWQgb24gdGhlIEdMU0wg
b3V0cHV0LiBEaXJlY3QzRCBhbHJlYWR5IGd1YXJhbnRlZXMKKyAgICAgICAgdGhhdCBvdXQtb2Yt
Ym91bmRzIHVuaWZvcm0gYXJyYXkgYWNjZXNzIHJldHVybnMgYSB6ZXJvIHZhbHVlLgorCisgICAg
ICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6IE5ldyBjb21waWxl
ciBvcHRpb24uCisgICAgICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHA6
IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpBcnJheUJvdW5kc0NsYW1wZXIp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVm
aW5pdGlvbik6IEluamVjdHMgYSBjbGFtcGluZyBmdW5jdGlvbiBmb3IgaW50ZWdlcnMgaW50byBH
TFNMIHNvdXJjZS4KKyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6TWFya0luZGlyZWN0QXJy
YXlCb3VuZHNGb3JDbGFtcGluZyk6IEV4YW1pbmVzIHRoZSBBU1QgbG9va2luZyBmb3Igbm9uLWRp
cmVjdCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6Q2xlYW51
cCk6IFJlc2V0cyB0aGUgc3RhdGUgc28gdGhhdCBzdWJzZXF1ZW50IHJ1bnMgc3RhcnQgZnJlc2gu
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcik6CisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6
OkdldEFycmF5Qm91bmRzQ2xhbXBOZWVkZWQpOgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVy
OjpTZXRBcnJheUJvdW5kc0NsYW1wTmVlZGVkKTogTWFya3MgdGhlIHRyZWUgYXMgbmVlZGluZyB0
aGUgY2xhbXBpbmcgZnVuY3Rpb24uCisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNw
cDoKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6IFJ1biB0aGUgY2xhbXBpbmcgY29kZSBp
ZiB0aGUgY29tcGlsZSBvcHRpb24gd2FzIHNldC4KKyAgICAgICAgKFRDb21waWxlcjo6Y2xlYXJS
ZXN1bHRzKToKKyAgICAgICAgKFRDb21waWxlcjo6Z2V0QXJyYXlCb3VuZHNDbGFtcGVyKTogRXhw
b3NlcyB0aGUgYXJyYXkgY2xhbXBlciBoZWxwZXIuCisgICAgICAgICogc3JjL2NvbXBpbGVyL091
dHB1dEdMU0xCYXNlLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkp
OiBJZiB0aGUgZXhwcmVzc2lvbiBoYXMgYmVlbiBmbGFnZ2VkLCBpbnNlcnQgYW4gYXBwcm9wcmlh
dGUgImNsYW1wIiBzdGF0ZW1lbnQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEdMU0xC
YXNlLmg6CisgICAgICAgIChUT3V0cHV0R0xTTEJhc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9TaEhhbmRsZS5oOgorICAgICAgICAoVENvbXBpbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvVHJhbnNsYXRvckVTU0wuY3BwOgorICAgICAgICAoVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0
ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcDoKKyAgICAgICAg
KFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRl
cm1PdXQuY3BwOgorICAgICAgICAoVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKTogQWRkIGFycmF5
IHNpemUgdG8gaW50ZXJtZWRpYXRlIHRyZWUgb3V0cHV0LgorICAgICAgICAqIHNyYy9jb21waWxl
ci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnNldEFkZEluZGV4Q2xh
bXApOiBOZXcgZmxhZyBmb3IgaW5kaWNhdGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG5lZWRzIGNs
YW1waW5nLgorICAgICAgICAoVEludGVybUJpbmFyeTo6Z2V0QWRkSW5kZXhDbGFtcCk6CisgICAg
ICAgIChUSW50ZXJtQmluYXJ5KToKKwogMjAxMi0wOS0xMyAgTWFyayBSb3dlICA8bXJvd2VAYXBw
bGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI1NTcyMD4gRml4IHRoZSBidWls
ZCB3aXRoIG5ld2VyIENsYW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9B
TkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
QU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZjJiZTYwZjU0OGE2ZjQ4OTk5
M2JlZjQ2OWFlNjRkZmNhZDU2MzYyLi5iODMyN2ZkMDY2Y2UzOGVmY2MxOTAwODk1OTY5MGVlMDMw
MGQwN2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTksNiArOSw4IEBACiAvKiBCZWdpbiBQQlhCdWls
ZEZpbGUgc2VjdGlvbiAqLwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxp
c3QgaW4gQ29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJE
QjA5MTVGRUM5MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZF
Q0FFNTAwOTdFQkM3IC8qIEFOR0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAq
LzsgfTsKKwkJMzFFRDQ3MUMxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUVENDcx
QTE2MjRFRkQxMDAyNDUwNzggLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsgfTsKKwkJMzFF
RDQ3MUQxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFRDQ3MUIxNjI0RUZEMTAwMjQ1
MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oICovOyB9OwogCQk0OTk1MUMwMzE0QjdBQUIzMDA2
MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMu
aCAqLzsgfTsKIAkJNDk5NTFDMDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
Ki87IH07CiAJCTQ5OTUxQzBBMTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5
NTFDMDYxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi87IH07
CkBAIC0xMzYsNiArMTM4LDggQEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAq
LwogCQkzMTJCREIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMTJCREIwQTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEFOR0xFLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFF
RDQ3MUExNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJvdW5kc0NsYW1wZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMUVENDcxQjE2MjRFRkQxMDAyNDUwNzggLyogQXJy
YXlCb3VuZHNDbGFtcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5
Qm91bmRzQ2xhbXBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTk1MUMwMjE0
QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OTUxQzA2MTRCN0FBRDgw
MDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTQ0LDYgKzU0OCw4IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2
OSAvKiBjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJMzFFRDQ3MUExNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAg
Ki8sCisJCQkJMzFFRDQ3MUIxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5o
ICovLAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJ
CQk0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3Bw
ICovLAogCQkJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oICovLApAQCAtNzEyLDYgKzcxOCw3IEBACiAJCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4
NTM5IC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4
NDExNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRl
eFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzFFRDQ3MUQxNjI0RUZEMTAwMjQ1
MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC04MjksNiArODM2
LDcgQEAKIAkJCQlBMjY1NjgzRjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJh
dmVyc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8q
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2
NTY4NDIxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTMxRUQ0NzFDMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5k
c0NsYW1wZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9UYXJnZXQucHJpIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQpp
bmRleCA0ZTkzMDNhYjc2YTNiMGQ3ZTkwMzkwNTE2NjAzMWY2ZjNkMmM4YTg5Li5lYWE5MzZkODhj
ZmFmMDU1ZmQ5NWY2YjUwMDg2Y2UzZTU4MTQ3MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1Rhcmdl
dC5wcmkKQEAgLTE3LDYgKzE3LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJ
Ui9pbmNsdWRlCiAKIEhFQURFUlMgKz0gXAorICAgIHNyYy9jb21waWxlci9BcnJheUJvdW5kc0Ns
YW1wZXIuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0Jhc2VUeXBlcy5oIFwKICAgICBzcmMvY29tcGls
ZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0NvbW1vbi5o
IFwKQEAgLTkwLDYgKzkxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmgKIAogU09VUkNFUyArPSBcCisgICAgc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xh
bXBlci5jcHAgXAogICAgIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
XAogICAgIHNyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAgXAogICAgIHNyYy9jb21waWxlci9D
b21waWxlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggOWE0YTM2ZGJmMzBiMWQxMTVmYzNlZjJkYTNjY2Vk
MzhhZmY3Y2JmYi4uZDgyOTMxZWExYmI1NzllODhhMGE4MmZiMTNhNTFkMWQ4ZDA2MDNjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxh
bmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVy
TGFuZy5oCkBAIC0xNDIsNyArMTQyLDEzIEBAIHR5cGVkZWYgZW51bSB7CiAgIC8vIC0gVGhlIHNo
YWRlciBzcGVjIGlzIFNIX1dFQkdMX1NQRUMuCiAgIC8vIC0gVGhlIGNvbXBpbGUgb3B0aW9ucyBj
b250YWluIHRoZSBTSF9USU1JTkdfUkVTVFJJQ1RJT05TIGZsYWcuCiAgIC8vIC0gVGhlIHNoYWRl
ciB0eXBlIGlzIFNIX0ZSQUdNRU5UX1NIQURFUi4KLSAgU0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4
MDQwMAorICBTSF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAwLAorCisgIC8vIFRoaXMgZmxhZyBl
bnN1cmVzIGFsbCBpbmRpcmVjdCAoZXhwcmVzc2lvbi1iYXNlZCkgYXJyYXkgaW5kZXhpbmcKKyAg
Ly8gaXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gVGhpcyBlbnN1cmVzLCBm
b3IgZXhhbXBsZSwKKyAgLy8gdGhhdCB5b3UgY2Fubm90IHJlYWQgb2ZmIHRoZSBlbmQgb2YgYSB1
bmlmb3JtLCB3aGV0aGVyIGFuIGFycmF5CisgIC8vIHZlYzIzNCwgb3IgbWF0MjM0IHR5cGUuCisg
IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyA9IDB4MDgwMAogfSBTaENvbXBpbGVPcHRp
b25zOwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMmU5MzgxODIyNWU0
ZDY3ZWQ2NWQ2NTFhNjgyMGExY2NmMTQ4ZjgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHAKQEAgLTAs
MCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgorCituYW1lc3BhY2UgeworCitjb25zdCBjaGFyKiBrSW50Q2xhbXBTb3VyY2UgPSAiaW50
IHdlYmdsX2ludF9jbGFtcChpbnQgdmFsdWUsIGludCBtaW5WYWx1ZSwgaW50IG1heFZhbHVlKSB7
IHJldHVybiAoKHZhbHVlIDwgbWluVmFsdWUpID8gbWluVmFsdWUgOiAoKHZhbHVlID4gbWF4VmFs
dWUpID8gbWF4VmFsdWUgOiB2YWx1ZSkpOyB9IjsKKworY2xhc3MgQXJyYXlCb3VuZHNDbGFtcGVy
TWFya2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGljOgorICAgIEFycmF5Qm91
bmRzQ2xhbXBlck1hcmtlcihBcnJheUJvdW5kc0NsYW1wZXImIGNsYW1wZXIpCisgICAgICAgIDog
bUNsYW1wZXIoY2xhbXBlcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhJbmRpcmVjdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBsZWZ0ID0gbm9kZS0+Z2V0TGVmdCgpOworICAgICAgICAgICAg
aWYgKGxlZnQtPmlzQXJyYXkoKSB8fCBsZWZ0LT5pc1ZlY3RvcigpIHx8IGxlZnQtPmlzTWF0cml4
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QWRkSW5kZXhDbGFt
cCgpOworICAgICAgICAgICAgICAgIG1DbGFtcGVyLlNldEFycmF5Qm91bmRzQ2xhbXBOZWVkZWQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Citwcml2YXRlOgorICAgIEFycmF5Qm91bmRzQ2xhbXBlciYgbUNsYW1wZXI7Cit9OworCit9ICAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0FycmF5Qm91bmRzQ2xhbXBlcjo6QXJyYXlCb3VuZHND
bGFtcGVyKCkKKyAgICA6IG1OZWVkc0NsYW1waW5nKGZhbHNlKQoreworfQorCit2b2lkIEFycmF5
Qm91bmRzQ2xhbXBlcjo6T3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oVEluZm9TaW5r
QmFzZSYgb3V0KSBjb25zdAoreworICAgIGlmICghbU5lZWRzQ2xhbXBpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBvdXQgPDwgIi8vIEJFR0lOOiBHZW5lcmF0ZWQgY29kZSBmb3IgYXJyYXkgYm91
bmRzIGNsYW1waW5nXG5cbiI7CisgICAgb3V0IDw8IGtJbnRDbGFtcFNvdXJjZSA8PCAiXG5cbiI7
CisgICAgb3V0IDw8ICIvLyBFTkQ6IEdlbmVyYXRlZCBjb2RlIGZvciBhcnJheSBib3VuZHMgY2xh
bXBpbmdcblxuIjsKK30KKwordm9pZCBBcnJheUJvdW5kc0NsYW1wZXI6Ok1hcmtJbmRpcmVjdEFy
cmF5Qm91bmRzRm9yQ2xhbXBpbmcoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgQVNTRVJUKHJv
b3QpOworCisgICAgQXJyYXlCb3VuZHNDbGFtcGVyTWFya2VyIGNsYW1wZXIoKnRoaXMpOworICAg
IHJvb3QtPnRyYXZlcnNlKCZjbGFtcGVyKTsKK30KKwordm9pZCBBcnJheUJvdW5kc0NsYW1wZXI6
OkNsZWFudXAoKQoreworICAgIG1OZWVkc0NsYW1waW5nID0gZmFsc2U7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1w
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0Ns
YW1wZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZWY3YTk2NGIxYmVmNWNkMGQwOTY1YTU1ZWY3ZTEwZGZmZmRj
MWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfQVJS
QVlfQk9VTkRTX0NMQU1QRVJfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgor
CisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9pbnRl
cm1lZGlhdGUuaCIKKworY2xhc3MgQXJyYXlCb3VuZHNDbGFtcGVyIHsKK3B1YmxpYzoKKyAgICBB
cnJheUJvdW5kc0NsYW1wZXIoKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIHRv
IGluamVjdCBhIGNsYW1wIGZ1bmN0aW9uLgorICAgIGJvb2wgR2V0QXJyYXlCb3VuZHNDbGFtcE5l
ZWRlZCgpIHsgcmV0dXJuIG1OZWVkc0NsYW1waW5nOyB9CisgICAgdm9pZCBTZXRBcnJheUJvdW5k
c0NsYW1wTmVlZGVkKCkgeyBtTmVlZHNDbGFtcGluZyA9IHRydWU7IH0KKworICAgIC8vIE91dHB1
dCBhcnJheSBjbGFtcCBmdW5jdGlvbiBkZWZpbml0aW9uIGludG8gdGhlIHNoYWRlciBzb3VyY2Uu
CisgICAgdm9pZCBPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihUSW5mb1NpbmtCYXNl
JiBvdXQpIGNvbnN0OworCisgICAgLy8gTWFya3Mgbm9kZXMgaW4gdGhlIHRyZWUgdGhhdCBpbmRl
eCBhcnJheXMgaW5kaXJlY3RseSBhcworICAgIC8vIHJlcXVpcmluZyBjbGFtcGluZy4KKyAgICB2
b2lkIE1hcmtJbmRpcmVjdEFycmF5Qm91bmRzRm9yQ2xhbXBpbmcoVEludGVybU5vZGUqIHJvb3Qp
OworCisgICAgdm9pZCBDbGVhbnVwKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtTmVlZHNDbGFt
cGluZzsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVy
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAK
aW5kZXggY2FiODA1NmJjZWU1NTUxYjllMzNiYzkxMDEwZGMwYjZjZTcyMGQwYi4uZTU4MDQzMjEz
YWViOTQwZjZkNGMwYjllMDVhOTc1ZDk3N2JmNzQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKKyNpbmNsdWRlICJjb21waWxlci9BcnJh
eUJvdW5kc0NsYW1wZXIuaCIKICNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKQEAgLTE4Niw2ICsxODcsMTAgQEAgYm9vbCBUQ29t
cGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAg
ICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZV
TkNUSU9OUykpCiAgICAgICAgICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5NYXJrQnVpbHRJ
bkZ1bmN0aW9uc0ZvckVtdWxhdGlvbihyb290KTsKIAorICAgICAgICAvLyBDbGFtcGluZyB1bmlm
b3JtIGFycmF5IGJvdW5kcyBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9u
cyBwYXNzLgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9DTEFN
UF9JTkRJUkVDVF9BUlJBWV9CT1VORFMpKQorICAgICAgICAgICAgYXJyYXlCb3VuZHNDbGFtcGVy
Lk1hcmtJbmRpcmVjdEFycmF5Qm91bmRzRm9yQ2xhbXBpbmcocm9vdCk7CisKICAgICAgICAgLy8g
Q2FsbCBtYXBMb25nVmFyaWFibGVOYW1lcygpIGJlZm9yZSBjb2xsZWN0QXR0cmlic1VuaWZvcm1z
KCkgc28gaW4KICAgICAgICAgLy8gY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHdlIGFscmVhZHkg
aGF2ZSB0aGUgbWFwcGVkIHN5bWJvbCBuYW1lcyBhbmQKICAgICAgICAgLy8gd2UgY291bGQgY29t
cG9zaXRlIG1hcHBlZCBhbmQgb3JpZ2luYWwgdmFyaWFibGUgbmFtZXMuCkBAIC0yMzEsNiArMjM2
LDcgQEAgdm9pZCBUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cygpCiAgICAgdW5pZm9ybXMuY2xlYXIo
KTsKIAogICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLkNsZWFudXAoKTsKKyAgICBhcnJheUJv
dW5kc0NsYW1wZXIuQ2xlYW51cCgpOwogfQogCiBib29sIFRDb21waWxlcjo6ZGV0ZWN0UmVjdXJz
aW9uKFRJbnRlcm1Ob2RlKiByb290KQpAQCAtMzMxLDMgKzMzNyw4IEBAIGNvbnN0IEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yJiBUQ29tcGlsZXI6OmdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CiB9CisKK2NvbnN0
IEFycmF5Qm91bmRzQ2xhbXBlciYgVENvbXBpbGVyOjpnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBj
b25zdAoreworICAgIHJldHVybiBhcnJheUJvdW5kc0NsYW1wZXI7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApp
bmRleCA1NTJmYTUwNjZkZTJmZjI1OGZhYTNiZDRkYjYzMmNhYzVhMjk3YTU1Li4yMTAwZWFhMGEz
NTVkYzhkMmIzYWMxNmI4ZDdlNzg2NDE5NTIyYzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKQEAgLTIzNSw5
ICsyMzUsMzggQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5KiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdDoKLSAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgogICAgICAg
ICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldEFkZEluZGV4Q2xhbXAoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiW3dlYmdsX2ludF9jbGFtcCgiOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0VmlzaXQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBpbnQgbWF4U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
VEludGVybVR5cGVkICpsZWZ0ID0gbm9kZS0+Z2V0TGVmdCgpOworICAgICAgICAgICAgICAgICAg
ICBUVHlwZSBsZWZ0VHlwZSA9IGxlZnQtPmdldFR5cGUoKTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAobGVmdC0+aXNBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgc2hhZGVyIHdpbGwgZmFpbCB2YWxpZGF0aW9uIGlmIHRoZSBh
cnJheSBsZW5ndGggaXMgbm90ID4gMC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemUg
PSBsZWZ0VHlwZS5nZXRBcnJheVNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXhTaXplID0gbGVmdFR5cGUuZ2V0Tm9taW5hbFNpemUoKSAtIDE7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsIDAsICIg
PDwgbWF4U2l6ZSA8PCAiKV0iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3cml0ZVRyaXBs
ZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgogICAgICAgICAgICAgaWYg
KHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCmluZGV4IGVmZDBiNWZj
MmQ4ZmI3NWY4NTE5OGNhNmJkZDYzMjE3NmQ1NDI0MjQuLmQ5OGUyOTBjNTVmMzhjNGQwYmZmZWJh
ZWNiZTYxNzkwYTgyNzc2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCkBAIC05LDYgKzksNyBAQAogCiAjaW5jbHVk
ZSA8c2V0PgogCisjaW5jbHVkZSAiY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL2ludGVy
bWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCkBAIC00Nyw2ICs0
OCw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0
cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7CiAKKyAgICBBcnJh
eUJvdW5kc0NsYW1wZXIgbUFycmF5Q2xhbXBlcjsKICAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5y
b2xsOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1NoSGFuZGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hI
YW5kbGUuaAppbmRleCAyNjUyOGI4ZGJjYmEwYjA2NGMxODhhN2U5YTM1OTY5OGM3ZTY1OGJkLi4x
YTUyMTE5ZDc3NDA2YTM1MjEwZGZiNDczMWE4NDZhM2IxYTU2MmI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaApAQCAtMTYsNiArMTYsNyBA
QAogCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAKKyNpbmNsdWRlICJjb21waWxl
ci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKICNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKQEAgLTk5LDYgKzEwMCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVuc2lvbkJlaGF2aW9yKCkg
Y29uc3Q7CiAKICAgICBjb25zdCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgZ2V0QnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IoKSBjb25zdDsKKyAgICBjb25zdCBBcnJheUJvdW5kc0NsYW1wZXImIGdl
dEFycmF5Qm91bmRzQ2xhbXBlcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNoU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlOwpAQCAtMTExLDYgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgVEV4dGVuc2lv
bkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOwogCiAgICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CisgICAgQXJyYXlCb3VuZHNDbGFtcGVyIGFycmF5
Qm91bmRzQ2xhbXBlcjsKIAogICAgIC8vIFJlc3VsdHMgb2YgY29tcGlsYXRpb24uCiAgICAgVElu
Zm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcAppbmRleCBlM2Ey
YzJhODAyNDBhOTUzZDk3NmZmOGY3MTlhNjk3MDJmN2FiMGQxLi5kOTBjNzBjYjIyNzMzMTNkZmE4
NmM1OWI5ODg0OGE3YTRjMzdlZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKQEAgLTIyLDYgKzIyLDkgQEAg
dm9pZCBUcmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSB7CiAgICAg
Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbigKICAgICAgICAgc2luaywgZ2V0U2hhZGVyVHlwZSgpID09IFNIX0ZSQUdNRU5UX1NIQURF
Uik7CiAKKyAgICAvLyBXcml0ZSBhcnJheSBib3VuZHMgY2xhbXBpbmcgZW11bGF0aW9uIGlmIG5l
ZWRlZC4KKyAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9u
RGVmaW5pdGlvbihzaW5rKTsKKwogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgogICAg
IFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luayk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1
dEVTU0wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9UcmFuc2xhdG9yR0xTTC5jcHAKaW5kZXggYmIwN2ExZWI0ZThmZmY2NjYxZjkyNGZkZjcwODM5
Y2ZlMDljMzA4MC4uYmEzODExMmMyMjIzY2E3MjRjMDRkYjYzOWJhMDQwNjM3OGVmNWMwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNs
YXRvckdMU0wuY3BwCkBAIC0zNSw2ICszNSw5IEBAIHZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewogICAgIGdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
KCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24oCiAgICAgICAgIHNpbmssIGZhbHNl
KTsKIAorICAgIC8vIFdyaXRlIGFycmF5IGJvdW5kcyBjbGFtcGluZyBlbXVsYXRpb24gaWYgbmVl
ZGVkLgorICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25E
ZWZpbml0aW9uKHNpbmspOworCiAgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCiAgICAg
VE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rKTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0
R0xTTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
aW50ZXJtT3V0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRl
cm1PdXQuY3BwCmluZGV4IGU4M2M3YjcyZjJhMzA4NjEyNjBiZWFmZTFkYzUwNGRkYjRkYTAyODku
LmY0OGEwNDljNjMzZGVlZDZkODE4Mjg3MjM0M2JmNzQ5OGQ1ZDZhZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwCkBAIC00Miw3
ICs0Miw3IEBAIFRTdHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKICAgICBp
ZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZpZXIgIT0gRXZxR2xvYmFsKQog
ICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IGdldFByZWNp
c2lvblN0cmluZygpIDw8ICIgIjsKICAgICBpZiAoYXJyYXkpCi0gICAgICAgIHN0cmVhbSA8PCAi
YXJyYXkgb2YgIjsKKyAgICAgICAgc3RyZWFtIDw8ICJhcnJheVsiIDw8IGdldEFycmF5U2l6ZSgp
IDw8ICJdIG9mICI7CiAgICAgaWYgKG1hdHJpeCkKICAgICAgICAgc3RyZWFtIDw8IHNpemUgPDwg
IlgiIDw8IHNpemUgPDwgIiBtYXRyaXggb2YgIjsKICAgICBlbHNlIGlmIChzaXplID4gMSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlh
dGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUu
aAppbmRleCA4NDNjNDBlYmI1YzZmMWFkNjAzZWY2ODcxNGM2OTE5YWMwYjc1NTFiLi5iNzVlNjAw
OWI3MDQ5ZGM0MjUwYWVlY2E5NjEzMDliNTVkNzc5ZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCkBAIC00MDAsOSArNDAw
LDE1IEBAIHB1YmxpYzoKICAgICBUSW50ZXJtVHlwZWQqIGdldFJpZ2h0KCkgY29uc3QgeyByZXR1
cm4gcmlnaHQ7IH0KICAgICBib29sIHByb21vdGUoVEluZm9TaW5rJik7CiAKKyAgICB2b2lkIHNl
dEFkZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9CisgICAgYm9vbCBnZXRB
ZGRJbmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgVEludGVybVR5cGVkKiBsZWZ0OwogICAgIFRJbnRlcm1UeXBlZCogcmlnaHQ7CisKKyAgICAv
LyBJZiBzZXQgdG8gdHJ1ZSwgd3JhcCBhbnkgRU9wSW5kZXhJbmRpcmVjdCB3aXRoIGEgY2xhbXAg
dG8gYm91bmRzCisgICAgYm9vbCBhZGRJbmRleENsYW1wOwogfTsKIAogLy8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168760</attachid>
            <date>2012-10-15 12:45:50 -0700</date>
            <delta_ts>2012-10-16 14:34:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98977-20121016064440.patch</filename>
            <type>text/plain</type>
            <size>30102</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGJiMTUyMTJkZWJkZjkwM2ZhMTYxODg4NGU3ZTkyNDBhYzVhNTkzOC4uMDIyYTRhYjhiZmNk
NzI5NDg2Nzc2ZTAwZDMzZTBiOGQyOGYwMzU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEwLTE1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRpb24gdG8gY2xhbXAg
dW5pZm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAgICAgaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD00OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIGRvZXMgbm90
IGFsbG93IEdMU0wgY29kZSB0byBpbmRleCBhIHVuaWZvcm0gYXJyYXkgb3V0c2lkZSBpdHMgYm91
bmRzLiBBZGQgYQorICAgICAgICBmbGFnIHRvIHRoZSBBTkdMRSBjb21waWxlciB0byBpbnNlcnQg
Y2xhbXAgc3RhdGVtZW50cyBhcm91bmQgc3VjaCBpbmRleGluZy4KKyAgICAgICAgU2luY2UgaXQg
aXMgcG9zc2libGUgdG8gYWNjZXNzIHZlYzIvMy80IGFuZCBtYXQyLzMvNCBjb21wb25lbnRzIGJ5
IGFycmF5IGluZGV4aW5nLAorICAgICAgICB0aGV5IG11c3QgYmUgc2ltaWxhcmx5IGNsYW1wZWQu
CisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgaXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0
byBhbHdheXMgZGV0ZXJtaW5lIHRoYXQgdGhlIGluZGV4aW5nIGlzCisgICAgICAgIG9wZXJhdGlu
ZyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgInVu
aWZvcm0gbWF0NCBhIi4gQU5HTEUKKyAgICAgICAgaXMgY3VycmVudGx5IG5vdCBhYmxlIHRvIHRl
bGwgdXMgdGhhdCB0aGUgcnZhbHVlIG9mICJhWzBdIiBpcyBhIHVuaWZvcm0sIGp1c3QgdGhhdAor
ICAgICAgICBpdCBoYXMgYSBzaXplIG9mIDQuIFRoZXJlZm9yZSwgdGhlIGNsYW1waW5nIGlzIGRv
bmUgb24gYWxsIGluZGlyZWN0IGFycmF5IGluZGV4aW5nLgorCisgICAgICAgIFRoaXMgd2lsbCBo
YXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBGdXR1cmUgZW5oYW5jZW1lbnRzIG1heSBiZSBhYmxl
IHRvIGRldGVybWluZQorICAgICAgICBjYXNlcyB3aGVyZSB0aGUgY2xhbXBpbmcgaXMgbm90IG5l
Y2Vzc2FyeS4gQ3VycmVudGx5IG9ubHkgZGlyZWN0IGluZGV4aW5nIGlzIHNraXBwZWQKKyAgICAg
ICAgKGkuZS4gbG9va2luZyB1cCBhIHZhbHVlIHVzaW5nIGEgY29uc3RhbnQgaW5kZXgpLgorCisg
ICAgICAgIFRoZSBjbGFtcCBpbnNlcnRpb24gaXMgb25seSBwZXJmb3JtZWQgb24gdGhlIEdMU0wg
b3V0cHV0LiBEaXJlY3QzRCBhbHJlYWR5IGd1YXJhbnRlZXMKKyAgICAgICAgdGhhdCBvdXQtb2Yt
Ym91bmRzIHVuaWZvcm0gYXJyYXkgYWNjZXNzIHJldHVybnMgYSB6ZXJvIHZhbHVlLgorCisgICAg
ICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6IE5ldyBjb21waWxl
ciBvcHRpb24uCisgICAgICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHA6
IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpBcnJheUJvdW5kc0NsYW1wZXIp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVm
aW5pdGlvbik6IEluamVjdHMgYSBjbGFtcGluZyBmdW5jdGlvbiBmb3IgaW50ZWdlcnMgaW50byBH
TFNMIHNvdXJjZS4KKyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6TWFya0luZGlyZWN0QXJy
YXlCb3VuZHNGb3JDbGFtcGluZyk6IEV4YW1pbmVzIHRoZSBBU1QgbG9va2luZyBmb3Igbm9uLWRp
cmVjdCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6Q2xlYW51
cCk6IFJlc2V0cyB0aGUgc3RhdGUgc28gdGhhdCBzdWJzZXF1ZW50IHJ1bnMgc3RhcnQgZnJlc2gu
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oOiBBZGRlZC4KKyAg
ICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcik6CisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6
OkdldEFycmF5Qm91bmRzQ2xhbXBOZWVkZWQpOgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVy
OjpTZXRBcnJheUJvdW5kc0NsYW1wTmVlZGVkKTogTWFya3MgdGhlIHRyZWUgYXMgbmVlZGluZyB0
aGUgY2xhbXBpbmcgZnVuY3Rpb24uCisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNw
cDoKKyAgICAgICAgKFRDb21waWxlcjo6Y29tcGlsZSk6IFJ1biB0aGUgY2xhbXBpbmcgY29kZSBp
ZiB0aGUgY29tcGlsZSBvcHRpb24gd2FzIHNldC4KKyAgICAgICAgKFRDb21waWxlcjo6Y2xlYXJS
ZXN1bHRzKToKKyAgICAgICAgKFRDb21waWxlcjo6Z2V0QXJyYXlCb3VuZHNDbGFtcGVyKTogRXhw
b3NlcyB0aGUgYXJyYXkgY2xhbXBlciBoZWxwZXIuCisgICAgICAgICogc3JjL2NvbXBpbGVyL091
dHB1dEdMU0xCYXNlLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkp
OiBJZiB0aGUgZXhwcmVzc2lvbiBoYXMgYmVlbiBmbGFnZ2VkLCBpbnNlcnQgYW4gYXBwcm9wcmlh
dGUgImNsYW1wIiBzdGF0ZW1lbnQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEdMU0xC
YXNlLmg6CisgICAgICAgIChUT3V0cHV0R0xTTEJhc2UpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci9TaEhhbmRsZS5oOgorICAgICAgICAoVENvbXBpbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvVHJhbnNsYXRvckVTU0wuY3BwOgorICAgICAgICAoVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0
ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcDoKKyAgICAgICAg
KFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRl
cm1PdXQuY3BwOgorICAgICAgICAoVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKTogQWRkIGFycmF5
IHNpemUgdG8gaW50ZXJtZWRpYXRlIHRyZWUgb3V0cHV0LgorICAgICAgICAqIHNyYy9jb21waWxl
ci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnNldEFkZEluZGV4Q2xh
bXApOiBOZXcgZmxhZyBmb3IgaW5kaWNhdGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG5lZWRzIGNs
YW1waW5nLgorICAgICAgICAoVEludGVybUJpbmFyeTo6Z2V0QWRkSW5kZXhDbGFtcCk6CisgICAg
ICAgIChUSW50ZXJtQmluYXJ5KToKKwogMjAxMi0wOS0xMyAgTWFyayBSb3dlICA8bXJvd2VAYXBw
bGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI1NTcyMD4gRml4IHRoZSBidWls
ZCB3aXRoIG5ld2VyIENsYW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkxNGEyMDQ0NWM2OGVmYTU1ZmIzMTJk
MzM4NzU3NWI0MWJlZjVmYS4uODhmMmE0Zjk1ZDA5ZTFiZDI0ZDM4OGM2MjMyNGQ0MWEwZGE4OTRl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTE1ICBEZWFuIEphY2tzb24g
IDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRp
b24gdG8gY2xhbXAgdW5pZm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAg
ICAgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9p
ZD00OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YkdMIGZvcmJpZHMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gc2hhZGVycy4gUmV3cml0
ZSBhbnkgc2hhZGVycyB0bworICAgICAgICBlbnN1cmUgdGhhdCBub24tZGlyZWN0IGFycmF5IGlu
ZGV4aW5nIGlzIGNsYW1wZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkuCisKKyAgICAgICAg
VGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1waW5nLmh0bWwKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlOjpjb21waWxlU2hhZGVyU291cmNlKTogUGFzcyBu
ZXcgY29tcGlsZXIgb3B0aW9uIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUworCiAyMDEy
LTEwLTA5ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXNlIGNv
bXB1dGVMb2dpY2FsKiBtZXRob2RzIGluc3RlYWQgb2YgdXBkYXRlTG9naWNhbCogbWV0aG9kcyBp
biBSZW5kZXJJbWFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xF
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGYyYmU2MGY1NDhhNmY0ODk5OTNiZWY0
NjlhZTY0ZGZjYWQ1NjM2Mi4uYjgzMjdmZDA2NmNlMzhlZmNjMTkwMDg5NTk2OTBlZTAzMDBkMDdk
YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC05LDYgKzksOCBAQAogLyogQmVnaW4gUEJYQnVpbGRGaWxl
IHNlY3Rpb24gKi8KIAkJMzEyQkRCMEMxNUZFQ0FDOTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0IGlu
IENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwOTE1
RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi87IH07CiAJCTMxMkJEQjBFMTVGRUNBRTUw
MDk3RUJDNyAvKiBBTkdMRS50eHQgaW4gQ29weUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMkJEQjBBMTVGRUNBM0EwMDk3RUJDNyAvKiBBTkdMRS50eHQgKi87IH07
CisJCTMxRUQ0NzFDMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFRDQ3MUExNjI0
RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgKi87IH07CisJCTMxRUQ0NzFE
MTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUQ0NzFCMTYyNEVGRDEwMDI0NTA3OCAv
KiBBcnJheUJvdW5kc0NsYW1wZXIuaCAqLzsgfTsKIAkJNDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZF
IC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggKi87
IH07CiAJCTQ5OTUxQzA5MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTk1
MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovOyB9
OwogCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzA2
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovOyB9OwpAQCAt
MTM2LDYgKzEzOCw4IEBACiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJ
MzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5w
bGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxRUQ0NzFB
MTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCb3VuZHNDbGFtcGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFRDQ3MUIxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91
bmRzQ2xhbXBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUJvdW5k
c0NsYW1wZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk5NTFDMDIxNEI3QUFC
MzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTk1
MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5
NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU0NCw2ICs1NDgsOCBAQAogCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhFNjkgLyog
Y29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTMxRUQ0NzFBMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovLAor
CQkJCTMxRUQ0NzFCMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAqLywK
IAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVzLmggKi8sCiAJCQkJNDk5
NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLywK
IAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCAqLywKQEAgLTcxMiw2ICs3MTgsNyBAQAogCQkJCUEyNjU2ODNFMTU5QzIzRTEwMDM5ODUzOSAv
KiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjU2ODQxMTU5
QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RWZXJ0ZXhTaGFk
ZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxRUQ0NzFEMTYyNEVGRDEwMDI0NTA3OCAv
KiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtODI5LDYgKzgzNiw3IEBA
CiAJCQkJQTI2NTY4M0YxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lHcmFwaFRyYXZlcnNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODQwMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODQy
MTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzMUVENDcxQzE2MjRFRkQxMDAyNDUwNzggLyogQXJyYXlCb3VuZHNDbGFt
cGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvVGFyZ2V0LnByaSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKaW5kZXgg
NGU5MzAzYWI3NmEzYjBkN2U5MDM5MDUxNjYwMzFmNmYzZDJjOGE4OS4uZWFhOTM2ZDg4Y2ZhZjA1
NWZkOTVmNmI1MDA4NmNlM2U1ODE0NzBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9UYXJnZXQucHJp
CkBAIC0xNyw2ICsxNyw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvaW5j
bHVkZQogCiBIRUFERVJTICs9IFwKKyAgICBzcmMvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVy
LmggXAogICAgIHNyYy9jb21waWxlci9CYXNlVHlwZXMuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0J1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggXAogICAgIHNyYy9jb21waWxlci9Db21tb24uaCBcCkBA
IC05MCw2ICs5MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHNyYy9jb21waWxlci9WZXJzaW9uR0xT
TC5oCiAKIFNPVVJDRVMgKz0gXAorICAgIHNyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIu
Y3BwIFwKICAgICBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIFwKICAg
ICBzcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAgICBzcmMvY29tcGlsZXIvQ29tcGls
ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xT
TEFORy9TaGFkZXJMYW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCmluZGV4IDlhNGEzNmRiZjMwYjFkMTE1ZmMzZWYyZGEzY2NlZDM4YWZm
N2NiZmIuLmQ4MjkzMWVhMWJiNTc5ZTg4YTBhODJmYjEzYTUxZDFkOGQwNjAzY2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcu
aApAQCAtMTQyLDcgKzE0MiwxMyBAQCB0eXBlZGVmIGVudW0gewogICAvLyAtIFRoZSBzaGFkZXIg
c3BlYyBpcyBTSF9XRUJHTF9TUEVDLgogICAvLyAtIFRoZSBjb21waWxlIG9wdGlvbnMgY29udGFp
biB0aGUgU0hfVElNSU5HX1JFU1RSSUNUSU9OUyBmbGFnLgogICAvLyAtIFRoZSBzaGFkZXIgdHlw
ZSBpcyBTSF9GUkFHTUVOVF9TSEFERVIuCi0gIFNIX0RFUEVOREVOQ1lfR1JBUEggPSAweDA0MDAK
KyAgU0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMCwKKworICAvLyBUaGlzIGZsYWcgZW5zdXJl
cyBhbGwgaW5kaXJlY3QgKGV4cHJlc3Npb24tYmFzZWQpIGFycmF5IGluZGV4aW5nCisgIC8vIGlz
IGNsYW1wZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkuIFRoaXMgZW5zdXJlcywgZm9yIGV4
YW1wbGUsCisgIC8vIHRoYXQgeW91IGNhbm5vdCByZWFkIG9mZiB0aGUgZW5kIG9mIGEgdW5pZm9y
bSwgd2hldGhlciBhbiBhcnJheQorICAvLyB2ZWMyMzQsIG9yIG1hdDIzNCB0eXBlLgorICBTSF9D
TEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgPSAweDA4MDAKIH0gU2hDb21waWxlT3B0aW9uczsK
IAogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9B
cnJheUJvdW5kc0NsYW1wZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzJlOTM4MTgyMjVlNGQ2N2Vk
NjVkNjUxYTY4MjBhMWNjZjE0OGY4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwCkBAIC0wLDAgKzEs
ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIK
KworbmFtZXNwYWNlIHsKKworY29uc3QgY2hhcioga0ludENsYW1wU291cmNlID0gImludCB3ZWJn
bF9pbnRfY2xhbXAoaW50IHZhbHVlLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSkgeyByZXR1
cm4gKCh2YWx1ZSA8IG1pblZhbHVlKSA/IG1pblZhbHVlIDogKCh2YWx1ZSA+IG1heFZhbHVlKSA/
IG1heFZhbHVlIDogdmFsdWUpKTsgfSI7CisKK2NsYXNzIEFycmF5Qm91bmRzQ2xhbXBlck1hcmtl
ciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBBcnJheUJvdW5kc0Ns
YW1wZXJNYXJrZXIoQXJyYXlCb3VuZHNDbGFtcGVyJiBjbGFtcGVyKQorICAgICAgICA6IG1DbGFt
cGVyKGNsYW1wZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChu
b2RlLT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogbGVmdCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICAgICAgICAgIGlmIChs
ZWZ0LT5pc0FycmF5KCkgfHwgbGVmdC0+aXNWZWN0b3IoKSB8fCBsZWZ0LT5pc01hdHJpeCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldEFkZEluZGV4Q2xhbXAoKTsK
KyAgICAgICAgICAgICAgICBtQ2xhbXBlci5TZXRBcnJheUJvdW5kc0NsYW1wTmVlZGVkKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorcHJp
dmF0ZToKKyAgICBBcnJheUJvdW5kc0NsYW1wZXImIG1DbGFtcGVyOworfTsKKworfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCitBcnJheUJvdW5kc0NsYW1wZXI6OkFycmF5Qm91bmRzQ2xhbXBl
cigpCisgICAgOiBtTmVlZHNDbGFtcGluZyhmYWxzZSkKK3sKK30KKwordm9pZCBBcnJheUJvdW5k
c0NsYW1wZXI6Ok91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKFRJbmZvU2lua0Jhc2Um
IG91dCkgY29uc3QKK3sKKyAgICBpZiAoIW1OZWVkc0NsYW1waW5nKQorICAgICAgICByZXR1cm47
CisgICAgb3V0IDw8ICIvLyBCRUdJTjogR2VuZXJhdGVkIGNvZGUgZm9yIGFycmF5IGJvdW5kcyBj
bGFtcGluZ1xuXG4iOworICAgIG91dCA8PCBrSW50Q2xhbXBTb3VyY2UgPDwgIlxuXG4iOworICAg
IG91dCA8PCAiLy8gRU5EOiBHZW5lcmF0ZWQgY29kZSBmb3IgYXJyYXkgYm91bmRzIGNsYW1waW5n
XG5cbiI7Cit9CisKK3ZvaWQgQXJyYXlCb3VuZHNDbGFtcGVyOjpNYXJrSW5kaXJlY3RBcnJheUJv
dW5kc0ZvckNsYW1waW5nKFRJbnRlcm1Ob2RlKiByb290KQoreworICAgIEFTU0VSVChyb290KTsK
KworICAgIEFycmF5Qm91bmRzQ2xhbXBlck1hcmtlciBjbGFtcGVyKCp0aGlzKTsKKyAgICByb290
LT50cmF2ZXJzZSgmY2xhbXBlcik7Cit9CisKK3ZvaWQgQXJyYXlCb3VuZHNDbGFtcGVyOjpDbGVh
bnVwKCkKK3sKKyAgICBtTmVlZHNDbGFtcGluZyA9IGZhbHNlOworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmVmN2E5NjRiMWJlZjVjZDBkMDk2NWE1NWVmN2UxMGRmZmZkYzFhMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9B
cnJheUJvdW5kc0NsYW1wZXIuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENP
TVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCisjZGVmaW5lIENPTVBJTEVSX0FSUkFZX0JP
VU5EU19DTEFNUEVSX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2lu
Y2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgiCisKK2NsYXNzIEFycmF5Qm91bmRzQ2xhbXBlciB7CitwdWJsaWM6CisgICAgQXJyYXlC
b3VuZHNDbGFtcGVyKCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCB0byBpbmpl
Y3QgYSBjbGFtcCBmdW5jdGlvbi4KKyAgICBib29sIEdldEFycmF5Qm91bmRzQ2xhbXBOZWVkZWQo
KSB7IHJldHVybiBtTmVlZHNDbGFtcGluZzsgfQorICAgIHZvaWQgU2V0QXJyYXlCb3VuZHNDbGFt
cE5lZWRlZCgpIHsgbU5lZWRzQ2xhbXBpbmcgPSB0cnVlOyB9CisKKyAgICAvLyBPdXRwdXQgYXJy
YXkgY2xhbXAgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbnRvIHRoZSBzaGFkZXIgc291cmNlLgorICAg
IHZvaWQgT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oVEluZm9TaW5rQmFzZSYgb3V0
KSBjb25zdDsKKworICAgIC8vIE1hcmtzIG5vZGVzIGluIHRoZSB0cmVlIHRoYXQgaW5kZXggYXJy
YXlzIGluZGlyZWN0bHkgYXMKKyAgICAvLyByZXF1aXJpbmcgY2xhbXBpbmcuCisgICAgdm9pZCBN
YXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKFRJbnRlcm1Ob2RlKiByb290KTsKKwor
ICAgIHZvaWQgQ2xlYW51cCgpOworCitwcml2YXRlOgorICAgIGJvb2wgbU5lZWRzQ2xhbXBpbmc7
Cit9OworCisjZW5kaWYgLy8gQ09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCmluZGV4
IGNhYjgwNTZiY2VlNTU1MWI5ZTMzYmM5MTAxMGRjMGI2Y2U3MjBkMGIuLmU1ODA0MzIxM2FlYjk0
MGY2ZDRjMGI5ZTA1YTk3NWQ5NzdiZjc0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcApAQCAtNCw2ICs0LDcgQEAKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCisjaW5jbHVkZSAiY29tcGlsZXIvQXJyYXlCb3Vu
ZHNDbGFtcGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCIKICNpbmNsdWRlICJjb21waWxlci9EZXRlY3RSZWN1cnNpb24uaCIKICNpbmNsdWRlICJjb21w
aWxlci9Gb3JMb29wVW5yb2xsLmgiCkBAIC0xODYsNiArMTg3LDEwIEBAIGJvb2wgVENvbXBpbGVy
Ojpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElP
TlMpKQogICAgICAgICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuTWFya0J1aWx0SW5GdW5j
dGlvbnNGb3JFbXVsYXRpb24ocm9vdCk7CiAKKyAgICAgICAgLy8gQ2xhbXBpbmcgdW5pZm9ybSBh
cnJheSBib3VuZHMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFz
cy4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5E
SVJFQ1RfQVJSQVlfQk9VTkRTKSkKKyAgICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJr
SW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOworCiAgICAgICAgIC8vIENhbGwg
bWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNv
IGluCiAgICAgICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUg
dGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCiAgICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0
ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgpAQCAtMjMxLDYgKzIzNiw3IEBA
IHZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3VsdHMoKQogICAgIHVuaWZvcm1zLmNsZWFyKCk7CiAK
ICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5DbGVhbnVwKCk7CisgICAgYXJyYXlCb3VuZHND
bGFtcGVyLkNsZWFudXAoKTsKIH0KIAogYm9vbCBUQ29tcGlsZXI6OmRldGVjdFJlY3Vyc2lvbihU
SW50ZXJtTm9kZSogcm9vdCkKQEAgLTMzMSwzICszMzcsOCBAQCBjb25zdCBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvciYgVENvbXBpbGVyOjpnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOwogfQorCitjb25zdCBBcnJh
eUJvdW5kc0NsYW1wZXImIFRDb21waWxlcjo6Z2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYXJyYXlCb3VuZHNDbGFtcGVyOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKaW5kZXgg
NTUyZmE1MDY2ZGUyZmYyNThmYWEzYmQ0ZGI2MzJjYWM1YTI5N2E1NS4uMjEwMGVhYTBhMzU1ZGM4
ZDJiM2FjMTZiOGQ3ZTc4NjQxOTUyMmM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCkBAIC0yMzUsOSArMjM1
LDM4IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybUJpbmFyeSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9w
SW5kZXhEaXJlY3Q6Ci0gICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKICAgICAgICAgICAg
IHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwgIlsiLCAiXSIpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRBZGRJbmRleENsYW1wKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZp
c2l0ID09IEluVmlzaXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIlt3ZWJnbF9pbnRfY2xhbXAoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IG1heFNpemU7CisgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAqbGVmdCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgVFR5
cGUgbGVmdFR5cGUgPSBsZWZ0LT5nZXRUeXBlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGxlZnQtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIHNoYWRlciB3aWxsIGZhaWwgdmFsaWRhdGlvbiBpZiB0aGUgYXJyYXkg
bGVuZ3RoIGlzIG5vdCA+IDAuCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplID0gbGVm
dFR5cGUuZ2V0QXJyYXlTaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldE5vbWluYWxTaXplKCkgLSAxOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAwLCAiIDw8IG1h
eFNpemUgPDwgIildIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZp
c2l0LCBOVUxMLCAiWyIsICJdIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgICAgIGlmICh2aXNp
dCA9PSBJblZpc2l0KQogICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaAppbmRleCBlZmQwYjVmYzJkOGZi
NzVmODUxOThjYTZiZGQ2MzIxNzZkNTQyNDI0Li5kOThlMjkwYzU1ZjM4YzRkMGJmZmViYWVjYmU2
MTc5MGE4Mjc3NjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvT3V0cHV0R0xTTEJhc2UuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaApAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPHNl
dD4KIAorI2luY2x1ZGUgImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlh
dGUuaCIKICNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgpAQCAtNDcsNiArNDgsNyBA
QCBwcml2YXRlOgogICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmluZz4gRGVjbGFyZWRTdHJ1Y3Rz
OwogICAgIERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRTdHJ1Y3RzOwogCisgICAgQXJyYXlCb3Vu
ZHNDbGFtcGVyIG1BcnJheUNsYW1wZXI7CiAgICAgRm9yTG9vcFVucm9sbCBtTG9vcFVucm9sbDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
aEhhbmRsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxl
LmgKaW5kZXggMjY1MjhiOGRiY2JhMGIwNjRjMTg4YTdlOWEzNTk2OThjN2U2NThiZC4uMWE1MjEx
OWQ3NzQwNmEzNTIxMGRmYjQ3MzFhODQ2YTNiMWE1NjJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAog
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCisjaW5jbHVkZSAiY29tcGlsZXIvQXJy
YXlCb3VuZHNDbGFtcGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCkBAIC05OSw2ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0
OwogCiAgICAgY29uc3QgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3ImIGdldEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yKCkgY29uc3Q7CisgICAgY29uc3QgQXJyYXlCb3VuZHNDbGFtcGVyJiBnZXRBcnJh
eUJvdW5kc0NsYW1wZXIoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTaFNoYWRlclR5cGUgc2hh
ZGVyVHlwZTsKQEAgLTExMSw2ICsxMTMsNyBAQCBwcml2YXRlOgogICAgIFRFeHRlbnNpb25CZWhh
dmlvciBleHRlbnNpb25CZWhhdmlvcjsKIAogICAgIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yIGJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yOworICAgIEFycmF5Qm91bmRzQ2xhbXBlciBhcnJheUJvdW5k
c0NsYW1wZXI7CiAKICAgICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgogICAgIFRJbmZvU2lu
ayBpbmZvU2luazsgIC8vIE91dHB1dCBzaW5rLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKaW5kZXggZTNhMmMyYTgw
MjQwYTk1M2Q5NzZmZjhmNzE5YTY5NzAyZjdhYjBkMS4uZDkwYzcwY2IyMjczMzEzZGZhODZjNTli
OTg4NDhhN2E0YzM3ZWUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwCkBAIC0yMiw2ICsyMiw5IEBAIHZvaWQg
VHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewogICAgIGdldEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24o
CiAgICAgICAgIHNpbmssIGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpOwog
CisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQu
CisgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmlu
aXRpb24oc2luayk7CisKICAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KICAgICBUT3V0
cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmspOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRFU1NM
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFu
c2xhdG9yR0xTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJh
bnNsYXRvckdMU0wuY3BwCmluZGV4IGJiMDdhMWViNGU4ZmZmNjY2MWY5MjRmZGY3MDgzOWNmZTA5
YzMwODAuLmJhMzgxMTJjMjIyM2NhNzI0YzA0ZGI2MzliYTA0MDYzNzhlZjVjMDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmNwcApAQCAtMzUsNiArMzUsOSBAQCB2b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUo
VEludGVybU5vZGUqIHJvb3QpIHsKICAgICBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpLk91
dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAogICAgICAgICBzaW5rLCBmYWxzZSk7CiAK
KyAgICAvLyBXcml0ZSBhcnJheSBib3VuZHMgY2xhbXBpbmcgZW11bGF0aW9uIGlmIG5lZWRlZC4K
KyAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5p
dGlvbihzaW5rKTsKKwogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgogICAgIFRPdXRw
dXRHTFNMIG91dHB1dEdMU0woc2luayk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVy
bU91dC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0
LmNwcAppbmRleCBlODNjN2I3MmYyYTMwODYxMjYwYmVhZmUxZGM1MDRkZGI0ZGEwMjg5Li5mNDhh
MDQ5YzYzM2RlZWQ2ZDgxODI4NzIzNDNiZjc0OThkNWQ2YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcApAQCAtNDIsNyArNDIs
NyBAQCBUU3RyaW5nIFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0CiAgICAgaWYgKHF1
YWxpZmllciAhPSBFdnFUZW1wb3JhcnkgJiYgcXVhbGlmaWVyICE9IEV2cUdsb2JhbCkKICAgICAg
ICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNpb25T
dHJpbmcoKSA8PCAiICI7CiAgICAgaWYgKGFycmF5KQotICAgICAgICBzdHJlYW0gPDwgImFycmF5
IG9mICI7CisgICAgICAgIHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBnZXRBcnJheVNpemUoKSA8PCAi
XSBvZiAiOwogICAgIGlmIChtYXRyaXgpCiAgICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICJYIiA8
PCBzaXplIDw8ICIgbWF0cml4IG9mICI7CiAgICAgZWxzZSBpZiAoc2l6ZSA+IDEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKaW5k
ZXggODQzYzQwZWJiNWM2ZjFhZDYwM2VmNjg3MTRjNjkxOWFjMGI3NTUxYi4uYjc1ZTYwMDliNzA0
OWRjNDI1MGFlZWNhOTYxMzA5YjU1ZDc3OWQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaApAQCAtNDAwLDkgKzQwMCwxNSBA
QCBwdWJsaWM6CiAgICAgVEludGVybVR5cGVkKiBnZXRSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHJp
Z2h0OyB9CiAgICAgYm9vbCBwcm9tb3RlKFRJbmZvU2luayYpOwogCisgICAgdm9pZCBzZXRBZGRJ
bmRleENsYW1wKCkgeyBhZGRJbmRleENsYW1wID0gdHJ1ZTsgfQorICAgIGJvb2wgZ2V0QWRkSW5k
ZXhDbGFtcCgpIHsgcmV0dXJuIGFkZEluZGV4Q2xhbXA7IH0KKwogcHJvdGVjdGVkOgogICAgIFRJ
bnRlcm1UeXBlZCogbGVmdDsKICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0OworCisgICAgLy8gSWYg
c2V0IHRvIHRydWUsIHdyYXAgYW55IEVPcEluZGV4SW5kaXJlY3Qgd2l0aCBhIGNsYW1wIHRvIGJv
dW5kcworICAgIGJvb2wgYWRkSW5kZXhDbGFtcDsKIH07CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKaW5kZXgg
MDY0ODJhZWQxOWZkMTE1YzQwODEyZjFmYTE1Y2Y0NTk2YWRmMGRhNS4uMmUzMDhjMGRiMWI2ZGUw
NmI1NmMwMWM0ZmMzYTBmMjg3YmE2ODdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcApAQCAtMTU5LDcgKzE1OSw3
IEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OmNvbXBpbGVTaGFkZXJTb3VyY2UoY29uc3QgY2hh
ciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlCiAKICAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFk
ZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJjZSB9OwogCi0gICAgYm9vbCB2YWxpZGF0
ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIFNI
X09CSkVDVF9DT0RFIHwgU0hfQVRUUklCVVRFU19VTklGT1JNUyB8IGV4dHJhQ29tcGlsZU9wdGlv
bnMpOworICAgIGJvb2wgdmFsaWRhdGVTdWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCBzaGFk
ZXJTb3VyY2VTdHJpbmdzLCAxLCBTSF9PQkpFQ1RfQ09ERSB8IFNIX0FUVFJJQlVURVNfVU5JRk9S
TVMgfCBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgfCBleHRyYUNvbXBpbGVPcHRpb25z
KTsKICAgICBpZiAoIXZhbGlkYXRlU3VjY2VzcykgewogICAgICAgICBpbnQgbG9nU2l6ZSA9IGdl
dFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RIKTsKICAg
ICAgICAgaWYgKGxvZ1NpemUgPiAxKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1waW5nLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mOWM4ZDhmMjczNTQwYmYxMjczZWQzM2JmMTdkODMwMGU3MzY3ODg2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRz
LWNsYW1waW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACisgQ2hlY2tzIHRoYXQgYXJy
YXkgYWNjZXNzIGluIGEgc2hhZGVyIGNhbiBub3QgcmVhZCBvdXQgb2YgYm91bmRzCisKK1BBU1Mg
VG9wIGxlZnQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwCitQQVNTIEluc2lkZSB0b3Ag
cmlnaHQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwCitQQVNTIEluc2lkZSBib3R0b20g
bGVmdCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDAKK1BBU1MgQm90dG9tIHJpZ2h0IGNv
cm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggNworUEFTUyBPdXRzaWRlIGJvdHRvbSBsZWZ0IGNv
cm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggNworUEFTUyBPdXRzaWRlIHRvcCByaWdodCBjb3Ju
ZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDcKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2FycmF5LWJvdW5kcy1jbGFtcGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5MGRlZTc1
NGQ1YTZmNzIyMjM2ZTk4NzQ2Y2ZmMDA0YTllMzdhODUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbApAQCAt
MCwwICsxLDEwNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQu
MDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3Nl
LmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYkdMIGFycmF5IGJvdW5kcyBjbGFtcGlu
ZyBjb25mb3JtYW5jZSB0ZXN0LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2Vi
Z2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJleGFt
cGxlIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHN0eWxlPSJ3aWR0aDogNDBweDsgaGVpZ2h0OiA0
MHB4OyI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVy
dGV4Ij4KKyNpZmRlZiBHTF9FUworcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OworI2VuZGlmCithdHRy
aWJ1dGUgdmVjNCB2UG9zaXRpb247CithdHRyaWJ1dGUgZmxvYXQgaW5kZXg7Cit1bmlmb3JtIGZs
b2F0IHNoYWRlc1s4XTsKK3ZhcnlpbmcgdmVjNCB0ZXhDb2xvcjsKK3ZvaWQgbWFpbigpCit7Cisg
ICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247CisgICAgdGV4Q29sb3IgPSB2ZWM0KHNoYWRlc1tp
bnQoaW5kZXgpXSwgMCwgMCwgMS4wKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hh
ZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KKyNpZmRlZiBHTF9FUworcHJlY2lzaW9u
IGhpZ2hwIGZsb2F0OworI2VuZGlmCit2YXJ5aW5nIHZlYzQgdGV4Q29sb3I7Cit2b2lkIG1haW4o
KQoreworICAgIGdsX0ZyYWdDb2xvciA9IHRleENvbG9yOworfQorPC9zY3JpcHQ+CisKKzxzY3Jp
cHQ+CitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBpZiAod2luZG93LmluaXROb25LaHJvbm9zRnJh
bWV3b3JrKQorICAgICAgICB3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmsoZmFsc2UpOwor
CisgICAgZGVidWcoIkNoZWNrcyB0aGF0IGFycmF5IGFjY2VzcyBpbiBhIHNoYWRlciBjYW4gbm90
IHJlYWQgb3V0IG9mIGJvdW5kcyIpOworICAgIGRlYnVnKCIiKTsKKworICAgIGdsID0gaW5pdFdl
YkdMKCJleGFtcGxlIiwgInZzaGFkZXIiLCAiZnNoYWRlciIsIFsgInZQb3NpdGlvbiIsICJpbmRl
eCIgXSwKKyAgICAgICAgICAgICAgICAgICBbIDEsIDEsIDEsIDEgXSwgMSk7CisKKyAgICBnbC5k
aXNhYmxlKGdsLkRFUFRIX1RFU1QpOworICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpOworCisgICAg
dmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIo
Z2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJS
QVlfQlVGRkVSLAorICAgICAgICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbIC0xLDEsMCwg
MSwxLDAsIC0xLC0xLDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEs
LTEsMCwgMSwxLDAsIDEsLTEsMCBdKSwKKyAgICAgICAgICAgICAgICAgIGdsLlNUQVRJQ19EUkFX
KTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRy
aWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICB2YXIgdmVydGV4
T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIs
CisgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdGhhdCBleGVyY2lzZXMgd2Vs
bCBvdXRzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgLy8gbGltaXRzIG9uIGVhY2ggc2lkZSwg
bmVhciB0aGUgbGltaXRzLCBhbmQgdGhlCisgICAgICAgICAgICAgICAgICAvLyBleGFjdCBsaW1p
dHMuCisgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBjbGFtcGVkIHRvIFswLCAw
LCAwLCA3LCA3LCA3XQorICAgICAgICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbIC1OdW1i
ZXIuTUFYX1ZBTFVFLCAtMSwgMCwgNywgOCwgTnVtYmVyLk1BWF9WQUxVRV0pLAorICAgICAgICAg
ICAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KDEpOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgMSwgZ2wuRkxPQVQsIGZhbHNlLCAw
LCAwKTsKKworICAgIHZhciBsb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24oZ2wucHJvZ3JhbSwg
InNoYWRlcyIpOworICAgIGdsLnVuaWZvcm0xZnYobG9jLCBbMC4yNSwgMC41LCAwLCAwLCAwLCAw
LCAwLjc1LCAxXSk7CisKKyAgICBjaGVja1JlZFZhbHVlKDAsIDM4LCA2NCwgIlRvcCBsZWZ0IGNv
cm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggMCIpOworICAgIGNoZWNrUmVkVmFsdWUoMzcsIDM4
LCA2NCwgIkluc2lkZSB0b3AgcmlnaHQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwIik7
CisgICAgY2hlY2tSZWRWYWx1ZSgwLCAxLCA2NCwgIkluc2lkZSBib3R0b20gbGVmdCBjb3JuZXIg
c2hvdWxkIGNsYW1wIHRvIGluZGV4IDAiKTsKKworICAgIGNoZWNrUmVkVmFsdWUoMzgsIDAsIDI1
NSwgIkJvdHRvbSByaWdodCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDciKTsKKyAgICBj
aGVja1JlZFZhbHVlKDMsIDEsIDI1NSwgIk91dHNpZGUgYm90dG9tIGxlZnQgY29ybmVyIHNob3Vs
ZCBjbGFtcCB0byBpbmRleCA3Iik7CisgICAgY2hlY2tSZWRWYWx1ZSgzOCwgMzcsIDI1NSwgIk91
dHNpZGUgdG9wIHJpZ2h0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggNyIpOworCisgICAg
ZnVuY3Rpb24gY2hlY2tSZWRWYWx1ZSh4LCB5LCB2YWx1ZSwgbXNnKSB7CisgICAgICAgIGdsLmNs
ZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgICAgICAg
Z2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOworICAgICAgICBnbC5mbHVzaCgpOwor
ICAgICAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoNCk7CisgICAgICAgIGdsLnJlYWRQaXhl
bHMoeCwgeSwgMSwgMSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgICAgICAg
aWYgKGJ1ZlswXSAhPSB2YWx1ZSB8fCBidWZbMV0gIT0gMCB8fCBidWZbMl0gIT0gMCB8fCBidWZb
M10gIT0gMjU1KSB7CisgICAgICAgICAgICBkZWJ1ZygnZXhwZWN0ZWQ6IHJnYignICsgdmFsdWUg
KyAnLCAwLCAwLCAyNTUpIHdhcyByZ2IoJyArIGJ1ZlswXSArICcsICcgKyBidWZbMV0gKyAnLCAn
ICsgYnVmWzJdICsgJywgJyArIGJ1ZlszXSArICcpJyk7CisgICAgICAgICAgICB0ZXN0RmFpbGVk
KG1zZyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGVzdFBhc3Nl
ZChtc2cpOworICAgIH0KK30KKworaW5pdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169029</attachid>
            <date>2012-10-16 14:34:25 -0700</date>
            <delta_ts>2012-10-16 17:19:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98977-20121017083312.patch</filename>
            <type>text/plain</type>
            <size>37413</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGJiMTUyMTJkZWJkZjkwM2ZhMTYxODg4NGU3ZTkyNDBhYzVhNTkzOC4uMjRlOGExNTQ5NzYx
MzEzNGQ3NDQyYjAzNGZhMTkwMjNjZmFlZWFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTEwLTE2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRpb24gdG8gY2xhbXAg
dW5pZm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAgICAgaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD00OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIGRvZXMgbm90
IGFsbG93IEdMU0wgY29kZSB0byBpbmRleCBhIHVuaWZvcm0gYXJyYXkgb3V0c2lkZSBpdHMgYm91
bmRzLiBBZGQgYQorICAgICAgICBmbGFnIHRvIHRoZSBBTkdMRSBjb21waWxlciB0byBpbnNlcnQg
Y2xhbXAgc3RhdGVtZW50cyBhcm91bmQgc3VjaCBpbmRleGluZy4KKyAgICAgICAgU2luY2UgaXQg
aXMgcG9zc2libGUgdG8gYWNjZXNzIHZlYzIvMy80IGFuZCBtYXQyLzMvNCBjb21wb25lbnRzIGJ5
IGFycmF5IGluZGV4aW5nLAorICAgICAgICB0aGV5IG11c3QgYmUgc2ltaWxhcmx5IGNsYW1wZWQu
CisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgaXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0
byBhbHdheXMgZGV0ZXJtaW5lIHRoYXQgdGhlIGluZGV4aW5nIGlzCisgICAgICAgIG9wZXJhdGlu
ZyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgInVu
aWZvcm0gbWF0NCBhIi4gQU5HTEUKKyAgICAgICAgaXMgY3VycmVudGx5IG5vdCBhYmxlIHRvIHRl
bGwgdXMgdGhhdCB0aGUgcnZhbHVlIG9mICJhWzBdIiBpcyBhIHVuaWZvcm0sIGp1c3QgdGhhdAor
ICAgICAgICBpdCBoYXMgYSBzaXplIG9mIDQuIFRoZXJlZm9yZSwgdGhlIGNsYW1waW5nIGlzIGRv
bmUgb24gYWxsIGluZGlyZWN0IGFycmF5IGluZGV4aW5nLgorCisgICAgICAgIFRoaXMgd2lsbCBo
YXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBGdXR1cmUgZW5oYW5jZW1lbnRzIG1heSBiZSBhYmxl
IHRvIGRldGVybWluZQorICAgICAgICBjYXNlcyB3aGVyZSB0aGUgY2xhbXBpbmcgaXMgbm90IG5l
Y2Vzc2FyeS4gQ3VycmVudGx5IG9ubHkgZGlyZWN0IGluZGV4aW5nIGlzIHNraXBwZWQKKyAgICAg
ICAgKGkuZS4gbG9va2luZyB1cCBhIHZhbHVlIHVzaW5nIGEgY29uc3RhbnQgaW5kZXgpLgorCisg
ICAgICAgIFRoZSBjbGFtcCBpbnNlcnRpb24gaXMgb25seSBwZXJmb3JtZWQgb24gdGhlIEdMU0wg
b3V0cHV0LiBEaXJlY3QzRCBhbHJlYWR5IGd1YXJhbnRlZXMKKyAgICAgICAgdGhhdCBvdXQtb2Yt
Ym91bmRzIHVuaWZvcm0gYXJyYXkgYWNjZXNzIHJldHVybnMgYSB6ZXJvIHZhbHVlLgorCisgICAg
ICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6IE5ldyBjb21waWxl
ciBvcHRpb24uCisgICAgICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHA6
IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpBcnJheUJvdW5kc0NsYW1wZXIp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVj
bGFyYXRpb24pOiBJbmplY3RzIGEgY2xhbXBpbmcgZnVuY3Rpb24gZm9yIGludGVnZXJzIGludG8g
R0xTTCBzb3VyY2UuCisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6Ok91dHB1dENsYW1waW5n
RnVuY3Rpb25EZWZpbml0aW9uKTogSW5qZWN0cyBhIGNsYW1waW5nIGZ1bmN0aW9uIGZvciBpbnRl
Z2VycyBpbnRvIEdMU0wgc291cmNlLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRw
dXRDbGFtcGVkQXJyYXlBY2Nlc3MpOiBUcmFuc2xhdGVzIGEgcmVndWxhciBhcnJheSBpbmRleGlu
ZyBvcGVyYXRpb24gdG8gY2FsbCB0aGUgY2xhbXBlZCBmdW5jdGlvbi4KKyAgICAgICAgKEFycmF5
Qm91bmRzQ2xhbXBlcjo6RG9lc1BlcmZvcm1JbmRpcmVjdEFycmF5QWNjZXNzKTogVGVzdHMgdG8g
c2VlIGlmIGEgbm9kZSBuZWVkcyBjbGFtcGluZy8KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQXJy
YXlCb3VuZHNDbGFtcGVyLmg6IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyKToK
KyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6R2V0U2hvdWxkQ2xhbXBBcnJheUFjY2Vzcyk6
CisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6OlNldFNob3VsZENsYW1wQXJyYXlBY2Nlc3Mp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpHZXRBcnJheUJvdW5kc0NsYW1wRGVmaW5p
dGlvbk5lZWRlZCk6CisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6OlNldEFycmF5Qm91bmRz
Q2xhbXBEZWZpbml0aW9uTmVlZGVkKToKKyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6Q2xl
YW5VcCk6IFJlc2V0cyB0aGUgc3RhdGUgc28gdGhhdCBzdWJzZXF1ZW50IHJ1bnMgc3RhcnQgZnJl
c2guCisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcDoKKyAgICAgICAgKFRDb21w
aWxlcjo6Y29tcGlsZSk6IFJ1biB0aGUgY2xhbXBpbmcgY29kZSBpZiB0aGUgY29tcGlsZSBvcHRp
b24gd2FzIHNldC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHA6CisgICAg
ICAgIChUT3V0cHV0RVNTTDo6VE91dHB1dEVTU0wpOiBOZXcgQXJyYXlCb3VuZHNDbGFtcGVyIHBh
cmFtZXRlciB0byBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0RVNT
TC5oOgorICAgICAgICAoVE91dHB1dEVTU0wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRw
dXRHTFNMLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTCk6IE5ldyBBcnJh
eUJvdW5kc0NsYW1wZXIgcGFyYW1ldGVyIHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAqIHNyYy9j
b21waWxlci9PdXRwdXRHTFNMLmg6CisgICAgICAgIChUT3V0cHV0R0xTTCk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMQmFz
ZTo6VE91dHB1dEdMU0xCYXNlKTogTmV3IEFycmF5Qm91bmRzQ2xhbXBlciBwYXJhbWV0ZXIgdG8g
Y29uc3RydWN0b3IuCisgICAgICAgIChUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KTogSWYg
dGhlIGV4cHJlc3Npb24gaGFzIGJlZW4gZmxhZ2dlZCwgaW5zZXJ0IGFuIGFwcHJvcHJpYXRlICJj
bGFtcCIgc3RhdGVtZW50LgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5o
OgorICAgICAgICAoVE91dHB1dEdMU0xCYXNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU2hI
YW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6IEFkZCBwYXJhbWV0ZXIgY29tcGlsZU9wdGlv
bnMgdG8gdHJhbnNsYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwOgorICAgICAgICAoVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0ZSk6IFNldHMgdXAg
dGhlIEFycmF5Qm91bmRzQ2xhbXBlciBpZiBuZWNlc3NhcnkuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JFU1NMLmg6CisgICAgICAgIChUcmFuc2xhdG9yRVNTTCk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcDoKKyAgICAgICAgKFRyYW5zbGF0b3JH
TFNMOjp0cmFuc2xhdGUpOiBTZXRzIHVwIHRoZSBBcnJheUJvdW5kc0NsYW1wZXIgaWYgbmVjZXNz
YXJ5LgorICAgICAgICAqIHNyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oOgorICAgICAgICAo
VHJhbnNsYXRvckdMU0wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwOgor
ICAgICAgICAoVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKTogQWRkIGFycmF5IHNpemUgdG8gaW50
ZXJtZWRpYXRlIHRyZWUgb3V0cHV0LgorCiAyMDEyLTA5LTEzICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyMjU1NzIwPiBGaXggdGhlIGJ1
aWxkIHdpdGggbmV3ZXIgQ2xhbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYTRmNzk2MTc5NTlkYTg1NTZkNjM5
OWI3ODdmYjRmY2ZkZWI4ZDI0Li4wYTVhNTk2ZTI4ZWZmZDI4NjlkNmE3YjNhNmNlNTYzNDM0Y2E5
MTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTAtMTYgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFNoYWRlciB0cmFuc2xhdG9yIG5lZWRzIG9w
dGlvbiB0byBjbGFtcCB1bmlmb3JtIGFycmF5IGFjY2Vzc2VzIGluIHZlcnRleCBzaGFkZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODk3NworICAg
ICAgICBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWls
P2lkPTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViR0wgZm9yYmlkcyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBzaGFkZXJzLiBSZXdy
aXRlIGFueSBzaGFkZXJzIHRvCisgICAgICAgIGVuc3VyZSB0aGF0IG5vbi1kaXJlY3QgYXJyYXkg
aW5kZXhpbmcgaXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U6OmNvbXBpbGVTaGFkZXJTb3VyY2UpOiBQYXNz
IG5ldyBjb21waWxlciBvcHRpb24gU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTCisKIDIw
MTItMTAtMTUgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTMxMzY3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGYyYmU2MGY1
NDhhNmY0ODk5OTNiZWY0NjlhZTY0ZGZjYWQ1NjM2Mi4uYjgzMjdmZDA2NmNlMzhlZmNjMTkwMDg5
NTk2OTBlZTAzMDBkMDdkYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05LDYgKzksOCBAQAogLyogQmVn
aW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMzEyQkRCMEMxNUZFQ0FDOTAwOTdFQkM3IC8q
IEFOR0xFLnBsaXN0IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTJCREIwOTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi87IH07CiAJCTMx
MkJEQjBFMTVGRUNBRTUwMDk3RUJDNyAvKiBBTkdMRS50eHQgaW4gQ29weUZpbGVzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjBBMTVGRUNBM0EwMDk3RUJDNyAvKiBB
TkdMRS50eHQgKi87IH07CisJCTMxRUQ0NzFDMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5k
c0NsYW1wZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzFFRDQ3MUExNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgKi87
IH07CisJCTMxRUQ0NzFEMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUQ0NzFCMTYy
NEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAqLzsgfTsKIAkJNDk5NTFDMDMx
NEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5n
dGhfbGltaXRzLmggKi87IH07CiAJCTQ5OTUxQzA5MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwICovOyB9OwogCQk0OTk1MUMwQTE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5oICovOyB9OwpAQCAtMTM2LDYgKzEzOCw4IEBACiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNl
IHNlY3Rpb24gKi8KIAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxRUQ0NzFBMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCb3VuZHNDbGFtcGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFRDQ3MUIxNjI0RUZEMTAwMjQ1
MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBcnJheUJvdW5kc0NsYW1wZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbGVuZ3RoX2xpbWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OTk1MUMwNTE0QjdBQUQ3MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTk1MUMw
NjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NCw2ICs1NDgsOCBAQAogCQlGQjM5RDIyMDEyMDBG
MzVBMDAwODhFNjkgLyogY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTMxRUQ0NzFBMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuY3BwICovLAorCQkJCTMxRUQ0NzFCMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5k
c0NsYW1wZXIuaCAqLywKIAkJCQlGQjM5RDIyMTEyMDBGMzVBMDAwODhFNjkgLyogQmFzZVR5cGVz
LmggKi8sCiAJCQkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yLmNwcCAqLywKIAkJCQk0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCAqLywKQEAgLTcxMiw2ICs3MTgsNyBAQAogCQkJCUEyNjU2ODNFMTU5
QzIzRTEwMDM5ODUzOSAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEyNjU2ODQxMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGlt
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY1Njg0MzE1OUMyM0UxMDAzOTg1MzkgLyogUmVz
dHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxRUQ0NzFEMTYy
NEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
ODI5LDYgKzgzNiw3IEBACiAJCQkJQTI2NTY4M0YxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVu
Y3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjU2ODQwMTU5QzIzRTEw
MDM5ODUzOSAvKiBSZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEyNjU2ODQyMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMUVENDcxQzE2MjRFRkQxMDAyNDUwNzggLyog
QXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1Rh
cmdldC5wcmkKaW5kZXggNGU5MzAzYWI3NmEzYjBkN2U5MDM5MDUxNjYwMzFmNmYzZDJjOGE4OS4u
ZWFhOTM2ZDg4Y2ZhZjA1NWZkOTVmNmI1MDA4NmNlM2U1ODE0NzBjZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9UYXJnZXQucHJpCkBAIC0xNyw2ICsxNyw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAk
JFNPVVJDRV9ESVIvaW5jbHVkZQogCiBIRUFERVJTICs9IFwKKyAgICBzcmMvY29tcGlsZXIvQXJy
YXlCb3VuZHNDbGFtcGVyLmggXAogICAgIHNyYy9jb21waWxlci9CYXNlVHlwZXMuaCBcCiAgICAg
c3JjL2NvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggXAogICAgIHNyYy9jb21waWxl
ci9Db21tb24uaCBcCkBAIC05MCw2ICs5MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHNyYy9jb21w
aWxlci9WZXJzaW9uR0xTTC5oCiAKIFNPVVJDRVMgKz0gXAorICAgIHNyYy9jb21waWxlci9BcnJh
eUJvdW5kc0NsYW1wZXIuY3BwIFwKICAgICBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuY3BwIFwKICAgICBzcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwIFwKICAgICBzcmMv
Y29tcGlsZXIvQ29tcGlsZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCmluZGV4IDlhNGEzNmRiZjMwYjFkMTE1ZmMz
ZWYyZGEzY2NlZDM4YWZmN2NiZmIuLmQ4MjkzMWVhMWJiNTc5ZTg4YTBhODJmYjEzYTUxZDFkOGQw
NjAzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNM
QU5HL1NoYWRlckxhbmcuaApAQCAtMTQyLDcgKzE0MiwxMyBAQCB0eXBlZGVmIGVudW0gewogICAv
LyAtIFRoZSBzaGFkZXIgc3BlYyBpcyBTSF9XRUJHTF9TUEVDLgogICAvLyAtIFRoZSBjb21waWxl
IG9wdGlvbnMgY29udGFpbiB0aGUgU0hfVElNSU5HX1JFU1RSSUNUSU9OUyBmbGFnLgogICAvLyAt
IFRoZSBzaGFkZXIgdHlwZSBpcyBTSF9GUkFHTUVOVF9TSEFERVIuCi0gIFNIX0RFUEVOREVOQ1lf
R1JBUEggPSAweDA0MDAKKyAgU0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMCwKKworICAvLyBU
aGlzIGZsYWcgZW5zdXJlcyBhbGwgaW5kaXJlY3QgKGV4cHJlc3Npb24tYmFzZWQpIGFycmF5IGlu
ZGV4aW5nCisgIC8vIGlzIGNsYW1wZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkuIFRoaXMg
ZW5zdXJlcywgZm9yIGV4YW1wbGUsCisgIC8vIHRoYXQgeW91IGNhbm5vdCByZWFkIG9mZiB0aGUg
ZW5kIG9mIGEgdW5pZm9ybSwgd2hldGhlciBhbiBhcnJheQorICAvLyB2ZWMyMzQsIG9yIG1hdDIz
NCB0eXBlLgorICBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgPSAweDA4MDAKIH0gU2hD
b21waWxlT3B0aW9uczsKIAogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRi
ZjM3MjVkOTRjOTNhM2MyNDQwOTgzNGNhYjZkYTQxZmRiZWVkZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIu
Y3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb21waWxlci9BcnJheUJv
dW5kc0NsYW1wZXIuaCIKKworY29uc3QgY2hhcioga0ludENsYW1wQmVnaW4gPSAiLy8gQkVHSU46
IEdlbmVyYXRlZCBjb2RlIGZvciBhcnJheSBib3VuZHMgY2xhbXBpbmdcbiI7Citjb25zdCBjaGFy
KiBrSW50Q2xhbXBFbmQgPSAiLy8gRU5EOiBHZW5lcmF0ZWQgY29kZSBmb3IgYXJyYXkgYm91bmRz
IGNsYW1waW5nXG4iOworY29uc3QgY2hhcioga0ludENsYW1wRGVjbGFyYXRpb24gPSAiaW50IHdl
YmdsX2ludF9jbGFtcChpbnQgdmFsdWUsIGludCBtaW5WYWx1ZSwgaW50IG1heFZhbHVlKTsiOwor
Y29uc3QgY2hhcioga0ludENsYW1wRGVmaW5pdGlvbiA9ICJpbnQgd2ViZ2xfaW50X2NsYW1wKGlu
dCB2YWx1ZSwgaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUpIHsgcmV0dXJuICgodmFsdWUgPCBt
aW5WYWx1ZSkgPyBtaW5WYWx1ZSA6ICgodmFsdWUgPiBtYXhWYWx1ZSkgPyBtYXhWYWx1ZSA6IHZh
bHVlKSk7IH0iOworCitBcnJheUJvdW5kc0NsYW1wZXI6OkFycmF5Qm91bmRzQ2xhbXBlcigpCisg
ICAgOiBtU2hvdWxkQ2xhbXBBcnJheUFjY2VzcyhmYWxzZSkKKyAgICAsIG1BcnJheUJvdW5kc0Ns
YW1wRGVmaW5pdGlvbk5lZWRlZChmYWxzZSkKK3sKK30KKwordm9pZCBBcnJheUJvdW5kc0NsYW1w
ZXI6Ok91dHB1dENsYW1waW5nRnVuY3Rpb25EZWNsYXJhdGlvbihUSW5mb1NpbmtCYXNlJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0IDw8IGtJbnRDbGFtcEJlZ2luOworICAgIG91dCA8PCBrSW50Q2xh
bXBEZWNsYXJhdGlvbiA8PCAiXG4iOworICAgIG91dCA8PCBrSW50Q2xhbXBFbmQ7Cit9CisKK3Zv
aWQgQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihU
SW5mb1NpbmtCYXNlJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0IDw8IGtJbnRDbGFtcEJlZ2luOwor
ICAgIG91dCA8PCBrSW50Q2xhbXBEZWZpbml0aW9uIDw8ICJcbiI7CisgICAgb3V0IDw8IGtJbnRD
bGFtcEVuZDsKK30KKwordm9pZCBBcnJheUJvdW5kc0NsYW1wZXI6Ok91dHB1dENsYW1wZWRBcnJh
eUFjY2VzcyhWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSwgVEluZm9TaW5rQmFzZSYg
b3V0KSBjb25zdAoreworICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgIHsKKyAgICAgICAg
b3V0IDw8ICJbd2ViZ2xfaW50X2NsYW1wKCI7CisgICAgfQorICAgIGVsc2UgaWYgKHZpc2l0ID09
IFBvc3RWaXNpdCkKKyAgICB7CisgICAgICAgIGludCBtYXhTaXplOworICAgICAgICBUSW50ZXJt
VHlwZWQqIGxlZnQgPSBub2RlLT5nZXRMZWZ0KCk7CisgICAgICAgIFRUeXBlIGxlZnRUeXBlID0g
bGVmdC0+Z2V0VHlwZSgpOworCisgICAgICAgIGlmIChsZWZ0LT5pc0FycmF5KCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFRoZSBzaGFkZXIgd2lsbCBmYWlsIHZhbGlkYXRpb24gaWYgdGhl
IGFycmF5IGxlbmd0aCBpcyBub3QgPiAwLgorICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBl
LmdldEFycmF5U2l6ZSgpIC0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1heFNpemUgPSBsZWZ0VHlwZS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAg
ICAgICAgfQorICAgICAgICBvdXQgPDwgIiwgMCwgIiA8PCBtYXhTaXplIDw8ICIpXSI7CisgICAg
fQorfQorCitib29sIEFycmF5Qm91bmRzQ2xhbXBlcjo6RG9lc1BlcmZvcm1JbmRpcmVjdEFycmF5
QWNjZXNzKFRJbnRlcm1CaW5hcnkqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKG5vZGUtPmdldE9w
KCkgPT0gRU9wSW5kZXhJbmRpcmVjdCkKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCogbGVm
dCA9IG5vZGUtPmdldExlZnQoKTsKKyAgICAgICAgaWYgKGxlZnQtPmlzQXJyYXkoKSB8fCBsZWZ0
LT5pc1ZlY3RvcigpIHx8IGxlZnQtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJy
YXlCb3VuZHNDbGFtcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWMwY2M3NDllOTdhZDdmNTNkOWVlZmNiOGI2
ZTI4OTllYmY0MDI2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENPTVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCisjZGVmaW5lIENP
TVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRl
ckxhbmcuaCIKKworI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIEFycmF5Qm91bmRzQ2xhbXBlciB7CitwdWJs
aWM6CisgICAgQXJyYXlCb3VuZHNDbGFtcGVyKCk7CisKKyAgICBib29sIEdldFNob3VsZENsYW1w
QXJyYXlBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBtU2hvdWxkQ2xhbXBBcnJheUFjY2VzczsgfQor
ICAgIHZvaWQgU2V0U2hvdWxkQ2xhbXBBcnJheUFjY2Vzcyhib29sIHNob3VsZENsYW1wKSB7IG1T
aG91bGRDbGFtcEFycmF5QWNjZXNzID0gc2hvdWxkQ2xhbXA7IH0KKworICAgIGJvb2wgR2V0QXJy
YXlCb3VuZHNDbGFtcERlZmluaXRpb25OZWVkZWQoKSBjb25zdCB7IHJldHVybiBtQXJyYXlCb3Vu
ZHNDbGFtcERlZmluaXRpb25OZWVkZWQ7IH0KKyAgICB2b2lkIFNldEFycmF5Qm91bmRzQ2xhbXBE
ZWZpbml0aW9uTmVlZGVkKCkgeyBtQXJyYXlCb3VuZHNDbGFtcERlZmluaXRpb25OZWVkZWQgPSB0
cnVlOyB9CisKKyAgICAvLyBPdXRwdXQgYXJyYXkgY2xhbXAgZnVuY3Rpb24gc291cmNlIGludG8g
dGhlIHNoYWRlciBzb3VyY2UuCisgICAgdm9pZCBPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVjbGFy
YXRpb24oVEluZm9TaW5rQmFzZSYgb3V0KSBjb25zdDsKKyAgICB2b2lkIE91dHB1dENsYW1waW5n
RnVuY3Rpb25EZWZpbml0aW9uKFRJbmZvU2lua0Jhc2UmIG91dCkgY29uc3Q7CisKKyAgICB2b2lk
IE91dHB1dENsYW1wZWRBcnJheUFjY2VzcyhWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9k
ZSwgVEluZm9TaW5rQmFzZSYgb3V0KSBjb25zdDsKKworICAgIC8vIEV4YW1pbmVzIGlmIGEgbm9k
ZSBhY2Nlc3NlcyBhcnJheSBib3VuZHMgaW5kaXJlY3RseSwgYW5kIHRodXMgc2hvdWxkIGJlIGNs
YW1wZWQKKyAgICBib29sIERvZXNQZXJmb3JtSW5kaXJlY3RBcnJheUFjY2VzcyhUSW50ZXJtQmlu
YXJ5KiBub2RlKSBjb25zdDsKKworICAgIHZvaWQgQ2xlYW5VcCgpCisgICAgeworICAgICAgICBt
U2hvdWxkQ2xhbXBBcnJheUFjY2VzcyA9IGZhbHNlOworICAgICAgICBtQXJyYXlCb3VuZHNDbGFt
cERlZmluaXRpb25OZWVkZWQgPSBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBt
U2hvdWxkQ2xhbXBBcnJheUFjY2VzczsKKyAgICBib29sIG1BcnJheUJvdW5kc0NsYW1wRGVmaW5p
dGlvbk5lZWRlZDsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
bXBpbGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAKaW5kZXggY2FiODA1NmJjZWU1NTUxYjllMzNiYzkxMDEwZGMwYjZjZTcyMGQwYi4uODE0
YWRiNmVjMDdkNjdjOGM0NGRhZjllMTA3ZWMxMGVkM2E3NDAyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwCkBAIC00LDYgKzQsNyBA
QAogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKKyNpbmNsdWRlICJjb21waWxl
ci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKICNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rp
b25FbXVsYXRvci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BVbnJvbGwuaCIKQEAgLTE5OSw3ICsyMDAsNyBAQCBib29s
IFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdzW10sCiAg
ICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShyb290KTsKIAogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9PQkpFQ1RfQ09ERSkpCi0gICAgICAgICAg
ICB0cmFuc2xhdGUocm9vdCk7CisgICAgICAgICAgICB0cmFuc2xhdGUocm9vdCwgY29tcGlsZU9w
dGlvbnMpOwogICAgIH0KIAogICAgIC8vIENsZWFudXAgbWVtb3J5LgpAQCAtMzMxLDMgKzMzMiw0
IEBAIGNvbnN0IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBUQ29tcGlsZXI6OmdldEJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4gYnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3I7CiB9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRFU1NMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9PdXRwdXRFU1NMLmNwcAppbmRleCA2NGVlOTJkNDRlMTVjNzE4MGU5MmM4NmIwYWUxZWExZGU0
NjU5MTYwLi4xZDFjY2ViZjNkZmRjNWJiYWUzNzhmNDViMTY4NzU2MTRlZDQyY2Y2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3Bw
CkBAIC02LDggKzYsOCBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0RVNTTC5oIgogCi1U
T3V0cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRP
dXRwdXRHTFNMQmFzZShvYmpTaW5rKQorVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lu
a0Jhc2UmIG9ialNpbmssIEFycmF5Qm91bmRzQ2xhbXBlciYgYXJyYXlCb3VuZHNDbGFtcGVyKQor
ICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGFycmF5Qm91bmRzQ2xhbXBlcikKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1
dEVTU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRFU1NM
LmgKaW5kZXggNGZhNzNjODA0N2FiOWU2OTc4MWYzMDU0ZDAxOTIzNDRiMGM4Zjc1Yi4uZWZlNzU5
MTg3NzU0MjcxY2NlMGUyODBiNWU4OWMxMThjYjY4MTg1YSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5oCkBAIC0xMiw3ICsxMiw3IEBA
CiBjbGFzcyBUT3V0cHV0RVNTTCA6IHB1YmxpYyBUT3V0cHV0R0xTTEJhc2UKIHsKIHB1YmxpYzoK
LSAgICBUT3V0cHV0RVNTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0RVNT
TChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLCBBcnJheUJvdW5kc0NsYW1wZXImIGFycmF5Qm91bmRz
Q2xhbXBlcik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVBy
ZWNpc2lvbihUUHJlY2lzaW9uIHByZWNpc2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKaW5kZXggZGQzMWI0YjU4YmMwMDZk
ZDgzY2VhNWFhYTA5ZDMwZDMwZjlkNzdlOS4uMWQ3NDBjOWRjNjc5NzUzMjZjZTRkNjBjZmMxMmZl
ZWZiZTZmNzg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9PdXRwdXRHTFNMLmNwcApAQCAtNiw4ICs2LDggQEAKIAogI2luY2x1ZGUgImNvbXBpbGVy
L091dHB1dEdMU0wuaCIKIAotVE91dHB1dEdMU0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2Um
IG9ialNpbmspCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaykKK1RPdXRwdXRHTFNMOjpU
T3V0cHV0R0xTTChUSW5mb1NpbmtCYXNlJiBvYmpTaW5rLCBBcnJheUJvdW5kc0NsYW1wZXImIGFy
cmF5Qm91bmRzQ2xhbXBlcikKKyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBhcnJheUJv
dW5kc0NsYW1wZXIpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0R0xTTC5oCmluZGV4IDBmZTIzNTZlYjczNDczY2QwNjk1M2M5OTk2ZWQ1
NDQzOTc2YjI5MmYuLjIwMjc1NjJjMmQwYjUzNGE5MWQwMDRmYzVlMTdjOTE5OWQ0YWU5MjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNM
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wu
aApAQCAtNywxMiArNywxMyBAQAogI2lmbmRlZiBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNM
X0hfCiAjZGVmaW5lIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KIAorI2luY2x1ZGUg
ImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1
dEdMU0xCYXNlLmgiCiAKIGNsYXNzIFRPdXRwdXRHTFNMIDogcHVibGljIFRPdXRwdXRHTFNMQmFz
ZQogewogcHVibGljOgotICAgIFRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmspOwor
ICAgIFRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssIEFycmF5Qm91bmRzQ2xhbXBl
ciYgYXJyYXlCb3VuZHNDbGFtcGVyKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCB3
cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKaW5kZXggNTUy
ZmE1MDY2ZGUyZmYyNThmYWEzYmQ0ZGI2MzJjYWM1YTI5N2E1NS4uMTAwMGQ3OWJmMmE3ODk1MTk0
MDUxNTkwYmU4YmVmOTFkNmNiYzk1MSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCkBAIC02NiwxMCArNjYsMTEg
QEAgYm9vbCBpc1NpbmdsZVN0YXRlbWVudChUSW50ZXJtTm9kZSogbm9kZSkgewogfQogfSAgLy8g
bmFtZXNwYWNlCiAKLVRPdXRwdXRHTFNMQmFzZTo6VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jh
c2UmIG9ialNpbmspCitUT3V0cHV0R0xTTEJhc2U6OlRPdXRwdXRHTFNMQmFzZShUSW5mb1NpbmtC
YXNlJiBvYmpTaW5rLCBBcnJheUJvdW5kc0NsYW1wZXImIGFycmF5Qm91bmRzQ2xhbXBlcikKICAg
ICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCiAgICAgICBtT2JqU2luayhv
YmpTaW5rKSwKLSAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpCisgICAgICBtRGVjbGFy
aW5nVmFyaWFibGVzKGZhbHNlKSwKKyAgICAgIG1BcnJheUJvdW5kc0NsYW1wZXIoYXJyYXlCb3Vu
ZHNDbGFtcGVyKQogewogfQogCkBAIC0yMzUsOSArMjM2LDE5IEBAIGJvb2wgVE91dHB1dEdMU0xC
YXNlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICAgIGNh
c2UgRU9wSW5kZXhJbmRpcmVjdDoKICAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVM
TCwgIlsiLCAiXSIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhJ
bmRpcmVjdDoKKyAgICAgICAgICAgIGlmIChtQXJyYXlCb3VuZHNDbGFtcGVyLkdldFNob3VsZENs
YW1wQXJyYXlBY2Nlc3MoKSAmJiBtQXJyYXlCb3VuZHNDbGFtcGVyLkRvZXNQZXJmb3JtSW5kaXJl
Y3RBcnJheUFjY2Vzcyhub2RlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtQXJy
YXlCb3VuZHNDbGFtcGVyLlNldEFycmF5Qm91bmRzQ2xhbXBEZWZpbml0aW9uTmVlZGVkKCk7Cisg
ICAgICAgICAgICAgICAgbUFycmF5Qm91bmRzQ2xhbXBlci5PdXRwdXRDbGFtcGVkQXJyYXlBY2Nl
c3ModmlzaXQsIG5vZGUsIG91dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAi
WyIsICJdIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0
KQogICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaAppbmRleCBlZmQwYjVmYzJkOGZiNzVmODUxOThjYTZi
ZGQ2MzIxNzZkNTQyNDI0Li43NzhiNGQyY2IxMjlmNDBmODQ2MTMxYzc1ODI3ZDEwZTIzYWM4Yzli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0
R0xTTEJhc2UuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0R0xTTEJhc2UuaApAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPHNldD4KIAorI2luY2x1
ZGUgImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0Zv
ckxvb3BVbnJvbGwuaCIKICNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKICNpbmNs
dWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgpAQCAtMTYsNyArMTcsNyBAQAogY2xhc3MgVE91
dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKIHsKIHB1YmxpYzoKLSAgICBU
T3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luayk7CisgICAgVE91dHB1dEdMU0xC
YXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssIEFycmF5Qm91bmRzQ2xhbXBlciYgYXJyYXlCb3Vu
ZHNDbGFtcGVyKTsKIAogcHJvdGVjdGVkOgogICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7
IHJldHVybiBtT2JqU2luazsgfQpAQCAtNDcsNiArNDgsNyBAQCBwcml2YXRlOgogICAgIHR5cGVk
ZWYgc3RkOjpzZXQ8VFN0cmluZz4gRGVjbGFyZWRTdHJ1Y3RzOwogICAgIERlY2xhcmVkU3RydWN0
cyBtRGVjbGFyZWRTdHJ1Y3RzOwogCisgICAgQXJyYXlCb3VuZHNDbGFtcGVyJiBtQXJyYXlCb3Vu
ZHNDbGFtcGVyOwogICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCmluZGV4IDI2NTI4
YjhkYmNiYTBiMDY0YzE4OGE3ZTlhMzU5Njk4YzdlNjU4YmQuLjAyNTQ5NGMxZDcxMGE4MjgyMzFi
MDEzYWU1NjI5NzI5NDliZjhlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaEhhbmRsZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaEhhbmRsZS5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJHTFNM
QU5HL1NoYWRlckxhbmcuaCIKIAorI2luY2x1ZGUgImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKICNpbmNsdWRlICJjb21waWxlci9J
bmZvU2luay5oIgpAQCAtODcsNyArODgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gTWFwIGxvbmcg
dmFyaWFibGUgbmFtZXMgaW50byBzaG9ydGVyIG9uZXMuCiAgICAgdm9pZCBtYXBMb25nVmFyaWFi
bGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBj
b2RlLgotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290LCBpbnQgY29tcGls
ZU9wdGlvbnMpID0gMDsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBwYXNzZXMg
dGhlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IHRpbWluZyBhdHRhY2tzLgogICAg
IGJvb2wgZW5mb3JjZVRpbWluZ1Jlc3RyaWN0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCwgYm9vbCBv
dXRwdXRHcmFwaCk7CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIgZG9lcyBub3Qg
dXNlIHNhbXBsZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKaW5kZXggZTNhMmMyYTgwMjQwYTk1M2Q5NzZmZjhm
NzE5YTY5NzAyZjdhYjBkMS4uYzY2NDUwZjFhMWU0MWQxY2Y5MDk1ZWZiYjA3NGQzYWI5ZDkxNDhi
OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JFU1NMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHJhbnNsYXRvckVTU0wuY3BwCkBAIC0xMiw3ICsxMiw3IEBAIFRyYW5zbGF0b3JFU1NMOjpUcmFu
c2xhdG9yRVNTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCiAgICAgOiBU
Q29tcGlsZXIodHlwZSwgc3BlYykgewogfQogCi12b2lkIFRyYW5zbGF0b3JFU1NMOjp0cmFuc2xh
dGUoVEludGVybU5vZGUqIHJvb3QpIHsKK3ZvaWQgVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0ZShU
SW50ZXJtTm9kZSogcm9vdCwgaW50IGNvbXBpbGVPcHRpb25zKSB7CiAgICAgVEluZm9TaW5rQmFz
ZSYgc2luayA9IGdldEluZm9TaW5rKCkub2JqOwogCiAgICAgLy8gV3JpdGUgYnVpbHQtaW4gZXh0
ZW5zaW9uIGJlaGF2aW9ycy4KQEAgLTIyLDkgKzIyLDIzIEBAIHZvaWQgVHJhbnNsYXRvckVTU0w6
OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewogICAgIGdldEJ1aWx0SW5GdW5jdGlvbkVt
dWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24oCiAgICAgICAgIHNpbmss
IGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpOwogCisgICAgbUFycmF5Qm91
bmRzQ2xhbXBlci5TZXRTaG91bGRDbGFtcEFycmF5QWNjZXNzKGNvbXBpbGVPcHRpb25zICYgU0hf
Q0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKTsKKyAgICBpZiAobUFycmF5Qm91bmRzQ2xhbXBl
ci5HZXRTaG91bGRDbGFtcEFycmF5QWNjZXNzKCkpCisgICAgeworICAgICAgICAvLyBXcml0ZSBh
cnJheSBib3VuZHMgY2xhbXBpbmcgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LgorICAgICAgICBt
QXJyYXlCb3VuZHNDbGFtcGVyLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWNsYXJhdGlvbihzaW5r
KTsKKyAgICB9CisKICAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KLSAgICBUT3V0cHV0
RVNTTCBvdXRwdXRFU1NMKHNpbmspOworICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywg
bUFycmF5Qm91bmRzQ2xhbXBlcik7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEVTU0wpOwor
CisgICAgLy8gV3JpdGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGRlZmluaXRpb24gaWYgbmVjZXNz
YXJ5LgorICAgIGlmIChtQXJyYXlCb3VuZHNDbGFtcGVyLkdldFNob3VsZENsYW1wQXJyYXlBY2Nl
c3MoKSAmJiBtQXJyYXlCb3VuZHNDbGFtcGVyLkdldEFycmF5Qm91bmRzQ2xhbXBEZWZpbml0aW9u
TmVlZGVkKCkpCisgICAgeworICAgICAgICBtQXJyYXlCb3VuZHNDbGFtcGVyLk91dHB1dENsYW1w
aW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOworICAgIH0KKyAgICBtQXJyYXlCb3VuZHNDbGFt
cGVyLkNsZWFuVXAoKTsKIH0KIAogdm9pZCBUcmFuc2xhdG9yRVNTTDo6d3JpdGVFeHRlbnNpb25C
ZWhhdmlvcigpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9UcmFuc2xhdG9yRVNTTC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JFU1NMLmgKaW5kZXggYTExOTZiZDAwMTNhY2FjNDRkNzhkNTg1OGZlNTgx
N2E2ZTI3YjViYS4uNmJhNTkzMWMyMzZlOTBiOTRlYTNhNTBiZGU5YzhjZTI4OTVlNDc0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JF
U1NMLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0
b3JFU1NMLmgKQEAgLTcsNiArNyw3IEBACiAjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NM
X0hfCiAjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCiAKKyNpbmNsdWRlICJjb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5o
IgogCiBjbGFzcyBUcmFuc2xhdG9yRVNTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewpAQCAtMTQsMTAg
KzE1LDEyIEBAIHB1YmxpYzoKICAgICBUcmFuc2xhdG9yRVNTTChTaFNoYWRlclR5cGUgdHlwZSwg
U2hTaGFkZXJTcGVjIHNwZWMpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50
ZXJtTm9kZSogcm9vdCwgaW50IGNvbXBpbGVPcHRpb25zKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKworICAgIEFycmF5Qm91bmRzQ2xhbXBlciBtQXJy
YXlCb3VuZHNDbGFtcGVyOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SRVNT
TF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yR0xTTC5jcHAKaW5kZXggYmIwN2ExZWI0ZThmZmY2NjYxZjkyNGZkZjcwODM5Y2Zl
MDljMzA4MC4uZDBlNTBlY2Y2MzYxYmI0YjFkOGRiNTYzNDYxMDc5YTZiNDRjMjQ0MiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNM
LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckdMU0wuY3BwCkBAIC0yNSw3ICsyNSw3IEBAIFRyYW5zbGF0b3JHTFNMOjpUcmFuc2xhdG9yR0xT
TChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCiAgICAgOiBUQ29tcGlsZXIo
dHlwZSwgc3BlYykgewogfQogCi12b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVy
bU5vZGUqIHJvb3QpIHsKK3ZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCwgaW50IGNvbXBpbGVPcHRpb25zKSB7CiAgICAgVEluZm9TaW5rQmFzZSYgc2luayA9
IGdldEluZm9TaW5rKCkub2JqOwogCiAgICAgLy8gV3JpdGUgR0xTTCB2ZXJzaW9uLgpAQCAtMzUs
NyArMzUsMjEgQEAgdm9pZCBUcmFuc2xhdG9yR0xTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiBy
b290KSB7CiAgICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1
bmN0aW9uRGVmaW5pdGlvbigKICAgICAgICAgc2luaywgZmFsc2UpOwogCisgICAgbUFycmF5Qm91
bmRzQ2xhbXBlci5TZXRTaG91bGRDbGFtcEFycmF5QWNjZXNzKGNvbXBpbGVPcHRpb25zICYgU0hf
Q0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKTsKKyAgICBpZiAobUFycmF5Qm91bmRzQ2xhbXBl
ci5HZXRTaG91bGRDbGFtcEFycmF5QWNjZXNzKCkpCisgICAgeworICAgICAgICAvLyBXcml0ZSBh
cnJheSBib3VuZHMgY2xhbXBpbmcgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LgorICAgICAgICBt
QXJyYXlCb3VuZHNDbGFtcGVyLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWNsYXJhdGlvbihzaW5r
KTsKKyAgICB9CisgICAgCiAgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91
dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rKTsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNp
bmssIG1BcnJheUJvdW5kc0NsYW1wZXIpOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNM
KTsKKworICAgIC8vIFdyaXRlIGFycmF5IGJvdW5kcyBjbGFtcGluZyBkZWZpbml0aW9uIGlmIG5l
Y2Vzc2FyeS4KKyAgICBpZiAobUFycmF5Qm91bmRzQ2xhbXBlci5HZXRTaG91bGRDbGFtcEFycmF5
QWNjZXNzKCkgJiYgbUFycmF5Qm91bmRzQ2xhbXBlci5HZXRBcnJheUJvdW5kc0NsYW1wRGVmaW5p
dGlvbk5lZWRlZCgpKQorICAgIHsKKyAgICAgICAgbUFycmF5Qm91bmRzQ2xhbXBlci5PdXRwdXRD
bGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKKyAgICB9CisgICAgbUFycmF5Qm91bmRz
Q2xhbXBlci5DbGVhblVwKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oCmluZGV4IGMyY2UwNmQxOTJmMGZjNjFkYWJk
NTM2ZDIwNDlmZmI5ZWRlZjNhNjMuLmRjN2Q2ODk4YTY3MDU3NWMwYjAwOGIzZDQ0Nzk1MDk1Y2E3
ZTAxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9U
cmFuc2xhdG9yR0xTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9UcmFuc2xhdG9yR0xTTC5oCkBAIC03LDYgKzcsNyBAQAogI2lmbmRlZiBDT01QSUxFUl9UUkFO
U0xBVE9SR0xTTF9IXwogI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwogCisjaW5j
bHVkZSAiY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
U2hIYW5kbGUuaCIKIAogY2xhc3MgVHJhbnNsYXRvckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsK
QEAgLTE0LDcgKzE1LDkgQEAgcHVibGljOgogICAgIFRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlw
ZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZv
aWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNs
YXRlKFRJbnRlcm1Ob2RlKiByb290LCBpbnQgY29tcGlsZU9wdGlvbnMpOworCisgICAgQXJyYXlC
b3VuZHNDbGFtcGVyIG1BcnJheUJvdW5kc0NsYW1wZXI7CiB9OwogCiAjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JHTFNMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9pbnRlcm1PdXQuY3BwCmluZGV4IGU4M2M3YjcyZjJhMzA4NjEyNjBiZWFmZTFk
YzUwNGRkYjRkYTAyODkuLmY0OGEwNDljNjMzZGVlZDZkODE4Mjg3MjM0M2JmNzQ5OGQ1ZDZhZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1P
dXQuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1P
dXQuY3BwCkBAIC00Miw3ICs0Miw3IEBAIFRTdHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5n
KCkgY29uc3QKICAgICBpZiAocXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSAmJiBxdWFsaWZpZXIg
IT0gRXZxR2xvYmFsKQogICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwg
IiAiIDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKICAgICBpZiAoYXJyYXkpCi0gICAg
ICAgIHN0cmVhbSA8PCAiYXJyYXkgb2YgIjsKKyAgICAgICAgc3RyZWFtIDw8ICJhcnJheVsiIDw8
IGdldEFycmF5U2l6ZSgpIDw8ICJdIG9mICI7CiAgICAgaWYgKG1hdHJpeCkKICAgICAgICAgc3Ry
ZWFtIDw8IHNpemUgPDwgIlgiIDw8IHNpemUgPDwgIiBtYXRyaXggb2YgIjsKICAgICBlbHNlIGlm
IChzaXplID4gMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmNwcAppbmRleCAyMmZmYWMwMDQ5MDcxMDllNmM4NTI2NzQxMWFm
MWY5OWJiZmJkMDQ2Li5iMjA1YjdkZWYyYmI1NTZkZGIyODNmM2IxOGUzYzIwZDlkOTkwZjQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJy
aWRnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJL
aXRCcmlkZ2UuY3BwCkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6
Y29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZGUK
IAogICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclNvdXJjZVN0cmluZ3NbXSA9IHsgc2hhZGVy
U291cmNlIH07CiAKLSAgICBib29sIHZhbGlkYXRlU3VjY2VzcyA9IFNoQ29tcGlsZShjb21waWxl
ciwgc2hhZGVyU291cmNlU3RyaW5ncywgMSwgU0hfT0JKRUNUX0NPREUgfCBTSF9BVFRSSUJVVEVT
X1VOSUZPUk1TIHwgZXh0cmFDb21waWxlT3B0aW9ucyk7CisgICAgYm9vbCB2YWxpZGF0ZVN1Y2Nl
c3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIFNIX09CSkVD
VF9DT0RFIHwgU0hfQVRUUklCVVRFU19VTklGT1JNUyB8IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZ
X0JPVU5EUyB8IGV4dHJhQ29tcGlsZU9wdGlvbnMpOwogICAgIGlmICghdmFsaWRhdGVTdWNjZXNz
KSB7CiAgICAgICAgIGludCBsb2dTaXplID0gZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbXBp
bGVyLCBTSF9JTkZPX0xPR19MRU5HVEgpOwogICAgICAgICBpZiAobG9nU2l6ZSA+IDEpIHsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA4OGU0YTc5ZGE3NzNhMTFkZTA3Y2U3ZDE3YWE2MjI4NTVkMWY5MmZmLi5mMDA2YWNmZmM3
NDBjYzViMjhhZjM4ZjJkYWE1ZWFhZDc1ZWQyYjQyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTItMTAtMTYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFNoYWRl
ciB0cmFuc2xhdG9yIG5lZWRzIG9wdGlvbiB0byBjbGFtcCB1bmlmb3JtIGFycmF5IGFjY2Vzc2Vz
IGluIHZlcnRleCBzaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05ODk3NworICAgICAgICBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xl
cHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xh
bXBpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9h
cnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbDogQWRkZWQuCisKIDIwMTItMTAtMTUgIERhbmEgSmFu
c2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgaW5zcGVjdG9yL3N0eWxlcy9z
dHlsZXMtY29tcHV0ZWQtdHJhY2UuaHRtbCBpcyB0aW1pbmcgb3V0CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmctZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1waW5n
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWM4ZDhmMjczNTQwYmYxMjczZWQzM2JmMTdkODMw
MGU3MzY3ODg2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvYXJyYXktYm91bmRzLWNsYW1waW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACisg
Q2hlY2tzIHRoYXQgYXJyYXkgYWNjZXNzIGluIGEgc2hhZGVyIGNhbiBub3QgcmVhZCBvdXQgb2Yg
Ym91bmRzCisKK1BBU1MgVG9wIGxlZnQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwCitQ
QVNTIEluc2lkZSB0b3AgcmlnaHQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwCitQQVNT
IEluc2lkZSBib3R0b20gbGVmdCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDAKK1BBU1Mg
Qm90dG9tIHJpZ2h0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggNworUEFTUyBPdXRzaWRl
IGJvdHRvbSBsZWZ0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggNworUEFTUyBPdXRzaWRl
IHRvcCByaWdodCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDcKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LWJvdW5kcy1jbGFtcGluZy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE5MGRlZTc1NGQ1YTZmNzIyMjM2ZTk4NzQ2Y2ZmMDA0YTllMzdhODUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xh
bXBpbmcuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9X
M0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3Jn
L1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYkdMIGFycmF5
IGJvdW5kcyBjbGFtcGluZyBjb25mb3JtYW5jZSB0ZXN0LjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHN0eWxlPSJ3aWR0aDog
NDBweDsgaGVpZ2h0OiA0MHB4OyI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9
Ingtc2hhZGVyL3gtdmVydGV4Ij4KKyNpZmRlZiBHTF9FUworcHJlY2lzaW9uIGhpZ2hwIGZsb2F0
OworI2VuZGlmCithdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247CithdHRyaWJ1dGUgZmxvYXQgaW5k
ZXg7Cit1bmlmb3JtIGZsb2F0IHNoYWRlc1s4XTsKK3ZhcnlpbmcgdmVjNCB0ZXhDb2xvcjsKK3Zv
aWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247CisgICAgdGV4Q29sb3Ig
PSB2ZWM0KHNoYWRlc1tpbnQoaW5kZXgpXSwgMCwgMCwgMS4wKTsKK30KKzwvc2NyaXB0PgorCis8
c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KKyNpZmRlZiBH
TF9FUworcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OworI2VuZGlmCit2YXJ5aW5nIHZlYzQgdGV4Q29s
b3I7Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9IHRleENvbG9yOworfQorPC9z
Y3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBpZiAod2luZG93Lmlu
aXROb25LaHJvbm9zRnJhbWV3b3JrKQorICAgICAgICB3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFt
ZXdvcmsoZmFsc2UpOworCisgICAgZGVidWcoIkNoZWNrcyB0aGF0IGFycmF5IGFjY2VzcyBpbiBh
IHNoYWRlciBjYW4gbm90IHJlYWQgb3V0IG9mIGJvdW5kcyIpOworICAgIGRlYnVnKCIiKTsKKwor
ICAgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZzaGFkZXIiLCAiZnNoYWRlciIsIFsgInZQ
b3NpdGlvbiIsICJpbmRleCIgXSwKKyAgICAgICAgICAgICAgICAgICBbIDEsIDEsIDEsIDEgXSwg
MSk7CisKKyAgICBnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpOworICAgIGdsLmRpc2FibGUoZ2wu
QkxFTkQpOworCisgICAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAg
IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICAgIGdsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLAorICAgICAgICAgICAgICAgICAgbmV3IEZsb2F0MzJB
cnJheShbIC0xLDEsMCwgMSwxLDAsIC0xLC0xLDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLTEsLTEsMCwgMSwxLDAsIDEsLTEsMCBdKSwKKyAgICAgICAgICAgICAgICAg
IGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAg
ICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisK
KyAgICB2YXIgdmVydGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAgZ2wuYnVmZmVyRGF0YShn
bC5BUlJBWV9CVUZGRVIsCisgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgdGhh
dCBleGVyY2lzZXMgd2VsbCBvdXRzaWRlIHRoZQorICAgICAgICAgICAgICAgICAgLy8gbGltaXRz
IG9uIGVhY2ggc2lkZSwgbmVhciB0aGUgbGltaXRzLCBhbmQgdGhlCisgICAgICAgICAgICAgICAg
ICAvLyBleGFjdCBsaW1pdHMuCisgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBj
bGFtcGVkIHRvIFswLCAwLCAwLCA3LCA3LCA3XQorICAgICAgICAgICAgICAgICAgbmV3IEZsb2F0
MzJBcnJheShbIC1OdW1iZXIuTUFYX1ZBTFVFLCAtMSwgMCwgNywgOCwgTnVtYmVyLk1BWF9WQUxV
RV0pLAorICAgICAgICAgICAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KDEpOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgMSwgZ2wu
RkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAgIHZhciBsb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRp
b24oZ2wucHJvZ3JhbSwgInNoYWRlcyIpOworICAgIGdsLnVuaWZvcm0xZnYobG9jLCBbMC4yNSwg
MC41LCAwLCAwLCAwLCAwLCAwLjc1LCAxXSk7CisKKyAgICBjaGVja1JlZFZhbHVlKDAsIDM4LCA2
NCwgIlRvcCBsZWZ0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggMCIpOworICAgIGNoZWNr
UmVkVmFsdWUoMzcsIDM4LCA2NCwgIkluc2lkZSB0b3AgcmlnaHQgY29ybmVyIHNob3VsZCBjbGFt
cCB0byBpbmRleCAwIik7CisgICAgY2hlY2tSZWRWYWx1ZSgwLCAxLCA2NCwgIkluc2lkZSBib3R0
b20gbGVmdCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDAiKTsKKworICAgIGNoZWNrUmVk
VmFsdWUoMzgsIDAsIDI1NSwgIkJvdHRvbSByaWdodCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGlu
ZGV4IDciKTsKKyAgICBjaGVja1JlZFZhbHVlKDMsIDEsIDI1NSwgIk91dHNpZGUgYm90dG9tIGxl
ZnQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCA3Iik7CisgICAgY2hlY2tSZWRWYWx1ZSgz
OCwgMzcsIDI1NSwgIk91dHNpZGUgdG9wIHJpZ2h0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5k
ZXggNyIpOworCisgICAgZnVuY3Rpb24gY2hlY2tSZWRWYWx1ZSh4LCB5LCB2YWx1ZSwgbXNnKSB7
CisgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJf
QklUKTsKKyAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOworICAgICAg
ICBnbC5mbHVzaCgpOworICAgICAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoNCk7CisgICAg
ICAgIGdsLnJlYWRQaXhlbHMoeCwgeSwgMSwgMSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwg
YnVmKTsKKyAgICAgICAgaWYgKGJ1ZlswXSAhPSB2YWx1ZSB8fCBidWZbMV0gIT0gMCB8fCBidWZb
Ml0gIT0gMCB8fCBidWZbM10gIT0gMjU1KSB7CisgICAgICAgICAgICBkZWJ1ZygnZXhwZWN0ZWQ6
IHJnYignICsgdmFsdWUgKyAnLCAwLCAwLCAyNTUpIHdhcyByZ2IoJyArIGJ1ZlswXSArICcsICcg
KyBidWZbMV0gKyAnLCAnICsgYnVmWzJdICsgJywgJyArIGJ1ZlszXSArICcpJyk7CisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKG1zZyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGVzdFBhc3NlZChtc2cpOworICAgIH0KK30KKworaW5pdCgpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169062</attachid>
            <date>2012-10-16 17:19:10 -0700</date>
            <delta_ts>2012-10-18 14:29:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98977-20121017111757.patch</filename>
            <type>text/plain</type>
            <size>37468</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGJiMTUyMTJkZWJkZjkwM2ZhMTYxODg4NGU3ZTkyNDBhYzVhNTkzOC4uMjRlOGExNTQ5NzYx
MzEzNGQ3NDQyYjAzNGZhMTkwMjNjZmFlZWFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTEwLTE2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRpb24gdG8gY2xhbXAg
dW5pZm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAgICAgaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD00OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIGRvZXMgbm90
IGFsbG93IEdMU0wgY29kZSB0byBpbmRleCBhIHVuaWZvcm0gYXJyYXkgb3V0c2lkZSBpdHMgYm91
bmRzLiBBZGQgYQorICAgICAgICBmbGFnIHRvIHRoZSBBTkdMRSBjb21waWxlciB0byBpbnNlcnQg
Y2xhbXAgc3RhdGVtZW50cyBhcm91bmQgc3VjaCBpbmRleGluZy4KKyAgICAgICAgU2luY2UgaXQg
aXMgcG9zc2libGUgdG8gYWNjZXNzIHZlYzIvMy80IGFuZCBtYXQyLzMvNCBjb21wb25lbnRzIGJ5
IGFycmF5IGluZGV4aW5nLAorICAgICAgICB0aGV5IG11c3QgYmUgc2ltaWxhcmx5IGNsYW1wZWQu
CisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgaXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0
byBhbHdheXMgZGV0ZXJtaW5lIHRoYXQgdGhlIGluZGV4aW5nIGlzCisgICAgICAgIG9wZXJhdGlu
ZyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgInVu
aWZvcm0gbWF0NCBhIi4gQU5HTEUKKyAgICAgICAgaXMgY3VycmVudGx5IG5vdCBhYmxlIHRvIHRl
bGwgdXMgdGhhdCB0aGUgcnZhbHVlIG9mICJhWzBdIiBpcyBhIHVuaWZvcm0sIGp1c3QgdGhhdAor
ICAgICAgICBpdCBoYXMgYSBzaXplIG9mIDQuIFRoZXJlZm9yZSwgdGhlIGNsYW1waW5nIGlzIGRv
bmUgb24gYWxsIGluZGlyZWN0IGFycmF5IGluZGV4aW5nLgorCisgICAgICAgIFRoaXMgd2lsbCBo
YXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBGdXR1cmUgZW5oYW5jZW1lbnRzIG1heSBiZSBhYmxl
IHRvIGRldGVybWluZQorICAgICAgICBjYXNlcyB3aGVyZSB0aGUgY2xhbXBpbmcgaXMgbm90IG5l
Y2Vzc2FyeS4gQ3VycmVudGx5IG9ubHkgZGlyZWN0IGluZGV4aW5nIGlzIHNraXBwZWQKKyAgICAg
ICAgKGkuZS4gbG9va2luZyB1cCBhIHZhbHVlIHVzaW5nIGEgY29uc3RhbnQgaW5kZXgpLgorCisg
ICAgICAgIFRoZSBjbGFtcCBpbnNlcnRpb24gaXMgb25seSBwZXJmb3JtZWQgb24gdGhlIEdMU0wg
b3V0cHV0LiBEaXJlY3QzRCBhbHJlYWR5IGd1YXJhbnRlZXMKKyAgICAgICAgdGhhdCBvdXQtb2Yt
Ym91bmRzIHVuaWZvcm0gYXJyYXkgYWNjZXNzIHJldHVybnMgYSB6ZXJvIHZhbHVlLgorCisgICAg
ICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6IE5ldyBjb21waWxl
ciBvcHRpb24uCisgICAgICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHA6
IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpBcnJheUJvdW5kc0NsYW1wZXIp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVj
bGFyYXRpb24pOiBJbmplY3RzIGEgY2xhbXBpbmcgZnVuY3Rpb24gZm9yIGludGVnZXJzIGludG8g
R0xTTCBzb3VyY2UuCisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6Ok91dHB1dENsYW1waW5n
RnVuY3Rpb25EZWZpbml0aW9uKTogSW5qZWN0cyBhIGNsYW1waW5nIGZ1bmN0aW9uIGZvciBpbnRl
Z2VycyBpbnRvIEdMU0wgc291cmNlLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRw
dXRDbGFtcGVkQXJyYXlBY2Nlc3MpOiBUcmFuc2xhdGVzIGEgcmVndWxhciBhcnJheSBpbmRleGlu
ZyBvcGVyYXRpb24gdG8gY2FsbCB0aGUgY2xhbXBlZCBmdW5jdGlvbi4KKyAgICAgICAgKEFycmF5
Qm91bmRzQ2xhbXBlcjo6RG9lc1BlcmZvcm1JbmRpcmVjdEFycmF5QWNjZXNzKTogVGVzdHMgdG8g
c2VlIGlmIGEgbm9kZSBuZWVkcyBjbGFtcGluZy8KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQXJy
YXlCb3VuZHNDbGFtcGVyLmg6IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyKToK
KyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6R2V0U2hvdWxkQ2xhbXBBcnJheUFjY2Vzcyk6
CisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6OlNldFNob3VsZENsYW1wQXJyYXlBY2Nlc3Mp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpHZXRBcnJheUJvdW5kc0NsYW1wRGVmaW5p
dGlvbk5lZWRlZCk6CisgICAgICAgIChBcnJheUJvdW5kc0NsYW1wZXI6OlNldEFycmF5Qm91bmRz
Q2xhbXBEZWZpbml0aW9uTmVlZGVkKToKKyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6Q2xl
YW5VcCk6IFJlc2V0cyB0aGUgc3RhdGUgc28gdGhhdCBzdWJzZXF1ZW50IHJ1bnMgc3RhcnQgZnJl
c2guCisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcDoKKyAgICAgICAgKFRDb21w
aWxlcjo6Y29tcGlsZSk6IFJ1biB0aGUgY2xhbXBpbmcgY29kZSBpZiB0aGUgY29tcGlsZSBvcHRp
b24gd2FzIHNldC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHA6CisgICAg
ICAgIChUT3V0cHV0RVNTTDo6VE91dHB1dEVTU0wpOiBOZXcgQXJyYXlCb3VuZHNDbGFtcGVyIHBh
cmFtZXRlciB0byBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0RVNT
TC5oOgorICAgICAgICAoVE91dHB1dEVTU0wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRw
dXRHTFNMLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMOjpUT3V0cHV0R0xTTCk6IE5ldyBBcnJh
eUJvdW5kc0NsYW1wZXIgcGFyYW1ldGVyIHRvIGNvbnN0cnVjdG9yLgorICAgICAgICAqIHNyYy9j
b21waWxlci9PdXRwdXRHTFNMLmg6CisgICAgICAgIChUT3V0cHV0R0xTTCk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMQmFz
ZTo6VE91dHB1dEdMU0xCYXNlKTogTmV3IEFycmF5Qm91bmRzQ2xhbXBlciBwYXJhbWV0ZXIgdG8g
Y29uc3RydWN0b3IuCisgICAgICAgIChUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KTogSWYg
dGhlIGV4cHJlc3Npb24gaGFzIGJlZW4gZmxhZ2dlZCwgaW5zZXJ0IGFuIGFwcHJvcHJpYXRlICJj
bGFtcCIgc3RhdGVtZW50LgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5o
OgorICAgICAgICAoVE91dHB1dEdMU0xCYXNlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU2hI
YW5kbGUuaDoKKyAgICAgICAgKFRDb21waWxlcik6IEFkZCBwYXJhbWV0ZXIgY29tcGlsZU9wdGlv
bnMgdG8gdHJhbnNsYXRlIG1ldGhvZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckVTU0wuY3BwOgorICAgICAgICAoVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0ZSk6IFNldHMgdXAg
dGhlIEFycmF5Qm91bmRzQ2xhbXBlciBpZiBuZWNlc3NhcnkuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL1RyYW5zbGF0b3JFU1NMLmg6CisgICAgICAgIChUcmFuc2xhdG9yRVNTTCk6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcDoKKyAgICAgICAgKFRyYW5zbGF0b3JH
TFNMOjp0cmFuc2xhdGUpOiBTZXRzIHVwIHRoZSBBcnJheUJvdW5kc0NsYW1wZXIgaWYgbmVjZXNz
YXJ5LgorICAgICAgICAqIHNyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oOgorICAgICAgICAo
VHJhbnNsYXRvckdMU0wpOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwOgor
ICAgICAgICAoVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKTogQWRkIGFycmF5IHNpemUgdG8gaW50
ZXJtZWRpYXRlIHRyZWUgb3V0cHV0LgorCiAyMDEyLTA5LTEzICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyMjU1NzIwPiBGaXggdGhlIGJ1
aWxkIHdpdGggbmV3ZXIgQ2xhbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjZDBkOTllMjY3NGY1Y2MzZGI1ZTk4
ZmRkMDllYjI3MDRjNTZkMjk2Li5mNzNlMTE0MjY0NTFlN2Y3M2JhZGFiNjI3YzhkNTAwZGY4NmU2
MDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTAtMTYgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFNoYWRlciB0cmFuc2xhdG9yIG5lZWRzIG9w
dGlvbiB0byBjbGFtcCB1bmlmb3JtIGFycmF5IGFjY2Vzc2VzIGluIHZlcnRleCBzaGFkZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODk3NworICAg
ICAgICBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWls
P2lkPTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViR0wgZm9yYmlkcyBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpbiBzaGFkZXJzLiBSZXdy
aXRlIGFueSBzaGFkZXJzIHRvCisgICAgICAgIGVuc3VyZSB0aGF0IG5vbi1kaXJlY3QgYXJyYXkg
aW5kZXhpbmcgaXMgY2xhbXBlZCB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKworICAgICAg
ICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U6OmNvbXBpbGVTaGFkZXJTb3VyY2UpOiBQYXNz
IG5ldyBjb21waWxlciBvcHRpb24gU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTCisKIDIw
MTItMTAtMTYgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEluc3BlY3RvcjogRG9uJ3QgZmlyZSBhc3NlcnQgd2hlbiBpbnNwZWN0aW5nIGFuIGVtcHR5IGRi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4ZjJiZTYwZjU0OGE2ZjQ4OTk5M2JlZjQ2OWFlNjRkZmNhZDU2
MzYyLi5iODMyN2ZkMDY2Y2UzOGVmY2MxOTAwODk1OTY5MGVlMDMwMGQwN2RjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTksNiArOSw4IEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwog
CQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4gQ29weUZpbGVzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVGRUM5MUUwMDk3RUJD
NyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAwOTdFQkM3IC8qIEFO
R0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsgfTsKKwkJMzFFRDQ3MUMx
NjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUVENDcxQTE2MjRFRkQxMDAyNDUwNzgg
LyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsgfTsKKwkJMzFFRDQ3MUQxNjI0RUZEMTAwMjQ1
MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzFFRDQ3MUIxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRz
Q2xhbXBlci5oICovOyB9OwogCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xp
bWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5
NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLzsgfTsKIAkJNDk5NTFD
MDkxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzA1MTRCN0FBRDcw
MDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi87IH07CiAJCTQ5OTUxQzBB
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDYxNEI3QUFEODAwNjBF
OTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi87IH07CkBAIC0xMzYsNiArMTM4LDgg
QEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkzMTJCREIwOTE1RkVD
OTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0
aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIwQTE1
RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFOR0xF
LnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFFRDQ3MUExNjI0RUZEMTAwMjQ1
MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBcnJheUJvdW5kc0NsYW1wZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMUVENDcxQjE2MjRFRkQxMDAyNDUwNzggLyogQXJyYXlCb3VuZHNDbGFtcGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5Qm91bmRzQ2xhbXBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyog
bGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhf
bGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OTUxQzA1MTRCN0FBRDcw
MDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OTUxQzA2MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdWls
dEluRnVuY3Rpb25FbXVsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ0
LDYgKzU0OCw4IEBACiAJCUZCMzlEMjIwMTIwMEYzNUEwMDA4OEU2OSAvKiBjb21waWxlciAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMzFFRDQ3MUExNjI0
RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgKi8sCisJCQkJMzFFRDQ3MUIx
NjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oICovLAogCQkJCUZCMzlEMjIx
MTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLywKIAkJCQk0OTk1MUMwNTE0QjdBQUQ3
MDA2MEU5NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwICovLAogCQkJCTQ5OTUxQzA2
MTRCN0FBRDgwMDYwRTk2RSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oICovLApAQCAtNzEy
LDYgKzcxOCw3IEBACiAJCQkJQTI2NTY4M0UxNTlDMjNFMTAwMzk4NTM5IC8qIERlcGVuZGVuY3lH
cmFwaE91dHB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4NDExNTlDMjNFMTAwMzk4NTM5
IC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUEy
NjU2ODQzMTU5QzIzRTEwMDM5ODUzOSAvKiBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzFFRDQ3MUQxNjI0RUZEMTAwMjQ1MDc4IC8qIEFycmF5Qm91bmRz
Q2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC04MjksNiArODM2LDcgQEAKIAkJCQlBMjY1Njgz
RjE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoVHJhdmVyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTI2NTY4NDAxNTlDMjNFMTAwMzk4NTM5IC8qIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NTY4NDIxNTlDMjNFMTAwMzk4
NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxRUQ0NzFDMTYyNEVGRDEwMDI0NTA3OCAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9UYXJnZXQucHJp
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQppbmRleCA0ZTkzMDNhYjc2YTNi
MGQ3ZTkwMzkwNTE2NjAzMWY2ZjNkMmM4YTg5Li5lYWE5MzZkODhjZmFmMDU1ZmQ5NWY2YjUwMDg2
Y2UzZTU4MTQ3MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKQEAgLTE3LDYgKzE3
LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9pbmNsdWRlCiAKIEhFQURF
UlMgKz0gXAorICAgIHNyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCBcCiAgICAgc3Jj
L2NvbXBpbGVyL0Jhc2VUeXBlcy5oIFwKICAgICBzcmMvY29tcGlsZXIvQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCBcCiAgICAgc3JjL2NvbXBpbGVyL0NvbW1vbi5oIFwKQEAgLTkwLDYgKzkxLDcg
QEAgSEVBREVSUyArPSBcCiAgICAgc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgKIAogU09VUkNF
UyArPSBcCisgICAgc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHAgXAogICAgIHNy
Yy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgXAogICAgIHNyYy9jb21waWxl
ci9Db2RlR2VuR0xTTC5jcHAgXAogICAgIHNyYy9jb21waWxlci9Db21waWxlci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxh
bmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmgKaW5kZXggOWE0YTM2ZGJmMzBiMWQxMTVmYzNlZjJkYTNjY2VkMzhhZmY3Y2JmYi4uZDgyOTMx
ZWExYmI1NzllODhhMGE4MmZiMTNhNTFkMWQ4ZDA2MDNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCkBAIC0xNDIsNyAr
MTQyLDEzIEBAIHR5cGVkZWYgZW51bSB7CiAgIC8vIC0gVGhlIHNoYWRlciBzcGVjIGlzIFNIX1dF
QkdMX1NQRUMuCiAgIC8vIC0gVGhlIGNvbXBpbGUgb3B0aW9ucyBjb250YWluIHRoZSBTSF9USU1J
TkdfUkVTVFJJQ1RJT05TIGZsYWcuCiAgIC8vIC0gVGhlIHNoYWRlciB0eXBlIGlzIFNIX0ZSQUdN
RU5UX1NIQURFUi4KLSAgU0hfREVQRU5ERU5DWV9HUkFQSCA9IDB4MDQwMAorICBTSF9ERVBFTkRF
TkNZX0dSQVBIID0gMHgwNDAwLAorCisgIC8vIFRoaXMgZmxhZyBlbnN1cmVzIGFsbCBpbmRpcmVj
dCAoZXhwcmVzc2lvbi1iYXNlZCkgYXJyYXkgaW5kZXhpbmcKKyAgLy8gaXMgY2xhbXBlZCB0byB0
aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gVGhpcyBlbnN1cmVzLCBmb3IgZXhhbXBsZSwKKyAgLy8g
dGhhdCB5b3UgY2Fubm90IHJlYWQgb2ZmIHRoZSBlbmQgb2YgYSB1bmlmb3JtLCB3aGV0aGVyIGFu
IGFycmF5CisgIC8vIHZlYzIzNCwgb3IgbWF0MjM0IHR5cGUuCisgIFNIX0NMQU1QX0lORElSRUNU
X0FSUkFZX0JPVU5EUyA9IDB4MDgwMAogfSBTaENvbXBpbGVPcHRpb25zOwogCiAvLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xh
bXBlci5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJyYXlCb3Vu
ZHNDbGFtcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGJmMzcyNWQ5NGM5M2EzYzI0NDA5ODM0Y2FiNmRh
NDFmZGJlZWRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgorCitjb25zdCBjaGFy
KiBrSW50Q2xhbXBCZWdpbiA9ICIvLyBCRUdJTjogR2VuZXJhdGVkIGNvZGUgZm9yIGFycmF5IGJv
dW5kcyBjbGFtcGluZ1xuIjsKK2NvbnN0IGNoYXIqIGtJbnRDbGFtcEVuZCA9ICIvLyBFTkQ6IEdl
bmVyYXRlZCBjb2RlIGZvciBhcnJheSBib3VuZHMgY2xhbXBpbmdcbiI7Citjb25zdCBjaGFyKiBr
SW50Q2xhbXBEZWNsYXJhdGlvbiA9ICJpbnQgd2ViZ2xfaW50X2NsYW1wKGludCB2YWx1ZSwgaW50
IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUpOyI7Citjb25zdCBjaGFyKiBrSW50Q2xhbXBEZWZpbml0
aW9uID0gImludCB3ZWJnbF9pbnRfY2xhbXAoaW50IHZhbHVlLCBpbnQgbWluVmFsdWUsIGludCBt
YXhWYWx1ZSkgeyByZXR1cm4gKCh2YWx1ZSA8IG1pblZhbHVlKSA/IG1pblZhbHVlIDogKCh2YWx1
ZSA+IG1heFZhbHVlKSA/IG1heFZhbHVlIDogdmFsdWUpKTsgfSI7CisKK0FycmF5Qm91bmRzQ2xh
bXBlcjo6QXJyYXlCb3VuZHNDbGFtcGVyKCkKKyAgICA6IG1TaG91bGRDbGFtcEFycmF5QWNjZXNz
KGZhbHNlKQorICAgICwgbUFycmF5Qm91bmRzQ2xhbXBEZWZpbml0aW9uTmVlZGVkKGZhbHNlKQor
eworfQorCit2b2lkIEFycmF5Qm91bmRzQ2xhbXBlcjo6T3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRl
Y2xhcmF0aW9uKFRJbmZvU2lua0Jhc2UmIG91dCkgY29uc3QKK3sKKyAgICBvdXQgPDwga0ludENs
YW1wQmVnaW47CisgICAgb3V0IDw8IGtJbnRDbGFtcERlY2xhcmF0aW9uIDw8ICJcbiI7CisgICAg
b3V0IDw8IGtJbnRDbGFtcEVuZDsKK30KKwordm9pZCBBcnJheUJvdW5kc0NsYW1wZXI6Ok91dHB1
dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKFRJbmZvU2lua0Jhc2UmIG91dCkgY29uc3QKK3sK
KyAgICBvdXQgPDwga0ludENsYW1wQmVnaW47CisgICAgb3V0IDw8IGtJbnRDbGFtcERlZmluaXRp
b24gPDwgIlxuIjsKKyAgICBvdXQgPDwga0ludENsYW1wRW5kOworfQorCit2b2lkIEFycmF5Qm91
bmRzQ2xhbXBlcjo6T3V0cHV0Q2xhbXBlZEFycmF5QWNjZXNzKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QmluYXJ5KiBub2RlLCBUSW5mb1NpbmtCYXNlJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKHZpc2l0
ID09IEluVmlzaXQpCisgICAgeworICAgICAgICBvdXQgPDwgIlt3ZWJnbF9pbnRfY2xhbXAoIjsK
KyAgICB9CisgICAgZWxzZSBpZiAodmlzaXQgPT0gUG9zdFZpc2l0KQorICAgIHsKKyAgICAgICAg
aW50IG1heFNpemU7CisgICAgICAgIFRJbnRlcm1UeXBlZCogbGVmdCA9IG5vZGUtPmdldExlZnQo
KTsKKyAgICAgICAgVFR5cGUgbGVmdFR5cGUgPSBsZWZ0LT5nZXRUeXBlKCk7CisKKyAgICAgICAg
aWYgKGxlZnQtPmlzQXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHNoYWRl
ciB3aWxsIGZhaWwgdmFsaWRhdGlvbiBpZiB0aGUgYXJyYXkgbGVuZ3RoIGlzIG5vdCA+IDAuCisg
ICAgICAgICAgICBtYXhTaXplID0gbGVmdFR5cGUuZ2V0QXJyYXlTaXplKCkgLSAxOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRU
eXBlLmdldE5vbWluYWxTaXplKCkgLSAxOworICAgICAgICB9CisgICAgICAgIG91dCA8PCAiLCAw
LCAiIDw8IG1heFNpemUgPDwgIildIjsKKyAgICB9Cit9CisKK2Jvb2wgQXJyYXlCb3VuZHNDbGFt
cGVyOjpEb2VzUGVyZm9ybUluZGlyZWN0QXJyYXlBY2Nlc3MoVEludGVybUJpbmFyeSogbm9kZSkg
Y29uc3QKK3sKKyAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BJbmRleEluZGlyZWN0KQorICAg
IHsKKyAgICAgICAgVEludGVybVR5cGVkKiBsZWZ0ID0gbm9kZS0+Z2V0TGVmdCgpOworICAgICAg
ICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IGxlZnQtPmlzVmVjdG9yKCkgfHwgbGVmdC0+aXNNYXRy
aXgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41YzBjYzc0OWU5N2FkN2Y1M2Q5ZWVmY2I4YjZlMjg5OWViZjQwMjY1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xh
bXBlci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ09NUElMRVJfQVJSQVlf
Qk9VTkRTX0NMQU1QRVJfSF8KKyNkZWZpbmUgQ09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJf
SF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGls
ZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKworY2xh
c3MgQXJyYXlCb3VuZHNDbGFtcGVyIHsKK3B1YmxpYzoKKyAgICBBcnJheUJvdW5kc0NsYW1wZXIo
KTsKKworICAgIGJvb2wgR2V0U2hvdWxkQ2xhbXBBcnJheUFjY2VzcygpIGNvbnN0IHsgcmV0dXJu
IG1TaG91bGRDbGFtcEFycmF5QWNjZXNzOyB9CisgICAgdm9pZCBTZXRTaG91bGRDbGFtcEFycmF5
QWNjZXNzKGJvb2wgc2hvdWxkQ2xhbXApIHsgbVNob3VsZENsYW1wQXJyYXlBY2Nlc3MgPSBzaG91
bGRDbGFtcDsgfQorCisgICAgYm9vbCBHZXRBcnJheUJvdW5kc0NsYW1wRGVmaW5pdGlvbk5lZWRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheUJvdW5kc0NsYW1wRGVmaW5pdGlvbk5lZWRlZDsgfQor
ICAgIHZvaWQgU2V0QXJyYXlCb3VuZHNDbGFtcERlZmluaXRpb25OZWVkZWQoKSB7IG1BcnJheUJv
dW5kc0NsYW1wRGVmaW5pdGlvbk5lZWRlZCA9IHRydWU7IH0KKworICAgIC8vIE91dHB1dCBhcnJh
eSBjbGFtcCBmdW5jdGlvbiBzb3VyY2UgaW50byB0aGUgc2hhZGVyIHNvdXJjZS4KKyAgICB2b2lk
IE91dHB1dENsYW1waW5nRnVuY3Rpb25EZWNsYXJhdGlvbihUSW5mb1NpbmtCYXNlJiBvdXQpIGNv
bnN0OworICAgIHZvaWQgT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oVEluZm9TaW5r
QmFzZSYgb3V0KSBjb25zdDsKKworICAgIHZvaWQgT3V0cHV0Q2xhbXBlZEFycmF5QWNjZXNzKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2RlLCBUSW5mb1NpbmtCYXNlJiBvdXQpIGNvbnN0
OworCisgICAgLy8gRXhhbWluZXMgaWYgYSBub2RlIGFjY2Vzc2VzIGFycmF5IGJvdW5kcyBpbmRp
cmVjdGx5LCBhbmQgdGh1cyBzaG91bGQgYmUgY2xhbXBlZAorICAgIGJvb2wgRG9lc1BlcmZvcm1J
bmRpcmVjdEFycmF5QWNjZXNzKFRJbnRlcm1CaW5hcnkqIG5vZGUpIGNvbnN0OworCisgICAgdm9p
ZCBDbGVhblVwKCkKKyAgICB7CisgICAgICAgIG1TaG91bGRDbGFtcEFycmF5QWNjZXNzID0gZmFs
c2U7CisgICAgICAgIG1BcnJheUJvdW5kc0NsYW1wRGVmaW5pdGlvbk5lZWRlZCA9IGZhbHNlOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1TaG91bGRDbGFtcEFycmF5QWNjZXNzOworICAg
IGJvb2wgbUFycmF5Qm91bmRzQ2xhbXBEZWZpbml0aW9uTmVlZGVkOworfTsKKworI2VuZGlmIC8v
IENPTVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcAppbmRleCBjYWI4MDU2YmNlZTU1NTFi
OWUzM2JjOTEwMTBkYzBiNmNlNzIwZDBiLi44MTRhZGI2ZWMwN2Q2N2M4YzQ0ZGFmOWUxMDdlYzEw
ZWQzYTc0MDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Db21waWxlci5jcHAKQEAgLTQsNiArNCw3IEBACiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KIAorI2luY2x1ZGUgImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvRGV0ZWN0UmVjdXJzaW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRm9yTG9vcFVucm9s
bC5oIgpAQCAtMTk5LDcgKzIwMCw3IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNo
YXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRw
dXRUcmVlKHJvb3QpOwogCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAm
IFNIX09CSkVDVF9DT0RFKSkKLSAgICAgICAgICAgIHRyYW5zbGF0ZShyb290KTsKKyAgICAgICAg
ICAgIHRyYW5zbGF0ZShyb290LCBjb21waWxlT3B0aW9ucyk7CiAgICAgfQogCiAgICAgLy8gQ2xl
YW51cCBtZW1vcnkuCkBAIC0zMzEsMyArMzMyLDQgQEAgY29uc3QgQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3ImIFRDb21waWxlcjo6Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKSBjb25zdAogewog
ICAgIHJldHVybiBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKIH0KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuY3BwCmluZGV4IDY0ZWU5
MmQ0NGUxNWM3MTgwZTkyYzg2YjBhZTFlYTFkZTQ2NTkxNjAuLjFkMWNjZWJmM2RmZGM1YmJhZTM3
OGY0NWIxNjg3NTYxNGVkNDJjZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9PdXRwdXRFU1NMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5jcHAKQEAgLTYsOCArNiw4IEBACiAKICNpbmNsdWRl
ICJjb21waWxlci9PdXRwdXRFU1NMLmgiCiAKLVRPdXRwdXRFU1NMOjpUT3V0cHV0RVNTTChUSW5m
b1NpbmtCYXNlJiBvYmpTaW5rKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmspCitUT3V0
cHV0RVNTTDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaywgQXJyYXlCb3VuZHND
bGFtcGVyJiBhcnJheUJvdW5kc0NsYW1wZXIpCisgICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2lu
aywgYXJyYXlCb3VuZHNDbGFtcGVyKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0RVNTTC5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEVTU0wuaAppbmRleCA0ZmE3M2M4MDQ3YWI5ZTY5Nzgx
ZjMwNTRkMDE5MjM0NGIwYzhmNzViLi5lZmU3NTkxODc3NTQyNzFjY2UwZTI4MGI1ZTg5YzExOGNi
NjgxODVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0RVNTTC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9P
dXRwdXRFU1NMLmgKQEAgLTEyLDcgKzEyLDcgQEAKIGNsYXNzIFRPdXRwdXRFU1NMIDogcHVibGlj
IFRPdXRwdXRHTFNMQmFzZQogewogcHVibGljOgotICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jh
c2UmIG9ialNpbmspOworICAgIFRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssIEFy
cmF5Qm91bmRzQ2xhbXBlciYgYXJyYXlCb3VuZHNDbGFtcGVyKTsKIAogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRw
dXRHTFNMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRH
TFNMLmNwcAppbmRleCBkZDMxYjRiNThiYzAwNmRkODNjZWE1YWFhMDlkMzBkMzBmOWQ3N2U5Li4x
ZDc0MGM5ZGM2Nzk3NTMyNmNlNGQ2MGNmYzEyZmVlZmJlNmY3ODU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCkBAIC02LDgg
KzYsOCBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgogCi1UT3V0cHV0R0xT
TDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgb2JqU2luaykKLSAgICA6IFRPdXRwdXRHTFNM
QmFzZShvYmpTaW5rKQorVE91dHB1dEdMU0w6OlRPdXRwdXRHTFNMKFRJbmZvU2lua0Jhc2UmIG9i
alNpbmssIEFycmF5Qm91bmRzQ2xhbXBlciYgYXJyYXlCb3VuZHNDbGFtcGVyKQorICAgIDogVE91
dHB1dEdMU0xCYXNlKG9ialNpbmssIGFycmF5Qm91bmRzQ2xhbXBlcikKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmgKaW5kZXgg
MGZlMjM1NmViNzM0NzNjZDA2OTUzYzk5OTZlZDU0NDM5NzZiMjkyZi4uMjAyNzU2MmMyZDBiNTM0
YTkxZDAwNGZjNWUxN2M5MTk5ZDRhZTkyMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEdMU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5oCkBAIC03LDEyICs3LDEzIEBACiAjaWZuZGVm
IENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KICNkZWZpbmUgQ1JPU1NDT01QSUxFUkdM
U0xfT1VUUFVUR0xTTF9IXwogCisjaW5jbHVkZSAiY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVy
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCIKIAogY2xhc3MgVE91dHB1
dEdMU0wgOiBwdWJsaWMgVE91dHB1dEdMU0xCYXNlCiB7CiBwdWJsaWM6Ci0gICAgVE91dHB1dEdM
U0woVEluZm9TaW5rQmFzZSYgb2JqU2luayk7CisgICAgVE91dHB1dEdMU0woVEluZm9TaW5rQmFz
ZSYgb2JqU2luaywgQXJyYXlCb3VuZHNDbGFtcGVyJiBhcnJheUJvdW5kc0NsYW1wZXIpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNp
c2lvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
T3V0cHV0R0xTTEJhc2UuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L091dHB1dEdMU0xCYXNlLmNwcAppbmRleCA1NTJmYTUwNjZkZTJmZjI1OGZhYTNiZDRkYjYzMmNh
YzVhMjk3YTU1Li4xMDAwZDc5YmYyYTc4OTUxOTQwNTE1OTBiZThiZWY5MWQ2Y2JjOTUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJh
c2UuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRH
TFNMQmFzZS5jcHAKQEAgLTY2LDEwICs2NiwxMSBAQCBib29sIGlzU2luZ2xlU3RhdGVtZW50KFRJ
bnRlcm1Ob2RlKiBub2RlKSB7CiB9CiB9ICAvLyBuYW1lc3BhY2UKIAotVE91dHB1dEdMU0xCYXNl
OjpUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaykKK1RPdXRwdXRHTFNMQmFz
ZTo6VE91dHB1dEdMU0xCYXNlKFRJbmZvU2lua0Jhc2UmIG9ialNpbmssIEFycmF5Qm91bmRzQ2xh
bXBlciYgYXJyYXlCb3VuZHNDbGFtcGVyKQogICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0
cnVlLCB0cnVlKSwKICAgICAgIG1PYmpTaW5rKG9ialNpbmspLAotICAgICAgbURlY2xhcmluZ1Zh
cmlhYmxlcyhmYWxzZSkKKyAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2UpLAorICAgICAg
bUFycmF5Qm91bmRzQ2xhbXBlcihhcnJheUJvdW5kc0NsYW1wZXIpCiB7CiB9CiAKQEAgLTIzNSw5
ICsyMzYsMTkgQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5KiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdDoKLSAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgogICAgICAg
ICAgICAgd3JpdGVUcmlwbGV0KHZpc2l0LCBOVUxMLCAiWyIsICJdIik7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAgICAgaWYgKG1B
cnJheUJvdW5kc0NsYW1wZXIuR2V0U2hvdWxkQ2xhbXBBcnJheUFjY2VzcygpICYmIG1BcnJheUJv
dW5kc0NsYW1wZXIuRG9lc1BlcmZvcm1JbmRpcmVjdEFycmF5QWNjZXNzKG5vZGUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1BcnJheUJvdW5kc0NsYW1wZXIuU2V0QXJyYXlCb3Vu
ZHNDbGFtcERlZmluaXRpb25OZWVkZWQoKTsKKyAgICAgICAgICAgICAgICBtQXJyYXlCb3VuZHND
bGFtcGVyLk91dHB1dENsYW1wZWRBcnJheUFjY2Vzcyh2aXNpdCwgbm9kZSwgb3V0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB3cml0ZVRyaXBsZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgogICAg
ICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCmlu
ZGV4IGVmZDBiNWZjMmQ4ZmI3NWY4NTE5OGNhNmJkZDYzMjE3NmQ1NDI0MjQuLjc3OGI0ZDJjYjEy
OWY0MGY4NDYxMzFjNzU4MjdkMTBlMjNhYzhjOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5oCkBAIC05LDYgKzksNyBA
QAogCiAjaW5jbHVkZSA8c2V0PgogCisjaW5jbHVkZSAiY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFt
cGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL2ludGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgi
CkBAIC0xNiw3ICsxNyw3IEBACiBjbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlcgogewogcHVibGljOgotICAgIFRPdXRwdXRHTFNMQmFzZShUSW5mb1NpbmtCYXNl
JiBvYmpTaW5rKTsKKyAgICBUT3V0cHV0R0xTTEJhc2UoVEluZm9TaW5rQmFzZSYgb2JqU2luaywg
QXJyYXlCb3VuZHNDbGFtcGVyJiBhcnJheUJvdW5kc0NsYW1wZXIpOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgVEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsgcmV0dXJuIG1PYmpTaW5rOyB9CkBAIC00Nyw2
ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJl
ZFN0cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7CiAKKyAgICBB
cnJheUJvdW5kc0NsYW1wZXImIG1BcnJheUJvdW5kc0NsYW1wZXI7CiAgICAgRm9yTG9vcFVucm9s
bCBtTG9vcFVucm9sbDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9TaEhhbmRsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NoSGFuZGxlLmgKaW5kZXggMjY1MjhiOGRiY2JhMGIwNjRjMTg4YTdlOWEzNTk2OThj
N2U2NThiZC4uMDI1NDk0YzFkNzEwYTgyODIzMWIwMTNhZTU2Mjk3Mjk0OWJmOGVmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKQEAgLTE2
LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCisjaW5jbHVk
ZSAiY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhh
dmlvci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCkBAIC04Nyw3ICs4OCw3IEBA
IHByb3RlY3RlZDoKICAgICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIg
b25lcy4KICAgICB2b2lkIG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsK
ICAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCi0gICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUo
VEludGVybU5vZGUqIHJvb3QsIGludCBjb21waWxlT3B0aW9ucykgPSAwOwogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIHBhc3NlcyB0aGUgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRv
IHByZXZlbnQgdGltaW5nIGF0dGFja3MuCiAgICAgYm9vbCBlbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b25zKFRJbnRlcm1Ob2RlKiByb290LCBib29sIG91dHB1dEdyYXBoKTsKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ugc2FtcGxlcnMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcApp
bmRleCBlM2EyYzJhODAyNDBhOTUzZDk3NmZmOGY3MTlhNjk3MDJmN2FiMGQxLi5jNjY0NTBmMWEx
ZTQxZDFjZjkwOTVlZmJiMDc0ZDNhYjlkOTE0OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKQEAgLTEyLDcg
KzEyLDcgQEAgVHJhbnNsYXRvckVTU0w6OlRyYW5zbGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYykKICAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7CiB9CiAK
LXZvaWQgVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewordm9p
ZCBUcmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290LCBpbnQgY29tcGls
ZU9wdGlvbnMpIHsKICAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7
CiAKICAgICAvLyBXcml0ZSBidWlsdC1pbiBleHRlbnNpb24gYmVoYXZpb3JzLgpAQCAtMjIsOSAr
MjIsMjMgQEAgdm9pZCBUcmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290
KSB7CiAgICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0
aW9uRGVmaW5pdGlvbigKICAgICAgICAgc2luaywgZ2V0U2hhZGVyVHlwZSgpID09IFNIX0ZSQUdN
RU5UX1NIQURFUik7CiAKKyAgICBtQXJyYXlCb3VuZHNDbGFtcGVyLlNldFNob3VsZENsYW1wQXJy
YXlBY2Nlc3MoY29tcGlsZU9wdGlvbnMgJiBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMp
OworICAgIGlmIChtQXJyYXlCb3VuZHNDbGFtcGVyLkdldFNob3VsZENsYW1wQXJyYXlBY2Nlc3Mo
KSkKKyAgICB7CisgICAgICAgIC8vIFdyaXRlIGFycmF5IGJvdW5kcyBjbGFtcGluZyBkZWNsYXJh
dGlvbiBpZiBuZWNlc3NhcnkuCisgICAgICAgIG1BcnJheUJvdW5kc0NsYW1wZXIuT3V0cHV0Q2xh
bXBpbmdGdW5jdGlvbkRlY2xhcmF0aW9uKHNpbmspOworICAgIH0KKwogICAgIC8vIFdyaXRlIHRy
YW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luayk7CisgICAg
VE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBtQXJyYXlCb3VuZHNDbGFtcGVyKTsKICAgICBy
b290LT50cmF2ZXJzZSgmb3V0cHV0RVNTTCk7CisKKyAgICAvLyBXcml0ZSBhcnJheSBib3VuZHMg
Y2xhbXBpbmcgZGVmaW5pdGlvbiBpZiBuZWNlc3NhcnkuCisgICAgaWYgKG1BcnJheUJvdW5kc0Ns
YW1wZXIuR2V0U2hvdWxkQ2xhbXBBcnJheUFjY2VzcygpICYmIG1BcnJheUJvdW5kc0NsYW1wZXIu
R2V0QXJyYXlCb3VuZHNDbGFtcERlZmluaXRpb25OZWVkZWQoKSkKKyAgICB7CisgICAgICAgIG1B
cnJheUJvdW5kc0NsYW1wZXIuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7
CisgICAgfQorICAgIG1BcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW5VcCgpOwogfQogCiB2b2lkIFRy
YW5zbGF0b3JFU1NMOjp3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaAppbmRleCBh
MTE5NmJkMDAxM2FjYWM0NGQ3OGQ1ODU4ZmU1ODE3YTZlMjdiNWJhLi42YmE1OTMxYzIzNmU5MGI5
NGVhM2E1MGJkZTljOGNlMjg5NWU0NzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckVTU0wuaApAQCAtNyw2ICs3LDcgQEAKICNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUkVTU0xfSF8KICNkZWZpbmUgQ09NUElMRVJfVFJBTlNM
QVRPUkVTU0xfSF8KIAorI2luY2x1ZGUgImNvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAKIGNsYXNzIFRyYW5zbGF0b3JFU1NMIDog
cHVibGljIFRDb21waWxlciB7CkBAIC0xNCwxMCArMTUsMTIgQEAgcHVibGljOgogICAgIFRyYW5z
bGF0b3JFU1NMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiAKIHByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290LCBpbnQgY29tcGlsZU9w
dGlvbnMpOwogCiBwcml2YXRlOgogICAgIHZvaWQgd3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOwor
CisgICAgQXJyYXlCb3VuZHNDbGFtcGVyIG1BcnJheUJvdW5kc0NsYW1wZXI7CiB9OwogCiAjZW5k
aWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JFU1NMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcAppbmRleCBiYjA3
YTFlYjRlOGZmZjY2NjFmOTI0ZmRmNzA4MzljZmUwOWMzMDgwLi5kMGU1MGVjZjYzNjFiYjRiMWQ4
ZGI1NjM0NjEwNzlhNmI0NGMyNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAg
VHJhbnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYykKICAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7CiB9CiAKLXZvaWQgVHJh
bnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewordm9pZCBUcmFuc2xh
dG9yR0xTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290LCBpbnQgY29tcGlsZU9wdGlvbnMp
IHsKICAgICBUSW5mb1NpbmtCYXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CiAKICAgICAv
LyBXcml0ZSBHTFNMIHZlcnNpb24uCkBAIC0zNSw3ICszNSwyMSBAQCB2b2lkIFRyYW5zbGF0b3JH
TFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpIHsKICAgICBnZXRCdWlsdEluRnVuY3Rp
b25FbXVsYXRvcigpLk91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAogICAgICAgICBz
aW5rLCBmYWxzZSk7CiAKKyAgICBtQXJyYXlCb3VuZHNDbGFtcGVyLlNldFNob3VsZENsYW1wQXJy
YXlBY2Nlc3MoY29tcGlsZU9wdGlvbnMgJiBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMp
OworICAgIGlmIChtQXJyYXlCb3VuZHNDbGFtcGVyLkdldFNob3VsZENsYW1wQXJyYXlBY2Nlc3Mo
KSkKKyAgICB7CisgICAgICAgIC8vIFdyaXRlIGFycmF5IGJvdW5kcyBjbGFtcGluZyBkZWNsYXJh
dGlvbiBpZiBuZWNlc3NhcnkuCisgICAgICAgIG1BcnJheUJvdW5kc0NsYW1wZXIuT3V0cHV0Q2xh
bXBpbmdGdW5jdGlvbkRlY2xhcmF0aW9uKHNpbmspOworICAgIH0KKyAgICAKICAgICAvLyBXcml0
ZSB0cmFuc2xhdGVkIHNoYWRlci4KLSAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmspOwor
ICAgIFRPdXRwdXRHTFNMIG91dHB1dEdMU0woc2luaywgbUFycmF5Qm91bmRzQ2xhbXBlcik7CiAg
ICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOworCisgICAgLy8gV3JpdGUgYXJyYXkgYm91
bmRzIGNsYW1waW5nIGRlZmluaXRpb24gaWYgbmVjZXNzYXJ5LgorICAgIGlmIChtQXJyYXlCb3Vu
ZHNDbGFtcGVyLkdldFNob3VsZENsYW1wQXJyYXlBY2Nlc3MoKSAmJiBtQXJyYXlCb3VuZHNDbGFt
cGVyLkdldEFycmF5Qm91bmRzQ2xhbXBEZWZpbml0aW9uTmVlZGVkKCkpCisgICAgeworICAgICAg
ICBtQXJyYXlCb3VuZHNDbGFtcGVyLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNp
bmspOworICAgIH0KKyAgICBtQXJyYXlCb3VuZHNDbGFtcGVyLkNsZWFuVXAoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xT
TC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNM
LmgKaW5kZXggYzJjZTA2ZDE5MmYwZmM2MWRhYmQ1MzZkMjA0OWZmYjllZGVmM2E2My4uZGM3ZDY4
OThhNjcwNTc1YzBiMDA4YjNkNDQ3OTUwOTVjYTdlMDExNyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgKQEAgLTcsNiAr
Nyw3IEBACiAjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCiAjZGVmaW5lIENPTVBJ
TEVSX1RSQU5TTEFUT1JHTFNMX0hfCiAKKyNpbmNsdWRlICJjb21waWxlci9BcnJheUJvdW5kc0Ns
YW1wZXIuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogCiBjbGFzcyBUcmFuc2xh
dG9yR0xTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewpAQCAtMTQsNyArMTUsOSBAQCBwdWJsaWM6CiAg
ICAgVHJhbnNsYXRvckdMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsK
IAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJv
b3QpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QsIGludCBj
b21waWxlT3B0aW9ucyk7CisKKyAgICBBcnJheUJvdW5kc0NsYW1wZXIgbUFycmF5Qm91bmRzQ2xh
bXBlcjsKIH07CiAKICNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkdMU0xfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1PdXQuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKaW5k
ZXggZTgzYzdiNzJmMmEzMDg2MTI2MGJlYWZlMWRjNTA0ZGRiNGRhMDI4OS4uZjQ4YTA0OWM2MzNk
ZWVkNmQ4MTgyODcyMzQzYmY3NDk4ZDVkNmFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgVFN0
cmluZyBUVHlwZTo6Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdAogICAgIGlmIChxdWFsaWZpZXIg
IT0gRXZxVGVtcG9yYXJ5ICYmIHF1YWxpZmllciAhPSBFdnFHbG9iYWwpCiAgICAgICAgIHN0cmVh
bSA8PCBnZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgZ2V0UHJlY2lzaW9uU3RyaW5nKCkg
PDwgIiAiOwogICAgIGlmIChhcnJheSkKLSAgICAgICAgc3RyZWFtIDw8ICJhcnJheSBvZiAiOwor
ICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIgPDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsK
ICAgICBpZiAobWF0cml4KQogICAgICAgICBzdHJlYW0gPDwgc2l6ZSA8PCAiWCIgPDwgc2l6ZSA8
PCAiIG1hdHJpeCBvZiAiOwogICAgIGVsc2UgaWYgKHNpemUgPiAxKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCmluZGV4
IDIyZmZhYzAwNDkwNzEwOWU2Yzg1MjY3NDExYWYxZjk5YmJmYmQwNDYuLjIxYTk3OTY0M2VhNjhj
NTEzODdmNjlmZGZhMjNhNWMyYTNlYWJmN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKQEAgLTE3Myw2ICsxNzMs
MTIgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBj
aGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZGUKIAogICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNo
YWRlclNvdXJjZVN0cmluZ3NbXSA9IHsgc2hhZGVyU291cmNlIH07CiAKKyNpZiAhUExBVEZPUk0o
Q0hST01JVU0pCisgICAgLy8gQ2hyb21pdW0gZG9lcyBub3QgdXNlIHRoZSBBTkdMRSBidW5kbGVk
IGluIFdlYktpdCBzb3VyY2UsIGFuZCB0aHVzCisgICAgLy8gZG9lcyBub3QgeWV0IGhhdmUgdGhl
IHN5bWJvbCBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMuCisgICAgZXh0cmFDb21waWxl
T3B0aW9ucyB8PSBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFM7CisjZW5kaWYKKwogICAg
IGJvb2wgdmFsaWRhdGVTdWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCBzaGFkZXJTb3VyY2VT
dHJpbmdzLCAxLCBTSF9PQkpFQ1RfQ09ERSB8IFNIX0FUVFJJQlVURVNfVU5JRk9STVMgfCBleHRy
YUNvbXBpbGVPcHRpb25zKTsKICAgICBpZiAoIXZhbGlkYXRlU3VjY2VzcykgewogICAgICAgICBp
bnQgbG9nU2l6ZSA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfSU5GT19M
T0dfTEVOR1RIKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBmODY1MDAyNDU5MDg5ODBhMTJhMWFmNGYxNDQyMzg3YTBlZWQx
ZGQzLi4xNmJmZDgxMDRiZGNlODFiZWQyYzdkZjQ3MzViZTY4MWIwYjNhNjUzIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTItMTAtMTYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgor
CisgICAgICAgIFNoYWRlciB0cmFuc2xhdG9yIG5lZWRzIG9wdGlvbiB0byBjbGFtcCB1bmlmb3Jt
IGFycmF5IGFjY2Vzc2VzIGluIHZlcnRleCBzaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODk3NworICAgICAgICBodHRwczovL2NvZGUuZ29v
Z2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTQ5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9h
cnJheS1ib3VuZHMtY2xhbXBpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbDogQWRkZWQuCisKIDIwMTIt
MTAtMTYgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU29t
ZSB0ZXN0cyBuZWVkIHJlYmFzZWxpbmUgYWZ0ZXIgcjEzMTQ5NwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1waW5nLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LWJvdW5kcy1jbGFtcGluZy1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjljOGQ4ZjI3MzU0MGJmMTI3M2VkMzNiZjE3ZDgzMDBl
NzM2Nzg4NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2FycmF5LWJvdW5kcy1jbGFtcGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorIENo
ZWNrcyB0aGF0IGFycmF5IGFjY2VzcyBpbiBhIHNoYWRlciBjYW4gbm90IHJlYWQgb3V0IG9mIGJv
dW5kcworCitQQVNTIFRvcCBsZWZ0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggMAorUEFT
UyBJbnNpZGUgdG9wIHJpZ2h0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggMAorUEFTUyBJ
bnNpZGUgYm90dG9tIGxlZnQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwCitQQVNTIEJv
dHRvbSByaWdodCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDcKK1BBU1MgT3V0c2lkZSBi
b3R0b20gbGVmdCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDcKK1BBU1MgT3V0c2lkZSB0
b3AgcmlnaHQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCA3CitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1waW5nLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hOTBkZWU3NTRkNWE2ZjcyMjIzNmU5ODc0NmNmZjAwNGE5ZTM3YTg1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1w
aW5nLmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzND
Ly9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9U
Ui9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5XZWJHTCBhcnJheSBi
b3VuZHMgY2xhbXBpbmcgY29uZm9ybWFuY2UgdGVzdC48L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBzdHlsZT0id2lkdGg6IDQw
cHg7IGhlaWdodDogNDBweDsiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4
LXNoYWRlci94LXZlcnRleCI+CisjaWZkZWYgR0xfRVMKK3ByZWNpc2lvbiBoaWdocCBmbG9hdDsK
KyNlbmRpZgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOworYXR0cmlidXRlIGZsb2F0IGluZGV4
OwordW5pZm9ybSBmbG9hdCBzaGFkZXNbOF07Cit2YXJ5aW5nIHZlYzQgdGV4Q29sb3I7Cit2b2lk
IG1haW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOworICAgIHRleENvbG9yID0g
dmVjNChzaGFkZXNbaW50KGluZGV4KV0sIDAsIDAsIDEuMCk7Cit9Cis8L3NjcmlwdD4KKworPHNj
cmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+CisjaWZkZWYgR0xf
RVMKK3ByZWNpc2lvbiBoaWdocCBmbG9hdDsKKyNlbmRpZgordmFyeWluZyB2ZWM0IHRleENvbG9y
Owordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSB0ZXhDb2xvcjsKK30KKzwvc2Ny
aXB0PgorCis8c2NyaXB0PgorZnVuY3Rpb24gaW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5pbml0
Tm9uS2hyb25vc0ZyYW1ld29yaykKKyAgICAgICAgd2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3
b3JrKGZhbHNlKTsKKworICAgIGRlYnVnKCJDaGVja3MgdGhhdCBhcnJheSBhY2Nlc3MgaW4gYSBz
aGFkZXIgY2FuIG5vdCByZWFkIG91dCBvZiBib3VuZHMiKTsKKyAgICBkZWJ1ZygiIik7CisKKyAg
ICBnbCA9IGluaXRXZWJHTCgiZXhhbXBsZSIsICJ2c2hhZGVyIiwgImZzaGFkZXIiLCBbICJ2UG9z
aXRpb24iLCAiaW5kZXgiIF0sCisgICAgICAgICAgICAgICAgICAgWyAxLCAxLCAxLCAxIF0sIDEp
OworCisgICAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTsKKyAgICBnbC5kaXNhYmxlKGdsLkJM
RU5EKTsKKworICAgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBn
bC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgICBnbC5idWZm
ZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJy
YXkoWyAtMSwxLDAsIDEsMSwwLCAtMSwtMSwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0xLC0xLDAsIDEsMSwwLCAxLC0xLDAgXSksCisgICAgICAgICAgICAgICAgICBn
bC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAg
Z2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisg
ICAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZm
ZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wu
QVJSQVlfQlVGRkVSLAorICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IHRoYXQg
ZXhlcmNpc2VzIHdlbGwgb3V0c2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgIC8vIGxpbWl0cyBv
biBlYWNoIHNpZGUsIG5lYXIgdGhlIGxpbWl0cywgYW5kIHRoZQorICAgICAgICAgICAgICAgICAg
Ly8gZXhhY3QgbGltaXRzLgorICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgY2xh
bXBlZCB0byBbMCwgMCwgMCwgNywgNywgN10KKyAgICAgICAgICAgICAgICAgIG5ldyBGbG9hdDMy
QXJyYXkoWyAtTnVtYmVyLk1BWF9WQUxVRSwgLTEsIDAsIDcsIDgsIE51bWJlci5NQVhfVkFMVUVd
KSwKKyAgICAgICAgICAgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDEsIGdsLkZM
T0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICB2YXIgbG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9u
KGdsLnByb2dyYW0sICJzaGFkZXMiKTsKKyAgICBnbC51bmlmb3JtMWZ2KGxvYywgWzAuMjUsIDAu
NSwgMCwgMCwgMCwgMCwgMC43NSwgMV0pOworCisgICAgY2hlY2tSZWRWYWx1ZSgwLCAzOCwgNjQs
ICJUb3AgbGVmdCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDAiKTsKKyAgICBjaGVja1Jl
ZFZhbHVlKDM3LCAzOCwgNjQsICJJbnNpZGUgdG9wIHJpZ2h0IGNvcm5lciBzaG91bGQgY2xhbXAg
dG8gaW5kZXggMCIpOworICAgIGNoZWNrUmVkVmFsdWUoMCwgMSwgNjQsICJJbnNpZGUgYm90dG9t
IGxlZnQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwIik7CisKKyAgICBjaGVja1JlZFZh
bHVlKDM4LCAwLCAyNTUsICJCb3R0b20gcmlnaHQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRl
eCA3Iik7CisgICAgY2hlY2tSZWRWYWx1ZSgzLCAxLCAyNTUsICJPdXRzaWRlIGJvdHRvbSBsZWZ0
IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggNyIpOworICAgIGNoZWNrUmVkVmFsdWUoMzgs
IDM3LCAyNTUsICJPdXRzaWRlIHRvcCByaWdodCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4
IDciKTsKKworICAgIGZ1bmN0aW9uIGNoZWNrUmVkVmFsdWUoeCwgeSwgdmFsdWUsIG1zZykgewor
ICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJ
VCk7CisgICAgICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKKyAgICAgICAg
Z2wuZmx1c2goKTsKKyAgICAgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDQpOworICAgICAg
ICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1
Zik7CisgICAgICAgIGlmIChidWZbMF0gIT0gdmFsdWUgfHwgYnVmWzFdICE9IDAgfHwgYnVmWzJd
ICE9IDAgfHwgYnVmWzNdICE9IDI1NSkgeworICAgICAgICAgICAgZGVidWcoJ2V4cGVjdGVkOiBy
Z2IoJyArIHZhbHVlICsgJywgMCwgMCwgMjU1KSB3YXMgcmdiKCcgKyBidWZbMF0gKyAnLCAnICsg
YnVmWzFdICsgJywgJyArIGJ1ZlsyXSArICcsICcgKyBidWZbM10gKyAnKScpOworICAgICAgICAg
ICAgdGVzdEZhaWxlZChtc2cpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHRlc3RQYXNzZWQobXNnKTsKKyAgICB9Cit9CisKK2luaXQoKTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169476</attachid>
            <date>2012-10-18 14:30:02 -0700</date>
            <delta_ts>2012-10-19 12:21:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98977-20121019082846.patch</filename>
            <type>text/plain</type>
            <size>31291</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGJiMTUyMTJkZWJkZjkwM2ZhMTYxODg4NGU3ZTkyNDBhYzVhNTkzOC4uYTJlMDM0NmQwMDk2
MTRiMTc3YjY4YjFhYzMzZDMxYWE5ZGZiYzVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTEwLTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRpb24gdG8gY2xhbXAg
dW5pZm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAgICAgaHR0cHM6Ly9j
b2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD00OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIGRvZXMgbm90
IGFsbG93IEdMU0wgY29kZSB0byBpbmRleCBhIHVuaWZvcm0gYXJyYXkgb3V0c2lkZSBpdHMgYm91
bmRzLiBBZGQgYQorICAgICAgICBmbGFnIHRvIHRoZSBBTkdMRSBjb21waWxlciB0byBpbnNlcnQg
Y2xhbXAgc3RhdGVtZW50cyBhcm91bmQgc3VjaCBpbmRleGluZy4KKyAgICAgICAgU2luY2UgaXQg
aXMgcG9zc2libGUgdG8gYWNjZXNzIHZlYzIvMy80IGFuZCBtYXQyLzMvNCBjb21wb25lbnRzIGJ5
IGFycmF5IGluZGV4aW5nLAorICAgICAgICB0aGV5IG11c3QgYmUgc2ltaWxhcmx5IGNsYW1wZWQu
CisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgaXQgaXMgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0
byBhbHdheXMgZGV0ZXJtaW5lIHRoYXQgdGhlIGluZGV4aW5nIGlzCisgICAgICAgIG9wZXJhdGlu
ZyBvbiBhIHVuaWZvcm0gdmFyaWFibGUuIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGhhdmUgInVu
aWZvcm0gbWF0NCBhIi4gQU5HTEUKKyAgICAgICAgaXMgY3VycmVudGx5IG5vdCBhYmxlIHRvIHRl
bGwgdXMgdGhhdCB0aGUgcnZhbHVlIG9mICJhWzBdIiBpcyBhIHVuaWZvcm0sIGp1c3QgdGhhdAor
ICAgICAgICBpdCBoYXMgYSBzaXplIG9mIDQuIFRoZXJlZm9yZSwgdGhlIGNsYW1waW5nIGlzIGRv
bmUgb24gYWxsIGluZGlyZWN0IGFycmF5IGluZGV4aW5nLgorCisgICAgICAgIFRoaXMgd2lsbCBo
YXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBGdXR1cmUgZW5oYW5jZW1lbnRzIG1heSBiZSBhYmxl
IHRvIGRldGVybWluZQorICAgICAgICBjYXNlcyB3aGVyZSB0aGUgY2xhbXBpbmcgaXMgbm90IG5l
Y2Vzc2FyeS4gQ3VycmVudGx5IG9ubHkgZGlyZWN0IGluZGV4aW5nIGlzIHNraXBwZWQKKyAgICAg
ICAgKGkuZS4gbG9va2luZyB1cCBhIHZhbHVlIHVzaW5nIGEgY29uc3RhbnQgaW5kZXgpLgorCisg
ICAgICAgIFRoZSBjbGFtcCBpbnNlcnRpb24gaXMgb25seSBwZXJmb3JtZWQgb24gdGhlIEdMU0wg
b3V0cHV0LiBEaXJlY3QzRCBhbHJlYWR5IGd1YXJhbnRlZXMKKyAgICAgICAgdGhhdCBvdXQtb2Yt
Ym91bmRzIHVuaWZvcm0gYXJyYXkgYWNjZXNzIHJldHVybnMgYSB6ZXJvIHZhbHVlLgorCisgICAg
ICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6IE5ldyBjb21waWxl
ciBvcHRpb24uCisgICAgICAgICogc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5jcHA6
IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpBcnJheUJvdW5kc0NsYW1wZXIp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVm
aW5pdGlvbik6IEluamVjdHMgYSBjbGFtcGluZyBmdW5jdGlvbiBmb3IgaW50ZWdlcnMgaW50byBH
TFNMIHNvdXJjZS4KKyAgICAgICAgKEFycmF5Qm91bmRzQ2xhbXBlcjo6TWFya0luZGlyZWN0QXJy
YXlCb3VuZHNGb3JDbGFtcGluZyk6IEV4YW1pbmVzIHRoZSBBU1QgbG9va2luZyBmb3Igbm9uLWRp
cmVjdCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQXJyYXlCb3VuZHND
bGFtcGVyLmg6IEFkZGVkLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyKToKKyAgICAgICAg
KEFycmF5Qm91bmRzQ2xhbXBlcjo6R2V0QXJyYXlCb3VuZHNDbGFtcERlZmluaXRpb25OZWVkZWQp
OgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpTZXRBcnJheUJvdW5kc0NsYW1wRGVmaW5p
dGlvbk5lZWRlZCk6IE1hcmtzIHRoZSBvYmplY3QgYXMgbmVlZGluZyB0byBvdXRwdXQgdGhlIGNs
YW1waW5nIGZ1bmN0aW9uLgorICAgICAgICAoQXJyYXlCb3VuZHNDbGFtcGVyOjpDbGVhbnVwKTog
UmVzZXRzIHRoZSBzdGF0ZSBzbyB0aGF0IHN1YnNlcXVlbnQgcnVucyBzdGFydCBmcmVzaC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvQ29tcGlsZXIuY3BwOgorICAgICAgICAoVENvbXBpbGVyOjpj
b21waWxlKTogUnVuIHRoZSBjbGFtcGluZyBjb2RlIGlmIHRoZSBjb21waWxlIG9wdGlvbiB3YXMg
c2V0LgorICAgICAgICAoVENvbXBpbGVyOjpjbGVhclJlc3VsdHMpOgorICAgICAgICAoVENvbXBp
bGVyOjpnZXRBcnJheUJvdW5kc0NsYW1wZXIpOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRw
dXRHTFNMQmFzZS5jcHA6CisgICAgICAgIChUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KTog
SWYgdGhlIGV4cHJlc3Npb24gaGFzIGJlZW4gZmxhZ2dlZCwgaW5zZXJ0IGFuIGFwcHJvcHJpYXRl
ICJjbGFtcCIgc3RhdGVtZW50LgorICAgICAgICAqIHNyYy9jb21waWxlci9TaEhhbmRsZS5oOgor
ICAgICAgICAoVENvbXBpbGVyKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRvckVT
U0wuY3BwOgorICAgICAgICAoVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0ZSk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcDoKKyAgICAgICAgKFRyYW5zbGF0b3JHTFNM
Ojp0cmFuc2xhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwOgorICAg
ICAgICAoVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKTogQWRkIGFycmF5IHNpemUgdG8gaW50ZXJt
ZWRpYXRlIHRyZWUgb3V0cHV0LgorICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUu
aDoKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnNldEFkZEluZGV4Q2xhbXApOiBOZXcgZmxhZyBm
b3IgaW5kaWNhdGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG5lZWRzIGNsYW1waW5nLgorICAgICAg
ICAoVEludGVybUJpbmFyeTo6Z2V0QWRkSW5kZXhDbGFtcCk6CisgICAgICAgIChUSW50ZXJtQmlu
YXJ5KToKKwogMjAxMi0wOS0xMyAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMjI1NTcyMD4gRml4IHRoZSBidWlsZCB3aXRoIG5ld2VyIENs
YW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOTYyZGIxNWY1MzhiMWI1NjA1N2FmYjVmZTAxNjRmOGI2ZGNhNjZj
Yy4uYjNlM2NkOWFmNDU1OWVlODEyNDZkYzUzNGQ0ZmIwNmNkZDYxYzJkMSAxMDA3NTUKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNv
bT4KKworICAgICAgICBTaGFkZXIgdHJhbnNsYXRvciBuZWVkcyBvcHRpb24gdG8gY2xhbXAgdW5p
Zm9ybSBhcnJheSBhY2Nlc3NlcyBpbiB2ZXJ0ZXggc2hhZGVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5NzcKKyAgICAgICAgaHR0cHM6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD00OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIGZvcmJpZHMgb3V0
LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gc2hhZGVycy4gUmV3cml0ZSBhbnkgc2hhZGVycyB0
bworICAgICAgICBlbnN1cmUgdGhhdCBub24tZGlyZWN0IGFycmF5IGluZGV4aW5nIGlzIGNsYW1w
ZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkuCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52
YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1waW5nLmh0bWwKKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xF
V2ViS2l0QnJpZGdlOjpjb21waWxlU2hhZGVyU291cmNlKTogUGFzcyBuZXcgY29tcGlsZXIgb3B0
aW9uIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUworCiAyMDEyLTEwLTE4ICBZYWVsIEFo
YXJvbiAgPHlhZWwuYWhhcm9uQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBHcmFwaGljc0Nv
bnRleHQzRDo6bV9yZW5kZXJTdHlsZSBpcyBub3QgaW5pdGlhbGl6ZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDhmMmJlNjBmNTQ4YTZmNDg5OTkzYmVmNDY5YWU2NGRmY2FkNTYzNjIuLjMyMDdlY2E4YTQ2
ZWQ2NGFjMjgzOWZlZWI1MzFlMmMyNmMyNmE1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOSw2ICs5
LDggQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTMxMkJEQjBDMTVGRUNB
QzkwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0
ICovOyB9OwogCQkzMTJCREIwRTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0IGluIENvcHlG
aWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwQTE1RkVDQTNB
MDA5N0VCQzcgLyogQU5HTEUudHh0ICovOyB9OworCQkzMTU4RUEwRTE2MzA5NjhEMDA2QkU1RUUg
LyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxNThFQTBDMTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0Ns
YW1wZXIuY3BwICovOyB9OworCQkzMTU4RUEwRjE2MzA5NjhEMDA2QkU1RUUgLyogQXJyYXlCb3Vu
ZHNDbGFtcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTU4RUEwRDE2MzA5NjhEMDA2QkU1RUUgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmggKi87IH07
CiAJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTk1MUMwMjE0QjdBQUIzMDA2
MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovOyB9OwogCQk0OTk1MUMwOTE0QjdBQUQ4MDA2MEU5
NkUgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLzsgfTsKIAkJNDk5NTFDMEExNEI3QUFEODAwNjBFOTZF
IC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OTk1MUMwNjE0QjdBQUQ4MDA2MEU5NkUgLyogQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCAqLzsgfTsKQEAgLTEzNiw2ICsxMzgsOCBAQAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTMxMkJEQjA5MTVGRUM5MUUwMDk3RUJDNyAvKiBB
TkdMRS5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gQU5HTEUucGxpc3Q7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMkJEQjBBMTVGRUNBM0EwMDk3RUJDNyAv
KiBBTkdMRS50eHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQU5HTEUudHh0OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTU4RUEwQzE2MzA5NjhEMDA2QkU1RUUgLyogQXJyYXlCb3Vu
ZHNDbGFtcGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5
Qm91bmRzQ2xhbXBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNThFQTBE
MTYzMDk2OEQwMDZCRTVFRSAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlCb3VuZHNDbGFtcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk5NTFDMDUxNEI3QUFENzAwNjBFOTZFIC8qIEJ1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDk5NTFDMDYxNEI3QUFEODAwNjBFOTZFIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDQsNiArNTQ4LDggQEAKIAkJ
RkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTU4RUEwQzE2MzA5NjhEMDA2QkU1RUUgLyog
QXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLywKKwkJCQkzMTU4RUEwRDE2MzA5NjhEMDA2QkU1RUUg
LyogQXJyYXlCb3VuZHNDbGFtcGVyLmggKi8sCiAJCQkJRkIzOUQyMjExMjAwRjM1QTAwMDg4RTY5
IC8qIEJhc2VUeXBlcy5oICovLAogCQkJCTQ5OTUxQzA1MTRCN0FBRDcwMDYwRTk2RSAvKiBCdWls
dEluRnVuY3Rpb25FbXVsYXRvci5jcHAgKi8sCiAJCQkJNDk5NTFDMDYxNEI3QUFEODAwNjBFOTZF
IC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggKi8sCkBAIC03MTIsNiArNzE4LDcgQEAKIAkJ
CQlBMjY1NjgzRTE1OUMyM0UxMDAzOTg1MzkgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMjY1Njg0MTE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NTY4NDMxNTlDMjNFMTAw
Mzk4NTM5IC8qIFJlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTU4RUEwRjE2MzA5NjhEMDA2QkU1RUUgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTgyOSw2ICs4MzYsNyBAQAogCQkJCUEyNjU2ODNGMTU5QzIzRTEwMDM5ODUz
OSAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY1
Njg0MDE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMjY1Njg0MjE1OUMyM0UxMDAzOTg1MzkgLyogUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE1OEVBMEUxNjMwOTY4
RDAwNkJFNUVFIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9UYXJnZXQucHJpCmluZGV4IDRlOTMwM2FiNzZhM2IwZDdlOTAzOTA1MTY2MDMx
ZjZmM2QyYzhhODkuLmVhYTkzNmQ4OGNmYWYwNTVmZDk1ZjZiNTAwODZjZTNlNTgxNDcwY2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvVGFyZ2V0LnByaQpAQCAtMTcsNiArMTcsNyBAQCBJTkNMVURFUEFU
SCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL2luY2x1ZGUKIAogSEVBREVSUyArPSBcCisgICAgc3Jj
L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIFwKICAgICBzcmMvY29tcGlsZXIvQmFzZVR5
cGVzLmggXAogICAgIHNyYy9jb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIFwKICAg
ICBzcmMvY29tcGlsZXIvQ29tbW9uLmggXApAQCAtOTAsNiArOTEsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBzcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAogCiBTT1VSQ0VTICs9IFwKKyAgICBzcmMv
Y29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBcCiAgICAgc3JjL2NvbXBpbGVyL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBcCiAgICAgc3JjL2NvbXBpbGVyL0NvZGVHZW5HTFNMLmNw
cCBcCiAgICAgc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAppbmRleCA5YTRhMzZk
YmYzMGIxZDExNWZjM2VmMmRhM2NjZWQzOGFmZjdjYmZiLi5kODI5MzFlYTFiYjU3OWU4OGEwYTgy
ZmIxM2E1MWQxZDhkMDYwM2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9p
bmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKQEAgLTE0Miw3ICsxNDIsMTMgQEAgdHlwZWRl
ZiBlbnVtIHsKICAgLy8gLSBUaGUgc2hhZGVyIHNwZWMgaXMgU0hfV0VCR0xfU1BFQy4KICAgLy8g
LSBUaGUgY29tcGlsZSBvcHRpb25zIGNvbnRhaW4gdGhlIFNIX1RJTUlOR19SRVNUUklDVElPTlMg
ZmxhZy4KICAgLy8gLSBUaGUgc2hhZGVyIHR5cGUgaXMgU0hfRlJBR01FTlRfU0hBREVSLgotICBT
SF9ERVBFTkRFTkNZX0dSQVBIID0gMHgwNDAwCisgIFNIX0RFUEVOREVOQ1lfR1JBUEggPSAweDA0
MDAsCisKKyAgLy8gVGhpcyBmbGFnIGVuc3VyZXMgYWxsIGluZGlyZWN0IChleHByZXNzaW9uLWJh
c2VkKSBhcnJheSBpbmRleGluZworICAvLyBpcyBjbGFtcGVkIHRvIHRoZSBib3VuZHMgb2YgdGhl
IGFycmF5LiBUaGlzIGVuc3VyZXMsIGZvciBleGFtcGxlLAorICAvLyB0aGF0IHlvdSBjYW5ub3Qg
cmVhZCBvZmYgdGhlIGVuZCBvZiBhIHVuaWZvcm0sIHdoZXRoZXIgYW4gYXJyYXkKKyAgLy8gdmVj
MjM0LCBvciBtYXQyMzQgdHlwZS4KKyAgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTID0g
MHgwODAwCiB9IFNoQ29tcGlsZU9wdGlvbnM7CiAKIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjllNDNmMmI4MGE4ZThmYzZkZjlmYTk3NWJiODNmYzFjODU3NjkxMjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29t
cGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCisKK2NvbnN0IGNoYXIqIGtJbnRDbGFtcEJlZ2lu
ID0gIi8vIEJFR0lOOiBHZW5lcmF0ZWQgY29kZSBmb3IgYXJyYXkgYm91bmRzIGNsYW1waW5nXG5c
biI7Citjb25zdCBjaGFyKiBrSW50Q2xhbXBFbmQgPSAiLy8gRU5EOiBHZW5lcmF0ZWQgY29kZSBm
b3IgYXJyYXkgYm91bmRzIGNsYW1waW5nXG5cbiI7Citjb25zdCBjaGFyKiBrSW50Q2xhbXBEZWZp
bml0aW9uID0gImludCB3ZWJnbF9pbnRfY2xhbXAoaW50IHZhbHVlLCBpbnQgbWluVmFsdWUsIGlu
dCBtYXhWYWx1ZSkgeyByZXR1cm4gKCh2YWx1ZSA8IG1pblZhbHVlKSA/IG1pblZhbHVlIDogKCh2
YWx1ZSA+IG1heFZhbHVlKSA/IG1heFZhbHVlIDogdmFsdWUpKTsgfVxuXG4iOworCituYW1lc3Bh
Y2UgeworCitjbGFzcyBBcnJheUJvdW5kc0NsYW1wZXJNYXJrZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CitwdWJsaWM6CisgICAgQXJyYXlCb3VuZHNDbGFtcGVyTWFya2VyKEFycmF5Qm91
bmRzQ2xhbXBlciYgY2xhbXBlcikKKyAgICAgICAgOiBtQ2xhbXBlcihjbGFtcGVyKQorICAgewor
ICAgfQorCisgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkqIG5vZGUpCisgICB7CisgICAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhJ
bmRpcmVjdCkKKyAgICAgICB7CisgICAgICAgICAgIFRJbnRlcm1UeXBlZCogbGVmdCA9IG5vZGUt
PmdldExlZnQoKTsKKyAgICAgICAgICAgaWYgKGxlZnQtPmlzQXJyYXkoKSB8fCBsZWZ0LT5pc1Zl
Y3RvcigpIHx8IGxlZnQtPmlzTWF0cml4KCkpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
IG5vZGUtPnNldEFkZEluZGV4Q2xhbXAoKTsKKyAgICAgICAgICAgICAgIG1DbGFtcGVyLlNldEFy
cmF5Qm91bmRzQ2xhbXBEZWZpbml0aW9uTmVlZGVkKCk7CisgICAgICAgICAgIH0KKyAgICAgICB9
CisgICAgICAgcmV0dXJuIHRydWU7CisgICB9CisKK3ByaXZhdGU6CisgICAgQXJyYXlCb3VuZHND
bGFtcGVyJiBtQ2xhbXBlcjsKK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQXJy
YXlCb3VuZHNDbGFtcGVyOjpBcnJheUJvdW5kc0NsYW1wZXIoKQorICAgIDogbUFycmF5Qm91bmRz
Q2xhbXBEZWZpbml0aW9uTmVlZGVkKGZhbHNlKQoreworfQorCit2b2lkIEFycmF5Qm91bmRzQ2xh
bXBlcjo6T3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oVEluZm9TaW5rQmFzZSYgb3V0
KSBjb25zdAoreworICAgIGlmICghbUFycmF5Qm91bmRzQ2xhbXBEZWZpbml0aW9uTmVlZGVkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBvdXQgPDwga0ludENsYW1wQmVnaW4g
PDwga0ludENsYW1wRGVmaW5pdGlvbiA8PCBrSW50Q2xhbXBFbmQ7Cit9CisKK3ZvaWQgQXJyYXlC
b3VuZHNDbGFtcGVyOjpNYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKFRJbnRlcm1O
b2RlKiByb290KQoreworICAgIEFTU0VSVChyb290KTsKKworICAgIEFycmF5Qm91bmRzQ2xhbXBl
ck1hcmtlciBjbGFtcGVyKCp0aGlzKTsKKyAgICByb290LT50cmF2ZXJzZSgmY2xhbXBlcik7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9BcnJh
eUJvdW5kc0NsYW1wZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9B
cnJheUJvdW5kc0NsYW1wZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjk0ODU5ZDEyNTlkNzE5MDlhOGQ1YWUz
NTViNjE3MjAyYjkyN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJfSF8KKyNkZWZpbmUg
Q09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJfSF8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hh
ZGVyTGFuZy5oIgorCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJj
b21waWxlci9pbnRlcm1lZGlhdGUuaCIKKworY2xhc3MgQXJyYXlCb3VuZHNDbGFtcGVyIHsKK3B1
YmxpYzoKKyAgICBBcnJheUJvdW5kc0NsYW1wZXIoKTsKKworICAgIGJvb2wgR2V0QXJyYXlCb3Vu
ZHNDbGFtcERlZmluaXRpb25OZWVkZWQoKSBjb25zdCB7IHJldHVybiBtQXJyYXlCb3VuZHNDbGFt
cERlZmluaXRpb25OZWVkZWQ7IH0KKyAgICB2b2lkIFNldEFycmF5Qm91bmRzQ2xhbXBEZWZpbml0
aW9uTmVlZGVkKCkgeyBtQXJyYXlCb3VuZHNDbGFtcERlZmluaXRpb25OZWVkZWQgPSB0cnVlOyB9
CisKKyAgICAvLyBPdXRwdXQgYXJyYXkgY2xhbXAgZnVuY3Rpb24gc291cmNlIGludG8gdGhlIHNo
YWRlciBzb3VyY2UuCisgICAgdm9pZCBPdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihU
SW5mb1NpbmtCYXNlJiBvdXQpIGNvbnN0OworCisgICAgLy8gTWFya3Mgbm9kZXMgaW4gdGhlIHRy
ZWUgdGhhdCBpbmRleCBhcnJheXMgaW5kaXJlY3RseSBhcworICAgIC8vIHJlcXVpcmluZyBjbGFt
cGluZy4KKyAgICB2b2lkIE1hcmtJbmRpcmVjdEFycmF5Qm91bmRzRm9yQ2xhbXBpbmcoVEludGVy
bU5vZGUqIHJvb3QpOworCisgICAgdm9pZCBDbGVhbnVwKCkKKyAgICB7CisgICAgICAgIG1BcnJh
eUJvdW5kc0NsYW1wRGVmaW5pdGlvbk5lZWRlZCA9IGZhbHNlOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBib29sIG1BcnJheUJvdW5kc0NsYW1wRGVmaW5pdGlvbk5lZWRlZDsKK307CisKKyNlbmRp
ZiAvLyBDT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxlci5jcHAKaW5kZXggY2FiODA1NmJjZWU1
NTUxYjllMzNiYzkxMDEwZGMwYjZjZTcyMGQwYi4uZGI1ZjcyOTBmODVlOTI4MzU3MGMwMDI3NGIw
NDUyM2RkZjk2NTMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0NvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvQ29tcGlsZXIuY3BwCkBAIC00LDYgKzQsNyBAQAogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCiAKKyNpbmNsdWRlICJjb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIK
ICNpbmNsdWRlICJjb21waWxlci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL0RldGVjdFJlY3Vyc2lvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0Zvckxvb3BV
bnJvbGwuaCIKQEAgLTE4Niw2ICsxODcsMTAgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29u
c3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAogICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCiAgICAgICAg
ICAgICBidWlsdEluRnVuY3Rpb25FbXVsYXRvci5NYXJrQnVpbHRJbkZ1bmN0aW9uc0ZvckVtdWxh
dGlvbihyb290KTsKIAorICAgICAgICAvLyBDbGFtcGluZyB1bmlmb3JtIGFycmF5IGJvdW5kcyBu
ZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgorICAgICAgICBp
ZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9C
T1VORFMpKQorICAgICAgICAgICAgYXJyYXlCb3VuZHNDbGFtcGVyLk1hcmtJbmRpcmVjdEFycmF5
Qm91bmRzRm9yQ2xhbXBpbmcocm9vdCk7CisKICAgICAgICAgLy8gQ2FsbCBtYXBMb25nVmFyaWFi
bGVOYW1lcygpIGJlZm9yZSBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgc28gaW4KICAgICAgICAg
Ly8gY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHdlIGFscmVhZHkgaGF2ZSB0aGUgbWFwcGVkIHN5
bWJvbCBuYW1lcyBhbmQKICAgICAgICAgLy8gd2UgY291bGQgY29tcG9zaXRlIG1hcHBlZCBhbmQg
b3JpZ2luYWwgdmFyaWFibGUgbmFtZXMuCkBAIC0yMzEsNiArMjM2LDcgQEAgdm9pZCBUQ29tcGls
ZXI6OmNsZWFyUmVzdWx0cygpCiAgICAgdW5pZm9ybXMuY2xlYXIoKTsKIAogICAgIGJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yLkNsZWFudXAoKTsKKyAgICBhcnJheUJvdW5kc0NsYW1wZXIuQ2xlYW51
cCgpOwogfQogCiBib29sIFRDb21waWxlcjo6ZGV0ZWN0UmVjdXJzaW9uKFRJbnRlcm1Ob2RlKiBy
b290KQpAQCAtMzMxLDMgKzMzNyw5IEBAIGNvbnN0IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yJiBU
Q29tcGlsZXI6OmdldEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkgY29uc3QKIHsKICAgICByZXR1
cm4gYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CiB9CisKK2NvbnN0IEFycmF5Qm91bmRzQ2xhbXBl
ciYgVENvbXBpbGVyOjpnZXRBcnJheUJvdW5kc0NsYW1wZXIoKSBjb25zdAoreworICAgIHJldHVy
biBhcnJheUJvdW5kc0NsYW1wZXI7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0R0xTTEJhc2UuY3BwCmluZGV4IDU1MmZhNTA2NmRl
MmZmMjU4ZmFhM2JkNGRiNjMyY2FjNWEyOTdhNTUuLjIxMDBlYWEwYTM1NWRjOGQyYjNhYzE2Yjhk
N2U3ODY0MTk1MjJjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9PdXRwdXRHTFNMQmFzZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEdMU0xCYXNlLmNwcApAQCAtMjM1LDkgKzIzNSwzOCBAQCBib29s
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OgotICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6CiAgICAgICAgICAgICB3cml0ZVRyaXBs
ZXQodmlzaXQsIE5VTEwsICJbIiwgIl0iKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QWRkSW5kZXhD
bGFtcCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh2aXNpdCA9PSBJblZp
c2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJbd2Vi
Z2xfaW50X2NsYW1wKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGludCBtYXhTaXplOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmxl
ZnQgPSBub2RlLT5nZXRMZWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIFRUeXBlIGxlZnRUeXBl
ID0gbGVmdC0+Z2V0VHlwZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc0Fy
cmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBzaGFkZXIgd2lsbCBmYWlsIHZhbGlkYXRpb24gaWYgdGhlIGFycmF5IGxlbmd0aCBpcyBu
b3QgPiAwLgorICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZSA9IGxlZnRUeXBlLmdldEFy
cmF5U2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
eFNpemUgPSBsZWZ0VHlwZS5nZXROb21pbmFsU2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCwgIiA8PCBtYXhTaXplIDw8ICIp
XSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdyaXRlVHJpcGxldCh2aXNpdCwgTlVMTCwg
IlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CiAgICAgICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNp
dCkKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaEhhbmRsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1NoSGFuZGxlLmgKaW5kZXggMjY1MjhiOGRiY2JhMGIwNjRjMTg4YTdlOWEzNTk2OThjN2U2
NThiZC4uM2VhZjE5ZjU2M2M3YWRiNzMzYjE0MGY2MTBlMDk5MDk0OTg3MTJkMSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoSGFuZGxlLmgKQEAgLTE2LDYg
KzE2LDcgQEAKIAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCisjaW5jbHVkZSAi
Y29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci9FeHRlbnNpb25CZWhhdmlv
ci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCkBAIC05OCw2ICs5OSw3IEBAIHBy
b3RlY3RlZDoKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVo
YXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25CZWhhdmlv
cigpIGNvbnN0OwogCisgICAgY29uc3QgQXJyYXlCb3VuZHNDbGFtcGVyJiBnZXRBcnJheUJvdW5k
c0NsYW1wZXIoKSBjb25zdDsKICAgICBjb25zdCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciYgZ2V0
QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKQEAgLTExMCw2ICsx
MTIsNyBAQCBwcml2YXRlOgogICAgIC8vIEJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0
IGJlaGF2aW9yLgogICAgIFRFeHRlbnNpb25CZWhhdmlvciBleHRlbnNpb25CZWhhdmlvcjsKIAor
ICAgIEFycmF5Qm91bmRzQ2xhbXBlciBhcnJheUJvdW5kc0NsYW1wZXI7CiAgICAgQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CiAKICAgICAvLyBSZXN1bHRz
IG9mIGNvbXBpbGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1RyYW5zbGF0b3JFU1NMLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9yRVNTTC5jcHAKaW5kZXggZTNhMmMyYTgwMjQwYTk1M2Q5NzZm
ZjhmNzE5YTY5NzAyZjdhYjBkMS4uZDkwYzcwY2IyMjczMzEzZGZhODZjNTliOTg4NDhhN2E0YzM3
ZWUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JFU1NMLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVHJhbnNsYXRvckVTU0wuY3BwCkBAIC0yMiw2ICsyMiw5IEBAIHZvaWQgVHJhbnNsYXRvckVT
U0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgewogICAgIGdldEJ1aWx0SW5GdW5jdGlv
bkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24oCiAgICAgICAgIHNp
bmssIGdldFNoYWRlclR5cGUoKSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpOwogCisgICAgLy8gV3Jp
dGUgYXJyYXkgYm91bmRzIGNsYW1waW5nIGVtdWxhdGlvbiBpZiBuZWVkZWQuCisgICAgZ2V0QXJy
YXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7
CisKICAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KICAgICBUT3V0cHV0RVNTTCBvdXRw
dXRFU1NMKHNpbmspOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
Y3BwCmluZGV4IGJiMDdhMWViNGU4ZmZmNjY2MWY5MjRmZGY3MDgzOWNmZTA5YzMwODAuLmJhMzgx
MTJjMjIyM2NhNzI0YzA0ZGI2MzliYTA0MDYzNzhlZjVjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmNwcApAQCAt
MzUsNiArMzUsOSBAQCB2b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vZGUq
IHJvb3QpIHsKICAgICBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpLk91dHB1dEVtdWxhdGVk
RnVuY3Rpb25EZWZpbml0aW9uKAogICAgICAgICBzaW5rLCBmYWxzZSk7CiAKKyAgICAvLyBXcml0
ZSBhcnJheSBib3VuZHMgY2xhbXBpbmcgZW11bGF0aW9uIGlmIG5lZWRlZC4KKyAgICBnZXRBcnJh
eUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsK
KwogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgogICAgIFRPdXRwdXRHTFNMIG91dHB1
dEdMU0woc2luayk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAppbmRleCBl
ODNjN2I3MmYyYTMwODYxMjYwYmVhZmUxZGM1MDRkZGI0ZGEwMjg5Li5mNDhhMDQ5YzYzM2RlZWQ2
ZDgxODI4NzIzNDNiZjc0OThkNWQ2YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcApAQCAtNDIsNyArNDIsNyBAQCBUU3RyaW5n
IFRUeXBlOjpnZXRDb21wbGV0ZVN0cmluZygpIGNvbnN0CiAgICAgaWYgKHF1YWxpZmllciAhPSBF
dnFUZW1wb3JhcnkgJiYgcXVhbGlmaWVyICE9IEV2cUdsb2JhbCkKICAgICAgICAgc3RyZWFtIDw8
IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAi
ICI7CiAgICAgaWYgKGFycmF5KQotICAgICAgICBzdHJlYW0gPDwgImFycmF5IG9mICI7CisgICAg
ICAgIHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBnZXRBcnJheVNpemUoKSA8PCAiXSBvZiAiOwogICAg
IGlmIChtYXRyaXgpCiAgICAgICAgIHN0cmVhbSA8PCBzaXplIDw8ICJYIiA8PCBzaXplIDw8ICIg
bWF0cml4IG9mICI7CiAgICAgZWxzZSBpZiAoc2l6ZSA+IDEpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgKaW5kZXggODQzYzQwZWJi
NWM2ZjFhZDYwM2VmNjg3MTRjNjkxOWFjMGI3NTUxYi4uOWU5YWJiYzNhM2NkOTU5NDEyNTIzOGIz
MzNkOGFlZmEwYWNkZDNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2ludGVybWVkaWF0ZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9pbnRlcm1lZGlhdGUuaApAQCAtNDAwLDkgKzQwMCwxNSBAQCBwdWJsaWM6CiAg
ICAgVEludGVybVR5cGVkKiBnZXRSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0OyB9CiAgICAg
Ym9vbCBwcm9tb3RlKFRJbmZvU2luayYpOwogCisgICAgdm9pZCBzZXRBZGRJbmRleENsYW1wKCkg
eyBhZGRJbmRleENsYW1wID0gdHJ1ZTsgfQorICAgIGJvb2wgZ2V0QWRkSW5kZXhDbGFtcCgpIHsg
cmV0dXJuIGFkZEluZGV4Q2xhbXA7IH0KKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCog
bGVmdDsKICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0OworCisgICAgLy8gSWYgc2V0IHRvIHRydWUs
IHdyYXAgYW55IEVPcEluZGV4SW5kaXJlY3Qgd2l0aCBhIGNsYW1wIHRvIGJvdW5kcy4KKyAgICBi
b29sIGFkZEluZGV4Q2xhbXA7CiB9OwogCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCmluZGV4IDIyZmZhYzAwNDkw
NzEwOWU2Yzg1MjY3NDExYWYxZjk5YmJmYmQwNDYuLjIxYTk3OTY0M2VhNjhjNTEzODdmNjlmZGZh
MjNhNWMyYTNlYWJmN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKQEAgLTE3Myw2ICsxNzMsMTIgQEAgYm9vbCBB
TkdMRVdlYktpdEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBzaGFkZXJT
b3VyY2UsIEFOR0xFU2hhZGUKIAogICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclNvdXJjZVN0
cmluZ3NbXSA9IHsgc2hhZGVyU291cmNlIH07CiAKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgLy8gQ2hyb21pdW0gZG9lcyBub3QgdXNlIHRoZSBBTkdMRSBidW5kbGVkIGluIFdlYktpdCBz
b3VyY2UsIGFuZCB0aHVzCisgICAgLy8gZG9lcyBub3QgeWV0IGhhdmUgdGhlIHN5bWJvbCBTSF9D
TEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMuCisgICAgZXh0cmFDb21waWxlT3B0aW9ucyB8PSBT
SF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFM7CisjZW5kaWYKKwogICAgIGJvb2wgdmFsaWRh
dGVTdWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCBzaGFkZXJTb3VyY2VTdHJpbmdzLCAxLCBT
SF9PQkpFQ1RfQ09ERSB8IFNIX0FUVFJJQlVURVNfVU5JRk9STVMgfCBleHRyYUNvbXBpbGVPcHRp
b25zKTsKICAgICBpZiAoIXZhbGlkYXRlU3VjY2VzcykgewogICAgICAgICBpbnQgbG9nU2l6ZSA9
IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RIKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhMmEyNTZiMjdiMjYwOTk5MGJlYzA2YzU4Mzk2ZmI3MmFlZTNiMjM2Li43ZjlhY2Vm
YTE2NTM0OTM5Nzg5YzM4NGIzMWFjODQzM2M4MDkzMDIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTItMTAtMTggIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFNo
YWRlciB0cmFuc2xhdG9yIG5lZWRzIG9wdGlvbiB0byBjbGFtcCB1bmlmb3JtIGFycmF5IGFjY2Vz
c2VzIGluIHZlcnRleCBzaGFkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODk3NworICAgICAgICBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Fu
Z2xlcHJvamVjdC9pc3N1ZXMvZGV0YWlsP2lkPTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMt
Y2xhbXBpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC9hcnJheS1ib3VuZHMtY2xhbXBpbmcuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczogV29uJ3QgcGFzcyBvbiBDaHJvbWl1bSB1bnRpbCB0
aGlzIHBhdGNoIGlzIHVwc3RyZWFtZWQuCisKIDIwMTItMTAtMTggIEphbWVzIFNpbW9uc2VuICA8
c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBhIHNjcmlwdCBmb3IgZXhwb3J0
aW5nIGh0dHAvdGVzdHMvdzNjL3dlYnBlcmYvc3VibWlzc2lvbiB0byBXM0MKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LWJvdW5kcy1jbGFtcGluZy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1ib3VuZHMtY2xh
bXBpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5YzhkOGYyNzM1NDBiZjEyNzNlZDMzYmYx
N2Q4MzAwZTczNjc4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9hcnJheS1ib3VuZHMtY2xhbXBpbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIg
QEAKKyBDaGVja3MgdGhhdCBhcnJheSBhY2Nlc3MgaW4gYSBzaGFkZXIgY2FuIG5vdCByZWFkIG91
dCBvZiBib3VuZHMKKworUEFTUyBUb3AgbGVmdCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4
IDAKK1BBU1MgSW5zaWRlIHRvcCByaWdodCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDAK
K1BBU1MgSW5zaWRlIGJvdHRvbSBsZWZ0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggMAor
UEFTUyBCb3R0b20gcmlnaHQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCA3CitQQVNTIE91
dHNpZGUgYm90dG9tIGxlZnQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCA3CitQQVNTIE91
dHNpZGUgdG9wIHJpZ2h0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggNworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LWJvdW5kcy1jbGFtcGluZy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktYm91bmRzLWNsYW1waW5nLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTkwZGVlNzU0ZDVhNmY3MjIyMzZlOTg3NDZjZmYwMDRhOWUzN2E4NQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LWJvdW5k
cy1jbGFtcGluZy5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53
My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+V2ViR0wg
YXJyYXkgYm91bmRzIGNsYW1waW5nIGNvbmZvcm1hbmNlIHRlc3QuPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImV4YW1wbGUiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgc3R5bGU9Indp
ZHRoOiA0MHB4OyBoZWlnaHQ6IDQwcHg7Ij48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0idnNoYWRlciIg
dHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorI2lmZGVmIEdMX0VTCitwcmVjaXNpb24gaGlnaHAg
ZmxvYXQ7CisjZW5kaWYKK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsKK2F0dHJpYnV0ZSBmbG9h
dCBpbmRleDsKK3VuaWZvcm0gZmxvYXQgc2hhZGVzWzhdOwordmFyeWluZyB2ZWM0IHRleENvbG9y
Owordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKKyAgICB0ZXhD
b2xvciA9IHZlYzQoc2hhZGVzW2ludChpbmRleCldLCAwLCAwLCAxLjApOworfQorPC9zY3JpcHQ+
CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgorI2lm
ZGVmIEdMX0VTCitwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CisjZW5kaWYKK3ZhcnlpbmcgdmVjNCB0
ZXhDb2xvcjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gdGV4Q29sb3I7Cit9
Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGluaXQoKQoreworICAgIGlmICh3aW5k
b3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmspCisgICAgICAgIHdpbmRvdy5pbml0Tm9uS2hyb25v
c0ZyYW1ld29yayhmYWxzZSk7CisKKyAgICBkZWJ1ZygiQ2hlY2tzIHRoYXQgYXJyYXkgYWNjZXNz
IGluIGEgc2hhZGVyIGNhbiBub3QgcmVhZCBvdXQgb2YgYm91bmRzIik7CisgICAgZGVidWcoIiIp
OworCisgICAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIsICJmc2hhZGVyIiwg
WyAidlBvc2l0aW9uIiwgImluZGV4IiBdLAorICAgICAgICAgICAgICAgICAgIFsgMSwgMSwgMSwg
MSBdLCAxKTsKKworICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7CisgICAgZ2wuZGlzYWJs
ZShnbC5CTEVORCk7CisKKyAgICB2YXIgdmVydGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7
CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAg
Z2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsCisgICAgICAgICAgICAgICAgICBuZXcgRmxv
YXQzMkFycmF5KFsgLTEsMSwwLCAxLDEsMCwgLTEsLTEsMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtMSwtMSwwLCAxLDEsMCwgMSwtMSwwIF0pLAorICAgICAgICAgICAg
ICAgICAgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDAp
OworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAw
KTsKKworICAgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5i
aW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgICBnbC5idWZmZXJE
YXRhKGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhbiBhcnJh
eSB0aGF0IGV4ZXJjaXNlcyB3ZWxsIG91dHNpZGUgdGhlCisgICAgICAgICAgICAgICAgICAvLyBs
aW1pdHMgb24gZWFjaCBzaWRlLCBuZWFyIHRoZSBsaW1pdHMsIGFuZCB0aGUKKyAgICAgICAgICAg
ICAgICAgIC8vIGV4YWN0IGxpbWl0cy4KKyAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxk
IGJlIGNsYW1wZWQgdG8gWzAsIDAsIDAsIDcsIDcsIDddCisgICAgICAgICAgICAgICAgICBuZXcg
RmxvYXQzMkFycmF5KFsgLU51bWJlci5NQVhfVkFMVUUsIC0xLCAwLCA3LCA4LCBOdW1iZXIuTUFY
X1ZBTFVFXSksCisgICAgICAgICAgICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCAx
LCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgdmFyIGxvYyA9IGdsLmdldFVuaWZvcm1M
b2NhdGlvbihnbC5wcm9ncmFtLCAic2hhZGVzIik7CisgICAgZ2wudW5pZm9ybTFmdihsb2MsIFsw
LjI1LCAwLjUsIDAsIDAsIDAsIDAsIDAuNzUsIDFdKTsKKworICAgIGNoZWNrUmVkVmFsdWUoMCwg
MzgsIDY0LCAiVG9wIGxlZnQgY29ybmVyIHNob3VsZCBjbGFtcCB0byBpbmRleCAwIik7CisgICAg
Y2hlY2tSZWRWYWx1ZSgzNywgMzgsIDY0LCAiSW5zaWRlIHRvcCByaWdodCBjb3JuZXIgc2hvdWxk
IGNsYW1wIHRvIGluZGV4IDAiKTsKKyAgICBjaGVja1JlZFZhbHVlKDAsIDEsIDY0LCAiSW5zaWRl
IGJvdHRvbSBsZWZ0IGNvcm5lciBzaG91bGQgY2xhbXAgdG8gaW5kZXggMCIpOworCisgICAgY2hl
Y2tSZWRWYWx1ZSgzOCwgMCwgMjU1LCAiQm90dG9tIHJpZ2h0IGNvcm5lciBzaG91bGQgY2xhbXAg
dG8gaW5kZXggNyIpOworICAgIGNoZWNrUmVkVmFsdWUoMywgMSwgMjU1LCAiT3V0c2lkZSBib3R0
b20gbGVmdCBjb3JuZXIgc2hvdWxkIGNsYW1wIHRvIGluZGV4IDciKTsKKyAgICBjaGVja1JlZFZh
bHVlKDM4LCAzNywgMjU1LCAiT3V0c2lkZSB0b3AgcmlnaHQgY29ybmVyIHNob3VsZCBjbGFtcCB0
byBpbmRleCA3Iik7CisKKyAgICBmdW5jdGlvbiBjaGVja1JlZFZhbHVlKHgsIHksIHZhbHVlLCBt
c2cpIHsKKyAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JV
RkZFUl9CSVQpOworICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7Cisg
ICAgICAgIGdsLmZsdXNoKCk7CisgICAgICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSg0KTsK
KyAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9C
WVRFLCBidWYpOworICAgICAgICBpZiAoYnVmWzBdICE9IHZhbHVlIHx8IGJ1ZlsxXSAhPSAwIHx8
IGJ1ZlsyXSAhPSAwIHx8IGJ1ZlszXSAhPSAyNTUpIHsKKyAgICAgICAgICAgIGRlYnVnKCdleHBl
Y3RlZDogcmdiKCcgKyB2YWx1ZSArICcsIDAsIDAsIDI1NSkgd2FzIHJnYignICsgYnVmWzBdICsg
JywgJyArIGJ1ZlsxXSArICcsICcgKyBidWZbMl0gKyAnLCAnICsgYnVmWzNdICsgJyknKTsKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQobXNnKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICB0ZXN0UGFzc2VkKG1zZyk7CisgICAgfQorfQorCitpbml0KCk7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMGZjMmI0NDNkZmYwY2U1NGY3NzMyNWI3NzQ2NDcz
N2Y3YmMzNmM4OC4uZWFmNTEzYzJiMjliYjg4YWI3MGUwMTIxYTdhMGE0NTIzZDgyZDEzMyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0y
MzczLDYgKzIzNzMsOSBAQCBjcmJ1Zy5jb20vNjA2NTEgWyBXaW4gXSBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2dwdS9mYXN0L2NhbnZhcy93ZWJnbC9nbC1vYmplYwogY3JidWcuY29tLzYwNjUx
IGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRtbCBbIEZhaWx1cmUgVGltZW91
dCBdCiBjcmJ1Zy5jb20vNjA2NTEgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9j
YW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KIAor
IyBUaGlzIHdpbGwgZmFpbCBpbiBDaHJvbWl1bSB1bnRpbCB0aGUgcGF0Y2ggaXMgdXBzdHJlYW1l
ZCB0byBBTkdMRQord2Via2l0Lm9yZy9iLzk4OTc3IGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LWJv
dW5kcy1jbGFtcGluZy5odG1sIFsgRmFpbHVyZSBdCisKICMgRmxha3kgc2luY2UgcjY4NDM4OnI2
ODQ0NSBvciBiZWZvcmUgdGhhdC4KIHdlYmtpdC5vcmcvYi80NjY5MyBbIE1hYyBdIGZhc3QvcmVw
YWludC9yZXBhaW50LXN2Zy1hZnRlci1zdHlsZS1jaGFuZ2UuaHRtbCBbIEZhaWx1cmUgXQogCg==
</data>
<flag name="review"
          id="182784"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="182803"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>