<?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>42799</bug_id>
          
          <creation_ts>2010-07-21 18:06:27 -0700</creation_ts>
          <short_desc>pixelWidth/posWidth are processed incorrectly</short_desc>
          <delta_ts>2017-05-29 08:57:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yuxiang Luo">luoyx</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annevk</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>jnd</cc>
    
    <cc>mike.sherov</cc>
    
    <cc>phnixwxz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>wangxianzhu</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254616</commentid>
    <comment_count>0</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-07-21 18:06:27 -0700</bug_when>
    <thetext>[Environment: Google Chrome 6.0.466.0 (Official Build 52279) dev, WebKit 534.3]

When setting an element&apos;s &apos;width&apos; with em unit, 100em for example, the &apos;pixelWidth&apos; is also 100, i.e. without transforming from &apos;em&apos; to &apos;px&apos;. It&apos;s also the same for &apos;height&apos;, &apos;top&apos;, &apos;bottom&apos;, &apos;left&apos;, &apos;right&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260028</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-04 08:11:52 -0700</bug_when>
    <thetext>What is &quot;pixelWidth&quot;? I don&apos;t see it in the source anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261594</commentid>
    <comment_count>2</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-08-06 17:43:53 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; What is &quot;pixelWidth&quot;? I don&apos;t see it in the source anywhere.

pixelWidth and posWidth (and others) properties are calculated when they are accessed. You can look at &apos;JSCSSStyleDeclaration.cpp&apos;, and search &apos;pixel&apos;.
I&apos;m currently working on a patch to fix &apos;pixel/pos&apos; problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275597</commentid>
    <comment_count>3</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-07 21:42:54 -0700</bug_when>
    <thetext>The existence of CSS properties that start with prefix &apos;pixel&apos; and &apos;pos&apos; is for compatibility with IE, but the currently the behavior differs a lot from that of IE. Take pixelWidth/posWidth as example:
1. Getting pixelWidth: if style.width has unit type &apos;em&apos;, &apos;ex&apos; or &apos;rem&apos;, then pixelWidth&apos;s value is not returned without transformation
2. Getting posWidth: it should return parseFloat(style.width), but not the same with pixelWidth
3. Setting pixelWidth: style.width&apos;s unit type should keep unchanged, while the value should be changed with proper transformation.
4. Setting posWidth: style.width&apos;s unit type should keep unchanged, while the value is exactly the value assign to posWidth</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275601</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-09-07 21:49:09 -0700</bug_when>
    <thetext>Please attach a testcase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275622</commentid>
    <comment_count>5</comment_count>
      <attachid>66845</attachid>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-07 23:07:11 -0700</bug_when>
    <thetext>Created attachment 66845
testcase for css properties with pixel/pos prefix

The patch for this bug is almost ready</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277000</commentid>
    <comment_count>6</comment_count>
      <attachid>67148</attachid>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-09 21:32:23 -0700</bug_when>
    <thetext>Created attachment 67148
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277001</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 21:39:34 -0700</bug_when>
    <thetext>Attachment 67148 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/css/CSSPrimitiveValue.cpp:352:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/css/CSSPrimitiveValue.cpp:380:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/css/CSSPrimitiveValue.cpp:840:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 3 in 11 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>277010</commentid>
    <comment_count>8</comment_count>
      <attachid>67151</attachid>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-09 21:56:01 -0700</bug_when>
    <thetext>Created attachment 67151
patch

There are style warning about &apos;case label indent&apos;, but the file already has too many such kind of style warnings. To avoid distracting reviewer&apos;s attention, I temporarily keep them unchanged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277011</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 21:57:40 -0700</bug_when>
    <thetext>Attachment 67151 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/css/CSSPrimitiveValue.cpp:312:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/css/CSSPrimitiveValue.cpp:842:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 2 in 11 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>279359</commentid>
    <comment_count>10</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-14 20:42:48 -0700</bug_when>
    <thetext>Can someone take a look at this bug and help review? thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283473</commentid>
    <comment_count>11</comment_count>
      <attachid>67151</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 19:43:14 -0700</bug_when>
    <thetext>Comment on attachment 67151
patch

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

This code really ought to be factored so that the rules about pixel and pos are in the DOM; the code inside the bindings is getting way too complex and is doing things that should not be part of the bindings.

It’s OK to have the JavaScript bindings parse out the pixel and pos prefix, but then the work of actually computing an appropriate value for both getting and setting should be done in the DOM code, not the bindings. And we should consider moving almost all of the code into the DOM class. The bindings can just pass in the property name and an enum to indicate what the prefix is, and the rest can be handled in the DOM classes. The rule of thumb is that the bindings code should be about translating from the engine data structures to the DOM, but most of the logic should be in the DOM class itself.

&gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:85
&gt; -static String cssPropertyName(const Identifier&amp; propertyName, bool* hadPixelOrPosPrefix = 0)
&gt; +static String cssPropertyName(const Identifier&amp; propertyName, bool* hadPixelPrefix = 0, bool* hadPosPrefix = 0)

Since we support only one prefix, this should be a single enum, not a pair of booleans.

&gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:153
&gt; +    // posTop returns &quot;CSS top&quot; as number value in original unit _if_ its a

Should be &quot;it&apos;s&quot; not &quot;its&quot;.

&gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:156
&gt; +    bool pixel, pos;

We normally declare multiple variables like this on multiple lines.

&gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:162
&gt; +            RefPtr&lt;CSSPrimitiveValue&gt; pv = static_pointer_cast&lt;CSSPrimitiveValue&gt;(v);

This seems to do extra work that is not needed for the common case where we have neither the pixel nor the pos prefix.

We normally prefer to use words rather than letters for local variables, and this is something we try to stick with for new code.

I suggest primitiveValue rather than pv.

&gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:164
&gt; +                // pixel* like pixelTop returns integer instead of float

The wording of this comment is confusing. One way to write this in plain language is:

    // Properties with names with a pixel prefix, such as pixelTop, return integer values, not floating point.

&gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:166
&gt; +                    RefPtr&lt;Node&gt; node = thisObj-&gt;impl()-&gt;getNode();

This should be a raw pointer, not a RefPtr.

&gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:172
&gt; +                    if (style &amp;&amp; rootStyle)
&gt; +                        return jsNumber(exec, pv-&gt;computeLengthInt(style, rootStyle));
&gt; +                    return jsNumber(exec, 0);

In WebKit we normally use a style called “early return”. In this coding style you would write it like this:

    if (!style || !rootStyle)
        return jsNumber(exec, 0);
    return jsNumber(exec, primitiveValue-&gt;computeLengthInt(style, rootStyle));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283475</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 19:43:46 -0700</bug_when>
    <thetext>Thanks very much for taking this on. I think you’re heading in the right direction with this patch. Sorry it took so long for me to get around to reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283626</commentid>
    <comment_count>13</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-23 07:32:58 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 67151 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67151&amp;action=review
&gt; 
&gt; This code really ought to be factored so that the rules about pixel and pos are in the DOM; the code inside the bindings is getting way too complex and is doing things that should not be part of the bindings.

Hi,darin

Thanks very much for the review. Do you mean the handling of pixel/pos should be put in CSSStyleDeclaration class? However, I don&apos;t think it should be put there, because pixel/pos-prefix properties are not CSS property, but CSSOM property accessed by script. And, if we put the logic in there, when setting &apos;pixelWidth&apos;, the CSSStyleDeclaration::setProperty will be invoked as following:
  setProperty(&apos;width&apos;, PREFIX_PIXEL, 100, ...);
The interface then looks very weird, people don&apos;t know what the interface intends to do.

Isn&apos;t it better to let CSSStyleDeclaration do only what it should do, that is to get/set primitive css properties? It might be better to put transformation code between primitive css properties and cssom properties in bindings.

&gt; 
&gt; It’s OK to have the JavaScript bindings parse out the pixel and pos prefix, but then the work of actually computing an appropriate value for both getting and setting should be done in the DOM code, not the bindings. And we should consider moving almost all of the code into the DOM class. The bindings can just pass in the property name and an enum to indicate what the prefix is, and the rest can be handled in the DOM classes. The rule of thumb is that the bindings code should be about translating from the engine data structures to the DOM, but most of the logic should be in the DOM class itself.
&gt; 
&gt; &gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:85
&gt; &gt; -static String cssPropertyName(const Identifier&amp; propertyName, bool* hadPixelOrPosPrefix = 0)
&gt; &gt; +static String cssPropertyName(const Identifier&amp; propertyName, bool* hadPixelPrefix = 0, bool* hadPosPrefix = 0)
&gt; 
&gt; Since we support only one prefix, this should be a single enum, not a pair of booleans.
&gt; 
&gt; &gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:153
&gt; &gt; +    // posTop returns &quot;CSS top&quot; as number value in original unit _if_ its a
&gt; 
&gt; Should be &quot;it&apos;s&quot; not &quot;its&quot;.
&gt; 
&gt; &gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:156
&gt; &gt; +    bool pixel, pos;
&gt; 
&gt; We normally declare multiple variables like this on multiple lines.
&gt; 
&gt; &gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:162
&gt; &gt; +            RefPtr&lt;CSSPrimitiveValue&gt; pv = static_pointer_cast&lt;CSSPrimitiveValue&gt;(v);
&gt; 
&gt; This seems to do extra work that is not needed for the common case where we have neither the pixel nor the pos prefix.
&gt; 
&gt; We normally prefer to use words rather than letters for local variables, and this is something we try to stick with for new code.
&gt; 
&gt; I suggest primitiveValue rather than pv.
&gt; 
&gt; &gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:164
&gt; &gt; +                // pixel* like pixelTop returns integer instead of float
&gt; 
&gt; The wording of this comment is confusing. One way to write this in plain language is:
&gt; 
&gt;     // Properties with names with a pixel prefix, such as pixelTop, return integer values, not floating point.
&gt; 
&gt; &gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:166
&gt; &gt; +                    RefPtr&lt;Node&gt; node = thisObj-&gt;impl()-&gt;getNode();
&gt; 
&gt; This should be a raw pointer, not a RefPtr.
&gt; 
&gt; &gt; WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:172
&gt; &gt; +                    if (style &amp;&amp; rootStyle)
&gt; &gt; +                        return jsNumber(exec, pv-&gt;computeLengthInt(style, rootStyle));
&gt; &gt; +                    return jsNumber(exec, 0);
&gt; 
&gt; In WebKit we normally use a style called “early return”. In this coding style you would write it like this:
&gt; 
&gt;     if (!style || !rootStyle)
&gt;         return jsNumber(exec, 0);
&gt;     return jsNumber(exec, primitiveValue-&gt;computeLengthInt(style, rootStyle));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283633</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-23 07:50:43 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Thanks very much for the review. Do you mean the handling of pixel/pos should be put in CSSStyleDeclaration class? However, I don&apos;t think it should be put there, because pixel/pos-prefix properties are not CSS property, but CSSOM property accessed by script. And, if we put the logic in there, when setting &apos;pixelWidth&apos;, the CSSStyleDeclaration::setProperty will be invoked as following:
&gt;   setProperty(&apos;width&apos;, PREFIX_PIXEL, 100, ...);
&gt; The interface then looks very weird, people don&apos;t know what the interface intends to do.
&gt; 
&gt; Isn&apos;t it better to let CSSStyleDeclaration do only what it should do, that is to get/set primitive css properties? It might be better to put transformation code between primitive css properties and cssom properties in bindings.

Yes, we should put it on CSSStyleDeclaration. If you don’t like having that code in CSSStyleDeclaration we can just call over to Element and put the bulk of the work in that class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285090</commentid>
    <comment_count>15</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-25 22:33:20 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Thanks very much for the review. Do you mean the handling of pixel/pos should be put in CSSStyleDeclaration class? However, I don&apos;t think it should be put there, because pixel/pos-prefix properties are not CSS property, but CSSOM property accessed by script. And, if we put the logic in there, when setting &apos;pixelWidth&apos;, the CSSStyleDeclaration::setProperty will be invoked as following:
&gt; &gt;   setProperty(&apos;width&apos;, PREFIX_PIXEL, 100, ...);
&gt; &gt; The interface then looks very weird, people don&apos;t know what the interface intends to do.
&gt; &gt; 
&gt; &gt; Isn&apos;t it better to let CSSStyleDeclaration do only what it should do, that is to get/set primitive css properties? It might be better to put transformation code between primitive css properties and cssom properties in bindings.
&gt; 
&gt; Yes, we should put it on CSSStyleDeclaration. If you don’t like having that code in CSSStyleDeclaration we can just call over to Element and put the bulk of the work in that class.

But such properties belong to Style object, not Element/Node. Logically, such CSSOM properties should belong to bindings object (i.e. JSCSSStyleDeclaration), although it makes the logic in it more complex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285095</commentid>
    <comment_count>16</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-09-26 00:17:33 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; But such properties belong to Style object, not Element/Node. Logically, such CSSOM properties should belong to bindings object (i.e. JSCSSStyleDeclaration), although it makes the logic in it more complex.

It looks like those properties which have pixel/pos prefix are designed to be compatible with IE. So far those properties are not part of CSSOM spec, but the question is do we consider treating them as part of CSSOM?

If yes, according to DOM spec, the access interface of those properties ought to be language independent, the logic can be inside of the CSSStyleDeclaration&apos;s native implementation, and all language bindings can access those properties via the unified implementation. But currently the logic is only implemented in js binding. So I agree with Darin&apos;s comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285096</commentid>
    <comment_count>17</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-26 00:24:56 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; Thanks very much for the review. Do you mean the handling of pixel/pos should be put in CSSStyleDeclaration class? However, I don&apos;t think it should be put there, because pixel/pos-prefix properties are not CSS property, but CSSOM property accessed by script. And, if we put the logic in there, when setting &apos;pixelWidth&apos;, the CSSStyleDeclaration::setProperty will be invoked as following:
&gt; &gt; &gt;   setProperty(&apos;width&apos;, PREFIX_PIXEL, 100, ...);
&gt; &gt; &gt; The interface then looks very weird, people don&apos;t know what the interface intends to do.
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t it better to let CSSStyleDeclaration do only what it should do, that is to get/set primitive css properties? It might be better to put transformation code between primitive css properties and cssom properties in bindings.
&gt; &gt; 
&gt; &gt; Yes, we should put it on CSSStyleDeclaration. If you don’t like having that code in CSSStyleDeclaration we can just call over to Element and put the bulk of the work in that class.
&gt; 
&gt; But such properties belong to Style object, not Element/Node. Logically, such CSSOM properties should belong to bindings object (i.e. JSCSSStyleDeclaration), although it makes the logic in it more complex.

After discussing with my teammate, I think you may be right, that it&apos;s better to put them in CSSStyleDeclaration, so other language bindings can also use the same logic. I&apos;ll refactor the code, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285309</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-26 22:08:16 -0700</bug_when>
    <thetext>The principle here: Language bindings should provide only the binding to the language. Features needed for the language bindings go into the core DOM code. Whether such features are in the DOM or CSS standard is irrelevant to this basic factoring decision. Code inside the language binding should be kept to a minimum. The only things that should go there are things that require binding-specific logic for speed or the parts of the binding that have to do something that we can’t express in a language-independent IDL file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285347</commentid>
    <comment_count>19</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2010-09-26 23:55:16 -0700</bug_when>
    <thetext>Can these attributes not be dropped? Minefield does not have them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285639</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-27 11:43:47 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Can these attributes not be dropped? Minefield does not have them.

Maybe we can drop them. To find out we have to test websites, and also WebKit-only content such as Dashboard widgets and Mac OS X applications that has never been tested with another web engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286185</commentid>
    <comment_count>21</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-09-28 05:03:13 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; Can these attributes not be dropped? Minefield does not have them.
&gt; 
&gt; Maybe we can drop them. To find out we have to test websites, and also WebKit-only content such as Dashboard widgets and Mac OS X applications that has never been tested with another web engine.

I&apos;m not sure whether there is any special cause for adding these properties at the beginning. I&apos;ll take a look at how many layout tests this affects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286308</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-09-28 09:50:09 -0700</bug_when>
    <thetext>Doesn&apos;t Google have a way to look at its corpus of pages to see how many use these properties?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294610</commentid>
    <comment_count>23</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-10-15 00:20:10 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Doesn&apos;t Google have a way to look at its corpus of pages to see how many use these properties?

There&apos;s about 1/5 web pages have such properties in its JavaScript source code. If a library has any of these properties in its source code, all pages that uses the library will be counted in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294623</commentid>
    <comment_count>24</comment_count>
    <who name="Johnny(Jianning) Ding">jnd</who>
    <bug_when>2010-10-15 01:01:53 -0700</bug_when>
    <thetext>&gt; There&apos;s about 1/5 web pages have such properties in its JavaScript source code. If a library has any of these properties in its source code, all pages that uses the library will be counted in.
If your calculation is right, there are pretty many pages dependent on those pxiel/pos properties, we may need to keep them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294769</commentid>
    <comment_count>25</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-10-15 08:56:26 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Doesn&apos;t Google have a way to look at its corpus of pages to see how many use these properties?
&gt; 
&gt; There&apos;s about 1/5 web pages have such properties in its JavaScript source code. 

One in five? Are you saying that 20% of web pages use this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295115</commentid>
    <comment_count>26</comment_count>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-10-16 02:54:52 -0700</bug_when>
    <thetext>I high(In reply to comment #23)
&gt; There&apos;s about 1/5 web pages have such properties in its JavaScript source code. If a library has any of these properties in its source code, all pages that uses the library will be counted in.

I highly suspect your number. Can you provide more details, for example, the set of pages tested, the test method, name of the library using the properties and how the properties are used in the library, etc.?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295181</commentid>
    <comment_count>27</comment_count>
    <who name="Yuxiang Luo">luoyx</who>
    <bug_when>2010-10-16 18:24:34 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; I high(In reply to comment #23)
&gt; &gt; There&apos;s about 1/5 web pages have such properties in its JavaScript source code. If a library has any of these properties in its source code, all pages that uses the library will be counted in.
&gt; 
&gt; I highly suspect your number. Can you provide more details, for example, the set of pages tested, the test method, name of the library using the properties and how the properties are used in the library, etc.?

The test is done by Mark Huang for me. I gave him an chrome extension which just scan all JavaScript Sourcecode on a page. I ever want to test on the top 100K URL, but finally he fount most pages returns 404 (from Mark, running over Google Internal service, there may be a bug somewhere which makes so many pages are unaccessible). So, he helped run the extension on a 1000-URL set (which all can be accessed), and got the number. You can turn to him if you want to get more details. I have also checked randomly some of pages, they indeed use these properties. But two points: 1. The set may be a little small. 2. These 1000-URLs are almost Chinese websites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507352</commentid>
    <comment_count>28</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-11-21 18:49:49 -0800</bug_when>
    <thetext>I think that 1/5 pages contain pixelXXX is because of such code (maybe in some libraries such as jquery):

  if (....pixelXXX)
    use pixelXXX
  else
    use XXX

The above code is because we have bug 29084 (getComputedStyle returns percentage values for left / right / top / bottom). After we fix bug 29084 and drop the pixelXXX properties, the above code will still work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507364</commentid>
    <comment_count>29</comment_count>
    <who name="Mike Sherov">mike.sherov</who>
    <bug_when>2011-11-21 19:06:33 -0800</bug_when>
    <thetext>Regarding the pixelWidth values being used in jQuery, that only happens if getComputedStyle doesn&apos;t exist. So although it appears in jQuery, it isn&apos;t used for webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797941</commentid>
    <comment_count>30</comment_count>
    <who name="Mike Sherov">mike.sherov</who>
    <bug_when>2012-12-28 11:01:35 -0800</bug_when>
    <thetext>It looks pixelXXXX and posXXXX can be dropped as far as I can tell. jQuery is the only library that seems to still be using it, and it&apos;s only for the case I mentioned. Time as well be time to drop these properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854231</commentid>
    <comment_count>31</comment_count>
    <who name="Mike Sherov">mike.sherov</who>
    <bug_when>2013-03-13 05:49:02 -0700</bug_when>
    <thetext>Just dropping by to report that pixelWidth and posWidth are no longer present in jQuery 2.0, proving it wasn&apos;t being used for Webkit :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313589</commentid>
    <comment_count>32</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-29 08:57:10 -0700</bug_when>
    <thetext>Marking WONTFIX since we don&apos;t plan to add support for pixelWidth/posWidth, and jQuery no longer needs them.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>66845</attachid>
            <date>2010-09-07 23:07:11 -0700</date>
            <delta_ts>2010-09-07 23:07:11 -0700</delta_ts>
            <desc>testcase for css properties with pixel/pos prefix</desc>
            <filename>pixel-pos-prefix.html</filename>
            <type>text/html</type>
            <size>4321</size>
            <attacher name="Yuxiang Luo">luoyx</attacher>
            
              <data encoding="base64">PGhlYWQ+CjxzY3JpcHQ+CmZ1bmN0aW9uIHByaW50KG1lc3NhZ2UpCnsKICAgIHZhciBwYXJhZ3Jh
cGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOwogICAgcGFyYWdyYXBoLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQocGFyYWdyYXBoKTsKfQpmdW5jdGlvbiBz
dGF0dXMoYm9vbFZhbHVlKSB7CiAgcmV0dXJuIGJvb2xWYWx1ZSA/ICdQQVNTJyA6ICdGQUlMJzsK
fQpmdW5jdGlvbiB0ZXN0KCkKewogICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CgogICAgcHJpbnQoIkdl
dHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBweDogIiArIHN0
YXR1cyhweC5zdHlsZS5waXhlbFdpZHRoID09IHB4Lm9mZnNldFdpZHRoKSk7CiAgICBwcmludCgi
R2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIGVtOiAiICsg
c3RhdHVzKGVtLnN0eWxlLnBpeGVsV2lkdGggPT0gZW0ub2Zmc2V0V2lkdGgpKTsKICAgIHByaW50
KCJHZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgZXg6ICIg
KyBzdGF0dXMoZXguc3R5bGUucGl4ZWxXaWR0aCA9PSBleC5vZmZzZXRXaWR0aCkpOwogICAgcHJp
bnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06
ICIgKyBzdGF0dXMocmVtLnN0eWxlLnBpeGVsV2lkdGggPT0gcmVtLm9mZnNldFdpZHRoKSk7CiAg
ICBwcmludCgiR2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9y
IHB0OiAiICsgc3RhdHVzKHB0LnN0eWxlLnBpeGVsV2lkdGggPT0gcHQub2Zmc2V0V2lkdGgpKTsK
ICAgIHByaW50KCJHZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB3aWR0aCBub3Qgc3Bl
Y2lmaWVkOiAiICsgc3RhdHVzKG5vd2lkdGguc3R5bGUucGl4ZWxXaWR0aCA9PSAwKSk7CiAgICAv
LyBMb2dpYyBmb3IgaGFuZGxpbmcgb3RoZXIgbGVuZ3RoIHVuaXQgdHlwZXMgaW5zaWRlIFdlYktp
dCBhcmUgdGhlIHNhbWUgd2l0aCAncHQnLCBzbyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIHRoZW0K
CiAgICBwcmludCgiR2V0dGluZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRv
ciBweDogIiArIHN0YXR1cyhweC5zdHlsZS5wb3NXaWR0aCA9PSBwYXJzZUZsb2F0KHB4LnN0eWxl
LndpZHRoKSkpOwogICAgcHJpbnQoIkdldHRpbmcgcG9zV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0
IGRlc2lnbmF0b3IgZW06ICIgKyBzdGF0dXMoZW0uc3R5bGUucG9zV2lkdGggPT0gcGFyc2VGbG9h
dChlbS5zdHlsZS53aWR0aCkpKTsKICAgIHByaW50KCJHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3Jp
Z2luYWwgdW5pdCBkZXNpZ25hdG9yIGV4OiAiICsgc3RhdHVzKGV4LnN0eWxlLnBvc1dpZHRoID09
IHBhcnNlRmxvYXQoZXguc3R5bGUud2lkdGgpKSk7CiAgICBwcmludCgiR2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06ICIgKyBzdGF0dXMocmVtLnN0eWxl
LnBvc1dpZHRoID09IHBhcnNlRmxvYXQocmVtLnN0eWxlLndpZHRoKSkpOwogICAgcHJpbnQoIkdl
dHRpbmcgcG9zV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcHQ6ICIgKyBzdGF0
dXMocHQuc3R5bGUucG9zV2lkdGggPT0gcGFyc2VGbG9hdChwdC5zdHlsZS53aWR0aCkpKTsKICAg
IHByaW50KCJHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgd2lkdGggbm90IHNwZWNpZmll
ZDogIiArIHN0YXR1cyhub3dpZHRoLnN0eWxlLnBvc1dpZHRoID09IDApKTsKCiAgICBweC5zdHls
ZS5waXhlbFdpZHRoID0gMjAwOwogICAgcHJpbnQoIlNldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9y
aWdpbmFsIHVuaXQgZGVzaWduYXRvciBweDogIiArIHN0YXR1cyhweC5zdHlsZS53aWR0aCA9PSAn
MjAwcHgnKSk7CiAgICBlbS5zdHlsZS5waXhlbFdpZHRoID0gMjAwOwogICAgcHJpbnQoIlNldHRp
bmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogIiArIHN0YXR1
cyhlbS5vZmZzZXRXaWR0aCA9PSAyMDAgJiYgZW0uc3R5bGUud2lkdGguc3Vic3RyKC0yLCAyKSA9
PSAnZW0nKSk7CiAgICBleC5zdHlsZS5waXhlbFdpZHRoID0gMjAwOwogICAgcHJpbnQoIlNldHRp
bmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBleDogIiArIHN0YXR1
cyhleC5vZmZzZXRXaWR0aCA9PSAyMDAgJiYgZXguc3R5bGUud2lkdGguc3Vic3RyKC0yLCAyKSA9
PSAnZXgnKSk7CiAgICByZW0uc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKICAgIHByaW50KCJTZXR0
aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcmVtOiAiICsgc3Rh
dHVzKHJlbS5vZmZzZXRXaWR0aCA9PSAyMDAgJiYgcmVtLnN0eWxlLndpZHRoLnN1YnN0cigtMywg
MykgPT0gJ3JlbScpKTsKICAgIHB0LnN0eWxlLnBpeGVsV2lkdGggPSAyMDA7CiAgICBwcmludCgi
U2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHB0OiAiICsg
c3RhdHVzKHB0Lm9mZnNldFdpZHRoID09IDIwMCAmJiBwdC5zdHlsZS53aWR0aC5zdWJzdHIoLTIs
IDIpID09ICdwdCcpKTsKICAgIG5vd2lkdGguc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKICAgIHBy
aW50KCJTZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB3aWR0aCBub3Qgc3BlY2lmaWVk
OiAiICsgc3RhdHVzKG5vd2lkdGguc3R5bGUud2lkdGggPT0gJzIwMHB4JykpOwoKICAgIHB4LnN0
eWxlLnBvc1dpZHRoID0gMjAwOwogICAgcHJpbnQoIlNldHRpbmcgcG9zV2lkdGggd2l0aCBvcmln
aW5hbCB1bml0IGRlc2lnbmF0b3IgcHg6ICIgKyBzdGF0dXMocHguc3R5bGUud2lkdGggPT0gJzIw
MHB4JykpOwogICAgZW0uc3R5bGUucG9zV2lkdGggPSAyMDA7CiAgICBwcmludCgiU2V0dGluZyBw
b3NXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogIiArIHN0YXR1cyhlbS5z
dHlsZS53aWR0aCA9PSAnMjAwZW0nKSk7CiAgICBleC5zdHlsZS5wb3NXaWR0aCA9IDIwMDsKICAg
IHByaW50KCJTZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIGV4
OiAiICsgc3RhdHVzKGV4LnN0eWxlLndpZHRoID09ICcyMDBleCcpKTsKICAgIHJlbS5zdHlsZS5w
b3NXaWR0aCA9IDIwMDsKICAgIHByaW50KCJTZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIHJlbTogIiArIHN0YXR1cyhyZW0uc3R5bGUud2lkdGggPT0gJzIwMHJl
bScpKTsKICAgIHB0LnN0eWxlLnBvc1dpZHRoID0gMjAwOwogICAgcHJpbnQoIlNldHRpbmcgcG9z
V2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcHQ6ICIgKyBzdGF0dXMocHQuc3R5
bGUud2lkdGggPT0gJzIwMHB0JykpOwogICAgbm93aWR0aC5zdHlsZS5wb3NXaWR0aCA9IDIwMDsK
ICAgIHByaW50KCJTZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgd2lkdGggbm90IHNwZWNp
ZmllZDogIiArIHN0YXR1cyhub3dpZHRoLnN0eWxlLndpZHRoID09ICcyMDBweCcpKTsKfQo8L3Nj
cmlwdD4KPC9oZWFkPgo8Ym9keSBvbmxvYWQ9InRlc3QoKSI+CjxwPlRoaXMgdGVzdCBjaGVja3Mg
dG8gc2VlIGlmIHdlIGNhbiBnZXQvc2V0IHBpeGVsV2lkdGggYW5kIHBvc1dpZHRoIGNvcnJlY3Rs
eSAob3RoZXJzIGxpa2UgcGl4ZWxUb3AvcG9zVG9wIGFyZSBzaW1pbGFyKS48L3A+CjxwPnBpeGVs
V2lkdGggd291bGRuJ3Qgd29yayBpbiBvbGRlciB2ZXJzaW9ucyB3aGVuIHVuaXQgZGVzaWduYXRv
ciBvZiB0aGUgYXR0cmlidXRlIGlzICdlbScsICdleCcgb3IgJ3JlbScuPC9wPgo8cD5wb3NXaWR0
aCBpcyBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIHBpeGVsV2lkdGggaW4gb2xkZXIgdmVyc2lvbnMu
PC9wPgo8aHI+CjxwPjxvbCBpZD0nY29uc29sZSc+PG9sPjwvcD4KPGRpdiBpZD0ncHgnIHN0eWxl
PSd3aWR0aDoxMDBweCc+PC9kaXY+CjxkaXYgaWQ9J2VtJyBzdHlsZT0nd2lkdGg6MTAwZW0nPjwv
ZGl2Pgo8ZGl2IGlkPSdleCcgc3R5bGU9J3dpZHRoOjEwMGV4Jz48L2Rpdj4KPGRpdiBpZD0ncmVt
JyBzdHlsZT0nd2lkdGg6MTAwcmVtJz48L2Rpdj4KPGRpdiBpZD0ncHQnIHN0eWxlPSd3aWR0aDox
MDBwdCc+PC9kaXY+CjxkaXYgaWQ9J25vd2lkdGgnPjwvZGl2Pgo8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67148</attachid>
            <date>2010-09-09 21:32:23 -0700</date>
            <delta_ts>2010-09-09 21:56:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pixel.patch</filename>
            <type>text/plain</type>
            <size>33989</size>
            <attacher name="Yuxiang Luo">luoyx</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzE2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDktMDkgIFl1eGlhbmcgTHVvICA8bHVveXhAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm9w
ZXJ0aWVzIHdpdGggcGl4ZWwvcG9zIHByZWZpeCBhcmUgcHJvY2Vzc2VkIGluY29ycmVjdGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc5OQorCisg
ICAgICAgIFRlc3Q6IGZhc3QvY3NzL3BpeGVsLXBvcy1wcmVmaXguaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNzc1Byb3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVj
bGFyYXRpb246Om5hbWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xh
cmF0aW9uOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjc3NQcm9wZXJ0
eUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6VjhDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZFBy
b3BlcnR5R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
bmFtZWRQcm9wZXJ0eVNldHRlcik6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpnZXROb2RlKToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXROb2RlKToK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGYWN0
b3JGb3JDb252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpj
b21wdXRlTGVuZ3RoRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlTGVuZ3RoRG91YmxlSW5Vbml0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cmltaXRpdmVWYWx1ZTo6aXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRTdHJpbmcpOgorICAgICAgICAqIGNzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmg6IEFkZCBw
dXJlIHZpcnR1YWwgZnVuY3Rpb24gJ2dldE5vZGUnIHdoaWNoCisgICAgICAgIHJldHVybnMgb3du
ZXIgbm9kZSBvZiB0aGUgc3R5bGUgb2JqZWN0LiBGb3IgcGl4ZWwvcG9zLXByZWZpeAorICAgICAg
ICBwcm9wZXJ0aWVzLCBpZiBvcmlnaW5hbCB1bml0IHR5cGUgaXMgJ2VtJyBvciAnZXgnLCB0aGUg
cmVuZGVyIHN0eWxlIG9mCisgICAgICAgIHRoZSBvd25lciBub2RlIGlzIG5lZWRlZCBmb3IgY29t
cHV0aW5nLgorCiAyMDEwLTA5LTA5ICBBbGV4ZXkgTWFyaW5pY2hldiAgPGFtYXJpbmljaGV2QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDY3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxl
RGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsMTIgQEAg
c3RhdGljIGJvb2wgaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KGNvbgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0eU5hbWUoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBib29sKiBoYWRQaXhlbE9yUG9zUHJlZml4ID0gMCkKK3N0YXRpYyBTdHJp
bmcgY3NzUHJvcGVydHlOYW1lKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgYm9vbCog
aGFkUGl4ZWxQcmVmaXggPSAwLCBib29sKiBoYWRQb3NQcmVmaXggPSAwKQogewotICAgIGlmICho
YWRQaXhlbE9yUG9zUHJlZml4KQotICAgICAgICAqaGFkUGl4ZWxPclBvc1ByZWZpeCA9IGZhbHNl
OworICAgIGlmIChoYWRQaXhlbFByZWZpeCkKKyAgICAgICAgKmhhZFBpeGVsUHJlZml4ID0gZmFs
c2U7CisgICAgaWYgKGhhZFBvc1ByZWZpeCkKKyAgICAgICAgKmhhZFBvc1ByZWZpeCA9IGZhbHNl
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gcHJvcGVydHlOYW1lLmxlbmd0aCgpOwogICAgIGlm
ICghbGVuZ3RoKQpAQCAtMTAwLDEyICsxMDIsMTIgQEAgc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0
eU5hbWUoY29uc3QgSWRlbgogICAgICAgICBpICs9IDM7CiAgICAgZWxzZSBpZiAoaGFzQ1NTUHJv
cGVydHlOYW1lUHJlZml4KHByb3BlcnR5TmFtZSwgInBpeGVsIikpIHsKICAgICAgICAgaSArPSA1
OwotICAgICAgICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKLSAgICAgICAgICAgICpoYWRQaXhl
bE9yUG9zUHJlZml4ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGhhZFBpeGVsUHJlZml4KQorICAgICAg
ICAgICAgKmhhZFBpeGVsUHJlZml4ID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGhhc0NTU1Byb3Bl
cnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJwb3MiKSkgewogICAgICAgICBpICs9IDM7Ci0g
ICAgICAgIGlmIChoYWRQaXhlbE9yUG9zUHJlZml4KQotICAgICAgICAgICAgKmhhZFBpeGVsT3JQ
b3NQcmVmaXggPSB0cnVlOworICAgICAgICBpZiAoaGFkUG9zUHJlZml4KQorICAgICAgICAgICAg
KmhhZFBvc1ByZWZpeCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQ
cmVmaXgocHJvcGVydHlOYW1lLCAid2Via2l0IikKICAgICAgICAgICAgIHx8IGhhc0NTU1Byb3Bl
cnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJraHRtbCIpCiAgICAgICAgICAgICB8fCBoYXND
U1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1lLCAiYXBwbGUiKSkKQEAgLTE0NiwyMSAr
MTQ4LDM4IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGUKIHsKICAg
ICBKU0NTU1N0eWxlRGVjbGFyYXRpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NTU1N0eWxl
RGVjbGFyYXRpb24qPihhc09iamVjdChzbG90QmFzZSkpOwogCi0gICAgLy8gU2V0IHVwIHBpeGVs
T3JQb3MgYm9vbGVhbiB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdAotICAgIC8vIHBpeGVsVG9wIHJl
dHVybnMgIkNTUyBUb3AiIGFzIG51bWJlciB2YWx1ZSBpbiB1bml0IHBpeGVscwotICAgIC8vIHBv
c1RvcCByZXR1cm5zICJDU1MgdG9wIiBhcyBudW1iZXIgdmFsdWUgaW4gdW5pdCBwaXhlbHMgX2lm
XyBpdHMgYQorICAgIC8vIFNldCB1cCBwaXhlbCBhbmQgcG9zIGJvb2xlYW4gdG8gaGFuZGxlIHRo
ZSBmYWN0IHRoYXQKKyAgICAvLyBwaXhlbFRvcCByZXR1cm5zICJDU1MgdG9wIiBhcyBudW1iZXIg
dmFsdWUgaW4gdW5pdCBwaXhlbHMKKyAgICAvLyBwb3NUb3AgcmV0dXJucyAiQ1NTIHRvcCIgYXMg
bnVtYmVyIHZhbHVlIGluIG9yaWdpbmFsIHVuaXQgX2lmXyBpdHMgYQogICAgIC8vIHBvc2l0aW9u
ZWQgZWxlbWVudC4gaWYgaXQgaXMgbm90IGEgcG9zaXRpb25lZCBlbGVtZW50LCByZXR1cm4gMAog
ICAgIC8vIGZyb20gTVNJRSBkb2N1bWVudGF0aW9uIEZJWE1FOiBJTVBMRU1FTlQgVEhBVCAoRGly
aykKLSAgICBib29sIHBpeGVsT3JQb3M7Ci0gICAgU3RyaW5nIHByb3AgPSBjc3NQcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lLCAmcGl4ZWxPclBvcyk7CisgICAgYm9vbCBwaXhlbCwgcG9zOworICAg
IFN0cmluZyBwcm9wID0gY3NzUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgJnBpeGVsLCAmcG9z
KTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHYgPSB0aGlzT2JqLT5pbXBsKCktPmdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcCk7CisKICAgICBpZiAodikgewotICAgICAgICBpZiAocGl4ZWxPclBvcyAm
JiB2LT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1JVElWRV9WQUxVRSkKLSAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2KS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KSk7CisgICAgICAgIGlmICh2LT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1J
VElWRV9WQUxVRSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwdiA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHYpOworICAgICAgICAgICAg
aWYgKHBpeGVsKSB7CisgICAgICAgICAgICAgICAgLy8gcGl4ZWwqIGxpa2UgcGl4ZWxUb3AgcmV0
dXJucyBpbnRlZ2VyIGluc3RlYWQgb2YgZmxvYXQKKyAgICAgICAgICAgICAgICBpZiAocHYtPmlz
Q29tcHV0ZUxlbmd0aFVuaXRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSB0aGlzT2JqLT5pbXBsKCktPmdldE5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBub2RlLT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiByb290U3R5bGUgPSBub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0
ZWRTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgcm9vdFN0eWxlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHB2LT5jb21wdXRl
TGVuZ3RoSW50KHN0eWxlLCByb290U3R5bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgcHYtPmdldEludFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHB2LT5nZXRGbG9hdFZhbHVlKCkpOworICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChleGVjLCB2LT5jc3NUZXh0KCkpOwog
ICAgIH0KIAotICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAo
c3VjaCBhcyAicGFkZGluZyIpLCAKKyAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBzaG9ydGhh
bmQgcHJvcGVydHkgKHN1Y2ggYXMgInBhZGRpbmciKSwKICAgICAvLyBpdCBjYW4gb25seSBiZSBh
Y2Nlc3NlZCB1c2luZyBnZXRQcm9wZXJ0eVZhbHVlLgogCiAgICAgLy8gTWFrZSB0aGUgU1ZHICdm
aWx0ZXInIGF0dHJpYnV0ZSB1bmRldGVjdGFibGUsIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRo
ZSBJRSAnZmlsdGVyJyBhdHRyaWJ1dGUuCkBAIC0xNzYsMTAgKzE5NSwzMyBAQCBib29sIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6cHV0RGVsZWdhdGUoCiAgICAgaWYgKCFpc0NTU1Byb3BlcnR5TmFt
ZShwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIHBpeGVs
T3JQb3M7Ci0gICAgU3RyaW5nIHByb3AgPSBjc3NQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLCAm
cGl4ZWxPclBvcyk7CiAgICAgU3RyaW5nIHByb3BWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKGV4ZWMsIHZhbHVlKTsKLSAgICBpZiAocGl4ZWxPclBvcykKKworICAgIGJvb2wgcGl4
ZWwsIHBvczsKKyAgICBTdHJpbmcgcHJvcCA9IGNzc1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUs
ICZwaXhlbCwgJnBvcyk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2ID0gaW1wbCgpLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3ApOworICAgIGlmICh2ICYmIHYtPmNzc1ZhbHVlVHlwZSgpID09IENT
U1ZhbHVlOjpDU1NfUFJJTUlUSVZFX1ZBTFVFKSB7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcHYgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2KTsK
KyAgICAgICAgU3RyaW5nIHVuaXQgPSBwdi0+dW5pdFN0cmluZygpOworICAgICAgICBpZiAocGl4
ZWwpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0YXJnZXRWYWx1ZSA9IDA7CisgICAgICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBpeGVsVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHZhbHVlLnRvVUludDMyKGV4ZWMpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gcHYtPnByaW1pdGl2ZVR5cGUo
KTsKKyAgICAgICAgICAgIGlmIChwdi0+aXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUoKSkgeworICAg
ICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5nZXROb2RlKCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPmNvbXB1
dGVkU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgcm9vdFN0eWxlKQorICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IHBpeGVsVmFsdWUtPmNvbXB1dGVMZW5ndGhE
b3VibGVJblVuaXRUeXBlKHN0eWxlLCByb290U3R5bGUsIHVuaXRUeXBlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gcGl4ZWxWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUodW5pdFR5cGUpOworICAgICAgICAgICAgcHJvcFZhbHVlID0gU3RyaW5nOjpudW1i
ZXIodGFyZ2V0VmFsdWUpICsgdW5pdDsKKyAgICAgICAgfSBlbHNlIGlmIChwb3MpCisgICAgICAg
ICAgICBwcm9wVmFsdWUgKz0gdW5pdDsKKyAgICB9IGVsc2UgaWYgKHBpeGVsIHx8IHBvcykKICAg
ICAgICAgcHJvcFZhbHVlICs9ICJweCI7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aW1wbCgpLT5zZXRQcm9wZXJ0eShwcm9wLCBwcm9wVmFsdWUsIGVjKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjcxNjApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw4IEBAIHN0YXRpYyBib29sIGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjb24KIGNsYXNz
IENTU1Byb3BlcnR5SW5mbyB7CiBwdWJsaWM6CiAgICAgaW50IHByb3BJRDsKLSAgICBib29sIGhh
ZFBpeGVsT3JQb3NQcmVmaXg7CisgICAgYm9vbCBoYWRQaXhlbFByZWZpeDsKKyAgICBib29sIGhh
ZFBvc1ByZWZpeDsKICAgICBib29sIHdhc0ZpbHRlcjsKIH07CiAKQEAgLTkzLDggKzk0LDggQEAg
cHVibGljOgogLy8gRXhhbXBsZTogJ2JhY2tncm91bmRQb3NpdGlvblknIC0+ICdiYWNrZ3JvdW5k
LXBvc2l0aW9uLXknCiAvLwogLy8gQWxzbywgY2VydGFpbiBwcmVmaXhlcyBzdWNoIGFzICdwb3Mn
LCAnY3NzLScgYW5kICdwaXhlbC0nIGFyZSBzdHJpcHBlZAotLy8gYW5kIHRoZSBoYWRQaXhlbE9y
UG9zUHJlZml4IG91dCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yCi0v
LyBub3QgdGhlIHByb3BlcnR5IG5hbWUgd2FzIHByZWZpeGVkIHdpdGggJ3Bvcy0nIG9yICdwaXhl
bC0nLgorLy8gYW5kIHRoZSBoYWRQaXhlbFByZWZpeC9oYWRQb3NQcmVmaXggb3V0IHBhcmFtZXRl
cnMgYXJlIHVzZWQgdG8gaW5kaWNhdGUKKy8vIHdoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSBu
YW1lIHdhcyBwcmVmaXhlZCB3aXRoICdwb3MtJyBvciAncGl4ZWwtJy4KIHN0YXRpYyBDU1NQcm9w
ZXJ0eUluZm8qIGNzc1Byb3BlcnR5SW5mbyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+djhQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2OFBy
b3BlcnR5TmFtZSk7CkBAIC0xMDMsNyArMTA0LDggQEAgc3RhdGljIENTU1Byb3BlcnR5SW5mbyog
Y3NzUHJvcGVydHlJbmZvKAogICAgIENTU1Byb3BlcnR5SW5mbyogcHJvcEluZm8gPSBtYXAuZ2V0
KHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wSW5mbykgewogICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVuZ3RoKCk7Ci0gICAgICAgIGJvb2wgaGFkUGl4ZWxPclBv
c1ByZWZpeCA9IGZhbHNlOworICAgICAgICBib29sIGhhZFBpeGVsUHJlZml4ID0gZmFsc2U7Cisg
ICAgICAgIGJvb2wgaGFkUG9zUHJlZml4ID0gZmFsc2U7CiAgICAgICAgIGlmICghbGVuZ3RoKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTExNiwxMCArMTE4LDEwIEBAIHN0YXRpYyBDU1NQ
cm9wZXJ0eUluZm8qIGNzc1Byb3BlcnR5SW5mbygKICAgICAgICAgICAgIGkgKz0gMzsKICAgICAg
ICAgZWxzZSBpZiAoaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KHByb3BlcnR5TmFtZSwgInBpeGVs
IikpIHsKICAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGhhZFBpeGVsT3JQb3NQcmVm
aXggPSB0cnVlOworICAgICAgICAgICAgaGFkUGl4ZWxQcmVmaXggPSB0cnVlOwogICAgICAgICB9
IGVsc2UgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJwb3MiKSkg
ewogICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgaGFkUGl4ZWxPclBvc1ByZWZpeCA9
IHRydWU7CisgICAgICAgICAgICBoYWRQb3NQcmVmaXggPSB0cnVlOwogICAgICAgICB9IGVsc2Ug
aWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJ3ZWJraXQiKQogICAg
ICAgICAgICAgICAgIHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJr
aHRtbCIpCiAgICAgICAgICAgICAgICAgfHwgaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KHByb3Bl
cnR5TmFtZSwgImFwcGxlIikpCkBAIC0xNDMsNyArMTQ1LDggQEAgc3RhdGljIENTU1Byb3BlcnR5
SW5mbyogY3NzUHJvcGVydHlJbmZvKAogICAgICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3Bl
cnR5SUQocHJvcE5hbWUpOwogICAgICAgICBpZiAocHJvcGVydHlJRCkgewogICAgICAgICAgICAg
cHJvcEluZm8gPSBuZXcgQ1NTUHJvcGVydHlJbmZvKCk7Ci0gICAgICAgICAgICBwcm9wSW5mby0+
aGFkUGl4ZWxPclBvc1ByZWZpeCA9IGhhZFBpeGVsT3JQb3NQcmVmaXg7CisgICAgICAgICAgICBw
cm9wSW5mby0+aGFkUGl4ZWxQcmVmaXggPSBoYWRQaXhlbFByZWZpeDsKKyAgICAgICAgICAgIHBy
b3BJbmZvLT5oYWRQb3NQcmVmaXggPSBoYWRQb3NQcmVmaXg7CiAgICAgICAgICAgICBwcm9wSW5m
by0+d2FzRmlsdGVyID0gKHByb3BOYW1lID09ICJmaWx0ZXIiKTsKICAgICAgICAgICAgIHByb3BJ
bmZvLT5wcm9wSUQgPSBwcm9wZXJ0eUlEOwogICAgICAgICAgICAgbWFwLmFkZChwcm9wZXJ0eU5h
bWUsIHByb3BJbmZvKTsKQEAgLTE3MCwxMCArMTczLDIzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOENTU1N0eWxlRGVjbGFyYXQKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBp
bXAtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcEluZm8tPnByb3BJRCk7CiAgICAgaWYgKGNzc1Zh
bHVlKSB7Ci0gICAgICAgIGlmIChwcm9wSW5mby0+aGFkUGl4ZWxPclBvc1ByZWZpeCAmJgotICAg
ICAgICAgICAgY3NzVmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfUFJJTUlU
SVZFX1ZBTFVFKSB7Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oCi0gICAgICAgICAgICAgICAgY3NzVmFsdWUuZ2V0KCkp
LT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAgaWYg
KGNzc1ZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1JVElWRV9WQUxV
RSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwdiA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChwcm9wSW5mby0+aGFkUGl4ZWxQcmVmaXgpIHsKKyAgICAgICAgICAgICAgICAvLyBwaXhlbCog
bGlrZSBwaXhlbFRvcCByZXR1cm5zIGludGVnZXIgaW5zdGVhZCBvZiBmbG9hdAorICAgICAgICAg
ICAgICAgIGlmIChwdi0+aXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcC0+Z2V0Tm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSA9IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5j
b21wdXRlZFN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiByb290U3R5
bGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHB2LT5j
b21wdXRlTGVuZ3RoSW50KHN0eWxlLCByb290U3R5bGUpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHY4OjpOdW1iZXI6Ok5ldygwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhwdi0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByb3BJbmZv
LT5oYWRQb3NQcmVmaXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhw
di0+Z2V0RmxvYXRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdjhTdHJpbmdP
ck51bGwoY3NzVmFsdWUtPmNzc1RleHQoKSk7CiAgICAgfQpAQCAtMTk5LDcgKzIxNSwzMCBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgU3RyaW5nIHByb3BlcnR5VmFsdWUgPSB0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKLSAgICBpZiAocHJvcEluZm8tPmhh
ZFBpeGVsT3JQb3NQcmVmaXgpCisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gaW1w
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJbmZvLT5wcm9wSUQpOworICAgIGlmIChjc3NWYWx1
ZSAmJiBjc3NWYWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19QUklNSVRJVkVf
VkFMVUUpIHsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwdiA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlKTsKKyAgICAgICAgU3RyaW5n
IHVuaXQgPSBwdi0+dW5pdFN0cmluZygpOworICAgICAgICBpZiAocHJvcEluZm8tPmhhZFBpeGVs
UHJlZml4KSB7CisgICAgICAgICAgICBkb3VibGUgdGFyZ2V0VmFsdWUgPSAwOworICAgICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwaXhlbFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZS0+SW50ZWdlclZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBwdi0+cHJpbWl0aXZl
VHlwZSgpOworICAgICAgICAgICAgaWYgKHB2LT5pc0NvbXB1dGVMZW5ndGhVbml0VHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXAtPmdldE5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgpOworICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiByb290U3R5bGUgPSBub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+Y29t
cHV0ZWRTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiByb290U3R5bGUpCisg
ICAgICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gcGl4ZWxWYWx1ZS0+Y29tcHV0ZUxlbmd0
aERvdWJsZUluVW5pdFR5cGUoc3R5bGUsIHJvb3RTdHlsZSwgdW5pdFR5cGUpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0YXJnZXRWYWx1
ZSA9IHBpeGVsVmFsdWUtPmdldERvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICAgICAgICAgIHBy
b3BlcnR5VmFsdWUgPSBTdHJpbmc6Om51bWJlcih0YXJnZXRWYWx1ZSkgKyB1bml0OworICAgICAg
ICB9IGVsc2UgaWYgKHByb3BJbmZvLT5oYWRQb3NQcmVmaXgpCisgICAgICAgICAgICBwcm9wZXJ0
eVZhbHVlICs9IHVuaXQ7CisgICAgfSBlbHNlIGlmIChwcm9wSW5mby0+aGFkUGl4ZWxQcmVmaXgg
fHwgcHJvcEluZm8tPmhhZFBvc1ByZWZpeCkKICAgICAgICAgcHJvcGVydHlWYWx1ZS5hcHBlbmQo
InB4Iik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiA2NzE2MCkKKysrIFdlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
IAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBnZXROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlOyB9CisKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZpcnR1YWxMZW5ndGgoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIApAQCAtNzYs
NyArNzgsNyBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JT
aGFkb3coY29uc3QgU2hhZG93RGF0YSosIGludCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29u
c3QgQ29sb3ImKSBjb25zdDsKLSAgICAKKwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAg
UHNldWRvSWQgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyOwogICAgIGJvb2wgbV9hbGxvd1Zpc2l0
ZWRTdHlsZTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAko
cmV2aXNpb24gNjcxNjApCisrKyBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMyArNzUsMTQgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24mKTsKLSAgICAKKwogICAgIHR5cGVkZWYgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBtX3Byb3BlcnRpZXMu
YmVnaW4oKSk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSB7IHJldHVybiBjb25zdF9pdGVy
YXRvcih0aGlzLCBtX3Byb3BlcnRpZXMuZW5kKCkpOyB9CiAKICAgICB2b2lkIHNldE5vZGUoTm9k
ZSogbm9kZSkgeyBtX25vZGUgPSBub2RlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+
IGdldE5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBp
c011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0x
NTIsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZ2V0Q29tbW9uVmFsdWUoY29uc3Qg
aW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyKSBjb25zdDsKICAgICBTdHJpbmcgZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgdW5zaWduZWQgbnVtYmVyKSBj
b25zdDsKICAgICBTdHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0
OwotICAgIAorCiAgICAgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKGNvbnN0IENTU1Byb3BlcnR5
JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAwKTsKICAgICBib29sIHJlbW92ZVNob3J0aGFuZFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpOwogCkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiA2NzE2MCkKKysrIFdlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDU5ICszNDUsODQgQEAgZmxv
YXQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhGbAogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBs
aWVyLCBjb21wdXRpbmdGb250U2l6ZSkpOwogfQogCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVMZW5ndGhEb3VibGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkKK3N0YXRp
YyBkb3VibGUgc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBl
KQogewotICAgIHVuc2lnbmVkIHNob3J0IHR5cGUgPSBwcmltaXRpdmVUeXBlKCk7CisgICAgZG91
YmxlIGZhY3RvciA9IDEuMDsKKyAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7CisgICAgICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ006CisgICAgICAgICAgICBmYWN0b3IgPSBjc3NQ
aXhlbHNQZXJJbmNoIC8gMi41NDsgLy8gKDIuNTQgY20vaW4pCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NOgorICAgICAgICAgICAgZmFj
dG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgorICAgICAgICAgICAgZmFjdG9yID0g
Y3NzUGl4ZWxzUGVySW5jaDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFQ6CisgICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJ
bmNoIC8gNzIuMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEM6CisgICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoICog
MTIuMCAvIDcyLjA7IC8vIDEgcGMgPT0gMTIgcHQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgLy8gV2UgZG8gbm90
IGFwcGx5IHRoZSB6b29tIGZhY3RvciB3aGVuIHdlIGFyZSBjb21wdXRpbmcgdGhlIHZhbHVlIG9m
IHRoZSBmb250LXNpemUgcHJvcGVydHkuICBUaGUgem9vbWluZwotICAgIC8vIGZvciBmb250IHNp
emVzIGlzIG11Y2ggbW9yZSBjb21wbGljYXRlZCwgc2luY2Ugd2UgaGF2ZSB0byB3b3JyeSBhYm91
dCBlbmZvcmNpbmcgdGhlIG1pbmltdW0gZm9udCBzaXplIHByZWZlcmVuY2UKLSAgICAvLyBhcyB3
ZWxsIGFzIGVuZm9yY2luZyB0aGUgaW1wbGljaXQgInNtYXJ0IG1pbmltdW0uIiAgSW4gYWRkaXRp
b24gdGhlIENTUyBwcm9wZXJ0eSB0ZXh0LXNpemUtYWRqdXN0IGlzIHVzZWQgdG8KLSAgICAvLyBw
cmV2ZW50IHRleHQgZnJvbSB6b29taW5nIGF0IGFsbC4gIFRoZXJlZm9yZSB3ZSB3aWxsIG5vdCBh
cHBseSB0aGUgem9vbSBoZXJlIGlmIHdlIGFyZSBjb21wdXRpbmcgZm9udC1zaXplLgotICAgIGJv
b2wgYXBwbHlab29tTXVsdGlwbGllciA9ICFjb21wdXRpbmdGb250U2l6ZTsKKyAgICByZXR1cm4g
ZmFjdG9yOworfQogCitzdGF0aWMgZG91YmxlIGNvbXB1dGVGYWN0b3JGb3JDb252ZXJzaW9uKFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgYm9vbCBjb21wdXRpbmdG
b250U2l6ZSwgdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCit7CiAgICAgZG91YmxlIGZhY3RvciA9
IDEuMDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NfRU1TOgotICAgICAg
ICAgICAgYXBwbHlab29tTXVsdGlwbGllciA9IGZhbHNlOworICAgIHN3aXRjaCAodW5pdFR5cGUp
IHsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUzoKICAgICAgICAgICAg
IGZhY3RvciA9IGNvbXB1dGluZ0ZvbnRTaXplID8gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNw
ZWNpZmllZFNpemUoKSA6IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19FWFM6CisgICAgICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFM6CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2
ZSBhIGJ1ZyByaWdodCBub3cgd2hlcmUgdGhlIHpvb20gd2lsbCBiZSBhcHBsaWVkIHR3aWNlIHRv
IEVYIHVuaXRzLgogICAgICAgICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgdG8gY29tcHV0ZSBFWCB1
c2luZyBmb250TWV0cmljcyBmb3IgdGhlIG9yaWdpbmFsIHNwZWNpZmllZFNpemUgYW5kIG5vdCB1
c2UKICAgICAgICAgICAgIC8vIG91ciBhY3R1YWwgY29uc3RydWN0ZWQgcmVuZGVyaW5nIGZvbnQu
Ci0gICAgICAgICAgICBhcHBseVpvb21NdWx0aXBsaWVyID0gZmFsc2U7CiAgICAgICAgICAgICBm
YWN0b3IgPSBzdHlsZS0+Zm9udCgpLnhIZWlnaHQoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU19SRU1TOgotICAgICAgICAgICAgYXBwbHlab29tTXVsdGlwbGllciA9IGZh
bHNlOworICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUzoKICAgICAgICAg
ICAgIGZhY3RvciA9IGNvbXB1dGluZ0ZvbnRTaXplID8gcm9vdFN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5zcGVjaWZpZWRTaXplKCkgOiByb290U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1
dGVkU2l6ZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BYOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICAgICAgZmFjdG9y
ID0gY3NzUGl4ZWxzUGVySW5jaCAvIDIuNTQ7IC8vICgyLjU0IGNtL2luKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX01NOgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4
ZWxzUGVySW5jaCAvIDI1LjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1Nf
SU46Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4
ZWxzUGVySW5jaCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1Nf
UEM6Ci0gICAgICAgICAgICAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAgICAgICBmYWN0b3IgPSBj
c3NQaXhlbHNQZXJJbmNoICogMTIuMCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAtMS4wOworICAgICAgICAgICAgZmFjdG9y
ID0gc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuaXRUeXBlKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIAorICAgIHJldHVybiBmYWN0b3I7Cit9CisKK2RvdWJsZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKQor
eworICAgIHJldHVybiBjb21wdXRlTGVuZ3RoRG91YmxlSW5Vbml0VHlwZShzdHlsZSwgcm9vdFN0
eWxlLCBDU1NfUFgsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0ZvbnRTaXplKTsKK30KKworZG91Ymxl
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlSW5Vbml0VHlwZShSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIHVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlLCBkb3VibGUgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkKK3sKKyAgICAv
LyBXZSBkbyBub3QgYXBwbHkgdGhlIHpvb20gZmFjdG9yIHdoZW4gd2UgYXJlIGNvbXB1dGluZyB0
aGUgdmFsdWUgb2YgdGhlIGZvbnQtc2l6ZSBwcm9wZXJ0eS4gIFRoZSB6b29taW5nCisgICAgLy8g
Zm9yIGZvbnQgc2l6ZXMgaXMgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLCBzaW5jZSB3ZSBoYXZlIHRv
IHdvcnJ5IGFib3V0IGVuZm9yY2luZyB0aGUgbWluaW11bSBmb250IHNpemUgcHJlZmVyZW5jZQor
ICAgIC8vIGFzIHdlbGwgYXMgZW5mb3JjaW5nIHRoZSBpbXBsaWNpdCAic21hcnQgbWluaW11bS4i
ICBJbiBhZGRpdGlvbiB0aGUgQ1NTIHByb3BlcnR5IHRleHQtc2l6ZS1hZGp1c3QgaXMgdXNlZCB0
bworICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIHpvb21pbmcgYXQgYWxsLiAgVGhlcmVmb3JlIHdl
IHdpbGwgbm90IGFwcGx5IHRoZSB6b29tIGhlcmUgaWYgd2UgYXJlIGNvbXB1dGluZyBmb250LXNp
emUuCisgICAgYm9vbCBhcHBseVpvb21NdWx0aXBsaWVyID0gIWNvbXB1dGluZ0ZvbnRTaXplOwor
ICAgIGlmIChtX3R5cGUgPT0gQ1NTX0VNUyB8fCBtX3R5cGUgPT0gQ1NTX0VYUyB8fCBtX3R5cGUg
PT0gQ1NTX1JFTVMpCisgICAgICAgIGFwcGx5Wm9vbU11bHRpcGxpZXIgPSBmYWxzZTsKKworICAg
IC8vIEZpcnN0IGNvbnZlcnQgdGhlIHZhbHVlIGZyb20gbV90eXBlIGludG8gQ1NTUGl4ZWxzCisg
ICAgZG91YmxlIGZhY3RvciA9IGNvbXB1dGVGYWN0b3JGb3JDb252ZXJzaW9uKHN0eWxlLCByb290
U3R5bGUsIGNvbXB1dGluZ0ZvbnRTaXplLCBtX3R5cGUpOwogICAgIGRvdWJsZSByZXN1bHQgPSBn
ZXREb3VibGVWYWx1ZSgpICogZmFjdG9yOworCisgICAgLy8gTm93IGNvbnZlcnQgZnJvbSBDU1NQ
aXhlbHMgdG8gdGhlIHNwZWNpZmllZCB1bml0VHlwZQorICAgIGZhY3RvciA9IGNvbXB1dGVGYWN0
b3JGb3JDb252ZXJzaW9uKHN0eWxlLCByb290U3R5bGUsIGNvbXB1dGluZ0ZvbnRTaXplLCB1bml0
VHlwZSk7CisgICAgcmVzdWx0IC89IGZhY3RvcjsKKwogICAgIGlmICghYXBwbHlab29tTXVsdGlw
bGllciB8fCBtdWx0aXBsaWVyID09IDEuMCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
CisKICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEgc2hvdWxkIG5vdCBi
ZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4gIFRoaXMga2VlcHMgYm9yZGVyIGxpbmVzIGZyb20K
ICAgICAvLyB2YW5pc2hpbmcuCiAgICAgZG91YmxlIHpvb21lZFJlc3VsdCA9IHJlc3VsdCAqIG11
bHRpcGxpZXI7CkBAIC00MDYsNiArNDMxLDExIEBAIGRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZUxlbmd0aEQKICAgICByZXR1cm4gem9vbWVkUmVzdWx0OwogfQogCitib29sIENTU1By
aW1pdGl2ZVZhbHVlOjppc0NvbXB1dGVMZW5ndGhVbml0VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtX3R5cGUgPT0gQ1NTX0VNUyB8fCBtX3R5cGUgPT0gQ1NTX0VYUyB8fCBtX3R5cGUgPT0g
Q1NTX1JFTVMpOworfQorCiB2b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRGbG9hdFZhbHVlKHVu
c2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgZWMgPSAwOwpAQCAtNDIxLDM0ICs0NTEsNiBAQCB2b2lkIENTU1ByaW1pdGl2
ZVZhbHVlOjpzZXRGbG9hdFZhbHVlKHVuCiAgICAgbV90eXBlID0gdW5pdFR5cGU7CiB9CiAKLXN0
YXRpYyBkb3VibGUgc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlKQotewotICAgIGRvdWJsZSBmYWN0b3IgPSAxLjA7Ci0gICAgc3dpdGNoICh1bml0VHlwZSkg
ewotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAgICAgICAg
ICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDIuNTQ7IC8vICgyLjU0IGNtL2luKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTToK
LSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyAyNS40OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTjoKLSAgICAg
ICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgICAgICAgICAgZmFjdG9y
ID0gY3NzUGl4ZWxzUGVySW5jaCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDOgotICAgICAgICAgICAgZmFjdG9yID0gY3Nz
UGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOyAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWN0b3I7Ci19Ci0KIGRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0RG91
YmxlVmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGVjID0gMDsKQEAgLTgzMSw2ICs4MzMsNjcgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVl
Ojpjc3NUZXh0KCkgY29ucwogICAgIHJldHVybiB0ZXh0OwogfQogCitTdHJpbmcgQ1NTUHJpbWl0
aXZlVmFsdWU6OnVuaXRTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmluZyBzdHI7CisgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUzoK
KyAgICAgICAgICAgIHN0ciA9ICJlbSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVM6CisgICAgICAgICAgICBzdHIgPSAicmVtIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RVhTOgorICAgICAgICAgICAgc3RyID0gImV4IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6CisgICAgICAgICAgICBzdHIgPSAicHgi
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DTToKKyAgICAgICAgICAgIHN0ciA9ICJjbSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NOgorICAgICAgICAgICAgc3RyID0gIm1t
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSU46CisgICAgICAgICAgICBzdHIgPSAiaW4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKKyAgICAgICAgICAgIHN0ciA9ICJw
dCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BDOgorICAgICAgICAgICAgc3RyID0gInBjIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHOgorICAgICAgICAgICAgc3RyID0g
ImRlZyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1JBRDoKKyAgICAgICAgICAgIHN0ciA9ICJyYWQiOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgorICAgICAgICAgICAg
c3RyID0gImdyYWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19UVVJOOgorICAgICAgICAgICAgc3RyID0gInR1cm4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUzoKKyAgICAg
ICAgICAgIHN0ciA9ICJtcyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1M6CisgICAgICAgICAgICBzdHIgPSAicyI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0haOgorICAgICAg
ICAgICAgc3RyID0gIkh6IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfS0haOgorICAgICAgICAgICAgc3RyID0gImtIeiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gc3RyOworfQorCiBDU1NQYXJzZXJWYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6
cGFyc2VyVmFsdWUoKSBjb25zdAogewogICAgIC8vIFdlIG9ubHkgaGF2ZSB0byBoYW5kbGUgYSBz
dWJzZXQgb2YgdHlwZXMuCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9uIDY3
MTYwKQorKysgV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM0LDEwICsxMzQsMTIgQEAgcHVibGljOgogICAgIGZsb2F0IGNvbXB1dGVMZW5ndGhGbG9h
dChSZW5kZXJTdHlsZSogY3VyclN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBib29sIGNv
bXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpOwogICAgIGZsb2F0IGNvbXB1dGVMZW5ndGhGbG9hdChS
ZW5kZXJTdHlsZSogY3VyclN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVs
dGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKTsKICAgICBkb3VibGUgY29t
cHV0ZUxlbmd0aERvdWJsZShSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEuMCwgYm9vbCBjb21wdXRpbmdGb250U2l6
ZSA9IGZhbHNlKTsKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aERvdWJsZUluVW5pdFR5cGUoUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgdW5zaWduZWQg
c2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMS4wLCBib29sIGNvbXB1dGluZ0Zv
bnRTaXplID0gZmFsc2UpOworICAgIGJvb2wgaXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUoKSBjb25z
dDsKIAogICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKICAgICB2b2lkIHNldFByaW1pdGl2ZVR5cGUo
dW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0gICAgCisKICAgICBkb3Vi
bGUgZ2V0RG91YmxlVmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBkb3VibGUgZ2V0RG91YmxlVmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwog
ICAgIGRvdWJsZSBnZXREb3VibGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubnVtOyB9
CkBAIC0xNzQsNiArMTc2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHBhcnNlU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgPSBmYWxzZSk7CiAgICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OworICAgIFN0cmluZyB1bml0U3RyaW5nKCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gNjcxNjApCisrKyBXZWJDb3JlL2Nzcy9DU1NT
dHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5k
ZWYgQ1NTU3R5bGVEZWNsYXJhdGlvbl9oCiAjZGVmaW5lIENTU1N0eWxlRGVjbGFyYXRpb25faAog
CisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlN0eWxlQmFzZS5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKQEAgLTQyLDYgKzQzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxOb2RlPiBnZXROb2RlKCkgY29uc3QgPSAwOworCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbExlbmd0aCgpOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCB2aXJ0
dWFsTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFsZW5ndGgoKTsgfQpAQCAtNTIsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldFBy
b3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwogICAgIFN0cmluZyBn
ZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIAor
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlW
YWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9w
ZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7CkBAIC02Nyw3ICs3MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gY29weSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOwotIAorCiAgICAgdm9pZCBkaWZm
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCog
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjcxNjEpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxMC0wOS0wOSAgWXV4aWFuZyBMdW8gIDxsdW95eEBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3BlcnRpZXMgd2l0aCBwaXhl
bC9wb3MgcHJlZml4IGFyZSBwcm9jZXNzZWQgaW5jb3JyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNzk5CisKKyAgICAgICAgKiBmYXN0L2Nz
cy9waXhlbC1wb3MtcHJlZml4LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
c3MvcGl4ZWwtcG9zLXByZWZpeC5odG1sOiBBZGRlZC4KKwogMjAxMC0wOS0wOSAgWXV6byBGdWpp
c2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9waXhlbC1wb3MtcHJlZml4LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9waXhlbC1wb3MtcHJlZml4
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3BpeGVs
LXBvcy1wcmVmaXgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACitU
aGlzIHRlc3QgY2hlY2tzIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0L3NldCBwaXhlbFdpZHRoIGFuZCBw
b3NXaWR0aCBjb3JyZWN0bHkgKG90aGVycyBsaWtlIHBpeGVsVG9wL3Bvc1RvcCBhcmUgc2ltaWxh
cikuCisKK3BpeGVsV2lkdGggd291bGRuJ3Qgd29yayBpbiBvbGRlciB2ZXJzaW9ucyB3aGVuIHVu
aXQgZGVzaWduYXRvciBvZiB0aGUgYXR0cmlidXRlIGlzICdlbScsICdleCcgb3IgJ3JlbScuCisK
K3Bvc1dpZHRoIGlzIGluY29ycmVjdGx5IHRyZWF0ZWQgYXMgcGl4ZWxXaWR0aCBpbiBvbGRlciB2
ZXJzaW9ucy4KKworR2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25h
dG9yIHB4OiBQQVNTCitHZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2ln
bmF0b3IgZW06IFBBU1MKK0dldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVz
aWduYXRvciBleDogUEFTUworR2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBk
ZXNpZ25hdG9yIHJlbTogUEFTUworR2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5p
dCBkZXNpZ25hdG9yIHB0OiBQQVNTCitHZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB3
aWR0aCBub3Qgc3BlY2lmaWVkOiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIHB4OiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIGVtOiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIGV4OiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIHJlbTogUEFTUworR2V0dGluZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFs
IHVuaXQgZGVzaWduYXRvciBwdDogUEFTUworR2V0dGluZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFs
IHdpZHRoIG5vdCBzcGVjaWZpZWQ6IFBBU1MKK1NldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdp
bmFsIHVuaXQgZGVzaWduYXRvciBweDogUEFTUworU2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3Jp
Z2luYWwgdW5pdCBkZXNpZ25hdG9yIGVtOiBQQVNTCitTZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBv
cmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgZXg6IFBBU1MKK1NldHRpbmcgcGl4ZWxXaWR0aCB3aXRo
IG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06IFBBU1MKK1NldHRpbmcgcGl4ZWxXaWR0aCB3
aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBwdDogUEFTUworU2V0dGluZyBwaXhlbFdpZHRo
IHdpdGggb3JpZ2luYWwgd2lkdGggbm90IHNwZWNpZmllZDogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBweDogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBleDogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06IFBBU1MKK1NldHRpbmcgcG9zV2lk
dGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcHQ6IFBBU1MKK1NldHRpbmcgcG9zV2lk
dGggd2l0aCBvcmlnaW5hbCB3aWR0aCBub3Qgc3BlY2lmaWVkOiBQQVNTCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9waXhlbC1wb3MtcHJlZml4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jc3MvcGl4ZWwtcG9zLXByZWZpeC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jc3MvcGl4ZWwtcG9zLXByZWZpeC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcyIEBACis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBwcmludChtZXNzYWdlKQor
eworICAgIHZhciBwYXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAg
IHBhcmFncmFwaC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChwYXJh
Z3JhcGgpOworfQorZnVuY3Rpb24gc3RhdHVzKGJvb2xWYWx1ZSkgeworICByZXR1cm4gYm9vbFZh
bHVlID8gJ1BBU1MnIDogJ0ZBSUwnOworfQorZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdp
bmFsIHVuaXQgZGVzaWduYXRvciBweDogIiArIHN0YXR1cyhweC5zdHlsZS5waXhlbFdpZHRoID09
IHB4Lm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9y
aWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogIiArIHN0YXR1cyhlbS5zdHlsZS5waXhlbFdpZHRo
ID09IGVtLm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3aXRo
IG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBleDogIiArIHN0YXR1cyhleC5zdHlsZS5waXhlbFdp
ZHRoID09IGV4Lm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3
aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06ICIgKyBzdGF0dXMocmVtLnN0eWxlLnBp
eGVsV2lkdGggPT0gcmVtLm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxX
aWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBwdDogIiArIHN0YXR1cyhwdC5zdHls
ZS5waXhlbFdpZHRoID09IHB0Lm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4
ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHdpZHRoIG5vdCBzcGVjaWZpZWQ6ICIgKyBzdGF0dXMobm93
aWR0aC5zdHlsZS5waXhlbFdpZHRoID09IDApKTsKKyAgICAvLyBMb2dpYyBmb3IgaGFuZGxpbmcg
b3RoZXIgbGVuZ3RoIHVuaXQgdHlwZXMgaW5zaWRlIFdlYktpdCBhcmUgdGhlIHNhbWUgd2l0aCAn
cHQnLCBzbyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIHRoZW0KKworICAgIHByaW50KCJHZXR0aW5n
IHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHB4OiAiICsgc3RhdHVzKHB4
LnN0eWxlLnBvc1dpZHRoID09IHBhcnNlRmxvYXQocHguc3R5bGUud2lkdGgpKSk7CisgICAgcHJp
bnQoIkdldHRpbmcgcG9zV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgZW06ICIg
KyBzdGF0dXMoZW0uc3R5bGUucG9zV2lkdGggPT0gcGFyc2VGbG9hdChlbS5zdHlsZS53aWR0aCkp
KTsKKyAgICBwcmludCgiR2V0dGluZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWdu
YXRvciBleDogIiArIHN0YXR1cyhleC5zdHlsZS5wb3NXaWR0aCA9PSBwYXJzZUZsb2F0KGV4LnN0
eWxlLndpZHRoKSkpOworICAgIHByaW50KCJHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIHJlbTogIiArIHN0YXR1cyhyZW0uc3R5bGUucG9zV2lkdGggPT0gcGFy
c2VGbG9hdChyZW0uc3R5bGUud2lkdGgpKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcG9zV2lkdGgg
d2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcHQ6ICIgKyBzdGF0dXMocHQuc3R5bGUucG9z
V2lkdGggPT0gcGFyc2VGbG9hdChwdC5zdHlsZS53aWR0aCkpKTsKKyAgICBwcmludCgiR2V0dGlu
ZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFsIHdpZHRoIG5vdCBzcGVjaWZpZWQ6ICIgKyBzdGF0dXMo
bm93aWR0aC5zdHlsZS5wb3NXaWR0aCA9PSAwKSk7CisKKyAgICBweC5zdHlsZS5waXhlbFdpZHRo
ID0gMjAwOworICAgIHByaW50KCJTZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0
IGRlc2lnbmF0b3IgcHg6ICIgKyBzdGF0dXMocHguc3R5bGUud2lkdGggPT0gJzIwMHB4JykpOwor
ICAgIGVtLnN0eWxlLnBpeGVsV2lkdGggPSAyMDA7CisgICAgcHJpbnQoIlNldHRpbmcgcGl4ZWxX
aWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogIiArIHN0YXR1cyhlbS5vZmZz
ZXRXaWR0aCA9PSAyMDAgJiYgZW0uc3R5bGUud2lkdGguc3Vic3RyKC0yLCAyKSA9PSAnZW0nKSk7
CisgICAgZXguc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0dGluZyBwaXhl
bFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIGV4OiAiICsgc3RhdHVzKGV4Lm9m
ZnNldFdpZHRoID09IDIwMCAmJiBleC5zdHlsZS53aWR0aC5zdWJzdHIoLTIsIDIpID09ICdleCcp
KTsKKyAgICByZW0uc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0dGluZyBw
aXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHJlbTogIiArIHN0YXR1cyhy
ZW0ub2Zmc2V0V2lkdGggPT0gMjAwICYmIHJlbS5zdHlsZS53aWR0aC5zdWJzdHIoLTMsIDMpID09
ICdyZW0nKSk7CisgICAgcHQuc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0
dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHB0OiAiICsgc3Rh
dHVzKHB0Lm9mZnNldFdpZHRoID09IDIwMCAmJiBwdC5zdHlsZS53aWR0aC5zdWJzdHIoLTIsIDIp
ID09ICdwdCcpKTsKKyAgICBub3dpZHRoLnN0eWxlLnBpeGVsV2lkdGggPSAyMDA7CisgICAgcHJp
bnQoIlNldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHdpZHRoIG5vdCBzcGVjaWZpZWQ6
ICIgKyBzdGF0dXMobm93aWR0aC5zdHlsZS53aWR0aCA9PSAnMjAwcHgnKSk7CisKKyAgICBweC5z
dHlsZS5wb3NXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0dGluZyBwb3NXaWR0aCB3aXRoIG9y
aWdpbmFsIHVuaXQgZGVzaWduYXRvciBweDogIiArIHN0YXR1cyhweC5zdHlsZS53aWR0aCA9PSAn
MjAwcHgnKSk7CisgICAgZW0uc3R5bGUucG9zV2lkdGggPSAyMDA7CisgICAgcHJpbnQoIlNldHRp
bmcgcG9zV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgZW06ICIgKyBzdGF0dXMo
ZW0uc3R5bGUud2lkdGggPT0gJzIwMGVtJykpOworICAgIGV4LnN0eWxlLnBvc1dpZHRoID0gMjAw
OworICAgIHByaW50KCJTZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25h
dG9yIGV4OiAiICsgc3RhdHVzKGV4LnN0eWxlLndpZHRoID09ICcyMDBleCcpKTsKKyAgICByZW0u
c3R5bGUucG9zV2lkdGggPSAyMDA7CisgICAgcHJpbnQoIlNldHRpbmcgcG9zV2lkdGggd2l0aCBv
cmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcmVtOiAiICsgc3RhdHVzKHJlbS5zdHlsZS53aWR0aCA9
PSAnMjAwcmVtJykpOworICAgIHB0LnN0eWxlLnBvc1dpZHRoID0gMjAwOworICAgIHByaW50KCJT
ZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHB0OiAiICsgc3Rh
dHVzKHB0LnN0eWxlLndpZHRoID09ICcyMDBwdCcpKTsKKyAgICBub3dpZHRoLnN0eWxlLnBvc1dp
ZHRoID0gMjAwOworICAgIHByaW50KCJTZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgd2lk
dGggbm90IHNwZWNpZmllZDogIiArIHN0YXR1cyhub3dpZHRoLnN0eWxlLndpZHRoID09ICcyMDBw
eCcpKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+
VGhpcyB0ZXN0IGNoZWNrcyB0byBzZWUgaWYgd2UgY2FuIGdldC9zZXQgcGl4ZWxXaWR0aCBhbmQg
cG9zV2lkdGggY29ycmVjdGx5IChvdGhlcnMgbGlrZSBwaXhlbFRvcC9wb3NUb3AgYXJlIHNpbWls
YXIpLjwvcD4KKzxwPnBpeGVsV2lkdGggd291bGRuJ3Qgd29yayBpbiBvbGRlciB2ZXJzaW9ucyB3
aGVuIHVuaXQgZGVzaWduYXRvciBvZiB0aGUgYXR0cmlidXRlIGlzICdlbScsICdleCcgb3IgJ3Jl
bScuPC9wPgorPHA+cG9zV2lkdGggaXMgaW5jb3JyZWN0bHkgdHJlYXRlZCBhcyBwaXhlbFdpZHRo
IGluIG9sZGVyIHZlcnNpb25zLjwvcD4KKzxocj4KKzxwPjxvbCBpZD0nY29uc29sZSc+PG9sPjwv
cD4KKzxkaXYgaWQ9J3B4JyBzdHlsZT0nd2lkdGg6MTAwcHgnPjwvZGl2PgorPGRpdiBpZD0nZW0n
IHN0eWxlPSd3aWR0aDoxMDBlbSc+PC9kaXY+Cis8ZGl2IGlkPSdleCcgc3R5bGU9J3dpZHRoOjEw
MGV4Jz48L2Rpdj4KKzxkaXYgaWQ9J3JlbScgc3R5bGU9J3dpZHRoOjEwMHJlbSc+PC9kaXY+Cis8
ZGl2IGlkPSdwdCcgc3R5bGU9J3dpZHRoOjEwMHB0Jz48L2Rpdj4KKzxkaXYgaWQ9J25vd2lkdGgn
PjwvZGl2PgorPC9ib2R5Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67151</attachid>
            <date>2010-09-09 21:56:01 -0700</date>
            <delta_ts>2010-09-22 19:43:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pixel.patch</filename>
            <type>text/plain</type>
            <size>32393</size>
            <attacher name="Yuxiang Luo">luoyx</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzE2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDktMDkgIFl1eGlhbmcgTHVvICA8bHVveXhAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm9w
ZXJ0aWVzIHdpdGggcGl4ZWwvcG9zIHByZWZpeCBhcmUgcHJvY2Vzc2VkIGluY29ycmVjdGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc5OQorCisg
ICAgICAgIFRlc3Q6IGZhc3QvY3NzL3BpeGVsLXBvcy1wcmVmaXguaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNzc1Byb3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVj
bGFyYXRpb246Om5hbWVHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xh
cmF0aW9uOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjc3NQcm9wZXJ0
eUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6VjhDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZFBy
b3BlcnR5R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
bmFtZWRQcm9wZXJ0eVNldHRlcik6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpnZXROb2RlKToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXROb2RlKToK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVGYWN0
b3JGb3JDb252ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpj
b21wdXRlTGVuZ3RoRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlTGVuZ3RoRG91YmxlSW5Vbml0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cmltaXRpdmVWYWx1ZTo6aXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRTdHJpbmcpOgorICAgICAgICAqIGNzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmg6IEFkZCBw
dXJlIHZpcnR1YWwgZnVuY3Rpb24gJ2dldE5vZGUnIHdoaWNoCisgICAgICAgIHJldHVybnMgb3du
ZXIgbm9kZSBvZiB0aGUgc3R5bGUgb2JqZWN0LiBGb3IgcGl4ZWwvcG9zLXByZWZpeAorICAgICAg
ICBwcm9wZXJ0aWVzLCBpZiBvcmlnaW5hbCB1bml0IHR5cGUgaXMgJ2VtJyBvciAnZXgnLCB0aGUg
cmVuZGVyIHN0eWxlIG9mCisgICAgICAgIHRoZSBvd25lciBub2RlIGlzIG5lZWRlZCBmb3IgY29t
cHV0aW5nLgorCiAyMDEwLTA5LTA5ICBBbGV4ZXkgTWFyaW5pY2hldiAgPGFtYXJpbmljaGV2QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDY3MTYwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxl
RGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsMTIgQEAg
c3RhdGljIGJvb2wgaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KGNvbgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0eU5hbWUoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBib29sKiBoYWRQaXhlbE9yUG9zUHJlZml4ID0gMCkKK3N0YXRpYyBTdHJp
bmcgY3NzUHJvcGVydHlOYW1lKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgYm9vbCog
aGFkUGl4ZWxQcmVmaXggPSAwLCBib29sKiBoYWRQb3NQcmVmaXggPSAwKQogewotICAgIGlmICho
YWRQaXhlbE9yUG9zUHJlZml4KQotICAgICAgICAqaGFkUGl4ZWxPclBvc1ByZWZpeCA9IGZhbHNl
OworICAgIGlmIChoYWRQaXhlbFByZWZpeCkKKyAgICAgICAgKmhhZFBpeGVsUHJlZml4ID0gZmFs
c2U7CisgICAgaWYgKGhhZFBvc1ByZWZpeCkKKyAgICAgICAgKmhhZFBvc1ByZWZpeCA9IGZhbHNl
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gcHJvcGVydHlOYW1lLmxlbmd0aCgpOwogICAgIGlm
ICghbGVuZ3RoKQpAQCAtMTAwLDEyICsxMDIsMTIgQEAgc3RhdGljIFN0cmluZyBjc3NQcm9wZXJ0
eU5hbWUoY29uc3QgSWRlbgogICAgICAgICBpICs9IDM7CiAgICAgZWxzZSBpZiAoaGFzQ1NTUHJv
cGVydHlOYW1lUHJlZml4KHByb3BlcnR5TmFtZSwgInBpeGVsIikpIHsKICAgICAgICAgaSArPSA1
OwotICAgICAgICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKLSAgICAgICAgICAgICpoYWRQaXhl
bE9yUG9zUHJlZml4ID0gdHJ1ZTsKKyAgICAgICAgaWYgKGhhZFBpeGVsUHJlZml4KQorICAgICAg
ICAgICAgKmhhZFBpeGVsUHJlZml4ID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGhhc0NTU1Byb3Bl
cnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJwb3MiKSkgewogICAgICAgICBpICs9IDM7Ci0g
ICAgICAgIGlmIChoYWRQaXhlbE9yUG9zUHJlZml4KQotICAgICAgICAgICAgKmhhZFBpeGVsT3JQ
b3NQcmVmaXggPSB0cnVlOworICAgICAgICBpZiAoaGFkUG9zUHJlZml4KQorICAgICAgICAgICAg
KmhhZFBvc1ByZWZpeCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQ
cmVmaXgocHJvcGVydHlOYW1lLCAid2Via2l0IikKICAgICAgICAgICAgIHx8IGhhc0NTU1Byb3Bl
cnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJraHRtbCIpCiAgICAgICAgICAgICB8fCBoYXND
U1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1lLCAiYXBwbGUiKSkKQEAgLTE0NiwyMSAr
MTQ4LDM4IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lR2V0dGUKIHsKICAg
ICBKU0NTU1N0eWxlRGVjbGFyYXRpb24qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NTU1N0eWxl
RGVjbGFyYXRpb24qPihhc09iamVjdChzbG90QmFzZSkpOwogCi0gICAgLy8gU2V0IHVwIHBpeGVs
T3JQb3MgYm9vbGVhbiB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdAotICAgIC8vIHBpeGVsVG9wIHJl
dHVybnMgIkNTUyBUb3AiIGFzIG51bWJlciB2YWx1ZSBpbiB1bml0IHBpeGVscwotICAgIC8vIHBv
c1RvcCByZXR1cm5zICJDU1MgdG9wIiBhcyBudW1iZXIgdmFsdWUgaW4gdW5pdCBwaXhlbHMgX2lm
XyBpdHMgYQorICAgIC8vIFNldCB1cCBwaXhlbCBhbmQgcG9zIGJvb2xlYW4gdG8gaGFuZGxlIHRo
ZSBmYWN0IHRoYXQKKyAgICAvLyBwaXhlbFRvcCByZXR1cm5zICJDU1MgdG9wIiBhcyBudW1iZXIg
dmFsdWUgaW4gdW5pdCBwaXhlbHMKKyAgICAvLyBwb3NUb3AgcmV0dXJucyAiQ1NTIHRvcCIgYXMg
bnVtYmVyIHZhbHVlIGluIG9yaWdpbmFsIHVuaXQgX2lmXyBpdHMgYQogICAgIC8vIHBvc2l0aW9u
ZWQgZWxlbWVudC4gaWYgaXQgaXMgbm90IGEgcG9zaXRpb25lZCBlbGVtZW50LCByZXR1cm4gMAog
ICAgIC8vIGZyb20gTVNJRSBkb2N1bWVudGF0aW9uIEZJWE1FOiBJTVBMRU1FTlQgVEhBVCAoRGly
aykKLSAgICBib29sIHBpeGVsT3JQb3M7Ci0gICAgU3RyaW5nIHByb3AgPSBjc3NQcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lLCAmcGl4ZWxPclBvcyk7CisgICAgYm9vbCBwaXhlbCwgcG9zOworICAg
IFN0cmluZyBwcm9wID0gY3NzUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgJnBpeGVsLCAmcG9z
KTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHYgPSB0aGlzT2JqLT5pbXBsKCktPmdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcCk7CisKICAgICBpZiAodikgewotICAgICAgICBpZiAocGl4ZWxPclBvcyAm
JiB2LT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1JVElWRV9WQUxVRSkKLSAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2KS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KSk7CisgICAgICAgIGlmICh2LT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1J
VElWRV9WQUxVRSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwdiA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHYpOworICAgICAgICAgICAg
aWYgKHBpeGVsKSB7CisgICAgICAgICAgICAgICAgLy8gcGl4ZWwqIGxpa2UgcGl4ZWxUb3AgcmV0
dXJucyBpbnRlZ2VyIGluc3RlYWQgb2YgZmxvYXQKKyAgICAgICAgICAgICAgICBpZiAocHYtPmlz
Q29tcHV0ZUxlbmd0aFVuaXRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPE5v
ZGU+IG5vZGUgPSB0aGlzT2JqLT5pbXBsKCktPmdldE5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBub2RlLT5jb21wdXRlZFN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiByb290U3R5bGUgPSBub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0
ZWRTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgcm9vdFN0eWxlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHB2LT5jb21wdXRl
TGVuZ3RoSW50KHN0eWxlLCByb290U3R5bGUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoZXhlYywgcHYtPmdldEludFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHB2LT5nZXRGbG9hdFZhbHVlKCkpOworICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChleGVjLCB2LT5jc3NUZXh0KCkpOwog
ICAgIH0KIAotICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAo
c3VjaCBhcyAicGFkZGluZyIpLCAKKyAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBzaG9ydGhh
bmQgcHJvcGVydHkgKHN1Y2ggYXMgInBhZGRpbmciKSwKICAgICAvLyBpdCBjYW4gb25seSBiZSBh
Y2Nlc3NlZCB1c2luZyBnZXRQcm9wZXJ0eVZhbHVlLgogCiAgICAgLy8gTWFrZSB0aGUgU1ZHICdm
aWx0ZXInIGF0dHJpYnV0ZSB1bmRldGVjdGFibGUsIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRo
ZSBJRSAnZmlsdGVyJyBhdHRyaWJ1dGUuCkBAIC0xNzYsMTAgKzE5NSwzMyBAQCBib29sIEpTQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6cHV0RGVsZWdhdGUoCiAgICAgaWYgKCFpc0NTU1Byb3BlcnR5TmFt
ZShwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29sIHBpeGVs
T3JQb3M7Ci0gICAgU3RyaW5nIHByb3AgPSBjc3NQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLCAm
cGl4ZWxPclBvcyk7CiAgICAgU3RyaW5nIHByb3BWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVs
bENoZWNrKGV4ZWMsIHZhbHVlKTsKLSAgICBpZiAocGl4ZWxPclBvcykKKworICAgIGJvb2wgcGl4
ZWwsIHBvczsKKyAgICBTdHJpbmcgcHJvcCA9IGNzc1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUs
ICZwaXhlbCwgJnBvcyk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2ID0gaW1wbCgpLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3ApOworICAgIGlmICh2ICYmIHYtPmNzc1ZhbHVlVHlwZSgpID09IENT
U1ZhbHVlOjpDU1NfUFJJTUlUSVZFX1ZBTFVFKSB7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcHYgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2KTsK
KyAgICAgICAgU3RyaW5nIHVuaXQgPSBwdi0+dW5pdFN0cmluZygpOworICAgICAgICBpZiAocGl4
ZWwpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0YXJnZXRWYWx1ZSA9IDA7CisgICAgICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBpeGVsVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHZhbHVlLnRvVUludDMyKGV4ZWMpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gcHYtPnByaW1pdGl2ZVR5cGUo
KTsKKyAgICAgICAgICAgIGlmIChwdi0+aXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUoKSkgeworICAg
ICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5nZXROb2RlKCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPmNvbXB1
dGVkU3R5bGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgcm9vdFN0eWxlKQorICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA9IHBpeGVsVmFsdWUtPmNvbXB1dGVMZW5ndGhE
b3VibGVJblVuaXRUeXBlKHN0eWxlLCByb290U3R5bGUsIHVuaXRUeXBlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gcGl4ZWxWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUodW5pdFR5cGUpOworICAgICAgICAgICAgcHJvcFZhbHVlID0gU3RyaW5nOjpudW1i
ZXIodGFyZ2V0VmFsdWUpICsgdW5pdDsKKyAgICAgICAgfSBlbHNlIGlmIChwb3MpCisgICAgICAg
ICAgICBwcm9wVmFsdWUgKz0gdW5pdDsKKyAgICB9IGVsc2UgaWYgKHBpeGVsIHx8IHBvcykKICAg
ICAgICAgcHJvcFZhbHVlICs9ICJweCI7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
aW1wbCgpLT5zZXRQcm9wZXJ0eShwcm9wLCBwcm9wVmFsdWUsIGVjKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAkocmV2aXNpb24gNjcxNjApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw4IEBAIHN0YXRpYyBib29sIGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChjb24KIGNsYXNz
IENTU1Byb3BlcnR5SW5mbyB7CiBwdWJsaWM6CiAgICAgaW50IHByb3BJRDsKLSAgICBib29sIGhh
ZFBpeGVsT3JQb3NQcmVmaXg7CisgICAgYm9vbCBoYWRQaXhlbFByZWZpeDsKKyAgICBib29sIGhh
ZFBvc1ByZWZpeDsKICAgICBib29sIHdhc0ZpbHRlcjsKIH07CiAKQEAgLTkzLDggKzk0LDggQEAg
cHVibGljOgogLy8gRXhhbXBsZTogJ2JhY2tncm91bmRQb3NpdGlvblknIC0+ICdiYWNrZ3JvdW5k
LXBvc2l0aW9uLXknCiAvLwogLy8gQWxzbywgY2VydGFpbiBwcmVmaXhlcyBzdWNoIGFzICdwb3Mn
LCAnY3NzLScgYW5kICdwaXhlbC0nIGFyZSBzdHJpcHBlZAotLy8gYW5kIHRoZSBoYWRQaXhlbE9y
UG9zUHJlZml4IG91dCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yCi0v
LyBub3QgdGhlIHByb3BlcnR5IG5hbWUgd2FzIHByZWZpeGVkIHdpdGggJ3Bvcy0nIG9yICdwaXhl
bC0nLgorLy8gYW5kIHRoZSBoYWRQaXhlbFByZWZpeC9oYWRQb3NQcmVmaXggb3V0IHBhcmFtZXRl
cnMgYXJlIHVzZWQgdG8gaW5kaWNhdGUKKy8vIHdoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSBu
YW1lIHdhcyBwcmVmaXhlZCB3aXRoICdwb3MtJyBvciAncGl4ZWwtJy4KIHN0YXRpYyBDU1NQcm9w
ZXJ0eUluZm8qIGNzc1Byb3BlcnR5SW5mbyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+djhQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2OFBy
b3BlcnR5TmFtZSk7CkBAIC0xMDMsNyArMTA0LDggQEAgc3RhdGljIENTU1Byb3BlcnR5SW5mbyog
Y3NzUHJvcGVydHlJbmZvKAogICAgIENTU1Byb3BlcnR5SW5mbyogcHJvcEluZm8gPSBtYXAuZ2V0
KHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wSW5mbykgewogICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVuZ3RoKCk7Ci0gICAgICAgIGJvb2wgaGFkUGl4ZWxPclBv
c1ByZWZpeCA9IGZhbHNlOworICAgICAgICBib29sIGhhZFBpeGVsUHJlZml4ID0gZmFsc2U7Cisg
ICAgICAgIGJvb2wgaGFkUG9zUHJlZml4ID0gZmFsc2U7CiAgICAgICAgIGlmICghbGVuZ3RoKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTExNiwxMCArMTE4LDEwIEBAIHN0YXRpYyBDU1NQ
cm9wZXJ0eUluZm8qIGNzc1Byb3BlcnR5SW5mbygKICAgICAgICAgICAgIGkgKz0gMzsKICAgICAg
ICAgZWxzZSBpZiAoaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KHByb3BlcnR5TmFtZSwgInBpeGVs
IikpIHsKICAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGhhZFBpeGVsT3JQb3NQcmVm
aXggPSB0cnVlOworICAgICAgICAgICAgaGFkUGl4ZWxQcmVmaXggPSB0cnVlOwogICAgICAgICB9
IGVsc2UgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJwb3MiKSkg
ewogICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgaGFkUGl4ZWxPclBvc1ByZWZpeCA9
IHRydWU7CisgICAgICAgICAgICBoYWRQb3NQcmVmaXggPSB0cnVlOwogICAgICAgICB9IGVsc2Ug
aWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJ3ZWJraXQiKQogICAg
ICAgICAgICAgICAgIHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJr
aHRtbCIpCiAgICAgICAgICAgICAgICAgfHwgaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KHByb3Bl
cnR5TmFtZSwgImFwcGxlIikpCkBAIC0xNDMsNyArMTQ1LDggQEAgc3RhdGljIENTU1Byb3BlcnR5
SW5mbyogY3NzUHJvcGVydHlJbmZvKAogICAgICAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3Bl
cnR5SUQocHJvcE5hbWUpOwogICAgICAgICBpZiAocHJvcGVydHlJRCkgewogICAgICAgICAgICAg
cHJvcEluZm8gPSBuZXcgQ1NTUHJvcGVydHlJbmZvKCk7Ci0gICAgICAgICAgICBwcm9wSW5mby0+
aGFkUGl4ZWxPclBvc1ByZWZpeCA9IGhhZFBpeGVsT3JQb3NQcmVmaXg7CisgICAgICAgICAgICBw
cm9wSW5mby0+aGFkUGl4ZWxQcmVmaXggPSBoYWRQaXhlbFByZWZpeDsKKyAgICAgICAgICAgIHBy
b3BJbmZvLT5oYWRQb3NQcmVmaXggPSBoYWRQb3NQcmVmaXg7CiAgICAgICAgICAgICBwcm9wSW5m
by0+d2FzRmlsdGVyID0gKHByb3BOYW1lID09ICJmaWx0ZXIiKTsKICAgICAgICAgICAgIHByb3BJ
bmZvLT5wcm9wSUQgPSBwcm9wZXJ0eUlEOwogICAgICAgICAgICAgbWFwLmFkZChwcm9wZXJ0eU5h
bWUsIHByb3BJbmZvKTsKQEAgLTE3MCwxMCArMTczLDIzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOENTU1N0eWxlRGVjbGFyYXQKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBp
bXAtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcEluZm8tPnByb3BJRCk7CiAgICAgaWYgKGNzc1Zh
bHVlKSB7Ci0gICAgICAgIGlmIChwcm9wSW5mby0+aGFkUGl4ZWxPclBvc1ByZWZpeCAmJgotICAg
ICAgICAgICAgY3NzVmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfUFJJTUlU
SVZFX1ZBTFVFKSB7Ci0gICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oCi0gICAgICAgICAgICAgICAgY3NzVmFsdWUuZ2V0KCkp
LT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAgaWYg
KGNzc1ZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1JVElWRV9WQUxV
RSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwdiA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChwcm9wSW5mby0+aGFkUGl4ZWxQcmVmaXgpIHsKKyAgICAgICAgICAgICAgICAvLyBwaXhlbCog
bGlrZSBwaXhlbFRvcCByZXR1cm5zIGludGVnZXIgaW5zdGVhZCBvZiBmbG9hdAorICAgICAgICAg
ICAgICAgIGlmIChwdi0+aXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcC0+Z2V0Tm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSA9IG5vZGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5j
b21wdXRlZFN0eWxlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiByb290U3R5
bGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3KHB2LT5j
b21wdXRlTGVuZ3RoSW50KHN0eWxlLCByb290U3R5bGUpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHY4OjpOdW1iZXI6Ok5ldygwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhwdi0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByb3BJbmZv
LT5oYWRQb3NQcmVmaXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhw
di0+Z2V0RmxvYXRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdjhTdHJpbmdP
ck51bGwoY3NzVmFsdWUtPmNzc1RleHQoKSk7CiAgICAgfQpAQCAtMTk5LDcgKzIxNSwzMCBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDU1NTdHlsZURlY2xhcmF0CiAgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgU3RyaW5nIHByb3BlcnR5VmFsdWUgPSB0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKLSAgICBpZiAocHJvcEluZm8tPmhh
ZFBpeGVsT3JQb3NQcmVmaXgpCisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gaW1w
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJbmZvLT5wcm9wSUQpOworICAgIGlmIChjc3NWYWx1
ZSAmJiBjc3NWYWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19QUklNSVRJVkVf
VkFMVUUpIHsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwdiA9IHN0YXRpY19w
b2ludGVyX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlKTsKKyAgICAgICAgU3RyaW5n
IHVuaXQgPSBwdi0+dW5pdFN0cmluZygpOworICAgICAgICBpZiAocHJvcEluZm8tPmhhZFBpeGVs
UHJlZml4KSB7CisgICAgICAgICAgICBkb3VibGUgdGFyZ2V0VmFsdWUgPSAwOworICAgICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwaXhlbFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZS0+SW50ZWdlclZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBwdi0+cHJpbWl0aXZl
VHlwZSgpOworICAgICAgICAgICAgaWYgKHB2LT5pc0NvbXB1dGVMZW5ndGhVbml0VHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXAtPmdldE5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgpOworICAgICAgICAgICAgICAgIFJlbmRlclN0
eWxlKiByb290U3R5bGUgPSBub2RlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+Y29t
cHV0ZWRTdHlsZSgpOworICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiByb290U3R5bGUpCisg
ICAgICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlID0gcGl4ZWxWYWx1ZS0+Y29tcHV0ZUxlbmd0
aERvdWJsZUluVW5pdFR5cGUoc3R5bGUsIHJvb3RTdHlsZSwgdW5pdFR5cGUpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0YXJnZXRWYWx1
ZSA9IHBpeGVsVmFsdWUtPmdldERvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICAgICAgICAgIHBy
b3BlcnR5VmFsdWUgPSBTdHJpbmc6Om51bWJlcih0YXJnZXRWYWx1ZSkgKyB1bml0OworICAgICAg
ICB9IGVsc2UgaWYgKHByb3BJbmZvLT5oYWRQb3NQcmVmaXgpCisgICAgICAgICAgICBwcm9wZXJ0
eVZhbHVlICs9IHVuaXQ7CisgICAgfSBlbHNlIGlmIChwcm9wSW5mby0+aGFkUGl4ZWxQcmVmaXgg
fHwgcHJvcEluZm8tPmhhZFBvc1ByZWZpeCkKICAgICAgICAgcHJvcGVydHlWYWx1ZS5hcHBlbmQo
InB4Iik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiA2NzE2MCkKKysrIFdlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
IAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBnZXROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlOyB9CisKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZpcnR1YWxMZW5ndGgoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIApAQCAtNzYs
NyArNzgsNyBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JT
aGFkb3coY29uc3QgU2hhZG93RGF0YSosIGludCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiwgY29u
c3QgQ29sb3ImKSBjb25zdDsKLSAgICAKKwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAg
UHNldWRvSWQgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyOwogICAgIGJvb2wgbV9hbGxvd1Zpc2l0
ZWRTdHlsZTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAko
cmV2aXNpb24gNjcxNjApCisrKyBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMyArNzUsMTQgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24mKTsKLSAgICAKKwogICAgIHR5cGVkZWYgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLCBtX3Byb3BlcnRpZXMu
YmVnaW4oKSk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSB7IHJldHVybiBjb25zdF9pdGVy
YXRvcih0aGlzLCBtX3Byb3BlcnRpZXMuZW5kKCkpOyB9CiAKICAgICB2b2lkIHNldE5vZGUoTm9k
ZSogbm9kZSkgeyBtX25vZGUgPSBub2RlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+
IGdldE5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBp
c011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0x
NTIsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZ2V0Q29tbW9uVmFsdWUoY29uc3Qg
aW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyKSBjb25zdDsKICAgICBTdHJpbmcgZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgdW5zaWduZWQgbnVtYmVyKSBj
b25zdDsKICAgICBTdHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0
OwotICAgIAorCiAgICAgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKGNvbnN0IENTU1Byb3BlcnR5
JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAwKTsKICAgICBib29sIHJlbW92ZVNob3J0aGFuZFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpOwogCkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiA2NzE2MCkKKysrIFdlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYgKzMwMywzMiBAQCB2b2lk
IENTU1ByaW1pdGl2ZVZhbHVlOjpjbGVhbnVwKCkKICAgICB9CiB9CiAKK3N0YXRpYyBkb3VibGUg
c2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKTsKKworc3Rh
dGljIGRvdWJsZSBjb21wdXRlRmFjdG9yRm9yQ29udmVyc2lvbihSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGJvb2wgY29tcHV0aW5nRm9udFNpemUsIHVuc2lnbmVk
IHNob3J0IHVuaXRUeXBlKQoreworICAgIGRvdWJsZSBmYWN0b3IgPSAxLjA7CisgICAgc3dpdGNo
ICh1bml0VHlwZSkgeworICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TOgor
ICAgICAgICAgICAgZmFjdG9yID0gY29tcHV0aW5nRm9udFNpemUgPyBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpIDogc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1
dGVkU2l6ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19FWFM6CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBhIGJ1ZyByaWdo
dCBub3cgd2hlcmUgdGhlIHpvb20gd2lsbCBiZSBhcHBsaWVkIHR3aWNlIHRvIEVYIHVuaXRzLgor
ICAgICAgICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgdG8gY29tcHV0ZSBFWCB1c2luZyBmb250TWV0
cmljcyBmb3IgdGhlIG9yaWdpbmFsIHNwZWNpZmllZFNpemUgYW5kIG5vdCB1c2UKKyAgICAgICAg
ICAgIC8vIG91ciBhY3R1YWwgY29uc3RydWN0ZWQgcmVuZGVyaW5nIGZvbnQuCisgICAgICAgICAg
ICBmYWN0b3IgPSBzdHlsZS0+Zm9udCgpLnhIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUzoKKyAgICAgICAgICAgIGZh
Y3RvciA9IGNvbXB1dGluZ0ZvbnRTaXplID8gcm9vdFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5z
cGVjaWZpZWRTaXplKCkgOiByb290U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6
ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBm
YWN0b3IgPSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24odW5pdFR5cGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhY3RvcjsKK30KKwogaW50IENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSkKIHsKICAgICByZXR1cm4gcm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9uPGlu
dCwgSU5UX01BWCwgSU5UX01JTj4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9vdFN0eWxl
KSk7CkBAIC0zNDcsNTcgKzM3MywzMCBAQCBmbG9hdCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZUxlbmd0aEZsCiAKIGRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJs
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKQogewotICAgIHVuc2lnbmVkIHNob3J0IHR5
cGUgPSBwcmltaXRpdmVUeXBlKCk7CisgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGhEb3VibGVJblVu
aXRUeXBlKHN0eWxlLCByb290U3R5bGUsIENTU19QWCwgbXVsdGlwbGllciwgY29tcHV0aW5nRm9u
dFNpemUpOworfQogCitkb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3Vi
bGVJblVuaXRUeXBlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwg
dW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGlu
Z0ZvbnRTaXplKQorewogICAgIC8vIFdlIGRvIG5vdCBhcHBseSB0aGUgem9vbSBmYWN0b3Igd2hl
biB3ZSBhcmUgY29tcHV0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZm9udC1zaXplIHByb3BlcnR5LiAg
VGhlIHpvb21pbmcKICAgICAvLyBmb3IgZm9udCBzaXplcyBpcyBtdWNoIG1vcmUgY29tcGxpY2F0
ZWQsIHNpbmNlIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQgZW5mb3JjaW5nIHRoZSBtaW5pbXVtIGZv
bnQgc2l6ZSBwcmVmZXJlbmNlCiAgICAgLy8gYXMgd2VsbCBhcyBlbmZvcmNpbmcgdGhlIGltcGxp
Y2l0ICJzbWFydCBtaW5pbXVtLiIgIEluIGFkZGl0aW9uIHRoZSBDU1MgcHJvcGVydHkgdGV4dC1z
aXplLWFkanVzdCBpcyB1c2VkIHRvCiAgICAgLy8gcHJldmVudCB0ZXh0IGZyb20gem9vbWluZyBh
dCBhbGwuICBUaGVyZWZvcmUgd2Ugd2lsbCBub3QgYXBwbHkgdGhlIHpvb20gaGVyZSBpZiB3ZSBh
cmUgY29tcHV0aW5nIGZvbnQtc2l6ZS4KICAgICBib29sIGFwcGx5Wm9vbU11bHRpcGxpZXIgPSAh
Y29tcHV0aW5nRm9udFNpemU7CisgICAgaWYgKG1fdHlwZSA9PSBDU1NfRU1TIHx8IG1fdHlwZSA9
PSBDU1NfRVhTIHx8IG1fdHlwZSA9PSBDU1NfUkVNUykKKyAgICAgICAgYXBwbHlab29tTXVsdGlw
bGllciA9IGZhbHNlOwogCi0gICAgZG91YmxlIGZhY3RvciA9IDEuMDsKLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgY2FzZSBDU1NfRU1TOgotICAgICAgICAgICAgYXBwbHlab29tTXVsdGlw
bGllciA9IGZhbHNlOwotICAgICAgICAgICAgZmFjdG9yID0gY29tcHV0aW5nRm9udFNpemUgPyBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpIDogc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ1NTX0VYUzoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBoYXZlIGEgYnVnIHJpZ2h0IG5v
dyB3aGVyZSB0aGUgem9vbSB3aWxsIGJlIGFwcGxpZWQgdHdpY2UgdG8gRVggdW5pdHMuCi0gICAg
ICAgICAgICAvLyBXZSByZWFsbHkgbmVlZCB0byBjb21wdXRlIEVYIHVzaW5nIGZvbnRNZXRyaWNz
IGZvciB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkU2l6ZSBhbmQgbm90IHVzZQotICAgICAgICAgICAg
Ly8gb3VyIGFjdHVhbCBjb25zdHJ1Y3RlZCByZW5kZXJpbmcgZm9udC4KLSAgICAgICAgICAgIGFw
cGx5Wm9vbU11bHRpcGxpZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGZhY3RvciA9IHN0eWxlLT5m
b250KCkueEhlaWdodCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1JF
TVM6Ci0gICAgICAgICAgICBhcHBseVpvb21NdWx0aXBsaWVyID0gZmFsc2U7Ci0gICAgICAgICAg
ICBmYWN0b3IgPSBjb21wdXRpbmdGb250U2l6ZSA/IHJvb3RTdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkuc3BlY2lmaWVkU2l6ZSgpIDogcm9vdFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRl
ZFNpemUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QWDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19DTToKLSAgICAgICAgICAgIGZhY3RvciA9
IGNzc1BpeGVsc1BlckluY2ggLyAyLjU0OyAvLyAoMi41NCBjbS9pbikKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU19NTToKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVs
c1BlckluY2ggLyAyNS40OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0lO
OgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU19QVDoKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVs
c1BlckluY2ggLyA3Mi4wOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BD
OgotICAgICAgICAgICAgLy8gMSBwYyA9PSAxMiBwdAotICAgICAgICAgICAgZmFjdG9yID0gY3Nz
UGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gLTEuMDsKLSAgICB9Ci0KKyAgICAvLyBGaXJz
dCBjb252ZXJ0IHRoZSB2YWx1ZSBmcm9tIG1fdHlwZSBpbnRvIENTU1BpeGVscworICAgIGRvdWJs
ZSBmYWN0b3IgPSBjb21wdXRlRmFjdG9yRm9yQ29udmVyc2lvbihzdHlsZSwgcm9vdFN0eWxlLCBj
b21wdXRpbmdGb250U2l6ZSwgbV90eXBlKTsKICAgICBkb3VibGUgcmVzdWx0ID0gZ2V0RG91Ymxl
VmFsdWUoKSAqIGZhY3RvcjsKKworICAgIC8vIE5vdyBjb252ZXJ0IGZyb20gQ1NTUGl4ZWxzIHRv
IHRoZSBzcGVjaWZpZWQgdW5pdFR5cGUKKyAgICBmYWN0b3IgPSBjb21wdXRlRmFjdG9yRm9yQ29u
dmVyc2lvbihzdHlsZSwgcm9vdFN0eWxlLCBjb21wdXRpbmdGb250U2l6ZSwgdW5pdFR5cGUpOwor
ICAgIHJlc3VsdCAvPSBmYWN0b3I7CisKICAgICBpZiAoIWFwcGx5Wm9vbU11bHRpcGxpZXIgfHwg
bXVsdGlwbGllciA9PSAxLjApCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgIAorCiAgICAg
Ly8gQW55IG9yaWdpbmFsIHJlc3VsdCB0aGF0IHdhcyA+PSAxIHNob3VsZCBub3QgYmUgYWxsb3dl
ZCB0byBmYWxsIGJlbG93IDEuICBUaGlzIGtlZXBzIGJvcmRlciBsaW5lcyBmcm9tCiAgICAgLy8g
dmFuaXNoaW5nLgogICAgIGRvdWJsZSB6b29tZWRSZXN1bHQgPSByZXN1bHQgKiBtdWx0aXBsaWVy
OwpAQCAtNDA2LDYgKzQwNSwxMSBAQCBkb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVM
ZW5ndGhECiAgICAgcmV0dXJuIHpvb21lZFJlc3VsdDsKIH0KIAorYm9vbCBDU1NQcmltaXRpdmVW
YWx1ZTo6aXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiAobV90
eXBlID09IENTU19FTVMgfHwgbV90eXBlID09IENTU19FWFMgfHwgbV90eXBlID09IENTU19SRU1T
KTsKK30KKwogdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBz
aG9ydCB1bml0VHlwZSwgZG91YmxlIGZsb2F0VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGVjID0gMDsKQEAgLTgzMSw2ICs4MzUsNjcgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVl
Ojpjc3NUZXh0KCkgY29ucwogICAgIHJldHVybiB0ZXh0OwogfQogCitTdHJpbmcgQ1NTUHJpbWl0
aXZlVmFsdWU6OnVuaXRTdHJpbmcoKSBjb25zdAoreworICAgIFN0cmluZyBzdHI7CisgICAgc3dp
dGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUzoK
KyAgICAgICAgICAgIHN0ciA9ICJlbSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVM6CisgICAgICAgICAgICBzdHIgPSAicmVtIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RVhTOgorICAgICAgICAgICAgc3RyID0gImV4IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6CisgICAgICAgICAgICBzdHIgPSAicHgi
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DTToKKyAgICAgICAgICAgIHN0ciA9ICJjbSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NOgorICAgICAgICAgICAgc3RyID0gIm1t
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSU46CisgICAgICAgICAgICBzdHIgPSAiaW4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKKyAgICAgICAgICAgIHN0ciA9ICJw
dCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BDOgorICAgICAgICAgICAgc3RyID0gInBjIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHOgorICAgICAgICAgICAgc3RyID0g
ImRlZyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1JBRDoKKyAgICAgICAgICAgIHN0ciA9ICJyYWQiOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgorICAgICAgICAgICAg
c3RyID0gImdyYWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19UVVJOOgorICAgICAgICAgICAgc3RyID0gInR1cm4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUzoKKyAgICAg
ICAgICAgIHN0ciA9ICJtcyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1M6CisgICAgICAgICAgICBzdHIgPSAicyI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0haOgorICAgICAg
ICAgICAgc3RyID0gIkh6IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfS0haOgorICAgICAgICAgICAgc3RyID0gImtIeiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gc3RyOworfQorCiBDU1NQYXJzZXJWYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6
cGFyc2VyVmFsdWUoKSBjb25zdAogewogICAgIC8vIFdlIG9ubHkgaGF2ZSB0byBoYW5kbGUgYSBz
dWJzZXQgb2YgdHlwZXMuCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9uIDY3
MTYwKQorKysgV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM0LDEwICsxMzQsMTIgQEAgcHVibGljOgogICAgIGZsb2F0IGNvbXB1dGVMZW5ndGhGbG9h
dChSZW5kZXJTdHlsZSogY3VyclN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBib29sIGNv
bXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpOwogICAgIGZsb2F0IGNvbXB1dGVMZW5ndGhGbG9hdChS
ZW5kZXJTdHlsZSogY3VyclN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVs
dGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKTsKICAgICBkb3VibGUgY29t
cHV0ZUxlbmd0aERvdWJsZShSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEuMCwgYm9vbCBjb21wdXRpbmdGb250U2l6
ZSA9IGZhbHNlKTsKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aERvdWJsZUluVW5pdFR5cGUoUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgdW5zaWduZWQg
c2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMS4wLCBib29sIGNvbXB1dGluZ0Zv
bnRTaXplID0gZmFsc2UpOworICAgIGJvb2wgaXNDb21wdXRlTGVuZ3RoVW5pdFR5cGUoKSBjb25z
dDsKIAogICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKICAgICB2b2lkIHNldFByaW1pdGl2ZVR5cGUo
dW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0gICAgCisKICAgICBkb3Vi
bGUgZ2V0RG91YmxlVmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBkb3VibGUgZ2V0RG91YmxlVmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwog
ICAgIGRvdWJsZSBnZXREb3VibGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubnVtOyB9
CkBAIC0xNzQsNiArMTc2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHBhcnNlU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgPSBmYWxzZSk7CiAgICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OworICAgIFN0cmluZyB1bml0U3RyaW5nKCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gNjcxNjApCisrKyBXZWJDb3JlL2Nzcy9DU1NT
dHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5k
ZWYgQ1NTU3R5bGVEZWNsYXJhdGlvbl9oCiAjZGVmaW5lIENTU1N0eWxlRGVjbGFyYXRpb25faAog
CisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlN0eWxlQmFzZS5oIgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKQEAgLTQyLDYgKzQzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxOb2RlPiBnZXROb2RlKCkgY29uc3QgPSAwOworCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gdmlydHVhbExlbmd0aCgpOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCB2aXJ0
dWFsTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFsZW5ndGgoKTsgfQpAQCAtNTIsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldFBy
b3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwogICAgIFN0cmluZyBn
ZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIAor
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlW
YWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9w
ZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7CkBAIC02Nyw3ICs3MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gY29weSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOwotIAorCiAgICAgdm9pZCBkaWZm
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCog
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjcxNjEpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxMC0wOS0wOSAgWXV4aWFuZyBMdW8gIDxsdW95eEBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3BlcnRpZXMgd2l0aCBwaXhl
bC9wb3MgcHJlZml4IGFyZSBwcm9jZXNzZWQgaW5jb3JyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNzk5CisKKyAgICAgICAgKiBmYXN0L2Nz
cy9waXhlbC1wb3MtcHJlZml4LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
c3MvcGl4ZWwtcG9zLXByZWZpeC5odG1sOiBBZGRlZC4KKwogMjAxMC0wOS0wOSAgWXV6byBGdWpp
c2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9waXhlbC1wb3MtcHJlZml4LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9waXhlbC1wb3MtcHJlZml4
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3BpeGVs
LXBvcy1wcmVmaXgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACitU
aGlzIHRlc3QgY2hlY2tzIHRvIHNlZSBpZiB3ZSBjYW4gZ2V0L3NldCBwaXhlbFdpZHRoIGFuZCBw
b3NXaWR0aCBjb3JyZWN0bHkgKG90aGVycyBsaWtlIHBpeGVsVG9wL3Bvc1RvcCBhcmUgc2ltaWxh
cikuCisKK3BpeGVsV2lkdGggd291bGRuJ3Qgd29yayBpbiBvbGRlciB2ZXJzaW9ucyB3aGVuIHVu
aXQgZGVzaWduYXRvciBvZiB0aGUgYXR0cmlidXRlIGlzICdlbScsICdleCcgb3IgJ3JlbScuCisK
K3Bvc1dpZHRoIGlzIGluY29ycmVjdGx5IHRyZWF0ZWQgYXMgcGl4ZWxXaWR0aCBpbiBvbGRlciB2
ZXJzaW9ucy4KKworR2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25h
dG9yIHB4OiBQQVNTCitHZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2ln
bmF0b3IgZW06IFBBU1MKK0dldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVz
aWduYXRvciBleDogUEFTUworR2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBk
ZXNpZ25hdG9yIHJlbTogUEFTUworR2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5p
dCBkZXNpZ25hdG9yIHB0OiBQQVNTCitHZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB3
aWR0aCBub3Qgc3BlY2lmaWVkOiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIHB4OiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIGVtOiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIGV4OiBQQVNTCitHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIHJlbTogUEFTUworR2V0dGluZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFs
IHVuaXQgZGVzaWduYXRvciBwdDogUEFTUworR2V0dGluZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFs
IHdpZHRoIG5vdCBzcGVjaWZpZWQ6IFBBU1MKK1NldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdp
bmFsIHVuaXQgZGVzaWduYXRvciBweDogUEFTUworU2V0dGluZyBwaXhlbFdpZHRoIHdpdGggb3Jp
Z2luYWwgdW5pdCBkZXNpZ25hdG9yIGVtOiBQQVNTCitTZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBv
cmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgZXg6IFBBU1MKK1NldHRpbmcgcGl4ZWxXaWR0aCB3aXRo
IG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06IFBBU1MKK1NldHRpbmcgcGl4ZWxXaWR0aCB3
aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBwdDogUEFTUworU2V0dGluZyBwaXhlbFdpZHRo
IHdpdGggb3JpZ2luYWwgd2lkdGggbm90IHNwZWNpZmllZDogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBweDogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBleDogUEFTUworU2V0dGluZyBwb3NXaWR0
aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06IFBBU1MKK1NldHRpbmcgcG9zV2lk
dGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcHQ6IFBBU1MKK1NldHRpbmcgcG9zV2lk
dGggd2l0aCBvcmlnaW5hbCB3aWR0aCBub3Qgc3BlY2lmaWVkOiBQQVNTCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9waXhlbC1wb3MtcHJlZml4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jc3MvcGl4ZWwtcG9zLXByZWZpeC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jc3MvcGl4ZWwtcG9zLXByZWZpeC5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcyIEBACis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBwcmludChtZXNzYWdlKQor
eworICAgIHZhciBwYXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAg
IHBhcmFncmFwaC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChwYXJh
Z3JhcGgpOworfQorZnVuY3Rpb24gc3RhdHVzKGJvb2xWYWx1ZSkgeworICByZXR1cm4gYm9vbFZh
bHVlID8gJ1BBU1MnIDogJ0ZBSUwnOworfQorZnVuY3Rpb24gdGVzdCgpCit7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdp
bmFsIHVuaXQgZGVzaWduYXRvciBweDogIiArIHN0YXR1cyhweC5zdHlsZS5waXhlbFdpZHRoID09
IHB4Lm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9y
aWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogIiArIHN0YXR1cyhlbS5zdHlsZS5waXhlbFdpZHRo
ID09IGVtLm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3aXRo
IG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBleDogIiArIHN0YXR1cyhleC5zdHlsZS5waXhlbFdp
ZHRoID09IGV4Lm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxXaWR0aCB3
aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciByZW06ICIgKyBzdGF0dXMocmVtLnN0eWxlLnBp
eGVsV2lkdGggPT0gcmVtLm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4ZWxX
aWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBwdDogIiArIHN0YXR1cyhwdC5zdHls
ZS5waXhlbFdpZHRoID09IHB0Lm9mZnNldFdpZHRoKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcGl4
ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHdpZHRoIG5vdCBzcGVjaWZpZWQ6ICIgKyBzdGF0dXMobm93
aWR0aC5zdHlsZS5waXhlbFdpZHRoID09IDApKTsKKyAgICAvLyBMb2dpYyBmb3IgaGFuZGxpbmcg
b3RoZXIgbGVuZ3RoIHVuaXQgdHlwZXMgaW5zaWRlIFdlYktpdCBhcmUgdGhlIHNhbWUgd2l0aCAn
cHQnLCBzbyBub3QgbmVjZXNzYXJ5IHRvIGNoZWNrIHRoZW0KKworICAgIHByaW50KCJHZXR0aW5n
IHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHB4OiAiICsgc3RhdHVzKHB4
LnN0eWxlLnBvc1dpZHRoID09IHBhcnNlRmxvYXQocHguc3R5bGUud2lkdGgpKSk7CisgICAgcHJp
bnQoIkdldHRpbmcgcG9zV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgZW06ICIg
KyBzdGF0dXMoZW0uc3R5bGUucG9zV2lkdGggPT0gcGFyc2VGbG9hdChlbS5zdHlsZS53aWR0aCkp
KTsKKyAgICBwcmludCgiR2V0dGluZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWdu
YXRvciBleDogIiArIHN0YXR1cyhleC5zdHlsZS5wb3NXaWR0aCA9PSBwYXJzZUZsb2F0KGV4LnN0
eWxlLndpZHRoKSkpOworICAgIHByaW50KCJHZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwg
dW5pdCBkZXNpZ25hdG9yIHJlbTogIiArIHN0YXR1cyhyZW0uc3R5bGUucG9zV2lkdGggPT0gcGFy
c2VGbG9hdChyZW0uc3R5bGUud2lkdGgpKSk7CisgICAgcHJpbnQoIkdldHRpbmcgcG9zV2lkdGgg
d2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcHQ6ICIgKyBzdGF0dXMocHQuc3R5bGUucG9z
V2lkdGggPT0gcGFyc2VGbG9hdChwdC5zdHlsZS53aWR0aCkpKTsKKyAgICBwcmludCgiR2V0dGlu
ZyBwb3NXaWR0aCB3aXRoIG9yaWdpbmFsIHdpZHRoIG5vdCBzcGVjaWZpZWQ6ICIgKyBzdGF0dXMo
bm93aWR0aC5zdHlsZS5wb3NXaWR0aCA9PSAwKSk7CisKKyAgICBweC5zdHlsZS5waXhlbFdpZHRo
ID0gMjAwOworICAgIHByaW50KCJTZXR0aW5nIHBpeGVsV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0
IGRlc2lnbmF0b3IgcHg6ICIgKyBzdGF0dXMocHguc3R5bGUud2lkdGggPT0gJzIwMHB4JykpOwor
ICAgIGVtLnN0eWxlLnBpeGVsV2lkdGggPSAyMDA7CisgICAgcHJpbnQoIlNldHRpbmcgcGl4ZWxX
aWR0aCB3aXRoIG9yaWdpbmFsIHVuaXQgZGVzaWduYXRvciBlbTogIiArIHN0YXR1cyhlbS5vZmZz
ZXRXaWR0aCA9PSAyMDAgJiYgZW0uc3R5bGUud2lkdGguc3Vic3RyKC0yLCAyKSA9PSAnZW0nKSk7
CisgICAgZXguc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0dGluZyBwaXhl
bFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIGV4OiAiICsgc3RhdHVzKGV4Lm9m
ZnNldFdpZHRoID09IDIwMCAmJiBleC5zdHlsZS53aWR0aC5zdWJzdHIoLTIsIDIpID09ICdleCcp
KTsKKyAgICByZW0uc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0dGluZyBw
aXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHJlbTogIiArIHN0YXR1cyhy
ZW0ub2Zmc2V0V2lkdGggPT0gMjAwICYmIHJlbS5zdHlsZS53aWR0aC5zdWJzdHIoLTMsIDMpID09
ICdyZW0nKSk7CisgICAgcHQuc3R5bGUucGl4ZWxXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0
dGluZyBwaXhlbFdpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHB0OiAiICsgc3Rh
dHVzKHB0Lm9mZnNldFdpZHRoID09IDIwMCAmJiBwdC5zdHlsZS53aWR0aC5zdWJzdHIoLTIsIDIp
ID09ICdwdCcpKTsKKyAgICBub3dpZHRoLnN0eWxlLnBpeGVsV2lkdGggPSAyMDA7CisgICAgcHJp
bnQoIlNldHRpbmcgcGl4ZWxXaWR0aCB3aXRoIG9yaWdpbmFsIHdpZHRoIG5vdCBzcGVjaWZpZWQ6
ICIgKyBzdGF0dXMobm93aWR0aC5zdHlsZS53aWR0aCA9PSAnMjAwcHgnKSk7CisKKyAgICBweC5z
dHlsZS5wb3NXaWR0aCA9IDIwMDsKKyAgICBwcmludCgiU2V0dGluZyBwb3NXaWR0aCB3aXRoIG9y
aWdpbmFsIHVuaXQgZGVzaWduYXRvciBweDogIiArIHN0YXR1cyhweC5zdHlsZS53aWR0aCA9PSAn
MjAwcHgnKSk7CisgICAgZW0uc3R5bGUucG9zV2lkdGggPSAyMDA7CisgICAgcHJpbnQoIlNldHRp
bmcgcG9zV2lkdGggd2l0aCBvcmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgZW06ICIgKyBzdGF0dXMo
ZW0uc3R5bGUud2lkdGggPT0gJzIwMGVtJykpOworICAgIGV4LnN0eWxlLnBvc1dpZHRoID0gMjAw
OworICAgIHByaW50KCJTZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25h
dG9yIGV4OiAiICsgc3RhdHVzKGV4LnN0eWxlLndpZHRoID09ICcyMDBleCcpKTsKKyAgICByZW0u
c3R5bGUucG9zV2lkdGggPSAyMDA7CisgICAgcHJpbnQoIlNldHRpbmcgcG9zV2lkdGggd2l0aCBv
cmlnaW5hbCB1bml0IGRlc2lnbmF0b3IgcmVtOiAiICsgc3RhdHVzKHJlbS5zdHlsZS53aWR0aCA9
PSAnMjAwcmVtJykpOworICAgIHB0LnN0eWxlLnBvc1dpZHRoID0gMjAwOworICAgIHByaW50KCJT
ZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgdW5pdCBkZXNpZ25hdG9yIHB0OiAiICsgc3Rh
dHVzKHB0LnN0eWxlLndpZHRoID09ICcyMDBwdCcpKTsKKyAgICBub3dpZHRoLnN0eWxlLnBvc1dp
ZHRoID0gMjAwOworICAgIHByaW50KCJTZXR0aW5nIHBvc1dpZHRoIHdpdGggb3JpZ2luYWwgd2lk
dGggbm90IHNwZWNpZmllZDogIiArIHN0YXR1cyhub3dpZHRoLnN0eWxlLndpZHRoID09ICcyMDBw
eCcpKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+
VGhpcyB0ZXN0IGNoZWNrcyB0byBzZWUgaWYgd2UgY2FuIGdldC9zZXQgcGl4ZWxXaWR0aCBhbmQg
cG9zV2lkdGggY29ycmVjdGx5IChvdGhlcnMgbGlrZSBwaXhlbFRvcC9wb3NUb3AgYXJlIHNpbWls
YXIpLjwvcD4KKzxwPnBpeGVsV2lkdGggd291bGRuJ3Qgd29yayBpbiBvbGRlciB2ZXJzaW9ucyB3
aGVuIHVuaXQgZGVzaWduYXRvciBvZiB0aGUgYXR0cmlidXRlIGlzICdlbScsICdleCcgb3IgJ3Jl
bScuPC9wPgorPHA+cG9zV2lkdGggaXMgaW5jb3JyZWN0bHkgdHJlYXRlZCBhcyBwaXhlbFdpZHRo
IGluIG9sZGVyIHZlcnNpb25zLjwvcD4KKzxocj4KKzxwPjxvbCBpZD0nY29uc29sZSc+PG9sPjwv
cD4KKzxkaXYgaWQ9J3B4JyBzdHlsZT0nd2lkdGg6MTAwcHgnPjwvZGl2PgorPGRpdiBpZD0nZW0n
IHN0eWxlPSd3aWR0aDoxMDBlbSc+PC9kaXY+Cis8ZGl2IGlkPSdleCcgc3R5bGU9J3dpZHRoOjEw
MGV4Jz48L2Rpdj4KKzxkaXYgaWQ9J3JlbScgc3R5bGU9J3dpZHRoOjEwMHJlbSc+PC9kaXY+Cis8
ZGl2IGlkPSdwdCcgc3R5bGU9J3dpZHRoOjEwMHB0Jz48L2Rpdj4KKzxkaXYgaWQ9J25vd2lkdGgn
PjwvZGl2PgorPC9ib2R5Pgo=
</data>
<flag name="review"
          id="56379"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>