<?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>26949</bug_id>
          
          <creation_ts>2009-07-02 23:59:10 -0700</creation_ts>
          <short_desc>WebCore part of the Haiku WebKit port</short_desc>
          <delta_ts>2009-08-15 03:12:43 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Maxime Simon">simon.maxime</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>leavengood</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129672</commentid>
    <comment_count>0</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-02 23:59:10 -0700</bug_when>
    <thetext>As the previous bug contains too much patches,
( https://bugs.webkit.org/show_bug.cgi?id=26620 )
I fill a new bug with only patches related to WebCore.
Patches about JavaScriptCore and other modifications have already been r+.
I will fill another bug for the WebCoreSupport ( in WebKit ),
and maybe for WebCore/platform/haiku/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129673</commentid>
    <comment_count>1</comment_count>
      <attachid>32219</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-03 00:03:34 -0700</bug_when>
    <thetext>Created attachment 32219
Patch to add Haiku-specific files for WebCore/platform/image-decoders/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129674</commentid>
    <comment_count>2</comment_count>
      <attachid>32220</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-03 00:04:35 -0700</bug_when>
    <thetext>Created attachment 32220
Patch to add Haiku-specific files for WebCore/platform/text/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129675</commentid>
    <comment_count>3</comment_count>
      <attachid>32221</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-03 00:13:36 -0700</bug_when>
    <thetext>Created attachment 32221
Patch to add Haiku-specific files for WebCore/bindings/js/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129676</commentid>
    <comment_count>4</comment_count>
      <attachid>32222</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-03 00:21:28 -0700</bug_when>
    <thetext>Created attachment 32222
Patch to add Haiku-specific files for WebCore/editing/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129677</commentid>
    <comment_count>5</comment_count>
      <attachid>32223</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-03 00:35:16 -0700</bug_when>
    <thetext>Created attachment 32223
Patch to add Haiku-specific files for WebCore/page/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129689</commentid>
    <comment_count>6</comment_count>
      <attachid>32227</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-03 01:54:22 -0700</bug_when>
    <thetext>Created attachment 32227
Patch to add Haiku-specific font files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129690</commentid>
    <comment_count>7</comment_count>
      <attachid>32228</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-03 02:22:30 -0700</bug_when>
    <thetext>Created attachment 32228
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130145</commentid>
    <comment_count>8</comment_count>
      <attachid>32222</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:23:03 -0700</bug_when>
    <thetext>Comment on attachment 32222
Patch to add Haiku-specific files for WebCore/editing/.

Looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130146</commentid>
    <comment_count>9</comment_count>
      <attachid>32221</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:23:47 -0700</bug_when>
    <thetext>Comment on attachment 32221
Patch to add Haiku-specific files for WebCore/bindings/js/.

OK.  Seems kinda silly that this code can&apos;t be shared between more ports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130147</commentid>
    <comment_count>10</comment_count>
      <attachid>32223</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:25:08 -0700</bug_when>
    <thetext>Comment on attachment 32223
Patch to add Haiku-specific files for WebCore/page/.

Sad that more of this code can&apos;t be shared between ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130148</commentid>
    <comment_count>11</comment_count>
      <attachid>32220</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:26:30 -0700</bug_when>
    <thetext>Comment on attachment 32220
Patch to add Haiku-specific files for WebCore/platform/text/.

Does this copy the data?
string.SetTo(utf8().data());

If it doesn&apos;t then your WebKit will crash all the time as StringImpls get released before the corresponding BStrings do...

r+ assuming this won&apos;t crash. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130149</commentid>
    <comment_count>12</comment_count>
      <attachid>32219</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:27:56 -0700</bug_when>
    <thetext>Comment on attachment 32219
Patch to add Haiku-specific files for WebCore/platform/image-decoders/.

This cast seems unecessary:
+    const void* bytes = (const void*)m_bytes.data();

STyle:
+int RGBA32Buffer::width() const {
+    return m_size.width();
+}
+
+int RGBA32Buffer::height() const {
+    return m_size.height();
+}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130150</commentid>
    <comment_count>13</comment_count>
      <attachid>32227</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:33:22 -0700</bug_when>
    <thetext>Comment on attachment 32227
Patch to add Haiku-specific font files for WebCore/platform/graphics/.

Why the prefix &quot;pc&quot;?
65     const BFont* pcDefaultFont = be_plain_font;

Are you sure you meant to levae this in?
 72     printf(&quot;FontCache::getLastResortFallbackFont -&gt; %s\n&quot;, family);

Spacing:
 74     BView* view = static_cast&lt;BView*&gt; (graphicsContext-&gt;platformContext());

Style:
 50         FontPlatformData(const FontPlatformData&amp; f);
 48         FontPlatformData(const FontDescription&amp;, BFont* font);

count_font_families() sounds expensive. :)
 71     for(int i = 0; i &lt; count_font_families(); i++) {

style:
 73         if(!BString(familyName.string()).Compare(family)){

MOre style:
 90             if ( get_font_style(family, i, &amp;style, &amp;flags) == B_OK) {
 91                 if((bItalic &amp;&amp; bBold) &amp;&amp;  (!strcmp( style, &quot;BoldItalic&quot;)
 92                         || !strcmp(style, &quot;Bold Oblique&quot;))) {


You could also convert &quot;style&quot; to be a String and then style == &quot;Bold Oblique&quot; would read a bit better.

Style:
53         } else {
 54             character = characterBuffer[i];
 55         }

Doesn&apos;t ICU, and other parts of WebCore already have code for dealign with this:
         if(isUtf16) {
 50             UChar lead = characterBuffer[i * 2];
 51             UChar trail = characterBuffer[i * 2 + 1];
 52             character = U16_GET_SUPPLEMENTARY(lead, trail);
 53         } else {
 54             character = characterBuffer[i];
 55         } 

Style:
 46     BFont *font = m_platformData.font();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130151</commentid>
    <comment_count>14</comment_count>
      <attachid>32228</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-07 00:33:48 -0700</bug_when>
    <thetext>Comment on attachment 32228
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.

Too large for me to review tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130161</commentid>
    <comment_count>15</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-07 01:01:28 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 32220 [details])
&gt; Does this copy the data?
&gt; string.SetTo(utf8().data());
&gt; 
&gt; If it doesn&apos;t then your WebKit will crash all the time as StringImpls get
&gt; released before the corresponding BStrings do...
&gt; 
&gt; r+ assuming this won&apos;t crash. :)

SetTo() copy the data, so it may not crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130164</commentid>
    <comment_count>16</comment_count>
      <attachid>32364</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-07 01:34:59 -0700</bug_when>
    <thetext>Created attachment 32364
Patch to add Haiku-specific files for WebCore/platform/image-decoders/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130173</commentid>
    <comment_count>17</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-07 02:46:55 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 32227 [details])
&gt; Why the prefix &quot;pc&quot;?
&gt; 65     const BFont* pcDefaultFont = be_plain_font;

Good question. :)

&gt; count_font_families() sounds expensive. :)
&gt;  71     for(int i = 0; i &lt; count_font_families(); i++) {

count_font_families() sounds indeed a bit expensive,
but it&apos;s a C function from the Haiku API.

&gt; Doesn&apos;t ICU, and other parts of WebCore already have code for dealign with
&gt; this:
&gt;          if(isUtf16) {
&gt;  50             UChar lead = characterBuffer[i * 2];
&gt;  51             UChar trail = characterBuffer[i * 2 + 1];
&gt;  52             character = U16_GET_SUPPLEMENTARY(lead, trail);
&gt;  53         } else {
&gt;  54             character = characterBuffer[i];
&gt;  55         } 

I know that the wx port handles this as it,
and the gtk port doesn&apos;t support Unicode supplementary characters...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130175</commentid>
    <comment_count>18</comment_count>
      <attachid>32371</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-07 03:17:18 -0700</bug_when>
    <thetext>Created attachment 32371
Patch to add Haiku-specific font files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131980</commentid>
    <comment_count>19</comment_count>
      <attachid>32228</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-15 11:52:55 -0700</bug_when>
    <thetext>Comment on attachment 32228
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.

Who owns the BView in the GraphicsContextPlatformPrivate?  I&apos;m surprised that GCPlatformPrivate doesnt&apos; need to retain it?

style:
npoints should be numberOfPoints or pointsLength or similar.

Style:
8     if (rects.size() &gt; 1)
 229     {

spacing:
 235         m_data-&gt;view-&gt;StrokeRect(region.Frame(),B_MIXED_COLORS);

Naming:
 257 FloatRect GraphicsContext::roundToDevicePixels(const FloatRect&amp; frect)

Naming:
 287 void GraphicsContext::strokeRect(const FloatRect&amp; r, float width)
 298 void GraphicsContext::setLineCap(LineCap lc)

No need to wrap lines like this:
void GraphicsContext::addInnerRoundedRectClip(const IntRect&amp; rect,
 451                                               int thickness)
 452 

I&apos;m surprised your compiler can&apos;t convert from &quot;return 0&quot;:
    return PassRefPtr&lt;Icon&gt;(0);

Why are you adding the empy ImageBufferData class?

I think you mean something like &quot;if the image hasn&apos;t fully loaded&quot;:
 130     if (!image) // If it&apos;s too early we won&apos;t have an image yet.

But I&apos;m still confused as to why we&apos;d be calling pattern drawing routines with an image w/o a first frame.

I think there are functions to do this for you:
 140     ctxt-&gt;clip(IntRect(dstRect.x(), dstRect.y(), dstRect.width(), dstRect.height()));

IntRect(dstRect) probably does what you want.  Although you might want enclosingIntRect() there.

c++ style casts please:
 57     const unsigned char* uContents = (const unsigned char*) data.data();


I&apos;m surprised:
 50 ImageDecoder* createDecoder(const Vector&lt;char&gt;&amp; data)

isn&apos;t shared between teh ports?

Spacing:
 45     return BRect(BPoint(x(), y()), BSize(width(),height()));

It&apos;s better to break patches down by size instead of directory.

r- for all the nits above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132187</commentid>
    <comment_count>20</comment_count>
      <attachid>32371</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 01:03:54 -0700</bug_when>
    <thetext>Comment on attachment 32371
Patch to add Haiku-specific font files for WebCore/platform/graphics/.


&gt; +// Fix temp routine to check the conversion works, please move it ASAP	
&gt; +int charUnicodeToUtf8(unsigned short glyph, char* out)
&gt; +{
&gt; +    int i = 0;
&gt; +
&gt; +    if (glyph &lt; 0x0080)
&gt; +        out[i++] = (char)glyph;
C++ style casts please :D

&gt; +    else if (glyph &lt; 0x0800) { //two bytes
&gt; +        out[i++] = 0xc0 | (( glyph ) &gt;&gt; 6 );
&gt; +        out[i++] = 0x80 | (( glyph ) &amp; 0x3F );
&gt; +    } else if (glyph &gt; 0x0800) { //3 bytes
&gt; +        out[i++] = 0xe0 | (( glyph ) &gt;&gt; 12 );
&gt; +        out[i++] = 0x80 | ( (( glyph ) &gt;&gt; 6 ) &amp; 0x3F );
&gt; +        out[i++] = 0x80 | (( glyph ) &amp; 0x3F);
&gt; +    }
Should have excess braces, eg.
out[i++] = 0x80 | ( (( glyph ) &gt;&gt; 6 ) &amp; 0x3F ); =&gt; out[i++] = 0x80 | ((glyph &gt;&gt; 6 ) &amp; 0x3F );
Shouldn&apos;t have spaces around the content of parenthesis, eg.
out[i++] = 0x80 | ( (( glyph ) &gt;&gt; 6 ) &amp; 0x3F ); =&gt; out[i++] = 0x80 | ((glyph &gt;&gt; 6) &amp; 0x3F);


&gt; +FontPlatformData::FontPlatformData(const FontDescription&amp; fontDescription, const AtomicString&amp; familyName)
&gt; +    : m_font(0)
&gt; +{
&gt; +    bool bFound = false;
&gt; +    bool bItalic = fontDescription.italic();
&gt; +    bool bBold = fontDescription.weight() == FontWeightBold;
&gt; +    font_family family;
&gt; +
&gt; +    for (int i = 0; i &lt; count_font_families(); i++) {
&gt; +        get_font_family(i, &amp;family, 0);
&gt; +        if (!BString(familyName.string()).Compare(family)) {
&gt; +            m_font = new BFont();
&gt; +            m_font-&gt;SetFamilyAndStyle(family, 0);
&gt; +            m_font-&gt;SetSize(fontDescription.computedSize());
&gt; +
&gt; +            bFound = true;
&gt; +            break;
&gt; +        }
&gt; +    }
&gt; +
&gt; +    if (bFound) {
&gt; +        int32 numStyles = count_font_styles(family);
&gt; +        font_style fontStyle;
&gt; +        uint32 flags;
&gt; +        bFound = false;
&gt; +
&gt; +        for (int i = 0; i &lt; numStyles; i++) {
&gt; +            if (get_font_style(family, i, &amp;fontStyle, &amp;flags) == B_OK) {
&gt; +                String style(fontStyle);
&gt; +                if ((bItalic &amp;&amp; bBold)
&gt; +                    &amp;&amp; (style == &quot;BoldItalic&quot; || style == &quot;Bold Oblique&quot;)) {
There&apos;s no reason for this line break, we don&apos;t have an 80-cloumn limit in our style guidelines :D

&gt; +                     bFound = true;
&gt; +                     break;
&gt; +                 }
&gt; +                if ((bItalic &amp;&amp; !bBold)
&gt; +                    &amp;&amp; (style == &quot;Italic&quot; || style == &quot;Oblique&quot;)) {
ditto

...
&gt; +                 }
&gt; +                if ((!bItalic &amp;&amp; !bBold)
&gt; +                    &amp;&amp; (style == &quot;Roma&quot;
&gt; +                        || style == &quot;Book&quot; || style == &quot;Condensed&quot;
&gt; +                        || style == &quot;Regular&quot; || style == &quot;Medium&quot;)) {
You may want multiple lines here for clarity, but 4 lines seems excessive</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132203</commentid>
    <comment_count>21</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 01:55:44 -0700</bug_when>
    <thetext>&gt; Why are you adding the empy ImageBufferData class?

It seems that all ports add it. And it&apos;s required because ImageBuffer.h
include it. :)

&gt; I&apos;m surprised:
&gt;  50 ImageDecoder* createDecoder(const Vector&lt;char&gt;&amp; data)
&gt; 
&gt; isn&apos;t shared between teh ports?

No it isn&apos;t. Every port defines its own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132206</commentid>
    <comment_count>22</comment_count>
      <attachid>32846</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 02:24:47 -0700</bug_when>
    <thetext>Created attachment 32846
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132229</commentid>
    <comment_count>23</comment_count>
      <attachid>32856</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 04:17:33 -0700</bug_when>
    <thetext>Created attachment 32856
Patch to add Haiku-specific font files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132253</commentid>
    <comment_count>24</comment_count>
      <attachid>32867</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 06:27:14 -0700</bug_when>
    <thetext>Created attachment 32867
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132306</commentid>
    <comment_count>25</comment_count>
      <attachid>32867</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-16 11:53:06 -0700</bug_when>
    <thetext>Comment on attachment 32867
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.

You may want to consider using the (alpha version) lint tool for WebKit.

I downloaded this patch and ran on your files in this patch like this:
   python WebKitTools/Scripts/modules/cpplint.py WebCore/platform/graphics/haiku/*.cpp

It found these errors:
WebCore/platform/graphics/haiku/FloatRectHaiku.cpp:44:  Missing space after ,  [whitespace/comma] [3]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:51:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:229:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:495:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:495:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:511:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:516:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:541:  Missing space after ,  [whitespace/comma] [3]
WebCore/platform/graphics/haiku/ImageHaiku.cpp:109:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/ImageHaiku.cpp:127:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp:78:  Tests for true/false, zero/non-zero, etc. should be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp:91:  Extra space before )  [whitespace/parens] [2]
WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp:124:  Missing space before ( in if(  [whitespace/parens] [5]
WebCore/platform/graphics/haiku/IntRectHaiku.cpp:45:  Missing space after ,  [whitespace/comma] [3]

When glancing through the code, I also noticed the following issues.

In WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp

&gt; 56 BView* view;
&quot;Prefix C++ data members with &quot;m_&quot;.&quot;So it should be m_view 

&gt; 59 GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate(BView* p_view)
p_view is not the correct format for a variable.

&gt; 210     // creatin the region.
typo: creatin

&gt; 318 void GraphicsContext::setLineJoin(LineJoin lj)
Use full words, except in the rare case where an abbreviation would be more canonical and easier to understand.
s/lj/lineJoin/


In WebCore/platform/graphics/haiku/ImageBufferData.h
#include &quot;OwnPtr.h&quot; should be #include &lt;wtf/OwnPtr.h&gt;


In WebCore/platform/graphics/haiku/ImageSourceHaiku.cpp
&gt; 65     if (uContents[0] == 0x89 &amp;&amp;
&gt; 66         uContents[1] == 0x50 &amp;&amp;
Boolean expressions at the same nesting level that span multiple lines should have their operators on the left side of the line instead of the right side.

So it should look like this:
     if (uContents[0] == 0x89
         &amp;&amp; uContents[1] == 0x50

&gt; 72     // if (uContents[0] == 0xFF &amp;&amp;
Commented out code isn&apos;t checked in.  If you want to note the need to address JPEG, you could put a 
  // FIXME: Implement JPEG support.
comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132469</commentid>
    <comment_count>26</comment_count>
      <attachid>32220</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 22:46:27 -0700</bug_when>
    <thetext>Comment on attachment 32220
Patch to add Haiku-specific files for WebCore/platform/text/.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/text/haiku/StringHaiku.cpp
	A	WebCore/platform/text/haiku/TextBreakIteratorInternalICUHaiku.cpp
Committed r46008
	M	WebCore/ChangeLog
	A	WebCore/platform/text/haiku/TextBreakIteratorInternalICUHaiku.cpp
	A	WebCore/platform/text/haiku/StringHaiku.cpp
r46008 = 8630eaa003c63558969f14b36e91f5e32d8a506e (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132470</commentid>
    <comment_count>27</comment_count>
      <attachid>32221</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 22:46:43 -0700</bug_when>
    <thetext>Comment on attachment 32221
Patch to add Haiku-specific files for WebCore/bindings/js/.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/bindings/js/ScriptControllerHaiku.cpp
Committed r46009
	M	WebCore/ChangeLog
	A	WebCore/bindings/js/ScriptControllerHaiku.cpp
r46009 = a884a839568b38c02917163be46d2b7046d7d82e (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132471</commentid>
    <comment_count>28</comment_count>
      <attachid>32222</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 22:46:58 -0700</bug_when>
    <thetext>Comment on attachment 32222
Patch to add Haiku-specific files for WebCore/editing/.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/editing/haiku/EditorHaiku.cpp
Committed r46010
	A	WebCore/editing/haiku/EditorHaiku.cpp
	M	WebCore/ChangeLog
r46010 = c2dae2a1c3654e83314d76f79f67fb856f927061 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132472</commentid>
    <comment_count>29</comment_count>
      <attachid>32223</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 22:47:14 -0700</bug_when>
    <thetext>Comment on attachment 32223
Patch to add Haiku-specific files for WebCore/page/.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/page/haiku/DragControllerHaiku.cpp
	A	WebCore/page/haiku/EventHandlerHaiku.cpp
	A	WebCore/page/haiku/FrameHaiku.cpp
Committed r46011
	M	WebCore/ChangeLog
	A	WebCore/page/haiku/EventHandlerHaiku.cpp
	A	WebCore/page/haiku/DragControllerHaiku.cpp
	A	WebCore/page/haiku/FrameHaiku.cpp
r46011 = c459ecc2d08dd92a3d1d9c259067fad664cda3b1 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132473</commentid>
    <comment_count>30</comment_count>
      <attachid>32364</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 22:47:30 -0700</bug_when>
    <thetext>Comment on attachment 32364
Patch to add Haiku-specific files for WebCore/platform/image-decoders/.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/image-decoders/haiku/ImageDecoderHaiku.cpp
Committed r46012
	M	WebCore/ChangeLog
	A	WebCore/platform/image-decoders/haiku/ImageDecoderHaiku.cpp
r46012 = 0d02984b5f636d37396785e694037c7a96e6f977 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132474</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 22:47:34 -0700</bug_when>
    <thetext>All reviewed patches landed, closing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132475</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 22:49:32 -0700</bug_when>
    <thetext>Bugzilla-tool closed this bug, but it should stay open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132517</commentid>
    <comment_count>33</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-17 01:29:35 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 32867 [details])
&gt; You may want to consider using the (alpha version) lint tool for WebKit.
&gt; 
&gt; I downloaded this patch and ran on your files in this patch like this:
&gt;    python WebKitTools/Scripts/modules/cpplint.py
&gt; WebCore/platform/graphics/haiku/*.cpp

Thanks a lot for the tip.
This tool should really ease the work for reviewers.
And in the same time it will avoid people like me to fill too much patches. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132528</commentid>
    <comment_count>34</comment_count>
      <attachid>32923</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-17 03:12:58 -0700</bug_when>
    <thetext>Created attachment 32923
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132531</commentid>
    <comment_count>35</comment_count>
      <attachid>32924</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-17 03:25:50 -0700</bug_when>
    <thetext>Created attachment 32924
Patch to add Haiku-specific font files for WebCore/platform/graphics/.

I made some style cleanup (thanks to the cpplint.py tool).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132547</commentid>
    <comment_count>36</comment_count>
      <attachid>32931</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-17 05:09:59 -0700</bug_when>
    <thetext>Created attachment 32931
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.

Sorry, in the previous patch for the purpose of style cleanup I renamed a variable, but it makes the compilation to fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132991</commentid>
    <comment_count>37</comment_count>
      <attachid>33042</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-19 05:54:51 -0700</bug_when>
    <thetext>Created attachment 33042
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.

The latest modifications on the patch &quot;Modifications on WebKit source code to allow Haiku port.&quot; ( https://bugs.webkit.org/show_bug.cgi?id=26620#c59 ) require that I add &quot;#include &lt;stdio.h&gt;&quot; in 2 files of WebCore/platform/graphics/haiku/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137982</commentid>
    <comment_count>38</comment_count>
      <attachid>32924</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 11:05:03 -0700</bug_when>
    <thetext>Comment on attachment 32924
Patch to add Haiku-specific font files for WebCore/platform/graphics/.

What is this and why?
 // Fix temp routine to check the conversion works, please move it ASAP    
 44 int charUnicodeToUtf8(unsigned short glyph, char* out)

It&apos;s not mentioned in the ChangeLog.  I needs a more decriptive name if it&apos;s just a hack.

convertUTF16ToUTF8RenderingHACK or something.

We don&apos;t use argument names in headers when they don&apos;t add value:
47         FontPlatformData(const FontDescription&amp; fontDescription, const AtomicString&amp; family);
 48         FontPlatformData(const FontDescription&amp; fontDescription, BFont* font);
 49         FontPlatformData(float size, bool bold, bool italic);
 50         FontPlatformData(const FontPlatformData&amp; fontPlatformData);
&quot;family&quot; can stay.  but the fontDescription at least shoudl go.

No hungarian notation here ;)
 66     bool bFound = false;
 67     bool bItalic = fontDescription.italic();
 68     bool bBold = fontDescription.weight() == FontWeightBold;
We ain&apos;t no microsoft...

Why isn&apos;t this an OwnPtr&lt;BFont&gt;:
 63         BFont* m_font;

Your leaking BFonts.

Why is this correct?
        if (isUtf16) {
 50             UChar lead = characterBuffer[i * 2];
 51             UChar trail = characterBuffer[i * 2 + 1];
 52             character = U16_GET_SUPPLEMENTARY(lead, trail);
 53         } else

Not all characters will be composed characters.

Use the height of the X, can&apos;t you ask the font for the height of a glyph at a certain size?
 52         m_xHeight = font-&gt;Size(); // Not sure about this

This information should be on the BFont:
 53         m_unitsPerEm = 1; // FIXME!

You&apos;d have more luck posting this in smaller pices.  Some of this was just fine, but some of the font code is wrong here too.  If you broke it out, I coudl more easily approve the OK parts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137985</commentid>
    <comment_count>39</comment_count>
      <attachid>33042</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 11:13:24 -0700</bug_when>
    <thetext>Comment on attachment 33042
Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.

Better if m_data could be an OwnPtr for haiku:
 79     delete m_data;

Why?
setFocusRingColorChangeFunction

Spacing:
 230         BRegion    region;

It&apos;s better to have conversion funtions outside of these setters:
302     cap_mode mode = B_BUTT_CAP;
 303     switch (lineCap) {
 304     case RoundCap:

I think CG follows that model.

So remove it:
61         // FIXME: Not sure why be_app is checked
 62         if (be_app)
 63             delete m_frame;

Please break this into smaller patches.  AGain, parts of hsi woudl be super-easy to approve.  Other parts no.  If you posted a patch with just the empty implementatins that would be an easy r+, the harder stuff can e done in separate patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138026</commentid>
    <comment_count>40</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 12:00:41 -0700</bug_when>
    <thetext>&gt; What is this and why?
&gt;  // Fix temp routine to check the conversion works, please move it ASAP    
&gt;  44 int charUnicodeToUtf8(unsigned short glyph, char* out)
&gt; 
&gt; It&apos;s not mentioned in the ChangeLog.  I needs a more decriptive name if it&apos;s
&gt; just a hack.

I&apos;m not sure about this function. I would like Ryan to explain it. (If he wrote it.)

&gt; convertUTF16ToUTF8RenderingHACK or something.

This may be a possibility.

&gt; No hungarian notation here ;)
&gt;  66     bool bFound = false;
&gt;  67     bool bItalic = fontDescription.italic();
&gt;  68     bool bBold = fontDescription.weight() == FontWeightBold;
&gt; We ain&apos;t no microsoft...

Erk, it comes from the Syllable port. Ryan tried to avoid them as much as possible but there may have some remains.

&gt; Use the height of the X, can&apos;t you ask the font for the height of a glyph at a
&gt; certain size?
&gt;  52         m_xHeight = font-&gt;Size(); // Not sure about this

This was an issue I avoided when improving the port.
But I should update this patch.

&gt; This information should be on the BFont:
&gt;  53         m_unitsPerEm = 1; // FIXME!

The BFont (from Haiku) don&apos;t handle this.

&gt; You&apos;d have more luck posting this in smaller pices.  Some of this was just
&gt; fine, but some of the font code is wrong here too.  If you broke it out, I
&gt; coudl more easily approve the OK parts.

I think I will fill a new bug with multiple patches from this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140454</commentid>
    <comment_count>41</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-15 03:12:43 -0700</bug_when>
    <thetext>No need to keep this bug opened.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32219</attachid>
            <date>2009-07-03 00:03:34 -0700</date>
            <delta_ts>2009-07-07 01:34:59 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/image-decoders/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform-imag.patch</filename>
            <type>text/plain</type>
            <size>5570</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBiMjk0NzBmNzZhOGU3N2NiYzlmNWFiODlmZTlkN2EyMWNkNTc4ZGU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMyBKdWwgMjAwOSAwODo0NjozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDIzICsrKysKIC4uLi9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJI
YWlrdS5jcHAgICAgIHwgIDEyOSArKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2Vk
LCAxNTIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNw
cAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYWNmMWMyZS4uMjhjNjUwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAwOS0wNy0wMiAgTWF4aW1lIFNp
bW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy8uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OQorCisgICAgICAgIEFkZGluZyBhIG5ldyBmaWxl
LCBJbWFnZURlY29kZXJIYWlrdS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JB
MzJCdWZmZXI6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0
SGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6OmhlaWdodCk6CisKIDIwMDktMDctMDIgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVt
b250QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2Rl
ckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VE
ZWNvZGVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmI3
YmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hh
aWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgor
CisjaW5jbHVkZSA8Qml0bWFwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSR0JBMzJC
dWZmZXI6OlJHQkEzMkJ1ZmZlcigpCisgICAgOiBtX2hhc0FscGhhKGZhbHNlKQorICAgICwgbV9z
dGF0dXMoRnJhbWVFbXB0eSkKKyAgICAsIG1fZHVyYXRpb24oMCkKKyAgICAsIG1fZGlzcG9zYWxN
ZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKK3sKK30gCisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpj
bGVhcigpCit7CisgICAgbV9ieXRlcy5jbGVhcigpOworICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0
eTsKKyAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoKQorICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0bWFwIGRh
dGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAgIC8vIGluaXRGcmFtZUJ1ZmZlcigpIGFu
ZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZAorICAgIC8vIG90aGVyIG1l
dGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgorfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6
emVyb0ZpbGwoKQoreworICAgIG1fYnl0ZXMuZmlsbCgwKTsKKyAgICBtX2hhc0FscGhhID0gdHJ1
ZTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1
ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5t
X2hhc0FscGhhKTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRo
LCBpbnQgbmV3SGVpZ2h0KQoreworICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVj
ayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZQorICAgIC8vIHJlcXVlc3RlZCBzaXplIHdh
cyB0b28gYmlnLi4uCisgICAgbV9ieXRlcy5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQpOwor
ICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAgICAvLyBaZXJv
IHRoZSBpbWFnZS4KKyAgICB6ZXJvRmlsbCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK05h
dGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Cit7Cisg
ICAgY29uc3Qgdm9pZCogYnl0ZXMgPSAoY29uc3Qgdm9pZCopbV9ieXRlcy5kYXRhKCk7CisKKyAg
ICBCQml0bWFwKiBibXAgPSBuZXcgQkJpdG1hcChCUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQo
KSksIEJfUkdCMzIpOworICAgIGJtcC0+U2V0Qml0cyhieXRlcywgbV9zaXplLndpZHRoKCkgKiBt
X3NpemUuaGVpZ2h0KCksIDAsIEJfUkdCMzIpOworCisgICAgcmV0dXJuIGJtcDsKK30KKworYm9v
bCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNBbHBo
YTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCit7Cisg
ICAgbV9oYXNBbHBoYSA9IGFscGhhOworfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVz
KEZyYW1lU3RhdHVzIHN0YXR1cykKK3sKKyAgICBtX3N0YXR1cyA9IHN0YXR1czsKK30KKworUkdC
QTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90
aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
CisgICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXpl
OworICAgIHNldEhhc0FscGhhKG90aGVyLmhhc0FscGhhKCkpOworICAgIHNldFJlY3Qob3RoZXIu
cmVjdCgpKTsKKyAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOworICAgIHNldER1cmF0aW9u
KG90aGVyLmR1cmF0aW9uKCkpOworICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2Fs
TWV0aG9kKCkpOworICAgIHJldHVybiAqdGhpczsKK30KKworaW50IFJHQkEzMkJ1ZmZlcjo6d2lk
dGgoKSBjb25zdCB7CisgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOworfQorCitpbnQgUkdCQTMy
QnVmZmVyOjpoZWlnaHQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16707"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32220</attachid>
            <date>2009-07-03 00:04:35 -0700</date>
            <delta_ts>2009-07-16 22:46:26 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/text/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform-text.patch</filename>
            <type>text/plain</type>
            <size>4887</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyNGIzZGZkZDMyOWUwYjZiZGY4NDI2NWMxYzdjMDUzMjEzMjQ1NWUwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMyBKdWwgMjAwOSAwOTowMjo1NiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL3RleHQvLgoKLS0t
CiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTYgKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwICAg
ICAgICB8ICAgNTEgKysrKysrKysrKysrKysrKysrKysKIC4uLi9oYWlrdS9UZXh0QnJlYWtJdGVy
YXRvckludGVybmFsSUNVSGFpa3UuY3BwICAgIHwgICAzNiArKysrKysrKysrKysrKwogMyBmaWxl
cyBjaGFuZ2VkLCAxMDMgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2hhaWt1L1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFjZjFjMmUuLmI3MTJmYjkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMDktMDctMDMgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSGFpa3Ut
c3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC8uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OQorCisgICAgICAgIEFkZGlu
ZyB0d28gbmV3IGZpbGVzLCBTdHJpbmdIYWlrdS5jcHAKKyAgICAgICAgYW5kIFRleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1VIYWlrdS5jcHAKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvaGFp
a3UvU3RyaW5nSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6U3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6b3BlcmF0b3IgQlN0cmluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9oYWlrdS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJ
RCk6CisKIDIwMDktMDctMDIgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVtb250QGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2hhaWt1L1N0cmluZ0hhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZTBmZDNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2hhaWt1L1N0cmluZ0hhaWt1LmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBTdHJpbmcgY29udmVyc2lvbnMKK1N0cmluZzo6U3RyaW5nKGNvbnN0
IEJTdHJpbmcmIHN0cikKK3sKKyAgICBtX2ltcGwgPSBTdHJpbmc6OmZyb21VVEY4KHN0ci5TdHJp
bmcoKSwgc3RyLkxlbmd0aCgpKS5pbXBsKCk7Cit9CisKK1N0cmluZzo6b3BlcmF0b3IgQlN0cmlu
ZygpIGNvbnN0Cit7CisgICAgQlN0cmluZyBzdHJpbmc7CisgICAgc3RyaW5nLlNldFRvKHV0Zjgo
KS5kYXRhKCkpOworCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlr
dS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjJjNzMyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvaGFpa3UvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUhhaWt1LmNwcApA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9j
YWxlSUQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICJlbl91cyI7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32221</attachid>
            <date>2009-07-03 00:13:36 -0700</date>
            <delta_ts>2009-07-16 22:46:43 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/bindings/js/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-bindings-js.patch</filename>
            <type>text/plain</type>
            <size>3192</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA1MzE0YWMwMWJlM2Q3MjRmOGU0OWQ3ZmE2ZDNlOGUxZDhlMjkyY2MzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMyBKdWwgMjAwOSAwOToxMDowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL2JpbmRpbmdzL2pzLy4KCi0tLQog
V2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysr
KysKIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlckhhaWt1LmNwcCB8ICAgNDYg
KysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1OCBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlckhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNmMWMyZS4uOTE5NmUwZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAwOS0wNy0wMyAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBI
YWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS9iaW5kaW5ncy9qcy8uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OQorCisgICAgICAgIEFk
ZGluZyBhIG5ldyBmaWxlLCBTY3JpcHRDb250cm9sbGVySGFpa3UuY3BwCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KToK
KwogMjAwOS0wNy0wMiAgUGllcnJlIGQnSGVyYmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlckhhaWt1LmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iNTczYjk3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVySGFpa3UuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisj
aW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gU2Ny
aXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgaWYgKCF3aWRnZXQtPmlzUGx1Z2luVmlldygpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+YmluZGlu
Z0luc3RhbmNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32222</attachid>
            <date>2009-07-03 00:21:28 -0700</date>
            <delta_ts>2009-07-16 22:46:58 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/editing/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-editing.patch</filename>
            <type>text/plain</type>
            <size>3025</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA1NTM4N2RhNjE0YmFjNTM0MmU3ZjVjMWYxZjNkYjE4MTY4YWUwOGE5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMyBKdWwgMjAwOSAwOToyMDoxMCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL2VkaXRpbmcvLgoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysrKysrKysKIFdlYkNv
cmUvZWRpdGluZy9oYWlrdS9FZGl0b3JIYWlrdS5jcHAgfCAgIDQ1ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAwIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvZWRpdGluZy9oYWlrdS9FZGl0
b3JIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGFjZjFjMmUuLmYxNDM4MDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDctMDMg
IE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSGFpa3Utc3BlY2lmaWMgZmls
ZXMgZm9yIFdlYkNvcmUvZWRpdGluZy8uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNjk0OQorCisgICAgICAgIEFkZGluZyBvbmUgbmV3IGZpbGUsIEVk
aXRvckhhaWt1LmNwcAorCisgICAgICAgICogZWRpdGluZy9oYWlrdS9FZGl0b3JIYWlrdS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKToK
KwogMjAwOS0wNy0wMiAgUGllcnJlIGQnSGVyYmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZWRpdGluZy9oYWlrdS9FZGl0b3JIYWlrdS5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvaGFpa3Uv
RWRpdG9ySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmRl
MWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2VkaXRpbmcvaGFpa3UvRWRpdG9ySGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKworI2lu
Y2x1ZGUgIkNsaXBib2FyZEFjY2Vzc1BvbGljeS5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgor
CisjaW5jbHVkZSAiQ2xpcGJvYXJkSGFpa3UuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IHBvbGljeSkKK3sKKyAgICByZXR1cm4gbmV3IENsaXBib2FyZEhhaWt1
KHBvbGljeSwgZmFsc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4z
LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32223</attachid>
            <date>2009-07-03 00:35:16 -0700</date>
            <delta_ts>2009-07-16 22:47:13 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/page/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-page.patch</filename>
            <type>text/plain</type>
            <size>12100</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA4MmM4YWQzMzE2NjY4YmVmZmNkYzUwNmNmODQ2YmI5Mjc4ZmY1YjVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMyBKdWwgMjAwOSAwOTozMzozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3BhZ2UvLgoKLS0tCiBXZWJDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICsrKysrKwogV2ViQ29y
ZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwIHwgICA3NyArKysrKysrKysrKysr
KwogV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcCAgIHwgIDE1MSArKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BhZ2UvaGFpa3UvRnJhbWVIYWlrdS5j
cHAgICAgICAgICAgfCAgIDQzICsrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDMwNCBpbnNlcnRp
b25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGFnZS9o
YWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BhZ2UvaGFpa3UvRnJhbWVIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFjZjFjMmUuLjQ5YTBiZTQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzYgQEAKKzIwMDktMDctMDMgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQg
SGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUvcGFnZS8uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OQorCisgICAgICAgIEFkZGluZyB0
aHJlZSBuZXcgZmlsZXMsIERyYWdDb250cm9sbGVySGFpa3UuY3BwLCBFdmVudEhhbmRsZXJIYWlr
dS5jcHAKKyAgICAgICAgYW5kIEZyYW1lSGFpa3UuY3BwCisKKyAgICAgICAgKiBwYWdlL2hhaWt1
L0RyYWdDb250cm9sbGVySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdD
b250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjpkcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpt
YXhEcmFnSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpjbGVh
bnVwQWZ0ZXJTeXN0ZW1EcmFnKToKKyAgICAgICAgKiBwYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhh
aWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc0tleWJvYXJkT3B0aW9uVGFiKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aW52ZXJ0U2Vuc2VPZlRhYnNUb0xpbmtz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50Vmlldyk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50
VG9XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRl
ZFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVu
dFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxF
dmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJh
Z2dpbmdDbGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91
c2VQcmVzc0V2ZW50VG9TdWJmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpwYXNzTW91c2VSZWxlYXNlRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6YWNjZXNzS2V5TW9kaWZpZXJzKToKKyAgICAgICAgKiBwYWdlL2hh
aWt1L0ZyYW1lSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFn
SW1hZ2VGb3JTZWxlY3Rpb24pOgorCiAyMDA5LTA3LTAyICBQaWVycmUgZCdIZXJiZW1vbnQgIDxw
ZGhlcmJlbW9udEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3Bw
IGIvV2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTU1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAKQEAgLTAsMCArMSw3NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFp
bC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnQ29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKworI2luY2x1ZGUgPEludGVyZmFjZURl
ZnMuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZQoreworCisvLyBGSVhNRTogVGhlc2UgdmFsdWVz
IGFyZSBzdHJhaWdodCBvdXQgb2YgRHJhZ0NvbnRyb2xsZXJNYWMsIHNvIHByb2JhYmx5IGhhdmUg
CisvLyBsaXR0bGUgY29ycmVsYXRpb24gd2l0aCBIYWlrdSBzdGFuZGFyZHMuLi4KK2NvbnN0IGlu
dCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNldCA9IDI7Citjb25zdCBpbnQgRHJh
Z0NvbnRyb2xsZXI6Ok1heE9yaWdpbmFsSW1hZ2VBcmVhID0gMTUwMCAqIDE1MDA7Citjb25zdCBp
bnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uUmlnaHRJbnNldCA9IDc7Citjb25zdCBpbnQgRHJh
Z0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tSW5zZXQgPSAzOworCitjb25zdCBmbG9hdCBEcmFn
Q29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKKworCitib29sIERyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKCkKK3sKKyAgICBpZiAobW9kaWZpZXJzKCkgJiBCX0NPTU1BTkRf
S0VZKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworRHJh
Z09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0Rh
dGEpCit7CisgICAgLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgaW5jb21wbGV0ZQorICAgIGlmIChk
cmFnRGF0YS0+Y29udGFpbnNVUkwoKSkKKyAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5
OworCisgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOworfQorCitjb25zdCBJbnRTaXplJiBE
cmFnQ29udHJvbGxlcjo6bWF4RHJhZ0ltYWdlU2l6ZSgpCit7CisgICAgc3RhdGljIGNvbnN0IElu
dFNpemUgbWF4RHJhZ0ltYWdlU2l6ZSg0MDAsIDQwMCk7CisKKyAgICByZXR1cm4gbWF4RHJhZ0lt
YWdlU2l6ZTsKK30KKwordm9pZCBEcmFnQ29udHJvbGxlcjo6Y2xlYW51cEFmdGVyU3lzdGVtRHJh
ZygpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcCBiL1dlYkNvcmUvcGFnZS9oYWlrdS9F
dmVudEhhbmRsZXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OGQ1ZGNiNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRs
ZXJIYWlrdS5jcHAKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4
aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisKKyNpbmNsdWRlICJDbGlwYm9hcmRI
YWlrdS5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVk
ZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9s
bEJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPGlu
dGVyZmFjZS9WaWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUg
RXZlbnRIYW5kbGVyOjpUZXh0RHJhZ0RlbGF5ID0gMC4wOworCitzdGF0aWMgYm9vbCBpc0tleWJv
YXJkT3B0aW9uVGFiKEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIHJldHVybiBldmVudAor
ICAgICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50Cisg
ICAgICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
KQorICAgICAgICAmJiBldmVudC0+YWx0S2V5KCkKKyAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50
aWZpZXIoKSA9PSAiVSswMDAwMDkiOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6aW52ZXJ0U2Vu
c2VPZlRhYnNUb0xpbmtzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIHJldHVy
biBpc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnRh
YnNUb0FsbENvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIGJvb2wg
aGFuZGxpbmdPcHRpb25UYWIgPSBpc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KTsKKworICAgIHJl
dHVybiBoYW5kbGluZ09wdGlvblRhYjsKK30KKwordm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9j
dW1lbnRWaWV3KCkKK3sKKyAgICBCVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKS0+cGxhdGZv
cm1XaWRnZXQoKTsKKyAgICBpZiAodmlldykKKyAgICAgICAgdmlldy0+TWFrZUZvY3VzKCk7CisK
KyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmIChwYWdlKQorICAgICAg
ICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fZnJhbWUpOworfQor
Citib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCit7CisgICAgLy8gRmlndXJl
IG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgorICAgIFJlbmRlck9iamVjdCog
dGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJl
cigpIDogMDsKKyAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQo
c3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0KCkpOworfQorCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lk
Z2V0KiByZW5kZXJXaWRnZXQpCit7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lk
Z2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFz
c01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpldmVu
dEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFdmVudEhhbmRs
ZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzJiBldmVudCwgRnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6
cGFzc1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQq
IHdpZGdldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlw
Ym9hcmQoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkSGFpa3UoQ2xpcGJvYXJk
V3JpdGFibGUsIHRydWUpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSog
c3ViZnJhbWUpCit7CisgICAgcmV0dXJuIHBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYs
IHN1YmZyYW1lKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRv
U3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJh
bWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlKQoreworICAgIHJldHVybiBwYXNzU3ViZnJh
bWVFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSwgaG92ZXJlZE5vZGUpOworfQorCitib29s
IEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKK3sKKyAgICByZXR1cm4g
cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpOworfQorCit1bnNpZ25l
ZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1vZGlmaWVycygpCit7CisgICAgcmV0dXJuIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcCBiL1dlYkNvcmUv
cGFnZS9oYWlrdS9GcmFtZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41MDE2OGRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL2hhaWt1L0ZyYW1l
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0RyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32227</attachid>
            <date>2009-07-03 01:54:22 -0700</date>
            <delta_ts>2009-07-07 03:17:18 -0700</delta_ts>
            <desc>Patch to add Haiku-specific font files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-font-files-for-WebCore-platform.patch</filename>
            <type>text/plain</type>
            <size>28194</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBlODNmZDM3MzdhZDUxOGE5NGQ1ZTkyNTQ3YjMzYjU4NjY2MTEyN2NiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMyBKdWwgMjAwOSAxMDo1MjowNCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZvbnQgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvLgoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgNDggKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcCB8ICAgODkgKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAgIHwgICA0OSArKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcCAgICAgIHwgIDExOCArKysrKysrKysrKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmggfCAg
IDY5ICsrKysrKysrCiAuLi4vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNw
cCAgICAgICB8ICAxNjggKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9H
bHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcCAgICAgIHwgICA2NCArKysrKysrKwogLi4uL2dyYXBo
aWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwICAgICAgICAgfCAgMTA0ICsrKysrKysr
KysrKwogOCBmaWxlcyBjaGFuZ2VkLCA3MDkgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGEuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBh
Y2YxYzJlLi4xZmM0YjFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDA5LTA3LTAzICBNYXhpbWUgU2ltb24g
IDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNwZWNpZmljIGZvbnQgZmlsZXMgZm9yIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAgICAgICBBZGRpbmcgc2V2ZW4gZmlsZXMsIEZv
bnRDYWNoZUhhaWt1LmNwcCwgRm9udERhdGFIYWlrdS5jcHAsCisgICAgICAgIEZvbnRIYWlrdS5j
cHAsIEZvbnRQbGF0Zm9ybURhdGEuaCwgRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcCwKKyAgICAg
ICAgR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAgYW5kIFNpbXBsZUZvbnREYXRhSGFpa3UuY3Bw
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnREYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoY2hh
clVuaWNvZGVUb1V0ZjgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2FuUmV0dXJuRmFsbGJh
Y2tGb250c0ZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9y
bURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZvbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1Np
bXBsZUZvbnREYXRhSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpz
bWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y29u
dGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpkZXRl
cm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKToKKwogMjAwOS0wNy0wMiAgUGllcnJlIGQnSGVyYmVtb250ICA8cGRoZXJi
ZW1vbnRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjMjQ4YwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3Bw
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVy
IDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
KworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxTdHJpbmcuaD4KKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQor
eworfQorCitjb25zdCBTaW1wbGVGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNo
YXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBs
ZW5ndGgpCit7CisgICAgRm9udFBsYXRmb3JtRGF0YSBkYXRhKGZvbnQuZm9udERlc2NyaXB0aW9u
KCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0
YSgmZGF0YSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCit7CisKKyAgICBjb25zdCBCRm9udCogcGNEZWZhdWx0Rm9udCA9IGJlX3BsYWluX2ZvbnQ7
CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0gRm9udERlc2NyaXB0
aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgICAgIHBjRGVmYXVsdEZvbnQgPSBiZV9maXhlZF9m
b250OworICAgIGVsc2UgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBGb250V2VpZ2h0
Qm9sZCkKKyAgICAgICAgcGNEZWZhdWx0Rm9udCA9IGJlX2JvbGRfZm9udDsKKyAgICBmb250X2Zh
bWlseSBmYW1pbHk7CisgICAgcGNEZWZhdWx0Rm9udC0+R2V0RmFtaWx5QW5kU3R5bGUoJmZhbWls
eSwgMCk7CisgICAgcHJpbnRmKCJGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQg
LT4gJXNcbiIsIGZhbWlseSk7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBzX0RlZmF1bHRTdHIo
ZmFtaWx5KTsKKworICAgIHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbiwgc19EZWZhdWx0U3RyKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICByZXR1cm4gbmV3IEZv
bnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOworfQorCit2b2lkIEZvbnRD
YWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBW
ZWN0b3I8dW5zaWduZWQ+JiB0cmFpdHNNYXNrcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ZvbnREYXRhSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmI1ZjhhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ZvbnREYXRhSGFpa3UuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZv
bnREYXRhLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworCW5vdEltcGxlbWVudGVkKCk7CisJ
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjAzZTdkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lu
Y2x1ZGUgPGludGVyZmFjZS9Gb250Lmg+CisjaW5jbHVkZSA8Vmlldy5oPgorI2luY2x1ZGUgPFN0
cmluZy5oPgorCisKKy8vIEZpeCB0ZW1wIHJvdXRpbmUgdG8gY2hlY2sgdGhlIGNvbnZlcnNpb24g
d29ya3MsIHBsZWFzZSBtb3ZlIGl0IEFTQVAJCitpbnQgY2hhclVuaWNvZGVUb1V0ZjgodW5zaWdu
ZWQgc2hvcnQgZ2x5cGgsIGNoYXIqIG91dCkKK3sKKyAgICBpbnQgaSA9IDA7CisKKyAgICBpZiAo
Z2x5cGggPCAweDAwODApCisgICAgICAgIG91dFtpKytdID0gKGNoYXIpZ2x5cGg7CisgICAgZWxz
ZSBpZiAoZ2x5cGggPCAweDA4MDApIHsgLy90d28gYnl0ZXMKKyAgICAgICAgb3V0W2krK10gPSAw
eGMwIHwgKCggZ2x5cGggKSA+PiA2ICk7CisgICAgICAgIG91dFtpKytdID0gMHg4MCB8ICgoIGds
eXBoICkgJiAweDNGICk7CisgICAgfSBlbHNlIGlmIChnbHlwaCA+IDB4MDgwMCkgeyAvLzMgYnl0
ZXMKKyAgICAgICAgb3V0W2krK10gPSAweGUwIHwgKCggZ2x5cGggKSA+PiAxMiApOworICAgICAg
ICBvdXRbaSsrXSA9IDB4ODAgfCAoICgoIGdseXBoICkgPj4gNiApICYgMHgzRiApOworICAgICAg
ICBvdXRbaSsrXSA9IDB4ODAgfCAoKCBnbHlwaCApICYgMHgzRik7CisgICAgfQorCisgICAgb3V0
W2ldID0gJ1wwJzsKKyAgICByZXR1cm4gaTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAorICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIENvbG9y
IGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsKKyAgICBCVmlldyogdmlldyA9
IHN0YXRpY19jYXN0PEJWaWV3Kj4gKGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkp
OworICAgIEJGb250KiBtX2ZvbnQgPSBzdGF0aWNfY2FzdDxCRm9udCo+IChmb250LT5wbGF0Zm9y
bURhdGEoKS5mb250KCkpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgdmlldy0+U2V0SGlnaENvbG9yKGNvbG9y
KTsKKyAgICB2aWV3LT5TZXRGb250KG1fZm9udCk7CisKKyAgICBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMgPSBjb25zdF9jYXN0PEdseXBoQnVmZmVyR2x5cGgqPihnbHlwaEJ1ZmZlci5nbHlwaHMo
ZnJvbSkpOworICAgIGZsb2F0IG9mZnNldCA9IHBvaW50LngoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bUdseXBoczsgaSsrKSB7CisgICAgICAgIGNoYXIgb3V0WzRdOworICAgICAgICBj
aGFyVW5pY29kZVRvVXRmOChnbHlwaHNbaV0sIG91dCk7CisKKyAgICAgICAgdmlldy0+RHJhd1N0
cmluZyhvdXQsIHNpemVvZihvdXQpLCBCUG9pbnQob2Zmc2V0LHBvaW50LnkoKSkpOworICAgICAg
ICBvZmZzZXQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBpKTsKKyAgICB9Cit9CisK
K3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAzOworfQorCitGbG9h
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBj
b25zdCBJbnRQb2ludCYsIGludCwgaW50LCBpbnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQsIGJvb2wpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9u
dFBsYXRmb3JtRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTk0
NTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRQbGF0Zm9ybURhdGEuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJl
IGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5j
cHAgYW5kIEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21h
aWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3Jt
RGF0YV9ICisjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfSAorCisjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworLy8gQWRkaW5nIGludGVyZmFj
ZS8gdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggV2ViS2l0IEZvbnQuaAorI2luY2x1ZGUgPGludGVy
ZmFjZS9Gb250Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRm9udFBs
YXRmb3JtRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSgp
OworICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBCRm9udCogZm9udCk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEo
ZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CisgICAgICAgIEZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZik7CisgICAgICAgIH5Gb250UGxhdGZvcm1E
YXRhKCk7CisKKyAgICAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKyAgICAgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnQ7IH0KKworICAgICAg
ICBCRm9udCogZm9udCgpIGNvbnN0OworCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsK
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQkZvbnQqIG1fZm9udDsKKyAgICB9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2OTY3MAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcApA
QCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5h
bCBmb250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlv
bmUgb3RoZXIgdGhhbgorICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4K
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
b250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNs
dWRlICJBdG9taWNTdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNp
bmNsdWRlIDxGb250Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9TdHJpbmcuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoKQorICAg
IDogbV9mb250KDApCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIDogbV9mb250KDApCit7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgZikKK3sKKyAgICBpZiAoZi5tX2ZvbnQpCisgICAgICAgIG1fZm9udCA9IG5ldyBCRm9udChm
Lm1fZm9udCk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSkKKyAgICA6IG1fZm9udCgwKQoreworICAgIGJvb2wgYkZvdW5kID0gZmFsc2U7Cisg
ICAgYm9vbCBiSXRhbGljID0gZm9udERlc2NyaXB0aW9uLml0YWxpYygpOworICAgIGJvb2wgYkJv
bGQgPSBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPT0gRm9udFdlaWdodEJvbGQ7CisgICAgZm9u
dF9mYW1pbHkgZmFtaWx5OworCisgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50X2ZvbnRfZmFt
aWxpZXMoKTsgaSsrKSB7CisgICAgICAgIGdldF9mb250X2ZhbWlseShpLCAmZmFtaWx5LCAwKTsK
KyAgICAgICAgaWYoIUJTdHJpbmcoZmFtaWx5TmFtZS5zdHJpbmcoKSkuQ29tcGFyZShmYW1pbHkp
KXsKKyAgICAgICAgICAgIG1fZm9udCA9IG5ldyBCRm9udCgpOworICAgICAgICAgICAgbV9mb250
LT5TZXRGYW1pbHlBbmRTdHlsZShmYW1pbHksIDApOworICAgICAgICAgICAgbV9mb250LT5TZXRT
aXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CisKKyAgICAgICAgICAgIGJGb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChiRm91bmQpIHsKKyAgICAgICAgaW50MzIgbnVtU3R5bGVzID0gY291bnRfZm9udF9zdHlsZXMo
ZmFtaWx5KTsKKyAgICAgICAgZm9udF9zdHlsZSBzdHlsZTsKKyAgICAgICAgdWludDMyIGZsYWdz
OworICAgICAgICBiRm91bmQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bVN0eWxlczsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIGdldF9mb250X3N0eWxlKGZhbWls
eSwgaSwgJnN0eWxlLCAmZmxhZ3MpID09IEJfT0spIHsKKyAgICAgICAgICAgICAgICBpZigoYkl0
YWxpYyAmJiBiQm9sZCkgJiYgICghc3RyY21wKCBzdHlsZSwgIkJvbGRJdGFsaWMiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgIXN0cmNtcChzdHlsZSwgIkJvbGQgT2JsaXF1ZSIpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgYkZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoKGJJdGFsaWMg
JiYgIWJCb2xkKSAmJiAoIXN0cmNtcChzdHlsZSwgIkl0YWxpYyIpCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhc3RyY21wKHN0eWxlLCAiT2JsaXF1ZSIpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgYkZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoKCFiSXRhbGljICYmIGJCb2xkKSAmJiAo
IXN0cmNtcChzdHlsZSwgIkJvbGQiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgIGJGb3VuZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmKCghYkl0YWxpYyAmJiAhYkJvbGQpICYmICghc3RyY21wKHN0eWxl
LCAiUm9tYSIpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21wKHN0eWxlLCAiQm9v
ayIpIHx8ICFzdHJjbXAoc3R5bGUsICJDb25kZW5zZWQiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgIXN0cmNtcChzdHlsZSwgIlJlZ3VsYXIiKSB8fCAhc3RyY21wKHN0eWxlLCAiTWVkaXVt
IikpKSB7CisgICAgICAgICAgICAgICAgICAgICBiRm91bmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmKGJGb3VuZCkKKyAgICAgICAgICAgIG1fZm9udC0+U2V0RmFtaWx5
QW5kU3R5bGUoZmFtaWx5LCBzdHlsZSk7CisgICAgfQorfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBC
Rm9udCogZm9udCkKK3sKKyAgICBtX2ZvbnQgPSBmb250OworICAgIG1fZm9udC0+U2V0U2l6ZShm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCit7Cisg
ICAgbV9mb250LT5TZXRTaXplKHNpemUpOworCisgICAgaWYgKGJvbGQgJiYgaXRhbGljKQorICAg
ICAgICBtX2ZvbnQtPlNldEZhY2UoQl9CT0xEX0ZBQ0UgfCBCX0lUQUxJQ19GQUNFKTsKKyAgICBl
bHNlIGlmIChib2xkKQorICAgICAgICBtX2ZvbnQtPlNldEZhY2UoQl9CT0xEX0ZBQ0UpOworICAg
IGVsc2UgaWYgKGl0YWxpYykKKyAgICAgICAgbV9mb250LT5TZXRGYWNlKEJfSVRBTElDX0ZBQ0Up
OworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgZGVs
ZXRlIG1fZm9udDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQor
eworICAgIGlmIChtX2ZvbnQpCisgICAgICAgIHJldHVybiBtX2ZvbnQtPlNwYWNpbmcoKSA9PSBC
X0ZJWEVEX1NQQUNJTkc7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0JGb250KiBGb250UGxh
dGZvcm1EYXRhOjpmb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250OworfQorCit1bnNp
Z25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKK3sKKyAgICB1aW50cHRyX3QgaGFz
aENvZGVzWzFdID0geyAodWludHB0cl90KWZvbnQoKSB9OworICAgIHVuc2lnbmVkIG5SZXN1bHQg
PSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENv
ZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyAgICByZXR1cm4gblJl
c3VsdDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAobV9mb250ID09IG90aGVy
Lm1fZm9udCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0NmI5YwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5v
ZGVIYWlrdS5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBH
ZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sg
UnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgi
CisKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBib29s
IGlzVXRmMTYgPSBidWZmZXJMZW5ndGggIT0gR2x5cGhQYWdlOjpzaXplOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7CisgICAgICAgIFVDaGFy
MzIgY2hhcmFjdGVyOworCisgICAgICAgIGlmKGlzVXRmMTYpIHsKKyAgICAgICAgICAgIFVDaGFy
IGxlYWQgPSBjaGFyYWN0ZXJCdWZmZXJbaSAqIDJdOworICAgICAgICAgICAgVUNoYXIgdHJhaWwg
PSBjaGFyYWN0ZXJCdWZmZXJbaSAqIDIgKyAxXTsKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IFUx
Nl9HRVRfU1VQUExFTUVOVEFSWShsZWFkLCB0cmFpbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJCdWZmZXJbaV07CisgICAgICAgIH0KKworICAg
ICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBjaGFyYWN0ZXIsIGZvbnREYXRhKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGVmODNlCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250
RGF0YUhhaWt1LmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCit7CisgICAgQkZvbnQgKmZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7Cisg
ICAgaWYgKGZvbnQpIHsKKyAgICAgICAgZm9udF9oZWlnaHQgaGVpZ2h0OworICAgICAgICBmb250
LT5HZXRIZWlnaHQoJmhlaWdodCk7CisgICAgICAgIG1fYXNjZW50ID0gaGVpZ2h0LmFzY2VudDsK
KyAgICAgICAgbV9kZXNjZW50ID0gaGVpZ2h0LmRlc2NlbnQ7CisgICAgICAgIG1fbGluZVNwYWNp
bmcgPSBoZWlnaHQubGVhZGluZzsKKyAgICAgICAgbV94SGVpZ2h0ID0gZm9udC0+U2l6ZSgpOyAv
LyBOb3Qgc3VyZSBhYm91dCB0aGlzCisgICAgICAgIG1fdW5pdHNQZXJFbSA9IDE7IC8vIEZJWE1F
IQorICAgICAgICBtX2xpbmVHYXAgPSBoZWlnaHQubGVhZGluZzsKKyAgICB9Cit9CisKK3ZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFy
V2lkdGggPSAwLmY7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJXaWR0
aHMoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAg
ICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0g
MDsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBp
ZiAoIW1fc21hbGxDYXBzRm9udERhdGEpeworICAgICAgICBGb250RGVzY3JpcHRpb24gZGVzYyA9
IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBkZXNjLnNldFNwZWNp
ZmllZFNpemUoMC43MGYqZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKKyAgICAgICAg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGRhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShkZXNj
LCBkZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKKyAgICAgICAgbV9zbWFsbENhcHNGb250RGF0YSA9
IG5ldyBTaW1wbGVGb250RGF0YSgqcGRhdGEpOworICAgIH0KKyAgICByZXR1cm4gbV9zbWFsbENh
cHNGb250RGF0YTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBXZSB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgdG8gbG9hZCBub24tQVNDSUkgZW5j
b2Rpbmcgc2l0ZXMKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6
ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIGlmIChtX3BsYXRmb3JtRGF0YS5mb250KCkpCisgICAg
ICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5mb250KCktPklzRml4ZWQo
KTsKKyAgICBlbHNlCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKK30KKwor
ZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwLjA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="16715"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32228</attachid>
            <date>2009-07-03 02:22:30 -0700</date>
            <delta_ts>2009-07-16 02:24:47 -0700</delta_ts>
            <desc>Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-drawing-files-for-WebCore-platf.patch</filename>
            <type>text/plain</type>
            <size>59213</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA4NzE0MDJlMTVlYjQzMDUzNzE2NTQyNWUwMGMwMTU1OTRiNmUwYzYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMyBKdWwgMjAwOSAxMToyMToyNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGRyYXdpbmcgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvLgoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAxNTYgKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Nv
bG9ySGFpa3UuY3BwICAgICB8ICAgNTQgKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
bG9hdFBvaW50SGFpa3UuY3BwICAgIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAgfCAgIDQ4ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwICB8ICAgNTQgKysKIC4uLi9ncmFwaGljcy9o
YWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAgICAgICAgIHwgIDU0OSArKysrKysrKysrKysr
KysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwICAg
ICAgfCAgIDYzICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZl
ckRhdGEuaCAgfCAgIDQ2ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJIYWlrdS5jcHAgICB8ICAgODEgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwICAgICB8ICAxNjcgKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAgICB8ICAyMTggKysrKysrKysKIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAgIHwgICA0OCArKwogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwICAgfCAgIDQ5ICsrCiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAgICB8ICAgNDgg
KysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcCAgICAgIHwg
IDE1OSArKysrKysKIDE1IGZpbGVzIGNoYW5nZWQsIDE3ODggaW5zZXJ0aW9ucygrKSwgMCBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0NvbG9ySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW1hZ2VIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6
ZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvUGF0aEhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggYWNmMWMyZS4uYmIwYTQzNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTkgQEAKKzIw
MDktMDctMDMgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSGFpa3Utc3Bl
Y2lmaWMgZHJhd2luZyBmaWxlcyBmb3IgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy8uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OQorCisgICAg
ICAgIEFkZGluZyBmb3VydGVlbiBmaWxlcywgQ29sb3JIYWlrdS5jcHAsIEZsb2F0UG9pbnRIYWlr
dS5jcHAsCisgICAgICAgIEZsb2F0UmVjdEhhaWt1LmNwcCwgR3JhZGllbnRIYWlrdS5jcHAsIEdy
YXBoaWNzQ29udGV4dEhhaWt1LmNwcCwKKyAgICAgICAgSWNvbkhhaWt1LmNwcCwgSW1hZ2VCdWZm
ZXJEYXRhLmgsIEltYWdlQnVmZmVySGFpa3UuY3BwLAorICAgICAgICBJbWFnZUhhaWt1LmNwcCwg
SW1hZ2VTb3VyY2VIYWlrdS5jcHAsIEludFBvaW50SGFpa3UuY3BwLAorICAgICAgICBJbnRSZWN0
SGFpa3UuY3BwLCBJbnRTaXplSGFpa3UuY3BwLCBQYXRoSGFpa3UuY3BwCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Db2xvckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9y
IHJnYl9jb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50OjpGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6b3Bl
cmF0b3IgQlJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50
SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybURl
c3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpiZWdpblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6Om9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVsbGlwc2VJblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRS
ZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50
aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFVSTEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0SGFp
a3VTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JY29uSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okljb246Oklj
b24pOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6fkljb24pOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRl
SWNvbkZvckZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9y
U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Qml0bWFwKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6fkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ludFBvaW50SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludFBv
aW50OjpJbnRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6b3BlcmF0b3IgQlBv
aW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6OkludFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW50UmVjdDo6b3BlcmF0b3IgQlJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW50U2l6ZTo6SW50U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRTaXplOjpvcGVyYXRvciBC
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0
cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRM
aW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjphZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
OmFkZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorCiAyMDA5LTA3LTAy
ICBQaWVycmUgZCdIZXJiZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Db2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvQ29sb3JIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZmI0YmEzZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvQ29sb3JIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNv
bG9yLmgiCisKKyNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDb2xvcjo6Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjKQorICAgIDogbV9jb2xvciht
YWtlUkdCQShjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhKSkKK3sKKyAgICBtX3ZhbGlk
ID0gdHJ1ZTsKK30KKworQ29sb3I6Om9wZXJhdG9yIHJnYl9jb2xvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1ha2VfY29sb3IocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Cit9CisK
KworQ29sb3IgZm9jdXNSaW5nQ29sb3IoKQoreworICAgIHJldHVybiBDb2xvcihrZXlib2FyZF9u
YXZpZ2F0aW9uX2NvbG9yKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5ZDlmCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNp
bmNsdWRlIDxQb2ludC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6
RmxvYXRQb2ludChjb25zdCBCUG9pbnQmIHApCisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAu
eSkKK3sKK30KKworRmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQlBvaW50KG1feCwgbV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YWE1YzQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNw
cApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
Z29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNp
bmNsdWRlIDxSZWN0Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZs
b2F0UmVjdChjb25zdCBCUmVjdCYgcmVjdCkKKyAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9w
KCkpCisgICAgLCBtX3NpemUocmVjdC5XaWR0aCgpICsgMSwgcmVjdC5IZWlnaHQoKSArIDEpCit7
Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBC
UmVjdChCUG9pbnQoeCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOTVkODlhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+ICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2lt
b24ubWF4aW1lQHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBH
cmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitQbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYWRpZW50OjpmaWxs
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZmQxMzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNw
cApAQCAtMCwwICsxLDU0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1
ZGUgIlBlbi5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+CisKKyNpbmNs
dWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8UmVnaW9uLmg+CisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUKK3sKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZp
ZXcqIHZpZXcpOworICAgIH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKKworICAg
IEJWaWV3KiB2aWV3OworfTsKKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHBfdmlldykKK3sKKyAgICB2aWV3ID0g
cF92aWV3OworfQorCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUoKQoreworfQorCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fY29tbW9u
KGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQoreworICAgIHNldFBhaW50aW5nRGlz
YWJsZWQoIWNvbnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQo
KQoreworICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKKyAgICBk
ZWxldGUgbV9kYXRhOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPnZpZXc7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit7CisgICAg
bV9kYXRhLT52aWV3LT5QdXNoU3RhdGUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEtPnZpZXctPlBvcFN0YXRlKCk7Cit9
CisKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZp
ZXctPkZpbGxSZWN0KHIpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAg
ICAgICBtX2RhdGEtPnZpZXctPlN0cm9rZVJlY3QociwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsK
K30KKworLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50
JiBwb2ludDIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGF0YS0+dmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFpa3VT
dHJva2VTdHlsZSgpKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcg
dGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPkZpbGxFbGxpcHNl
KHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAgICBtX2Rh
dGEtPnZpZXctPlN0cm9rZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBp
bnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlN0cm9rZUFyYyhyZWN0
LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5w
b2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlBv
aW50IGJQb2ludHNbbnBvaW50c107CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucG9pbnRz
OyBpKyspCisgICAgICAgIGJQb2ludHNbaV0gPSBwb2ludHNbaV07CisKKyAgICBtX2RhdGEtPnZp
ZXctPkZpbGxQb2x5Z29uKGJQb2ludHMsIG5wb2ludHMpOworICAgIGlmIChzdHJva2VTdHlsZSgp
ICE9IE5vU3Ryb2tlKQorICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKKyAgICAgICAg
bV9kYXRhLT52aWV3LT5TdHJva2VQb2x5Z29uKGJQb2ludHMsIG5wb2ludHMsIHRydWUsIGdldEhh
aWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJnYl9jb2xvciBvbGRDb2xvciA9
IG1fZGF0YS0+dmlldy0+SGlnaENvbG9yKCk7CisgICAgbV9kYXRhLT52aWV3LT5TZXRIaWdoQ29s
b3IoYyk7CisgICAgbV9kYXRhLT52aWV3LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZp
ZXctPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNv
bnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0aW9u
IGNvdWxkIGp1c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsIAorICAgIC8vIHRoZSBzaXplcyBh
cmUgdGhlIHNhbWUsIG9yIGV2ZW4gaWYgdGhleSBhcmUgbm90LiBPdGhlcndpc2Ugc2V2ZXJhbAor
ICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxsQXJjIGNhbGxzIGFyZSBuZWVkZWQuCit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7CisgICAgLy8g
RklYTUU6IElzIHRoaXMgY29ycmVjdD8KKyAgICAvLyBzeWxsYWJsZSBhZGRzOgorICAgIC8vIGNS
ZWN0ICs9IG1fZGF0YS0+cCgpLT5HZXRTY3JvbGxPZmZzZXQoKTsgdG8gdGhlIHJlY3QgYmVmb3Jl
CisgICAgLy8gY3JlYXRpbiB0aGUgcmVnaW9uLgorICAgIG1fZGF0YS0+dmlldy0+Q29uc3RyYWlu
Q2xpcHBpbmdSZWdpb24oJnJlZ2lvbik7Cit9CisKK3ZvaWQgc2V0Rm9jdXNSaW5nQ29sb3JDaGFu
Z2VGdW5jdGlvbih2b2lkICgqKSgpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0
cyA9IGZvY3VzUmluZ1JlY3RzKCk7CisgICAgdW5zaWduZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6
ZSgpOworCisgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRo
IEJTaGFwZT8KKworICAgIGlmIChyZWN0cy5zaXplKCkgPiAxKQorICAgIHsKKyAgICAgICAgQlJl
Z2lvbglyZWdpb247CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kp
CisgICAgICAgICAgICByZWdpb24uSW5jbHVkZShCUmVjdChyZWN0c1tpXSkpOworCisgICAgICAg
IG1fZGF0YS0+dmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICAgICAgbV9kYXRhLT52aWV3
LT5TdHJva2VSZWN0KHJlZ2lvbi5GcmFtZSgpLEJfTUlYRURfQ09MT1JTKTsKKyAgICB9Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQmIG9y
aWdpbiwgaW50IHdpZHRoLCBib29sIHByaW50aW5nKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IGVuZFBvaW50ID0gb3JpZ2lu
ICsgSW50U2l6ZSh3aWR0aCwgMCk7CisgICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2ludCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRHcmFt
bWFyKGNvbnN0IEludFBvaW50JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgYm9vbCBncmFtbWFyKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmcmVjdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgciwgZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+dmll
dy0+UGVuU2l6ZSgpOworICAgIG1fZGF0YS0+dmlldy0+U2V0UGVuU2l6ZSh3aWR0aCk7CisgICAg
bV9kYXRhLT52aWV3LT5TdHJva2VSZWN0KHIsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAg
bV9kYXRhLT52aWV3LT5TZXRQZW5TaXplKG9sZFNpemUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxjKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhcF9tb2RlIG1vZGUgPSBCX0JVVFRfQ0FQOwor
ICAgIHN3aXRjaCAobGMpIHsKKyAgICBjYXNlIFJvdW5kQ2FwOgorICAgICAgICBtb2RlID0gQl9S
T1VORF9DQVA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3F1YXJlQ2FwOgorICAgICAgICBt
b2RlID0gQl9TUVVBUkVfQ0FQOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJ1dHRDYXA6Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9kYXRhLT52aWV3LT5T
ZXRMaW5lTW9kZShtb2RlLCBtX2RhdGEtPnZpZXctPkxpbmVKb2luTW9kZSgpLCBtX2RhdGEtPnZp
ZXctPkxpbmVNaXRlckxpbWl0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGopCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgam9pbl9tb2RlIG1vZGUgPSBCX01JVEVSX0pPSU47CisgICAgc3dp
dGNoIChsaikgeworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICBtb2RlID0gQl9ST1VORF9K
T0lOOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAgbW9kZSA9
IEJfQkVWRUxfSk9JTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNaXRlckpvaW46CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9kYXRhLT52aWV3LT5TZXRM
aW5lTW9kZShtX2RhdGEtPnZpZXctPkxpbmVDYXBNb2RlKCksIG1vZGUsIG1fZGF0YS0+dmlldy0+
TGluZU1pdGVyTGltaXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxp
bWl0KGZsb2F0IGxpbWl0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+U2V0TGluZU1vZGUobV9kYXRhLT52aWV3LT5M
aW5lQ2FwTW9kZSgpLCBtX2RhdGEtPnZpZXctPkxpbmVKb2luTW9kZSgpLCBsaW1pdCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBvcGFjaXR5KQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZHJhd2luZ19tb2RlIG1vZGUgPSBCX09QX0NPUFk7CisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6CisgICAgY2FzZSBDb21wb3Np
dGVDb3B5OgorICAgICAgICAvLyBVc2UgdGhlIGRlZmF1bHQgYWJvdmUKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgorICAgICAgICBtb2RlID0gQl9PUF9PVkVS
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uOiBVbnN1cHBvcnRlZCBjb21wb3NpdGUgb3Bl
cmF0aW9uICVzXG4iLAorICAgICAgICAgICAgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wKS51dGY4
KCkuZGF0YSgpKTsKKyAgICB9CisgICAgbV9kYXRhLT52aWV3LT5TZXREcmF3aW5nTW9kZShtb2Rl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rh
dGEtPnZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKHBhdGgucGxhdGZvcm1QYXRoKCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRD
VE0oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJbnRQb2ludCBHcmFwaGljc0Nv
bnRleHQ6Om9yaWdpbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50
UG9pbnQoMCwgMCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFk
aWFucykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRoaWNrbmVzcykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQoreworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiBsaW5rLCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQmIGFGb250KQoreworICAgIG1fZGF0
YS0+dmlldy0+U2V0Rm9udChhRm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5mb250
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworfQor
CitwYXR0ZXJuIEdyYXBoaWNzQ29udGV4dDo6Z2V0SGFpa3VTdHJva2VTdHlsZSgpeworICAgIHN3
aXRjaCAoc3Ryb2tlU3R5bGUoKSkgeworICAgIGNhc2UgU29saWRTdHJva2U6CisgICAgICAgIHJl
dHVybiBCX1NPTElEX0hJR0g7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG90dGVkU3Ryb2tl
OgorICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRGFzaGVkU3Ryb2tlOgorICAgICAgICAvLyBGSVhNRTogdXNlIGEgYmV0dGVyIGRhc2hlZCBz
dHJva2UhCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBCX01JWEVE
X0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEJf
U09MSURfTE9XOworICAgICAgICBicmVhazsKKwl9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBzdHJva2VTdHlsZSkK
K3sKKwkvLyBGSVhNRTogc2VlIGdldEhhaWt1U3Ryb2tlU3R5bGUuCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0IHRoaWNrbmVzcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlNldFBlblNpemUodGhpY2tuZXNzKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coSW50
U2l6ZSBjb25zdCYsaW50LENvbG9yIGNvbnN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSWNvbkhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44NjIzOTBmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JY29uSGFpa3UuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSWNvbi5oIgor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNvbjo6SWNvbigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworSWNvbjo6fkljb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBQYXNzUmVm
UHRyPEljb24+KDApOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8SWNvbj4oMCk7Cit9CisKK3ZvaWQgSWNvbjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yM2JlNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaApAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdt
YWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1h
Z2VCdWZmZXJEYXRhX2gKKyNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhX2gKKworI2luY2x1ZGUgIk93
blB0ci5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEludFNpemU7CisK
KyAgICBjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW1hZ2VC
dWZmZXJEYXRhKGNvbnN0IEludFNpemUmKTsKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgIC8vIEltYWdlQnVmZmVyRGF0YV9oCisKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTNlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5t
YXhpbWVAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRT
aXplJikKK3sKK30KKworSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmLCBi
b29sIGdyYXlTY2FsZSwgYm9vbCYgc3VjY2VzcykKKyAgICA6IG1fZGF0YShJbnRTaXplKCkpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdWNjZXNzID0gZmFsc2U7Cit9CisKK0ltYWdl
QnVmZmVyOjp+SW1hZ2VCdWZmZXIoKQoreworfQorCitHcmFwaGljc0NvbnRleHQqIEltYWdlQnVm
ZmVyOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitJ
bWFnZSogSW1hZ2VCdWZmZXI6OmltYWdlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYjY5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aW5jbHVkZSA8QXBwbGljYXRpb24uaD4KKyNpbmNsdWRlIDxCaXRtYXAuaD4KKyNpbmNsdWRlIDxW
aWV3Lmg+CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKworLy8gVGhpcyBmdW5jdGlvbiBsb2FkcyBy
ZXNvdXJjZXMgZnJvbSBXZWJLaXQKK1ZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QgY2hhciopOworCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGcmFtZURhdGE6
OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKK3sKKyAgICBpZiAoY2xlYXJNZXRhZGF0YSkKKyAg
ICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKKworICAgIGlmIChtX2ZyYW1lKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBOb3Qgc3VyZSB3aHkgYmVfYXBwIGlzIGNoZWNrZWQKKyAgICAgICAgaWYg
KGJlX2FwcCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOworICAgICAgICBtX2ZyYW1lID0g
MDsKKyAgICAgICAgbV9kdXJhdGlvbiA9IDAuMGY7CisgICAgICAgIG1faGFzQWxwaGEgPSB0cnVl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K1dURjo6UGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0
IGNoYXIqIG5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGFyciA9IGxvYWRSZXNvdXJjZUludG9B
cnJheShuYW1lKTsKKyAgICBXVEY6OlBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltZyA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShhcnIuZGF0YSgpLCBhcnIuc2l6ZSgpKTsKKyAgICBpbWctPnNldERh
dGEoYnVmZmVyLCB0cnVlKTsKKyAgICByZXR1cm4gaW1nOworfQorCit2b2lkIEJpdG1hcEltYWdl
Ojppbml0UGxhdGZvcm1EYXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0
ZVBsYXRmb3JtRGF0YSgpCit7Cit9CisKKy8vIERyYXdpbmcgUm91dGluZXMKK3ZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKK3sKKyAgICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtYXlGaWxsV2l0
aFNvbGlkQ29sb3IoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0LCBz
b2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFNpemUg
c2VsZlNpemUgPSBzaXplKCk7CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAgICAvLyBTZXQgdGhl
IGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHN1cHBvcnQg
YWxsIHRoZSBjb21wb3NpdGUgbW9kZXMgOgorICAgIC8vCWN0eHQtPnNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcCk7CisKKyAgICBCVmlldyogdmlldyA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwor
CisgICAgQlJlY3Qgc3JjUmVjdChzcmMpOworICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRl
IGF0CisgICAgLy8gaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4
c3BpcmFsL2RlbW8uaHRtbAorICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJfT1BfQUxQSEEpOwor
ICAgIHZpZXctPkRyYXdCaXRtYXAoaW1hZ2UsIHNyY1JlY3QgJiBpbWFnZS0+Qm91bmRzKCksIGRz
dCk7CisKKyAgICBjdHh0LT5yZXN0b3JlKCk7CisKKyAgICBzdGFydEFuaW1hdGlvbigpOworfQor
Cit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJh
bnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9p
bnQsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCit7CisJ
Ly8gRklYTUU6IGZpbmlzaCB0aGlzIHRvIHN1cHBvcnQgYWxzbyBwaGFzZWQgcG9zaXRpb24gKHNy
Y1BvaW50KQorCisgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUg
YW4gaW1hZ2UgeWV0LgorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBjdXJyZW50VyA9IDA7
CisgICAgZmxvYXQgY3VycmVudEggPSAwOworCisgICAgY3R4dC0+c2F2ZSgpOworCisgICAgY3R4
dC0+cGxhdGZvcm1Db250ZXh0KCktPlNldERyYXdpbmdNb2RlKEJfT1BfQUxQSEEpOworCisgICAg
Y3R4dC0+Y2xpcChJbnRSZWN0KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC53aWR0
aCgpLCBkc3RSZWN0LmhlaWdodCgpKSk7CisKKyAgICB3aGlsZSAoY3VycmVudFcgPCBkc3RSZWN0
LndpZHRoKCkpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRIIDwgZHN0UmVjdC5oZWlnaHQoKSkg
eworICAgICAgICAgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPkRyYXdCaXRtYXAoaW1hZ2Us
IEJQb2ludChkc3RSZWN0LngoKSArIGN1cnJlbnRXLCBkc3RSZWN0LnkoKSArIGN1cnJlbnRIKSk7
CisgICAgICAgICAgICBjdXJyZW50SCArPSB0aWxlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgfQor
ICAgICAgICBjdXJyZW50VyArPSB0aWxlUmVjdC53aWR0aCgpOworICAgICAgICBjdXJyZW50SCA9
IDA7CisgICAgfQorICAgIGN0eHQtPnJlc3RvcmUoKTsKKworICAgIHN0YXJ0QW5pbWF0aW9uKCk7
Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCit7CisgICAgLy8g
RklYTUU6IG5lZWQgdG8gY2hlY2sgdGhlIFJHQkEzMiBidWZmZXIgdG8gc2VlIGlmIGl0IGlzIDF4
MS4KKyAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOworfQorCitCQml0bWFwKiBCaXRtYXBJbWFn
ZTo6Z2V0Qml0bWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxCaXRtYXBJbWFn
ZSo+KHRoaXMpLT5mcmFtZUF0SW5kZXgoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJj
ZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyNzVkZQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3Vy
Y2VIYWlrdS5jcHAKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQW5kcmVhIEFuemFuaSAgIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR0lG
SW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRvckRlY29kZXIuaCIKKyNpbmNsdWRl
ICJQTkdJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKKyNpbmNs
dWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8Qml0bWFwLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBIYWlrdSB0
cmFuc2xhdG9yIEFQSQorSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNvZGVyKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgZGF0YSkKK3sKKyAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJl
IG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZyB3aXRoLgorICAgIGludCBsZW5n
dGggPSBkYXRhLnNpemUoKTsKKyAgICBpZiAobGVuZ3RoIDwgNCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1Q29udGVudHMgPSAoY29uc3QgdW5zaWduZWQg
Y2hhciopIGRhdGEuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRh
KCk7CisKKyAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lGOCg3IG9yIDkpLgorICAgIGlmICghc3Ry
bmNtcChjb250ZW50cywgIkdJRjgiLCA0KSkKKyAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURl
Y29kZXIoKTsKKworICAgIC8vIFRlc3QgZm9yIFBORy4KKyAgICBpZiAodUNvbnRlbnRzWzBdID09
IDB4ODkgJiYKKyAgICAgICAgdUNvbnRlbnRzWzFdID09IDB4NTAgJiYKKyAgICAgICAgdUNvbnRl
bnRzWzJdID09IDB4NEUgJiYKKyAgICAgICAgdUNvbnRlbnRzWzNdID09IDB4NDcpCisgICAgICAg
IHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBKUEVHCisgICAgLy8gaWYg
KHVDb250ZW50c1swXSA9PSAweEZGICYmCisgICAgLy8gICAgIHVDb250ZW50c1sxXSA9PSAweEQ4
ICYmCisgICAgLy8gICAgIHVDb250ZW50c1syXSA9PSAweEZGKQorICAgIC8vICAgICByZXR1cm4g
bmV3IEpQRUdJbWFnZURlY29kZXIoKTsKKworICAgIC8vIEJNUAorICAgIGlmIChzdHJuY21wKGNv
bnRlbnRzLCAiQk0iLCAyKSA9PSAwKQorICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2Rl
cigpOworCisgICAgLy8gSUNPcyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2Vk
IGJ5IGEgMi1ieXRlIDEuCisgICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2Vk
IGJ5IDItYnl0ZSAyLgorICAgIC8vIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAx
XDAwMCIsIDQpIHx8CisgICAgLy8gICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJc
MDAwIiwgNCkpCisgICAgLy8gICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKCk7CisKKyAg
ICAvLyBYQk1zIHJlcXVpcmUgOCBieXRlcyBvZiBpbmZvLgorICAgIGlmIChsZW5ndGggPj0gOCAm
JiAhc3RybmNtcChjb250ZW50cywgIiNkZWZpbmUgIiwgOCkpCisgICAgICAgIHJldHVybiBuZXcg
WEJNSW1hZ2VEZWNvZGVyKCk7CisKKyAgICBwcmludGYoIkludmFsaWQgaW1hZ2UhXG4iICk7Cisg
ICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBoZWNrIHRoaXMgaXMuCisgICAg
cmV0dXJuIDA7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCisgICAgOiBtX2RlY29k
ZXIoMCkKK3sKK30KKworSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCit7CisgICAgY2xlYXIo
dHJ1ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6
ZV90IGNsZWFyQmVmb3JlRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWRCdWZm
ZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGRlbGV0ZSBtX2RlY29kZXI7
CisgICAgbV9kZWNvZGVyID0gMDsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXI7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6
OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAg
ICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KKyAgICAvLyBUaGlz
IG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3RhbmNl
IG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KKyAgICAvLyBJZiBpbnN1ZmZpY2ll
bnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRl
Y29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRlLgorICAgIGlmKCFtX2RlY29kZXIpCisg
ICAgICAgIG1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIoZGF0YS0+YnVmZmVyKCkpOworCisgICAg
aWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlY29kZXItPnNldERhdGEo
ZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZh
aWxhYmxlKCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK0ludFNpemUg
SW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdAoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOworfQor
CitJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2l6ZSgpOworfQorCitpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3Vu
dCgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTm9u
ZTsKKworICAgIHJldHVybiBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOworfQorCitTdHJp
bmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworc2l6ZV90IEltYWdlU291cmNl
OjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVy
LT5mcmFtZUNvdW50KCkgOiAwOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3Jl
YXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0
YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7Cit9CisKK2Jvb2wgSW1hZ2VT
b3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICgh
bV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1
ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4g
YnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRl
OworfQorCitmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJH
QkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
OworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpG
cmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBidWZmZXItPmR1cmF0
aW9uKCkgLyAxMDAwLjBmOworfQorCitib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIgfHwgIW1fZGVjb2Rlci0+
c3VwcG9ydHNBbHBoYSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSR0JBMzJCdWZm
ZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBp
ZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGJ1ZmZlci0+aGFzQWxwaGEo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iNTU1YTRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKworI2luY2x1ZGUgPFBvaW50Lmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitJbnRQb2ludDo6SW50UG9pbnQoY29uc3QgQlBvaW50JiBwKQor
ICAgIDogbV94KHN0YXRpY19jYXN0PGludD4ocC54KSkKKyAgICAsIG1feShzdGF0aWNfY2FzdDxp
bnQ+KHAueSkpCit7Cit9CisKK0ludFBvaW50OjpvcGVyYXRvciBCUG9pbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhh
aWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRhZGJiCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNs
dWRlIDxSZWN0Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRSZWN0OjpJbnRSZWN0
KGNvbnN0IEJSZWN0JiByKQorICAgIDogbV9sb2NhdGlvbihyLkxlZnRUb3AoKSkKKyAgICAsIG1f
c2l6ZShyLkludGVnZXJXaWR0aCgpICsgMSwgci5JbnRlZ2VySGVpZ2h0KCkgKyAxKQoreworfQor
CitJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN1YnRy
YWN0IDEgZnJvbSBoZWlnaHQgYW5kIHdpZHRoPworICAgIHJldHVybiBCUmVjdChCUG9pbnQoeCgp
LCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRT
aXplSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZjkxYTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlr
dS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKwor
I2luY2x1ZGUgPFNpemUuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemU6Oklu
dFNpemUoY29uc3QgQlNpemUmIHMpCisgICAgOiBtX3dpZHRoKHMuSW50ZWdlcldpZHRoKCkpCisg
ICAgLCBtX2hlaWdodChzLkludGVnZXJIZWlnaHQoKSkKK3sKK30KKworSW50U2l6ZTo6b3BlcmF0
b3IgQlNpemUoKSBjb25zdAoreworICAgIHJldHVybiBCU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjgyNzM3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L1BhdGhIYWlrdS5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQYXRoLmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPG1hdGgu
aD4KKyNpbmNsdWRlIDxSZWdpb24uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhdGg6
OlBhdGgoKQorICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCkpCit7Cit9CisKK1BhdGg6On5QYXRo
KCkKK3sKKyAgICBkZWxldGUgbV9wYXRoOworfQorCitQYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90
aGVyKQorICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCpvdGhlci5wbGF0Zm9ybVBhdGgoKSkpCit7
Cit9CisKK1BhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKK3sKKyAgICBp
ZiAoJm90aGVyICE9IHRoaXMpCisgICAgICAgIG1fcGF0aCA9IG90aGVyLnBsYXRmb3JtUGF0aCgp
OworCisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
dGgtPkNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBQ
YXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgtPkZyYW1lKCk7
Cit9CisKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAg
IC8vIEZJWE1FOiBVc2UgT2Zmc2V0Qnk/CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0
IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBj
b25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCBy
LCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIp
Cit7CisgICAgbV9wYXRoLT5JbmNsdWRlKHIpOworfQorCit2b2lkIFBhdGg6OmFkZEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGF0aDo6Y2xlYXIoKQoreworICAgIG1fcGF0aC0+TWFrZUVtcHR5KCk7Cit9CisKK2Jvb2wgUGF0
aDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3BhdGgtPkZyYW1lKCkuSXNWYWxp
ZCgpOworfQorCitTdHJpbmcgUGF0aDo6ZGVidWdTdHJpbmcoKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFBhdGg6OmFwcGx5
KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciog
YXBwbGllcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16716"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32364</attachid>
            <date>2009-07-07 01:34:59 -0700</date>
            <delta_ts>2009-07-16 22:47:30 -0700</delta_ts>
            <desc>Patch to add Haiku-specific files for WebCore/platform/image-decoders/.</desc>
            <filename>Added-Haiku-specific-files-for-WebCore-platform-imag.patch</filename>
            <type>text/plain</type>
            <size>5559</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBiMWY2ZTQ1M2NjYjgwY2U3NTAzMTFhYWJhNWQzMjA2MGI5ODJmMGQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgNyBKdWwgMjAwOSAxMDozMzowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDIzICsrKysKIC4uLi9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJI
YWlrdS5jcHAgICAgIHwgIDEzMSArKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2Vk
LCAxNTQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNw
cAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYWNmMWMyZS4uNjU5NjIyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAwOS0wNy0wNyAgTWF4aW1lIFNp
bW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy8uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk0OQorCisgICAgICAgIEFkZGluZyBhIG5ldyBmaWxl
LCBJbWFnZURlY29kZXJIYWlrdS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JB
MzJCdWZmZXI6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0
SGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6OmhlaWdodCk6CisKIDIwMDktMDctMDIgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVt
b250QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2Rl
ckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VE
ZWNvZGVySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDJj
YzIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hh
aWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgor
CisjaW5jbHVkZSA8Qml0bWFwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSR0JBMzJC
dWZmZXI6OlJHQkEzMkJ1ZmZlcigpCisgICAgOiBtX2hhc0FscGhhKGZhbHNlKQorICAgICwgbV9z
dGF0dXMoRnJhbWVFbXB0eSkKKyAgICAsIG1fZHVyYXRpb24oMCkKKyAgICAsIG1fZGlzcG9zYWxN
ZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKK3sKK30gCisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpj
bGVhcigpCit7CisgICAgbV9ieXRlcy5jbGVhcigpOworICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0
eTsKKyAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZy
YW1lQnVmZmVyQ2FjaGUoKQorICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0bWFwIGRh
dGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAgIC8vIGluaXRGcmFtZUJ1ZmZlcigpIGFu
ZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZAorICAgIC8vIG90aGVyIG1l
dGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgorfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6
emVyb0ZpbGwoKQoreworICAgIG1fYnl0ZXMuZmlsbCgwKTsKKyAgICBtX2hhc0FscGhhID0gdHJ1
ZTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1
ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5t
X2hhc0FscGhhKTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRo
LCBpbnQgbmV3SGVpZ2h0KQoreworICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVj
ayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZQorICAgIC8vIHJlcXVlc3RlZCBzaXplIHdh
cyB0b28gYmlnLi4uCisgICAgbV9ieXRlcy5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQpOwor
ICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAgICAvLyBaZXJv
IHRoZSBpbWFnZS4KKyAgICB6ZXJvRmlsbCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK05h
dGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Cit7Cisg
ICAgY29uc3Qgdm9pZCogYnl0ZXMgPSBtX2J5dGVzLmRhdGEoKTsKKworICAgIEJCaXRtYXAqIGJt
cCA9IG5ldyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSwgQl9SR0IzMik7
CisgICAgYm1wLT5TZXRCaXRzKGJ5dGVzLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQo
KSwgMCwgQl9SR0IzMik7CisKKyAgICByZXR1cm4gYm1wOworfQorCitib29sIFJHQkEzMkJ1ZmZl
cjo6aGFzQWxwaGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0FscGhhOworfQorCit2b2lk
IFJHQkEzMkJ1ZmZlcjo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKK3sKKyAgICBtX2hhc0FscGhh
ID0gYWxwaGE7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMg
c3RhdHVzKQoreworICAgIG1fc3RhdHVzID0gc3RhdHVzOworfQorCitSR0JBMzJCdWZmZXImIFJH
QkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX2J5dGVz
ID0gb3RoZXIubV9ieXRlczsKKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFz
QWxwaGEob3RoZXIuaGFzQWxwaGEoKSk7CisgICAgc2V0UmVjdChvdGhlci5yZWN0KCkpOworICAg
IHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CisgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRp
b24oKSk7CisgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitpbnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOworfQorCitpbnQgUkdCQTMyQnVmZmVyOjpoZWln
aHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32371</attachid>
            <date>2009-07-07 03:17:18 -0700</date>
            <delta_ts>2009-07-16 04:17:33 -0700</delta_ts>
            <desc>Patch to add Haiku-specific font files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-font-files-for-WebCore-platform.patch</filename>
            <type>text/plain</type>
            <size>28194</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3N2Q0NjZmNThiYmFjNTEzMTQ1YjNhNzJkZTc2OGVhNWMwM2Q0M2RkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgNyBKdWwgMjAwOSAxMjoxNTo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIEhhaWt1LXNwZWNpZmljIGZvbnQgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvLgoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgNDggKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcCB8ICAgODkgKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcCAgfCAgIDQ5ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwICAgICAgfCAgMTE4ICsrKysrKysrKysrKysr
CiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGEuaCB8ICAg
NjkgKysrKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3Bw
ICAgICAgIHwgIDE3MCArKysrKysrKysrKysrKysrKysrKwogLi4uL2dyYXBoaWNzL2hhaWt1L0ds
eXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwICAgICAgfCAgIDYzICsrKysrKysKIC4uLi9ncmFwaGlj
cy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcCAgICAgICAgIHwgIDEwNCArKysrKysrKysr
KysKIDggZmlsZXMgY2hhbmdlZCwgNzEwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250Q2Fj
aGVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ZvbnREYXRhSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURh
dGFIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcAoKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNm
MWMyZS4uZTFkMjY5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAwOS0wNy0wNyAgTWF4aW1lIFNpbW9uICA8
c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBIYWlrdS1zcGVjaWZpYyBmb250IGZpbGVzIGZvciBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzLy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI2OTQ5CisKKyAgICAgICAgQWRkaW5nIHNldmVuIGZpbGVzLCBGb250
Q2FjaGVIYWlrdS5jcHAsIEZvbnREYXRhSGFpa3UuY3BwLAorICAgICAgICBGb250SGFpa3UuY3Bw
LCBGb250UGxhdGZvcm1EYXRhLmgsIEZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAsCisgICAgICAg
IEdseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwIGFuZCBTaW1wbGVGb250RGF0YUhhaWt1LmNwcAor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNoYXJV
bmljb2RlVG9VdGY4KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhblJldHVybkZhbGxiYWNr
Rm9udHNGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
R2x5cGhQYWdlOjpmaWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1w
bGVGb250RGF0YUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c21h
bGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmNvbnRh
aW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaCk6CisKIDIwMDktMDctMDIgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVt
b250QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udENhY2hlSGFpa3UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjczYWEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcApA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8
bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sK
K30KKworY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEgZGF0YShmb250LmZvbnREZXNjcmlwdGlvbigp
LCBmb250LmZhbWlseSgpLmZhbWlseSgpKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERhdGEo
JmRhdGEpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KQoreworCisgICAgY29uc3QgQkZvbnQqIGRlZmF1bHRGb250ID0gYmVfcGxhaW5fZm9udDsKKyAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRpb246
Ok1vbm9zcGFjZUZhbWlseSkKKyAgICAgICAgZGVmYXVsdEZvbnQgPSBiZV9maXhlZF9mb250Owor
ICAgIGVsc2UgaWYgKGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBGb250V2VpZ2h0Qm9sZCkK
KyAgICAgICAgZGVmYXVsdEZvbnQgPSBiZV9ib2xkX2ZvbnQ7CisKKyAgICBmb250X2ZhbWlseSBm
YW1pbHk7CisgICAgZGVmYXVsdEZvbnQtPkdldEZhbWlseUFuZFN0eWxlKCZmYW1pbHksIDApOwor
ICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgc19EZWZhdWx0U3RyKGZhbWlseSk7CisKKyAgICByZXR1
cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIHNfRGVmYXVsdFN0
cik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKwordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJh
aXRzTWFza3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnREYXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0
YUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY4YWU4Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0
YUhhaWt1LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9u
IEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3Jn
ZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRm9u
dERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkgY29uc3QKK3sKKwlub3RJbXBsZW1lbnRlZCgpOworCXJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjg2
NzY3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5o
IgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
KyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxpbnRlcmZhY2UvRm9u
dC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCisvLyBGaXgg
dGVtcCByb3V0aW5lIHRvIGNoZWNrIHRoZSBjb252ZXJzaW9uIHdvcmtzLCBwbGVhc2UgbW92ZSBp
dCBBU0FQCQoraW50IGNoYXJVbmljb2RlVG9VdGY4KHVuc2lnbmVkIHNob3J0IGdseXBoLCBjaGFy
KiBvdXQpCit7CisgICAgaW50IGkgPSAwOworCisgICAgaWYgKGdseXBoIDwgMHgwMDgwKQorICAg
ICAgICBvdXRbaSsrXSA9IChjaGFyKWdseXBoOworICAgIGVsc2UgaWYgKGdseXBoIDwgMHgwODAw
KSB7IC8vdHdvIGJ5dGVzCisgICAgICAgIG91dFtpKytdID0gMHhjMCB8ICgoIGdseXBoICkgPj4g
NiApOworICAgICAgICBvdXRbaSsrXSA9IDB4ODAgfCAoKCBnbHlwaCApICYgMHgzRiApOworICAg
IH0gZWxzZSBpZiAoZ2x5cGggPiAweDA4MDApIHsgLy8zIGJ5dGVzCisgICAgICAgIG91dFtpKytd
ID0gMHhlMCB8ICgoIGdseXBoICkgPj4gMTIgKTsKKyAgICAgICAgb3V0W2krK10gPSAweDgwIHwg
KCAoKCBnbHlwaCApID4+IDYgKSAmIDB4M0YgKTsKKyAgICAgICAgb3V0W2krK10gPSAweDgwIHwg
KCggZ2x5cGggKSAmIDB4M0YpOworICAgIH0KKworICAgIG91dFtpXSA9ICdcMCc7CisgICAgcmV0
dXJuIGk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGb250OjpjYW5SZXR1cm5G
YWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBDb2xvciBjb2xvciA9IGdyYXBoaWNzQ29u
dGV4dC0+ZmlsbENvbG9yKCk7CisgICAgQlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxCVmlldyo+
KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIEJGb250KiBtX2ZvbnQg
PSBzdGF0aWNfY2FzdDxCRm9udCo+KGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CisKKyAg
ICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VP
dmVyKTsKKyAgICB2aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIHZpZXctPlNldEZvbnQo
bV9mb250KTsKKworICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0X2Nhc3Q8R2x5
cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CisgICAgZmxvYXQgb2Zm
c2V0ID0gcG9pbnQueCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKysp
IHsKKyAgICAgICAgY2hhciBvdXRbNF07CisgICAgICAgIGNoYXJVbmljb2RlVG9VdGY4KGdseXBo
c1tpXSwgb3V0KTsKKworICAgICAgICB2aWV3LT5EcmF3U3RyaW5nKG91dCwgc2l6ZW9mKG91dCks
IEJQb2ludChvZmZzZXQscG9pbnQueSgpKSk7CisgICAgICAgIG9mZnNldCArPSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlQXQoZnJvbSArIGkpOworICAgIH0KK30KKwordm9pZCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworZmxvYXQgRm9udDo6
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25z
dCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDM7Cit9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50JiwgaW50LCBp
bnQsIGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIGludCwgYm9vbCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkZmU5NAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0w
LDAgKzEsNjkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9u
dCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90
aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX0gKKyNkZWZpbmUgRm9udFBs
YXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgorCisvLyBBZGRpbmcgaW50ZXJmYWNlLyB0byBhdm9pZCBjb25mdXNpb24g
d2l0aCBXZWJLaXQgRm9udC5oCisjaW5jbHVkZSA8aW50ZXJmYWNlL0ZvbnQuaD4KKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKTsKKworICAgICAgICBGb250UGxhdGZvcm1EYXRhKCk7CisgICAgICAgIEZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgQkZvbnQqIGZvbnQpOworICAgICAgICBGb250UGxh
dGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgICAgICBG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEp
OworICAgICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgICAgIGJvb2wgaXNGaXhlZFBp
dGNoKCk7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiAhbV9mb250OyB9CisKKyAgICAgICAgQkZvbnQqIGZvbnQoKSBjb25zdDsKKworICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEJGb250
KiBtX2ZvbnQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1E
YXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZv
cm1EYXRhSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOWQw
OTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3Vs
ZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBG
b250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRy
ZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAi
Rm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8Rm9udC5oPgorI2luY2x1ZGUgPHN1cHBv
cnQvU3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKCkKKyAgICA6IG1fZm9udCgwKQoreworfQorCitGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
KyAgICA6IG1fZm9udCgwKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEpCit7CisgICAgaWYg
KGZvbnRQbGF0Zm9ybURhdGEubV9mb250KQorICAgICAgICBtX2ZvbnQgPSBuZXcgQkZvbnQoZm9u
dFBsYXRmb3JtRGF0YS5tX2ZvbnQpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBtX2ZvbnQoMCkKK3sKKyAgICBib29sIGJGb3Vu
ZCA9IGZhbHNlOworICAgIGJvb2wgYkl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsK
KyAgICBib29sIGJCb2xkID0gZm9udERlc2NyaXB0aW9uLndlaWdodCgpID09IEZvbnRXZWlnaHRC
b2xkOworICAgIGZvbnRfZmFtaWx5IGZhbWlseTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnRfZm9udF9mYW1pbGllcygpOyBpKyspIHsKKyAgICAgICAgZ2V0X2ZvbnRfZmFtaWx5KGks
ICZmYW1pbHksIDApOworICAgICAgICBpZiAoIUJTdHJpbmcoZmFtaWx5TmFtZS5zdHJpbmcoKSku
Q29tcGFyZShmYW1pbHkpKSB7CisgICAgICAgICAgICBtX2ZvbnQgPSBuZXcgQkZvbnQoKTsKKyAg
ICAgICAgICAgIG1fZm9udC0+U2V0RmFtaWx5QW5kU3R5bGUoZmFtaWx5LCAwKTsKKyAgICAgICAg
ICAgIG1fZm9udC0+U2V0U2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworCisg
ICAgICAgICAgICBiRm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoYkZvdW5kKSB7CisgICAgICAgIGludDMyIG51bVN0eWxlcyA9IGNv
dW50X2ZvbnRfc3R5bGVzKGZhbWlseSk7CisgICAgICAgIGZvbnRfc3R5bGUgZm9udFN0eWxlOwor
ICAgICAgICB1aW50MzIgZmxhZ3M7CisgICAgICAgIGJGb3VuZCA9IGZhbHNlOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU3R5bGVzOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChn
ZXRfZm9udF9zdHlsZShmYW1pbHksIGksICZmb250U3R5bGUsICZmbGFncykgPT0gQl9PSykgewor
ICAgICAgICAgICAgICAgIFN0cmluZyBzdHlsZShmb250U3R5bGUpOworICAgICAgICAgICAgICAg
IGlmICgoYkl0YWxpYyAmJiBiQm9sZCkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlID09
ICJCb2xkSXRhbGljIiB8fCBzdHlsZSA9PSAiQm9sZCBPYmxpcXVlIikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgIGJGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoYkl0YWxpYyAmJiAhYkJvbGQp
CisgICAgICAgICAgICAgICAgICAgICYmIChzdHlsZSA9PSAiSXRhbGljIiB8fCBzdHlsZSA9PSAi
T2JsaXF1ZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICBiRm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoKCFiSXRhbGljICYmIGJCb2xkKSAmJiBzdHlsZSA9PSAiQm9sZCIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgIGJGb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoIWJJdGFsaWMgJiYgIWJC
b2xkKQorICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUgPT0gIlJvbWEiCisgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBzdHlsZSA9PSAiQm9vayIgfHwgc3R5bGUgPT0gIkNvbmRlbnNlZCIK
KyAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0eWxlID09ICJSZWd1bGFyIiB8fCBzdHlsZSA9
PSAiTWVkaXVtIikpIHsKKyAgICAgICAgICAgICAgICAgICAgIGJGb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGJGb3VuZCkKKyAgICAgICAgICAgIG1fZm9udC0+
U2V0RmFtaWx5QW5kU3R5bGUoZmFtaWx5LCBmb250U3R5bGUpOworICAgIH0KK30KKworRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgQkZvbnQqIGZvbnQpCit7CisgICAgbV9mb250ID0gZm9udDsKKyAgICBtX2Zv
bnQtPlNldFNpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKK30KKworRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
aXRhbGljKQoreworICAgIG1fZm9udC0+U2V0U2l6ZShzaXplKTsKKworICAgIGlmIChib2xkICYm
IGl0YWxpYykKKyAgICAgICAgbV9mb250LT5TZXRGYWNlKEJfQk9MRF9GQUNFIHwgQl9JVEFMSUNf
RkFDRSk7CisgICAgZWxzZSBpZiAoYm9sZCkKKyAgICAgICAgbV9mb250LT5TZXRGYWNlKEJfQk9M
RF9GQUNFKTsKKyAgICBlbHNlIGlmIChpdGFsaWMpCisgICAgICAgIG1fZm9udC0+U2V0RmFjZShC
X0lUQUxJQ19GQUNFKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEo
KQoreworICAgIGRlbGV0ZSBtX2ZvbnQ7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNG
aXhlZFBpdGNoKCkKK3sKKyAgICBpZiAobV9mb250KQorICAgICAgICByZXR1cm4gbV9mb250LT5T
cGFjaW5nKCkgPT0gQl9GSVhFRF9TUEFDSU5HOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitC
Rm9udCogRm9udFBsYXRmb3JtRGF0YTo6Zm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9u
dDsKK30KKwordW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0Cit7CisgICAg
dWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgKHVpbnRwdHJfdClmb250KCkgfTsKKyAgICB1bnNp
Z25lZCBuUmVzdWx0ID0gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxV
Q2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgcmV0dXJuIG5SZXN1bHQ7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1f
Zm9udCA9PSBvdGhlci5tX2ZvbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5v
ZGVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRy
ZWVOb2RlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNWI4
MDQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ds
eXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBh
Z2VUcmVlTm9kZS5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9Vbmljb2RlLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEp
Cit7CisgICAgYm9vbCBpc1V0ZjE2ID0gYnVmZmVyTGVuZ3RoICE9IEdseXBoUGFnZTo6c2l6ZTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgewor
ICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKworICAgICAgICBpZihpc1V0ZjE2KSB7CisgICAg
ICAgICAgICBVQ2hhciBsZWFkID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyXTsKKyAgICAgICAgICAg
IFVDaGFyIHRyYWlsID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyICsgMV07CisgICAgICAgICAgICBj
aGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlckJ1ZmZlcltpXTsKKworICAg
ICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBjaGFyYWN0ZXIsIGZvbnREYXRhKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmQ0ZDVmCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250
RGF0YUhhaWt1LmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCit7CisgICAgQkZvbnQqIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7Cisg
ICAgaWYgKGZvbnQpIHsKKyAgICAgICAgZm9udF9oZWlnaHQgaGVpZ2h0OworICAgICAgICBmb250
LT5HZXRIZWlnaHQoJmhlaWdodCk7CisgICAgICAgIG1fYXNjZW50ID0gaGVpZ2h0LmFzY2VudDsK
KyAgICAgICAgbV9kZXNjZW50ID0gaGVpZ2h0LmRlc2NlbnQ7CisgICAgICAgIG1fbGluZVNwYWNp
bmcgPSBoZWlnaHQubGVhZGluZzsKKyAgICAgICAgbV94SGVpZ2h0ID0gZm9udC0+U2l6ZSgpOyAv
LyBOb3Qgc3VyZSBhYm91dCB0aGlzCisgICAgICAgIG1fdW5pdHNQZXJFbSA9IDE7IC8vIEZJWE1F
IQorICAgICAgICBtX2xpbmVHYXAgPSBoZWlnaHQubGVhZGluZzsKKyAgICB9Cit9CisKK3ZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFy
V2lkdGggPSAwLmY7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7CisgICAgaW5pdENoYXJXaWR0
aHMoKTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAg
ICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKKyAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0g
MDsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBp
ZiAoIW1fc21hbGxDYXBzRm9udERhdGEpeworICAgICAgICBGb250RGVzY3JpcHRpb24gZGVzYyA9
IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBkZXNjLnNldFNwZWNp
ZmllZFNpemUoMC43MGYgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgICAg
ICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRl
c2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRh
ID0gbmV3IFNpbXBsZUZvbnREYXRhKCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxs
Q2Fwc0ZvbnREYXRhOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IFdlIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyB0byBsb2FkIG5vbi1BU0NJSSBl
bmNvZGluZyBzaXRlcworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKKyAg
ICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKS0+SXNGaXhl
ZCgpOworICAgIGVsc2UKKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworfQor
CitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="16825"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32846</attachid>
            <date>2009-07-16 02:24:47 -0700</date>
            <delta_ts>2009-07-16 06:27:14 -0700</delta_ts>
            <desc>Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-drawing-files-for-WebCore-platf.patch</filename>
            <type>text/plain</type>
            <size>58912</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA0NTExOTA5ZjM5MTllMGEzZmM0YTljYWJiOGM4NjVlMzBiOWY5ODk3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTE6MjA6MDAgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBkcmF3aW5nIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTUxICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCAgICAgfCAgIDU0ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRQb2ludEhhaWt1LmNwcCAgICB8ICAgNDggKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCAgfCAgIDU0ICsrCiAuLi4vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwICAgICAgICB8ICA1NDcgKysrKysrKysrKysr
KysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAg
ICAgIHwgICA2MyArKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmggIHwgICA0NiArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwICAgfCAgIDgxICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZUhhaWt1LmNwcCAgICAgfCAgMTY3ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwICAgfCAgMjE4ICsrKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwICB8ICAgNDggKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCAgIHwgICA0OSArKwog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwICAgfCAgIDQ4
ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAgICAgICB8
ICAxNjQgKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzg2IGluc2VydGlvbnMoKyksIDAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNp
emVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L1BhdGhIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlNWE4MDYuLjYyNWIxZWMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU0IEBACisy
MDA5LTA3LTE2ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNw
ZWNpZmljIGRyYXdpbmcgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
b3BlcmF0b3IgcmdiX2NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRSZWN0OjpGbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRS
ZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhZGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxs
aXBzZUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVy
Um91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRIYWlrdVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRC
aXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNp
emVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50UG9pbnQ6OkludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpvcGVy
YXRvciBCUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpJbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6Om9w
ZXJhdG9yIEJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0N1cnJlbnRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8p
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjph
ZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0VtcHR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorCiAyMDA5LTA3LTE1ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29s
b3JIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0YmEzZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JI
YWlrdS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisK
KyNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
b2xvcjo6Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShj
LnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhKSkKK3sKKyAgICBtX3ZhbGlkID0gdHJ1ZTsK
K30KKworQ29sb3I6Om9wZXJhdG9yIHJnYl9jb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1h
a2VfY29sb3IocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Cit9CisKKworQ29sb3Ig
Zm9jdXNSaW5nQ29sb3IoKQoreworICAgIHJldHVybiBDb2xvcihrZXlib2FyZF9uYXZpZ2F0aW9u
X2NvbG9yKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2
ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpbmNsdWRlIDxQ
b2ludC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2lu
dChjb25zdCBCUG9pbnQmIHApCisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAueSkKK3sKK30K
KworRmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBv
aW50KG1feCwgbV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YWE1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVh
dmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlIDxS
ZWN0Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChj
b25zdCBCUmVjdCYgcmVjdCkKKyAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCisgICAg
LCBtX3NpemUocmVjdC5XaWR0aCgpICsgMSwgcmVjdC5IZWlnaHQoKSArIDEpCit7Cit9CisKK0Zs
b2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBCUmVjdChCUG9p
bnQoeCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9HcmFkaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkODlh
MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+ICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1l
QHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFkaWVudDo6
cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9y
bUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjkwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcApAQCAtMCww
ICsxLDU0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBlbi5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+CisKKyNpbmNsdWRlIDxWaWV3
Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8UmVnaW9uLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUKK3sK
K3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcp
OworICAgIH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKKworICAgIEJWaWV3KiB2
aWV3OworfTsKKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHBfdmlldykKK3sKKyAgICB2aWV3ID0gcF92aWV3Owor
fQorCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoKQoreworfQorCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fY29tbW9uKGNyZWF0ZUdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQoreworICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQoreworICAg
IGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKKyAgICBkZWxldGUgbV9k
YXRhOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPnZpZXc7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit7CisgICAgbV9kYXRhLT52
aWV3LT5QdXNoU3RhdGUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0
Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEtPnZpZXctPlBvcFN0YXRlKCk7Cit9CisKKy8vIERy
YXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPkZp
bGxSZWN0KHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAg
ICBtX2RhdGEtPnZpZXctPlN0cm9rZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsK
K30KKworLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50
JiBwb2ludDIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGF0YS0+dmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFpa3VT
dHJva2VTdHlsZSgpKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcg
dGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPkZpbGxFbGxpcHNl
KHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAgICBtX2Rh
dGEtPnZpZXctPlN0cm9rZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBp
bnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlN0cm9rZUFyYyhyZWN0
LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IHBv
aW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlh
cykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBCUG9pbnQgYlBvaW50c1twb2ludHNMZW5ndGhdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcG9pbnRzTGVuZ3RoOyBpKyspCisgICAgICAgIGJQb2ludHNbaV0gPSBwb2ludHNbaV07CisK
KyAgICBtX2RhdGEtPnZpZXctPkZpbGxQb2x5Z29uKGJQb2ludHMsIHBvaW50c0xlbmd0aCk7Cisg
ICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCisgICAgICAgIC8vIFN0cm9rZSB3aXRo
IGxvdyBjb2xvcgorICAgICAgICBtX2RhdGEtPnZpZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywg
cG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmdiX2NvbG9yIG9sZENvbG9yID0gbV9kYXRhLT52aWV3LT5IaWdoQ29sb3IoKTsK
KyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3
LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihvbGRDb2xv
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBj
b25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9y
LmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
Ly8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0aW9uIGNvdWxkIGp1c3QgdXNlIEZpbGxSb3Vu
ZFJlY3QgaWYgYWxsIAorICAgIC8vIHRoZSBzaXplcyBhcmUgdGhlIHNhbWUsIG9yIGV2ZW4gaWYg
dGhleSBhcmUgbm90LiBPdGhlcndpc2Ugc2V2ZXJhbAorICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxs
QXJjIGNhbGxzIGFyZSBuZWVkZWQuCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmJlZ2luUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7CisgICAgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8K
KyAgICAvLyBzeWxsYWJsZSBhZGRzOgorICAgIC8vIGNSZWN0ICs9IG1fZGF0YS0+cCgpLT5HZXRT
Y3JvbGxPZmZzZXQoKTsgdG8gdGhlIHJlY3QgYmVmb3JlCisgICAgLy8gY3JlYXRpbiB0aGUgcmVn
aW9uLgorICAgIG1fZGF0YS0+dmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdpb24oJnJlZ2lvbik7
Cit9CisKK3ZvaWQgc2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYg
Y29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cyA9IGZvY3VzUmluZ1JlY3RzKCk7Cisg
ICAgdW5zaWduZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6ZSgpOworCisgICAgLy8gRklYTUU6IG1h
eWJlIHdlIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRoIEJTaGFwZT8KKworICAgIGlmIChyZWN0
cy5zaXplKCkgPiAxKSB7CisgICAgICAgIEJSZWdpb24JcmVnaW9uOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQorICAgICAgICAgICAgcmVnaW9uLkluY2x1ZGUo
QlJlY3QocmVjdHNbaV0pKTsKKworICAgICAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihj
b2xvcik7CisgICAgICAgIG1fZGF0YS0+dmlldy0+U3Ryb2tlUmVjdChyZWdpb24uRnJhbWUoKSwg
Ql9NSVhFRF9DT0xPUlMpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgcHJpbnRp
bmcpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKTsKKyAgICBk
cmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdp
ZHRoLCBib29sIGdyYW1tYXIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lk
dGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+dmlldy0+UGVuU2l6ZSgpOworICAgIG1fZGF0YS0+
dmlldy0+U2V0UGVuU2l6ZSh3aWR0aCk7CisgICAgbV9kYXRhLT52aWV3LT5TdHJva2VSZWN0KHJl
Y3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3LT5TZXRQZW5TaXpl
KG9sZFNpemUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2Fw
IGxpbmVDYXApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FwX21vZGUgbW9kZSA9IEJfQlVUVF9DQVA7CisgICAgc3dpdGNoIChsaW5lQ2Fw
KSB7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgbW9kZSA9IEJfUk9VTkRfQ0FQOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAgbW9kZSA9IEJfU1FVQVJF
X0NBUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0Q2FwOgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZGF0YS0+dmlldy0+U2V0TGluZU1vZGUobW9k
ZSwgbV9kYXRhLT52aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT52aWV3LT5MaW5lTWl0ZXJM
aW1pdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2lu
IGxqKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGpvaW5fbW9kZSBtb2RlID0gQl9NSVRFUl9KT0lOOworICAgIHN3aXRjaCAobGopIHsKKyAg
ICBjYXNlIFJvdW5kSm9pbjoKKyAgICAgICAgbW9kZSA9IEJfUk9VTkRfSk9JTjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBCZXZlbEpvaW46CisgICAgICAgIG1vZGUgPSBCX0JFVkVMX0pPSU47
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWl0ZXJKb2luOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZGF0YS0+dmlldy0+U2V0TGluZU1vZGUobV9kYXRh
LT52aWV3LT5MaW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPnZpZXctPkxpbmVNaXRlckxpbWl0
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2RhdGEtPnZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldy0+TGluZUNhcE1vZGUoKSwg
bV9kYXRhLT52aWV3LT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGRyYXdpbmdfbW9kZSBtb2RlID0gQl9PUF9DT1BZOworICAgIHN3aXRjaCAob3ApIHsK
KyAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgorICAgIGNhc2UgQ29tcG9zaXRlQ29weToKKyAgICAg
ICAgLy8gVXNlIHRoZSBkZWZhdWx0IGFib3ZlCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29t
cG9zaXRlU291cmNlT3ZlcjoKKyAgICAgICAgbW9kZSA9IEJfT1BfT1ZFUjsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQ6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbjogVW5zdXBwb3J0ZWQgY29tcG9zaXRlIG9wZXJhdGlvbiAlc1xuIiwK
KyAgICAgICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgfQorICAgIG1fZGF0YS0+dmlldy0+U2V0RHJhd2luZ01vZGUobW9kZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5Db25z
dHJhaW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K1RyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4o
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRS
ZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgYUZvbnQpCit7CisgICAgbV9kYXRhLT52
aWV3LT5TZXRGb250KGFGb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Cit9CisKK3Bh
dHRlcm4gR3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCl7CisgICAgc3dpdGNo
IChzdHJva2VTdHlsZSgpKSB7CisgICAgY2FzZSBTb2xpZFN0cm9rZToKKyAgICAgICAgcmV0dXJu
IEJfU09MSURfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb3R0ZWRTdHJva2U6Cisg
ICAgICAgIHJldHVybiBCX01JWEVEX0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBE
YXNoZWRTdHJva2U6CisgICAgICAgIC8vIEZJWE1FOiB1c2UgYSBiZXR0ZXIgZGFzaGVkIHN0cm9r
ZSEKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIEJfTUlYRURfQ09M
T1JTOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQl9TT0xJ
RF9MT1c7CisgICAgICAgIGJyZWFrOworCX0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0cm9rZVN0eWxlKQorewor
CS8vIEZJWE1FOiBzZWUgZ2V0SGFpa3VTdHJva2VTdHlsZS4KKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Mo
ZmxvYXQgdGhpY2tuZXNzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGF0YS0+dmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhJbnRTaXpl
IGNvbnN0JixpbnQsQ29sb3IgY29uc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JY29uSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5
NDcwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ljb25IYWlrdS5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJY29uLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJY29uOjpJY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitJY29uOjp+SWNvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
UGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bh
c3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJE
YXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYmU0NDUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5o
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9u
IDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFfaAorI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFf
aAorCisjaW5jbHVkZSAiT3duUHRyLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgSW50U2l6ZTsKKworICAgIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CisgICAgcHVibGlj
OgorICAgICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOworICAgIH07CisKK30g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhh
aWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlM2VlOAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJI
YWlrdS5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhp
bWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEludFNpemUmKQoreworfQorCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgSW50U2l6ZSYsIGJvb2wgZ3JheVNjYWxlLCBib29sJiBzdWNjZXNzKQorICAgIDogbV9k
YXRhKEludFNpemUoKSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKK30KKworSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCit7Cit9CisKK0dyYXBoaWNz
Q29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdl
RGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK0ltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNzhhZAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAK
QEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVy
IDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5k
cmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvbi5oPgorI2luY2x1ZGUgPEJpdG1h
cC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKworI2luY2x1ZGUgPG1hdGguaD4KKworCisvLyBUaGlz
IGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAorVmVjdG9yPGNoYXI+IGxvYWRS
ZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKik7CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQoreworICAgIGlmIChj
bGVhck1ldGFkYXRhKQorICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAgaWYg
KG1fZnJhbWUpIHsKKyAgICAgICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoeSBiZV9hcHAgaXMgY2hl
Y2tlZAorICAgICAgICBpZiAoYmVfYXBwKQorICAgICAgICAgICAgZGVsZXRlIG1fZnJhbWU7Cisg
ICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICBtX2R1cmF0aW9uID0gMC4wZjsKKyAgICAgICAg
bV9oYXNBbHBoYSA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworV1RGOjpQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYXJyID0g
bG9hZFJlc291cmNlSW50b0FycmF5KG5hbWUpOworICAgIFdURjo6UGFzc1JlZlB0cjxCaXRtYXBJ
bWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFyci5kYXRhKCksIGFyci5zaXplKCkp
OworICAgIGltZy0+c2V0RGF0YShidWZmZXIsIHRydWUpOworICAgIHJldHVybiBpbWc7Cit9CisK
K3ZvaWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQoreworfQorCit2b2lkIEJpdG1h
cEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKK3sKK30KKworLy8gRHJhd2luZyBSb3V0
aW5lcwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3Qm
IHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpIC8vIElmIHRoZSBpbWFn
ZSBoYXNuJ3QgZnVsbHkgbG9hZGVkLgorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWF5Rmls
bFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRz
dCwgc29saWRDb2xvcigpLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRT
aXplIHNlbGZTaXplID0gc2l6ZSgpOworCisgICAgY3R4dC0+c2F2ZSgpOworCisgICAgLy8gU2V0
IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBzdXBw
b3J0IGFsbCB0aGUgY29tcG9zaXRlIG1vZGVzIDoKKyAgICAvLwljdHh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24ob3ApOworCisgICAgQlZpZXcqIHZpZXcgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKworICAgIEJSZWN0IHNyY1JlY3Qoc3JjKTsKKyAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUg
c2l0ZSBhdAorICAgIC8vIGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29t
cGxleHNwaXJhbC9kZW1vLmh0bWwKKyAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhB
KTsKKyAgICB2aWV3LT5EcmF3Qml0bWFwKGltYWdlLCBzcmNSZWN0ICYgaW1hZ2UtPkJvdW5kcygp
LCBkc3QpOworCisgICAgY3R4dC0+cmVzdG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsK
K30KKwordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVy
blRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHNy
Y1BvaW50LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQor
eworCS8vIEZJWE1FOiBmaW5pc2ggdGhpcyB0byBzdXBwb3J0IGFsc28gcGhhc2VkIHBvc2l0aW9u
IChzcmNQb2ludCkKKworICAgIEJCaXRtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgY3VycmVudFcg
PSAwOworICAgIGZsb2F0IGN1cnJlbnRIID0gMDsKKworICAgIGN0eHQtPnNhdmUoKTsKKworICAg
IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKwor
ICAgIGN0eHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7CisKKyAgICB3aGlsZSAo
Y3VycmVudFcgPCBkc3RSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRIIDwg
ZHN0UmVjdC5oZWlnaHQoKSkgeworICAgICAgICAgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PkRyYXdCaXRtYXAoaW1hZ2UsIEJQb2ludChkc3RSZWN0LngoKSArIGN1cnJlbnRXLCBkc3RSZWN0
LnkoKSArIGN1cnJlbnRIKSk7CisgICAgICAgICAgICBjdXJyZW50SCArPSB0aWxlUmVjdC5oZWln
aHQoKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50VyArPSB0aWxlUmVjdC53aWR0aCgpOwor
ICAgICAgICBjdXJyZW50SCA9IDA7CisgICAgfQorICAgIGN0eHQtPnJlc3RvcmUoKTsKKworICAg
IHN0YXJ0QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRD
b2xvcigpCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gY2hlY2sgdGhlIFJHQkEzMiBidWZmZXIg
dG8gc2VlIGlmIGl0IGlzIDF4MS4KKyAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOworfQorCitC
Qml0bWFwKiBCaXRtYXBJbWFnZTo6Z2V0Qml0bWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29u
c3RfY2FzdDxCaXRtYXBJbWFnZSo+KHRoaXMpLT5mcmFtZUF0SW5kZXgoMCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZGFiZGE5OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSAgIDxhbmRyZWEuYW56YW5pQGdtYWls
LmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRvckRl
Y29kZXIuaCIKKyNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJYQk1J
bWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8
Qml0bWFwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIHRoZSBIYWlrdSB0cmFuc2xhdG9yIEFQSQorSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNv
ZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICAvLyBXZSBuZWVkIGF0IGxlYXN0
IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZyB3
aXRoLgorICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKKyAgICBpZiAobGVuZ3RoIDwgNCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1Q29udGVudHMg
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIGNv
bnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBHSUZzIGJlZ2luIHdp
dGggR0lGOCg3IG9yIDkpLgorICAgIGlmICghc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSkK
KyAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKKworICAgIC8vIFRlc3QgZm9y
IFBORy4KKyAgICBpZiAodUNvbnRlbnRzWzBdID09IDB4ODkgJiYKKyAgICAgICAgdUNvbnRlbnRz
WzFdID09IDB4NTAgJiYKKyAgICAgICAgdUNvbnRlbnRzWzJdID09IDB4NEUgJiYKKyAgICAgICAg
dUNvbnRlbnRzWzNdID09IDB4NDcpCisgICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVy
KCk7CisKKyAgICAvLyBKUEVHCisgICAgLy8gaWYgKHVDb250ZW50c1swXSA9PSAweEZGICYmCisg
ICAgLy8gICAgIHVDb250ZW50c1sxXSA9PSAweEQ4ICYmCisgICAgLy8gICAgIHVDb250ZW50c1sy
XSA9PSAweEZGKQorICAgIC8vICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoKTsKKwor
ICAgIC8vIEJNUAorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiQk0iLCAyKSA9PSAwKQorICAg
ICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2RlcigpOworCisgICAgLy8gSUNPcyBhbHdheXMg
YmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEgMi1ieXRlIDEuCisgICAgLy8gQ1VS
cyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDItYnl0ZSAyLgorICAgIC8vIGlmICgh
bWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAwMCIsIDQpIHx8CisgICAgLy8gICAgICFt
ZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwgNCkpCisgICAgLy8gICAgIHJldHVy
biBuZXcgSUNPSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBYQk1zIHJlcXVpcmUgOCBieXRlcyBv
ZiBpbmZvLgorICAgIGlmIChsZW5ndGggPj0gOCAmJiAhc3RybmNtcChjb250ZW50cywgIiNkZWZp
bmUgIiwgOCkpCisgICAgICAgIHJldHVybiBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7CisKKyAgICBw
cmludGYoIkludmFsaWQgaW1hZ2UhXG4iICk7CisgICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25v
dyB3aGF0IHRoZSBoZWNrIHRoaXMgaXMuCisgICAgcmV0dXJuIDA7Cit9CisKK0ltYWdlU291cmNl
OjpJbWFnZVNvdXJjZSgpCisgICAgOiBtX2RlY29kZXIoMCkKK3sKK30KKworSW1hZ2VTb3VyY2U6
On5JbWFnZVNvdXJjZSgpCit7CisgICAgY2xlYXIodHJ1ZSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3Vy
Y2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwgc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQoreworICAgIGRlbGV0ZSBtX2RlY29kZXI7CisgICAgbV9kZWNvZGVyID0gMDsKK30KKwor
Ym9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Rl
Y29kZXI7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNu
aWZmaW5nIHRoZSBieXRlcy4KKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRh
dGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVy
IHBsdWdpbi4KKyAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBk
ZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAv
LyBtYWRlLgorICAgIGlmKCFtX2RlY29kZXIpCisgICAgICAgIG1fZGVjb2RlciA9IGNyZWF0ZURl
Y29kZXIoZGF0YS0+YnVmZmVyKCkpOworCisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2RlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30K
KworYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAoIW1fZGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNT
aXplQXZhaWxhYmxlKCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdAor
eworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAg
cmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpmcmFt
ZVNpemVBdEluZGV4KHNpemVfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSgpOworfQorCitp
bnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCit7CisgICAgaWYgKCFtX2RlY29kZXIp
CisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKworICAgIHJldHVybiBtX2RlY29kZXIt
PnJlcGV0aXRpb25Db3VudCgpOworfQorCitTdHJpbmcgSW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOworfQorCitO
YXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSR0JB
MzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsK
KyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05h
dGl2ZUltYWdlKCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkg
PT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlOworfQorCitmbG9hdCBJbWFnZVNvdXJjZTo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVy
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNv
ZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZl
ci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBidWZmZXItPmR1cmF0aW9uKCkgLyAxMDAwLjBmOworfQorCitib29s
IEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAg
aWYgKCFtX2RlY29kZXIgfHwgIW1fZGVjb2Rlci0+c3VwcG9ydHNBbHBoYSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJh
bWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1
cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIGJ1ZmZlci0+aGFzQWxwaGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBv
aW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTU1YTRiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhh
aWt1LmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4g
TGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIK
KworI2luY2x1ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRQb2lu
dDo6SW50UG9pbnQoY29uc3QgQlBvaW50JiBwKQorICAgIDogbV94KHN0YXRpY19jYXN0PGludD4o
cC54KSkKKyAgICAsIG1feShzdGF0aWNfY2FzdDxpbnQ+KHAueSkpCit7Cit9CisKK0ludFBvaW50
OjpvcGVyYXRvciBCUG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41NzRhZGJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlIDxSZWN0Lmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEJSZWN0JiByKQorICAgIDogbV9s
b2NhdGlvbihyLkxlZnRUb3AoKSkKKyAgICAsIG1fc2l6ZShyLkludGVnZXJXaWR0aCgpICsgMSwg
ci5JbnRlZ2VySGVpZ2h0KCkgKyAxKQoreworfQorCitJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCgp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN1YnRyYWN0IDEgZnJvbSBoZWlnaHQgYW5kIHdpZHRo
PworICAgIHJldHVybiBCUmVjdChCUG9pbnQoeCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdo
dCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJhZjkxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworI2luY2x1ZGUgPFNpemUuaD4KKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemU6OkludFNpemUoY29uc3QgQlNpemUmIHMpCisgICAg
OiBtX3dpZHRoKHMuSW50ZWdlcldpZHRoKCkpCisgICAgLCBtX2hlaWdodChzLkludGVnZXJIZWln
aHQoKSkKK3sKK30KKworSW50U2l6ZTo6b3BlcmF0b3IgQlNpemUoKSBjb25zdAoreworICAgIHJl
dHVybiBCU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzE5ODgKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKQEAgLTAs
MCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxSZWdpb24uaD4KKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhdGg6OlBhdGgoKQorICAgIDogbV9wYXRoKG5ldyBC
UmVnaW9uKCkpCit7Cit9CisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9wYXRoOwor
fQorCitQYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQorICAgIDogbV9wYXRoKG5ldyBCUmVn
aW9uKCpvdGhlci5wbGF0Zm9ybVBhdGgoKSkpCit7Cit9CisKK1BhdGgmIFBhdGg6Om9wZXJhdG9y
PShjb25zdCBQYXRoJiBvdGhlcikKK3sKKyAgICBpZiAoJm90aGVyICE9IHRoaXMpCisgICAgICAg
IG1fcGF0aCA9IG90aGVyLnBsYXRmb3JtUGF0aCgpOworCisgICAgcmV0dXJuICp0aGlzOworfQor
Citib29sIFBhdGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpc0Vt
cHR5KCk7Cit9CisKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IFdpbmRSdWxlIHJ1bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+Q29udGFpbnMocG9p
bnQpOworfQorCit2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVj
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+RnJhbWUoKTsKK30KKwordm9pZCBQYXRo
Ojptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgLy8gRklYTUU6IFVzZSBP
ZmZzZXRCeT8KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZExpbmVU
byhjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0
UG9pbnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRC
ZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3Ay
LCBjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHAyLCBmbG9hdCByYWRpdXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YXRoOjpjbG9zZVN1YnBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxv
YXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBtX3BhdGgt
PkluY2x1ZGUocik7Cit9CisKK3ZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7
CisgICAgbV9wYXRoLT5NYWtlRW1wdHkoKTsKK30KKworYm9vbCBQYXRoOjppc0VtcHR5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fcGF0aC0+RnJhbWUoKS5Jc1ZhbGlkKCk7Cit9CisKK1N0cmlu
ZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0
aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32856</attachid>
            <date>2009-07-16 04:17:33 -0700</date>
            <delta_ts>2009-07-17 03:25:50 -0700</delta_ts>
            <desc>Patch to add Haiku-specific font files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-font-files-for-WebCore-platform.patch</filename>
            <type>text/plain</type>
            <size>27910</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBmOGNiNWUyMmFhMmQ0MTdjMzVlMzkzY2RjNGRiMGIyNDAyNzYzNDA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTM6MTM6MjMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmb250IGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDQ0ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcCB8ICAgODkgKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAgIHwgICA0OSArKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcCAgICAgIHwgIDExOCArKysrKysrKysrKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmggfCAg
IDY5ICsrKysrKysrCiAuLi4vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNw
cCAgICAgICB8ICAxNjcgKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9H
bHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcCAgICAgIHwgICA2MyArKysrKysrKwogLi4uL2dyYXBo
aWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwICAgICAgICAgfCAgMTA0ICsrKysrKysr
KysrKwogOCBmaWxlcyBjaGFuZ2VkLCA3MDMgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGEuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3
ZTVhODA2Li5hMDFmNGE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDA5LTA3LTE2ICBNYXhpbWUgU2ltb24g
IDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNwZWNpZmljIGZvbnQgZmlsZXMgZm9yIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ZvbnRDYWNoZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnRE
YXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFz
dFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRUcmFp
dHNJbkZhbWlseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OmNvbnRhaW5zQ2hh
cmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChjaGFyVW5pY29kZVRvVXRmOCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1E
YXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNo
VGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRQbGF0Zm9ybURhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorCiAyMDA5LTA3LTE1ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Gb250Q2FjaGVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ZvbnRDYWNoZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
M2Y3M2FhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9Gb250Q2FjaGVIYWlrdS5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAi
Rm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lu
Y2x1ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2Fj
aGU6OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2Fj
aGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhIGRhdGEo
Zm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAgcmV0
dXJuIGdldENhY2hlZEZvbnREYXRhKCZkYXRhKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9u
dENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikKK3sKKworICAgIGNvbnN0IEJGb250KiBkZWZhdWx0Rm9u
dCA9IGJlX3BsYWluX2ZvbnQ7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5
KCkgPT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgICAgIGRlZmF1bHRG
b250ID0gYmVfZml4ZWRfZm9udDsKKyAgICBlbHNlIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0
KCkgPT0gRm9udFdlaWdodEJvbGQpCisgICAgICAgIGRlZmF1bHRGb250ID0gYmVfYm9sZF9mb250
OworCisgICAgZm9udF9mYW1pbHkgZmFtaWx5OworICAgIGRlZmF1bHRGb250LT5HZXRGYW1pbHlB
bmRTdHlsZSgmZmFtaWx5LCAwKTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHNfRGVmYXVsdFN0
cihmYW1pbHkpOworCisgICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBzX0RlZmF1bHRTdHIpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIHJldHVybiBuZXcg
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7Cit9CisKK3ZvaWQgRm9u
dENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUs
IFZlY3Rvcjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjVmOGFlOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udERhdGEuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisJbm90SW1wbGVtZW50ZWQoKTsK
KwlyZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZWFkMzBlZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aW5jbHVkZSA8aW50ZXJmYWNlL0ZvbnQuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8
U3RyaW5nLmg+CisKKworLy8gRml4IHRlbXAgcm91dGluZSB0byBjaGVjayB0aGUgY29udmVyc2lv
biB3b3JrcywgcGxlYXNlIG1vdmUgaXQgQVNBUAkKK2ludCBjaGFyVW5pY29kZVRvVXRmOCh1bnNp
Z25lZCBzaG9ydCBnbHlwaCwgY2hhciogb3V0KQoreworICAgIGludCBpID0gMDsKKworICAgIGlm
IChnbHlwaCA8IDB4MDA4MCkKKyAgICAgICAgb3V0W2krK10gPSBzdGF0aWNfY2FzdDxjaGFyPihn
bHlwaCk7CisgICAgZWxzZSBpZiAoZ2x5cGggPCAweDA4MDApIHsgLy90d28gYnl0ZXMKKyAgICAg
ICAgb3V0W2krK10gPSAweGMwIHwgKGdseXBoID4+IDYpOworICAgICAgICBvdXRbaSsrXSA9IDB4
ODAgfCAoZ2x5cGggJiAweDNGKTsKKyAgICB9IGVsc2UgaWYgKGdseXBoID4gMHgwODAwKSB7IC8v
MyBieXRlcworICAgICAgICBvdXRbaSsrXSA9IDB4ZTAgfCAoZ2x5cGggPj4gMTIpOworICAgICAg
ICBvdXRbaSsrXSA9IDB4ODAgfCAoKGdseXBoID4+IDYpICYgMHgzRik7CisgICAgICAgIG91dFtp
KytdID0gMHg4MCB8IChnbHlwaCAmIDB4M0YpOworICAgIH0KKworICAgIG91dFtpXSA9ICdcMCc7
CisgICAgcmV0dXJuIGk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGb250Ojpj
YW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBDb2xvciBjb2xvciA9IGdy
YXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCk7CisgICAgQlZpZXcqIHZpZXcgPSBzdGF0aWNfY2Fz
dDxCVmlldyo+KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIEJGb250
KiBtX2ZvbnQgPSBzdGF0aWNfY2FzdDxCRm9udCo+KGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQo
KSk7CisKKyAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVTb3VyY2VPdmVyKTsKKyAgICB2aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIHZpZXct
PlNldEZvbnQobV9mb250KTsKKworICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0
X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CisgICAg
ZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyBpKyspIHsKKyAgICAgICAgY2hhciBvdXRbNF07CisgICAgICAgIGNoYXJVbmljb2RlVG9V
dGY4KGdseXBoc1tpXSwgb3V0KTsKKworICAgICAgICB2aWV3LT5EcmF3U3RyaW5nKG91dCwgc2l6
ZW9mKG91dCksIEJQb2ludChvZmZzZXQscG9pbnQueSgpKSk7CisgICAgICAgIG9mZnNldCArPSBn
bHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGkpOworICAgIH0KK30KKwordm9pZCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworZmxv
YXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDM7Cit9CisKK0Zsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50
JiwgaW50LCBpbnQsIGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCwgYm9vbCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRh
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkZmU5NAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0
YS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50
ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkg
YW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5j
cHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX0gKKyNkZWZp
bmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCisvLyBBZGRpbmcgaW50ZXJmYWNlLyB0byBhdm9pZCBj
b25mdXNpb24gd2l0aCBXZWJLaXQgRm9udC5oCisjaW5jbHVkZSA8aW50ZXJmYWNlL0ZvbnQuaD4K
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKTsKKworICAgICAgICBGb250UGxhdGZvcm1EYXRhKCk7CisgICAgICAgIEZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgQkZvbnQqIGZvbnQpOworICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwor
ICAgICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0
Zm9ybURhdGEpOworICAgICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgICAgIGJvb2wg
aXNGaXhlZFBpdGNoKCk7CisgICAgICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiAhbV9mb250OyB9CisKKyAgICAgICAgQkZvbnQqIGZvbnQoKSBjb25zdDsK
KworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIEJGb250KiBtX2ZvbnQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
UGxhdGZvcm1EYXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM2MzkzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4g
IEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRN
YWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0
YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6
YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56
YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisj
aW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8Rm9udC5oPgorI2luY2x1
ZGUgPHN1cHBvcnQvU3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKCkKKyAgICA6IG1fZm9udCgwKQoreworfQorCitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICA6IG1fZm9udCgwKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEpCit7
CisgICAgaWYgKGZvbnRQbGF0Zm9ybURhdGEubV9mb250KQorICAgICAgICBtX2ZvbnQgPSBuZXcg
QkZvbnQoZm9udFBsYXRmb3JtRGF0YS5tX2ZvbnQpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCisgICAgOiBtX2ZvbnQoMCkKK3sKKyAgICBi
b29sIGJGb3VuZCA9IGZhbHNlOworICAgIGJvb2wgYkl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5p
dGFsaWMoKTsKKyAgICBib29sIGJCb2xkID0gZm9udERlc2NyaXB0aW9uLndlaWdodCgpID09IEZv
bnRXZWlnaHRCb2xkOworICAgIGZvbnRfZmFtaWx5IGZhbWlseTsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnRfZm9udF9mYW1pbGllcygpOyBpKyspIHsKKyAgICAgICAgZ2V0X2ZvbnRf
ZmFtaWx5KGksICZmYW1pbHksIDApOworICAgICAgICBpZiAoIUJTdHJpbmcoZmFtaWx5TmFtZS5z
dHJpbmcoKSkuQ29tcGFyZShmYW1pbHkpKSB7CisgICAgICAgICAgICBtX2ZvbnQgPSBuZXcgQkZv
bnQoKTsKKyAgICAgICAgICAgIG1fZm9udC0+U2V0RmFtaWx5QW5kU3R5bGUoZmFtaWx5LCAwKTsK
KyAgICAgICAgICAgIG1fZm9udC0+U2V0U2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCkpOworCisgICAgICAgICAgICBiRm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYkZvdW5kKSB7CisgICAgICAgIGludDMyIG51bVN0
eWxlcyA9IGNvdW50X2ZvbnRfc3R5bGVzKGZhbWlseSk7CisgICAgICAgIGZvbnRfc3R5bGUgZm9u
dFN0eWxlOworICAgICAgICB1aW50MzIgZmxhZ3M7CisgICAgICAgIGJGb3VuZCA9IGZhbHNlOwor
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU3R5bGVzOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChnZXRfZm9udF9zdHlsZShmYW1pbHksIGksICZmb250U3R5bGUsICZmbGFncykgPT0g
Ql9PSykgeworICAgICAgICAgICAgICAgIFN0cmluZyBzdHlsZShmb250U3R5bGUpOworICAgICAg
ICAgICAgICAgIGlmICgoYkl0YWxpYyAmJiBiQm9sZCkgJiYgKHN0eWxlID09ICJCb2xkSXRhbGlj
IiB8fCBzdHlsZSA9PSAiQm9sZCBPYmxpcXVlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgIGJG
b3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICgoYkl0YWxpYyAmJiAhYkJvbGQpICYmIChzdHlsZSA9
PSAiSXRhbGljIiB8fCBzdHlsZSA9PSAiT2JsaXF1ZSIpKSB7CisgICAgICAgICAgICAgICAgICAg
ICBiRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKCFiSXRhbGljICYmIGJCb2xkKSAmJiBzdHls
ZSA9PSAiQm9sZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgIGJGb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICgoIWJJdGFsaWMgJiYgIWJCb2xkKSAmJiAoc3R5bGUgPT0gIlJvbWEiIHx8IHN0eWxl
ID09ICJCb29rIgorICAgICAgICAgICAgICAgICAgICB8fCBzdHlsZSA9PSAiQ29uZGVuc2VkIiB8
fCBzdHlsZSA9PSAiUmVndWxhciIgfHwgc3R5bGUgPT0gIk1lZGl1bSIpKSB7CisgICAgICAgICAg
ICAgICAgICAgICBiRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChiRm91bmQpCisgICAgICAgICAgICBtX2ZvbnQtPlNldEZhbWlseUFuZFN0eWxlKGZhbWlseSwg
Zm9udFN0eWxlKTsKKyAgICB9Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIEJGb250KiBmb250KQor
eworICAgIG1fZm9udCA9IGZvbnQ7CisgICAgbV9mb250LT5TZXRTaXplKGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKKyAgICA6IG1fZm9udChuZXcg
QkZvbnQoKSkKK3sKKyAgICBtX2ZvbnQtPlNldFNpemUoc2l6ZSk7CisKKyAgICBpZiAoYm9sZCAm
JiBpdGFsaWMpCisgICAgICAgIG1fZm9udC0+U2V0RmFjZShCX0JPTERfRkFDRSB8IEJfSVRBTElD
X0ZBQ0UpOworICAgIGVsc2UgaWYgKGJvbGQpCisgICAgICAgIG1fZm9udC0+U2V0RmFjZShCX0JP
TERfRkFDRSk7CisgICAgZWxzZSBpZiAoaXRhbGljKQorICAgICAgICBtX2ZvbnQtPlNldEZhY2Uo
Ql9JVEFMSUNfRkFDRSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRh
KCkKK3sKKyAgICBkZWxldGUgbV9mb250OworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Omlz
Rml4ZWRQaXRjaCgpCit7CisgICAgaWYgKG1fZm9udCkKKyAgICAgICAgcmV0dXJuIG1fZm9udC0+
U3BhY2luZygpID09IEJfRklYRURfU1BBQ0lORzsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
QkZvbnQqIEZvbnRQbGF0Zm9ybURhdGE6OmZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Zv
bnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAoreworICAg
IHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7ICh1aW50cHRyX3QpZm9udCgpIH07CisgICAgdW5z
aWduZWQgblJlc3VsdCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8
VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwor
ICAgIHJldHVybiBuUmVzdWx0OworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICht
X2ZvbnQgPT0gb3RoZXIubV9mb250KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRyZWVO
b2RlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VU
cmVlTm9kZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDVi
ODA0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
bHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQ
YWdlVHJlZU5vZGUuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSA8d3RmL3Vu
aWNvZGUvVW5pY29kZS5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIEdseXBoUGFnZTo6ZmlsbCh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
KQoreworICAgIGJvb2wgaXNVdGYxNiA9IGJ1ZmZlckxlbmd0aCAhPSBHbHlwaFBhZ2U6OnNpemU7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsK
KyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisKKyAgICAgICAgaWYoaXNVdGYxNikgeworICAg
ICAgICAgICAgVUNoYXIgbGVhZCA9IGNoYXJhY3RlckJ1ZmZlcltpICogMl07CisgICAgICAgICAg
ICBVQ2hhciB0cmFpbCA9IGNoYXJhY3RlckJ1ZmZlcltpICogMiArIDFdOworICAgICAgICAgICAg
Y2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGxlYWQsIHRyYWlsKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJCdWZmZXJbaV07CisKKyAg
ICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgY2hhcmFjdGVyLCBmb250RGF0YSk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhh
aWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkNGQ1ZgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9u
dERhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0u
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZQoreworCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQoreworICAgIEJGb250KiBmb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwor
ICAgIGlmIChmb250KSB7CisgICAgICAgIGZvbnRfaGVpZ2h0IGhlaWdodDsKKyAgICAgICAgZm9u
dC0+R2V0SGVpZ2h0KCZoZWlnaHQpOworICAgICAgICBtX2FzY2VudCA9IGhlaWdodC5hc2NlbnQ7
CisgICAgICAgIG1fZGVzY2VudCA9IGhlaWdodC5kZXNjZW50OworICAgICAgICBtX2xpbmVTcGFj
aW5nID0gaGVpZ2h0LmxlYWRpbmc7CisgICAgICAgIG1feEhlaWdodCA9IGZvbnQtPlNpemUoKTsg
Ly8gTm90IHN1cmUgYWJvdXQgdGhpcworICAgICAgICBtX3VuaXRzUGVyRW0gPSAxOyAvLyBGSVhN
RSEKKyAgICAgICAgbV9saW5lR2FwID0gaGVpZ2h0LmxlYWRpbmc7CisgICAgfQorfQorCit2b2lk
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hh
cldpZHRoID0gMC5mOworICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOworICAgIGluaXRDaGFyV2lk
dGhzKCk7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7Cisg
ICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7CisgICAgbV9zbWFsbENhcHNGb250RGF0YSA9
IDA7Cit9CisKK1NpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAg
aWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKXsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2Mg
PSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5zZXRTcGVj
aWZpZWRTaXplKDAuNzBmICogZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsKKyAgICAg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGRhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YShk
ZXNjLCBkZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKKyAgICAgICAgbV9zbWFsbENhcHNGb250RGF0
YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqcGRhdGEpOworICAgIH0KKyAgICByZXR1cm4gbV9zbWFs
bENhcHNGb250RGF0YTsKK30KKworYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBXZSB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgdG8gbG9hZCBub24tQVNDSUkg
ZW5jb2Rpbmcgc2l0ZXMKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIGlmIChtX3BsYXRmb3JtRGF0YS5mb250KCkpCisg
ICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5mb250KCktPklzRml4
ZWQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKK30K
KworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32867</attachid>
            <date>2009-07-16 06:27:14 -0700</date>
            <delta_ts>2009-07-17 03:12:58 -0700</delta_ts>
            <desc>Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-drawing-files-for-WebCore-platf.patch</filename>
            <type>text/plain</type>
            <size>58917</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA0NTExOTA5ZjM5MTllMGEzZmM0YTljYWJiOGM4NjVlMzBiOWY5ODk3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTE6MjA6MDAgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBkcmF3aW5nIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTUxICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCAgICAgfCAgIDU0ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRQb2ludEhhaWt1LmNwcCAgICB8ICAgNDggKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCAgfCAgIDU0ICsrCiAuLi4vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwICAgICAgICB8ICA1NDcgKysrKysrKysrKysr
KysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAg
ICAgIHwgICA2MyArKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmggIHwgICA0NiArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwICAgfCAgIDgxICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZUhhaWt1LmNwcCAgICAgfCAgMTY3ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwICAgfCAgMjE4ICsrKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwICB8ICAgNDggKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCAgIHwgICA0OSArKwog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwICAgfCAgIDQ4
ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAgICAgICB8
ICAxNjQgKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzg2IGluc2VydGlvbnMoKyksIDAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNp
emVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L1BhdGhIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlNWE4MDYuLjYyNWIxZWMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU0IEBACisy
MDA5LTA3LTE2ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNw
ZWNpZmljIGRyYXdpbmcgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
b3BlcmF0b3IgcmdiX2NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRSZWN0OjpGbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRS
ZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhZGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxs
aXBzZUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVy
Um91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRIYWlrdVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRC
aXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNp
emVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50UG9pbnQ6OkludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpvcGVy
YXRvciBCUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpJbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6Om9w
ZXJhdG9yIEJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0N1cnJlbnRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8p
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjph
ZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0VtcHR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorCiAyMDA5LTA3LTE1ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29s
b3JIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0YmEzZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JI
YWlrdS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisK
KyNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
b2xvcjo6Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjKQorICAgIDogbV9jb2xvcihtYWtlUkdCQShj
LnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhKSkKK3sKKyAgICBtX3ZhbGlkID0gdHJ1ZTsK
K30KKworQ29sb3I6Om9wZXJhdG9yIHJnYl9jb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1h
a2VfY29sb3IocmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Cit9CisKKworQ29sb3Ig
Zm9jdXNSaW5nQ29sb3IoKQoreworICAgIHJldHVybiBDb2xvcihrZXlib2FyZF9uYXZpZ2F0aW9u
X2NvbG9yKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM5ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2
ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpbmNsdWRlIDxQ
b2ludC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2lu
dChjb25zdCBCUG9pbnQmIHApCisgICAgOiBtX3gocC54KQorICAgICwgbV95KHAueSkKK3sKK30K
KworRmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBv
aW50KG1feCwgbV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YWE1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcApAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVh
dmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlIDxS
ZWN0Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChj
b25zdCBCUmVjdCYgcmVjdCkKKyAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCisgICAg
LCBtX3NpemUocmVjdC5XaWR0aCgpICsgMSwgcmVjdC5IZWlnaHQoKSArIDEpCit7Cit9CisKK0Zs
b2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBCUmVjdChCUG9p
bnQoeCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpLGhlaWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9HcmFkaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkODlh
MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+ICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1l
QHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFkaWVudDo6
cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9y
bUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjkwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcApAQCAtMCww
ICsxLDU0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRm9udC5oIgor
I2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBlbi5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+CisKKyNpbmNsdWRlIDxWaWV3
Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8UmVnaW9uLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUKK3sK
K3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcp
OworICAgIH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKKworICAgIEJWaWV3KiB2
aWV3OworfTsKKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHBfdmlldykKK3sKKyAgICB2aWV3ID0gcF92aWV3Owor
fQorCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoKQoreworfQorCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fY29tbW9uKGNyZWF0ZUdy
YXBoaWNzQ29udGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQoreworICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNv
bnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQoreworICAg
IGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKKyAgICBkZWxldGUgbV9k
YXRhOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPnZpZXc7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit7CisgICAgbV9kYXRhLT52
aWV3LT5QdXNoU3RhdGUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0
Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEtPnZpZXctPlBvcFN0YXRlKCk7Cit9CisKKy8vIERy
YXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPkZp
bGxSZWN0KHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAg
ICBtX2RhdGEtPnZpZXctPlN0cm9rZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsK
K30KKworLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50
JiBwb2ludDIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGF0YS0+dmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFpa3VT
dHJva2VTdHlsZSgpKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcg
dGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPkZpbGxFbGxpcHNl
KHJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAgICBtX2Rh
dGEtPnZpZXctPlN0cm9rZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBp
bnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlN0cm9rZUFyYyhyZWN0
LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IHBv
aW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlh
cykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBCUG9pbnQgYlBvaW50c1twb2ludHNMZW5ndGhdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcG9pbnRzTGVuZ3RoOyBpKyspCisgICAgICAgIGJQb2ludHNbaV0gPSBwb2ludHNbaV07CisK
KyAgICBtX2RhdGEtPnZpZXctPkZpbGxQb2x5Z29uKGJQb2ludHMsIHBvaW50c0xlbmd0aCk7Cisg
ICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCisgICAgICAgIC8vIFN0cm9rZSB3aXRo
IGxvdyBjb2xvcgorICAgICAgICBtX2RhdGEtPnZpZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywg
cG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmdiX2NvbG9yIG9sZENvbG9yID0gbV9kYXRhLT52aWV3LT5IaWdoQ29sb3IoKTsK
KyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3
LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihvbGRDb2xv
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBj
b25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9y
LmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
Ly8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0aW9uIGNvdWxkIGp1c3QgdXNlIEZpbGxSb3Vu
ZFJlY3QgaWYgYWxsIAorICAgIC8vIHRoZSBzaXplcyBhcmUgdGhlIHNhbWUsIG9yIGV2ZW4gaWYg
dGhleSBhcmUgbm90LiBPdGhlcndpc2Ugc2V2ZXJhbAorICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxs
QXJjIGNhbGxzIGFyZSBuZWVkZWQuCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmJlZ2luUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7CisgICAgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8K
KyAgICAvLyBzeWxsYWJsZSBhZGRzOgorICAgIC8vIGNSZWN0ICs9IG1fZGF0YS0+cCgpLT5HZXRT
Y3JvbGxPZmZzZXQoKTsgdG8gdGhlIHJlY3QgYmVmb3JlCisgICAgLy8gY3JlYXRpbiB0aGUgcmVn
aW9uLgorICAgIG1fZGF0YS0+dmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdpb24oJnJlZ2lvbik7
Cit9CisKK3ZvaWQgc2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYg
Y29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cyA9IGZvY3VzUmluZ1JlY3RzKCk7Cisg
ICAgdW5zaWduZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6ZSgpOworCisgICAgLy8gRklYTUU6IG1h
eWJlIHdlIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRoIEJTaGFwZT8KKworICAgIGlmIChyZWN0
cy5zaXplKCkgPiAxKSB7CisgICAgICAgIEJSZWdpb24JcmVnaW9uOworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQorICAgICAgICAgICAgcmVnaW9uLkluY2x1ZGUo
QlJlY3QocmVjdHNbaV0pKTsKKworICAgICAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihj
b2xvcik7CisgICAgICAgIG1fZGF0YS0+dmlldy0+U3Ryb2tlUmVjdChyZWdpb24uRnJhbWUoKSwg
Ql9NSVhFRF9DT0xPUlMpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJvb2wgcHJpbnRp
bmcpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKTsKKyAgICBk
cmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdp
ZHRoLCBib29sIGdyYW1tYXIpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lk
dGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+dmlldy0+UGVuU2l6ZSgpOworICAgIG1fZGF0YS0+
dmlldy0+U2V0UGVuU2l6ZSh3aWR0aCk7CisgICAgbV9kYXRhLT52aWV3LT5TdHJva2VSZWN0KHJl
Y3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3LT5TZXRQZW5TaXpl
KG9sZFNpemUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2Fw
IGxpbmVDYXApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2FwX21vZGUgbW9kZSA9IEJfQlVUVF9DQVA7CisgICAgc3dpdGNoIChsaW5lQ2Fw
KSB7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgbW9kZSA9IEJfUk9VTkRfQ0FQOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAgbW9kZSA9IEJfU1FVQVJF
X0NBUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0Q2FwOgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZGF0YS0+dmlldy0+U2V0TGluZU1vZGUobW9k
ZSwgbV9kYXRhLT52aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT52aWV3LT5MaW5lTWl0ZXJM
aW1pdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2lu
IGxqKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGpvaW5fbW9kZSBtb2RlID0gQl9NSVRFUl9KT0lOOworICAgIHN3aXRjaCAobGopIHsKKyAg
ICBjYXNlIFJvdW5kSm9pbjoKKyAgICAgICAgbW9kZSA9IEJfUk9VTkRfSk9JTjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBCZXZlbEpvaW46CisgICAgICAgIG1vZGUgPSBCX0JFVkVMX0pPSU47
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWl0ZXJKb2luOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZGF0YS0+dmlldy0+U2V0TGluZU1vZGUobV9kYXRh
LT52aWV3LT5MaW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPnZpZXctPkxpbmVNaXRlckxpbWl0
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2RhdGEtPnZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldy0+TGluZUNhcE1vZGUoKSwg
bV9kYXRhLT52aWV3LT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGRyYXdpbmdfbW9kZSBtb2RlID0gQl9PUF9DT1BZOworICAgIHN3aXRjaCAob3ApIHsK
KyAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgorICAgIGNhc2UgQ29tcG9zaXRlQ29weToKKyAgICAg
ICAgLy8gVXNlIHRoZSBkZWZhdWx0IGFib3ZlCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29t
cG9zaXRlU291cmNlT3ZlcjoKKyAgICAgICAgbW9kZSA9IEJfT1BfT1ZFUjsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQ6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbjogVW5zdXBwb3J0ZWQgY29tcG9zaXRlIG9wZXJhdGlvbiAlc1xuIiwK
KyAgICAgICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgfQorICAgIG1fZGF0YS0+dmlldy0+U2V0RHJhd2luZ01vZGUobW9kZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3LT5Db25z
dHJhaW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K1RyYW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4o
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRS
ZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgYUZvbnQpCit7CisgICAgbV9kYXRhLT52
aWV3LT5TZXRGb250KGFGb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Cit9CisKK3Bh
dHRlcm4gR3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCl7CisgICAgc3dpdGNo
IChzdHJva2VTdHlsZSgpKSB7CisgICAgY2FzZSBTb2xpZFN0cm9rZToKKyAgICAgICAgcmV0dXJu
IEJfU09MSURfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb3R0ZWRTdHJva2U6Cisg
ICAgICAgIHJldHVybiBCX01JWEVEX0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBE
YXNoZWRTdHJva2U6CisgICAgICAgIC8vIEZJWE1FOiB1c2UgYSBiZXR0ZXIgZGFzaGVkIHN0cm9r
ZSEKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIEJfTUlYRURfQ09M
T1JTOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQl9TT0xJ
RF9MT1c7CisgICAgICAgIGJyZWFrOworCX0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0cm9rZVN0eWxlKQorewor
CS8vIEZJWE1FOiBzZWUgZ2V0SGFpa3VTdHJva2VTdHlsZS4KKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Mo
ZmxvYXQgdGhpY2tuZXNzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+dmlldy0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGF0YS0+dmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhJbnRTaXpl
IGNvbnN0JixpbnQsQ29sb3IgY29uc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JY29uSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5
NDcwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ljb25IYWlrdS5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJY29uLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitJY29uOjpJY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitJY29uOjp+SWNvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
UGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bh
c3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJE
YXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYmU0NDUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5o
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9u
IDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFfaAorI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFf
aAorCisjaW5jbHVkZSAiT3duUHRyLmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgSW50U2l6ZTsKKworICAgIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CisgICAgcHVibGlj
OgorICAgICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOworICAgIH07CisKK30g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhh
aWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlM2VlOAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJI
YWlrdS5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhp
bWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEludFNpemUmKQoreworfQorCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgSW50U2l6ZSYsIGJvb2wgZ3JheVNjYWxlLCBib29sJiBzdWNjZXNzKQorICAgIDogbV9k
YXRhKEludFNpemUoKSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKK30KKworSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCit7Cit9CisKK0dyYXBoaWNz
Q29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdl
RGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK0ltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFn
ZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNzhhZAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAK
QEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVy
IDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5k
cmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvbi5oPgorI2luY2x1ZGUgPEJpdG1h
cC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KKworI2luY2x1ZGUgPG1hdGguaD4KKworCisvLyBUaGlz
IGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAorVmVjdG9yPGNoYXI+IGxvYWRS
ZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKik7CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQoreworICAgIGlmIChj
bGVhck1ldGFkYXRhKQorICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAgaWYg
KG1fZnJhbWUpIHsKKyAgICAgICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoeSBiZV9hcHAgaXMgY2hl
Y2tlZAorICAgICAgICBpZiAoYmVfYXBwKQorICAgICAgICAgICAgZGVsZXRlIG1fZnJhbWU7Cisg
ICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICBtX2R1cmF0aW9uID0gMC4wZjsKKyAgICAgICAg
bV9oYXNBbHBoYSA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworV1RGOjpQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYXJyID0g
bG9hZFJlc291cmNlSW50b0FycmF5KG5hbWUpOworICAgIFdURjo6UGFzc1JlZlB0cjxCaXRtYXBJ
bWFnZT4gaW1nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGFyci5kYXRhKCksIGFyci5zaXplKCkp
OworICAgIGltZy0+c2V0RGF0YShidWZmZXIsIHRydWUpOworICAgIHJldHVybiBpbWc7Cit9CisK
K3ZvaWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQoreworfQorCit2b2lkIEJpdG1h
cEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKK3sKK30KKworLy8gRHJhd2luZyBSb3V0
aW5lcwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3Qm
IHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpIC8vIElmIHRoZSBpbWFn
ZSBoYXNuJ3QgZnVsbHkgbG9hZGVkLgorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobWF5Rmls
bFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRz
dCwgc29saWRDb2xvcigpLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRT
aXplIHNlbGZTaXplID0gc2l6ZSgpOworCisgICAgY3R4dC0+c2F2ZSgpOworCisgICAgLy8gU2V0
IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBzdXBw
b3J0IGFsbCB0aGUgY29tcG9zaXRlIG1vZGVzIDoKKyAgICAvLwljdHh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24ob3ApOworCisgICAgQlZpZXcqIHZpZXcgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKworICAgIEJSZWN0IHNyY1JlY3Qoc3JjKTsKKyAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUg
c2l0ZSBhdAorICAgIC8vIGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29t
cGxleHNwaXJhbC9kZW1vLmh0bWwKKyAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhB
KTsKKyAgICB2aWV3LT5EcmF3Qml0bWFwKGltYWdlLCBzcmNSZWN0ICYgaW1hZ2UtPkJvdW5kcygp
LCBkc3QpOworCisgICAgY3R4dC0+cmVzdG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsK
K30KKwordm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVy
blRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHNy
Y1BvaW50LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQor
eworCS8vIEZJWE1FOiBmaW5pc2ggdGhpcyB0byBzdXBwb3J0IGFsc28gcGhhc2VkIHBvc2l0aW9u
IChzcmNQb2ludCkKKworICAgIEJCaXRtYXAqIGltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgY3VycmVudFcg
PSAwOworICAgIGZsb2F0IGN1cnJlbnRIID0gMDsKKworICAgIGN0eHQtPnNhdmUoKTsKKworICAg
IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKwor
ICAgIGN0eHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7CisKKyAgICB3aGlsZSAo
Y3VycmVudFcgPCBkc3RSZWN0LndpZHRoKCkpIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRIIDwg
ZHN0UmVjdC5oZWlnaHQoKSkgeworICAgICAgICAgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PkRyYXdCaXRtYXAoaW1hZ2UsIEJQb2ludChkc3RSZWN0LngoKSArIGN1cnJlbnRXLCBkc3RSZWN0
LnkoKSArIGN1cnJlbnRIKSk7CisgICAgICAgICAgICBjdXJyZW50SCArPSB0aWxlUmVjdC5oZWln
aHQoKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50VyArPSB0aWxlUmVjdC53aWR0aCgpOwor
ICAgICAgICBjdXJyZW50SCA9IDA7CisgICAgfQorICAgIGN0eHQtPnJlc3RvcmUoKTsKKworICAg
IHN0YXJ0QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRD
b2xvcigpCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gY2hlY2sgdGhlIFJHQkEzMiBidWZmZXIg
dG8gc2VlIGlmIGl0IGlzIDF4MS4KKyAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOworfQorCitC
Qml0bWFwKiBCaXRtYXBJbWFnZTo6Z2V0Qml0bWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29u
c3RfY2FzdDxCaXRtYXBJbWFnZSo+KHRoaXMpLT5mcmFtZUF0SW5kZXgoMCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZGFiZGE5OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSAgIDxhbmRyZWEuYW56YW5pQGdtYWls
LmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVHJhbnNsYXRvckRl
Y29kZXIuaCIKKyNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJYQk1J
bWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8
Qml0bWFwLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIHRoZSBIYWlrdSB0cmFuc2xhdG9yIEFQSQorSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNv
ZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICAvLyBXZSBuZWVkIGF0IGxlYXN0
IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZyB3
aXRoLgorICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKKyAgICBpZiAobGVuZ3RoIDwgNCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1Q29udGVudHMg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhLmRhdGEoKSk7Cisg
ICAgY29uc3QgY2hhciogY29udGVudHMgPSBkYXRhLmRhdGEoKTsKKworICAgIC8vIEdJRnMgYmVn
aW4gd2l0aCBHSUY4KDcgb3IgOSkuCisgICAgaWYgKCFzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIs
IDQpKQorICAgICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcigpOworCisgICAgLy8gVGVz
dCBmb3IgUE5HLgorICAgIGlmICh1Q29udGVudHNbMF0gPT0gMHg4OSAmJgorICAgICAgICB1Q29u
dGVudHNbMV0gPT0gMHg1MCAmJgorICAgICAgICB1Q29udGVudHNbMl0gPT0gMHg0RSAmJgorICAg
ICAgICB1Q29udGVudHNbM10gPT0gMHg0NykKKyAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURl
Y29kZXIoKTsKKworICAgIC8vIEpQRUcKKyAgICAvLyBpZiAodUNvbnRlbnRzWzBdID09IDB4RkYg
JiYKKyAgICAvLyAgICAgdUNvbnRlbnRzWzFdID09IDB4RDggJiYKKyAgICAvLyAgICAgdUNvbnRl
bnRzWzJdID09IDB4RkYpCisgICAgLy8gICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2Rlcigp
OworCisgICAgLy8gQk1QCisgICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09IDAp
CisgICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBJQ09zIGFs
d2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAv
LyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCisgICAgLy8g
aWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDFcMDAwIiwgNCkgfHwKKyAgICAvLyAg
ICAgIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMlwwMDAiLCA0KSkKKyAgICAvLyAgICAg
cmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsKKworICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5
dGVzIG9mIGluZm8uCisgICAgaWYgKGxlbmd0aCA+PSA4ICYmICFzdHJuY21wKGNvbnRlbnRzLCAi
I2RlZmluZSAiLCA4KSkKKyAgICAgICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKKwor
ICAgIHByaW50ZigiSW52YWxpZCBpbWFnZSFcbiIgKTsKKyAgICAvLyBHaXZlIHVwLiBXZSBkb24n
dCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KKyAgICByZXR1cm4gMDsKK30KKworSW1hZ2VT
b3VyY2U6OkltYWdlU291cmNlKCkKKyAgICA6IG1fZGVjb2RlcigwKQoreworfQorCitJbWFnZVNv
dXJjZTo6fkltYWdlU291cmNlKCkKK3sKKyAgICBjbGVhcih0cnVlKTsKK30KKwordm9pZCBJbWFn
ZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCit7CisgICAgZGVsZXRlIG1fZGVjb2RlcjsKKyAgICBtX2RlY29kZXIgPSAwOwor
fQorCitib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fZGVjb2RlcjsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIC8vIE1ha2UgdGhlIGRlY29kZXIg
Ynkgc25pZmZpbmcgdGhlIGJ5dGVzLgorICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0
aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRl
Y29kZXIgcGx1Z2luLgorICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxl
IHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQor
ICAgIC8vIG1hZGUuCisgICAgaWYoIW1fZGVjb2RlcikKKyAgICAgICAgbV9kZWNvZGVyID0gY3Jl
YXRlRGVjb2RlcihkYXRhLT5idWZmZXIoKSk7CisKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fZGVjb2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQp
OworfQorCitib29sIEltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmICgh
bV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9kZWNvZGVy
LT5pc1NpemVBdmFpbGFibGUoKTsKK30KKworSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisK
KyAgICByZXR1cm4gbV9kZWNvZGVyLT5zaXplKCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6
OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90KSBjb25zdAoreworICAgIHJldHVybiBzaXplKCk7Cit9
CisKK2ludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZGVj
b2RlcikKKyAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Ob25lOworCisgICAgcmV0dXJuIG1fZGVj
b2Rlci0+cmVwZXRpdGlvbkNvdW50KCk7Cit9CisKK1N0cmluZyBJbWFnZVNvdXJjZTo6ZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZyYW1lQ291bnQoKSA6IDA7Cit9
CisKK05hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90
IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVy
OjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBidWZmZXItPmFz
TmV3TmF0aXZlSW1hZ2UoKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRl
QXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0
dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGU7Cit9CisKK2Zsb2F0IEltYWdlU291
cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2Rl
Y29kZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBt
X2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwg
YnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIGJ1ZmZlci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7Cit9CisK
K2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sK
KyAgICBpZiAoIW1fZGVjb2RlciB8fCAhbV9kZWNvZGVyLT5zdXBwb3J0c0FscGhhKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVy
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gYnVmZmVyLT5oYXNBbHBoYSgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW50UG9pbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBv
aW50SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NTVhNGIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBv
aW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2lu
dC5oIgorCisjaW5jbHVkZSA8UG9pbnQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lu
dFBvaW50OjpJbnRQb2ludChjb25zdCBCUG9pbnQmIHApCisgICAgOiBtX3goc3RhdGljX2Nhc3Q8
aW50PihwLngpKQorICAgICwgbV95KHN0YXRpY19jYXN0PGludD4ocC55KSkKK3sKK30KKworSW50
UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJQb2ludChtX3gs
IG1feSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU3NGFkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ludFJlY3Q6OkludFJlY3QoY29uc3QgQlJlY3QmIHIpCisgICAg
OiBtX2xvY2F0aW9uKHIuTGVmdFRvcCgpKQorICAgICwgbV9zaXplKHIuSW50ZWdlcldpZHRoKCkg
KyAxLCByLkludGVnZXJIZWlnaHQoKSArIDEpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJhdG9yIEJS
ZWN0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogc3VidHJhY3QgMSBmcm9tIGhlaWdodCBhbmQg
d2lkdGg/CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCks
aGVpZ2h0KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmOTFhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcApAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBn
bWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8U2l6ZS5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZTo6SW50U2l6ZShjb25zdCBCU2l6ZSYgcykK
KyAgICA6IG1fd2lkdGgocy5JbnRlZ2VyV2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0KHMuSW50ZWdl
ckhlaWdodCgpKQoreworfQorCitJbnRTaXplOjpvcGVyYXRvciBCU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEJTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1Bh
dGhIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjMTk4OAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcApA
QCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPFJlZ2lvbi5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGF0aDo6UGF0aCgpCisgICAgOiBtX3BhdGgo
bmV3IEJSZWdpb24oKSkKK3sKK30KKworUGF0aDo6flBhdGgoKQoreworICAgIGRlbGV0ZSBtX3Bh
dGg7Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCisgICAgOiBtX3BhdGgobmV3
IEJSZWdpb24oKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKK3sKK30KKworUGF0aCYgUGF0aDo6b3Bl
cmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQoreworICAgIGlmICgmb3RoZXIgIT0gdGhpcykKKyAg
ICAgICAgbV9wYXRoID0gb3RoZXIucGxhdGZvcm1QYXRoKCk7CisKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK2Jvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
IWlzRW1wdHkoKTsKK30KKworYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5Db250YWlu
cyhwb2ludCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJlY3QgUGF0aDo6Ym91bmRp
bmdSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5GcmFtZSgpOworfQorCit2b2lk
IFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICAvLyBGSVhNRTog
VXNlIE9mZnNldEJ5PworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRk
TGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3Qg
RmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6
OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50
JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQ
b2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2Fy
LCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQoreworICAgIG1f
cGF0aC0+SW5jbHVkZShyKTsKK30KKwordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmNsZWFy
KCkKK3sKKyAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOworfQorCitib29sIFBhdGg6OmlzRW1wdHko
KSBjb25zdAoreworICAgIHJldHVybiAhbV9wYXRoLT5GcmFtZSgpLklzVmFsaWQoKTsKK30KKwor
U3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZv
LCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0
IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMgoK
</data>
<flag name="review"
          id="17220"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32923</attachid>
            <date>2009-07-17 03:12:58 -0700</date>
            <delta_ts>2009-07-17 05:09:59 -0700</delta_ts>
            <desc>Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-drawing-files-for-WebCore-platf.patch</filename>
            <type>text/plain</type>
            <size>59046</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBlZTE2ZDg5YTI4NjBhYTBmNzRhNjQyMDFkNDVhYjAzNzA5MTg4NTkxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMTcgSnVsIDIwMDkgMTI6MTE6MDggKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBkcmF3aW5nIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTUxICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCAgICAgfCAgIDU0ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRQb2ludEhhaWt1LmNwcCAgICB8ICAgNDggKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCAgfCAgIDU0ICsrCiAuLi4vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwICAgICAgICB8ICA1NDYgKysrKysrKysrKysr
KysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAg
ICAgIHwgICA2MyArKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmggIHwgICA0NiArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwICAgfCAgIDgxICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZUhhaWt1LmNwcCAgICAgfCAgMTY1ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwICAgfCAgMjE3ICsrKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwICB8ICAgNDggKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCAgIHwgICA0OSArKwog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwICAgfCAgIDQ4
ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAgICAgICB8
ICAxNjQgKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzgyIGluc2VydGlvbnMoKyksIDAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNp
emVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L1BhdGhIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk0MjBlNjUuLjllOWZiN2EgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU0IEBACisy
MDA5LTA3LTE3ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNw
ZWNpZmljIGRyYXdpbmcgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
b3BlcmF0b3IgcmdiX2NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRSZWN0OjpGbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRS
ZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhZGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxs
aXBzZUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVy
Um91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRIYWlrdVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRC
aXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNp
emVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50UG9pbnQ6OkludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpvcGVy
YXRvciBCUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpJbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6Om9w
ZXJhdG9yIEJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0N1cnJlbnRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8p
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjph
ZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0VtcHR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorCiAyMDA5LTA3LTE2ICBGdW1p
dG9zaGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4MjlkNgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5j
cHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKKyNpbmNs
dWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb2xvcjo6
Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjb2xvcikKKyAgICA6IG1fY29sb3IobWFrZVJHQkEoY29s
b3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSwgY29sb3IuYWxwaGEpKQoreworICAgIG1f
dmFsaWQgPSB0cnVlOworfQorCitDb2xvcjo6b3BlcmF0b3IgcmdiX2NvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbWFrZV9jb2xvcihyZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpLCBhbHBoYSgpKTsK
K30KKworCitDb2xvciBmb2N1c1JpbmdDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKGtleWJv
YXJkX25hdmlnYXRpb25fY29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTA4OTgKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlr
dS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KworI2luY2x1ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFBv
aW50OjpGbG9hdFBvaW50KGNvbnN0IEJQb2ludCYgcG9pbnQpCisgICAgOiBtX3gocG9pbnQueCkK
KyAgICAsIG1feShwb2ludC55KQoreworfQorCitGbG9hdFBvaW50OjpvcGVyYXRvciBCUG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRmxvYXRSZWN0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
bG9hdFJlY3RIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUx
ZDJhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRSZWN0SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEJSZWN0JiByZWN0KQorICAgIDogbV9sb2Nh
dGlvbihyZWN0LkxlZnRUb3AoKSkKKyAgICAsIG1fc2l6ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0
LkhlaWdodCgpICsgMSkKK3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCksIGhl
aWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkODlhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdy
YWRpZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4
dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250
ZXh0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDg3MDEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcApAQCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBlbi5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8R3JhcGhp
Y3NEZWZzLmg+CisKKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5j
bHVkZSA8UmVnaW9uLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShCVmlldyogdmlldyk7CisgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSgpOworCisgICAgQlZpZXcqIG1fdmlldzsKK307CisKK0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3
KQoreworICAgIG1fdmlldyA9IHZpZXc7Cit9CisKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCit7Cit9CisKK0dyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQorICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAgICwg
bV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY29udGV4dCkpCit7Cisg
ICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY29udGV4dCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDo6
fkdyYXBoaWNzQ29udGV4dCgpCit7CisgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUo
bV9jb21tb24pOworICAgIGRlbGV0ZSBtX2RhdGE7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZGF0YS0+bV92aWV3OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRm
b3JtU3RhdGUoKQoreworICAgIG1fZGF0YS0+bV92aWV3LT5QdXNoU3RhdGUoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEt
Pm1fdmlldy0+UG9wU3RhdGUoKTsKK30KKworLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdp
dGggYSBzdHJva2VkIGJvcmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUmVjdChyZWN0KTsKKyAgICBpZiAo
c3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9r
ZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKworLy8gVGhpcyBpcyBvbmx5
IHVzZWQgdG8gZHJhdyBib3JkZXJzLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNv
bnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0cm9rZVN0
eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3
LT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQyLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQor
CisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMg
dXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsRWxsaXBzZShyZWN0KTsKKyAgICBpZiAo
c3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9r
ZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwg
aW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUs
IGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgcG9pbnRzTGVuZ3RoLCBj
b25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJQb2ludCBiUG9p
bnRzW3BvaW50c0xlbmd0aF07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5n
dGg7IGkrKykKKyAgICAgICAgYlBvaW50c1tpXSA9IHBvaW50c1tpXTsKKworICAgIG1fZGF0YS0+
bV92aWV3LT5GaWxsUG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgpOworICAgIGlmIChzdHJv
a2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IK
KyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVu
Z3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmdiX2NvbG9yIG9sZENvbG9yID0gbV9kYXRhLT5tX3ZpZXctPkhpZ2hDb2xvcigpOworICAgIG1f
ZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+bV92aWV3LT5G
aWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKG9sZENvbG9y
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNv
bnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3Iu
YWxwaGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAv
LyBGSVhNRTogQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gY291bGQganVzdCB1c2UgRmlsbFJvdW5k
UmVjdCBpZiBhbGwgCisgICAgLy8gdGhlIHNpemVzIGFyZSB0aGUgc2FtZSwgb3IgZXZlbiBpZiB0
aGV5IGFyZSBub3QuIE90aGVyd2lzZSBzZXZlcmFsCisgICAgLy8gRmlsbFJlY3QgYW5kIEZpbGxB
cmMgY2FsbHMgYXJlIG5lZWRlZC4KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBCUmVnaW9uIHJlZ2lvbihyZWN0KTsKKyAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0Pwor
ICAgIC8vIHN5bGxhYmxlIGFkZHM6CisgICAgLy8gY1JlY3QgKz0gbV9kYXRhLT5wKCktPkdldFNj
cm9sbE9mZnNldCgpOyB0byB0aGUgcmVjdCBiZWZvcmUKKyAgICAvLyBjcmVhdGluZyB0aGUgcmVn
aW9uLgorICAgIG1fZGF0YS0+bV92aWV3LT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9u
KTsKK30KKwordm9pZCBzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkp
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gZm9jdXNSaW5nUmVjdHMoKTsK
KyAgICB1bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXplKCk7CisKKyAgICAvLyBGSVhNRTog
bWF5YmUgd2Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIHdpdGggQlNoYXBlPworCisgICAgaWYgKHJl
Y3RzLnNpemUoKSA+IDEpIHsKKyAgICAgICAgQlJlZ2lvbiAgICByZWdpb247CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kpCisgICAgICAgICAgICByZWdpb24uSW5j
bHVkZShCUmVjdChyZWN0c1tpXSkpOworCisgICAgICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdo
Q29sb3IoY29sb3IpOworICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVjdChyZWdpb24u
RnJhbWUoKSwgQl9NSVhFRF9DT0xPUlMpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgSW50UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAw
KTsKKyAgICBkcmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQm
LCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiByZWN0OworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCB3aWR0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmbG9hdCBvbGRTaXplID0gbV9kYXRhLT5tX3ZpZXctPlBlblNpemUoKTsKKyAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0UGVuU2l6ZSh3aWR0aCk7CisgICAgbV9kYXRhLT5tX3ZpZXct
PlN0cm9rZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPm1f
dmlldy0+U2V0UGVuU2l6ZShvbGRTaXplKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNhcF9tb2RlIG1vZGUgPSBCX0JVVFRfQ0FQOworICAg
IHN3aXRjaCAobGluZUNhcCkgeworICAgIGNhc2UgUm91bmRDYXA6CisgICAgICAgIG1vZGUgPSBC
X1JPVU5EX0NBUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAg
IG1vZGUgPSBCX1NRVUFSRV9DQVA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0dENhcDoK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2RhdGEtPm1fdmll
dy0+U2V0TGluZU1vZGUobW9kZSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBtX2Rh
dGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBqb2luX21vZGUgbW9kZSA9IEJfTUlURVJf
Sk9JTjsKKyAgICBzd2l0Y2ggKGxpbmVKb2luKSB7CisgICAgY2FzZSBSb3VuZEpvaW46CisgICAg
ICAgIG1vZGUgPSBCX1JPVU5EX0pPSU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmV2ZWxK
b2luOgorICAgICAgICBtb2RlID0gQl9CRVZFTF9KT0lOOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE1pdGVySm9pbjoKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0TGluZU1vZGUobV9kYXRhLT5tX3ZpZXctPkxpbmVDYXBNb2Rl
KCksIG1vZGUsIG1fZGF0YS0+bV92aWV3LT5MaW5lTWl0ZXJMaW1pdCgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXct
PlNldExpbmVNb2RlKG1fZGF0YS0+bV92aWV3LT5MaW5lQ2FwTW9kZSgpLCBtX2RhdGEtPm1fdmll
dy0+TGluZUpvaW5Nb2RlKCksIGxpbWl0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEFscGhhKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3
aW5nX21vZGUgbW9kZSA9IEJfT1BfQ09QWTsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBD
b21wb3NpdGVDbGVhcjoKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIC8vIFVzZSB0
aGUgZGVmYXVsdCBhYm92ZQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJj
ZU92ZXI6CisgICAgICAgIG1vZGUgPSBCX09QX09WRVI7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVy
YXRpb246IFVuc3VwcG9ydGVkIGNvbXBvc2l0ZSBvcGVyYXRpb24gJXNcbiIsCisgICAgICAgICAg
ICAgICAgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9Cisg
ICAgbV9kYXRhLT5tX3ZpZXctPlNldERyYXdpbmdNb2RlKG1vZGUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5Db25zdHJh
aW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRS
ZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBtX2RhdGEtPm1f
dmlldy0+U2V0Rm9udChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKK30KKwor
cGF0dGVybiBHcmFwaGljc0NvbnRleHQ6OmdldEhhaWt1U3Ryb2tlU3R5bGUoKQoreworICAgIHN3
aXRjaCAoc3Ryb2tlU3R5bGUoKSkgeworICAgIGNhc2UgU29saWRTdHJva2U6CisgICAgICAgIHJl
dHVybiBCX1NPTElEX0hJR0g7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG90dGVkU3Ryb2tl
OgorICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRGFzaGVkU3Ryb2tlOgorICAgICAgICAvLyBGSVhNRTogdXNlIGEgYmV0dGVyIGRhc2hlZCBz
dHJva2UhCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBCX01JWEVE
X0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEJf
U09MSURfTE9XOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBzdHJva2VTdHls
ZSkKK3sKKyAgICAvLyBGSVhNRTogc2VlIGdldEhhaWt1U3Ryb2tlU3R5bGUuCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+U2V0UGVuU2l6ZSh0aGlj
a25lc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENvbG9yIGNvbnN0JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kOTQ3MGM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSWNvbi5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNvbjo6SWNvbigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSWNvbjo6fkljb24oKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ltYWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM5
ZTAyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckRhdGEuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKKyNkZWZpbmUg
SW1hZ2VCdWZmZXJEYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBJbnRTaXplOworCisgICAgY2xhc3MgSW1hZ2VCdWZm
ZXJEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRT
aXplJik7CisgICAgfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBJ
bWFnZUJ1ZmZlckRhdGFfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40OGUzZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VC
dWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCit7Cit9CisKK0ltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgYm9vbCBncmF5U2NhbGUsIGJvb2wm
IHN1Y2Nlc3MpCisgICAgOiBtX2RhdGEoSW50U2l6ZSgpKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgc3VjY2VzcyA9IGZhbHNlOworfQorCitJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVy
KCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEltYWdl
QnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworSW1hZ2UqIEltYWdlQnVmZmVyOjpp
bWFnZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNGI3MTllCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUhhaWt1LmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lt
b24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9u
Lmg+CisjaW5jbHVkZSA8Qml0bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisjaW5jbHVkZSA8
bWF0aC5oPgorCisKKy8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0
CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0
YWRhdGEpCit7CisgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgIG1faGF2ZU1ldGFkYXRh
ID0gZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICAvLyBGSVhNRTogTm90IHN1
cmUgd2h5IGJlX2FwcCBpcyBjaGVja2VkCisgICAgICAgIGlmIChiZV9hcHApCisgICAgICAgICAg
ICBkZWxldGUgbV9mcmFtZTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1fZHVyYXRp
b24gPSAwLjBmOworICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitXVEY6OlBhc3NSZWZQdHI8SW1h
Z2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IFZlY3RvcjxjaGFyPiBhcnJheSA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAgICBX
VEY6OlBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICBpbWFnZS0+c2V0RGF0YShidWZmZXIs
IHRydWUpOworICAgIHJldHVybiBpbWFnZTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW5pdFBs
YXRmb3JtRGF0YSgpCit7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9y
bURhdGEoKQoreworfQorCisvLyBEcmF3aW5nIFJvdXRpbmVzCit2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3BlcmF0b3IpCit7CisgICAgQkJp
dG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1h
Z2UpIC8vIElmIHRoZSBpbWFnZSBoYXNuJ3QgZnVsbHkgbG9hZGVkLgorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAgICAgZmlsbFdpdGhT
b2xpZENvbG9yKGNvbnRleHQsIGRlc3QsIHNvbGlkQ29sb3IoKSwgb3BlcmF0b3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSW50U2l6ZSBzZWxmU2l6ZSA9IHNpemUoKTsKKworICAg
IGNvbnRleHQtPnNhdmUoKTsKKworICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgorICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgc3VwcG9ydCBhbGwgdGhlIGNvbXBvc2l0ZSBtb2Rl
cyA6CisgICAgLy8gY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wZXJhdG9yKTsKKwor
ICAgIEJWaWV3KiB2aWV3ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBCUmVj
dCBzcmNSZWN0KHNyYyk7CisgICAgLy8gVGVzdCB1c2luZyBleGFtcGxlIHNpdGUgYXQKKyAgICAv
LyBodHRwOi8vd3d3Lm1leWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhzcGlyYWwvZGVt
by5odG1sCisgICAgdmlldy0+U2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisgICAgdmlldy0+
RHJhd0JpdG1hcChpbWFnZSwgc3JjUmVjdCAmIGltYWdlLT5Cb3VuZHMoKSwgZGVzdCk7CisKKyAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICBzdGFydEFuaW1hdGlvbigpOworfQorCit2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3sKKyAgICAvLyBGSVhNRTogZmluaXNoIHRoaXMgdG8g
c3VwcG9ydCBhbHNvIHBoYXNlZCBwb3NpdGlvbiAoc3JjUG9pbnQpCisKKyAgICBCQml0bWFwKiBp
bWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkgLy8g
SWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJl
dHVybjsKKworICAgIGZsb2F0IGN1cnJlbnRXID0gMDsKKyAgICBmbG9hdCBjdXJyZW50SCA9IDA7
CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+U2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisKKyAgICBjb250ZXh0LT5jbGlwKGVuY2xv
c2luZ0ludFJlY3QoZHN0UmVjdCkpOworCisgICAgd2hpbGUgKGN1cnJlbnRXIDwgZHN0UmVjdC53
aWR0aCgpKSB7CisgICAgICAgIHdoaWxlIChjdXJyZW50SCA8IGRzdFJlY3QuaGVpZ2h0KCkpIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5EcmF3Qml0bWFwKGltYWdl
LCBCUG9pbnQoZHN0UmVjdC54KCkgKyBjdXJyZW50VywgZHN0UmVjdC55KCkgKyBjdXJyZW50SCkp
OworICAgICAgICAgICAgY3VycmVudEggKz0gdGlsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgIH0K
KyAgICAgICAgY3VycmVudFcgKz0gdGlsZVJlY3Qud2lkdGgoKTsKKyAgICAgICAgY3VycmVudEgg
PSAwOworICAgIH0KKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICBzdGFydEFuaW1hdGlv
bigpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQoreworICAg
IC8vIEZJWE1FOiBuZWVkIHRvIGNoZWNrIHRoZSBSR0JBMzIgYnVmZmVyIHRvIHNlZSBpZiBpdCBp
cyAxeDEuCisgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKK30KKworQkJpdG1hcCogQml0bWFw
SW1hZ2U6OmdldEJpdG1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Qml0bWFw
SW1hZ2UqPih0aGlzKS0+ZnJhbWVBdEluZGV4KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VT
b3VyY2VIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291
cmNlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWY1NjUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdl
U291cmNlSGFpa3UuY3BwCkBAIC0wLDAgKzEsMjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFuZHJlYSBBbnphbmkgICA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUg
IkdJRkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlRyYW5zbGF0b3JEZWNvZGVyLmgiCisjaW5j
bHVkZSAiUE5HSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWEJNSW1hZ2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEJpdG1hcC5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgSGFp
a3UgdHJhbnNsYXRvciBBUEkKK0ltYWdlRGVjb2RlciogY3JlYXRlRGVjb2Rlcihjb25zdCBWZWN0
b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZp
Z3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0aC4KKyAgICBpbnQg
bGVuZ3RoID0gZGF0YS5zaXplKCk7CisgICAgaWYgKGxlbmd0aCA8IDQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogdUNvbnRlbnRzID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIGNvbnN0IGNoYXIq
IGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lGOCg3
IG9yIDkpLgorICAgIGlmICghc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSkKKyAgICAgICAg
cmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKKworICAgIC8vIFRlc3QgZm9yIFBORy4KKyAg
ICBpZiAodUNvbnRlbnRzWzBdID09IDB4ODkKKyAgICAgICAgJiYgdUNvbnRlbnRzWzFdID09IDB4
NTAKKyAgICAgICAgJiYgdUNvbnRlbnRzWzJdID09IDB4NEUKKyAgICAgICAgJiYgdUNvbnRlbnRz
WzNdID09IDB4NDcpCisgICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKCk7CisKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IEpQRUcgc3VwcG9ydAorICAgIC8vIGlmICh1Q29udGVudHNb
MF0gPT0gMHhGRgorICAgIC8vICAgICAmJiB1Q29udGVudHNbMV0gPT0gMHhEOAorICAgIC8vICAg
ICAmJiB1Q29udGVudHNbMl0gPT0gMHhGRikKKyAgICAvLyAgICAgcmV0dXJuIG5ldyBKUEVHSW1h
Z2VEZWNvZGVyKCk7CisKKyAgICAvLyBCTVAKKyAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJN
IiwgMikpCisgICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBJ
Q09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4K
KyAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCisg
ICAgLy8gaWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDFcMDAwIiwgNCkKKyAgICAv
LyAgICAgfHwgIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMlwwMDAiLCA0KSkKKyAgICAv
LyAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsKKworICAgIC8vIFhCTXMgcmVxdWly
ZSA4IGJ5dGVzIG9mIGluZm8uCisgICAgaWYgKGxlbmd0aCA+PSA4ICYmICFzdHJuY21wKGNvbnRl
bnRzLCAiI2RlZmluZSAiLCA4KSkKKyAgICAgICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIo
KTsKKworICAgIHByaW50ZigiSW52YWxpZCBpbWFnZSFcbiIpOworICAgIC8vIEdpdmUgdXAuIFdl
IGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgorICAgIHJldHVybiAwOworfQorCitJ
bWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoKQorICAgIDogbV9kZWNvZGVyKDApCit7Cit9CisKK0lt
YWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQoreworICAgIGNsZWFyKHRydWUpOworfQorCit2b2lk
IEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZy
YW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGRl
bGV0ZSBtX2RlY29kZXI7CisgICAgbV9kZWNvZGVyID0gMDsKK30KKworYm9vbCBJbWFnZVNvdXJj
ZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXI7Cit9CisKK3Zv
aWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkKK3sKKyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRl
cy4KKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRp
YXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KKyAgICAv
LyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGlt
YWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRlLgorICAgIGlm
ICghbV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVyKGRhdGEtPmJ1
ZmZlcigpKTsKKworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9k
ZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK2Jvb2wgSW1hZ2VT
b3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgp
OworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBtX2RlY29k
ZXItPnNpemUoKTsKK30KKworSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChz
aXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemUoKTsKK30KKworaW50IEltYWdlU291cmNl
OjpyZXBldGl0aW9uQ291bnQoKQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1
cm4gY0FuaW1hdGlvbk5vbmU7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5yZXBldGl0aW9uQ291
bnQoKTsKK30KKworU3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Np
emVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVj
b2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKK30KKworTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYg
KCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZm
ZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZm
ZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpOwor
fQorCitib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CisgICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZl
cjo6RnJhbWVDb21wbGV0ZTsKK30KKworZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVy
IHx8ICFtX2RlY29kZXItPnN1cHBvcnRzQWxwaGEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRl
eChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJC
dWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBi
dWZmZXItPmhhc0FscGhhKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3ZTUwMwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisKKyNpbmNsdWRlIDxQ
b2ludC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6OkludFBvaW50KGNv
bnN0IEJQb2ludCYgcG9pbnQpCisgICAgOiBtX3goc3RhdGljX2Nhc3Q8aW50Pihwb2ludC54KSkK
KyAgICAsIG1feShzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LnkpKQoreworfQorCitJbnRQb2ludDo6
b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBvaW50KG1feCwgbV95KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODBhYzQxNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8UmVjdC5oPgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW50UmVjdDo6SW50UmVjdChjb25zdCBCUmVjdCYgcmVjdCkKKyAgICA6IG1f
bG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCisgICAgLCBtX3NpemUocmVjdC5JbnRlZ2VyV2lkdGgo
KSArIDEsIHJlY3QuSW50ZWdlckhlaWdodCgpICsgMSkKK3sKK30KKworSW50UmVjdDo6b3BlcmF0
b3IgQlJlY3QoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzdWJ0cmFjdCAxIGZyb20gaGVpZ2h0
IGFuZCB3aWR0aD8KKyAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUod2lk
dGgoKSwgaGVpZ2h0KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjM2E5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcApAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8U2l6ZS5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZTo6SW50U2l6ZShjb25zdCBCU2l6
ZSYgc2l6ZSkKKyAgICA6IG1fd2lkdGgoc2l6ZS5JbnRlZ2VyV2lkdGgoKSkKKyAgICAsIG1faGVp
Z2h0KHNpemUuSW50ZWdlckhlaWdodCgpKQoreworfQorCitJbnRTaXplOjpvcGVyYXRvciBCU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L1BhdGhIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNj
MTk4OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
UGF0aEhhaWt1LmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2lu
Y2x1ZGUgPFJlZ2lvbi5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGF0aDo6UGF0aCgp
CisgICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKSkKK3sKK30KKworUGF0aDo6flBhdGgoKQorewor
ICAgIGRlbGV0ZSBtX3BhdGg7Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCisg
ICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKK3sKK30KKwor
UGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQoreworICAgIGlmICgmb3Ro
ZXIgIT0gdGhpcykKKyAgICAgICAgbV9wYXRoID0gb3RoZXIucGxhdGZvcm1QYXRoKCk7CisKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIWlzRW1wdHkoKTsKK30KKworYm9vbCBQYXRoOjpjb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wYXRoLT5Db250YWlucyhwb2ludCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJl
Y3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5GcmFt
ZSgpOworfQorCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sK
KyAgICAvLyBGSVhNRTogVXNlIE9mZnNldEJ5PworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AxLCBj
b25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBw
MSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxv
YXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByKQoreworICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKK30KKwordm9pZCBQYXRoOjphZGRFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFBhdGg6OmNsZWFyKCkKK3sKKyAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOworfQorCitib29s
IFBhdGg6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9wYXRoLT5GcmFtZSgpLklz
VmFsaWQoKTsKK30KKworU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBQYXRoOjph
cHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxp
ZXIqIGFwcGxpZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32924</attachid>
            <date>2009-07-17 03:25:50 -0700</date>
            <delta_ts>2009-08-07 11:05:03 -0700</delta_ts>
            <desc>Patch to add Haiku-specific font files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-font-files-for-WebCore-platform.patch</filename>
            <type>text/plain</type>
            <size>27915</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBjMzhlZTk1NmJkZmIzZjMzMDIxNWNlYmM2MmIzMWIyZGIxN2I1Mzg0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMTcgSnVsIDIwMDkgMTI6MjE6MzAgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBmb250IGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDQ0ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcCB8ICAgODkgKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAgIHwgICA0OSArKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcCAgICAgIHwgIDExOCArKysrKysrKysrKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhLmggfCAg
IDY5ICsrKysrKysrCiAuLi4vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNw
cCAgICAgICB8ICAxNjcgKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9oYWlrdS9H
bHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcCAgICAgIHwgICA2MyArKysrKysrKwogLi4uL2dyYXBo
aWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwICAgICAgICAgfCAgMTAzICsrKysrKysr
KysrKwogOCBmaWxlcyBjaGFuZ2VkLCA3MDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGEuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDIwZTY1Li5lYTBiZDY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDA5LTA3LTE3ICBNYXhpbWUgU2ltb24g
IDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNwZWNpZmljIGZvbnQgZmlsZXMgZm9yIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ZvbnRDYWNoZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnRE
YXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFz
dFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRUcmFp
dHNJbkZhbWlseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udERhdGFI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OmNvbnRhaW5zQ2hh
cmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChjaGFyVW5pY29kZVRvVXRmOCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250UGxhdGZvcm1E
YXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNo
VGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zv
bnRQbGF0Zm9ybURhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBoUGFnZVRyZWVOb2RlSGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorCiAyMDA5LTA3LTE2ICBGdW1p
dG9zaGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
b250Q2FjaGVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRD
YWNoZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y3M2Fh
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250
Q2FjaGVIYWlrdS5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisj
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUg
PFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBs
YXRmb3JtSW5pdCgpCit7Cit9CisKK2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhIGRhdGEoZm9udC5m
b250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAgcmV0dXJuIGdl
dENhY2hlZEZvbnREYXRhKCZkYXRhKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikKK3sKKworICAgIGNvbnN0IEJGb250KiBkZWZhdWx0Rm9udCA9IGJl
X3BsYWluX2ZvbnQ7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkgPT0g
Rm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgICAgIGRlZmF1bHRGb250ID0g
YmVfZml4ZWRfZm9udDsKKyAgICBlbHNlIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPT0g
Rm9udFdlaWdodEJvbGQpCisgICAgICAgIGRlZmF1bHRGb250ID0gYmVfYm9sZF9mb250OworCisg
ICAgZm9udF9mYW1pbHkgZmFtaWx5OworICAgIGRlZmF1bHRGb250LT5HZXRGYW1pbHlBbmRTdHls
ZSgmZmFtaWx5LCAwKTsKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHNfRGVmYXVsdFN0cihmYW1p
bHkpOworCisgICAgcmV0dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBzX0RlZmF1bHRTdHIpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIHJldHVybiBuZXcgRm9udFBs
YXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7Cit9CisKK3ZvaWQgRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIFZlY3Rv
cjx1bnNpZ25lZD4mIHRyYWl0c01hc2tzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9Gb250RGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYmEzZWZmYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udERhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udERh
dGEuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzgzMWExOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aW5jbHVkZSA8aW50ZXJmYWNlL0ZvbnQuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8
U3RyaW5nLmg+CisKKworLy8gRml4IHRlbXAgcm91dGluZSB0byBjaGVjayB0aGUgY29udmVyc2lv
biB3b3JrcywgcGxlYXNlIG1vdmUgaXQgQVNBUCAgICAKK2ludCBjaGFyVW5pY29kZVRvVXRmOCh1
bnNpZ25lZCBzaG9ydCBnbHlwaCwgY2hhciogb3V0KQoreworICAgIGludCBpID0gMDsKKworICAg
IGlmIChnbHlwaCA8IDB4MDA4MCkKKyAgICAgICAgb3V0W2krK10gPSBzdGF0aWNfY2FzdDxjaGFy
PihnbHlwaCk7CisgICAgZWxzZSBpZiAoZ2x5cGggPCAweDA4MDApIHsgLy90d28gYnl0ZXMKKyAg
ICAgICAgb3V0W2krK10gPSAweGMwIHwgKGdseXBoID4+IDYpOworICAgICAgICBvdXRbaSsrXSA9
IDB4ODAgfCAoZ2x5cGggJiAweDNGKTsKKyAgICB9IGVsc2UgaWYgKGdseXBoID4gMHgwODAwKSB7
IC8vMyBieXRlcworICAgICAgICBvdXRbaSsrXSA9IDB4ZTAgfCAoZ2x5cGggPj4gMTIpOworICAg
ICAgICBvdXRbaSsrXSA9IDB4ODAgfCAoKGdseXBoID4+IDYpICYgMHgzRik7CisgICAgICAgIG91
dFtpKytdID0gMHg4MCB8IChnbHlwaCAmIDB4M0YpOworICAgIH0KKworICAgIG91dFtpXSA9ICdc
MCc7CisgICAgcmV0dXJuIGk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGb250
OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBDb2xvciBjb2xvciA9
IGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCk7CisgICAgQlZpZXcqIHZpZXcgPSBzdGF0aWNf
Y2FzdDxCVmlldyo+KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIEJG
b250KiBtX2ZvbnQgPSBzdGF0aWNfY2FzdDxCRm9udCo+KGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZv
bnQoKSk7CisKKyAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICB2aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIHZp
ZXctPlNldEZvbnQobV9mb250KTsKKworICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNv
bnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7Cisg
ICAgZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
R2x5cGhzOyBpKyspIHsKKyAgICAgICAgY2hhciBvdXRbNF07CisgICAgICAgIGNoYXJVbmljb2Rl
VG9VdGY4KGdseXBoc1tpXSwgb3V0KTsKKworICAgICAgICB2aWV3LT5EcmF3U3RyaW5nKG91dCwg
c2l6ZW9mKG91dCksIEJQb2ludChvZmZzZXQsIHBvaW50LnkoKSkpOworICAgICAgICBvZmZzZXQg
Kz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBpKTsKKyAgICB9Cit9CisKK3ZvaWQgRm9u
dDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisK
K2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cykgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAzOworfQorCitGbG9hdFJlY3QgRm9u
dDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJbnRQ
b2ludCYsIGludCwgaW50LCBpbnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQsIGJvb2wpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0
Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udFBsYXRmb3Jt
RGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZGZlOTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9y
bURhdGEuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVk
IGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZv
bnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9ICisj
ZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfSAorCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworLy8gQWRkaW5nIGludGVyZmFjZS8gdG8gYXZv
aWQgY29uZnVzaW9uIHdpdGggV2ViS2l0IEZvbnQuaAorI2luY2x1ZGUgPGludGVyZmFjZS9Gb250
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRm9udFBsYXRmb3JtRGF0
YSB7CisgICAgcHVibGljOgorICAgICAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSgpOworICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CisgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIEJGb250KiBmb250KTsKKyAg
ICAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGlj
KTsKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250
UGxhdGZvcm1EYXRhKTsKKyAgICAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKKworICAgICAgICBi
b29sIGlzRml4ZWRQaXRjaCgpOworICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gIW1fZm9udDsgfQorCisgICAgICAgIEJGb250KiBmb250KCkgY29u
c3Q7CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29uc3Q7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBCRm9udCogbV9mb250OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jNjM5MzdmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250UGxhdGZvcm1EYXRhSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRp
b24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBG
b250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3Jn
ZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBN
dWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNp
biA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxo
YXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
Z29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVh
IEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
KworI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEZvbnQuaD4KKyNp
bmNsdWRlIDxzdXBwb3J0L1N0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSgpCisgICAgOiBtX2ZvbnQoMCkKK3sKK30K
KworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCisgICAgOiBtX2ZvbnQoMCkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250UGxhdGZvcm1EYXRh
KQoreworICAgIGlmIChmb250UGxhdGZvcm1EYXRhLm1fZm9udCkKKyAgICAgICAgbV9mb250ID0g
bmV3IEJGb250KGZvbnRQbGF0Zm9ybURhdGEubV9mb250KTsKK30KKworRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgIDogbV9mb250KDApCit7Cisg
ICAgYm9vbCBiRm91bmQgPSBmYWxzZTsKKyAgICBib29sIGJJdGFsaWMgPSBmb250RGVzY3JpcHRp
b24uaXRhbGljKCk7CisgICAgYm9vbCBiQm9sZCA9IGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9
PSBGb250V2VpZ2h0Qm9sZDsKKyAgICBmb250X2ZhbWlseSBmYW1pbHk7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50X2ZvbnRfZmFtaWxpZXMoKTsgaSsrKSB7CisgICAgICAgIGdldF9m
b250X2ZhbWlseShpLCAmZmFtaWx5LCAwKTsKKyAgICAgICAgaWYgKCFCU3RyaW5nKGZhbWlseU5h
bWUuc3RyaW5nKCkpLkNvbXBhcmUoZmFtaWx5KSkgeworICAgICAgICAgICAgbV9mb250ID0gbmV3
IEJGb250KCk7CisgICAgICAgICAgICBtX2ZvbnQtPlNldEZhbWlseUFuZFN0eWxlKGZhbWlseSwg
MCk7CisgICAgICAgICAgICBtX2ZvbnQtPlNldFNpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpKTsKKworICAgICAgICAgICAgYkZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJGb3VuZCkgeworICAgICAgICBpbnQzMiBu
dW1TdHlsZXMgPSBjb3VudF9mb250X3N0eWxlcyhmYW1pbHkpOworICAgICAgICBmb250X3N0eWxl
IGZvbnRTdHlsZTsKKyAgICAgICAgdWludDMyIGZsYWdzOworICAgICAgICBiRm91bmQgPSBmYWxz
ZTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVN0eWxlczsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAoZ2V0X2ZvbnRfc3R5bGUoZmFtaWx5LCBpLCAmZm9udFN0eWxlLCAmZmxhZ3Mp
ID09IEJfT0spIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3R5bGUoZm9udFN0eWxlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoKGJJdGFsaWMgJiYgYkJvbGQpICYmIChzdHlsZSA9PSAiQm9sZEl0
YWxpYyIgfHwgc3R5bGUgPT0gIkJvbGQgT2JsaXF1ZSIpKSB7CisgICAgICAgICAgICAgICAgICAg
ICBiRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKGJJdGFsaWMgJiYgIWJCb2xkKSAmJiAoc3R5
bGUgPT0gIkl0YWxpYyIgfHwgc3R5bGUgPT0gIk9ibGlxdWUiKSkgeworICAgICAgICAgICAgICAg
ICAgICAgYkZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCghYkl0YWxpYyAmJiBiQm9sZCkgJiYg
c3R5bGUgPT0gIkJvbGQiKSB7CisgICAgICAgICAgICAgICAgICAgICBiRm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoKCFiSXRhbGljICYmICFiQm9sZCkgJiYgKHN0eWxlID09ICJSb21hIiB8fCBz
dHlsZSA9PSAiQm9vayIKKyAgICAgICAgICAgICAgICAgICAgfHwgc3R5bGUgPT0gIkNvbmRlbnNl
ZCIgfHwgc3R5bGUgPT0gIlJlZ3VsYXIiIHx8IHN0eWxlID09ICJNZWRpdW0iKSkgeworICAgICAg
ICAgICAgICAgICAgICAgYkZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYkZvdW5kKQorICAgICAgICAgICAgbV9mb250LT5TZXRGYW1pbHlBbmRTdHlsZShmYW1p
bHksIGZvbnRTdHlsZSk7CisgICAgfQorfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBCRm9udCogZm9u
dCkKK3sKKyAgICBtX2ZvbnQgPSBmb250OworICAgIG1fZm9udC0+U2V0U2l6ZShmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRTaXplKCkpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2ZvbnQo
bmV3IEJGb250KCkpCit7CisgICAgbV9mb250LT5TZXRTaXplKHNpemUpOworCisgICAgaWYgKGJv
bGQgJiYgaXRhbGljKQorICAgICAgICBtX2ZvbnQtPlNldEZhY2UoQl9CT0xEX0ZBQ0UgfCBCX0lU
QUxJQ19GQUNFKTsKKyAgICBlbHNlIGlmIChib2xkKQorICAgICAgICBtX2ZvbnQtPlNldEZhY2Uo
Ql9CT0xEX0ZBQ0UpOworICAgIGVsc2UgaWYgKGl0YWxpYykKKyAgICAgICAgbV9mb250LT5TZXRG
YWNlKEJfSVRBTElDX0ZBQ0UpOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3Jt
RGF0YSgpCit7CisgICAgZGVsZXRlIG1fZm9udDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRh
Ojppc0ZpeGVkUGl0Y2goKQoreworICAgIGlmIChtX2ZvbnQpCisgICAgICAgIHJldHVybiBtX2Zv
bnQtPlNwYWNpbmcoKSA9PSBCX0ZJWEVEX1NQQUNJTkc7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK0JGb250KiBGb250UGxhdGZvcm1EYXRhOjpmb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9mb250OworfQorCit1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKK3sK
KyAgICB1aW50cHRyX3QgaGFzaENvZGVzWzFdID0geyAodWludHB0cl90KWZvbnQoKSB9OworICAg
IHVuc2lnbmVkIG5SZXN1bHQgPSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9j
YXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIp
KTsKKyAgICByZXR1cm4gblJlc3VsdDsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVy
YXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biAobV9mb250ID09IG90aGVyLm1fZm9udCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VU
cmVlTm9kZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQ
YWdlVHJlZU5vZGVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDM4OTNlMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkds
eXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0
Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSkKK3sKKyAgICBib29sIGlzVXRmMTYgPSBidWZmZXJMZW5ndGggIT0gR2x5cGhQYWdlOjpz
aXplOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsr
KSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworCisgICAgICAgIGlmIChpc1V0ZjE2KSB7
CisgICAgICAgICAgICBVQ2hhciBsZWFkID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyXTsKKyAgICAg
ICAgICAgIFVDaGFyIHRyYWlsID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyICsgMV07CisgICAgICAg
ICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlckJ1ZmZlcltpXTsK
KworICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBjaGFyYWN0ZXIsIGZvbnREYXRhKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnRE
YXRhSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250
RGF0YUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjdiMzZk
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1w
bGVGb250RGF0YUhhaWt1LmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKworI2luY2x1ZGUgIkZv
bnRDYWNoZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8dW5pY29kZS91
bm9ybS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBCRm9udCogZm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQo
KTsKKyAgICBpZiAoZm9udCkgeworICAgICAgICBmb250X2hlaWdodCBoZWlnaHQ7CisgICAgICAg
IGZvbnQtPkdldEhlaWdodCgmaGVpZ2h0KTsKKyAgICAgICAgbV9hc2NlbnQgPSBoZWlnaHQuYXNj
ZW50OworICAgICAgICBtX2Rlc2NlbnQgPSBoZWlnaHQuZGVzY2VudDsKKyAgICAgICAgbV9saW5l
U3BhY2luZyA9IGhlaWdodC5sZWFkaW5nOworICAgICAgICBtX3hIZWlnaHQgPSBmb250LT5TaXpl
KCk7IC8vIE5vdCBzdXJlIGFib3V0IHRoaXMKKyAgICAgICAgbV91bml0c1BlckVtID0gMTsgLy8g
RklYTUUhCisgICAgICAgIG1fbGluZUdhcCA9IGhlaWdodC5sZWFkaW5nOworICAgIH0KK30KKwor
dm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2
Z0NoYXJXaWR0aCA9IDAuZjsKKyAgICBtX21heENoYXJXaWR0aCA9IDAuZjsKKyAgICBpbml0Q2hh
cldpZHRocygpOworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQor
eworICAgIGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworICAgIG1fc21hbGxDYXBzRm9udERh
dGEgPSAwOworfQorCitTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OnNtYWxsQ2Fwc0Zv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorewor
ICAgIGlmICghbV9zbWFsbENhcHNGb250RGF0YSkgeworICAgICAgICBGb250RGVzY3JpcHRpb24g
ZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBkZXNjLnNl
dFNwZWNpZmllZFNpemUoMC43MGYgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwor
ICAgICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1E
YXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0Zv
bnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBt
X3NtYWxsQ2Fwc0ZvbnREYXRhOworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0No
YXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IFdlIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyB0byBsb2FkIG5vbi1B
U0NJSSBlbmNvZGluZyBzaXRlcworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNpbXBsZUZv
bnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkKKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKS0+
SXNGaXhlZCgpOworICAgIGVsc2UKKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNl
OworfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMgoK
</data>
<flag name="review"
          id="17271"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32931</attachid>
            <date>2009-07-17 05:09:59 -0700</date>
            <delta_ts>2009-07-19 05:54:51 -0700</delta_ts>
            <desc>Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-drawing-files-for-WebCore-platf.patch</filename>
            <type>text/plain</type>
            <size>59010</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBiNDVjYTdkZWEzOWIyMDAwZTkxNjk3MmYxN2FhZDYyZTAyYjQwN2I3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMTcgSnVsIDIwMDkgMTQ6MDI6MzIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBkcmF3aW5nIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTUxICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCAgICAgfCAgIDU0ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRQb2ludEhhaWt1LmNwcCAgICB8ICAgNDggKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCAgfCAgIDU0ICsrCiAuLi4vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwICAgICAgICB8ICA1NDYgKysrKysrKysrKysr
KysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAg
ICAgIHwgICA2MyArKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmggIHwgICA0NiArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwICAgfCAgIDgxICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZUhhaWt1LmNwcCAgICAgfCAgMTY1ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwICAgfCAgMjE3ICsrKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwICB8ICAgNDggKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCAgIHwgICA0OSArKwog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwICAgfCAgIDQ4
ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAgICAgICB8
ICAxNjQgKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzgyIGluc2VydGlvbnMoKyksIDAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNp
emVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L1BhdGhIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk0MjBlNjUuLjllOWZiN2EgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU0IEBACisy
MDA5LTA3LTE3ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNw
ZWNpZmljIGRyYXdpbmcgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
b3BlcmF0b3IgcmdiX2NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRSZWN0OjpGbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRS
ZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhZGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxs
aXBzZUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVy
Um91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRIYWlrdVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRC
aXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNp
emVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50UG9pbnQ6OkludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpvcGVy
YXRvciBCUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpJbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6Om9w
ZXJhdG9yIEJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0N1cnJlbnRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8p
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjph
ZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0VtcHR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorCiAyMDA5LTA3LTE2ICBGdW1p
dG9zaGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4MjlkNgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5j
cHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKKyNpbmNs
dWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb2xvcjo6
Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjb2xvcikKKyAgICA6IG1fY29sb3IobWFrZVJHQkEoY29s
b3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSwgY29sb3IuYWxwaGEpKQoreworICAgIG1f
dmFsaWQgPSB0cnVlOworfQorCitDb2xvcjo6b3BlcmF0b3IgcmdiX2NvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbWFrZV9jb2xvcihyZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpLCBhbHBoYSgpKTsK
K30KKworCitDb2xvciBmb2N1c1JpbmdDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKGtleWJv
YXJkX25hdmlnYXRpb25fY29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTA4OTgKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlr
dS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KworI2luY2x1ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFBv
aW50OjpGbG9hdFBvaW50KGNvbnN0IEJQb2ludCYgcG9pbnQpCisgICAgOiBtX3gocG9pbnQueCkK
KyAgICAsIG1feShwb2ludC55KQoreworfQorCitGbG9hdFBvaW50OjpvcGVyYXRvciBCUG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRmxvYXRSZWN0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
bG9hdFJlY3RIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUx
ZDJhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRSZWN0SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEJSZWN0JiByZWN0KQorICAgIDogbV9sb2Nh
dGlvbihyZWN0LkxlZnRUb3AoKSkKKyAgICAsIG1fc2l6ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0
LkhlaWdodCgpICsgMSkKK3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCksIGhl
aWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkODlhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdy
YWRpZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4
dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250
ZXh0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDg3MDEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcApAQCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBlbi5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8R3JhcGhp
Y3NEZWZzLmg+CisKKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5j
bHVkZSA8UmVnaW9uLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShCVmlldyogdmlldyk7CisgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSgpOworCisgICAgQlZpZXcqIG1fdmlldzsKK307CisKK0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3
KQoreworICAgIG1fdmlldyA9IHZpZXc7Cit9CisKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCit7Cit9CisKK0dyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQorICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAgICwg
bV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY29udGV4dCkpCit7Cisg
ICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY29udGV4dCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDo6
fkdyYXBoaWNzQ29udGV4dCgpCit7CisgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUo
bV9jb21tb24pOworICAgIGRlbGV0ZSBtX2RhdGE7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZGF0YS0+bV92aWV3OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRm
b3JtU3RhdGUoKQoreworICAgIG1fZGF0YS0+bV92aWV3LT5QdXNoU3RhdGUoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEt
Pm1fdmlldy0+UG9wU3RhdGUoKTsKK30KKworLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdp
dGggYSBzdHJva2VkIGJvcmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUmVjdChyZWN0KTsKKyAgICBpZiAo
c3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9r
ZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKworLy8gVGhpcyBpcyBvbmx5
IHVzZWQgdG8gZHJhdyBib3JkZXJzLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNv
bnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHN0cm9rZVN0
eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3
LT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQyLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQor
CisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMg
dXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsRWxsaXBzZShyZWN0KTsKKyAgICBpZiAo
c3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9r
ZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwg
aW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUs
IGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgcG9pbnRzTGVuZ3RoLCBj
b25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJQb2ludCBiUG9p
bnRzW3BvaW50c0xlbmd0aF07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5n
dGg7IGkrKykKKyAgICAgICAgYlBvaW50c1tpXSA9IHBvaW50c1tpXTsKKworICAgIG1fZGF0YS0+
bV92aWV3LT5GaWxsUG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgpOworICAgIGlmIChzdHJv
a2VTdHlsZSgpICE9IE5vU3Ryb2tlKQorICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IK
KyAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVu
Z3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmdiX2NvbG9yIG9sZENvbG9yID0gbV9kYXRhLT5tX3ZpZXctPkhpZ2hDb2xvcigpOworICAgIG1f
ZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+bV92aWV3LT5G
aWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKG9sZENvbG9y
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNv
bnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3Iu
YWxwaGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAv
LyBGSVhNRTogQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gY291bGQganVzdCB1c2UgRmlsbFJvdW5k
UmVjdCBpZiBhbGwgCisgICAgLy8gdGhlIHNpemVzIGFyZSB0aGUgc2FtZSwgb3IgZXZlbiBpZiB0
aGV5IGFyZSBub3QuIE90aGVyd2lzZSBzZXZlcmFsCisgICAgLy8gRmlsbFJlY3QgYW5kIEZpbGxB
cmMgY2FsbHMgYXJlIG5lZWRlZC4KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QYXRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBCUmVnaW9uIHJlZ2lvbihyZWN0KTsKKyAgICAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0Pwor
ICAgIC8vIHN5bGxhYmxlIGFkZHM6CisgICAgLy8gY1JlY3QgKz0gbV9kYXRhLT5wKCktPkdldFNj
cm9sbE9mZnNldCgpOyB0byB0aGUgcmVjdCBiZWZvcmUKKyAgICAvLyBjcmVhdGluZyB0aGUgcmVn
aW9uLgorICAgIG1fZGF0YS0+bV92aWV3LT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9u
KTsKK30KKwordm9pZCBzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkp
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gZm9jdXNSaW5nUmVjdHMoKTsK
KyAgICB1bnNpZ25lZCByZWN0Q291bnQgPSByZWN0cy5zaXplKCk7CisKKyAgICAvLyBGSVhNRTog
bWF5YmUgd2Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIHdpdGggQlNoYXBlPworCisgICAgaWYgKHJl
Y3RzLnNpemUoKSA+IDEpIHsKKyAgICAgICAgQlJlZ2lvbiAgICByZWdpb247CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kpCisgICAgICAgICAgICByZWdpb24uSW5j
bHVkZShCUmVjdChyZWN0c1tpXSkpOworCisgICAgICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdo
Q29sb3IoY29sb3IpOworICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVjdChyZWdpb24u
RnJhbWUoKSwgQl9NSVhFRF9DT0xPUlMpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBpbnQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgSW50UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAw
KTsKKyAgICBkcmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoY29uc3QgSW50UG9pbnQm
LCBpbnQgd2lkdGgsIGJvb2wgZ3JhbW1hcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiByZWN0OworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCB3aWR0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmbG9hdCBvbGRTaXplID0gbV9kYXRhLT5tX3ZpZXctPlBlblNpemUoKTsKKyAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0UGVuU2l6ZSh3aWR0aCk7CisgICAgbV9kYXRhLT5tX3ZpZXct
PlN0cm9rZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPm1f
dmlldy0+U2V0UGVuU2l6ZShvbGRTaXplKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGNhcF9tb2RlIG1vZGUgPSBCX0JVVFRfQ0FQOworICAg
IHN3aXRjaCAobGluZUNhcCkgeworICAgIGNhc2UgUm91bmRDYXA6CisgICAgICAgIG1vZGUgPSBC
X1JPVU5EX0NBUDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAg
IG1vZGUgPSBCX1NRVUFSRV9DQVA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0dENhcDoK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2RhdGEtPm1fdmll
dy0+U2V0TGluZU1vZGUobW9kZSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBtX2Rh
dGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBqb2luX21vZGUgbW9kZSA9IEJfTUlURVJf
Sk9JTjsKKyAgICBzd2l0Y2ggKGxpbmVKb2luKSB7CisgICAgY2FzZSBSb3VuZEpvaW46CisgICAg
ICAgIG1vZGUgPSBCX1JPVU5EX0pPSU47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmV2ZWxK
b2luOgorICAgICAgICBtb2RlID0gQl9CRVZFTF9KT0lOOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE1pdGVySm9pbjoKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0TGluZU1vZGUobV9kYXRhLT5tX3ZpZXctPkxpbmVDYXBNb2Rl
KCksIG1vZGUsIG1fZGF0YS0+bV92aWV3LT5MaW5lTWl0ZXJMaW1pdCgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXct
PlNldExpbmVNb2RlKG1fZGF0YS0+bV92aWV3LT5MaW5lQ2FwTW9kZSgpLCBtX2RhdGEtPm1fdmll
dy0+TGluZUpvaW5Nb2RlKCksIGxpbWl0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEFscGhhKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3
aW5nX21vZGUgbW9kZSA9IEJfT1BfQ09QWTsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBD
b21wb3NpdGVDbGVhcjoKKyAgICBjYXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIC8vIFVzZSB0
aGUgZGVmYXVsdCBhYm92ZQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJj
ZU92ZXI6CisgICAgICAgIG1vZGUgPSBCX09QX09WRVI7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVy
YXRpb246IFVuc3VwcG9ydGVkIGNvbXBvc2l0ZSBvcGVyYXRpb24gJXNcbiIsCisgICAgICAgICAg
ICAgICAgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9Cisg
ICAgbV9kYXRhLT5tX3ZpZXctPlNldERyYXdpbmdNb2RlKG1vZGUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5Db25zdHJh
aW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Ry
YW5zZm9ybWF0aW9uTWF0cml4IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRS
ZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmIGxpbmssIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBtX2RhdGEtPm1f
dmlldy0+U2V0Rm9udChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKK30KKwor
cGF0dGVybiBHcmFwaGljc0NvbnRleHQ6OmdldEhhaWt1U3Ryb2tlU3R5bGUoKQoreworICAgIHN3
aXRjaCAoc3Ryb2tlU3R5bGUoKSkgeworICAgIGNhc2UgU29saWRTdHJva2U6CisgICAgICAgIHJl
dHVybiBCX1NPTElEX0hJR0g7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG90dGVkU3Ryb2tl
OgorICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRGFzaGVkU3Ryb2tlOgorICAgICAgICAvLyBGSVhNRTogdXNlIGEgYmV0dGVyIGRhc2hlZCBz
dHJva2UhCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBCX01JWEVE
X0NPTE9SUzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEJf
U09MSURfTE9XOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBzdHJva2VTdHls
ZSkKK3sKKyAgICAvLyBGSVhNRTogc2VlIGdldEhhaWt1U3Ryb2tlU3R5bGUuCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+U2V0UGVuU2l6ZSh0aGlj
a25lc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENvbG9yIGNvbnN0JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kOTQ3MGM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSWNvbi5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNvbjo6SWNvbigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSWNvbjo6fkljb24oKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ltYWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWM5
ZTAyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9J
bWFnZUJ1ZmZlckRhdGEuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKKyNkZWZpbmUg
SW1hZ2VCdWZmZXJEYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBJbnRTaXplOworCisgICAgY2xhc3MgSW1hZ2VCdWZm
ZXJEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRT
aXplJik7CisgICAgfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBJ
bWFnZUJ1ZmZlckRhdGFfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40OGUzZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VC
dWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpCit7Cit9CisKK0ltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiwgYm9vbCBncmF5U2NhbGUsIGJvb2wm
IHN1Y2Nlc3MpCisgICAgOiBtX2RhdGEoSW50U2l6ZSgpKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgc3VjY2VzcyA9IGZhbHNlOworfQorCitJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVy
KCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEltYWdl
QnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworSW1hZ2UqIEltYWdlQnVmZmVyOjpp
bWFnZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9JbWFnZUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yMzY2Mjk3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9JbWFnZUhhaWt1LmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lt
b24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9u
Lmg+CisjaW5jbHVkZSA8Qml0bWFwLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisjaW5jbHVkZSA8
bWF0aC5oPgorCisKKy8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0
CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0
YWRhdGEpCit7CisgICAgaWYgKGNsZWFyTWV0YWRhdGEpCisgICAgICAgIG1faGF2ZU1ldGFkYXRh
ID0gZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICAvLyBGSVhNRTogTm90IHN1
cmUgd2h5IGJlX2FwcCBpcyBjaGVja2VkCisgICAgICAgIGlmIChiZV9hcHApCisgICAgICAgICAg
ICBkZWxldGUgbV9mcmFtZTsKKyAgICAgICAgbV9mcmFtZSA9IDA7CisgICAgICAgIG1fZHVyYXRp
b24gPSAwLjBmOworICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitXVEY6OlBhc3NSZWZQdHI8SW1h
Z2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IFZlY3RvcjxjaGFyPiBhcnJheSA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAgICBX
VEY6OlBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICBpbWFnZS0+c2V0RGF0YShidWZmZXIs
IHRydWUpOworICAgIHJldHVybiBpbWFnZTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW5pdFBs
YXRmb3JtRGF0YSgpCit7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9y
bURhdGEoKQoreworfQorCisvLyBEcmF3aW5nIFJvdXRpbmVzCit2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBCQml0bWFwKiBpbWFn
ZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYg
dGhlIGltYWdlIGhhc24ndCBmdWxseSBsb2FkZWQuCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3Io
Y3R4dCwgZHN0LCBzb2xpZENvbG9yKCksIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEludFNpemUgc2VsZlNpemUgPSBzaXplKCk7CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAg
ICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIHN1cHBvcnQgYWxsIHRoZSBjb21wb3NpdGUgbW9kZXMgOgorICAgIC8vIGNvbnRleHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisKKyAgICBCVmlldyogdmlldyA9IGN0eHQtPnBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgQlJlY3Qgc3JjUmVjdChzcmMpOworICAgIC8vIFRlc3QgdXNp
bmcgZXhhbXBsZSBzaXRlIGF0CisgICAgLy8gaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9j
c3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRtbAorICAgIHZpZXctPlNldERyYXdpbmdNb2Rl
KEJfT1BfQUxQSEEpOworICAgIHZpZXctPkRyYXdCaXRtYXAoaW1hZ2UsIHNyY1JlY3QgJiBpbWFn
ZS0+Qm91bmRzKCksIGRzdCk7CisKKyAgICBjdHh0LT5yZXN0b3JlKCk7CisKKyAgICBzdGFydEFu
aW1hdGlvbigpOworfQorCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3sKKyAgICAvLyBG
SVhNRTogZmluaXNoIHRoaXMgdG8gc3VwcG9ydCBhbHNvIHBoYXNlZCBwb3NpdGlvbiAoc3JjUG9p
bnQpCisKKyAgICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBp
bWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IGN1cnJlbnRXID0gMDsKKyAg
ICBmbG9hdCBjdXJyZW50SCA9IDA7CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+U2V0RHJhd2luZ01vZGUoQl9PUF9BTFBIQSk7CisKKyAg
ICBjb250ZXh0LT5jbGlwKGVuY2xvc2luZ0ludFJlY3QoZHN0UmVjdCkpOworCisgICAgd2hpbGUg
KGN1cnJlbnRXIDwgZHN0UmVjdC53aWR0aCgpKSB7CisgICAgICAgIHdoaWxlIChjdXJyZW50SCA8
IGRzdFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5EcmF3Qml0bWFwKGltYWdlLCBCUG9pbnQoZHN0UmVjdC54KCkgKyBjdXJyZW50VywgZHN0
UmVjdC55KCkgKyBjdXJyZW50SCkpOworICAgICAgICAgICAgY3VycmVudEggKz0gdGlsZVJlY3Qu
aGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFcgKz0gdGlsZVJlY3Qud2lkdGgo
KTsKKyAgICAgICAgY3VycmVudEggPSAwOworICAgIH0KKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7
CisKKyAgICBzdGFydEFuaW1hdGlvbigpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IoKQoreworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGNoZWNrIHRoZSBSR0JBMzIg
YnVmZmVyIHRvIHNlZSBpZiBpdCBpcyAxeDEuCisgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsK
K30KKworQkJpdG1hcCogQml0bWFwSW1hZ2U6OmdldEJpdG1hcCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8Qml0bWFwSW1hZ2UqPih0aGlzKS0+ZnJhbWVBdEluZGV4KDApOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VTb3VyY2VIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjBmMWY1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwCkBAIC0wLDAgKzEsMjE3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgICA8YW5kcmVhLmFuemFu
aUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKworI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlRyYW5z
bGF0b3JEZWNvZGVyLmgiCisjaW5jbHVkZSAiUE5HSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAi
Qk1QSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVk
ZSAiWEJNSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lu
Y2x1ZGUgPEJpdG1hcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHVzZSB0aGUgSGFpa3UgdHJhbnNsYXRvciBBUEkKK0ltYWdlRGVjb2RlciogY3Jl
YXRlRGVjb2Rlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgLy8gV2UgbmVlZCBh
dCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRl
YWxpbmcgd2l0aC4KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7CisgICAgaWYgKGxlbmd0
aCA8IDQpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogdUNv
bnRlbnRzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YS5kYXRh
KCkpOworICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBH
SUZzIGJlZ2luIHdpdGggR0lGOCg3IG9yIDkpLgorICAgIGlmICghc3RybmNtcChjb250ZW50cywg
IkdJRjgiLCA0KSkKKyAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKKworICAg
IC8vIFRlc3QgZm9yIFBORy4KKyAgICBpZiAodUNvbnRlbnRzWzBdID09IDB4ODkKKyAgICAgICAg
JiYgdUNvbnRlbnRzWzFdID09IDB4NTAKKyAgICAgICAgJiYgdUNvbnRlbnRzWzJdID09IDB4NEUK
KyAgICAgICAgJiYgdUNvbnRlbnRzWzNdID09IDB4NDcpCisgICAgICAgIHJldHVybiBuZXcgUE5H
SW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IEpQRUcgc3VwcG9ydAor
ICAgIC8vIGlmICh1Q29udGVudHNbMF0gPT0gMHhGRgorICAgIC8vICAgICAmJiB1Q29udGVudHNb
MV0gPT0gMHhEOAorICAgIC8vICAgICAmJiB1Q29udGVudHNbMl0gPT0gMHhGRikKKyAgICAvLyAg
ICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBCTVAKKyAgICBpZiAo
c3RybmNtcChjb250ZW50cywgIkJNIiwgMikpCisgICAgICAgIHJldHVybiBuZXcgQk1QSW1hZ2VE
ZWNvZGVyKCk7CisKKyAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9s
bG93ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9s
bG93ZWQgYnkgMi1ieXRlIDIuCisgICAgLy8gaWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAw
MFwwMDFcMDAwIiwgNCkKKyAgICAvLyAgICAgfHwgIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAw
XDAwMlwwMDAiLCA0KSkKKyAgICAvLyAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsK
KworICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCisgICAgaWYgKGxlbmd0aCA+
PSA4ICYmICFzdHJuY21wKGNvbnRlbnRzLCAiI2RlZmluZSAiLCA4KSkKKyAgICAgICAgcmV0dXJu
IG5ldyBYQk1JbWFnZURlY29kZXIoKTsKKworICAgIHByaW50ZigiSW52YWxpZCBpbWFnZSFcbiIp
OworICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgor
ICAgIHJldHVybiAwOworfQorCitJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoKQorICAgIDogbV9k
ZWNvZGVyKDApCit7Cit9CisKK0ltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQoreworICAgIGNs
ZWFyKHRydWUpOworfQorCit2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGws
IHNpemVfdCBjbGVhckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIGRlbGV0ZSBtX2RlY29kZXI7CisgICAgbV9kZWNvZGVyID0gMDsK
K30KKworYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RlY29kZXI7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBNYWtlIHRoZSBkZWNvZGVy
IGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KKyAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUg
dGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBk
ZWNvZGVyIHBsdWdpbi4KKyAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJs
ZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwgYmUK
KyAgICAvLyBtYWRlLgorICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXIgPSBj
cmVhdGVEZWNvZGVyKGRhdGEtPmJ1ZmZlcigpKTsKKworICAgIGlmICghbV9kZWNvZGVyKQorICAg
ICAgICByZXR1cm47CisgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSgpCit7CisgICAgaWYg
KCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2RlY29k
ZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsK
KworICAgIHJldHVybiBtX2RlY29kZXItPnNpemUoKTsKK30KKworSW50U2l6ZSBJbWFnZVNvdXJj
ZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemUoKTsK
K30KKworaW50IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQoKQoreworICAgIGlmICghbV9k
ZWNvZGVyKQorICAgICAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7CisKKyAgICByZXR1cm4gbV9k
ZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKK30KKworU3RyaW5nIEltYWdlU291cmNlOjpmaWxl
bmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpIDogMDsK
K30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXpl
X3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChp
bmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJ1ZmZlci0+
YXNOZXdOYXRpdmVJbWFnZSgpOworfQorCitib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0
YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZTsKK30KKworZmxvYXQgSW1hZ2VT
b3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1f
ZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9
IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8
fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKK30K
KworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQor
eworICAgIGlmICghbV9kZWNvZGVyIHx8ICFtX2RlY29kZXItPnN1cHBvcnRzQWxwaGEoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVy
LT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBidWZmZXItPmhhc0FscGhhKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbnRQb2ludEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50
UG9pbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3ZTUw
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50
UG9pbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFBv
aW50LmgiCisKKyNpbmNsdWRlIDxQb2ludC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEJQb2ludCYgcG9pbnQpCisgICAgOiBtX3goc3RhdGlj
X2Nhc3Q8aW50Pihwb2ludC54KSkKKyAgICAsIG1feShzdGF0aWNfY2FzdDxpbnQ+KHBvaW50Lnkp
KQoreworfQorCitJbnRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQlBvaW50KG1feCwgbV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhYzQxNAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcApAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVh
dmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8UmVj
dC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UmVjdDo6SW50UmVjdChjb25zdCBC
UmVjdCYgcmVjdCkKKyAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCisgICAgLCBtX3Np
emUocmVjdC5JbnRlZ2VyV2lkdGgoKSArIDEsIHJlY3QuSW50ZWdlckhlaWdodCgpICsgMSkKK3sK
K30KKworSW50UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBz
dWJ0cmFjdCAxIGZyb20gaGVpZ2h0IGFuZCB3aWR0aD8KKyAgICByZXR1cm4gQlJlY3QoQlBvaW50
KHgoKSwgeSgpKSwgQlNpemUod2lkdGgoKSwgaGVpZ2h0KCkpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ludFNpemVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNp
emVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjM2E5ZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6
ZUhhaWt1LmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorCisjaW5jbHVkZSA8U2l6ZS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6
ZTo6SW50U2l6ZShjb25zdCBCU2l6ZSYgc2l6ZSkKKyAgICA6IG1fd2lkdGgoc2l6ZS5JbnRlZ2Vy
V2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0KHNpemUuSW50ZWdlckhlaWdodCgpKQoreworfQorCitJ
bnRTaXplOjpvcGVyYXRvciBCU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJTaXplKHdpZHRo
KCksIGhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDNjMTk4OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPFJlZ2lvbi5oPgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGF0aDo6UGF0aCgpCisgICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKSkKK3sKK30K
KworUGF0aDo6flBhdGgoKQoreworICAgIGRlbGV0ZSBtX3BhdGg7Cit9CisKK1BhdGg6OlBhdGgo
Y29uc3QgUGF0aCYgb3RoZXIpCisgICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKm90aGVyLnBsYXRm
b3JtUGF0aCgpKSkKK3sKK30KKworUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90
aGVyKQoreworICAgIGlmICgmb3RoZXIgIT0gdGhpcykKKyAgICAgICAgbV9wYXRoID0gb3RoZXIu
cGxhdGZvcm1QYXRoKCk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgUGF0aDo6aGFz
Q3VycmVudFBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWlzRW1wdHkoKTsKK30KKworYm9v
bCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5Db250YWlucyhwb2ludCk7Cit9CisKK3ZvaWQg
UGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wYXRoLT5GcmFtZSgpOworfQorCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICAvLyBGSVhNRTogVXNlIE9mZnNldEJ5PworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRRdWFk
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29u
c3QgRmxvYXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9p
bnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRBcmNU
byhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1
cykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmNsb3NlU3VicGF0
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXRoOjphZGRBcmMoY29u
c3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50
aWNsb2Nrd2lzZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmFk
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQoreworICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKK30K
Kwordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmNsZWFyKCkKK3sKKyAgICBtX3BhdGgtPk1h
a2VFbXB0eSgpOworfQorCitib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVy
biAhbV9wYXRoLT5GcmFtZSgpLklzVmFsaWQoKTsKK30KKworU3RyaW5nIFBhdGg6OmRlYnVnU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKwordm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllckZ1bmN0aW9u
IGZ1bmN0aW9uKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0
aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5n
UmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwotLSAKMS42LjMuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33042</attachid>
            <date>2009-07-19 05:54:51 -0700</date>
            <delta_ts>2009-08-07 11:13:23 -0700</delta_ts>
            <desc>Patch to add Haiku-specific drawing files for WebCore/platform/graphics/.</desc>
            <filename>Added-Haiku-specific-drawing-files-for-WebCore-platf.patch</filename>
            <type>text/plain</type>
            <size>59091</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3Y2RmZWRhNWQ3ODkxZTk4OTdmNzhmNGZkNzNkMWNiNDZhZWM1NWNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFN1biwgMTkgSnVsIDIwMDkgMTQ6NDg6NTIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBIYWlrdS1zcGVjaWZpYyBkcmF3aW5nIGZpbGVzIGZvciBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzLy4KCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTUxICsrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCAgICAgfCAgIDU0ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRQb2ludEhhaWt1LmNwcCAgICB8ICAgNDggKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwIHwgICA0OCArKwogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCAgfCAgIDU0ICsrCiAuLi4vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwICAgICAgICB8ICA1NDggKysrKysrKysrKysr
KysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCAg
ICAgIHwgICA2MyArKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZm
ZXJEYXRhLmggIHwgICA0NiArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVm
ZmVySGFpa3UuY3BwICAgfCAgIDgxICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9JbWFnZUhhaWt1LmNwcCAgICAgfCAgMTY1ICsrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3BwICAgfCAgMjIwICsrKysrKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFBvaW50SGFpa3UuY3BwICB8ICAgNDggKysKIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcCAgIHwgICA0OSArKwog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRTaXplSGFpa3UuY3BwICAgfCAgIDQ4
ICsrCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAgICAgICB8
ICAxNjQgKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzg3IGluc2VydGlvbnMoKyksIDAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Db2xvckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9JY29uSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlr
dS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNp
emVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L1BhdGhIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk0MjBlNjUuLjk5NTAyOTggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU0IEBACisy
MDA5LTA3LTE5ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhhaWt1LXNw
ZWNpZmljIGRyYXdpbmcgZmlsZXMgZm9yIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NDkKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0NvbG9ySGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
b3BlcmF0b3IgcmdiX2NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRSZWN0OjpGbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRS
ZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhZGllbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxs
aXBzZUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVy
Um91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRIYWlrdVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbml0UGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRC
aXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZVNp
emVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50UG9pbnQ6OkludFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50OjpvcGVy
YXRvciBCUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50UmVjdDo6SW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRSZWN0OjpvcGVyYXRvciBCUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRTaXplOjpJbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6Om9w
ZXJhdG9yIEJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6flBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0N1cnJlbnRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8p
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjph
ZGRBcmNUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6YWRkQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0VtcHR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
dGg6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QpOgorCiAyMDA5LTA3LTE2ICBGdW1p
dG9zaGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9D
b2xvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4MjlkNgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvQ29sb3JIYWlrdS5j
cHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisKKyNpbmNs
dWRlIDxJbnRlcmZhY2VEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb2xvcjo6
Q29sb3IoY29uc3QgcmdiX2NvbG9yJiBjb2xvcikKKyAgICA6IG1fY29sb3IobWFrZVJHQkEoY29s
b3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSwgY29sb3IuYWxwaGEpKQoreworICAgIG1f
dmFsaWQgPSB0cnVlOworfQorCitDb2xvcjo6b3BlcmF0b3IgcmdiX2NvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbWFrZV9jb2xvcihyZWQoKSwgZ3JlZW4oKSwgYmx1ZSgpLCBhbHBoYSgpKTsK
K30KKworCitDb2xvciBmb2N1c1JpbmdDb2xvcigpCit7CisgICAgcmV0dXJuIENvbG9yKGtleWJv
YXJkX25hdmlnYXRpb25fY29sb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNTA4OTgKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlr
dS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KworI2luY2x1ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFBv
aW50OjpGbG9hdFBvaW50KGNvbnN0IEJQb2ludCYgcG9pbnQpCisgICAgOiBtX3gocG9pbnQueCkK
KyAgICAsIG1feShwb2ludC55KQoreworfQorCitGbG9hdFBvaW50OjpvcGVyYXRvciBCUG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRmxvYXRSZWN0SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9G
bG9hdFJlY3RIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUx
ZDJhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
RmxvYXRSZWN0SGFpa3UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEJSZWN0JiByZWN0KQorICAgIDogbV9sb2Nh
dGlvbihyZWN0LkxlZnRUb3AoKSkKKyAgICAsIG1fc2l6ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0
LkhlaWdodCgpICsgMSkKK3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCksIGhl
aWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkODlhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9s
bGl2aWVycy5jb20+ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQHRoZW9sbGl2aWVycy5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiQ1NT
UGFyc2VyLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdy
YWRpZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4
dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250
ZXh0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzAzNzAK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcApAQCAtMCwwICsxLDU0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVk
ZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBlbi5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8R3JhcGhp
Y3NEZWZzLmg+CisKKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5j
bHVkZSA8UmVnaW9uLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKK3B1YmxpYzoK
KyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcpOworICAgIH5H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKKworICAgIEJWaWV3KiBtX3ZpZXc7Cit9
OworCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShCVmlldyogdmlldykKK3sKKyAgICBtX3ZpZXcgPSB2aWV3OworfQorCitHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUoKQoreworfQorCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fY29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29u
dGV4dFByaXZhdGUoKSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKGNvbnRleHQpKQoreworICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOwor
fQorCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQoreworICAgIGRlc3Ryb3lH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fY29tbW9uKTsKKyAgICBkZWxldGUgbV9kYXRhOworfQor
CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPm1fdmlldzsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEtPm1fdmlldy0+
UHVzaFN0YXRlKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1T
dGF0ZSgpCit7CisgICAgbV9kYXRhLT5tX3ZpZXctPlBvcFN0YXRlKCk7Cit9CisKKy8vIERyYXdz
IGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+Rmls
bFJlY3QocmVjdCk7CisgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCisgICAgICAg
IG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7
Cit9CisKKy8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnQyKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFp
a3VTdHJva2VTdHlsZSgpKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRy
YXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+RmlsbEVs
bGlwc2UocmVjdCk7CisgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCisgICAgICAg
IG1fZGF0YS0+bV92aWV3LT5TdHJva2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYg
cmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9r
ZUFyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24o
c2l6ZV90IHBvaW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3Vs
ZEFudGlhbGlhcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBCUG9pbnQgYlBvaW50c1twb2ludHNMZW5ndGhdOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcG9pbnRzTGVuZ3RoOyBpKyspCisgICAgICAgIGJQb2ludHNbaV0gPSBwb2lu
dHNbaV07CisKKyAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFBvbHlnb24oYlBvaW50cywgcG9pbnRz
TGVuZ3RoKTsKKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKKyAgICAgICAgLy8g
U3Ryb2tlIHdpdGggbG93IGNvbG9yCisgICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VQb2x5
Z29uKGJQb2ludHMsIHBvaW50c0xlbmd0aCwgdHJ1ZSwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+bV92aWV3
LT5IaWdoQ29sb3IoKTsKKyAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsK
KyAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT5tX3ZpZXct
PlNldEhpZ2hDb2xvcihvbGRDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0
IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRT
aXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0aW9uIGNv
dWxkIGp1c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsIAorICAgIC8vIHRoZSBzaXplcyBhcmUg
dGhlIHNhbWUsIG9yIGV2ZW4gaWYgdGhleSBhcmUgbm90LiBPdGhlcndpc2Ugc2V2ZXJhbAorICAg
IC8vIEZpbGxSZWN0IGFuZCBGaWxsQXJjIGNhbGxzIGFyZSBuZWVkZWQuCit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7CisgICAgLy8gRklY
TUU6IElzIHRoaXMgY29ycmVjdD8KKyAgICAvLyBzeWxsYWJsZSBhZGRzOgorICAgIC8vIGNSZWN0
ICs9IG1fZGF0YS0+cCgpLT5HZXRTY3JvbGxPZmZzZXQoKTsgdG8gdGhlIHJlY3QgYmVmb3JlCisg
ICAgLy8gY3JlYXRpbmcgdGhlIHJlZ2lvbi4KKyAgICBtX2RhdGEtPm1fdmlldy0+Q29uc3RyYWlu
Q2xpcHBpbmdSZWdpb24oJnJlZ2lvbik7Cit9CisKK3ZvaWQgc2V0Rm9jdXNSaW5nQ29sb3JDaGFu
Z2VGdW5jdGlvbih2b2lkICgqKSgpKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0
cyA9IGZvY3VzUmluZ1JlY3RzKCk7CisgICAgdW5zaWduZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6
ZSgpOworCisgICAgLy8gRklYTUU6IG1heWJlIHdlIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRo
IEJTaGFwZT8KKworICAgIGlmIChyZWN0cy5zaXplKCkgPiAxKSB7CisgICAgICAgIEJSZWdpb24g
ICAgcmVnaW9uOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQor
ICAgICAgICAgICAgcmVnaW9uLkluY2x1ZGUoQlJlY3QocmVjdHNbaV0pKTsKKworICAgICAgICBt
X2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICAgICAgbV9kYXRhLT5tX3Zp
ZXctPlN0cm9rZVJlY3QocmVnaW9uLkZyYW1lKCksIEJfTUlYRURfQ09MT1JTKTsKKyAgICB9Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQm
IG9yaWdpbiwgaW50IHdpZHRoLCBib29sIHByaW50aW5nKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IGVuZFBvaW50ID0gb3Jp
Z2luICsgSW50U2l6ZSh3aWR0aCwgMCk7CisgICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2ludCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nT3JCYWRH
cmFtbWFyKGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoLCBib29sIGdyYW1tYXIpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+
bV92aWV3LT5QZW5TaXplKCk7CisgICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUod2lkdGgp
OworICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5
bGUoKSk7CisgICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUob2xkU2l6ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYXBfbW9kZSBt
b2RlID0gQl9CVVRUX0NBUDsKKyAgICBzd2l0Y2ggKGxpbmVDYXApIHsKKyAgICBjYXNlIFJvdW5k
Q2FwOgorICAgICAgICBtb2RlID0gQl9ST1VORF9DQVA7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU3F1YXJlQ2FwOgorICAgICAgICBtb2RlID0gQl9TUVVBUkVfQ0FQOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+bV92aWV3
LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxpbWl0KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgam9p
bl9tb2RlIG1vZGUgPSBCX01JVEVSX0pPSU47CisgICAgc3dpdGNoIChsaW5lSm9pbikgeworICAg
IGNhc2UgUm91bmRKb2luOgorICAgICAgICBtb2RlID0gQl9ST1VORF9KT0lOOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEJldmVsSm9pbjoKKyAgICAgICAgbW9kZSA9IEJfQkVWRUxfSk9JTjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNaXRlckpvaW46CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1fZGF0
YS0+bV92aWV3LT5MaW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVy
TGltaXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0
IGxpbWl0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPm1fdmlldy0+TGluZUNh
cE1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBsaW1pdCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBvcGFjaXR5KQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZHJhd2luZ19tb2RlIG1vZGUgPSBCX09QX0NPUFk7CisgICAgc3dp
dGNoIChvcCkgeworICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6CisgICAgY2FzZSBDb21wb3NpdGVD
b3B5OgorICAgICAgICAvLyBVc2UgdGhlIGRlZmF1bHQgYWJvdmUKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgorICAgICAgICBtb2RlID0gQl9PUF9PVkVSOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29u
dGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uOiBVbnN1cHBvcnRlZCBjb21wb3NpdGUgb3BlcmF0
aW9uICVzXG4iLAorICAgICAgICAgICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCkudXRm
OCgpLmRhdGEoKSk7CisgICAgfQorICAgIG1fZGF0YS0+bV92aWV3LT5TZXREcmF3aW5nTW9kZSht
b2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2RhdGEtPm1fdmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdpb24ocGF0aC5wbGF0Zm9ybVBhdGgo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6
OmdldENUTSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gVHJh
bnNmb3JtYXRpb25NYXRyaXgoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0ludFBvaW50IEdyYXBo
aWNzQ29udGV4dDo6b3JpZ2luKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBJbnRQb2ludCgwLCAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9h
dCByYWRpYW5zKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVsbGlwc2VJblJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRo
aWNrbmVzcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFs
aWFzKGJvb2wgZW5hYmxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBLVVJMJiBs
aW5rLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQmIGZv
bnQpCit7CisgICAgbV9kYXRhLT5tX3ZpZXctPlNldEZvbnQoZm9udC5wcmltYXJ5Rm9udCgpLT5w
bGF0Zm9ybURhdGEoKS5mb250KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5tX3ZpZXctPlNldEhp
Z2hDb2xvcihjb2xvcik7Cit9CisKK3BhdHRlcm4gR3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0
cm9rZVN0eWxlKCkKK3sKKyAgICBzd2l0Y2ggKHN0cm9rZVN0eWxlKCkpIHsKKyAgICBjYXNlIFNv
bGlkU3Ryb2tlOgorICAgICAgICByZXR1cm4gQl9TT0xJRF9ISUdIOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIERvdHRlZFN0cm9rZToKKyAgICAgICAgcmV0dXJuIEJfTUlYRURfQ09MT1JTOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIERhc2hlZFN0cm9rZToKKyAgICAgICAgLy8gRklYTUU6
IHVzZSBhIGJldHRlciBkYXNoZWQgc3Ryb2tlIQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgICAgICByZXR1cm4gQl9NSVhFRF9DT0xPUlM7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBCX1NPTElEX0xPVzsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShjb25zdCBT
dHJva2VTdHlsZSYgc3Ryb2tlU3R5bGUpCit7CisgICAgLy8gRklYTUU6IHNlZSBnZXRIYWlrdVN0
cm9rZVN0eWxlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5t
X3ZpZXctPlNldFBlblNpemUodGhpY2tuZXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPm1fdmlldy0+
U2V0SGlnaENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxh
dGZvcm1TaGFkb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhJbnRTaXplIGNvbnN0JiwgaW50LCBDb2xvciBj
b25zdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25I
YWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0NzBjOAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkljb24uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ljb246Okljb24oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0ljb246On5J
Y29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPEljb24+IElj
b246OmNyZWF0ZUljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJY29uPiBJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEljb246OnBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckRhdGEuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMDVjOWUwMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhLmgKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEltYWdl
QnVmZmVyRGF0YV9oCisjZGVmaW5lIEltYWdlQnVmZmVyRGF0YV9oCisKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgSW50U2l6ZTsK
KworICAgIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBJbWFn
ZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOworICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAgLy8gSW1hZ2VCdWZmZXJEYXRhX2gKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlM2VlOAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKQEAgLTAs
MCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9u
Lm1heGltZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IElu
dFNpemUmKQoreworfQorCitJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYs
IGJvb2wgZ3JheVNjYWxlLCBib29sJiBzdWNjZXNzKQorICAgIDogbV9kYXRhKEludFNpemUoKSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN1Y2Nlc3MgPSBmYWxzZTsKK30KKworSW1h
Z2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dCogSW1hZ2VC
dWZmZXI6OmNvbnRleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEq
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K0ltYWdlKiBJbWFnZUJ1ZmZlcjo6aW1hZ2UoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NjI5NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKQEAgLTAsMCArMSwxNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
KyNpbmNsdWRlIDxBcHBsaWNhdGlvbi5oPgorI2luY2x1ZGUgPEJpdG1hcC5oPgorI2luY2x1ZGUg
PFZpZXcuaD4KKworI2luY2x1ZGUgPG1hdGguaD4KKworCisvLyBUaGlzIGZ1bmN0aW9uIGxvYWRz
IHJlc291cmNlcyBmcm9tIFdlYktpdAorVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJh
eShjb25zdCBjaGFyKik7CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEZyYW1lRGF0
YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQoreworICAgIGlmIChjbGVhck1ldGFkYXRhKQor
ICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOworCisgICAgaWYgKG1fZnJhbWUpIHsKKyAg
ICAgICAgLy8gRklYTUU6IE5vdCBzdXJlIHdoeSBiZV9hcHAgaXMgY2hlY2tlZAorICAgICAgICBp
ZiAoYmVfYXBwKQorICAgICAgICAgICAgZGVsZXRlIG1fZnJhbWU7CisgICAgICAgIG1fZnJhbWUg
PSAwOworICAgICAgICBtX2R1cmF0aW9uID0gMC4wZjsKKyAgICAgICAgbV9oYXNBbHBoYSA9IHRy
dWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworV1RGOjpQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYXJyYXkgPSBsb2FkUmVzb3VyY2VJ
bnRvQXJyYXkobmFtZSk7CisgICAgV1RGOjpQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBpbWFnZSA9
IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAg
aW1hZ2UtPnNldERhdGEoYnVmZmVyLCB0cnVlKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3Zv
aWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQoreworfQorCit2b2lkIEJpdG1hcElt
YWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKK3sKK30KKworLy8gRHJhd2luZyBSb3V0aW5l
cwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
Cit7CisgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIGlmICghaW1hZ2UpIC8vIElmIHRoZSBpbWFnZSBoYXNuJ3QgZnVsbHkgbG9hZGVkLgorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKKyAgICAg
ICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdCwgc29saWRDb2xvcigpLCBvcCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRTaXplIHNlbGZTaXplID0gc2l6ZSgpOworCisg
ICAgY3R4dC0+c2F2ZSgpOworCisgICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24u
CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBzdXBwb3J0IGFsbCB0aGUgY29tcG9zaXRlIG1vZGVz
IDoKKyAgICAvLyBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgQlZp
ZXcqIHZpZXcgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIEJSZWN0IHNyY1JlY3Qo
c3JjKTsKKyAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdAorICAgIC8vIGh0dHA6Ly93
d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwKKyAg
ICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKyAgICB2aWV3LT5EcmF3Qml0bWFw
KGltYWdlLCBzcmNSZWN0ICYgaW1hZ2UtPkJvdW5kcygpLCBkc3QpOworCisgICAgY3R4dC0+cmVz
dG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsKK30KKwordm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgc3JjUG9pbnQsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QpCit7CisgICAgLy8gRklYTUU6IGZpbmlzaCB0aGlzIHRvIHN1cHBvcnQgYWxzbyBw
aGFzZWQgcG9zaXRpb24gKHNyY1BvaW50KQorCisgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVh
cmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdCBjdXJyZW50VyA9IDA7CisgICAgZmxvYXQgY3VycmVudEggPSAwOworCisgICAgY29udGV4
dC0+c2F2ZSgpOworCisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPlNldERyYXdpbmdN
b2RlKEJfT1BfQUxQSEEpOworCisgICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGRz
dFJlY3QpKTsKKworICAgIHdoaWxlIChjdXJyZW50VyA8IGRzdFJlY3Qud2lkdGgoKSkgeworICAg
ICAgICB3aGlsZSAoY3VycmVudEggPCBkc3RSZWN0LmhlaWdodCgpKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgQlBvaW50KGRzdFJl
Y3QueCgpICsgY3VycmVudFcsIGRzdFJlY3QueSgpICsgY3VycmVudEgpKTsKKyAgICAgICAgICAg
IGN1cnJlbnRIICs9IHRpbGVSZWN0LmhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIGN1cnJl
bnRXICs9IHRpbGVSZWN0LndpZHRoKCk7CisgICAgICAgIGN1cnJlbnRIID0gMDsKKyAgICB9Cisg
ICAgY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsKK30KKwordm9p
ZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKKyAgICAvLyBGSVhNRTogbmVl
ZCB0byBjaGVjayB0aGUgUkdCQTMyIGJ1ZmZlciB0byBzZWUgaWYgaXQgaXMgMXgxLgorICAgIG1f
aXNTb2xpZENvbG9yID0gZmFsc2U7Cit9CisKK0JCaXRtYXAqIEJpdG1hcEltYWdlOjpnZXRCaXRt
YXAoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PEJpdG1hcEltYWdlKj4odGhpcykt
PmZyYW1lQXRJbmRleCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlU291cmNlSGFpa3UuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjJmYThiCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZVNvdXJjZUhhaWt1LmNw
cApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEg
QW56YW5pICAgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlICJHSUZJbWFnZURlY29k
ZXIuaCIKKyNpbmNsdWRlICJUcmFuc2xhdG9yRGVjb2Rlci5oIgorI2luY2x1ZGUgIlBOR0ltYWdl
RGVjb2Rlci5oIgorI2luY2x1ZGUgIkJNUEltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIklDT0lt
YWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKworI2luY2x1ZGUgPHN0ZGlv
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHRoZSBIYWlrdSB0cmFuc2xhdG9yIEFQSQorSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNvZGVyKGNv
bnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0
ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZyB3aXRoLgor
ICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKKyAgICBpZiAobGVuZ3RoIDwgNCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1Q29udGVudHMgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhLmRhdGEoKSk7CisgICAgY29u
c3QgY2hhciogY29udGVudHMgPSBkYXRhLmRhdGEoKTsKKworICAgIC8vIEdJRnMgYmVnaW4gd2l0
aCBHSUY4KDcgb3IgOSkuCisgICAgaWYgKCFzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpKQor
ICAgICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcigpOworCisgICAgLy8gVGVzdCBmb3Ig
UE5HLgorICAgIGlmICh1Q29udGVudHNbMF0gPT0gMHg4OQorICAgICAgICAmJiB1Q29udGVudHNb
MV0gPT0gMHg1MAorICAgICAgICAmJiB1Q29udGVudHNbMl0gPT0gMHg0RQorICAgICAgICAmJiB1
Q29udGVudHNbM10gPT0gMHg0NykKKyAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIo
KTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgSlBFRyBzdXBwb3J0CisgICAgLy8gaWYgKHVD
b250ZW50c1swXSA9PSAweEZGCisgICAgLy8gICAgICYmIHVDb250ZW50c1sxXSA9PSAweEQ4Cisg
ICAgLy8gICAgICYmIHVDb250ZW50c1syXSA9PSAweEZGKQorICAgIC8vICAgICByZXR1cm4gbmV3
IEpQRUdJbWFnZURlY29kZXIoKTsKKworICAgIC8vIEJNUAorICAgIGlmIChzdHJuY21wKGNvbnRl
bnRzLCAiQk0iLCAyKSkKKyAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoKTsKKwor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgSUNPIHN1cHBvcnQKKyAgICAvLyBJQ09zIGFsd2F5cyBi
ZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAvLyBDVVJz
IGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCisgICAgLy8gaWYgKCFt
ZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDFcMDAwIiwgNCkKKyAgICAvLyAgICAgfHwgIW1l
bWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMlwwMDAiLCA0KSkKKyAgICAvLyAgICAgcmV0dXJu
IG5ldyBJQ09JbWFnZURlY29kZXIoKTsKKworICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9m
IGluZm8uCisgICAgaWYgKGxlbmd0aCA+PSA4ICYmICFzdHJuY21wKGNvbnRlbnRzLCAiI2RlZmlu
ZSAiLCA4KSkKKyAgICAgICAgcmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKKworICAgIHBy
aW50ZigiSW52YWxpZCBpbWFnZSFcbiIpOworICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtub3cg
d2hhdCB0aGUgaGVjayB0aGlzIGlzLgorICAgIHJldHVybiAwOworfQorCitJbWFnZVNvdXJjZTo6
SW1hZ2VTb3VyY2UoKQorICAgIDogbV9kZWNvZGVyKDApCit7Cit9CisKK0ltYWdlU291cmNlOjp+
SW1hZ2VTb3VyY2UoKQoreworICAgIGNsZWFyKHRydWUpOworfQorCit2b2lkIEltYWdlU291cmNl
OjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJlZm9yZUZyYW1lLCBTaGFyZWRC
dWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGRlbGV0ZSBtX2RlY29k
ZXI7CisgICAgbV9kZWNvZGVyID0gMDsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXI7Cit9CisKK3ZvaWQgSW1hZ2VTb3Vy
Y2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sK
KyAgICAvLyBNYWtlIHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KKyAgICAvLyBU
aGlzIG1ldGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3Rh
bmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KKyAgICAvLyBJZiBpbnN1ZmZp
Y2llbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5v
IGRlY29kZXIgcGx1Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRlLgorICAgIGlmICghbV9kZWNvZGVy
KQorICAgICAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVyKGRhdGEtPmJ1ZmZlcigpKTsKKwor
ICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9kZWNvZGVyLT5zZXRE
YXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmlzU2l6
ZUF2YWlsYWJsZSgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpOworfQorCitJbnRT
aXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBtX2RlY29kZXItPnNpemUoKTsK
K30KKworSW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChzaXplX3QpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHNpemUoKTsKK30KKworaW50IEltYWdlU291cmNlOjpyZXBldGl0aW9u
Q291bnQoKQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gY0FuaW1hdGlv
bk5vbmU7CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKK30KKwor
U3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3NpemVfdCBJbWFnZVNv
dXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVj
b2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVy
LT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIGJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpOworfQorCitib29sIElt
YWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBp
ZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUkdCQTMyQnVmZmVy
KiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0
dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZTsKK30KKworZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVf
dCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGlu
ZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZl
cjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVyLT5k
dXJhdGlvbigpIC8gMTAwMC4wZjsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyIHx8ICFtX2RlY29k
ZXItPnN1cHBvcnRzQWxwaGEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUkdCQTMy
QnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Cisg
ICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
RW1wdHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBidWZmZXItPmhhc0Fs
cGhhKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRQb2ludEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzI3ZTUwMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UG9pbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21h
aWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisKKyNpbmNsdWRlIDxQb2ludC5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IEJQb2ludCYg
cG9pbnQpCisgICAgOiBtX3goc3RhdGljX2Nhc3Q8aW50Pihwb2ludC54KSkKKyAgICAsIG1feShz
dGF0aWNfY2FzdDxpbnQ+KHBvaW50LnkpKQoreworfQorCitJbnRQb2ludDo6b3BlcmF0b3IgQlBv
aW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBvaW50KG1feCwgbV95KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0ludFJlY3RIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ludFJlY3RIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBh
YzQxNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
SW50UmVjdEhhaWt1LmNwcApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorCisjaW5jbHVkZSA8UmVjdC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW50UmVjdDo6SW50UmVjdChjb25zdCBCUmVjdCYgcmVjdCkKKyAgICA6IG1fbG9jYXRpb24ocmVj
dC5MZWZ0VG9wKCkpCisgICAgLCBtX3NpemUocmVjdC5JbnRlZ2VyV2lkdGgoKSArIDEsIHJlY3Qu
SW50ZWdlckhlaWdodCgpICsgMSkKK3sKK30KKworSW50UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBzdWJ0cmFjdCAxIGZyb20gaGVpZ2h0IGFuZCB3aWR0aD8K
KyAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUod2lkdGgoKSwgaGVpZ2h0
KCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ludFNpemVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDhjM2E5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSW50U2l6ZUhhaWt1LmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaW5jbHVkZSA8U2l6ZS5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZTo6SW50U2l6ZShjb25zdCBCU2l6ZSYgc2l6ZSkKKyAg
ICA6IG1fd2lkdGgoc2l6ZS5JbnRlZ2VyV2lkdGgoKSkKKyAgICAsIG1faGVpZ2h0KHNpemUuSW50
ZWdlckhlaWdodCgpKQoreworfQorCitJbnRTaXplOjpvcGVyYXRvciBCU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEJTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L1BhdGhIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjMTk4OAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNw
cApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKworI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPFJlZ2lv
bi5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGF0aDo6UGF0aCgpCisgICAgOiBtX3Bh
dGgobmV3IEJSZWdpb24oKSkKK3sKK30KKworUGF0aDo6flBhdGgoKQoreworICAgIGRlbGV0ZSBt
X3BhdGg7Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCisgICAgOiBtX3BhdGgo
bmV3IEJSZWdpb24oKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKK3sKK30KKworUGF0aCYgUGF0aDo6
b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQoreworICAgIGlmICgmb3RoZXIgIT0gdGhpcykK
KyAgICAgICAgbV9wYXRoID0gb3RoZXIucGxhdGZvcm1QYXRoKCk7CisKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK2Jvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIWlzRW1wdHkoKTsKK30KKworYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5Db250
YWlucyhwb2ludCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGbG9hdFJlY3QgUGF0aDo6Ym91
bmRpbmdSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5GcmFtZSgpOworfQorCit2
b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICAvLyBGSVhN
RTogVXNlIE9mZnNldEJ5PworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6
YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29u
c3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBh
dGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBv
aW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxv
YXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQg
c2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQoreworICAg
IG1fcGF0aC0+SW5jbHVkZShyKTsKK30KKwordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhdGg6OmNs
ZWFyKCkKK3sKKyAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOworfQorCitib29sIFBhdGg6OmlzRW1w
dHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9wYXRoLT5GcmFtZSgpLklzVmFsaWQoKTsKK30K
KworU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBQYXRoOjphcHBseSh2b2lkKiBp
bmZvLCBQYXRoQXBwbGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRS
ZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwotLSAKMS42LjMuMgoK
</data>
<flag name="review"
          id="17379"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>