<?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>26988</bug_id>
          
          <creation_ts>2009-07-06 06:04:18 -0700</creation_ts>
          <short_desc>Haiku-specific files for WebCore</short_desc>
          <delta_ts>2009-08-15 03:11:09 -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>1</everconfirmed>
          <reporter name="Maxime Simon">simon.maxime</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>leavengood</cc>
    
    <cc>levin</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129933</commentid>
    <comment_count>0</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 06:04:18 -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 Haiku-specific
files contained in WebCore. ( WebCore/platform/haiku )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129938</commentid>
    <comment_count>1</comment_count>
      <attachid>32300</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 06:19:49 -0700</bug_when>
    <thetext>Created attachment 32300
Patch to add a first bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129939</commentid>
    <comment_count>2</comment_count>
      <attachid>32301</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 06:26:11 -0700</bug_when>
    <thetext>Created attachment 32301
Patch to add a second bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129940</commentid>
    <comment_count>3</comment_count>
      <attachid>32302</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 06:34:04 -0700</bug_when>
    <thetext>Created attachment 32302
Patch to add a third bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129941</commentid>
    <comment_count>4</comment_count>
      <attachid>32303</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 06:45:38 -0700</bug_when>
    <thetext>Created attachment 32303
Patch to add a fourth bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129943</commentid>
    <comment_count>5</comment_count>
      <attachid>32304</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 07:12:03 -0700</bug_when>
    <thetext>Created attachment 32304
Patch to add ScrollBar and ScrollView code specific to Haiku.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129954</commentid>
    <comment_count>6</comment_count>
      <attachid>32307</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 08:21:41 -0700</bug_when>
    <thetext>Created attachment 32307
Patch to add a fifth bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129957</commentid>
    <comment_count>7</comment_count>
      <attachid>32308</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-06 08:35:55 -0700</bug_when>
    <thetext>Created attachment 32308
Patch to add a sixth bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132174</commentid>
    <comment_count>8</comment_count>
      <attachid>32300</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:23:41 -0700</bug_when>
    <thetext>Comment on attachment 32300
Patch to add a first bunch of Haiku-specific files for WebCore.


&gt; +// extensions beyond IE&apos;s API
&gt; +HashSet&lt;String&gt; ClipboardHaiku::types() const 
&gt; +{
&gt; +    HashSet&lt;String&gt; result;
&gt; +    BMessage *data;
&gt; +
&gt; +    if (be_clipboard-&gt;Lock()) {
&gt; +        if ((data = be_clipboard-&gt;Data())) {
&gt; +            char *name;
&gt; +            uint32 type;
&gt; +            int32 count;
&gt; +
&gt; +            for (int32 i = 0;
&gt; +                 data-&gt;GetInfo(B_ANY_TYPE, i, &amp;name, &amp;type, &amp;count) == B_OK;
&gt; +                 i++) {
&gt; +                result.add(name);
&gt; +            } 

This should be two lines:
               for (int32 i = 0; data-&gt;GetInfo(B_ANY_TYPE, i, &amp;name, &amp;type, &amp;count) == B_OK; i++)
                   result.add(name);

&gt; +bool ClipboardHaiku::hasData() 
&gt; +{
&gt; +    bool result = false;
&gt; +    BMessage *data;
&gt; +
&gt; +    if (be_clipboard-&gt;Lock()) {
&gt; +        if ((data = be_clipboard-&gt;Data())) {
&gt; +            result = !data-&gt;IsEmpty();
&gt; +        }
This if-statement has a single line of code so should not have braces

Rest of the patch looks fine, but it&apos;s easier for us to do landing if we have a set of correct patches to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132175</commentid>
    <comment_count>9</comment_count>
      <attachid>32301</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:26:02 -0700</bug_when>
    <thetext>Comment on attachment 32301
Patch to add a second bunch of Haiku-specific files for WebCore.

looks fine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132176</commentid>
    <comment_count>10</comment_count>
      <attachid>32302</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:28:26 -0700</bug_when>
    <thetext>Comment on attachment 32302
Patch to add a third bunch of Haiku-specific files for WebCore.

looks fine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132177</commentid>
    <comment_count>11</comment_count>
      <attachid>32303</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:36:51 -0700</bug_when>
    <thetext>Comment on attachment 32303
Patch to add a fourth bunch of Haiku-specific files for WebCore.

&gt; +void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
&gt; +{
&gt; +    BMessage* data;
&gt; +
&gt; +    if (be_clipboard-&gt;Lock()) {
&gt; +        be_clipboard-&gt;Clear();
&gt; +        if ((data = be_clipboard-&gt;Data())) {
&gt; +            data-&gt;AddString(&quot;text/plain&quot;, BString(frame-&gt;selectedText()));
&gt; +            be_clipboard-&gt;Commit();
&gt; +        }
&gt; +        be_clipboard-&gt;Unlock();
&gt; +    }
&gt; +}

You&apos;ll want a bug to track supporting pasting of rich text.  Also i&apos;m concerned about where be_clipboard comes from?  If it&apos;s the global pasteboard in haiku you don&apos;t want to use it here

&gt; +String Pasteboard::plainText(Frame* frame)
&gt; +{
&gt; +    BString string;
&gt; +    BMessage* data;
&gt; +
&gt; +    if (be_clipboard-&gt;Lock()) {
&gt; +        if ((data = be_clipboard-&gt;Data())) {
&gt; +            data-&gt;FindString(&quot;text/plain&quot;, &amp;string);
&gt; +        }
No braces on a single line if statement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132178</commentid>
    <comment_count>12</comment_count>
      <attachid>32304</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:43:56 -0700</bug_when>
    <thetext>Comment on attachment 32304
Patch to add ScrollBar and ScrollView code specific to Haiku.

&gt; +
&gt; +void ScrollViewCanvasHaiku::Draw(BRect updateRect)
&gt; +{
&gt; +    FrameView* fv = static_cast&lt;FrameView*&gt;(m_scrollView);
&gt; +    if (!fv || !fv-&gt;frame() || !fv-&gt;frame()-&gt;contentRenderer())
&gt; +        return;
&gt; +
&gt; +    while (fv-&gt;needsLayout()) {
&gt; +        fv-&gt;layout();
&gt; +    }
Single line code block should not have braces :D

&gt; +void ScrollViewCanvasHaiku::KeyDown(const char* bytes, int32 numBytes)
&gt; +{
&gt; +    BMessage* message = Looper()-&gt;CurrentMessage();
&gt; +    if (!message)
&gt; +        return;
&gt; +
&gt; +    WebCore::FrameView* fv = static_cast&lt;WebCore::FrameView*&gt;(m_scrollView);
&gt; +    if (!fv || !fv-&gt;frame())
&gt; +    	return;
&gt; +
&gt; +    if(!fv-&gt;frame()-&gt;eventHandler()-&gt;keyEvent(PlatformKeyboardEvent(message)))
&gt; +    	printf(&quot;--&gt;KeyDown: not arrived\n&quot;);    
&gt; +
&gt; +    if((int)bytes[0] != (int)B_TAB)
&gt; +        BView::KeyDown(bytes, numBytes);

We use c++ casts for all casts in webkit -- eg. static_cast

&gt; +}
&gt; +
&gt; +void ScrollViewCanvasHaiku::KeyUp(const char* bytes, int32 numBytes)
&gt; +{
&gt; +    BMessage* message = Looper()-&gt;CurrentMessage();
&gt; +    if (!message)
&gt; +        return;
&gt; +
&gt; +    WebCore::FrameView* fv = static_cast&lt;WebCore::FrameView*&gt;(m_scrollView);
&gt; +    if (!fv || !fv-&gt;frame())
&gt; +    	return;
&gt; +
&gt; +    if(fv-&gt;frame()-&gt;eventHandler()-&gt;keyEvent(PlatformKeyboardEvent(message)))
&gt; +    	printf(&quot;--&gt;KeyUp: not arrived\n&quot;); 
&gt; +
&gt; +    if(bytes[0] != (int)B_TAB)
ditto

Basically looks fine except the aforementioned style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132180</commentid>
    <comment_count>13</comment_count>
      <attachid>32307</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:49:50 -0700</bug_when>
    <thetext>Comment on attachment 32307
Patch to add a fifth bunch of Haiku-specific files for WebCore.


&gt; +// This might be useful, but it not used for now
&gt; +/*
&gt; +static BView* haikuWidgetForPage(const Page* page)
&gt; +{
&gt; +    Frame* frame = (page ? page-&gt;mainFrame() : 0);
&gt; +    FrameView* frameView = (frame ? frame-&gt;view() : 0);
&gt; +
&gt; +    if (!frameView)
&gt; +        return 0;
&gt; +
&gt; +    return frameView-&gt;haikuWidget();
&gt; +}*/

We don&apos;t include commented out code in the tree


&gt; +int screenDepth(Widget*)
&gt; +{
&gt; +    BScreen screen;
&gt; +    // FIXME: We assume this screen is valid
&gt; +    color_space cs = screen.ColorSpace();
&gt; +
&gt; +    size_t pixelChunk, rowAlignment, pixelsPerChunk;
&gt; +    if (get_pixel_size_for(cs, &amp;pixelChunk, &amp;rowAlignment, &amp;pixelsPerChunk) == B_OK) {
&gt; +        // FIXME: Not sure if this is right
&gt; +        return pixelChunk * 8;
&gt; +    }
Single line block shouldn&apos;t have braces

&gt; +void SharedTimerHaiku::setFireTime(double fireTime)
&gt; +{
&gt; +    m_fireTime = fireTime;
&gt; +    if (m_fireTime &gt; 0 &amp;&amp; m_shouldRun) {
&gt; +        bigtime_t sleepyTime = (bigtime_t)((m_fireTime - WTF::currentTime()) * 1000000);
You should be using a c++ style cast

&gt; +        
&gt; +        if(sleepyTime &lt; 0)
space between if and (

&gt; +// WebCore functions
&gt; +void setSharedTimerFiredFunction(void (*function)())
&gt; +{
&gt; +    SharedTimerHaiku* timer=getSharedTimerHaiku();
Need spaces around =

&gt; +namespace WebCore {
&gt; +    class SharedTimerHaiku : public BMessageFilter {
&gt; +        public:
&gt; +            SharedTimerHaiku();
&gt; +            ~SharedTimerHaiku();
&gt; +
&gt; +            void setFireTime(double fireTime);
&gt; +            void setFireFunction(void (*function)());
&gt; +            void setShouldRun(bool shouldRun);
&gt; +
&gt; +            //void  MessageReceived(BMessage* message);
&gt; +            virtual filter_result Filter(BMessage* message, BHandler** _target);
&gt; +
&gt; +        private:
&gt; +            //void wait();
&gt; +            //static int32 threadFunction(void *data);
&gt; +
&gt; +            //thread_id m_thread;
&gt; +            //sem_id m_waitSem;
Don&apos;t included commented out members, you should file a bug on resurrecting these</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132184</commentid>
    <comment_count>14</comment_count>
      <attachid>32308</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:53:48 -0700</bug_when>
    <thetext>Comment on attachment 32308
Patch to add a sixth bunch of Haiku-specific files for WebCore.


&gt; +double currentTime()
&gt; +{
&gt; +    struct timeval tv;
&gt; +    struct timezone tz;
&gt; +
&gt; +    gettimeofday(&amp;tv, &amp;tz);
&gt; +    return (double)tv.tv_sec + (double)(tv.tv_usec / 1000000.0);
Once again c++ style casts please :D

&gt; +TranslatorDecoder::TranslatorDecoder()
&gt; +{
&gt; +    m_image = 0;
&gt; +    setSize(-1,-1);
&gt; +}
space after the ,

&gt; +
&gt; +bool TranslatorDecoder::isSizeAvailable() const
&gt; +{
&gt; +    return !(size() == IntSize(-1, -1));
&gt; +}
Does != really not work here?

&gt; +void TranslatorDecoder::setData(SharedBuffer* data, bool allDataReceived) 
&gt; +{ 
&gt; +    if(allDataReceived) {
&gt; +        BMemoryIO io(data-&gt;data(),data-&gt;size());
&gt; +        m_image = BTranslationUtils::GetBitmap(&amp;io);
&gt; +        if (m_image) {
&gt; +            //set the image size decoded.
&gt; +            setSize(m_image-&gt;Bounds().Width() + 1, m_image-&gt;Bounds().Height() + 1);
&gt; +        }   
Should not have braces around a single line if :D

&gt; +void Widget::setFrameRect(const IntRect&amp; rect)
&gt; +{
&gt; +    if (!platformWidget())
&gt; +        return;
&gt; +
&gt; +    if (frameRect() != rect){
Space before {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132185</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 00:54:20 -0700</bug_when>
    <thetext>In general all these patches look fine, it&apos;s just minor style quirks holding them up from being landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132244</commentid>
    <comment_count>16</comment_count>
      <attachid>32861</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 05:21:47 -0700</bug_when>
    <thetext>Created attachment 32861
Patch to add a first bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132252</commentid>
    <comment_count>17</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 06:24:49 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 32303 [details])
&gt; &gt; +void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
&gt; &gt; +{
&gt; &gt; +    BMessage* data;
&gt; &gt; +
&gt; &gt; +    if (be_clipboard-&gt;Lock()) {
&gt; &gt; +        be_clipboard-&gt;Clear();
&gt; &gt; +        if ((data = be_clipboard-&gt;Data())) {
&gt; &gt; +            data-&gt;AddString(&quot;text/plain&quot;, BString(frame-&gt;selectedText()));
&gt; &gt; +            be_clipboard-&gt;Commit();
&gt; &gt; +        }
&gt; &gt; +        be_clipboard-&gt;Unlock();
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; You&apos;ll want a bug to track supporting pasting of rich text.  Also i&apos;m concerned
&gt; about where be_clipboard comes from?  If it&apos;s the global pasteboard in haiku
&gt; you don&apos;t want to use it here

Indeed be_clipboard is system pasteboard in Haiku.
So I used a clipboard which should be specific to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132254</commentid>
    <comment_count>18</comment_count>
      <attachid>32868</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 06:43:32 -0700</bug_when>
    <thetext>Created attachment 32868
Patch to add a first bunch of Haiku-specific files for WebCore.

Sorry, the previous patch lacks some files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132255</commentid>
    <comment_count>19</comment_count>
      <attachid>32869</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 06:53:44 -0700</bug_when>
    <thetext>Created attachment 32869
Patch to add a fourth bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132258</commentid>
    <comment_count>20</comment_count>
      <attachid>32870</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 07:22:55 -0700</bug_when>
    <thetext>Created attachment 32870
Patch to add ScrollBar and ScrollView code specific to Haiku.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132270</commentid>
    <comment_count>21</comment_count>
      <attachid>32875</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 09:01:18 -0700</bug_when>
    <thetext>Created attachment 32875
Patch to add a fifth bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132274</commentid>
    <comment_count>22</comment_count>
      <attachid>32876</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 09:15:18 -0700</bug_when>
    <thetext>Created attachment 32876
Patch to add a sixth bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132310</commentid>
    <comment_count>23</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-16 12:07:38 -0700</bug_when>
    <thetext>&gt; &gt; You&apos;ll want a bug to track supporting pasting of rich text.  Also i&apos;m concerned
&gt; &gt; about where be_clipboard comes from?  If it&apos;s the global pasteboard in haiku
&gt; &gt; you don&apos;t want to use it here
&gt; 
&gt; Indeed be_clipboard is system pasteboard in Haiku.
&gt; So I used a clipboard which should be specific to WebKit.

Sorry i&apos;ll re-look at this, i keep forgetting whether pasteboard or clipboard is the generic system clipboard and which is a general interface to either dragging or copy/paste</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132319</commentid>
    <comment_count>24</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-16 12:31:46 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; &gt; You&apos;ll want a bug to track supporting pasting of rich text.  Also i&apos;m concerned
&gt; &gt; &gt; about where be_clipboard comes from?  If it&apos;s the global pasteboard in haiku
&gt; &gt; &gt; you don&apos;t want to use it here
&gt; &gt; 
&gt; &gt; Indeed be_clipboard is system pasteboard in Haiku.
&gt; &gt; So I used a clipboard which should be specific to WebKit.
&gt; 
&gt; Sorry i&apos;ll re-look at this, i keep forgetting whether pasteboard or clipboard
&gt; is the generic system clipboard and which is a general interface to either
&gt; dragging or copy/paste

Your review was good.
As I looked to other ports, for the Pasteboard class they use a &quot;per application&quot; clipboard;
and in the Clipboard class a generic system clipboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132491</commentid>
    <comment_count>25</comment_count>
      <attachid>32301</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:41:45 -0700</bug_when>
    <thetext>Comment on attachment 32301
Patch to add a second bunch of Haiku-specific files for WebCore.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/haiku/ContextMenuHaiku.cpp
	A	WebCore/platform/haiku/ContextMenuItemHaiku.cpp
	A	WebCore/platform/haiku/DragDataHaiku.cpp
	A	WebCore/platform/haiku/DragImageHaiku.cpp
Committed r46019
	M	WebCore/ChangeLog
	A	WebCore/platform/haiku/DragImageHaiku.cpp
	A	WebCore/platform/haiku/DragDataHaiku.cpp
	A	WebCore/platform/haiku/ContextMenuItemHaiku.cpp
	A	WebCore/platform/haiku/ContextMenuHaiku.cpp
r46019 = 8ccf0e8fc838731509b10bb96dba66ed5b5148ec (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132492</commentid>
    <comment_count>26</comment_count>
      <attachid>32302</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:42:03 -0700</bug_when>
    <thetext>Comment on attachment 32302
Patch to add a third bunch of Haiku-specific files for WebCore.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/haiku/EventLoopHaiku.cpp
	A	WebCore/platform/haiku/FileChooserHaiku.cpp
	A	WebCore/platform/haiku/FileSystemHaiku.cpp
	A	WebCore/platform/haiku/KeyboardCodes.h
	A	WebCore/platform/haiku/MIMETypeRegistryHaiku.cpp
Committed r46020
	M	WebCore/ChangeLog
	A	WebCore/platform/haiku/KeyboardCodes.h
	A	WebCore/platform/haiku/FileChooserHaiku.cpp
	A	WebCore/platform/haiku/MIMETypeRegistryHaiku.cpp
	A	WebCore/platform/haiku/FileSystemHaiku.cpp
	A	WebCore/platform/haiku/EventLoopHaiku.cpp
r46020 = d619f1bbc62f49f146cd04db11e35b56a8b6de97 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132493</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:42:07 -0700</bug_when>
    <thetext>All reviewed patches landed, closing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132494</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-16 23:42:44 -0700</bug_when>
    <thetext>bugzilla requires a comment here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132576</commentid>
    <comment_count>29</comment_count>
      <attachid>32940</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-17 07:55:27 -0700</bug_when>
    <thetext>Created attachment 32940
Patch to add ScrollBar and ScrollView code specific to Haiku.

Many coding style issues corrected from the previous patch. ( Thanks to the cpplint.py tool :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132582</commentid>
    <comment_count>30</comment_count>
      <attachid>32943</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-17 08:29:46 -0700</bug_when>
    <thetext>Created attachment 32943
Patch to add ScrollBar and ScrollView code specific to Haiku.

I should build my code once before submitting patches.
I changed the name of an attribut, but I forgot two places in my source code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133079</commentid>
    <comment_count>31</comment_count>
      <attachid>32868</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-19 23:37:10 -0700</bug_when>
    <thetext>Comment on attachment 32868
Patch to add a first bunch of Haiku-specific files for WebCore.


&gt; diff --git a/WebCore/platform/haiku/ClipboardHaiku.cpp b/WebCore/platform/haiku/ClipboardHaiku.cpp

&gt; +#include &quot;HashTable.h&quot;

Should be &quot;#include &lt;wtf/HashTable.h&gt;&quot;

&gt; +
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +ClipboardHaiku::ClipboardHaiku(ClipboardAccessPolicy policy, bool forDragging) 
&gt; +    : Clipboard(policy, forDragging)
&gt; +{
&gt; +}
&gt; +
&gt; +void ClipboardHaiku::clearData(const String&amp; type)
&gt; +{
&gt; +    BMessage *data = (BMessage *) NULL;
1. Star in wrong place.
BMessage* data

2. Use c++ style casts. (BMessage *)  (but I don&apos;t think the cast is necessary.

3. Use 0 instead of NULL.

This line is repeated a lot in this patch, but I&apos;m only flagging this first instace.


&gt; +
&gt; +    if (be_clipboard-&gt;Lock()) {
&gt; +        if ((data = be_clipboard-&gt;Data())) {
Since there doesn&apos;t seem to be any benefit of putting this in the if other than saving a line.  Why not write it as two lines (which in my opinion makes it more readable)?

  data = be_clipboard-&gt;Data();
  if (data) {

It isn&apos;t necessary to be this but it would be nice imo.



&gt; +// extensions beyond IE&apos;s API
Format comments like sentences (begin with a capital and end with a period).

&gt; +IntPoint ClipboardHaiku::dragLocation() const 
&gt; +{ 
&gt; +    notImplemented();
&gt; +    return IntPoint(0,0);
Add a space after the comma.


&gt; +DragImageRef ClipboardHaiku::createDragImage(IntPoint&amp; dragLoc) const
Avoid abbreviations: dragloc -&gt; dragLocation

&gt; diff --git a/WebCore/platform/haiku/ClipboardHaiku.h b/WebCore/platform/haiku/ClipboardHaiku.h
&gt; +    // State available during IE&apos;s events for drag and drop and copy/paste
&gt; +    class ClipboardHaiku : public Clipboard {
&gt; +    public:
&gt; +        ClipboardHaiku(ClipboardAccessPolicy policy, bool forDragging);

&quot;bool forDragging&quot;
Please use an enum instead of a bool. (See http://trac.webkit.org/browser/trunk/WebCore/workers/WorkerScriptLoader.h for an example of where this was done.)



&gt; diff --git a/WebCore/platform/haiku/CursorHaiku.cpp b/WebCore/platform/haiku/CursorHaiku.cpp

&gt; +namespace WebCore {
&gt; +
&gt; +Cursor::Cursor(PlatformCursor p)
&quot;p&quot; -- Use words instead f abbreviations for variable names.


&gt; +static Cursor global_cursor((PlatformCursor)B_CURSOR_SYSTEM_DEFAULT);

Improper casing global_cursor -&gt; globalCursor
Use C++ style casting (static_cast/reinterpret_cast, etc.) instead of C style casting.


&gt; +static Cursor ibeam_cursor((PlatformCursor)B_CURSOR_I_BEAM);

Same comments as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133165</commentid>
    <comment_count>32</comment_count>
      <attachid>33093</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-20 10:28:06 -0700</bug_when>
    <thetext>Created attachment 33093
Patch to add a first bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133168</commentid>
    <comment_count>33</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-20 10:37:01 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; &gt; +ClipboardHaiku::ClipboardHaiku(ClipboardAccessPolicy policy, bool forDragging) 
&gt; &gt; +    : Clipboard(policy, forDragging)
&gt; &gt; +{
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void ClipboardHaiku::clearData(const String&amp; type)
&gt; &gt; +{
&gt; &gt; +    BMessage *data = (BMessage *) NULL;
&gt; 1. Star in wrong place.
&gt; BMessage* data
&gt; 
&gt; 2. Use c++ style casts. (BMessage *)  (but I don&apos;t think the cast is necessary.
&gt; 
&gt; 3. Use 0 instead of NULL.

Strange, I thought I corrected these style problems.
Anyway, it&apos;s done in the new patch. :)


&gt; &gt; diff --git a/WebCore/platform/haiku/ClipboardHaiku.h b/WebCore/platform/haiku/ClipboardHaiku.h
&gt; &gt; +    // State available during IE&apos;s events for drag and drop and copy/paste
&gt; &gt; +    class ClipboardHaiku : public Clipboard {
&gt; &gt; +    public:
&gt; &gt; +        ClipboardHaiku(ClipboardAccessPolicy policy, bool forDragging);
&gt; 
&gt; &quot;bool forDragging&quot;
&gt; Please use an enum instead of a bool. (See
&gt; http://trac.webkit.org/browser/trunk/WebCore/workers/WorkerScriptLoader.h for
&gt; an example of where this was done.)

On this point I don&apos;t really agree. I know what you mean but, as I looked in other ports,
none of them used an enum but a boolean.
However, I corrected something in ClipboardHaiku.h: other ports designed this class
with the constructor as private and have a static method to create the clipboard. So did I.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133172</commentid>
    <comment_count>34</comment_count>
      <attachid>33093</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-20 10:56:04 -0700</bug_when>
    <thetext>Comment on attachment 33093
Patch to add a first bunch of Haiku-specific files for WebCore.

Just a few last things to address.

&gt; Other ports designed this class with the constructor as private and have a static method to create the
&gt; clipboard.
Yep, that is a standard pattern. My mistake in missing it :)


&gt; &gt; &quot;bool forDragging&quot;
&gt; &gt; Please use an enum instead of a bool. (See
&gt; &gt; http://trac.webkit.org/browser/trunk/WebCore/workers/WorkerScriptLoader.h for
&gt; &gt; an example of where this was done.)

&gt; On this point I don&apos;t really agree. I know what you mean but, as I looked in
&gt; other ports, none of them used an enum but a boolean.

This is a new style that WebKit is moving to that likely post dates the other implementations, so that&apos;s why they use an enum.

For example see https://bugs.webkit.org/show_bug.cgi?id=26695, where this was said when someone was adding a new bool parameter:
  We&apos;re trying to avoid adding boolean parameters, because they are not very
  clear (when reading code like &quot;hitTestResultAtPoint(point, true, false, true)&quot;,
  what do the booleans mean?). One strategy to replace a boolean parameter is to
  use a two-value enum, like this:

  enum HitTestScrollbars { ShouldHitTestScrollbars, DontHitTestScrollbars };
 
Although in this case, it does just pass it along to the base class which takes bool, so perhaps it really isn&apos;t a new bool parameter.

Thus, it seems ok in this instance.  Please keep this in mind when doing other apis though.


&gt; diff --git a/WebCore/platform/haiku/ClipboardHaiku.cpp b/WebCore/platform/haiku/ClipboardHaiku.cpp

&gt; +#include &quot;IntPoint.h&quot;
&gt; +#include &quot;FileList.h&quot;
&gt; +#include &quot;PlatformString.h&quot;
&gt; +#include &quot;StringHash.h&quot;
&gt; +
&gt; +#include &quot;NotImplemented.h&quot;

Please sort this with the other &quot;&quot; headers.

&gt; +
&gt; +#include &lt;wtf/HashTable.h&gt;

Please sort this with the other #include &lt;&gt; headers.

&gt; +
&gt; +#include &lt;app/Clipboard.h&gt;
&gt; +#include &lt;Message.h&gt;
&gt; +#include &lt;String.h&gt;



&gt; +void ClipboardHaiku::clearData(const String&amp; type)
&gt; +{
&gt; +    BMessage* data;

It would be better if you declared this where it was used and initialized.

&gt; +    if (be_clipboard-&gt;Lock()) {
&gt; +        data = be_clipboard-&gt;Data();

It would look like this:
  BMessage* data = be_clipboard-&gt;Data();

This same pattern is throughout this code.

&gt; diff --git a/WebCore/platform/haiku/ClipboardHaiku.h b/WebCore/platform/haiku/ClipboardHaiku.h

&gt; +
&gt; +#include &lt;support/Locker.h&gt;
&gt; +#include &lt;app/Clipboard.h&gt;

Please sort these two.


&gt; diff --git a/WebCore/platform/haiku/CursorHaiku.cpp b/WebCore/platform/haiku/CursorHaiku.cpp
&gt; +static Cursor global_cursor(static_cast&lt;PlatformCursor&gt;(B_CURSOR_SYSTEM_DEFAULT));
&gt; +static Cursor ibeam_cursor(static_cast&lt;PlatformCursor&gt;(B_CURSOR_I_BEAM));

As noted before: Improper casing global_cursor -&gt; globalCursor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133208</commentid>
    <comment_count>35</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-07-20 13:19:57 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; 
&gt; This is a new style that WebKit is moving to that likely post dates the other
&gt; implementations, so that&apos;s why they use an enum.
&gt; 
&gt; For example see https://bugs.webkit.org/show_bug.cgi?id=26695, where this was
&gt; said when someone was adding a new bool parameter:
&gt;   We&apos;re trying to avoid adding boolean parameters, because they are not very
&gt;   clear (when reading code like &quot;hitTestResultAtPoint(point, true, false,
&gt; true)&quot;,
&gt;   what do the booleans mean?). One strategy to replace a boolean parameter is
&gt; to
&gt;   use a two-value enum, like this:
&gt; 
&gt;   enum HitTestScrollbars { ShouldHitTestScrollbars, DontHitTestScrollbars };

For what it is worth, I agree with David on this. It definitely makes sense and since we are a new port, let&apos;s move in a better direction, especially if the rest of WebKit is going that way.

Let&apos;s also maybe keep it in mind for the browser code too.

Regards,
Ryan</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133220</commentid>
    <comment_count>36</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-20 14:06:16 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; &gt; 
&gt; &gt; This is a new style that WebKit is moving to that likely post dates the other
&gt; &gt; implementations, so that&apos;s why they use an enum.
&gt; &gt; 
&gt; &gt; For example see https://bugs.webkit.org/show_bug.cgi?id=26695, where this was
&gt; &gt; said when someone was adding a new bool parameter:
&gt; &gt;   We&apos;re trying to avoid adding boolean parameters, because they are not very
&gt; &gt;   clear (when reading code like &quot;hitTestResultAtPoint(point, true, false,
&gt; &gt; true)&quot;,
&gt; &gt;   what do the booleans mean?). One strategy to replace a boolean parameter is
&gt; &gt; to
&gt; &gt;   use a two-value enum, like this:
&gt; &gt; 
&gt; &gt;   enum HitTestScrollbars { ShouldHitTestScrollbars, DontHitTestScrollbars };
&gt; 
&gt; For what it is worth, I agree with David on this. It definitely makes sense and
&gt; since we are a new port, let&apos;s move in a better direction, especially if the
&gt; rest of WebKit is going that way.
&gt; 
&gt; Let&apos;s also maybe keep it in mind for the browser code too.
&gt; 
&gt; Regards,
&gt; Ryan

In fact I didn&apos;t intend to do the same for the whole project. :)
Using enum instead of booleans seems totally logical to the
understanding of everyone. And I agree with it.
But here the boolean was required by the base class. (Clipboard)

Maxime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133424</commentid>
    <comment_count>37</comment_count>
      <attachid>33166</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-21 02:47:20 -0700</bug_when>
    <thetext>Created attachment 33166
Patch to add a first bunch of Haiku-specific files for WebCore.

+#include &lt;support/Locker.h&gt;
+#include &lt;app/Clipboard.h&gt;

I have no choice but to put these includes in this order.
Clipboard.h needs Locker.h but it seems that it doesn&apos;t include it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133429</commentid>
    <comment_count>38</comment_count>
      <attachid>33166</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 03:03:19 -0700</bug_when>
    <thetext>Comment on attachment 33166
Patch to add a first bunch of Haiku-specific files for WebCore.

I want to approve this but this change isn&apos;t done.

 diff --git a/WebCore/platform/haiku/CursorHaiku.cpp b/WebCore/platform/haiku/CursorHaiku.cpp
&gt; +static Cursor global_cursor(static_cast&lt;PlatformCursor&gt;(B_CURSOR_SYSTEM_DEFAULT));
&gt; +static Cursor ibeam_cursor(static_cast&lt;PlatformCursor&gt;(B_CURSOR_I_BEAM));

As noted before: Improper casing 
   s/global_cursor/globalCursor/
   s/ibeam_cursor/ibeamCursor/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133432</commentid>
    <comment_count>39</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-21 03:11:19 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 33166 [details])
&gt; I want to approve this but this change isn&apos;t done.
&gt; 
&gt;  diff --git a/WebCore/platform/haiku/CursorHaiku.cpp
&gt; b/WebCore/platform/haiku/CursorHaiku.cpp
&gt; &gt; +static Cursor global_cursor(static_cast&lt;PlatformCursor&gt;(B_CURSOR_SYSTEM_DEFAULT));
&gt; &gt; +static Cursor ibeam_cursor(static_cast&lt;PlatformCursor&gt;(B_CURSOR_I_BEAM));
&gt; 
&gt; As noted before: Improper casing 
&gt;    s/global_cursor/globalCursor/
&gt;    s/ibeam_cursor/ibeamCursor/

Okay I see the issue:
I read &quot;improper casting&quot; but it was &quot;improper casing&quot;.
Really sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133436</commentid>
    <comment_count>40</comment_count>
      <attachid>33168</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-21 03:26:51 -0700</bug_when>
    <thetext>Created attachment 33168
Patch to add a first bunch of Haiku-specific files for WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133440</commentid>
    <comment_count>41</comment_count>
      <attachid>33168</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 03:37:34 -0700</bug_when>
    <thetext>Comment on attachment 33168
Patch to add a first bunch of Haiku-specific files for WebCore.


&gt; +Cursor&amp; Cursor::operator=(const Cursor&amp; other)
&gt; +{
&gt; +    m_impl = other.m_impl;
&gt; +    return* this;
Should be &quot;return *this;&quot;

Fix on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133441</commentid>
    <comment_count>42</comment_count>
      <attachid>33168</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 03:42:12 -0700</bug_when>
    <thetext>Comment on attachment 33168
Patch to add a first bunch of Haiku-specific files for WebCore.

Clearing r+.
Committed as http://trac.webkit.org/changeset/46167</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135317</commentid>
    <comment_count>43</comment_count>
      <attachid>33168</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-28 12:17:39 -0700</bug_when>
    <thetext>Comment on attachment 33168
Patch to add a first bunch of Haiku-specific files for WebCore.

I believe I already landed this: http://trac.webkit.org/changeset/46167

Let me know if I am mistaken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135318</commentid>
    <comment_count>44</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-07-28 12:19:46 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 33168 [details])
&gt; I believe I already landed this: http://trac.webkit.org/changeset/46167
&gt; 
&gt; Let me know if I am mistaken.

Indeed, strange that it was still highlighted. (with no flags)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135355</commentid>
    <comment_count>45</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-28 13:34:32 -0700</bug_when>
    <thetext>&gt;Indeed, strange that it was still highlighted. (with no flags)
I did that.

In short: Best to stick with one patch per bug (but when you&apos;re starting with WebKit, it is hard to realize that :) ).


Details:
There are several problems when putting multiple patches in one bug.

One problem is the bugs need to remain open even after one of the patches is landed.  However, if there is an r+ in an open bug, then the bug shows up in the &quot;commit queue&quot;: 

https://bugs.webkit.org/buglist.cgi?query_format=advanced&amp;short_desc_type=notregexp&amp;short_desc=%5C%5BS60%5C%5D&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;keywords_type=allwords&amp;keywords=&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=flagtypes.name&amp;type0-0-0=equals&amp;value0-0-0=review%2B&amp;field0-1-0=noop&amp;type0-1-0=equals&amp;value0-1-0=

So it looks like the bug needs to have a patch committed (but it doesn&apos;t).  To solve this, the r+ is cleared for landed patches in open bugs to remove it from the commit queue. There are mixed opinions on whether the patch should be marked obsolete.  I didn&apos;t because the patch was fine.  This is what you saw here :)


btw, another problem with multiple patches per bug is trying to figure out what comments apply to what patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137831</commentid>
    <comment_count>46</comment_count>
      <attachid>32869</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-07 01:59:46 -0700</bug_when>
    <thetext>Comment on attachment 32869
Patch to add a fourth bunch of Haiku-specific files for WebCore.

Just a few things to fix up here.


Please run check-webkit-style on this files in this patch to point out the TABs and unsorted header files, etc.  Since the tool will point them out, I&apos;ll not enumerate these issues.


&gt; diff --git a/WebCore/platform/haiku/PasteboardHaiku.cpp b/WebCore/platform/haiku/PasteboardHaiku.cpp

&gt; +void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
&gt; +{
&gt; +    BClipboard clipboard(&quot;WebKit&quot;);
&gt; +    BMessage* data;
&gt; +
&gt; +    if (clipboard.Lock()) {

fwiw, WebKit tends to favor a return early, so
if (!clipboard.Lock())
    return;
would follow this style better.


&gt; +        clipboard.Clear();

It is nice to define types in the smallest possible scope and to initialize them when declared.

So I&apos;d suggestion move BMessage* here.

    BMessage* data = clipboard.Data();
    if (data) {

Same thing for other similar code in here.

&gt;
&gt; diff --git a/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp b/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp
&gt; +	    //case B_SPACE:
&gt; +	    //	return &quot;&quot;;
&gt; +	    case B_TAB:
&gt; +	    	return &quot;U+0009&quot;;
&gt; +	    //case B_ESCAPE:
&gt; +	    //	return &quot;&quot;;

Typical WebKit style is to not check in commented out code.

&gt; +        return( 0 );

Just &quot;return 0;&quot;

&gt; +    default:
&gt; +        return( 0 );

Just &quot;return 0;&quot;

&gt; +PlatformKeyboardEvent::PlatformKeyboardEvent(BMessage *message)
&quot;*&quot; placement.  &quot;BMessage*&quot;


&gt; diff --git a/WebCore/platform/haiku/PlatformWheelEventHaiku.cpp b/WebCore/platform/haiku/PlatformWheelEventHaiku.cpp
&gt; +PlatformWheelEvent::PlatformWheelEvent(BMessage *message)

&quot;*&quot; placement.  &quot;BMessage*&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137838</commentid>
    <comment_count>47</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 02:44:53 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 32869 [details])
&gt; Just a few things to fix up here.
&gt; 
&gt; 
&gt; Please run check-webkit-style on this files in this patch to point out the TABs
&gt; and unsorted header files, etc.  Since the tool will point them out, I&apos;ll not
&gt; enumerate these issues.

I made this patch 3 weeks ago and, during this time, I checked the style of all my files. :) Anyway, I re-ran it. Concerning the alphabetic order of headers in PlatformKeyboardEventHaiku.cpp I had no choices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137839</commentid>
    <comment_count>48</comment_count>
      <attachid>34263</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 02:46:26 -0700</bug_when>
    <thetext>Created attachment 34263
Patch to add a fourth bunch of Haiku-specfic files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137873</commentid>
    <comment_count>49</comment_count>
      <attachid>34263</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-07 07:42:21 -0700</bug_when>
    <thetext>Comment on attachment 34263
Patch to add a fourth bunch of Haiku-specfic files to WebCore.

&gt; +#include &quot;DocumentFragment.h&quot;
&gt; +#include &quot;Editor.h&quot;
&gt; +#include &quot;Frame.h&quot;
&gt; +#include &quot;KURL.h&quot;
&gt; +#include &quot;NotImplemented.h&quot;
&gt; +#include &quot;markup.h&quot;
&gt; +
&gt; +#include &lt;support/Locker.h&gt;
&gt; +#include &lt;Clipboard.h&gt;
&gt; +#include &lt;Message.h&gt;
&gt; +#include &lt;String.h&gt;

WebKit style is to use a single paragraph for these, not two.

&gt; +#include &quot;KeyboardCodes.h&quot;
&gt; +#include &quot;NotImplemented.h&quot;
&gt; +
&gt; +#include &lt;InterfaceDefs.h&gt;
&gt; +#include &lt;Message.h&gt;
&gt; +#include &lt;String.h&gt;

Ditto.

&gt; +static String keyIdentifierForHaikuKeyCode(char singleByte, int32 keyCode)

Are you sure you want to use the type &quot;int32&quot; here? We&apos;d normally use int, or perhaps int32_t. Is this something specific to the Haiku platform?

&gt; +{
&gt; +        switch (singleByte) {

This is indented two many spaces.

&gt; +                return String::format(&quot;U+%04X&quot;, toASCIIUpper((int)keyCode));

You should not have to use any type cast with toASCIIUpper. Does this help in some way?

&gt; +            };

Extra semicolon here.

&gt; +            return String::format(&quot;U+%04X&quot;, toASCIIUpper((int)keyCode));

If you put this after the switch statement then you could share the two cases of it.

&gt; +    switch (singleByte) {

For some reason this second switch statement is indented differently than the first. Could you make both consistent, and follow the WebKit coding style guide?

&gt; +PlatformKeyboardEvent::PlatformKeyboardEvent(BMessage* message)
&gt; +{
&gt; +    BString bytes = message-&gt;FindString(&quot;bytes&quot;);
&gt; +
&gt; +    m_text = String::fromUTF8(bytes.String(), bytes.Length());
&gt; +    m_unmodifiedText = String(bytes.String(), bytes.Length());
&gt; +    m_keyIdentifier = keyIdentifierForHaikuKeyCode(bytes.ByteAt(0), message-&gt;FindInt32(&quot;key&quot;));
&gt; +
&gt; +    if (message-&gt;what == B_KEY_UP)
&gt; +        m_type = KeyUp;
&gt; +    else if (message-&gt;what == B_KEY_DOWN)
&gt; +        m_type = KeyDown;
&gt; +
&gt; +    m_autoRepeat = true;
&gt; +    m_ctrlKey = false;
&gt; +    m_altKey = false;
&gt; +    m_metaKey = false;
&gt; +    m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(bytes.ByteAt(0));
&gt; +    m_isKeypad = false;
&gt; +    m_shiftKey = false;
&gt; +}

It&apos;s better style to use member initialization as much as possible, and only use assignment when that is impractical. So at least for most of these booleans you should switch to that.

&gt; +PlatformMouseEvent::PlatformMouseEvent(const BMessage* message)

Same comment about member-wise initialization for this constructor.

&gt; +    m_deltaX *= -static_cast&lt;float&gt;(cScrollbarPixelsPerLineStep);
&gt; +    m_deltaY *= -static_cast&lt;float&gt;(cScrollbarPixelsPerLineStep);

Is the cast to float needed? What effect does it have? I&apos;d expect this to work perfectly without the cast.

review- because there are enough comments above that could be simply addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137874</commentid>
    <comment_count>50</comment_count>
      <attachid>34263</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-07 07:42:26 -0700</bug_when>
    <thetext>Comment on attachment 34263
Patch to add a fourth bunch of Haiku-specfic files to WebCore.

&gt; +#include &quot;DocumentFragment.h&quot;
&gt; +#include &quot;Editor.h&quot;
&gt; +#include &quot;Frame.h&quot;
&gt; +#include &quot;KURL.h&quot;
&gt; +#include &quot;NotImplemented.h&quot;
&gt; +#include &quot;markup.h&quot;
&gt; +
&gt; +#include &lt;support/Locker.h&gt;
&gt; +#include &lt;Clipboard.h&gt;
&gt; +#include &lt;Message.h&gt;
&gt; +#include &lt;String.h&gt;

WebKit style is to use a single paragraph for these, not two.

&gt; +#include &quot;KeyboardCodes.h&quot;
&gt; +#include &quot;NotImplemented.h&quot;
&gt; +
&gt; +#include &lt;InterfaceDefs.h&gt;
&gt; +#include &lt;Message.h&gt;
&gt; +#include &lt;String.h&gt;

Ditto.

&gt; +static String keyIdentifierForHaikuKeyCode(char singleByte, int32 keyCode)

Are you sure you want to use the type &quot;int32&quot; here? We&apos;d normally use int, or perhaps int32_t. Is this something specific to the Haiku platform?

&gt; +{
&gt; +        switch (singleByte) {

This is indented two many spaces.

&gt; +                return String::format(&quot;U+%04X&quot;, toASCIIUpper((int)keyCode));

You should not have to use any type cast with toASCIIUpper. Does this help in some way?

&gt; +            };

Extra semicolon here.

&gt; +            return String::format(&quot;U+%04X&quot;, toASCIIUpper((int)keyCode));

If you put this after the switch statement then you could share the two cases of it.

&gt; +    switch (singleByte) {

For some reason this second switch statement is indented differently than the first. Could you make both consistent, and follow the WebKit coding style guide?

&gt; +PlatformKeyboardEvent::PlatformKeyboardEvent(BMessage* message)
&gt; +{
&gt; +    BString bytes = message-&gt;FindString(&quot;bytes&quot;);
&gt; +
&gt; +    m_text = String::fromUTF8(bytes.String(), bytes.Length());
&gt; +    m_unmodifiedText = String(bytes.String(), bytes.Length());
&gt; +    m_keyIdentifier = keyIdentifierForHaikuKeyCode(bytes.ByteAt(0), message-&gt;FindInt32(&quot;key&quot;));
&gt; +
&gt; +    if (message-&gt;what == B_KEY_UP)
&gt; +        m_type = KeyUp;
&gt; +    else if (message-&gt;what == B_KEY_DOWN)
&gt; +        m_type = KeyDown;
&gt; +
&gt; +    m_autoRepeat = true;
&gt; +    m_ctrlKey = false;
&gt; +    m_altKey = false;
&gt; +    m_metaKey = false;
&gt; +    m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(bytes.ByteAt(0));
&gt; +    m_isKeypad = false;
&gt; +    m_shiftKey = false;
&gt; +}

It&apos;s better style to use member initialization as much as possible, and only use assignment when that is impractical. So at least for most of these booleans you should switch to that.

&gt; +PlatformMouseEvent::PlatformMouseEvent(const BMessage* message)

Same comment about member-wise initialization for this constructor.

&gt; +    m_deltaX *= -static_cast&lt;float&gt;(cScrollbarPixelsPerLineStep);
&gt; +    m_deltaY *= -static_cast&lt;float&gt;(cScrollbarPixelsPerLineStep);

Is the cast to float needed? What effect does it have? I&apos;d expect this to work perfectly without the cast.

review- because there are enough comments above that could be simply addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137892</commentid>
    <comment_count>51</comment_count>
      <attachid>34278</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 08:23:20 -0700</bug_when>
    <thetext>Created attachment 34278
Patch to add a fourth bunch of Haiku-specfic files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137893</commentid>
    <comment_count>52</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 08:26:18 -0700</bug_when>
    <thetext>&gt; &gt; +static String keyIdentifierForHaikuKeyCode(char singleByte, int32 keyCode)
&gt; 
&gt; Are you sure you want to use the type &quot;int32&quot; here? We&apos;d normally use int, or
&gt; perhaps int32_t. Is this something specific to the Haiku platform?
&gt; 

int32 is indeed a specific int type of Haiku. I change it to int.

&gt; &gt; +    m_deltaX *= -static_cast&lt;float&gt;(cScrollbarPixelsPerLineStep);
&gt; &gt; +    m_deltaY *= -static_cast&lt;float&gt;(cScrollbarPixelsPerLineStep);
&gt; 
&gt; Is the cast to float needed? What effect does it have? I&apos;d expect this to work
&gt; perfectly without the cast.
&gt; 

The cast isn&apos;t necessary, even if cScrollbarPixelsPerLineStep is an int.
Anyway, other ports do this cast. (I removed it in this patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137940</commentid>
    <comment_count>53</comment_count>
      <attachid>32875</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-07 10:05:06 -0700</bug_when>
    <thetext>Comment on attachment 32875
Patch to add a fifth bunch of Haiku-specific files for WebCore.

Here are some other things to fix up in the code.  I gave examples in places but the whole patch should be examined for the issues.

Needs a check-webkit-style pass.


Also, look at spacing. There are several places. Here&apos;s an example:
      110         BView*	view=i.context-&gt;platformContext();
      No spaces around =.  To much space after BView* (actually it may be a TAB).

    112         if (isEnabled( o )) {
    No spaces to the left of ( or to the right of ).


Odd indentation:
    170                view-&gt;SetHighColor(tint_color(ui_color(B_KEYBOARD_NAVIGATION_COLOR),
    179                     B_DISABLED_MARK_TINT));
  Typically indented to the nested ( on the previous line.

    182                     // needed because of anti-aliasing
  The comment should be aligned with the code and be formed like a sentence (starting with a capital and ending with a period).
    183                 view-&gt;StrokeLine(BPoint(rect.left, rect.top),


Variable names should be words.  Example: &quot;const RenderObject::PaintInfo&amp; i&quot; 


&quot; //code taken from the Haiku source code (CheckBox.cpp)&quot;
What is the license on the Haiku source?  Does it need to be added to the file and is it WebKit compatible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137946</commentid>
    <comment_count>54</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 10:10:44 -0700</bug_when>
    <thetext>&gt; &quot; //code taken from the Haiku source code (CheckBox.cpp)&quot;
&gt; What is the license on the Haiku source?  Does it need to be added to the file
&gt; and is it WebKit compatible?

Haiku uses a BSD License for its code. So I don&apos;t think we should add the license.
I think this comment was simply to signify that it&apos;s a copy/paste (I didn&apos;t write it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137955</commentid>
    <comment_count>55</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 10:25:18 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (From update of attachment 32875 [details])
&gt; Here are some other things to fix up in the code.  I gave examples in places
&gt; but the whole patch should be examined for the issues.
&gt; 
&gt; Needs a check-webkit-style pass.
&gt; 

I made a check-webkit-style and I got only one issue because of headers that I can&apos;t put in the correct order. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137960</commentid>
    <comment_count>56</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-07 10:28:51 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #53)
&gt; &gt; (From update of attachment 32875 [details] [details])
&gt; &gt; Here are some other things to fix up in the code.  I gave examples in places
&gt; &gt; but the whole patch should be examined for the issues.
&gt; &gt; 
&gt; &gt; Needs a check-webkit-style pass.
&gt; &gt; 
&gt; 
&gt; I made a check-webkit-style and I got only one issue because of headers that I
&gt; can&apos;t put in the correct order. :)

That&apos;s odd.  There were several places with TABs and the use of NULL. Both should have been flagged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137963</commentid>
    <comment_count>57</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 10:31:58 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #55)
&gt; &gt; (In reply to comment #53)
&gt; &gt; &gt; (From update of attachment 32875 [details] [details] [details])
&gt; &gt; &gt; Here are some other things to fix up in the code.  I gave examples in places
&gt; &gt; &gt; but the whole patch should be examined for the issues.
&gt; &gt; &gt; 
&gt; &gt; &gt; Needs a check-webkit-style pass.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; I made a check-webkit-style and I got only one issue because of headers that I
&gt; &gt; can&apos;t put in the correct order. :)
&gt; 
&gt; That&apos;s odd.  There were several places with TABs and the use of NULL. Both
&gt; should have been flagged.

That&apos;s simply because I already reviewed these files and didn&apos;t updated the patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137966</commentid>
    <comment_count>58</comment_count>
      <attachid>34291</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 10:42:01 -0700</bug_when>
    <thetext>Created attachment 34291
Patch to add a fifth bunch of Haiku-specfic files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138005</commentid>
    <comment_count>59</comment_count>
      <attachid>34301</attachid>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-07 11:39:46 -0700</bug_when>
    <thetext>Created attachment 34301
Patch to add a sixth bunch of Haiku-specfic files to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138031</commentid>
    <comment_count>60</comment_count>
      <attachid>34278</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 12:16:56 -0700</bug_when>
    <thetext>Comment on attachment 34278
Patch to add a fourth bunch of Haiku-specfic files to WebCore.

Looks sane enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138032</commentid>
    <comment_count>61</comment_count>
      <attachid>34301</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 12:18:50 -0700</bug_when>
    <thetext>Comment on attachment 34301
Patch to add a sixth bunch of Haiku-specfic files to WebCore.

Again, everything but translator decoder looks fine.  too much stuff in one patch.

Please get pkasting on #webkit to look at TranslatorDecoder as he knows the most about the image decoders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138033</commentid>
    <comment_count>62</comment_count>
      <attachid>34291</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 12:20:48 -0700</bug_when>
    <thetext>Comment on attachment 34291
Patch to add a fifth bunch of Haiku-specfic files to WebCore.

Too large. Please break this up.  Why are we still using this one bug?

Does Haiku really not have any drawing routines for drawing a checkbox or a radio button?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138206</commentid>
    <comment_count>63</comment_count>
    <who name="Ryan Leavengood">leavengood</who>
    <bug_when>2009-08-07 16:13:27 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; (From update of attachment 34291 [details])
&gt; Too large. Please break this up.  Why are we still using this one bug?

Yes please open new bugs Maxime with more specific descriptions and patches that cover fairly self-contained areas.
 
&gt; Does Haiku really not have any drawing routines for drawing a checkbox or a
&gt; radio button?

It does now, but probably not when this code was originally written. This is my fault for not being more active in updating this code and advising Maxime on what needed to be updated. I apologize for that and for all the review problems in these patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138209</commentid>
    <comment_count>64</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-07 16:23:38 -0700</bug_when>
    <thetext>&gt;  I apologize for that and for all the review problems in these patches.
fwiw, I think we all go through this when working in a new code base. I wouldn&apos;t take it too hard but it is good to learn from the reviews and improve current and future patches, which I think y&apos;all are doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138235</commentid>
    <comment_count>65</comment_count>
      <attachid>34278</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-07 17:48:21 -0700</bug_when>
    <thetext>Comment on attachment 34278
Patch to add a fourth bunch of Haiku-specfic files to WebCore.

Clearing review flag on attachment: 34278

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/haiku/PasteboardHaiku.cpp
	A	WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp
	A	WebCore/platform/haiku/PlatformMouseEventHaiku.cpp
	A	WebCore/platform/haiku/PlatformWheelEventHaiku.cpp
Committed r46934
	M	WebCore/ChangeLog
	A	WebCore/platform/haiku/PasteboardHaiku.cpp
	A	WebCore/platform/haiku/PlatformMouseEventHaiku.cpp
	A	WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp
	A	WebCore/platform/haiku/PlatformWheelEventHaiku.cpp
r46934 = 2a4385cbc2a85dbec8738df602dcaf69c09f4f11 (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46934</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140453</commentid>
    <comment_count>66</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2009-08-15 03:11:09 -0700</bug_when>
    <thetext>Non need to keep this bug opened.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32300</attachid>
            <date>2009-07-06 06:19:49 -0700</date>
            <delta_ts>2009-07-16 05:21:47 -0700</delta_ts>
            <desc>Patch to add a first bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-first-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>19349</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBkODcyZWQ0ZDI2ZGIwYmVjZjkzMGQzZDM4MGIyMTkyZWU3ZDAwZGZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgNiBKdWwgMjAwOSAxNToxNzo1MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgZmlyc3QgYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUKCi0t
LQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDczICsrKysr
KysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAgfCAgMjAyICsr
KysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRI
YWlrdS5oICAgfCAgIDcxICsrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVK
YXJIYWlrdS5jcHAgfCAgIDYxICsrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1cnNv
ckhhaWt1LmNwcCAgICB8ICAyMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmls
ZXMgY2hhbmdlZCwgNjQ0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3Uu
Y3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBhY2YxYzJlLi5iMDc3YTIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDA5LTA3LTA2ICBNYXhpbWUg
U2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgZmlyc3QgYnVuY2ggb2YgSGFpa3Utc3Bl
Y2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI2OTUyCisKKyAgICAgICAgQWRkaW5nIGZvdXIgZmlsZXMsIENsaXBi
b2FyZEhhaWt1LmNwcCwgQ2xpcGJvYXJkSGFpa3UuaCwKKyAgICAgICAgQ29va2llSmFySGFpa3Uu
Y3BwIGFuZCBDdXJzb3JIYWlrdS5jcHAKKworICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NsaXBi
b2FyZEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6
Q2xpcGJvYXJkSGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmNsZWFy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Y2xlYXJBbGxEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZEhhaWt1OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZEhhaWt1Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Zmls
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmRyYWdMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcGJvYXJkSGFpa3U6OmRyYWdJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkSGFpa3U6OmNyZWF0ZURyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRIYWlrdTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEhhaWt1Ojp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlr
dTo6d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6aGFzRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6fkNsaXBib2FyZEhhaWt1KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9D
dXJzb3JIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjp+Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50ZXJDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6bW92ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpjcm9zc0N1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpoYW5kQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OmlCZWFtQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OndhaXRDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6aGVscEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjplYXN0UmVzaXplQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vcnRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFdlc3RS
ZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291dGhSZXNpemVDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6c291dGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNvdXRoV2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjp3ZXN0UmVzaXplQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoU291dGhSZXNpemVDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6ZWFzdFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9y
dGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoV2Vz
dFNvdXRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpjb2x1bW5SZXNpemVD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6cm93UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OnZlcnRpY2FsVGV4dEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpjZWxsQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51Q3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vRHJvcEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5Q3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnByb2dyZXNzQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmFsaWFzQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
bm90QWxsb3dlZEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjp6b29tSW5DdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6em9vbU91dEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpncmFiQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OmdyYWJiaW5nQ3Vyc29yKToKKwogMjAwOS0wNy0wMiAg
UGllcnJlIGQnSGVyYmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ2xpcGJvYXJkSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkMTY0NAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuY3Bw
CkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNsaXBib2FyZEhhaWt1LmgiCisKKyNpbmNsdWRlICJIYXNoVGFibGUuaCIKKyNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8YXBwL0NsaXBib2FyZC5oPgorI2luY2x1ZGUgPE1l
c3NhZ2UuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NsaXBib2FyZEhhaWt1OjpDbGlwYm9hcmRIYWlrdShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9s
aWN5LCBib29sIGZvckRyYWdnaW5nKSAKKyAgICA6IENsaXBib2FyZChwb2xpY3ksIGZvckRyYWdn
aW5nKQoreworfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpjbGVhckRhdGEoY29uc3QgU3RyaW5n
JiB0eXBlKQoreworICAgIEJNZXNzYWdlKiBkYXRhOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+
TG9jaygpKSB7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgewor
ICAgICAgICAgICAgZGF0YS0+UmVtb3ZlTmFtZShCU3RyaW5nKHR5cGUpLlN0cmluZygpKTsKKyAg
ICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIH0KKyAgICAgICAgYmVf
Y2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OmNs
ZWFyQWxsRGF0YSgpIAoreworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAg
ICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7
CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorfQorCitTdHJpbmcgQ2xp
cGJvYXJkSGFpa3U6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBj
b25zdCAKK3sKKyAgICBCU3RyaW5nIHJlc3VsdDsKKyAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
Qk1lc3NhZ2UqIGRhdGE7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAg
ICAgaWYgKChkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCkpKSB7CisgICAgICAgICAgICBpZiAo
ZGF0YS0+RmluZFN0cmluZyhCU3RyaW5nKHR5cGUpLlN0cmluZygpLCAmcmVzdWx0KSA9PSBCX09L
KQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGJl
X2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Ym9vbCBDbGlwYm9hcmRIYWlrdTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSkgCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBCTWVzc2FnZSog
YmRhdGE7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgaWYgKChi
ZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgYmRhdGEtPlJlbW92
ZU5hbWUoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSk7CisgICAgICAgICAgICBpZiAoYmRhdGEtPkFk
ZFN0cmluZyhCU3RyaW5nKHR5cGUpLlN0cmluZygpLCBCU3RyaW5nKGRhdGEpKSA9PSBCX09LKQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xp
cGJvYXJkLT5Db21taXQoKTsKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQ
SQorSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEhhaWt1Ojp0eXBlcygpIGNvbnN0IAoreworICAg
IEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgQk1lc3NhZ2UgKmRhdGE7CisKKyAgICBpZiAo
YmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgaWYgKChkYXRhID0gYmVfY2xpcGJvYXJk
LT5EYXRhKCkpKSB7CisgICAgICAgICAgICBjaGFyICpuYW1lOworICAgICAgICAgICAgdWludDMy
IHR5cGU7CisgICAgICAgICAgICBpbnQzMiBjb3VudDsKKworICAgICAgICAgICAgZm9yIChpbnQz
MiBpID0gMDsKKyAgICAgICAgICAgICAgICAgZGF0YS0+R2V0SW5mbyhCX0FOWV9UWVBFLCBpLCAm
bmFtZSwgJnR5cGUsICZjb3VudCkgPT0gQl9PSzsKKyAgICAgICAgICAgICAgICAgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuYW1lKTsKKyAgICAgICAgICAgIH0gCisgICAgICAg
IH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRIYWlrdTo6ZmlsZXMo
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0lu
dFBvaW50IENsaXBib2FyZEhhaWt1OjpkcmFnTG9jYXRpb24oKSBjb25zdCAKK3sgCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Cit9CisKK0NhY2hlZElt
YWdlKiBDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlKCkgY29uc3QgCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsgCit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OnNldERy
YWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50JikgCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworTm9kZSogQ2xpcGJvYXJkSGFpa3U6OmRyYWdJbWFnZUVsZW1lbnQoKSAK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOyAKK30KKwordm9pZCBDbGlw
Ym9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRIYWlr
dTo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBkcmFnTG9jKSBjb25zdAoreyAKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojpk
ZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmLCBGcmFtZSopIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2xpcGJv
YXJkSGFpa3U6OndyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopIAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OndyaXRl
UmFuZ2UoUmFuZ2UqLCBGcmFtZSopIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jv
b2wgQ2xpcGJvYXJkSGFpa3U6Omhhc0RhdGEoKSAKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNl
OworICAgIEJNZXNzYWdlICpkYXRhOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7
CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAg
ICAgcmVzdWx0ID0gIWRhdGEtPklzRW1wdHkoKTsKKyAgICAgICAgfQorICAgICAgICBiZV9jbGlw
Ym9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
bGlwYm9hcmRIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZTdlMjIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2xpcGJvYXJkSGFpa3VfaAorI2RlZmlu
ZSBDbGlwYm9hcmRIYWlrdV9oCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKKworI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+Cisj
aW5jbHVkZSA8YXBwL0NsaXBib2FyZC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBj
bGFzcyBDYWNoZWRJbWFnZTsKKworICAgIC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBl
dmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKKyAgICBjbGFzcyBDbGlwYm9h
cmRIYWlrdSA6IHB1YmxpYyBDbGlwYm9hcmQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2xpcGJv
YXJkSGFpa3UoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9vbCBmb3JEcmFnZ2luZyk7
CisgICAgICAgIH5DbGlwYm9hcmRIYWlrdSgpIHsgfQorCisgICAgICAgIHZvaWQgY2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7CisgICAg
ICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29u
c3Q7CisgICAgICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSk7CisKKyAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKKyAgICAg
ICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKKworICAgICAgICBJbnRQb2ludCBkcmFnTG9j
YXRpb24oKSBjb25zdDsKKyAgICAgICAgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgpIGNvbnN0Owor
ICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7
CisgICAgICAgIE5vZGUqIGRyYWdJbWFnZUVsZW1lbnQoKTsKKyAgICAgICAgdm9pZCBzZXREcmFn
SW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOworCisgICAgICAgIHZpcnR1YWwg
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xvYykgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKKworICAgICAgICB2
aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBDbGlwYm9hcmRIYWlrdV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29r
aWVKYXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NzMw
ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFp
a3UuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2Vvcmdl
IFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIK
KworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgYmUgc2F2ZWQgdG8gYW5k
IHJlc3RvcmVkIGZyb20gZGlzayB0b28/CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
Y29va2llSmFyOworCit2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjb29raWVKYXIuc2V0KHVybC5zdHJpbmco
KSwgdmFsdWUpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
cmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKK30KKworYm9vbCBjb29raWVzRW5h
YmxlZCgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgc2V0dGlu
ZworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzMxOTliZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ3Vyc29ySGFpa3UuY3BwCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkN1cnNvci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPGFw
cC9BcHBEZWZzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJzb3I6OkN1cnNvcihQ
bGF0Zm9ybUN1cnNvciBwKQorICAgIDogbV9pbXBsKHApCit7Cit9CisKK0N1cnNvcjo6Q3Vyc29y
KGNvbnN0IEN1cnNvciYgb3RoZXIpCisgICAgOiBtX2ltcGwob3RoZXIubV9pbXBsKQoreworfQor
CitDdXJzb3I6On5DdXJzb3IoKQoreworfQorCitDdXJzb3I6OkN1cnNvcihJbWFnZSosIGNvbnN0
IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDdXJzb3ImIEN1cnNv
cjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCit7CisgICAgbV9pbXBsID0gb3RoZXIu
bV9pbXBsOworICAgIHJldHVybiogdGhpczsKK30KKworc3RhdGljIEN1cnNvciBnbG9iYWxfY3Vy
c29yKChQbGF0Zm9ybUN1cnNvcilCX0NVUlNPUl9TWVNURU1fREVGQVVMVCk7CitzdGF0aWMgQ3Vy
c29yIGliZWFtX2N1cnNvcigoUGxhdGZvcm1DdXJzb3IpQl9DVVJTT1JfSV9CRUFNKTsKKworY29u
c3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsK
K30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCit7CisgICAgcmV0dXJuIGds
b2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgcmV0
dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaUJlYW1DdXJzb3IoKQorewor
ICAgIHJldHVybiBpYmVhbV9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigp
Cit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaGVscEN1
cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
ZWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vy
c29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAg
cmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29y
JiBzb3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xv
YmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQor
eworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHdlc3RSZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RS
ZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBD
dXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGds
b2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiByb3dSZXNpemVD
dXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IHZlcnRpY2FsVGV4dEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgY2VsbEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7CisgICAg
cmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29weUN1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgcHJvZ3Jlc3ND
dXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IGFsaWFzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3Qg
Q3Vyc29yJiBub25lQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHpvb21PdXRDdXJzb3IoKQoreworICAg
IHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJDdXJzb3IoKQor
eworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5n
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16764"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32301</attachid>
            <date>2009-07-06 06:26:11 -0700</date>
            <delta_ts>2009-07-16 23:41:45 -0700</delta_ts>
            <desc>Patch to add a second bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-second-bunch-of-Haiku-specific-files-for-Web.patch</filename>
            <type>text/plain</type>
            <size>19412</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBmZjU2MzVmMTVlNzMzNTkzMjVlY2MwMjAzM2IxMGE3ODI3OTNmNzE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgNiBKdWwgMjAwOSAxNToyNDo0NSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgc2Vjb25kIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
NTcgKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAg
ICAgIHwgIDE0MyArKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
b250ZXh0TWVudUl0ZW1IYWlrdS5jcHAgfCAgMTY0ICsrKysrKysrKysrKysrKysrKysrKysrCiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwICAgICAgICB8ICAxMDkgKysr
KysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcCAg
ICAgICB8ICAgNzQgKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA1NDcgaW5zZXJ0aW9ucygr
KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHAKCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFjZjFjMmUuLjUz
ZTM4NTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMDktMDctMDYgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1h
eGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgYSBzZWNvbmQgYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9y
IFdlYkNvcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjk1MgorCisgICAgICAgIEFkZGluZyBmb3VyIGZpbGVzLCBDb250ZXh0TWVudUhhaWt1LmNw
cCwgQ29udGV4dE1lbnVJdGVtSGFpa3UuY3BwLAorICAgICAgICBEcmFnRGF0YUhhaWt1LmNwcCBh
bmQgRHJhZ0ltYWdlSGFpa3UuY3BwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Db250ZXh0
TWVudUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudVJlY2Vp
dmVyOjpDb250ZXh0TWVudVJlY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51
UmVjZWl2ZXI6OkhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVS
ZWNlaXZlcjo6UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0
TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHRNZW51OjppdGVtQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnU6Omluc2VydEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OnBsYXRmb3Jt
RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OnNldFBsYXRmb3Jt
RGVzY3JpcHRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SXRlbUhh
aWt1LmNwcDogQWRkZWQuCisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRl
bSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0pOgorICAgICAg
ICAoQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbik6CisgICAgICAg
IChDb250ZXh0TWVudUl0ZW06OnR5cGUpOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpzZXRU
eXBlKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6YWN0aW9uKToKKyAgICAgICAgKENvbnRl
eHRNZW51SXRlbTo6c2V0QWN0aW9uKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6dGl0bGUp
OgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpzZXRUaXRsZSk6CisgICAgICAgIChDb250ZXh0
TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVudSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnNl
dFN1Yk1lbnUpOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKToKKyAgICAg
ICAgKENvbnRleHRNZW51SXRlbTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChDb250ZXh0TWVudUl0
ZW06OmVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0RyYWdEYXRhSGFpa3UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Rh
dGE6OmFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1Bs
YWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0RhdGE6OmNyZWF0ZUNsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29u
dGFpbnNDb21wYXRpYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29u
dGFpbnNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9EcmFnSW1hZ2VIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ0ltYWdl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6c2NhbGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzc29sdmVEcmFnSW1h
Z2VUb0ZyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2Up
OgorCiAyMDA5LTA3LTAyICBQaWVycmUgZCdIZXJiZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMDNiODk3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ29udGV4dE1lbnVIYWlrdS5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorCisjaW5jbHVkZSAiQ29u
dGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworI2luY2x1ZGUgPExvb3Blci5o
PgorI2luY2x1ZGUgPE1lbnUuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBGSVhNRTogVGhpcyBjbGFzcyBpc24ndCB1c2VkIHlldAorY2xhc3Mg
Q29udGV4dE1lbnVSZWNlaXZlciA6IHB1YmxpYyBCTG9vcGVyCit7CitwdWJsaWM6CisgICAgQ29u
dGV4dE1lbnVSZWNlaXZlcihDb250ZXh0TWVudSogbWVudSkKKyAgICAgICAgOiBCTG9vcGVyKCJj
b250ZXh0X21lbnVfcmVjZWl2ZXIiKQorICAgICAgICAsIG1fbWVudShtZW51KQorICAgIHsKKyAg
ICAgICAgbV9yZXN1bHQgPSAtMTsKKyAgICB9CisKKyAgICB2b2lkIEhhbmRsZU1lc3NhZ2UoQk1l
c3NhZ2UqIG1zZykKKyAgICB7CisgICAgICAgIG1fcmVzdWx0ID0gbXNnLT53aGF0OworICAgICAg
ICBpZiAobV9yZXN1bHQgIT0gLTEpIHsKKyAgICAgICAgICAgIEJNZW51SXRlbSogaXRlbSA9IG1f
bWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLT5GaW5kSXRlbShtX3Jlc3VsdCk7CisgICAgICAg
ICAgICBpZiAoIWl0ZW0pIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yOiBDb250ZXh0
IG1lbnUgaXRlbSB3aXRoIGNvZGUgJWkgbm90IGZvdW5kIVxuIiwgbV9yZXN1bHQpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENvbnRleHRNZW51
SXRlbSBjbUl0ZW0oaXRlbSk7CisgICAgICAgICAgICBtX21lbnUtPmNvbnRyb2xsZXIoKS0+Y29u
dGV4dE1lbnVJdGVtU2VsZWN0ZWQoJmNtSXRlbSk7CisgICAgICAgICAgICBjbUl0ZW0ucmVsZWFz
ZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludCBSZXN1
bHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBDb250ZXh0TWVudSogbV9tZW51OworICAgIGludCBtX3Jlc3VsdDsKK307CisKK0NvbnRl
eHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCisgICAgOiBt
X2hpdFRlc3RSZXN1bHQocmVzdWx0KQorICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKE5VTEwp
Cit7CisgICAgLyogR2V0IHBvc2l0aW9uICovCisgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSAm
JiByZXN1bHQuaW5uZXJOb2RlKCktPmRvY3VtZW50KCkpIHsKKyAgICAgICAgQlZpZXcqIHZpZXcg
PSByZXN1bHQuaW5uZXJOb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCktPnZpZXcoKS0+cGxhdGZv
cm1XaWRnZXQoKTsKKyAgICAgICAgaW50IGNoaWxkID0gMDsKKyAgICAgICAgd2hpbGUgKHZpZXct
PkNoaWxkQXQoY2hpbGQpKSB7CisgICAgICAgICAgICBpZiAodmlldy0+Q2hpbGRBdChjaGlsZCkt
Pk5hbWUoKSA9PSAic2Nyb2xsX3ZpZXdfY2FudmFzIikgeworICAgICAgICAgICAgICAgIG1fcG9p
bnQgPSB2aWV3LT5DaGlsZEF0KGNoaWxkKS0+Q29udmVydFRvU2NyZWVuKEJQb2ludChyZXN1bHQu
cG9pbnQoKS54KCksIHJlc3VsdC5wb2ludCgpLnkoKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hpbGQrKzsKKyAgICAgICAgfQorICAgIH0K
KyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQk1lbnUoImNvbnRleHRfbWVudSIpOwor
fQorCitDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKK3sKKyAgICBkZWxldGUgbV9wbGF0Zm9y
bURlc2NyaXB0aW9uOworfQorCit2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRN
ZW51SXRlbSYgaXRlbSkKK3sKKyAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7CisKKyAg
ICBCTWVudUl0ZW0qIGJJdGVtID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwor
ICAgIGlmIChiSXRlbSkKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5BZGRJdGVtKGJJ
dGVtKTsKK30KKwordW5zaWduZWQgQ29udGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+Q291bnRJdGVtcygpOworfQorCit2b2lk
IENvbnRleHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0
ZW0mIGl0ZW0pCit7CisgICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOworCisgICAgQk1l
bnVJdGVtKiBiSXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKKyAgICBp
ZiAoYkl0ZW0pCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+QWRkSXRlbShiSXRlbSwg
cG9zaXRpb24pOworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxh
dGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbjsKK30KKwordm9pZCBDb250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQoreworICAgIGlmIChzdGF0aWNfY2FzdDxCTWVudSo+
KG1lbnUpID09IG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZGVsZXRlIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24g
PSBzdGF0aWNfY2FzdDxCTWVudSo+KG1lbnUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVJdGVtSGFp
a3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1YWJhZgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVJdGVtSGFpa3UuY3BwCkBA
IC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHph
Y2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZl
bmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29udGV4dE1lbnVJdGVtLmgiCisKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxNZW51Lmg+CisjaW5jbHVkZSA8TWVudUl0
ZW0uaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVt
KFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtKQoreworICAgIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiA9IGl0ZW07Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENv
bnRleHRNZW51KiBzdWJNZW51KQoreworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBC
TWVudUl0ZW0oc3ViTWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJNZXNzYWdlKENvbnRleHRNZW51SXRlbVRh
Z05vQWN0aW9uKSk7Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKENvbnRl
eHRNZW51SXRlbVR5cGUgdHlwZSwgQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSwgQ29udGV4dE1lbnUq
IHN1Yk1lbnUpCit7CisgICAgaWYgKHR5cGUgPT0gQWN0aW9uVHlwZSkKKyAgICAgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJNZW51SXRlbShCU3RyaW5nKHRpdGxlKS5TdHJpbmcoKSwg
bmV3IEJNZXNzYWdlKGFjdGlvbikpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gU2VwYXJhdG9yVHlw
ZSkKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJTZXBhcmF0b3JJdGVtKCk7
CisgICAgZWxzZSB7CisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCTWVudUl0
ZW0oc3ViTWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLCBuZXcgQk1lc3NhZ2UoYWN0aW9uKSk7
CisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+U2V0TGFiZWwoQlN0cmluZyh0aXRsZSku
U3RyaW5nKCkpOworICAgIH0KK30KKworQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVt
KCkKK3sKKyAgICBkZWxldGUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworfQorCitQbGF0Zm9ybU1l
bnVJdGVtRGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlw
dGlvbigpCit7CisgICAgQk1lbnVJdGVtKiBpdGVtID0gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwor
ICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IE5VTEw7CisgICAgcmV0dXJuIGl0ZW07Cit9CisK
K0NvbnRleHRNZW51SXRlbVR5cGUgQ29udGV4dE1lbnVJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAg
ICBpZiAoZHluYW1pY19jYXN0PEJTZXBhcmF0b3JJdGVtKj4obV9wbGF0Zm9ybURlc2NyaXB0aW9u
KSkKKyAgICAgICAgcmV0dXJuIFNlcGFyYXRvclR5cGU7CisgICAgaWYgKG1fcGxhdGZvcm1EZXNj
cmlwdGlvbi0+U3VibWVudSgpKQorICAgICAgICByZXR1cm4gU3VibWVudVR5cGU7CisgICAgcmV0
dXJuIEFjdGlvblR5cGU7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKENvbnRl
eHRNZW51SXRlbVR5cGUgdHlwZSkKK3sKKyAgICBDb250ZXh0TWVudUFjdGlvbiB0aGVBY3Rpb24g
PSBhY3Rpb24oKTsKKyAgICBTdHJpbmcgdGhlVGl0bGUgPSB0aXRsZSgpOworICAgIEJNZW51KiBz
dWJNZW51ID0gcGxhdGZvcm1TdWJNZW51KCk7CisgICAgZGVsZXRlIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbjsKKworICAgIGlmICh0eXBlID09IEFjdGlvblR5cGUpCisgICAgICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbiA9IG5ldyBCTWVudUl0ZW0oQlN0cmluZyh0aGVUaXRsZSkuU3RyaW5nKCksIG5l
dyBCTWVzc2FnZSh0aGVBY3Rpb24pKTsKKyAgICBlbHNlIGlmICh0eXBlID09IFNlcGFyYXRvclR5
cGUpCisgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG5ldyBCU2VwYXJhdG9ySXRlbSgp
OworICAgIGVsc2UgeworICAgICAgICBpZiAoc3ViTWVudSkgeworICAgICAgICAgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uID0gbmV3IEJNZW51SXRlbShzdWJNZW51LCBuZXcgQk1lc3NhZ2UodGhl
QWN0aW9uKSk7CisgICAgICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlNldExhYmVsKEJT
dHJpbmcodGhlVGl0bGUpLlN0cmluZygpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgQk1lbnVJdGVtKEJTdHJpbmcodGhlVGl0bGUpLlN0
cmluZygpLCBuZXcgQk1lc3NhZ2UodGhlQWN0aW9uKSk7CisgICAgfQorfQorCitDb250ZXh0TWVu
dUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Bs
YXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiBDb250ZXh0TWVudUl0ZW1UYWdOb0Fj
dGlvbjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q29udGV4dE1lbnVBY3Rpb24+
KG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+TWVzc2FnZSgpLT53aGF0KTsKK30KKwordm9pZCBDb250
ZXh0TWVudUl0ZW06OnNldEFjdGlvbihDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCit7CisgICAg
aWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKKyAgICAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9u
LT5NZXNzYWdlKCktPndoYXQgPSBhY3Rpb247Cit9CisKK1N0cmluZyBDb250ZXh0TWVudUl0ZW06
OnRpdGxlKCkgY29uc3QgCit7CisgICAgaWYgKG1fcGxhdGZvcm1EZXNjcmlwdGlvbikKKyAgICAg
ICAgcmV0dXJuICIiOworICAgIHJldHVybiBCU3RyaW5nKG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+
TGFiZWwoKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJp
bmcmIHRpdGxlKQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSBiZXR0ZXIgd2F5
IHRvIGNvbnZlcnQgV2ViS2l0IFN0cmluZ3MgaW50byBjIHN0cmluZ3MKKyAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24tPlNldExhYmVsKEJTdHJpbmcodGl0bGUpLlN0cmluZygpKTsKK30KKworUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlN1Ym1lbnUoKTsKK30K
Kwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCit7
CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSBtX3BsYXRmb3JtRGVzY3JpcHRpb24gaXMgdmFsaWQK
KyAgICBjb25zdCBjaGFyKiB0aXRsZSA9IG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+TGFiZWwoKTsK
KyAgICBkZWxldGUgbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiA9IG5ldyBCTWVudUl0ZW0obWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLCBuZXcgQk1l
c3NhZ2UoYWN0aW9uKCkpKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlNldExhYmVsKHRp
dGxlKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQoYm9vbCBjaGVja2Vk
KQoreworICAgIGlmIChtX3BsYXRmb3JtRGVzY3JpcHRpb24pCisgICAgICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbi0+U2V0TWFya2VkKGNoZWNrZWQpOworfQorCit2b2lkIENvbnRleHRNZW51SXRl
bTo6c2V0RW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0
aW9uKQorICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPlNldEVuYWJsZWQoZW5hYmxlKTsK
K30KKworYm9vbCBDb250ZXh0TWVudUl0ZW06OmVuYWJsZWQoKSBjb25zdAoreworICAgIGlmICgh
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
bV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5Jc0VuYWJsZWQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnRGF0YUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvRHJhZ0RhdGFIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjQyYjMxMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJh
Z0RhdGFIYWlrdS5jcHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZEhh
aWt1LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNDb2xvcigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIERyYWdE
YXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
U3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0NvbG9yIERyYWdEYXRhOjphc0NvbG9y
KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBDb2xvcigpOwor
fQorCitXVEY6OlBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBEcmFnRGF0YTo6Y3JlYXRlQ2xpcGJvYXJk
KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldyBD
bGlwYm9hcmRIYWlrdShwb2xpY3ksIHRydWUpOworfQorCitib29sIERyYWdEYXRhOjpjb250YWlu
c0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbnNDb2xvcigp
IHx8IGNvbnRhaW5zVVJMKCkgfHwgY29udGFpbnNQbGFpblRleHQoKTsKK30KKworYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyogdGl0bGUp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9j
dW1lbnQqKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9E
cmFnSW1hZ2VIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdh
NzlmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdl
SGFpa3UuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgorI2luY2x1ZGUgIkltYWdlLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERyYWdJbWFnZVJl
ZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRTaXplKDAsIDApOwor
fQorCit2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBp
bWFnZSwgRmxvYXRTaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGlt
YWdlOworfQorCitEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJ
bWFnZVJlZiBpbWFnZSwgZmxvYXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gaW1hZ2U7Cit9CisKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1h
Z2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0RyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7ICAgICAKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32302</attachid>
            <date>2009-07-06 06:34:04 -0700</date>
            <delta_ts>2009-07-16 23:42:03 -0700</delta_ts>
            <desc>Patch to add a third bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-third-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>26365</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAyN2JmNGRlZDllZmVhNGU2MDNiYzYzMjIzYTM4ZjI3M2Q3Y2Y4ZGU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgNiBKdWwgMjAwOSAxNTozMjozMCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgdGhpcmQgYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjggKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRXZlbnRMb29wSGFpa3UuY3BwICAgICAgICB8
ICAgNDEgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHAgICAg
ICB8ICAgNDYgKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3RlbUhhaWt1LmNwcCAg
ICAgICB8ICAgODIgKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9LZXlib2FyZENvZGVzLmgg
ICAgICAgICAgIHwgIDU0NCArKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L01JTUVUeXBlUmVnaXN0cnlIYWlrdS5jcHAgfCAgIDc1ICsrKwogNiBmaWxlcyBjaGFu
Z2VkLCA4MTYgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVTeXN0ZW1IYWlrdS5jcHAK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0tleWJvYXJkQ29kZXMu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdp
c3RyeUhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggYWNmMWMyZS4uMTNkNWYzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAwOS0wNy0w
NiAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHRoaXJkIGJ1bmNoIG9m
IEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NTIKKworICAgICAgICBBZGRpbmcgZml2ZSBm
aWxlcywgRXZlbnRMb29wSGFpa3UuY3BwLCBGaWxlQ2hvb3NlckhhaWt1LmNwcCwKKyAgICAgICAg
RmlsZVN5c3RlbUhhaWt1LmNwcCwgS2V5Ym9hcmRDb2Rlcy5oIGFuZCBNSU1FVHlwZVJlZ2lzdHJ5
SGFpa3UuY3BwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wOjpjeWNsZSk6CisgICAgICAgICog
cGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZUNob29zZXI6OkZpbGVDaG9vc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVD
aG9vc2VyOjpiYXNlbmFtZUZvcldpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9GaWxl
U3lzdGVtSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpob21lRGlyZWN0b3J5UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjbG9z
ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6dW5sb2FkTW9kdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Omxpc3REaXJlY3RvcnkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L0tleWJvYXJkQ29kZXMuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlN
RVR5cGVGb3JFeHRlbnNpb24pOgorCiAyMDA5LTA3LTAyICBQaWVycmUgZCdIZXJiZW1vbnQgIDxw
ZGhlcmJlbW9udEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0V2ZW50TG9vcEhhaWt1LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUwZTZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9FdmVudExvb3BIYWlrdS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2
ZW50TG9vcC5oIgorCisjaW5jbHVkZSA8YXBwL0FwcGxpY2F0aW9uLmg+CisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQoreworICAgIGlmICghYmVfYXBw
KQorICAgICAgICBtX2VuZGVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGU0MmI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNwcApAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlQ2hvb3Nl
ci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJJY29uLmgiCisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWxlQ2hvb3Nlcjo6RmlsZUNob29zZXIoRmlsZUNo
b29zZXJDbGllbnQqIGNsaWVudCwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKKyAgICA6IG1fY2xp
ZW50KGNsaWVudCkKKyAgICAsIG1fZmlsZW5hbWVzKCkKKyAgICAsIG1faWNvbihjaG9vc2VJY29u
KGZpbGVuYW1lKSkKK3sKKyAgICBtX2ZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpOworfQorCitT
dHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYsIGludCB3aWR0
aCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0ZpbGVTeXN0ZW1IYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Zp
bGVTeXN0ZW1IYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQw
MGNkMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3Rl
bUhhaWt1LmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
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
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0NTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQoreworICAgIHJldHVybiBzdHJpbmcudXRmOCgpOworfQorCitTdHJpbmcgaG9tZURpcmVjdG9y
eVBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZpeCwgUGxhdGZv
cm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBoYW5k
bGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIHJldHVybiBDU3RyaW5nKCk7Cit9
CisKK3ZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4g
bGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQor
eworICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gZW50cmllczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0tleWJvYXJkQ29kZXMuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvS2V5Ym9hcmRDb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjZmMGQ0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0tleWJvYXJkQ29kZXMuaApAQCAtMCwwICsxLDU0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBLZXlib2FyZENvZGVzX2gKKyNkZWZp
bmUgS2V5Ym9hcmRDb2Rlc19oCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIC8vIFZLX0xC
VVRUT04gKDAxKSBMZWZ0IG1vdXNlIGJ1dHRvbgorICAgIC8vIFZLX1JCVVRUT04gKDAyKSBSaWdo
dCBtb3VzZSBidXR0b24KKyAgICAvLyBWS19DQU5DRUwgKDAzKSBDb250cm9sLWJyZWFrIHByb2Nl
c3NpbmcKKyAgICAvLyBWS19NQlVUVE9OICgwNCkgTWlkZGxlIG1vdXNlIGJ1dHRvbiAodGhyZWUt
YnV0dG9uIG1vdXNlKQorICAgIC8vIFZLX1hCVVRUT04xICgwNSkKKyAgICAvLyBWS19YQlVUVE9O
MiAoMDYpCisKKyAgICAvLyBWS19CQUNLICgwOCkgQkFDS1NQQUNFIGtleQorICAgIGNvbnN0IGlu
dCBWS19CQUNLID0gMHgwODsKKworICAgIC8vIFZLX1RBQiAoMDkpIFRBQiBrZXkKKyAgICBjb25z
dCBpbnQgVktfVEFCID0gMHgwOTsKKworICAgIC8vIFZLX0NMRUFSICgwQykgQ0xFQVIga2V5Cisg
ICAgY29uc3QgaW50IFZLX0NMRUFSID0gMHgwQzsKKworICAgIC8vIFZLX1JFVFVSTiAoMEQpCisg
ICAgY29uc3QgaW50IFZLX1JFVFVSTiA9IDB4MEQ7CisKKyAgICAvLyBWS19TSElGVCAoMTApIFNI
SUZUIGtleQorICAgIGNvbnN0IGludCBWS19TSElGVCA9IDB4MTA7CisKKyAgICAvLyBWS19DT05U
Uk9MICgxMSkgQ1RSTCBrZXkKKyAgICBjb25zdCBpbnQgVktfQ09OVFJPTCA9IDB4MTE7CisKKyAg
ICAvLyBWS19NRU5VICgxMikgQUxUIGtleQorICAgIGNvbnN0IGludCBWS19NRU5VID0gMHgxMjsK
KworICAgIC8vIFZLX1BBVVNFICgxMykgUEFVU0Uga2V5CisgICAgY29uc3QgaW50IFZLX1BBVVNF
ID0gMHgxMzsKKworICAgIC8vIFZLX0NBUElUQUwgKDE0KSBDQVBTIExPQ0sga2V5CisgICAgY29u
c3QgaW50IFZLX0NBUElUQUwgPSAweDE0OworCisgICAgLy8gVktfS0FOQSAoMTUpIElucHV0IE1l
dGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCisgICAgY29uc3QgaW50IFZLX0tBTkEgPSAweDE1
OworCisgICAgLy8gVktfSEFOR1VFTCAoMTUpIElNRSBIYW5ndWVsIG1vZGUgKG1haW50YWluZWQg
Zm9yIGNvbXBhdGliaWxpdHk7IHVzZSBWS19IQU5HVUwpCisgICAgLy8gVktfSEFOR1VMICgxNSkg
SU1FIEhhbmd1bCBtb2RlCisgICAgY29uc3QgaW50IFZLX0hBTkdVTCA9IDB4MTU7CisKKyAgICAv
LyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgY29uc3QgaW50IFZLX0pVTkpBID0g
MHgxNzsKKworICAgIC8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKKyAgICBjb25zdCBp
bnQgVktfRklOQUwgPSAweDE4OworCisgICAgLy8gVktfSEFOSkEgKDE5KSBJTUUgSGFuamEgbW9k
ZQorICAgIGNvbnN0IGludCBWS19IQU5KQSA9IDB4MTk7CisKKyAgICAvLyBWS19LQU5KSSAoMTkp
IElNRSBLYW5qaSBtb2RlCisgICAgY29uc3QgaW50IFZLX0tBTkpJID0gMHgxOTsKKworICAgIC8v
IFZLX0VTQ0FQRSAoMUIpIEVTQyBrZXkKKyAgICBjb25zdCBpbnQgVktfRVNDQVBFID0gMHgxQjsK
KworICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAorICAgIGNvbnN0IGludCBWS19D
T05WRVJUID0gMHgxQzsKKworICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVy
dAorICAgIGNvbnN0IGludCBWS19OT05DT05WRVJUID0gMHgxRDsKKworICAgIC8vIFZLX0FDQ0VQ
VCAoMUUpIElNRSBhY2NlcHQKKyAgICBjb25zdCBpbnQgVktfQUNDRVBUID0gMHgxRTsKKworICAg
IC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorICAgIGNvbnN0
IGludCBWS19NT0RFQ0hBTkdFID0gMHgxRjsKKworICAgIC8vIFZLX1NQQUNFICgyMCkgU1BBQ0VC
QVIKKyAgICBjb25zdCBpbnQgVktfU1BBQ0UgPSAweDIwOworCisgICAgLy8gVktfUFJJT1IgKDIx
KSBQQUdFIFVQIGtleQorICAgIGNvbnN0IGludCBWS19QUklPUiA9IDB4MjE7CisKKyAgICAvLyBW
S19ORVhUICgyMikgUEFHRSBET1dOIGtleQorICAgIGNvbnN0IGludCBWS19ORVhUID0gMHgyMjsK
KworICAgIC8vIFZLX0VORCAoMjMpIEVORCBrZXkKKyAgICBjb25zdCBpbnQgVktfRU5EID0gMHgy
MzsKKworICAgIC8vIFZLX0hPTUUgKDI0KSBIT01FIGtleQorICAgIGNvbnN0IGludCBWS19IT01F
ID0gMHgyNDsKKworICAgIC8vIFZLX0xFRlQgKDI1KSBMRUZUIEFSUk9XIGtleQorICAgIGNvbnN0
IGludCBWS19MRUZUID0gMHgyNTsKKworICAgIC8vIFZLX1VQICgyNikgVVAgQVJST1cga2V5Cisg
ICAgY29uc3QgaW50IFZLX1VQID0gMHgyNjsKKworICAgIC8vIFZLX1JJR0hUICgyNykgUklHSFQg
QVJST1cga2V5CisgICAgY29uc3QgaW50IFZLX1JJR0hUID0gMHgyNzsKKworICAgIC8vIFZLX0RP
V04gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNvbnN0IGludCBWS19ET1dOID0gMHgyODsKKwor
ICAgIC8vIFZLX1NFTEVDVCAoMjkpIFNFTEVDVCBrZXkKKyAgICBjb25zdCBpbnQgVktfU0VMRUNU
ID0gMHgyOTsKKworICAgIC8vIFZLX1BSSU5UICgyQSkgUFJJTlQga2V5CisgICAgY29uc3QgaW50
IFZLX1BSSU5UID0gMHgyQTsKKworICAgIC8vIFZLX0VYRUNVVEUgKDJCKSBFWEVDVVRFIGtleQor
ICAgIGNvbnN0IGludCBWS19FWEVDVVRFID0gMHgyQjsKKworICAgIC8vIFZLX1NOQVBTSE9UICgy
QykgUFJJTlQgU0NSRUVOIGtleQorICAgIGNvbnN0IGludCBWS19TTkFQU0hPVCA9IDB4MkM7CisK
KyAgICAvLyBWS19JTlNFUlQgKDJEKSBJTlMga2V5CisgICAgY29uc3QgaW50IFZLX0lOU0VSVCA9
IDB4MkQ7CisKKyAgICAvLyBWS19ERUxFVEUgKDJFKSBERUwga2V5CisgICAgY29uc3QgaW50IFZL
X0RFTEVURSA9IDB4MkU7CisKKyAgICAvLyBWS19IRUxQICgyRikgSEVMUCBrZXkKKyAgICBjb25z
dCBpbnQgVktfSEVMUCA9IDB4MkY7CisKKyAgICAvLyAoMzApIDAga2V5CisgICAgY29uc3QgaW50
IFZLXzAgPSAweDMwOworCisgICAgLy8gKDMxKSAxIGtleQorICAgIGNvbnN0IGludCBWS18xID0g
MHgzMTsKKworICAgIC8vICgzMikgMiBrZXkKKyAgICBjb25zdCBpbnQgVktfMiA9IDB4MzI7CisK
KyAgICAvLyAoMzMpIDMga2V5CisgICAgY29uc3QgaW50IFZLXzMgPSAweDMzOworCisgICAgLy8g
KDM0KSA0IGtleQorICAgIGNvbnN0IGludCBWS180ID0gMHgzNDsKKworICAgIC8vICgzNSkgNSBr
ZXk7CisKKyAgICBjb25zdCBpbnQgVktfNSA9IDB4MzU7CisKKyAgICAvLyAoMzYpIDYga2V5Cisg
ICAgY29uc3QgaW50IFZLXzYgPSAweDM2OworCisgICAgLy8gKDM3KSA3IGtleQorICAgIGNvbnN0
IGludCBWS183ID0gMHgzNzsKKworICAgIC8vICgzOCkgOCBrZXkKKyAgICBjb25zdCBpbnQgVktf
OCA9IDB4Mzg7CisKKyAgICAvLyAoMzkpIDkga2V5CisgICAgY29uc3QgaW50IFZLXzkgPSAweDM5
OworCisgICAgLy8gKDQxKSBBIGtleQorICAgIGNvbnN0IGludCBWS19BID0gMHg0MTsKKworICAg
IC8vICg0MikgQiBrZXkKKyAgICBjb25zdCBpbnQgVktfQiA9IDB4NDI7CisKKyAgICAvLyAoNDMp
IEMga2V5CisgICAgY29uc3QgaW50IFZLX0MgPSAweDQzOworCisgICAgLy8gKDQ0KSBEIGtleQor
ICAgIGNvbnN0IGludCBWS19EID0gMHg0NDsKKworICAgIC8vICg0NSkgRSBrZXkKKyAgICBjb25z
dCBpbnQgVktfRSA9IDB4NDU7CisKKyAgICAvLyAoNDYpIEYga2V5CisgICAgY29uc3QgaW50IFZL
X0YgPSAweDQ2OworCisgICAgLy8gKDQ3KSBHIGtleQorICAgIGNvbnN0IGludCBWS19HID0gMHg0
NzsKKworICAgIC8vICg0OCkgSCBrZXkKKyAgICBjb25zdCBpbnQgVktfSCA9IDB4NDg7CisKKyAg
ICAvLyAoNDkpIEkga2V5CisgICAgY29uc3QgaW50IFZLX0kgPSAweDQ5OworCisgICAgLy8gKDRB
KSBKIGtleQorICAgIGNvbnN0IGludCBWS19KID0gMHg0QTsKKworICAgIC8vICg0QikgSyBrZXkK
KyAgICBjb25zdCBpbnQgVktfSyA9IDB4NEI7CisKKyAgICAvLyAoNEMpIEwga2V5CisgICAgY29u
c3QgaW50IFZLX0wgPSAweDRDOworCisgICAgLy8gKDREKSBNIGtleQorICAgIGNvbnN0IGludCBW
S19NID0gMHg0RDsKKworICAgIC8vICg0RSkgTiBrZXkKKyAgICBjb25zdCBpbnQgVktfTiA9IDB4
NEU7CisKKyAgICAvLyAoNEYpIE8ga2V5CisgICAgY29uc3QgaW50IFZLX08gPSAweDRGOworCisg
ICAgLy8gKDUwKSBQIGtleQorICAgIGNvbnN0IGludCBWS19QID0gMHg1MDsKKworICAgIC8vICg1
MSkgUSBrZXkKKyAgICBjb25zdCBpbnQgVktfUSA9IDB4NTE7CisKKyAgICAvLyAoNTIpIFIga2V5
CisgICAgY29uc3QgaW50IFZLX1IgPSAweDUyOworCisgICAgLy8gKDUzKSBTIGtleQorICAgIGNv
bnN0IGludCBWS19TID0gMHg1MzsKKworICAgIC8vICg1NCkgVCBrZXkKKyAgICBjb25zdCBpbnQg
VktfVCA9IDB4NTQ7CisKKyAgICAvLyAoNTUpIFUga2V5CisgICAgY29uc3QgaW50IFZLX1UgPSAw
eDU1OworCisgICAgLy8gKDU2KSBWIGtleQorICAgIGNvbnN0IGludCBWS19WID0gMHg1NjsKKwor
ICAgIC8vICg1NykgVyBrZXkKKyAgICBjb25zdCBpbnQgVktfVyA9IDB4NTc7CisKKyAgICAvLyAo
NTgpIFgga2V5CisgICAgY29uc3QgaW50IFZLX1ggPSAweDU4OworCisgICAgLy8gKDU5KSBZIGtl
eQorICAgIGNvbnN0IGludCBWS19ZID0gMHg1OTsKKworICAgIC8vICg1QSkgWiBrZXkKKyAgICBj
b25zdCBpbnQgVktfWiA9IDB4NUE7CisKKyAgICAvLyBWS19MV0lOICg1QikgTGVmdCBXaW5kb3dz
IGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQpCisgICAgY29uc3QgaW50IFZLX0xXSU4g
PSAweDVCOworCisgICAgLy8gVktfUldJTiAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFs
IGtleWJvYXJkKQorICAgIGNvbnN0IGludCBWS19SV0lOID0gMHg1QzsKKworICAgIC8vIFZLX0FQ
UFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgIGNvbnN0IGlu
dCBWS19BUFBTID0gMHg1RDsKKworICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0ZXIgU2xlZXAg
a2V5CisgICAgY29uc3QgaW50IFZLX1NMRUVQID0gMHg1RjsKKworICAgIC8vIFZLX05VTVBBRDAg
KDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQwID0gMHg2
MDsKKworICAgIC8vIFZLX05VTVBBRDEgKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAgIGNv
bnN0IGludCBWS19OVU1QQUQxID0gMHg2MTsKKworICAgIC8vIFZLX05VTVBBRDIgKDYyKSBOdW1l
cmljIGtleXBhZCAyIGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQyID0gMHg2MjsKKworICAg
IC8vIFZLX05VTVBBRDMgKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgIGNvbnN0IGludCBW
S19OVU1QQUQzID0gMHg2MzsKKworICAgIC8vIFZLX05VTVBBRDQgKDY0KSBOdW1lcmljIGtleXBh
ZCA0IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ0ID0gMHg2NDsKKworICAgIC8vIFZLX05V
TVBBRDUgKDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ1
ID0gMHg2NTsKKworICAgIC8vIFZLX05VTVBBRDYgKDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQor
ICAgIGNvbnN0IGludCBWS19OVU1QQUQ2ID0gMHg2NjsKKworICAgIC8vIFZLX05VTVBBRDcgKDY3
KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ3ID0gMHg2NzsK
KworICAgIC8vIFZLX05VTVBBRDggKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorICAgIGNvbnN0
IGludCBWS19OVU1QQUQ4ID0gMHg2ODsKKworICAgIC8vIFZLX05VTVBBRDkgKDY5KSBOdW1lcmlj
IGtleXBhZCA5IGtleQorICAgIGNvbnN0IGludCBWS19OVU1QQUQ5ID0gMHg2OTsKKworICAgIC8v
IFZLX01VTFRJUExZICg2QSkgTXVsdGlwbHkga2V5CisgICAgY29uc3QgaW50IFZLX01VTFRJUExZ
ID0gMHg2QTsKKworICAgIC8vIFZLX0FERCAoNkIpIEFkZCBrZXkKKyAgICBjb25zdCBpbnQgVktf
QUREID0gMHg2QjsKKworICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKKyAg
ICBjb25zdCBpbnQgVktfU0VQQVJBVE9SID0gMHg2QzsKKworICAgIC8vIFZLX1NVQlRSQUNUICg2
RCkgU3VidHJhY3Qga2V5CisgICAgY29uc3QgaW50IFZLX1NVQlRSQUNUID0gMHg2RDsKKworICAg
IC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAgIGNvbnN0IGludCBWS19ERUNJTUFM
ID0gMHg2RTsKKworICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKKyAgICBjb25zdCBp
bnQgVktfRElWSURFID0gMHg2RjsKKworICAgIC8vIFZLX0YxICg3MCkgRjEga2V5CisgICAgY29u
c3QgaW50IFZLX0YxID0gMHg3MDsKKworICAgIC8vIFZLX0YyICg3MSkgRjIga2V5CisgICAgY29u
c3QgaW50IFZLX0YyID0gMHg3MTsKKworICAgIC8vIFZLX0YzICg3MikgRjMga2V5CisgICAgY29u
c3QgaW50IFZLX0YzID0gMHg3MjsKKworICAgIC8vIFZLX0Y0ICg3MykgRjQga2V5CisgICAgY29u
c3QgaW50IFZLX0Y0ID0gMHg3MzsKKworICAgIC8vIFZLX0Y1ICg3NCkgRjUga2V5CisgICAgY29u
c3QgaW50IFZLX0Y1ID0gMHg3NDsKKworICAgIC8vIFZLX0Y2ICg3NSkgRjYga2V5CisgICAgY29u
c3QgaW50IFZLX0Y2ID0gMHg3NTsKKworICAgIC8vIFZLX0Y3ICg3NikgRjcga2V5CisgICAgY29u
c3QgaW50IFZLX0Y3ID0gMHg3NjsKKworICAgIC8vIFZLX0Y4ICg3NykgRjgga2V5CisgICAgY29u
c3QgaW50IFZLX0Y4ID0gMHg3NzsKKworICAgIC8vIFZLX0Y5ICg3OCkgRjkga2V5CisgICAgY29u
c3QgaW50IFZLX0Y5ID0gMHg3ODsKKworICAgIC8vIFZLX0YxMCAoNzkpIEYxMCBrZXkKKyAgICBj
b25zdCBpbnQgVktfRjEwID0gMHg3OTsKKworICAgIC8vIFZLX0YxMSAoN0EpIEYxMSBrZXkKKyAg
ICBjb25zdCBpbnQgVktfRjExID0gMHg3QTsKKworICAgIC8vIFZLX0YxMiAoN0IpIEYxMiBrZXkK
KyAgICBjb25zdCBpbnQgVktfRjEyID0gMHg3QjsKKworICAgIC8vIFZLX0YxMyAoN0MpIEYxMyBr
ZXkKKyAgICBjb25zdCBpbnQgVktfRjEzID0gMHg3QzsKKworICAgIC8vIFZLX0YxNCAoN0QpIEYx
NCBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE0ID0gMHg3RDsKKworICAgIC8vIFZLX0YxNSAoN0Up
IEYxNSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE1ID0gMHg3RTsKKworICAgIC8vIFZLX0YxNiAo
N0YpIEYxNiBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE2ID0gMHg3RjsKKworICAgIC8vIFZLX0Yx
NyAoODBIKSBGMTcga2V5CisgICAgY29uc3QgaW50IFZLX0YxNyA9IDB4ODA7CisKKyAgICAvLyBW
S19GMTggKDgxSCkgRjE4IGtleQorICAgIGNvbnN0IGludCBWS19GMTggPSAweDgxOworCisgICAg
Ly8gVktfRjE5ICg4MkgpIEYxOSBrZXkKKyAgICBjb25zdCBpbnQgVktfRjE5ID0gMHg4MjsKKwor
ICAgIC8vIFZLX0YyMCAoODNIKSBGMjAga2V5CisgICAgY29uc3QgaW50IFZLX0YyMCA9IDB4ODM7
CisKKyAgICAvLyBWS19GMjEgKDg0SCkgRjIxIGtleQorICAgIGNvbnN0IGludCBWS19GMjEgPSAw
eDg0OworCisgICAgLy8gVktfRjIyICg4NUgpIEYyMiBrZXkKKyAgICBjb25zdCBpbnQgVktfRjIy
ID0gMHg4NTsKKworICAgIC8vIFZLX0YyMyAoODZIKSBGMjMga2V5CisgICAgY29uc3QgaW50IFZL
X0YyMyA9IDB4ODY7CisKKyAgICAvLyBWS19GMjQgKDg3SCkgRjI0IGtleQorICAgIGNvbnN0IGlu
dCBWS19GMjQgPSAweDg3OworCisgICAgLy8gVktfTlVNTE9DSyAoOTApIE5VTSBMT0NLIGtleQor
ICAgIGNvbnN0IGludCBWS19OVU1MT0NLID0gMHg5MDsKKworICAgIC8vIFZLX1NDUk9MTCAoOTEp
IFNDUk9MTCBMT0NLIGtleQorICAgIGNvbnN0IGludCBWS19TQ1JPTEwgPSAweDkxOworCisgICAg
Ly8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKKyAgICBjb25zdCBpbnQgVktfTFNISUZU
ID0gMHhBMDsKKworICAgIC8vIFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQorICAgIGNv
bnN0IGludCBWS19SU0hJRlQgPSAweEExOworCisgICAgLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0
IENPTlRST0wga2V5CisgICAgY29uc3QgaW50IFZLX0xDT05UUk9MID0gMHhBMjsKKworICAgIC8v
IFZLX1JDT05UUk9MIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICBjb25zdCBpbnQgVktfUkNP
TlRST0wgPSAweEEzOworCisgICAgLy8gVktfTE1FTlUgKEE0KSBMZWZ0IE1FTlUga2V5CisgICAg
Y29uc3QgaW50IFZLX0xNRU5VID0gMHhBNDsKKworICAgIC8vIFZLX1JNRU5VIChBNSkgUmlnaHQg
TUVOVSBrZXkKKyAgICBjb25zdCBpbnQgVktfUk1FTlUgPSAweEE1OworCisgICAgLy8gVktfQlJP
V1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5CisgICAgY29u
c3QgaW50IFZLX0JST1dTRVJfQkFDSyA9IDB4QTY7CisKKyAgICAvLyBWS19CUk9XU0VSX0ZPUldB
UkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICBjb25zdCBp
bnQgVktfQlJPV1NFUl9GT1JXQVJEID0gMHhBNzsKKworICAgIC8vIFZLX0JST1dTRVJfUkVGUkVT
SCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQorICAgIGNvbnN0IGlu
dCBWS19CUk9XU0VSX1JFRlJFU0ggPSAweEE4OworCisgICAgLy8gVktfQlJPV1NFUl9TVE9QIChB
OSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5CisgICAgY29uc3QgaW50IFZLX0JS
T1dTRVJfU1RPUCA9IDB4QTk7CisKKyAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRv
d3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5CisgICAgY29uc3QgaW50IFZLX0JST1dTRVJf
U0VBUkNIID0gMHhBQTsKKworICAgIC8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93
cyAyMDAwL1hQOiBCcm93c2VyIEZhdm9yaXRlcyBrZXkKKyAgICBjb25zdCBpbnQgVktfQlJPV1NF
Ul9GQVZPUklURVMgPSAweEFCOworCisgICAgLy8gVktfQlJPV1NFUl9IT01FIChBQykgV2luZG93
cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQorICAgIGNvbnN0IGludCBWS19C
Uk9XU0VSX0hPTUUgPSAweEFDOworCisgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dz
IDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQorICAgIGNvbnN0IGludCBWS19WT0xVTUVfTVVURSA9
IDB4QUQ7CisKKyAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdpbmRvd3MgMjAwMC9YUDogVm9s
dW1lIERvd24ga2V5CisgICAgY29uc3QgaW50IFZLX1ZPTFVNRV9ET1dOID0gMHhBRTsKKworICAg
IC8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQorICAg
IGNvbnN0IGludCBWS19WT0xVTUVfVVAgPSAweEFGOworCisgICAgLy8gVktfTUVESUFfTkVYVF9U
UkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKKyAgICBjb25zdCBpbnQg
VktfTUVESUFfTkVYVF9UUkFDSyA9IDB4QjA7CisKKyAgICAvLyBWS19NRURJQV9QUkVWX1RSQUNL
IChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFjayBrZXkKKyAgICBjb25zdCBpbnQg
VktfTUVESUFfUFJFVl9UUkFDSyA9IDB4QjE7CisKKyAgICAvLyBWS19NRURJQV9TVE9QIChCMikg
V2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlhIGtleQorICAgIGNvbnN0IGludCBWS19NRURJQV9T
VE9QID0gMHhCMjsKKworICAgIC8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIw
MDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5CisgICAgY29uc3QgaW50IFZLX01FRElBX1BMQVlf
UEFVU0UgPSAweEIzOworCisgICAgLy8gVktfTEFVTkNIX01BSUwgKEI0KSBXaW5kb3dzIDIwMDAv
WFA6IFN0YXJ0IE1haWwga2V5CisgICAgY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NQUlMID0g
MHhCNDsKKworICAgIC8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAv
WFA6IFNlbGVjdCBNZWRpYSBrZXkKKyAgICBjb25zdCBpbnQgVktfTUVESUFfTEFVTkNIX01FRElB
X1NFTEVDVCA9IDB4QjU7CisKKyAgICAvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAw
MC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKKyAgICBjb25zdCBpbnQgVktfTUVESUFfTEFV
TkNIX0FQUDEgPSAweEI2OworCisgICAgLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIw
MDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5CisgICAgY29uc3QgaW50IFZLX01FRElBX0xB
VU5DSF9BUFAyID0gMHhCNzsKKworICAgIC8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2Vs
bGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAw
L1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKKyAgICBjb25z
dCBpbnQgVktfT0VNXzEgPSAweEJBOworCisgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dz
IDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgY29uc3Qg
aW50IFZLX09FTV9QTFVTID0gMHhCQjsKKworICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRv
d3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKKyAgICBjb25z
dCBpbnQgVktfT0VNX0NPTU1BID0gMHhCQzsKKworICAgIC8vIFZLX09FTV9NSU5VUyAoQkQpIFdp
bmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKKyAgICBj
b25zdCBpbnQgVktfT0VNX01JTlVTID0gMHhCRDsKKworICAgIC8vIFZLX09FTV9QRVJJT0QgKEJF
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Cisg
ICAgY29uc3QgaW50IFZLX09FTV9QRVJJT0QgPSAweEJFOworCisgICAgLy8gVktfT0VNXzIgKEJG
KSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJv
YXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAn
Lz8nIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fMiA9IDB4QkY7CisKKyAgICAvLyBWS19PRU1f
MyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkg
a2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwg
dGhlICdgficga2V5CisgICAgY29uc3QgaW50IFZLX09FTV8zID0gMHhDMDsKKworICAgIC8vIFZL
X09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFy
eSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJv
YXJkLCB0aGUgJ1t7JyBrZXkKKyAgICBjb25zdCBpbnQgVktfT0VNXzQgPSAweERCOworCisgICAg
Ly8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNh
biB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQg
a2V5Ym9hcmQsIHRoZSAnXHwnIGtleQorICAgIGNvbnN0IGludCBWS19PRU1fNSA9IDB4REM7CisK
KyAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFu
ZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgY29uc3QgaW50IFZLX09FTV82ID0gMHhE
RDsKKworICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVT
IHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQor
ICAgIGNvbnN0IGludCBWS19PRU1fNyA9IDB4REU7CisKKyAgICAvLyBWS19PRU1fOCAoREYpIFVz
ZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQu
CisgICAgY29uc3QgaW50IFZLX09FTV84ID0gMHhERjsKKworICAgIC8vIFZLX09FTV8xMDIgKEUy
KSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhlIGJh
Y2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKKyAgICBjb25zdCBpbnQgVktf
T0VNXzEwMiA9IDB4RTI7CisKKyAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85
OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5Cisg
ICAgY29uc3QgaW50IFZLX1BST0NFU1NLRVkgPSAweEU1OworCisgICAgLy8gVktfUEFDS0VUIChF
NykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFzIGlm
IHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdvcmQg
b2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlucHV0
IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5QVVQs
U2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKKyAgICBjb25zdCBpbnQgVktfUEFD
S0VUID0gMHhFNzsKKworICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorICAgIGNvbnN0IGlu
dCBWS19BVFROID0gMHhGNjsKKworICAgIC8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5CisgICAg
Y29uc3QgaW50IFZLX0NSU0VMID0gMHhGNzsKKworICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwg
a2V5CisgICAgY29uc3QgaW50IFZLX0VYU0VMID0gMHhGODsKKworICAgIC8vIFZLX0VSRU9GIChG
OSkgRXJhc2UgRU9GIGtleQorICAgIGNvbnN0IGludCBWS19FUkVPRiA9IDB4Rjk7CisKKyAgICAv
LyBWS19QTEFZIChGQSkgUGxheSBrZXkKKyAgICBjb25zdCBpbnQgVktfUExBWSA9IDB4RkE7CisK
KyAgICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkKKyAgICBjb25zdCBpbnQgVktfWk9PTSA9IDB4
RkI7CisKKyAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICAg
IGNvbnN0IGludCBWS19OT05BTUUgPSAweEZDOworCisgICAgLy8gVktfUEExIChGRCkgUEExIGtl
eQorICAgIGNvbnN0IGludCBWS19QQTEgPSAweEZEOworCisgICAgLy8gVktfT0VNX0NMRUFSIChG
RSkgQ2xlYXIga2V5CisgICAgY29uc3QgaW50IFZLX09FTV9DTEVBUiA9IDB4RkU7CisKKyAgICBj
b25zdCBpbnQgVktfVU5LTk9XTiA9IDA7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBLZXlib2FyZENvZGVzX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
TUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlNRVR5
cGVSZWdpc3RyeUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
OWFlMTlhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9NSU1FVHlw
ZVJlZ2lzdHJ5SGFpa3UuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKKyAgICBjb25zdCBj
aGFyKiBleHRlbnNpb247CisgICAgY29uc3QgY2hhciogbWltZVR5cGU7Cit9OworCitzdGF0aWMg
Y29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKKyAgICB7ICJibXAiLCAiaW1h
Z2UvYm1wIiB9LAorICAgIHsgImdpZiIsICJpbWFnZS9naWYiIH0sCisgICAgeyAiaHRtbCIsICJ0
ZXh0L2h0bWwiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwgICAKKyAgICB7ICJq
cGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAianBnIiwgImltYWdlL2pwZWciIH0sCisgICAg
eyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAorICAgIHsgInBkZiIsICJhcHBs
aWNhdGlvbi9wZGYiIH0sCisgICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKKyAgICB7ICJyc3Mi
LCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIg
fSwKKyAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAidHh0IiwgInRleHQvcGxh
aW4iIH0sCisgICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKKyAgICB7ICJ4bWwiLCAi
dGV4dC94bWwiIH0sCisgICAgeyAieHNsIiwgInRleHQveHNsIiB9LAorICAgIHsgInhodG1sIiwg
ImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyAgICB7IDAsIDAgfQorfTsKKworLy8gRklYTUU6
IFVzZSB0aGUgSGFpa3UgTUlNRSByZWdpc3RyeQorU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6Omdl
dE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIFN0cmluZyBz
dHIgPSBleHQubG93ZXIoKTsKKyAgICBjb25zdCBFeHRlbnNpb25NYXAgKmV4dE1hcCA9IGV4dGVu
c2lvbk1hcDsKKyAgICB3aGlsZSAoZXh0TWFwLT5leHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHN0
ciA9PSBleHRNYXAtPmV4dGVuc2lvbikKKyAgICAgICAgICAgIHJldHVybiBleHRNYXAtPm1pbWVU
eXBlOworICAgICAgICArK2V4dE1hcDsKKyAgICB9CisgICAgLy8gdW5rbm93biwgbGV0J3MganVz
dCBhc3N1bWUgcGxhaW4gdGV4dAorICAgIHJldHVybiAidGV4dC9wbGFpbiI7Cit9Cit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32303</attachid>
            <date>2009-07-06 06:45:38 -0700</date>
            <delta_ts>2009-07-16 06:53:44 -0700</delta_ts>
            <desc>Patch to add a fourth bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-fourth-bunch-of-Haiku-specific-files-for-Web.patch</filename>
            <type>text/plain</type>
            <size>17899</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3NGRhNDA1NWU0ZDNiMWU5NmFiNTZjYTU2MDc5MjQ1YjczOTBhMGU5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgNiBKdWwgMjAwOSAxNTo0NTowMSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgZm91cnRoIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMzEgKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgICAg
ICAgICB8ICAxMjYgKysrKysrKysrKysrCiAuLi4vcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXli
b2FyZEV2ZW50SGFpa3UuY3BwICB8ICAyMDMgKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwIHwgICA4OCArKysrKysr
KysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3BwIHwg
ICA0NCArKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA0OTIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9h
cmRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAK
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGFjZjFjMmUuLjNiMWFkNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDctMDYgIE1heGltZSBTaW1v
biAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBmb3VydGggYnVuY2ggb2YgSGFpa3Utc3BlY2lm
aWMgZmlsZXMgZm9yIFdlYkNvcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjk1MgorCisgICAgICAgIEFkZGVkIGZvdXIgZmlsZXMsIFBhc3RlYm9h
cmRIYWlrdS5jcHAsIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcCwKKyAgICAgICAgUGxh
dGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwIGFuZCBQbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAK
KworICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cGxhaW5U
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50
SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JIYWlr
dUtleUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0tleUNvZGVGb3JLZXlFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9h
cmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2Ft
YmlndWF0ZUtleURvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9Q
bGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudCk6CisKIDIwMDktMDct
MDIgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVtb250QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3Rl
Ym9hcmRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmODgx
ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVib2FyZEhh
aWt1LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIK
KyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIm1hcmt1
cC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
KyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgorI2luY2x1ZGUgPENsaXBib2FyZC5oPgorI2lu
Y2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQoreworfQorCitQYXN0ZWJvYXJkKiBQ
YXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7CisgICAgc3RhdGljIFBhc3RlYm9hcmQq
IHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOworICAgIHJldHVybiBwYXN0ZWJvYXJkOwor
fQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdl
LCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJhbWUpCit7CisgICAgQk1lc3Nh
Z2UqIGRhdGE7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgYmVf
Y2xpcGJvYXJkLT5DbGVhcigpOworICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRh
dGEoKSkpIHsKKyAgICAgICAgICAgIGRhdGEtPkFkZFN0cmluZygidGV4dC9wbGFpbiIsIEJTdHJp
bmcoZnJhbWUtPnNlbGVjdGVkVGV4dCgpKSk7CisgICAgICAgICAgICBiZV9jbGlwYm9hcmQtPkNv
bW1pdCgpOworICAgICAgICB9CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAg
fQorfQorCitib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpw
bGFpblRleHQoRnJhbWUqIGZyYW1lKQoreworICAgIEJTdHJpbmcgc3RyaW5nOworICAgIEJNZXNz
YWdlKiBkYXRhOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlm
ICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgZGF0YS0+Rmlu
ZFN0cmluZygidGV4dC9wbGFpbiIsICZzdHJpbmcpOworICAgICAgICB9CisgICAgICAgIGJlX2Ns
aXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1Bhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFt
ZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd1BsYWluVGV4
dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBCTWVzc2FnZSogZGF0YTsKKworICAgIGlm
IChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7
CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgeworICAgICAgICAg
ICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgdXJsLnN0cmluZygpKTsKKyAgICAgICAg
ICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJv
YXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShO
b2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCit7CisgICAgaWYgKGJlX2NsaXBib2Fy
ZC0+TG9jaygpKSB7CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q2xlYXIoKTsKKyAgICAgICAgYmVf
Y2xpcGJvYXJkLT5Db21taXQoKTsKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWI0YWZjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHAKQEAgLTAsMCAr
MSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2
ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxh
bmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aCIKKworI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8SW50ZXJmYWNlRGVmcy5o
PgorI2luY2x1ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFN0cmluZyBrZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2RlKGNoYXIgc2luZ2xlQnl0ZSwgaW50
MzIga2V5Q29kZSkKK3sKKyAgICAgICAgc3dpdGNoIChzaW5nbGVCeXRlKSB7CisgICAgICAgIGNh
c2UgQl9GVU5DVElPTl9LRVk6CisKKyAgICAgICAgICAgIHN3aXRjaChrZXlDb2RlKSB7CisgICAg
ICAgICAgICBjYXNlIEJfRjFfS0VZOgorICAgICAgICAgICAgICAgIHJldHVybiAiRjEiOworICAg
ICAgICAgICAgY2FzZSBCX0YyX0tFWToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkYyIjsKKyAg
ICAgICAgICAgIGNhc2UgQl9GM19LRVk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJGMyI7Cisg
ICAgICAgICAgICBjYXNlIEJfRjRfS0VZOgorICAgICAgICAgICAgICAgIHJldHVybiAiRjQiOwor
ICAgICAgICAgICAgY2FzZSBCX0Y1X0tFWToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkY1IjsK
KyAgICAgICAgICAgIGNhc2UgQl9GNl9LRVk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJGNiI7
CisgICAgICAgICAgICBjYXNlIEJfRjdfS0VZOgorICAgICAgICAgICAgICAgIHJldHVybiAiRjci
OworICAgICAgICAgICAgY2FzZSBCX0Y4X0tFWToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkY4
IjsKKyAgICAgICAgICAgIGNhc2UgQl9GOV9LRVk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJG
OSI7CisgICAgICAgICAgICBjYXNlIEJfRjEwX0tFWToKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkYxMCI7CisgICAgICAgICAgICBjYXNlIEJfRjExX0tFWToKKyAgICAgICAgICAgICAgICByZXR1
cm4gIkYxMSI7CisgICAgICAgICAgICBjYXNlIEJfRjEyX0tFWToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIkYxMiI7CisgICAgICAgICAgICBjYXNlIEJfUFJJTlRfS0VZOgorICAgICAgICAgICAg
ICAgIHJldHVybiAiUHJpbnQiOworICAgICAgICAgICAgY2FzZSBCX1BBVVNFX0tFWToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIlBhdXNlIjsKKyAgICAgICAgICAgIGNhc2UgQl9TQ1JPTExfS0VZ
OgorICAgICAgICAgICAgICAgIHJldHVybiAiIjsgLy9GSVgKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b0FTQ0lJ
VXBwZXIoKGludClrZXlDb2RlKSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBCX0JBQ0tTUEFDRToKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA5
IjsKKyAgICAgICAgY2FzZSBCX0xFRlRfQVJST1c6CisgICAgICAgICAgICByZXR1cm4gIkxlZnQi
OworICAgICAgICBjYXNlIEJfUklHSFRfQVJST1c6CisgICAgICAgICAgICByZXR1cm4gIlJpZ2h0
IjsKKyAgICAgICAgY2FzZSBCX1VQX0FSUk9XOgorICAgICAgICAgICAgcmV0dXJuICJVcCI7Cisg
ICAgICAgIGNhc2UgQl9ET1dOX0FSUk9XOgorICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKKyAg
ICAgICAgY2FzZSBCX0lOU0VSVDoKKyAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICAg
ICAgY2FzZSBCX0VOVEVSOgorICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAgICAgIGNh
c2UgQl9ERUxFVEU6CisgICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7CisgICAgICAgIGNhc2Ug
Ql9IT01FOgorICAgICAgICAgICAgcmV0dXJuICJIb21lIjsKKyAgICAgICAgY2FzZSBCX0VORDoK
KyAgICAgICAgICAgIHJldHVybiAiRW5kIjsKKyAgICAgICAgY2FzZSBCX1BBR0VfVVA6CisgICAg
ICAgICAgICByZXR1cm4gIlBhZ2VVcCI7CisgICAgICAgIGNhc2UgQl9QQUdFX0RPV046CisgICAg
ICAgICAgICByZXR1cm4gIlBhZ2VEb3duIjsKKyAgICAgICAgLy9jYXNlIEJfU1BBQ0U6CisgICAg
ICAgIC8vICByZXR1cm4gIiI7CisgICAgICAgIGNhc2UgQl9UQUI6CisgICAgICAgICAgICByZXR1
cm4gIlUrMDAwOSI7CisgICAgICAgIC8vY2FzZSBCX0VTQ0FQRToKKyAgICAgICAgLy8gIHJldHVy
biAiIjsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9y
bWF0KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoKGludClrZXlDb2RlKSk7CisgICAgfQorfQorCitz
dGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoY2hhciBzaW5nbGVCeXRlKQorewor
ICAgIHN3aXRjaCAoc2luZ2xlQnl0ZSkgeworICAgIGNhc2UgQl9CQUNLU1BBQ0U6CisgICAgICAg
IHJldHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkKKyAgICBjYXNlIEJfVEFCOgor
ICAgICAgIHJldHVybiBWS19UQUI7IC8vICgwOSkgVEFCIGtleSovIAorICAgIGNhc2UgQl9SRVRV
Uk46CisgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1cm4ga2V5CisgICAgY2Fz
ZSBCX0VTQ0FQRToKKyAgICAgICAgcmV0dXJuIFZLX0VTQ0FQRTsgLy8gKDFCKSBFU0Mga2V5Cisg
ICAgY2FzZSBCX1NQQUNFOgorICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VC
QVIKKyAgICBjYXNlIEJfUEFHRV9VUDoKKyAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAoMjEp
IFBBR0UgVVAga2V5CisgICAgY2FzZSBCX1BBR0VfRE9XTjoKKyAgICAgICAgcmV0dXJuIFZLX05F
WFQ7IC8vICgyMikgUEFHRSBET1dOIGtleQorICAgIGNhc2UgQl9FTkQ6CisgICAgICAgIHJldHVy
biBWS19FTkQ7IC8vICgyMykgRU5EIGtleQorICAgIGNhc2UgQl9IT01FOgorICAgICAgICByZXR1
cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgIGNhc2UgQl9MRUZUX0FSUk9XOgorICAg
ICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFSUk9XIGtleQorICAgIGNhc2UgQl9V
UF9BUlJPVzoKKyAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAg
IGNhc2UgQl9SSUdIVF9BUlJPVzoKKyAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJ
R0hUIEFSUk9XIGtleQorICAgIGNhc2UgQl9ET1dOX0FSUk9XOgorICAgICAgICByZXR1cm4gVktf
RE9XTjsgLy8gKDI4KSBET1dOIEFSUk9XIGtleQorICAgIGNhc2UgQl9JTlNFUlQ6CisgICAgICAg
IHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5TIGtleQorICAgIGNhc2UgQl9ERUxFVEU6Cisg
ICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQorICAgIGNhc2UgMHgyZToK
KyAgICAgICAgcmV0dXJuKDApOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigwKTsKKyAg
ICB9Cit9CisKK1BsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEJN
ZXNzYWdlICptZXNzYWdlKQoreworICAgIEJTdHJpbmcgYnl0ZXMgPSBtZXNzYWdlLT5GaW5kU3Ry
aW5nKCJieXRlcyIpOworICAgIG1fdGV4dCA9IFN0cmluZzo6ZnJvbVVURjgoYnl0ZXMuU3RyaW5n
KCksIGJ5dGVzLkxlbmd0aCgpKTsKKyAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKGJ5dGVz
LlN0cmluZygpLCBieXRlcy5MZW5ndGgoKSk7CisgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRl
bnRpZmllckZvckhhaWt1S2V5Q29kZShieXRlcy5CeXRlQXQoMCksIG1lc3NhZ2UtPkZpbmRJbnQz
Migia2V5IikpOworCisgICAgaWYgKG1lc3NhZ2UtPndoYXQgPT0gQl9LRVlfVVApCisgICAgICAg
IG1fdHlwZSA9IEtleVVwOworICAgIGVsc2UgaWYgKG1lc3NhZ2UtPndoYXQgPT0gQl9LRVlfRE9X
TikKKyAgICAgICAgbV90eXBlID0gS2V5RG93bjsKKworICAgIG1fYXV0b1JlcGVhdCA9IHRydWU7
CisgICAgbV9jdHJsS2V5ID0gZmFsc2U7CisgICAgbV9hbHRLZXkgPSBmYWxzZTsKKyAgICBtX21l
dGFLZXkgPSBmYWxzZTsgICAgCisgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dz
S2V5Q29kZUZvcktleUV2ZW50KGJ5dGVzLkJ5dGVBdCgwKSk7IAorICAgIG1faXNLZXlwYWQgPSBm
YWxzZTsKKyAgICBtX3NoaWZ0S2V5ID0gZmFsc2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sKQoreworICAg
IC8vIENhbiBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBSYXdLZXlEb3duIG9yIENo
YXIsCisgICAgLy8gYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMu
CisgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBtX3R5cGUgPSB0eXBlOworICAg
IGlmICh0eXBlID09IFJhd0tleURvd24pIHsKKyAgICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7Cisg
ICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKKyAgICAgICAgbV93aW5kb3dzVmlydHVhbEtl
eUNvZGUgPSAwOworICAgIH0KK30KKworYm9vbCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJl
bnRDYXBzTG9ja1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk1MDllYzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcApAQCAtMCwwICsxLDg4IEBA
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
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlICJD
dXJyZW50VGltZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUg
PFN1cHBvcnREZWZzLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgQk1l
c3NhZ2UqIG1zZywgQlBvaW50IHNjcmVlblBvaW50KQoreworICAgIG1fdGltZXN0YW1wID0gIFdU
Rjo6Y3VycmVudFRpbWUoKTsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQobXNnLT5GaW5kUG9p
bnQoImJlOnZpZXdfd2hlcmUiKSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHNj
cmVlblBvaW50KTsKKworICAgIG1fc2hpZnRLZXkgPSBmYWxzZTsgLy8gRklYTUUKKyAgICBtX2N0
cmxLZXkgPSBmYWxzZTsKKyAgICBtX2FsdEtleSA9IGZhbHNlOworICAgIG1fbWV0YUtleSA9IGZh
bHNlOworCisgICAgaW50MzIgYnV0dG9ucyA9IG1zZy0+RmluZEludDMyKCJidXR0b25zIik7Cisg
ICAgc3dpdGNoIChidXR0b25zKSB7CisgICAgY2FzZSAwOgorICAgICAgICBtX2J1dHRvbiA9IE5v
QnV0dG9uOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6IAorICAgICAgICBtX2J1dHRvbiA9
IExlZnRCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgbV9idXR0
b24gPSBSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
bV9idXR0b24gPSBNaWRkbGVCdXR0b247CisgICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICBz
d2l0Y2ggKG1zZy0+d2hhdCkgeworICAgIGNhc2UgQl9NT1VTRV9ET1dOOgorICAgICAgICBtX2V2
ZW50VHlwZSA9IE1vdXNlRXZlbnRQcmVzc2VkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJf
TU9VU0VfVVA6CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2VkOworICAg
ICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247IC8vIEZJWE1FOiB3ZWJjb3JlIHdhbnRzIHRvIGtu
b3cgdGhlIGJ1dHRvbiByZWxlYXNlZCBidXQgd2UgZG9uJ3Qga25vdy4KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCX01PVVNFX01PVkVEOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZl
bnRNb3ZlZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9ldmVudFR5
cGUgPSBNb3VzZUV2ZW50TW92ZWQ7CisgICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICBtX2Ns
aWNrQ291bnQgPSBtc2ctPkZpbmRJbnQzMigiY2xpY2tzIik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdo
ZWVsRXZlbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxF
dmVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmU2MmRj
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVs
RXZlbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNs
dWRlIDxNZXNzYWdlLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF0Zm9ybVdoZWVs
RXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChCTWVzc2FnZSAqbWVzc2FnZSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjMK
Cg==
</data>
<flag name="review"
          id="16767"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32304</attachid>
            <date>2009-07-06 07:12:03 -0700</date>
            <delta_ts>2009-07-16 07:22:55 -0700</delta_ts>
            <desc>Patch to add ScrollBar and ScrollView code specific to Haiku.</desc>
            <filename>Added-ScrollBar-and-ScrollView-code-specific-to-Haik.patch</filename>
            <type>text/plain</type>
            <size>46263</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA5YjU5N2I1MTIyZTUwZWMxZGQ4YjJlYmI3ZWUwY2Y0NzU1NGFmODIyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgNiBKdWwgMjAwOSAxNjoxMDo1MCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIFNjcm9sbEJhciBhbmQgU2Nyb2xsVmlldyBjb2RlIHNwZWNpZmljIHRvIEhhaWt1LgoKLS0t
CiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEw
NiArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXIuaCAgICAg
ICAgfCAgIDYzICsrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJI
YWlrdS5jcHAgfCAgMTI5ICsrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmll
d0NhbnZhc0hhaWt1LmNwcCAgfCAgMjA0ICsrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oICAgIHwgICA3NyArKysrCiBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAgICAgICAgIHwgIDMxMSArKysrKysrKysrKysr
KysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAgICAgICAgICAgIHwg
IDM5OSArKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3Jv
bGxWaWV3LmggICAgICAgICAgICAgfCAgIDgyICsrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDEzNzEg
aW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3BwCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3
Q2FudmFzSGFpa3UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
U2Nyb2xsVmlld0hhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvV0tTY3JvbGxWaWV3LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvV0tTY3JvbGxWaWV3LmgKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGFjZjFjMmUuLjY0ZTcwOGMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA5IEBA
CisyMDA5LTA3LTA2ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIFNjcm9s
bEJhciBhbmQgU2Nyb2xsVmlldyBjb2RlIHNwZWNpZmljIHRvIEhhaWt1LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NTIKKworICAgICAgICBBZGRp
bmcgc2V2ZW4gZmlsZXMsIFBsYXRmb3JtU2Nyb2xsQmFyLmgsIFBsYXRmb3JtU2Nyb2xsQmFySGFp
a3UuY3BwLAorICAgICAgICBTY3JvbGxWaWV3Q2FudmFzSGFpa3UuY3BwLCBTY3JvbGxWaWV3Q2Fu
dmFzSGFpa3UuaCwKKyAgICAgICAgU2Nyb2xsVmlld0hhaWt1LmNwcCwgV0tTY3JvbGxWaWV3LmNw
cCBhbmQgV0tTY3JvbGxWaWV3LmgKKworICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3Jt
U2Nyb2xsQmFyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxiYXI6
OmlzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsYmFy
Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0
Zm9ybVNjcm9sbEJhckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChIYWlrdVNjcm9sbEJhcjo6
SGFpa3VTY3JvbGxCYXIpOgorICAgICAgICAoSGFpa3VTY3JvbGxCYXI6OlZhbHVlQ2hhbmdlZCk6
CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIpOgorICAgICAg
ICAoUGxhdGZvcm1TY3JvbGxiYXI6On5QbGF0Zm9ybVNjcm9sbGJhcik6CisgICAgICAgIChQbGF0
Zm9ybVNjcm9sbGJhcjo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFy
Ojp1cGRhdGVUaHVtYlBvc2l0aW9uKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlByb3BvcnRpb24pOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OndpZHRoKToK
KyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpoZWlnaHQpOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6OnNldFJlY3QpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnNldEVuYWJs
ZWQpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1lc3NhZ2VSZWNlaXZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlTW92ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZURvd24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZVVwKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RG9TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlld0NhbnZhc0hhaWt1OjpLZXlEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXdDYW52YXNIYWlrdTo6S2V5VXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZh
c0hhaWt1OjpXaW5kb3dBY3RpdmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0Nh
bnZhc0hhaWt1OjpGcmFtZVJlc2l6ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Njcm9s
bFZpZXdDYW52YXNIYWlrdS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdD
YW52YXNIYWlrdTo6U2V0U2Nyb2xsQmFyTWF4Vik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Q2FudmFzSGFpa3U6OlNldFNjcm9sbEJhck1heEgpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlld0NhbnZhc0hhaWt1OjpTZXRTY3JvbGxWaWV3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9o
YWlrdS9TY3JvbGxWaWV3SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpTY3JvbGxWaWV3UHJpdmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6QXR0YWNoZWRUb1dpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6S2V5RG93
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6S2V5
VXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlZp
c2libGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJp
dmF0ZTo6U2V0Q29udGVudFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OkNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpDb250ZW50V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OkNvbnRlbnRIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbE9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6U2Nyb2xsQnkp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhck1vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsYmFyTW9kZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1BZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OnBsYXRmb3JtU2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OnBsYXRmb3JtQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OnBsYXRmb3JtU2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1RvU2NyZWVuKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q2FuQmxpdE9uU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtQ2FuQmxpdE9uU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtSXNPZmZzY3JlZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6c2V0QWxsb3dzU2Nyb2xsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9XS1Nj
cm9sbFZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6V0tTY3JvbGxWaWV3
KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6fldLU2Nyb2xsVmlldyk6CisgICAgICAgIChXS1Nj
cm9sbFZpZXc6Okluc3RhbnRpYXRlKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6QXJjaGl2ZSk6
CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkF0dGFjaGVkVG9XaW5kb3cpOgorICAgICAgICAoV0tT
Y3JvbGxWaWV3OjpEZXRhY2hlZEZyb21XaW5kb3cpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpB
bGxBdHRhY2hlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkFsbERldGFjaGVkKToKKyAgICAg
ICAgKFdLU2Nyb2xsVmlldzo6U2Nyb2xsQmFyKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6U2Ny
b2xsQmFyTW9kZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlNldFNjcm9sbEJhck1vZGUpOgor
ICAgICAgICAoV0tTY3JvbGxWaWV3OjpTZXRUYXJnZXQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3
OjpUYXJnZXQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNZXNzYWdlUmVjZWl2ZWQpOgorICAg
ICAgICAoV0tTY3JvbGxWaWV3OjpNb3VzZURvd24pOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpN
b3VzZVVwKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TW91c2VNb3ZlZCk6CisgICAgICAgIChX
S1Njcm9sbFZpZXc6OkZyYW1lTW92ZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpSZXNpemVU
b1ByZWZlcnJlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkdldFByZWZlcnJlZFNpemUpOgor
ICAgICAgICAoV0tTY3JvbGxWaWV3OjpDYWxjRnJhbWUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3
OjpNb2RpZnlGbGFncyk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OldpbmRvd0FjdGl2YXRlZCk6
CisgICAgICAgIChXS1Njcm9sbFZpZXc6Ok1ha2VGb2N1cyk6CisgICAgICAgIChXS1Njcm9sbFZp
ZXc6OlJlc29sdmVTcGVjaWZpZXIpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpHZXRTdXBwb3J0
ZWRTdWl0ZXMpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNaW5TaXplKToKKyAgICAgICAgKFdL
U2Nyb2xsVmlldzo6UHJlZmVycmVkU2l6ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlBlcmZv
cm0pOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oOiBBZGRlZC4KKwog
MjAwOS0wNy0wMiAgUGllcnJlIGQnSGVyYmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvUGxhdGZvcm1TY3JvbGxCYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xNGQwMzk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0
Zm9ybVNjcm9sbEJhci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybVNjcm9sbGJhcl9oCisjZGVmaW5lIFBsYXRmb3JtU2Ny
b2xsYmFyX2gKKworI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgor
CisjaW5jbHVkZSA8aW50ZXJmYWNlL1Njcm9sbEJhci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIFBsYXRmb3JtU2Nyb2xsYmFyIDogcHVibGljIFNjcm9sbGJhciB7Cisg
ICAgcHVibGljOgorICAgICAgICBQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOworICAgICAgICB2aXJ0
dWFsIH5QbGF0Zm9ybVNjcm9sbGJhcigpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdl
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB2aXJ0dWFsIGludCB3aWR0aCgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0RW5hYmxlZChib29sKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworCisgICAgICAgIHN0YXRpYyBpbnQg
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oQl9I
X1NDUk9MTF9CQVJfSEVJR0hUKTsgfQorICAgICAgICBzdGF0aWMgaW50IHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KEJfVl9TQ1JPTExfQkFSX1dJRFRI
KTsgfQorCisgICAgICAgIHZvaWQgdmFsdWVDaGFuZ2VkKGZsb2F0KTsKKyAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3BvcnRpb24oKTsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbGF0Zm9ybVNjcm9sbGJhcl9oCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZTVjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3BwCkBAIC0wLDAg
KzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVh
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
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKKworI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8Vmll
dy5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisKK2NsYXNzIEhhaWt1U2Nyb2xs
QmFyIDogcHVibGljIEJTY3JvbGxCYXIKK3sKK3B1YmxpYzoKKyAgICBIYWlrdVNjcm9sbEJhcihQ
bGF0Zm9ybVNjcm9sbGJhciogcGxhdGZvcm1TY3JvbGxiYXIsIEJWaWV3KiB0YXJnZXQsIG9yaWVu
dGF0aW9uIHBvc3R1cmUpIAorICAgICAgICA6IEJTY3JvbGxCYXIoKHBvc3R1cmUgPT0gQl9WRVJU
SUNBTCkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSZWN0KDAsIDAsIEJfVl9TQ1JPTExf
QkFSX1dJRFRILCAwKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBCUmVjdCgwLCAwLCAwLCBC
X0hfU0NST0xMX0JBUl9IRUlHSFQpLAorICAgICAgICAgICAgICAgICAgICAgInNjcm9sbF9iYXIi
LCB0YXJnZXQsIDAsIDEsIHBvc3R1cmUpCisgICAgeworICAgICAgICBtX3BsYXRmb3JtU2Nyb2xs
YmFyID0gcGxhdGZvcm1TY3JvbGxiYXI7CisgICAgfQorCisgICAgdm9pZCBWYWx1ZUNoYW5nZWQo
ZmxvYXQgbmV3VmFsdWUpCisgICAgeworICAgICAgICBtX3BsYXRmb3JtU2Nyb2xsYmFyLT52YWx1
ZUNoYW5nZWQobmV3VmFsdWUpOworICAgIH0KK3ByaXZhdGU6CisgICAgUGxhdGZvcm1TY3JvbGxi
YXIqIG1fcGxhdGZvcm1TY3JvbGxiYXI7Cit9OworCitQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZv
cm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9s
bGJhckNvbnRyb2xTaXplIHNpemUpCisgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlv
biwgc2l6ZSkKK3sKKyAgICBIYWlrdVNjcm9sbEJhciogc2Nyb2xsYmFyOworICAgIGlmIChvcmll
bnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbmV3IEhhaWt1U2Nyb2xsQmFy
KHRoaXMsIDAsIEJfVkVSVElDQUwpOworICAgIGVsc2UKKyAgICAgICAgbmV3IEhhaWt1U2Nyb2xs
QmFyKHRoaXMsIDAsIEJfSE9SSVpPTlRBTCk7CisKKyAgICBzZXRQbGF0Zm9ybVdpZGdldChzY3Jv
bGxiYXIpOworfSAgICAgICAgICAgICAgIAorCitQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3Jt
U2Nyb2xsYmFyKCkKK3sKKyAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKK30KKwordm9pZCBQbGF0
Zm9ybVNjcm9sbGJhcjo6dmFsdWVDaGFuZ2VkKGZsb2F0IG5ld1ZhbHVlKQoreworICAgIHNldFZh
bHVlKChpbnQpIG5ld1ZhbHVlKTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRl
VGh1bWJQb3NpdGlvbigpCit7CisgICAgSGFpa3VTY3JvbGxCYXIqIHNjcm9sbGJhciA9IHN0YXRp
Y19jYXN0PEhhaWt1U2Nyb2xsQmFyKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisgICAgc2Nyb2xsYmFy
LT5TZXRWYWx1ZShtX2N1cnJlbnRQb3MpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1
cGRhdGVUaHVtYlByb3BvcnRpb24oKQoreworICAgIEhhaWt1U2Nyb2xsQmFyKiBzY3JvbGxiYXIg
PSBzdGF0aWNfY2FzdDxIYWlrdVNjcm9sbEJhcio+KHBsYXRmb3JtV2lkZ2V0KCkpOworICAgIGZs
b2F0IHByb3BvcnRpb24gPSAoZmxvYXQpIG1fdmlzaWJsZVNpemUgLyAgKGZsb2F0KSBtX3RvdGFs
U2l6ZTsKKyAgICBpZiAoIShwcm9wb3J0aW9uID09IHNjcm9sbGJhci0+UHJvcG9ydGlvbigpIHx8
IHByb3BvcnRpb24gPCAwLjApKQorICAgICAgICBzY3JvbGxiYXItPlNldFByb3BvcnRpb24ocHJv
cG9ydGlvbik7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgoKSBjb25zdAorewor
ICAgIHJldHVybiBXaWRnZXQ6OndpZHRoKCk7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6
aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2lkZ2V0OjpoZWlnaHQoKTsKK30KKwordm9p
ZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRGcmFtZVJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFBsYXRmb3JtU2Ny
b2xsYmFyOjpzZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFy
OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorewor
ICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRoaXM/Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hZDc5M2YxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuY3BwCkBAIC0wLDAgKzEsMjA0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBn
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
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgiCisKKyNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNoYXJlZFRpbWVySGFpa3UuaCIKKyNpbmNsdWRl
ICJUeXBpbmdDb21tYW5kLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5j
bHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxTY3JvbGxCYXIuaD4KKyNpbmNsdWRl
IDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8TG9vcGVyLmg+CisjaW5jbHVkZSA8QXV0b2xvY2suaD4K
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbFZpZXdDYW52YXNIYWlrdTo6U2Nyb2xs
Vmlld0NhbnZhc0hhaWt1KFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIEJWaWV3KiBwYXJlbnQsIHVp
bnQzMiBmbGFncykKKyAgICA6IEJWaWV3KCJzY3JvbGxfdmlld19jYW52YXMiLCBCX1dJTExfRFJB
VyB8IEJfRlJBTUVfRVZFTlRTIHwgZmxhZ3MpCisgICAgLCBtX3Njcm9sbFZpZXcoc2Nyb2xsVmll
dykKK3sKKyAgICBTZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7Cit9CisKKwordm9pZCBTY3Jv
bGxWaWV3Q2FudmFzSGFpa3U6OkRyYXcoQlJlY3QgdXBkYXRlUmVjdCkKK3sKKyAgICBGcmFtZVZp
ZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAo
IWZ2IHx8ICFmdi0+ZnJhbWUoKSB8fCAhZnYtPmZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoZnYtPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAg
ICAgZnYtPmxheW91dCgpOworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCBjdHgodGhpcyk7
CisgICAgZnYtPmZyYW1lKCktPnBhaW50Q2FyZXQoJmN0eCwgMCwgMCwgdXBkYXRlUmVjdCk7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2Ug
Km1zZykKK3sKKyAgICAvLyBGSVhNRTogQ2FwdHVyZSBtb3VzZSB3aGVlbCBtZXNzYWdlcworICAg
IEJWaWV3OjpNZXNzYWdlUmVjZWl2ZWQobXNnKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFz
SGFpa3U6Ok1vdXNlTW92ZWQoQlBvaW50IHdoZXJlLCB1aW50MzIgY29kZSwgY29uc3QgQk1lc3Nh
Z2UqIGFfbWVzc2FnZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFm
di0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlBvaW50IHNjcmVlblBvc2l0aW9u
ID0gQ29udmVydFRvU2NyZWVuKHdoZXJlKTsKKworICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQoYV9tZXNzYWdlLCBzY3JlZW5Qb3Np
dGlvbikpOworCisgICAgQlZpZXc6Ok1vdXNlTW92ZWQod2hlcmUsIGNvZGUsIGFfbWVzc2FnZSk7
Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZURvd24oQlBvaW50IHdoZXJl
KQoreworICAgIEJNZXNzYWdlKiBtZXNzYWdlID0gTG9vcGVyKCktPkN1cnJlbnRNZXNzYWdlKCk7
CisgICAgaWYgKCFtZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3
KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICBC
UG9pbnQgc2NyZWVuUG9zaXRpb24gPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICBmdi0+
ZnJhbWUoKS0+bG9hZGVyKCktPnJlc2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24o
KTsKKworICAgaW50MzIgYnV0dG9ucyA9IG1lc3NhZ2UtPkZpbmRJbnQzMigiYnV0dG9ucyIpOwor
CisgICBpZiAoYnV0dG9ucyA9PSAyKQorICAgICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+c2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2Usc2NyZWVu
UG9zaXRpb24pKTsKKyAgIGVsc2UKKyAgICAgICBmdi0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZU1vdXNlUHJlc3NFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQobWVzc2FnZSxzY3JlZW5Q
b3NpdGlvbikpOworCisgICBCVmlldzo6TW91c2VEb3duKHdoZXJlKTsKK30KKwordm9pZCBTY3Jv
bGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlVXAoQlBvaW50IHdoZXJlKQoreworICAgIEJNZXNzYWdl
KiBtZXNzYWdlID0gTG9vcGVyKCktPkN1cnJlbnRNZXNzYWdlKCk7CisgICAgaWYgKCFtZXNzYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8
ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlBvaW50IHNjcmVlblBvc2l0
aW9uID0gQ29udmVydFRvU2NyZWVuKHdoZXJlKTsKKworICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3Nh
Z2UsIHNjcmVlblBvc2l0aW9uKSk7CisKKyAgICBCVmlldzo6TW91c2VVcCh3aGVyZSk7Cit9CisK
K3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpEb1Njcm9sbChib29sIGlzSG9yaXpvbnRhbCwg
ZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNj
cm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5RG93bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVt
Qnl0ZXMpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+Q3VycmVudE1lc3Nh
Z2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9s
bFZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgIAlyZXR1cm47CisKKyAg
ICBpZighZnYtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9ybUtleWJv
YXJkRXZlbnQobWVzc2FnZSkpKQorICAgIAlwcmludGYoIi0tPktleURvd246IG5vdCBhcnJpdmVk
XG4iKTsgICAgCisKKyAgICBpZigoaW50KWJ5dGVzWzBdICE9IChpbnQpQl9UQUIpCisgICAgICAg
IEJWaWV3OjpLZXlEb3duKGJ5dGVzLCBudW1CeXRlcyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0Nh
bnZhc0hhaWt1OjpLZXlVcChjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpCit7Cisg
ICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBp
ZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
ZnYgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAg
IGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgIAlyZXR1cm47CisKKyAgICBpZihmdi0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChtZXNz
YWdlKSkpCisgICAgCXByaW50ZigiLS0+S2V5VXA6IG5vdCBhcnJpdmVkXG4iKTsgCisKKyAgICBp
ZihieXRlc1swXSAhPSAoaW50KUJfVEFCKQorICAgICAgICBCVmlldzo6S2V5VXAoYnl0ZXMsIG51
bUJ5dGVzKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OldpbmRvd0FjdGl2YXRl
ZChib29sIHN0YXRlKQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2
LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmdi0+ZnJhbWUoKS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHN0YXRlKTsKK30KKworCit2b2lkIFNjcm9sbFZp
ZXdDYW52YXNIYWlrdTo6RnJhbWVSZXNpemVkKGZsb2F0IHcsZmxvYXQgaCkKK3sKKyAgICBpZiAo
IW1fc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Nyb2xsVmlldy0+
Y29udGVudHNXaWR0aCgpICE9IChpbnQpKHcgKyAxKQorICAgICAgICB8fCBtX3Njcm9sbFZpZXct
PmNvbnRlbnRzSGVpZ2h0KCkgIT0gKGludCkoaCArIDEpKSB7CisgICAgCVdlYkNvcmU6OkZyYW1l
VmlldyogZnYgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcp
OworICAgIAlpZiAoZnYpCisgICAgICAgICAgICBmdi0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzFkZjY4OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
U2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxWaWV3Q2FudmFzSGFp
a3VfaAorI2RlZmluZSBTY3JvbGxWaWV3Q2FudmFzSGFpa3VfaAorCisjaW5jbHVkZSA8Vmlldy5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBTY3JvbGxWaWV3OworCisgICAg
Y2xhc3MgU2Nyb2xsVmlld0NhbnZhc0hhaWt1IDogcHVibGljIEJWaWV3CisgICAgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU2Nyb2xsVmlld0NhbnZhc0hhaWt1KFNjcm9sbFZpZXcqLCBCVmlldyog
cGFyZW50LCB1aW50MzIgZmxhZ3MpOworCisgICAgICAgIHZvaWQgU2V0U2Nyb2xsQmFyTWF4Vihm
bG9hdCB2VikKKyAgICAgICAgeworICAgICAgICAgICAgbV9zY3JvbGxCYXJNYXhWID0gdlY7Cisg
ICAgICAgIH0KKyAgICAgICAgdm9pZCBTZXRTY3JvbGxCYXJNYXhIKGZsb2F0IHZIKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX3Njcm9sbEJhck1heEggPSB2SDsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgRHJhdyhCUmVjdCB1cGRhdGVSZWN0KTsKKyAgICAgICAgdm9pZCBNZXNzYWdlUmVj
ZWl2ZWQoQk1lc3NhZ2UgKm1zZyk7CisgICAgICAgIHZvaWQgTW91c2VNb3ZlZChCUG9pbnQgd2hl
cmUsIHVpbnQzMiBjb2RlLCBjb25zdCBCTWVzc2FnZSogYV9tZXNzYWdlKTsKKyAgICAgICAgdm9p
ZCBNb3VzZURvd24oQlBvaW50IHdoZXJlKTsKKyAgICAgICAgdm9pZCBNb3VzZVVwKEJQb2ludCB3
aGVyZSk7CisgICAgICAgIHZvaWQgS2V5RG93bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVt
Qnl0ZXMpOworICAgICAgICB2b2lkIEtleVVwKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1C
eXRlcyk7CisgICAgICAgIHZvaWQgV2luZG93QWN0aXZhdGVkKGJvb2wgc3RhdGUpOworCisgICAg
ICAgIHZvaWQgU2V0U2Nyb2xsVmlldyhTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQorICAgICAgICB7
CisgICAgICAgICAgICBtX3Njcm9sbFZpZXcgPSBzY3JvbGxWaWV3OworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBGcmFtZVJlc2l6ZWQoZmxvYXQgdywgZmxvYXQgaCk7CisgICAgICAgIAorICAg
IHByaXZhdGU6CisgICAgICAgIHZvaWQgRG9TY3JvbGwoYm9vbCBpc0hvcml6b250YWwsIGZsb2F0
IG11bHRpcGxpZXIpOworCisgICAgICAgIFNjcm9sbFZpZXcqIG1fc2Nyb2xsVmlldzsKKyAgICAg
ICAgZmxvYXQgbV9zY3JvbGxCYXJNYXhIOworICAgICAgICBmbG9hdCBtX3Njcm9sbEJhck1heFY7
CisgICAgfTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbFZpZXdD
YW52YXNIYWlrdV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xs
Vmlld0hhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0hhaWt1LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBiNzIyCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3SGFpa3UuY3BwCkBAIC0w
LDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgICA8
YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhp
bWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKiAKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcu
aCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3Q2FudmFzSGFpa3UuaCIKKyNpbmNs
dWRlICJXS1Njcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNp
bmNsdWRlIDxSZWN0Lmg+CisjaW5jbHVkZSA8Vmlldy5oPgorI2luY2x1ZGUgPFdpbmRvdy5oPgor
I2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+CisjaW5jbHVkZSA8c3VwcG9ydC9BdXRvbG9jay5o
PgorI2luY2x1ZGUgPFNjcm9sbFZpZXcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlIDogcHVibGljIFdLU2Nyb2xsVmlldwor
eworcHVibGljOgorICAgIFNjcm9sbFZpZXdQcml2YXRlKFdlYkNvcmU6OlNjcm9sbFZpZXcqIHNj
cm9sbFZpZXcpCisgICAgICAgIDogV0tTY3JvbGxWaWV3KCJXZWJDb3JlIFNjcm9sbFZpZXdQcml2
YXRlIiwgbmV3IFNjcm9sbFZpZXdDYW52YXNIYWlrdSgwLCAwLCAwKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgQl9GT0xMT1dfTk9ORSwgQl9XSUxMX0RSQVcgfCBCX0ZSQU1FX0VWRU5UUykgLy9C
X0ZVTExfVVBEQVRFX09OX1JFU0laRQorICAgICAgICAsIG1fc2Nyb2xsVmlldyhzY3JvbGxWaWV3
KQorICAgICAgICAsIG1fY29udGVudFNpemUoMCwgMCkKKyAgICB7CisgICAgICAgIFNldFZpZXdD
b2xvcigyNTUsIDI1NSwgMjU1KTsKKyAgICB9CisKKyAgICB2b2lkIEF0dGFjaGVkVG9XaW5kb3co
KQorICAgIHsKKyAgICAgICAgUmVzaXplQnkoLSAoQl9WX1NDUk9MTF9CQVJfV0lEVEggLSAxKSwg
LSAoQl9IX1NDUk9MTF9CQVJfSEVJR0hUIC0gMSkpOworCSAgIAlXS1Njcm9sbFZpZXc6OkF0dGFj
aGVkVG9XaW5kb3coKTsKKyAgICB9CisKKwl2b2lkIEtleURvd24oY29uc3QgY2hhciogYnl0ZXMs
IGludDMyIG51bUJ5dGVzKQorCXsKKyAgICAgICAgLy8gRklYTUU6IHdoZW4gU2Nyb2xsVmlldy5o
IHRha2VzIHRoZSBmb2N1cyBzaG91bGQgZm9jdXMgdGhlIHRhcmdldCgpLi4JCisgICAgICAgIGlm
KFRhcmdldCgpKQorICAgICAgICAgICAgVGFyZ2V0KCktPktleURvd24oYnl0ZXMsIG51bUJ5dGVz
KTsKKwl9CisKKyAgCXZvaWQgS2V5VXAoY29uc3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5dGVz
KQorCXsKKyAgICAgICAgaWYoVGFyZ2V0KCkpCisgICAgICAgICAgICBUYXJnZXQoKS0+S2V5VXAo
Ynl0ZXMsIG51bUJ5dGVzKTsKKwl9CisKKyAgCUJSZWN0IFZpc2libGVGcmFtZSgpCisgICAgewor
ICAgICAgICBpZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gVGFyZ2V0KCktPkJvdW5k
cygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gQm91bmRzKCk7CisgICAgfQor
CisgICAgdm9pZCBTZXRDb250ZW50U2l6ZShCU2l6ZSBzaXplKQorICAgIHsKKyAgICAgICAgbV9j
b250ZW50U2l6ZSA9IHNpemU7CisgCX0KKworICAgIEJTaXplIENvbnRlbnRTaXplKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NvbnRlbnRTaXplOworICAgIH0KKworICAgIGZsb2F0IENvbnRl
bnRXaWR0aCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZW50U2l6ZS53aWR0aDsKKyAg
ICB9CisKKyAgICBmbG9hdCBDb250ZW50SGVpZ2h0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2NvbnRlbnRTaXplLmhlaWdodDsKKyAgICB9CisKKyAgICBCUG9pbnQgU2Nyb2xsT2Zmc2V0KCkK
KyAgICB7CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBUYXJnZXQo
KS0+TGVmdFRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gQlBvaW50KDAs
IDApOworICAgIH0KKworICAgIHZvaWQgU2Nyb2xsQnkoZmxvYXQgZGgsIGZsb2F0IGR2KQorICAg
IHsKKyAgICAgICAgaWYgKFRhcmdldCgpKQorICAgICAgICAgICAgVGFyZ2V0KCktPlNjcm9sbEJ5
KGRoLCBkdik7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6OlNjcm9sbFZpZXcqIG1f
c2Nyb2xsVmlldzsKKyAgICBCU2l6ZSBtX2NvbnRlbnRTaXplOworfTsKKwordm9pZCBTY3JvbGxW
aWV3OjpwbGF0Zm9ybUluaXQoKQoreworICAgIG1fZGF0YSA9IG5ldyBTY3JvbGxWaWV3UHJpdmF0
ZSh0aGlzKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAg
IGRlbGV0ZSBtX2RhdGE7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxl
Q29udGVudFJlY3QoYm9vbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5WaXNpYmxlRnJh
bWUoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbGJhck1vZGVzKCkK
K3sKKyAgICBpZiAobV9kYXRhLT5TY3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRBTCkgIT0gaG9yaXpv
bnRhbFNjcm9sbGJhck1vZGUoKSkKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJf
SE9SSVpPTlRBTCwgaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKSk7CisKKyAgICBpZiAobV9kYXRh
LT5TY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwpICE9IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpKQor
ICAgICAgICBtX2RhdGEtPlNldFNjcm9sbEJhck1vZGUoQl9WRVJUSUNBTCwgdmVydGljYWxTY3Jv
bGxiYXJNb2RlKCkpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsYmFyTW9k
ZXMoU2Nyb2xsYmFyTW9kZSYgaG9yaXpvbnRhbCwgU2Nyb2xsYmFyTW9kZSYgdmVydGljYWwpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IHN0aWxsIHByb2JsZW1zIHdpdGggZGlmZmVyZW50IHNjcm9s
bGJhciBtb2Rlcy4KKyAgICAvLyBpZiAoIW1fZGF0YSkKKyAgICAvLyAgICAgcmV0dXJuOworICAg
IC8vIAorICAgIC8vIHN3aXRjaCAoaG9yaXpvbnRhbCkgeworICAgIC8vIGNhc2UgU2Nyb2xsYmFy
QXV0bzoKKyAgICAvLyAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRBTCwg
U2Nyb2xsYmFyQXV0byk7ICAgCisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNhc2UgU2Nyb2xs
YmFyQWx3YXlzT246CisgICAgLy8gICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUkla
T05UQUwsIFNjcm9sbGJhckFsd2F5c09uKTsgCisgICAgLy8gICAgIGJyZWFrOworICAgIC8vIGNh
c2UgU2Nyb2xsYmFyQWx3YXlzT2ZmOgorICAgIC8vICAgICBtX2RhdGEtPlNldFNjcm9sbEJhck1v
ZGUoQl9IT1JJWk9OVEFMLCBTY3JvbGxiYXJBbHdheXNPZmYpOyAKKyAgICAvLyAgICAgYnJlYWs7
ICAgCisgICAgLy8gfQorICAgIC8vIAorICAgIC8vIHN3aXRjaCAodmVydGljYWwpIHsKKyAgICAv
LyBjYXNlIFNjcm9sbGJhckF1dG86CisgICAgLy8gICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9k
ZShCX1ZFUlRJQ0FMLCBTY3JvbGxiYXJBdXRvKTsKKyAgICAvLyAgICAgYnJlYWs7CisgICAgLy8g
Y2FzZSBTY3JvbGxiYXJBbHdheXNPbjoKKyAgICAvLyAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJN
b2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckFsd2F5c09uKTsKKyAgICAvLyAgICAgYnJlYWs7Cisg
ICAgLy8gY2FzZSBTY3JvbGxiYXJBbHdheXNPZmY6CisgICAgLy8gICAgIG1fZGF0YS0+U2V0U2Ny
b2xsQmFyTW9kZShCX1ZFUlRJQ0FMLCBTY3JvbGxiYXJBbHdheXNPZmYpOworICAgIC8vICAgICBi
cmVhazsgICAKKyAgICAvLyB9CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCogY2hpbGQpCit7CisgICAgQlZpZXcqIHRh
cmdldCA9IG1fZGF0YS0+VGFyZ2V0KCk7CisgICAgaWYgKHRhcmdldCkKKyAgICAgICAgY2hpbGQt
PnNldFBsYXRmb3JtV2lkZ2V0KHRhcmdldCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZv
cm1SZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQoreyAKKyAgICBCVmlldyogdGFyZ2V0ID0gbV9k
YXRhLT5UYXJnZXQoKTsKKworICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5Mb2NrTG9vcGVyKCkp
IHsKKyAgICAgICAgY2hpbGQtPnBsYXRmb3JtV2lkZ2V0KCktPlJlbW92ZVNlbGYoKTsKKyAgICAg
ICAgdGFyZ2V0LT5VbmxvY2tMb29wZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
cGxhdGZvcm1TZXRDb250ZW50c1NpemUoKQoreworICAgIC8vc2Nyb2xsYmFyIGZpeDoKKyAgICAv
LyBtX2RhdGEtPlNjcm9sbEJhcihCX0hPUklaT05UQUwpLT5TZXRSYW5nZSgwLCB3IC0gd2lkdGgo
KSAtMSArIEJfVl9TQ1JPTExfQkFSX1dJRFRIKTsKKyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihC
X0hPUklaT05UQUwpLT5TZXRQcm9wb3J0aW9uKCAgd2lkdGgoKSAgLyAoZmxvYXQpKHctMSkpOwor
CisgICAgLy8gbV9kYXRhLT5TY3JvbGxCYXIoQl9WRVJUSUNBTCktPlNldFJhbmdlKDAsIGggLSBo
ZWlnaHQoKSAtMSArIEJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7CisgICAgLy8gbV9kYXRhLT5TY3Jv
bGxCYXIoQl9WRVJUSUNBTCktPlNldFByb3BvcnRpb24oICBoZWlnaHQoKSAgLyAoZmxvYXQpKGgt
MSkpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0ludFNpemUgU2Nyb2xsVmlldzo6cGxh
dGZvcm1Db250ZW50c1NpemUoKSBjb25zdAoreworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50
IGhlaWdodCA9IDA7CisKKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgICAgICBCU2l6
ZSBmcmFtZSA9IHBsYXRmb3JtV2lkZ2V0KCktPlByZWZlcnJlZFNpemUoKTsKKyAgICAgICAgd2lk
dGggPSBmcmFtZS5JbnRlZ2VyV2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gZnJhbWUuSW50ZWdl
ckhlaWdodCgpOworICAgICAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xs
UG9pbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3Qs
IGJvb2wgbm93KQoreworICAgIGlmICh1cGRhdGVSZWN0LndpZHRoKCkgPT0gMCB8fCB1cGRhdGVS
ZWN0LmhlaWdodCgpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIEJSZWN0IHVwZGF0ZSh1
cGRhdGVSZWN0KTsKKworICAgIEJWaWV3KiB0YXJnZXQgPSBtX2RhdGEtPlRhcmdldCgpOworCisg
ICAgaWYgKCF1cGRhdGUuSXNWYWxpZCgpIHx8ICF0YXJnZXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHVwZGF0ZSA9IHVwZGF0ZSAmIG1fZGF0YS0+VmlzaWJsZUZyYW1lKCk7CisKKyAgICB0YXJn
ZXQtPkludmFsaWRhdGUodXBkYXRlKTsKKworICAgIGlmIChub3cpCisgICAgICAgCXRhcmdldC0+
U3luYygpOworICAgIGVsc2UKKyAgICAgICAJdGFyZ2V0LT5GbHVzaCgpOworfQorCitJbnRQb2lu
dCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHBv
aW50KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHBvaW50Owor
fQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbihjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHJlY3Q7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3JvbGwo
Ym9vbCBmbGFnKQoreworICAgIGlmKCFtX2RhdGEgfHwgIW1fZGF0YS0+VGFyZ2V0KCkpCisgICAg
ICAgIHJldHVybjsKKwkKKyAgICBpZiAobV9kYXRhLT5WaWV3Q29sb3IoKSA9PSBCX1RSQU5TUEFS
RU5UX0NPTE9SICYmICFmbGFnKSB7CisgICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKDI1NSwg
MjU1LCAyNTUpOworICAgICAgICBtX2RhdGEtPlRhcmdldCgpLT5TZXRWaWV3Q29sb3IoMjU1LCAy
NTUsIDI1NSk7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPkludmFsaWRhdGUoKTsKKyAgICB9
IGVsc2UgaWYgKG1fZGF0YS0+Vmlld0NvbG9yKCkgIT0gQl9UUkFOU1BBUkVOVF9DT0xPUiAmJiBm
bGFnKSB7CisgICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKEJfVFJBTlNQQVJFTlRfQ09MT1Ip
OworICAgICAgICBtX2RhdGEtPlRhcmdldCgpLT5TZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVOVF9D
T0xPUik7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPkludmFsaWRhdGUoKTsKKyAgICB9Cisv
LyAgICBpZihmbGFnKQorLy8gICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKDI1NSwgMjU1LCAy
NTUpOworLy8gICAgZWxzZQorLy8gICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKEJfVFJBTlNQ
QVJFTlRfQ09MT1IpOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtQ2FuQmxpdE9uU2Ny
b2xsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5WaWV3Q29sb3IoKSA9PSBCX1RSQU5T
UEFSRU5UX0NPTE9SOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtSXNPZmZzY3JlZW4o
KSBjb25zdAoreworICAgIHJldHVybiAhcGxhdGZvcm1XaWRnZXQoKSB8fCAhcGxhdGZvcm1XaWRn
ZXQoKS0+SXNIaWRkZW4oKTsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldEFsbG93c1Nj
cm9sbGluZyhib29sIGFsbG93cykKK3sKKyAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9X
S1Njcm9sbFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOWQ0YWUKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAKQEAgLTAsMCAr
MSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1LCBBeGVsIETDtnJmbGVyLCBheGVs
ZEBwaW5jLXNvZnR3YXJlLmRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogRGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV0tTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlIDxMYXlvdXRVdGls
cy5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxXaW5kb3cuaD4KKworCitXS1Nj
cm9sbFZpZXc6OldLU2Nyb2xsVmlldyhjb25zdCBjaGFyICpuYW1lLCBCVmlldyAqdGFyZ2V0LCB1
aW50MzIgcmVzaXppbmdNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyIGZs
YWdzKQorICAgIDogQlZpZXcoQ2FsY0ZyYW1lKHRhcmdldCwgdHJ1ZSwgdHJ1ZSksIG5hbWUsIHJl
c2l6aW5nTW9kZSwgTW9kaWZ5RmxhZ3MoZmxhZ3MpKSwKKyAgICAsIGZUYXJnZXQodGFyZ2V0KQor
ICAgICwgZkhvcml6b250YWxTY3JvbGxCYXIoMCkKKyAgICAsIGZWZXJ0aWNhbFNjcm9sbEJhcigw
KQorICAgICwgZkhpZ2hsaWdodGVkKGZhbHNlKQorICAgICwgZlZlcnRpY2FsU2Nyb2xsQmFyTW9k
ZShTY3JvbGxiYXJBbHdheXNPbikKKyAgICAsIGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZShTY3Jv
bGxiYXJBbHdheXNPbikgICAKK3sKKyAgICBib29sIGhvcml6b250YWwgPSB0cnVlOworICAgIGJv
b2wgdmVydGljYWwgPSB0cnVlOworICAgIAorICAgIEJSZWN0IHRhcmdldEZyYW1lOworICAgIGlm
IChmVGFyZ2V0KSB7CisgICAgICAgIC8vIGxheW91dCB0YXJnZXQgYW5kIGFkZCBpdAorICAgICAg
ICAvL2ZUYXJnZXQtPlRhcmdldGVkQnlTY3JvbGxWaWV3KHRoaXMpOworICAgICAgICBmVGFyZ2V0
LT5Nb3ZlVG8oQl9PUklHSU4pOworICAgICAgICAKKyAgICAgICAgQWRkQ2hpbGQoZlRhcmdldCk7
CisgICAgICAgIHRhcmdldEZyYW1lID0gZlRhcmdldC0+RnJhbWUoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBubyB0YXJnZXQgc3BlY2lmaWVkCisgICAgICAgIHRhcmdldEZyYW1lID0gQm91
bmRzKCk7CisgICAgICAgIGlmIChob3Jpem9udGFsKQorICAgICAgICAgICAgdGFyZ2V0RnJhbWUu
Ym90dG9tIC09IEJfSF9TQ1JPTExfQkFSX0hFSUdIVCArIDE7CisgICAgICAgIGlmICh2ZXJ0aWNh
bCkKKyAgICAgICAgICAgIHRhcmdldEZyYW1lLnJpZ2h0IC09IEJfVl9TQ1JPTExfQkFSX1dJRFRI
ICsgMTsKKyAgICB9CisgICAgCisgICAgaWYgKGhvcml6b250YWwpIHsKKyAgICAgICAgQlJlY3Qg
cmVjdCA9IHRhcmdldEZyYW1lOworICAgICAgICByZWN0LnRvcCA9IHJlY3QuYm90dG9tICsgMTsK
KyAgICAgICAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIEJfSF9TQ1JPTExfQkFSX0hFSUdIVDsK
KyAgICAgICAgZkhvcml6b250YWxTY3JvbGxCYXIgPSBuZXcgQlNjcm9sbEJhcihyZWN0LCAiX0hT
Ql8iLCBmVGFyZ2V0LCAwLCAxMDAwLCBCX0hPUklaT05UQUwpOworICAgICAgICBBZGRDaGlsZChm
SG9yaXpvbnRhbFNjcm9sbEJhcik7CisgICAgfQorICAgIAorICAgIGlmICh2ZXJ0aWNhbCkgewor
ICAgICAgICBCUmVjdCByZWN0ID0gdGFyZ2V0RnJhbWU7CisgICAgICAgIHJlY3QubGVmdCA9IHJl
Y3QucmlnaHQgKyAxOworICAgICAgICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgQl9WX1NDUk9M
TF9CQVJfV0lEVEg7CisgICAgICAgIGZWZXJ0aWNhbFNjcm9sbEJhciA9IG5ldyBCU2Nyb2xsQmFy
KHJlY3QsICJfVlNCXyIsIGZUYXJnZXQsIDAsIDEwMDAsIEJfVkVSVElDQUwpOworICAgICAgICBB
ZGRDaGlsZChmVmVydGljYWxTY3JvbGxCYXIpOworICAgIH0KKyAgICAKKyAgICBmUHJldmlvdXNX
aWR0aCA9IHVpbnQxNihCb3VuZHMoKS5XaWR0aCgpKTsKKyAgICBmUHJldmlvdXNIZWlnaHQgPSB1
aW50MTYoQm91bmRzKCkuSGVpZ2h0KCkpOworfQorCitXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmll
dyhCTWVzc2FnZSAqYXJjaGl2ZSkKKyAgICA6IEJWaWV3KGFyY2hpdmUpCisgICAgLCBmSGlnaGxp
Z2h0ZWQoZmFsc2UpCit7CisgICAgLy8gSW4gYSBzaGFsbG93IGFyY2hpdmUsIHdlIG1heSBub3Qg
aGF2ZSBhIHRhcmdldCBhbnltb3JlLiBXZSBtdXN0CisgICAgLy8gYmUgcHJlcGFyZWQgZm9yIHRo
aXMgY2FzZQorICAgIAorICAgIC8vIGRvbid0IGNvbmZ1c2Ugb3VyIHNjcm9sbCBiYXJzIHdpdGgg
b3VyIChldmVudHVhbCkgdGFyZ2V0CisgICAgaW50MzIgZmlyc3RCYXIgPSAwOworICAgIGlmICgh
YXJjaGl2ZS0+RmluZEJvb2woIl9ub190YXJnZXRfIikpIHsKKyAgICAgICAgZlRhcmdldCA9IENo
aWxkQXQoMCk7CisgICAgICAgIGZpcnN0QmFyKys7CisgICAgfSBlbHNlCisgICAgICAgIGZUYXJn
ZXQgPSAwOworICAgIAorICAgIC8vIHNlYXJjaCBmb3Igb3VyIHNjcm9sbCBiYXJzCisgICAgCisg
ICAgZkhvcml6b250YWxTY3JvbGxCYXIgPSAwOworICAgIGZWZXJ0aWNhbFNjcm9sbEJhciA9IDA7
CisgICAgCisgICAgQlZpZXcgKnZpZXc7CisgICAgd2hpbGUgKCh2aWV3ID0gQ2hpbGRBdChmaXJz
dEJhcisrKSkpIHsKKyAgICAgICAgQlNjcm9sbEJhciAqYmFyID0gZHluYW1pY19jYXN0PEJTY3Jv
bGxCYXIgKj4odmlldyk7CisgICAgICAgIGlmICghYmFyKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICBpZiAoYmFyLT5PcmllbnRhdGlvbigpID09IEJfSE9SSVpPTlRB
TCkKKyAgICAgICAgICAgIGZIb3Jpem9udGFsU2Nyb2xsQmFyID0gYmFyOworICAgICAgICBlbHNl
IGlmIChiYXItPk9yaWVudGF0aW9uKCkgPT0gQl9WRVJUSUNBTCkKKyAgICAgICAgICAgIGZWZXJ0
aWNhbFNjcm9sbEJhciA9IGJhcjsKKyAgICB9CisgICAgCisgICAgZlByZXZpb3VzV2lkdGggPSB1
aW50MTYoQm91bmRzKCkuV2lkdGgoKSk7CisgICAgZlByZXZpb3VzSGVpZ2h0ID0gdWludDE2KEJv
dW5kcygpLkhlaWdodCgpKTsKK30KKworV0tTY3JvbGxWaWV3Ojp+V0tTY3JvbGxWaWV3KCkKK3sK
K30KKworQkFyY2hpdmFibGUqIFdLU2Nyb2xsVmlldzo6SW5zdGFudGlhdGUoQk1lc3NhZ2UgKmFy
Y2hpdmUpCit7CisgICAgaWYgKHZhbGlkYXRlX2luc3RhbnRpYXRpb24oYXJjaGl2ZSwgIldLU2Ny
b2xsVmlldyIpKQorICAgICAgICByZXR1cm4gbmV3IFdLU2Nyb2xsVmlldyhhcmNoaXZlKTsKKyAg
ICAKKyAgICByZXR1cm4gMDsKK30KKworc3RhdHVzX3QgV0tTY3JvbGxWaWV3OjpBcmNoaXZlKEJN
ZXNzYWdlICphcmNoaXZlLCBib29sIGRlZXApIGNvbnN0Cit7CisgICAgc3RhdHVzX3Qgc3RhdHVz
ID0gQlZpZXc6OkFyY2hpdmUoYXJjaGl2ZSwgZGVlcCk7CisgICAgaWYgKHN0YXR1cyAhPSBCX09L
KQorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIAorICAgIC8vIElmIHRoaXMgaXMgYSBkZWVw
IGFyY2hpdmUsIHRoZSBCVmlldyBjbGFzcyB3aWxsIHRha2UgY2FyZQorICAgIC8vIG9mIG91ciBj
aGlsZHJlbi4KKyAgICAKKyAgICBpZiAoc3RhdHVzID09IEJfT0sgJiYgIWZUYXJnZXQpCisgICAg
ICAgIHN0YXR1cyA9IGFyY2hpdmUtPkFkZEJvb2woIl9ub190YXJnZXRfIiwgdHJ1ZSk7CisgICAg
CisgICAgLy8gVGhlIGhpZ2hsaWdodGVkIHN0YXRlIGlzIG5vdCBhcmNoaXZlZCwgYnV0IHNpbmNl
IGl0IGlzCisgICAgLy8gdXN1YWxseSAob3Igc2hvdWxkIGJlKSB1c2VkIHRvIGluZGljYXRlIGZv
Y3VzLCB0aGlzCisgICAgLy8gaXMgcHJvYmFibHkgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAg
IAorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgV0tTY3JvbGxWaWV3OjpBdHRhY2hlZFRv
V2luZG93KCkKK3sKKyAgICBCVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpOworICAgIAorICAgIGlm
ICgoIWZIb3Jpem9udGFsU2Nyb2xsQmFyICYmICFmVmVydGljYWxTY3JvbGxCYXIpCisgICAgICAg
IHx8IChmSG9yaXpvbnRhbFNjcm9sbEJhciAmJiBmVmVydGljYWxTY3JvbGxCYXIpCisgICAgICAg
IHx8IFdpbmRvdygpLT5Mb29rKCkgIT0gQl9ET0NVTUVOVF9XSU5ET1dfTE9PSykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIC8vIElmIHdlIGhhdmUgb25seSBvbmUgYmFyLCB3ZSBuZWVkIHRv
IGNoZWNrIGlmIHdlIGFyZSBpbiB0aGUKKyAgICAvLyBib3R0b20gcmlnaHQgZWRnZSBvZiBhIHdp
bmRvdyB3aXRoIHRoZSBCX0RPQ1VNRU5UX0xPT0sgdG8KKyAgICAvLyBhZGp1c3QgdGhlIHNpemUg
b2YgdGhlIGJhciB0byBhY2tub3dsZWRnZSB0aGUgcmVzaXplIGtub2IuCisgICAgCisgICAgQlJl
Y3QgYm91bmRzID0gQ29udmVydFRvU2NyZWVuKEJvdW5kcygpKTsKKyAgICBCUmVjdCB3aW5kb3dC
b3VuZHMgPSBXaW5kb3coKS0+RnJhbWUoKTsKKyAgICAKKyAgICBpZiAoZkhvcml6b250YWxTY3Jv
bGxCYXIpCisgICAgICAgIGZIb3Jpem9udGFsU2Nyb2xsQmFyLT5SZXNpemVCeSgtQl9WX1NDUk9M
TF9CQVJfV0lEVEgsIDApOworICAgIGVsc2UgaWYgKGZWZXJ0aWNhbFNjcm9sbEJhcikKKyAgICAg
ICAgZlZlcnRpY2FsU2Nyb2xsQmFyLT5SZXNpemVCeSgwLCAtQl9IX1NDUk9MTF9CQVJfSEVJR0hU
KTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdygpCit7CisgICAg
QlZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdygpOworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6QWxs
QXR0YWNoZWQoKQoreworICAgIEJWaWV3OjpBbGxBdHRhY2hlZCgpOworfQorCit2b2lkIFdLU2Ny
b2xsVmlldzo6QWxsRGV0YWNoZWQoKQoreworICAgIEJWaWV3OjpBbGxEZXRhY2hlZCgpOworfQor
CisKK0JTY3JvbGxCYXIqIFdLU2Nyb2xsVmlldzo6U2Nyb2xsQmFyKG9yaWVudGF0aW9uIHBvc3R1
cmUpIGNvbnN0Cit7CisgICAgaWYgKHBvc3R1cmUgPT0gQl9IT1JJWk9OVEFMKQorICAgICAgICBy
ZXR1cm4gZkhvcml6b250YWxTY3JvbGxCYXI7CisgICAgCisgICAgcmV0dXJuIGZWZXJ0aWNhbFNj
cm9sbEJhcjsKK30KKworU2Nyb2xsYmFyTW9kZSBXS1Njcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUo
b3JpZW50YXRpb24gcG9zdHVyZSkKK3sKKyAgICAvLyAgcmV0dXJuIFNjcm9sbGJhckF1dG87Cisg
ICAgCisgICAgaWYgKHBvc3R1cmUgPT0gQl9IT1JJWk9OVEFMKXsKKyAgICAgICAgcHJpbnRmKCIr
KysrIEggZ2V0ICVkXG4iLGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZSk7CisgICAgICAgIHJldHVy
biBmSG9yaXpvbnRhbFNjcm9sbEJhck1vZGU7CisgICAgfQorICAgIAorICAgIHByaW50ZigiKysr
KyBWIGdldCAlZFxuIixmVmVydGljYWxTY3JvbGxCYXJNb2RlKTsgICAKKyAgICByZXR1cm4gZlZl
cnRpY2FsU2Nyb2xsQmFyTW9kZTsgIAorfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6U2V0U2Nyb2xs
QmFyTW9kZShvcmllbnRhdGlvbiBwb3N0dXJlLCBTY3JvbGxiYXJNb2RlIG1vZGUpCit7CisgICAg
aWYgKHBvc3R1cmUgPT0gQl9IT1JJWk9OVEFMICYmIG1vZGUgIT0gZkhvcml6b250YWxTY3JvbGxC
YXJNb2RlKSB7CisgICAgICAgIGlmKG1vZGUgPT0gU2Nyb2xsYmFyQWx3YXlzT24gfHwgbW9kZSA9
PSBTY3JvbGxiYXJBdXRvICkgeworICAgICAgICAgICAgaWYoZkhvcml6b250YWxTY3JvbGxCYXIt
PklzSGlkZGVuKCkpeworICAgICAgICAgICAgICAgIGZIb3Jpem9udGFsU2Nyb2xsQmFyLT5TaG93
KCk7CisgICAgICAgICAgICAgICAgaWYgKFRhcmdldCgpKQorICAgICAgICAgICAgICAgICAgICBU
YXJnZXQoKS0+UmVzaXplQnkoMCwgLUJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYobW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPZmYpewor
ICAgICAgICAgICAgaWYoIWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5Jc0hpZGRlbigpKXsKKyAgICAg
ICAgICAgICAgICBmSG9yaXpvbnRhbFNjcm9sbEJhci0+SGlkZSgpOworICAgICAgICAgICAgICAg
IGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KDAs
IEJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgLy9zZXQgdGhlIG5ldyBtb2RlLgorICAgICAgICBmSG9yaXpvbnRhbFNjcm9sbEJhck1vZGUg
PSBtb2RlOyAgICAKKyAgICB9IAorICAgIAorICAgIGlmIChwb3N0dXJlID09IEJfVkVSVElDQUwg
JiYgbW9kZSAhPSBmVmVydGljYWxTY3JvbGxCYXJNb2RlICkgeworICAgICAgICBpZiAobW9kZSA9
PSBTY3JvbGxiYXJBbHdheXNPbiB8fCBtb2RlID09IFNjcm9sbGJhckF1dG8pIHsKKyAgICAgICAg
ICAgIGlmKGZWZXJ0aWNhbFNjcm9sbEJhci0+SXNIaWRkZW4oKSl7CisgICAgICAgICAgICAgICAg
ZlZlcnRpY2FsU2Nyb2xsQmFyLT5TaG93KCk7CisgICAgICAgICAgICAgICAgaWYgKFRhcmdldCgp
KSAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFRhcmdldCgpLT5SZXNpemVCeSgtQl9W
X1NDUk9MTF9CQVJfV0lEVEgsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmIChtb2RlID09IFNjcm9sbGJhckFsd2F5c09mZikgeyAgICAgICAKKyAgICAgICAgICAgIGlm
KCFmVmVydGljYWxTY3JvbGxCYXItPklzSGlkZGVuKCkpIHsKKyAgICAgICAgICAgICAgICBmVmVy
dGljYWxTY3JvbGxCYXItPkhpZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoVGFyZ2V0KCkpICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KEJfVl9TQ1JP
TExfQkFSX1dJRFRILCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvL3Nl
dCB0aGUgbmV3IG1vZGU6CisgICAgICAgIGZWZXJ0aWNhbFNjcm9sbEJhck1vZGUgPSBtb2RlOyAg
ICAgICAgICAKKyAgICB9Cit9CisKK3ZvaWQgV0tTY3JvbGxWaWV3OjpTZXRUYXJnZXQoQlZpZXcg
KnRhcmdldCkKK3sKKyAgICBpZiAoZlRhcmdldCA9PSB0YXJnZXQpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoZlRhcmdldCkgeworICAgICAgICBmVGFyZ2V0LT5UYXJnZXRlZEJ5U2Ny
b2xsVmlldyhOVUxMKTsKKyAgICAgICAgUmVtb3ZlQ2hpbGQoZlRhcmdldCk7ICAgICAgICAKKyAg
ICAgICAgLy8gd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBkZWxldGUgdGhlIHZpZXcKKyAgICB9Cisg
ICAgCisgICAgZlRhcmdldCA9IHRhcmdldDsKKyAgICBpZiAoZkhvcml6b250YWxTY3JvbGxCYXIp
CisgICAgICAgIGZIb3Jpem9udGFsU2Nyb2xsQmFyLT5TZXRUYXJnZXQodGFyZ2V0KTsKKyAgICBp
ZiAoZlZlcnRpY2FsU2Nyb2xsQmFyKQorICAgICAgICBmVmVydGljYWxTY3JvbGxCYXItPlNldFRh
cmdldCh0YXJnZXQpOworICAgIAorICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAgLy90YXJnZXQt
PlRhcmdldGVkQnlTY3JvbGxWaWV3KHRoaXMpOworICAgICAgICAKKyAgICAgICAgQWRkQ2hpbGQo
dGFyZ2V0LCBDaGlsZEF0KDApKTsKKyAgICAgICAgLy8gVGhpcyB3YXksIHdlIGFyZSBtYWtpbmcg
c3VyZSB0aGF0IHRoZSB0YXJnZXQgd2lsbAorICAgICAgICAvLyBiZSBhZGRlZCB0b3AgbW9zdCBp
biB0aGUgbGlzdCAod2hpY2ggaXMgaW1wb3J0YW50CisgICAgICAgIC8vIGZvciB1bmFyY2hpdmlu
ZykKKyAgICB9Cit9CisKK0JWaWV3KiBXS1Njcm9sbFZpZXc6OlRhcmdldCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZUYXJnZXQ7Cit9CisKK3ZvaWQgV0tTY3JvbGxWaWV3OjpNZXNzYWdlUmVjZWl2
ZWQoQk1lc3NhZ2UgKm1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChtZXNzYWdlLT53aGF0KSB7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQlZpZXc6Ok1lc3NhZ2VSZWNlaXZlZChtZXNzYWdlKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV0tTY3JvbGxWaWV3OjpNb3VzZURvd24oQlBvaW50IHBvaW50KQorewor
ICAgIEJWaWV3OjpNb3VzZURvd24ocG9pbnQpOworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6TW91
c2VVcChCUG9pbnQgcG9pbnQpCit7CisgICAgQlZpZXc6Ok1vdXNlVXAocG9pbnQpOworfQorCit2
b2lkIFdLU2Nyb2xsVmlldzo6TW91c2VNb3ZlZChCUG9pbnQgcG9pbnQsIHVpbnQzMiBjb2RlLCBj
b25zdCBCTWVzc2FnZSAqZHJhZ01lc3NhZ2UpCit7CisgICAgQlZpZXc6Ok1vdXNlTW92ZWQocG9p
bnQsIGNvZGUsIGRyYWdNZXNzYWdlKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OkZyYW1lTW92
ZWQoQlBvaW50IHBvc2l0aW9uKQoreworICAgIEJWaWV3OjpGcmFtZU1vdmVkKHBvc2l0aW9uKTsK
K30KKwordm9pZCBXS1Njcm9sbFZpZXc6OlJlc2l6ZVRvUHJlZmVycmVkKCkKK3sKKyAgICBCVmll
dzo6UmVzaXplVG9QcmVmZXJyZWQoKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OkdldFByZWZl
cnJlZFNpemUoZmxvYXQgKl93aWR0aCwgZmxvYXQgKl9oZWlnaHQpCit7CisgICAgQlJlY3QgZnJh
bWUgPSBDYWxjRnJhbWUoZlRhcmdldCwgZkhvcml6b250YWxTY3JvbGxCYXIsIGZWZXJ0aWNhbFNj
cm9sbEJhcik7CisgICAgCisgICAgaWYgKGZUYXJnZXQpIHsKKyAgICAgICAgZmxvYXQgd2lkdGgs
IGhlaWdodDsKKyAgICAgICAgZlRhcmdldC0+R2V0UHJlZmVycmVkU2l6ZSgmd2lkdGgsICZoZWln
aHQpOworICAgICAgICAKKyAgICAgICAgZnJhbWUucmlnaHQgKz0gd2lkdGggLSBmVGFyZ2V0LT5G
cmFtZSgpLldpZHRoKCk7CisgICAgICAgIGZyYW1lLmJvdHRvbSArPSBoZWlnaHQgLSBmVGFyZ2V0
LT5GcmFtZSgpLkhlaWdodCgpOworICAgIH0KKyAgICAKKyAgICBpZiAoX3dpZHRoKQorICAgICAg
ICAqX3dpZHRoID0gZnJhbWUuV2lkdGgoKTsKKyAgICBpZiAoX2hlaWdodCkKKyAgICAgICAgKl9o
ZWlnaHQgPSBmcmFtZS5IZWlnaHQoKTsKK30KKworCisvKiogVGhpcyBzdGF0aWMgbWV0aG9kIGlz
IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBmcmFtZSB0aGF0IHRoZQorICogIFNjcm9sbFZpZXcgd2ls
bCBjb3ZlciBkZXBlbmRpbmcgb24gdGhlIGZyYW1lIG9mIGl0cyB0YXJnZXQKKyAqICAKKyAqICBJ
dCBpcyB1c2VkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgYXQgb3RoZXIgcGxhY2VzLgorICovCitC
UmVjdCBXS1Njcm9sbFZpZXc6OkNhbGNGcmFtZShCVmlldyAqdGFyZ2V0LCBib29sIGhvcml6b250
YWwsIGJvb2wgdmVydGljYWwpCit7CisgICAgQlJlY3QgZnJhbWUgPSB0YXJnZXQgPyB0YXJnZXQt
PkZyYW1lKCkgOiBCUmVjdCgwLCAwLCA4MCwgODApOworICAgIAorICAgIGlmICh2ZXJ0aWNhbCkK
KyAgICAgICAgZnJhbWUucmlnaHQgKz0gQl9WX1NDUk9MTF9CQVJfV0lEVEg7CisgICAgaWYgKGhv
cml6b250YWwpCisgICAgICAgIGZyYW1lLmJvdHRvbSArPSBCX0hfU0NST0xMX0JBUl9IRUlHSFQ7
CisgICAgCisgICAgaWYgKHZlcnRpY2FsKQorICAgICAgICBmcmFtZS5yaWdodCsrOworICAgIGlm
IChob3Jpem9udGFsKQorICAgICAgICBmcmFtZS5ib3R0b20rKzsKKyAgICAKKyAgICByZXR1cm4g
ZnJhbWU7Cit9CisKKworLyoqIFRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlICJmbGFncyIgYXJndW1l
bnQgYXMgcGFzc2VkIG9uIHRvCisgKiAgdGhlIEJWaWV3IGNvbnN0cnVjdG9yLgorICovCitpbnQz
MiBXS1Njcm9sbFZpZXc6Ok1vZGlmeUZsYWdzKGludDMyIGZsYWdzKQoreworICAgIHJldHVybiBm
bGFncyAmIH4oQl9XSUxMX0RSQVcgfCBCX0ZSQU1FX0VWRU5UUyB8IEJfRlVMTF9VUERBVEVfT05f
UkVTSVpFKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OldpbmRvd0FjdGl2YXRlZChib29sIGFj
dGl2ZSkKK3sKKyAgICBpZiAoZkhpZ2hsaWdodGVkKQorICAgICAgICBJbnZhbGlkYXRlKCk7Cisg
ICAgCisgICAgQlZpZXc6OldpbmRvd0FjdGl2YXRlZChhY3RpdmUpOworfQorCit2b2lkIFdLU2Ny
b2xsVmlldzo6TWFrZUZvY3VzKGJvb2wgc3RhdGUpCit7CisgICAgQlZpZXc6Ok1ha2VGb2N1cyhz
dGF0ZSk7Cit9CisKK0JIYW5kbGVyKiBXS1Njcm9sbFZpZXc6OlJlc29sdmVTcGVjaWZpZXIoQk1l
c3NhZ2UgKm1zZywgaW50MzIgaW5kZXgsIEJNZXNzYWdlICpzcGVjaWZpZXIsIGludDMyIGZvcm0s
IGNvbnN0IGNoYXIgKnByb3BlcnR5KQoreworICAgIHJldHVybiBCVmlldzo6UmVzb2x2ZVNwZWNp
Zmllcihtc2csIGluZGV4LCBzcGVjaWZpZXIsIGZvcm0sIHByb3BlcnR5KTsKK30KKworc3RhdHVz
X3QgV0tTY3JvbGxWaWV3OjpHZXRTdXBwb3J0ZWRTdWl0ZXMoQk1lc3NhZ2UgKmRhdGEpCit7Cisg
ICAgcmV0dXJuIEJWaWV3OjpHZXRTdXBwb3J0ZWRTdWl0ZXMoZGF0YSk7Cit9CisKK0JTaXplIFdL
U2Nyb2xsVmlldzo6TWluU2l6ZSgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IHlldCBj
b3JyZWN0LgorICAgIEJTaXplIHNpemUgPSAoZlRhcmdldCA/IGZUYXJnZXQtPk1pblNpemUoKSA6
IEJTaXplKC0xLCAtMSkpOworICAgIAorICAgIGlmIChmVmVydGljYWxTY3JvbGxCYXIpCisgICAg
ICAgIHNpemUud2lkdGggKz0gQl9WX1NDUk9MTF9CQVJfV0lEVEg7CisgICAgaWYgKGZIb3Jpem9u
dGFsU2Nyb2xsQmFyKQorICAgICAgICBzaXplLmhlaWdodCArPSBCX0hfU0NST0xMX0JBUl9IRUlH
SFQ7CisgICAgCisgICAgcmV0dXJuIEJMYXlvdXRVdGlsczo6Q29tcG9zZVNpemUoRXhwbGljaXRN
aW5TaXplKCksIHNpemUpOworfQorCitCU2l6ZSBXS1Njcm9sbFZpZXc6OlByZWZlcnJlZFNpemUo
KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCB5ZXQgY29ycmVjdC4KKyAgICBCU2l6ZSBz
aXplID0gKGZUYXJnZXQgPyBmVGFyZ2V0LT5QcmVmZXJyZWRTaXplKCkgOiBCU2l6ZSgtMSwgLTEp
KTsKKyAgICAKKyAgICBpZiAoZlZlcnRpY2FsU2Nyb2xsQmFyKQorICAgICAgICBzaXplLndpZHRo
ICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworICAgIGlmIChmSG9yaXpvbnRhbFNjcm9sbEJhcikK
KyAgICAgICAgc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworICAgIAorICAg
IHJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4cGxpY2l0TWluU2l6ZSgpLCBzaXpl
KTsKK30KKworc3RhdHVzX3QgV0tTY3JvbGxWaWV3OjpQZXJmb3JtKHBlcmZvcm1fY29kZSBkLCB2
b2lkICphcmcpCit7CisgICAgcmV0dXJuIEJWaWV3OjpQZXJmb3JtKGQsIGFyZyk7Cit9CisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFhNDBlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1dLU2Nyb2xsVmlldy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiogQ29weXJpZ2h0IDIw
MDQsIE9wZW5CZU9TLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqIERpc3RyaWJ1dGVkIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgT3BlbkJlT1MgTGljZW5zZS4KKyAqLworI2lmbmRlZiBfV0tfU0NS
T0xMX1ZJRVdfSAorI2RlZmluZSBfV0tfU0NST0xMX1ZJRVdfSAorCisvKiogVGhlIFdLU2Nyb2xs
VmlldyBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIHRvIGFkZCBhIHNjcm9sbGluZworICogIG1lY2hh
bmlzbSB0byB0aGUgdGFyZ2V0IHZpZXcuCisgKi8KKworI2luY2x1ZGUgPFNjcm9sbEJhci5oPgor
I2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitj
bGFzcyBXS1Njcm9sbFZpZXcgOiBwdWJsaWMgQlZpZXcgeworICAgIHB1YmxpYzoKKyAgICAgICAg
V0tTY3JvbGxWaWV3KGNvbnN0IGNoYXIgKm5hbWUsIEJWaWV3ICp0YXJnZXQsCisgICAgICAgICAg
ICAgICAgICAgICB1aW50MzIgcmVzaXppbmdNb2RlID0gQl9GT0xMT1dfTEVGVCB8IEJfRk9MTE9X
X1RPUCwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMiBmbGFncyA9IDApOworICAgICAgICBX
S1Njcm9sbFZpZXcoQk1lc3NhZ2UgKmFyY2hpdmUpOworICAgICAgICB2aXJ0dWFsIH5XS1Njcm9s
bFZpZXcoKTsKKworICAgICAgICBzdGF0aWMgQkFyY2hpdmFibGUqIEluc3RhbnRpYXRlKEJNZXNz
YWdlICphcmNoaXZlKTsKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCAgICBBcmNoaXZlKEJNZXNz
YWdlICphcmNoaXZlLCBib29sIGRlZXAgPSB0cnVlKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgICAgICAgIEF0dGFjaGVkVG9XaW5kb3coKTsKKworICAgICAgICBCU2Nyb2xsQmFyKiAg
ICAgICAgIFNjcm9sbEJhcihvcmllbnRhdGlvbiBwb3N0dXJlKSBjb25zdDsKKyAgICAgICAgU2Ny
b2xsYmFyTW9kZSAgICAgICBTY3JvbGxCYXJNb2RlKG9yaWVudGF0aW9uIHBvc3R1cmUpOworICAg
ICAgICB2b2lkICAgICAgICAgICAgICAgIFNldFNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9z
dHVyZSwgU2Nyb2xsYmFyTW9kZSBtb2RlKTsKKworICAgICAgICB2b2lkICAgICAgICAgICAgICAg
IFNldFRhcmdldChCVmlldyAqdGFyZ2V0KTsKKyAgICAgICAgQlZpZXcqICAgICAgICAgICAgICBU
YXJnZXQoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgICAgICAgIE1lc3NhZ2VSZWNl
aXZlZChCTWVzc2FnZSAqbWVzc2FnZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCAgICAgICAgTW91
c2VEb3duKEJQb2ludCBwb2ludCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkICAgICAgICBXaW5k
b3dBY3RpdmF0ZWQoYm9vbCBhY3RpdmUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgICAgICAgIE1v
dXNlVXAoQlBvaW50IHBvaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkICAgICAgICBNb3VzZU1v
dmVkKEJQb2ludCBwb2ludCwgdWludDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlICptc2cpOworCisg
ICAgICAgIHZpcnR1YWwgdm9pZCAgICAgICAgRGV0YWNoZWRGcm9tV2luZG93KCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCAgICAgICAgQWxsQXR0YWNoZWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
ICAgICAgICBBbGxEZXRhY2hlZCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCAgICAgICAgRnJh
bWVNb3ZlZChCUG9pbnQgcG9zaXRpb24pOworCisgICAgICAgIHZpcnR1YWwgQkhhbmRsZXIqICAg
UmVzb2x2ZVNwZWNpZmllcihCTWVzc2FnZSAqbWVzc2FnZSwgaW50MzIgaW5kZXgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTWVzc2FnZSAqc3BlY2lmaWVy
LCBpbnQzMiBmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcHJvcGVydHkpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCAgICAgICAg
UmVzaXplVG9QcmVmZXJyZWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkICAgICAgICBHZXRQcmVm
ZXJyZWRTaXplKGZsb2F0ICpfd2lkdGgsIGZsb2F0ICpfaGVpZ2h0KTsKKyAgICAgICAgdmlydHVh
bCB2b2lkICAgICAgICBNYWtlRm9jdXMoYm9vbCBzdGF0ZSA9IHRydWUpOworICAgICAgICB2aXJ0
dWFsIHN0YXR1c190ICAgIEdldFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAqZGF0YSk7CisKKyAg
ICAgICAgdmlydHVhbCBCU2l6ZSAgICAgICBNaW5TaXplKCk7CisgICAgICAgIHZpcnR1YWwgQlNp
emUgICAgICAgUHJlZmVycmVkU2l6ZSgpOworCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgICAg
UGVyZm9ybShwZXJmb3JtX2NvZGUgZCwgdm9pZCAqYXJnKTsKKyAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBmcmllbmQgY2xhc3MgQlZpZXc7CisgICAgCisgICAgICAgIHN0YXRpYyBCUmVjdCAg
ICAgICAgQ2FsY0ZyYW1lKEJWaWV3ICp0YXJnZXQsIGJvb2wgaCwgYm9vbCB2KTsKKyAgICAgICAg
c3RhdGljIGludDMyICAgICAgICBNb2RpZnlGbGFncyhpbnQzMiBmbGFncyk7CisgICAgCisgICAg
ICAgIEJWaWV3KiAgICAgICAgICAgICAgZlRhcmdldDsKKyAgICAgICAgQlNjcm9sbEJhciogICAg
ICAgICBmSG9yaXpvbnRhbFNjcm9sbEJhcjsKKyAgICAgICAgQlNjcm9sbEJhciogICAgICAgICBm
VmVydGljYWxTY3JvbGxCYXI7CisgICAgICAgIHVpbnQxNiAgICAgICAgICAgICAgZlByZXZpb3Vz
V2lkdGg7CisgICAgICAgIHVpbnQxNiAgICAgICAgICAgICAgZlByZXZpb3VzSGVpZ2h0OworICAg
ICAgICBib29sICAgICAgICAgICAgICAgIGZIaWdobGlnaHRlZDsKKyAgICAKKyAgICAgICAgU2Ny
b2xsYmFyTW9kZSAgICAgICBmVmVydGljYWxTY3JvbGxCYXJNb2RlOworICAgICAgICBTY3JvbGxi
YXJNb2RlICAgICAgIGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZTsKK307CisKKyNlbmRpZiAgLyog
X1dLX1NDUk9MTF9WSUVXX0ggKi8KKwotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="16768"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32307</attachid>
            <date>2009-07-06 08:21:41 -0700</date>
            <delta_ts>2009-07-16 09:01:18 -0700</delta_ts>
            <desc>Patch to add a fifth bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-fifth-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>32269</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA5M2ZkOWMyNjEzYzk1MzVkMTg2NWIzMDJjN2JhY2M3MjhhMzJjYTNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgNiBKdWwgMjAwOSAxNzoyMDoyMyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgZmlmdGggYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2
MyArKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcCAgICAgICB8
ICAgNjkgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAg
ICAgIHwgIDM1NiArKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9TY3JlZW5IYWlrdS5jcHAgICAgICAgICAgfCAgMTAyICsrKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwIHwgICA1MiArKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwICAgICB8ICAxMzEgKysrKysrKysrCiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaCAgICAgICB8ICAgNjMgKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcCAgICAgICAgICAgfCAgIDQy
ICsrKwogOCBmaWxlcyBjaGFuZ2VkLCA4NzggaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhl
bWVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Nj
cmVlbkhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
U2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNmMWMyZS4uOGFhZmE5OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw2NiBAQAorMjAwOS0wNy0wNiAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdt
YWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBhIGZpZnRoIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3Jl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5NTIK
KworICAgICAgICBBZGRpbmcgc2V2ZW4gZmlsZXMsIFBvcHVwTWVudUhhaWt1LmNwcCwgUmVuZGVy
VGhlbWVIYWlrdS5jcHAsCisgICAgICAgIFNjcmVlbkhhaWt1LmNwcCwgU2VhcmNoUG9wdXBNZW51
SGFpa3UuY3BwLCBTaGFyZWRUaW1lckhhaWt1LmNwcCwKKyAgICAgICAgU2hhcmVkVGltZXJIYWlr
dS5oLCBTb3VuZEhhaWt1LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51
SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6UG9wdXBNZW51
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6flBvcHVwTWVudSk6CisgICAgICAgIChX
ZWJDb3JlOjpQb3B1cE1lbnU6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojpo
aWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjppdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJh
bCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6UmVuZGVyVGhlbWVIYWlrdSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1Ojp+UmVuZGVyVGhlbWVIYWlrdSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpzdXBwb3J0c0hvdmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1
OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVIYWlrdTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUhhaWt1OjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6
OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlr
dTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjp0aGVtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpzeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSGFpa3U6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUhhaWt1OjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFp
a3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5E
ZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2hh
aWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hQb3B1cE1lbnU6OlNlYXJjaFBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hQb3B1cE1lbnU6OnNhdmVSZWNlbnRTZWFyY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hQb3B1cE1lbnU6OmVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NoYXJlZFRp
bWVySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6
OlNoYXJlZFRpbWVySGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXJIYWlrdTo6
RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6On5TaGFyZWRUaW1l
ckhhaWt1KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6OnNldEZpcmVUaW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6OnNldEZpcmVGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRUaW1lckhhaWt1OjpzZXRTaG91bGRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0U2hhcmVkVGltZXJIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVk
VGltZXJGaXJlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpzdG9wU2hhcmVkVGltZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6c3lzdGVtQmVlcCk6CisKIDIwMDktMDctMDIgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVy
YmVtb250QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjllYzI0ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxz
ZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQb3B1cE1lbnUuaCIKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPE1lbnUuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCitQb3B1cE1lbnU6OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQq
IGNsaWVudCkKKyAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQoreworICAgIG1fbWVudSA9IDA7
Cit9CisKK1BvcHVwTWVudTo6flBvcHVwTWVudSgpCit7CisgICAgZGVsZXRlIG1fbWVudTsKKyAg
ICBtX21lbnUgPSAwOworfQorCit2b2lkIFBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBvcHVwTWVudTo6aGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitib29sIFBvcHVwTWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05h
dHVyYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9SZW5kZXJUaGVtZUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVy
VGhlbWVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmMGQ0
MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVI
YWlrdS5jcHAKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxl
ciA8bXVlbGxlckBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEZvbnQuaD4KKyNpbmNsdWRlIDxWaWV3
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogSSBhbSBub3Qgc3VyZSB3
aHkgc28gbWFueSBtZXRob2RzIGFyZSBpbmxpbmUgaGVyZS4gVGhpcyB3YXMgY29waWVkIGZyb20g
dGhlIAorLy8gU3lsbGFibGUgcG9ydC4gSXQgc2hvdWxkIHByb2JhYmx5IGFsbCBiZSBzY3JhcHBl
ZC4KK2NsYXNzIFJlbmRlclRoZW1lSGFpa3UgOiBwdWJsaWMgUmVuZGVyVGhlbWUKK3sKK3B1Ymxp
YzoKKyAgICBSZW5kZXJUaGVtZUhhaWt1KCkgOiBSZW5kZXJUaGVtZSgpIHsgfQorICAgIH5SZW5k
ZXJUaGVtZUhhaWt1KCkgeyB9CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1l
J3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVIYWlrdSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBDb2xvcih1aV9jb2xvcihCX01FTlVfU0VMRUNURURfQkFDS0dST1VORF9DT0xP
UikpOworICAgIH0KKworICAgIC8vIFRoZSBwbGF0Zm9ybSBzZWxlY3Rpb24gY29sb3IuCisgICAg
Q29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJfQ09OVFJPTF9ISUdITElHSFRfQ09M
T1IpKTsKKyAgICB9CisKKyAgICBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBDb2xvcih1aV9jb2xvcihC
X0NPTlRST0xfSElHSExJR0hUX0NPTE9SKSk7CisgICAgfQorCisgICAgdmlydHVhbCBDb2xvciBw
bGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX1RFWFRfQ09MT1IpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJfQ09O
VFJPTF9URVhUX0NPTE9SKSk7CisgICAgfQorCisgICAgLy8gTGlzdCBCb3ggc2VsZWN0aW9uIGNv
bG9yCisgICAvKiAKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29s
b3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAg
Ki8KKworICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogb2JqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaW5mbywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgZnJhbWUpCisgICAgeworICAgICAgICBpZiAoaW5m
by5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgLy9jb2RlIHRha2VuIGZyb20gdGhlIEhhaWt1IHNvdXJjZSBjb2RlIChDaGVj
a0JveC5jcHApCisKKyAgICAgICAgcmdiX2NvbG9yIG5vVGludCA9IHVpX2NvbG9yKEJfUEFORUxf
QkFDS0dST1VORF9DT0xPUik7CisgICAgICAgIHJnYl9jb2xvciBsaWdodGVuMSA9IHRpbnRfY29s
b3Iobm9UaW50LCBCX0xJR0hURU5fMV9USU5UKTsKKyAgICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW5N
YXggPSB0aW50X2NvbG9yKG5vVGludCwgQl9MSUdIVEVOX01BWF9USU5UKTsKKyAgICAgICAgcmdi
X2NvbG9yIGRhcmtlbjEgPSB0aW50X2NvbG9yKG5vVGludCwgQl9EQVJLRU5fMV9USU5UKTsKKyAg
ICAgICAgcmdiX2NvbG9yIGRhcmtlbjIgPSB0aW50X2NvbG9yKG5vVGludCwgQl9EQVJLRU5fMl9U
SU5UKTsKKyAgICAgICAgcmdiX2NvbG9yIGRhcmtlbjMgPSB0aW50X2NvbG9yKG5vVGludCwgQl9E
QVJLRU5fM19USU5UKTsKKyAgICAgICAgcmdiX2NvbG9yIGRhcmtlbjQgPSB0aW50X2NvbG9yKG5v
VGludCwgQl9EQVJLRU5fNF9USU5UKTsKKworICAgICAgICBCUmVjdCByZWN0ID0gZnJhbWUgOwor
ICAgICAgICBCVmlldyogdmlldyA9IGluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGlzRW5hYmxlZChvYmopKSB7CisgICAgICAgICAgICAvLyBGaWxsaW5nCisg
ICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbk1heCk7CisgICAgICAgICAgICB2
aWV3LT5GaWxsUmVjdChyZWN0KTsKKworICAgICAgICAgICAgdmlldy0+QmVnaW5MaW5lQXJyYXko
Nik7CisKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5i
b3R0b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QubGVmdCwgcmVjdC50
b3ApLCBkYXJrZW4xKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVm
dCwgcmVjdC50b3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQs
IHJlY3QudG9wKSwgZGFya2VuMSk7CisgICAgICAgICAgICAgICAgcmVjdC5JbnNldEJ5KDEsIDEp
OworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LmJvdHRv
bSksCisgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCks
IGRhcmtlbjQpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCBy
ZWN0LnRvcCksCisgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVj
dC50b3ApLCBkYXJrZW40KTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3Qu
bGVmdCArIDEuMGYsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJQb2lu
dChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSksIG5vVGludCk7CisgICAgICAgICAgICB2aWV3LT5B
ZGRMaW5lKEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAg
ICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3AgKyAxLjBmKSwgbm9UaW50KTsKKwor
ICAgICAgICAgICAgdmlldy0+RW5kTGluZUFycmF5KCk7CisKKyAgICAgICAgICAgIC8vIENoZWNr
bWFyaworICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZChvYmopKSB7CisgICAgICAgICAgICAgICAg
cmVjdC5JbnNldEJ5KDIsIDIpOworCisgICAgICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9y
KHVpX2NvbG9yKEJfS0VZQk9BUkRfTkFWSUdBVElPTl9DT0xPUikpOworICAgICAgICAgICAgICAg
IHZpZXctPlNldFBlblNpemUoMik7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0RHJhd2luZ01v
ZGUoQl9PUF9PVkVSKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugb2Yg
YW50aS1hbGlhc2luZworICAgICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBvaW50KHJl
Y3QubGVmdCwgcmVjdC50b3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJl
Y3QucmlnaHQsIHJlY3QuYm90dG9tKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U3Ryb2tlTGlu
ZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3ApKTsKKyAgICAgICAgICAgICAgICB2aWV3
LT5TZXRQZW5TaXplKDEpOworICAgICAgICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJf
T1BfQ09QWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBGaWxsaW5nCisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbjEpOworICAg
ICAgICAgICAgdmlldy0+RmlsbFJlY3QocmVjdCk7CisKKyAgICAgICAgICAgIC8vIEJveAorICAg
ICAgICAgICAgdmlldy0+QmVnaW5MaW5lQXJyYXkoNik7CisKKyAgICAgICAgICAgIHZpZXctPkFk
ZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAg
ICBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIG5vVGludCk7CisgICAgICAgICAgICB2aWV3
LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwKKyAgICAgICAgICAgICAgICAg
ICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSwgbm9UaW50KTsKKyAgICAgICAgICAgIHJl
Y3QuSW5zZXRCeSgxLCAxKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3Qu
bGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5sZWZ0
LCByZWN0LnRvcCksIGRhcmtlbjIpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQo
cmVjdC5sZWZ0LCByZWN0LnRvcCksCisgICAgICAgICAgICAgICAgICAgIEJQb2ludChyZWN0LnJp
Z2h0LCByZWN0LnRvcCksIGRhcmtlbjIpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9p
bnQocmVjdC5sZWZ0ICsgMS4wZiwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICBC
UG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20pLCBkYXJrZW4xKTsKKyAgICAgICAgICAgIHZp
ZXctPkFkZExpbmUoQlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAg
ICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wICsgMS4wZiksIGRhcmtlbjEpOwor
CisgICAgICAgICAgICB2aWV3LT5FbmRMaW5lQXJyYXkoKTsKKworICAgICAgICAgICAgLy8gQ2hl
Y2ttYXJrCisgICAgICAgICAgICBpZiAoaXNDaGVja2VkKG9iaikpIHsKKyAgICAgICAgICAgICAg
ICByZWN0Lkluc2V0QnkoMiwgMik7CisKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29s
b3IodGludF9jb2xvcih1aV9jb2xvcihCX0tFWUJPQVJEX05BVklHQVRJT05fQ09MT1IpLAorICAg
ICAgICAgICAgICAgICAgICBCX0RJU0FCTEVEX01BUktfVElOVCkpOworICAgICAgICAgICAgICAg
IHZpZXctPlNldFBlblNpemUoMik7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0RHJhd2luZ01v
ZGUoQl9PUF9PVkVSKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugb2Yg
YW50aS1hbGlhc2luZworICAgICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBvaW50KHJl
Y3QubGVmdCwgcmVjdC50b3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJl
Y3QucmlnaHQsIHJlY3QuYm90dG9tKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U3Ryb2tlTGlu
ZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LmJvdHRvbSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3ApKTsKKyAgICAgICAgICAgICAgICB2aWV3
LT5TZXRQZW5TaXplKDEpOworICAgICAgICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJf
T1BfQ09QWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBv
YmosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpbmZvLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIC8vY29kZSB0YWtlbiBmcm9tIHRoZSBIYWlrdSBzb3VyY2UgY29kZSAoUmFk
aW9CdXR0b24uY3BwKQorCisgICAgICAgIC8vIGxheW91dCB0aGUgcmVjdCBmb3IgdGhlIGRvdAor
ICAgICAgICBCUmVjdCByZWN0ID0gZnJhbWUgOworICAgICAgICBCVmlldyogdmlldyA9IGluZm8u
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICAgICAgLy8gY29sb3JzCisgICAgICAg
IHJnYl9jb2xvciBiZyA9IHVpX2NvbG9yKEJfUEFORUxfQkFDS0dST1VORF9DT0xPUik7CisgICAg
ICAgIHJnYl9jb2xvciBsaWdodGVubWF4OworICAgICAgICByZ2JfY29sb3IgbGlnaHRlbjE7Cisg
ICAgICAgIHJnYl9jb2xvciBkYXJrZW4xOworICAgICAgICByZ2JfY29sb3IgZGFya2VuMjsKKyAg
ICAgICAgcmdiX2NvbG9yIGRhcmtlbjM7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW5tYXg7CisK
KyAgICAgICAgcmdiX2NvbG9yIG5hdmlDb2xvciA9IHVpX2NvbG9yKEJfS0VZQk9BUkRfTkFWSUdB
VElPTl9DT0xPUik7CisgICAgICAgIHJnYl9jb2xvciBrbm9iOworICAgICAgICByZ2JfY29sb3Ig
a25vYkRhcms7CisgICAgICAgIHJnYl9jb2xvciBrbm9iTGlnaHQ7CisKKyAgICAgICAgaWYgKGlz
RW5hYmxlZChvYmopKSB7CisgICAgICAgICAgICBsaWdodGVubWF4ID0gdGludF9jb2xvcihiZywg
Ql9MSUdIVEVOX01BWF9USU5UKTsKKyAgICAgICAgICAgIGxpZ2h0ZW4xID0gdGludF9jb2xvcihi
ZywgQl9MSUdIVEVOXzFfVElOVCk7CisgICAgICAgICAgICBkYXJrZW4xID0gdGludF9jb2xvcihi
ZywgQl9EQVJLRU5fMV9USU5UKTsKKyAgICAgICAgICAgIGRhcmtlbjIgPSB0aW50X2NvbG9yKGJn
LCBCX0RBUktFTl8yX1RJTlQpOworICAgICAgICAgICAgZGFya2VuMyA9IHRpbnRfY29sb3IoYmcs
IEJfREFSS0VOXzNfVElOVCk7CisgICAgICAgICAgICBkYXJrZW5tYXggPSB0aW50X2NvbG9yKGJn
LCBCX0RBUktFTl9NQVhfVElOVCk7CisKKyAgICAgICAgICAgIGtub2IgPSBuYXZpQ29sb3I7Cisg
ICAgICAgICAgICBrbm9iRGFyayA9IHRpbnRfY29sb3IobmF2aUNvbG9yLCBCX0RBUktFTl8zX1RJ
TlQpOworICAgICAgICAgICAga25vYkxpZ2h0ID0gdGludF9jb2xvcihuYXZpQ29sb3IsIDAuMTUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGlnaHRlbm1heCA9IHRpbnRfY29sb3Io
YmcsIEJfTElHSFRFTl8yX1RJTlQpOworICAgICAgICAgICAgbGlnaHRlbjEgPSBiZzsKKyAgICAg
ICAgICAgIGRhcmtlbjEgPSBiZzsKKyAgICAgICAgICAgIGRhcmtlbjIgPSB0aW50X2NvbG9yKGJn
LCBCX0RBUktFTl8xX1RJTlQpOworICAgICAgICAgICAgZGFya2VuMyA9IHRpbnRfY29sb3IoYmcs
IEJfREFSS0VOXzJfVElOVCk7CisgICAgICAgICAgICBkYXJrZW5tYXggPSB0aW50X2NvbG9yKGJn
LCBCX0RJU0FCTEVEX0xBQkVMX1RJTlQpOworCisgICAgICAgICAgICBrbm9iID0gdGludF9jb2xv
cihuYXZpQ29sb3IsIEJfTElHSFRFTl8yX1RJTlQpOworICAgICAgICAgICAga25vYkRhcmsgPSB0
aW50X2NvbG9yKG5hdmlDb2xvciwgQl9MSUdIVEVOXzFfVElOVCk7CisgICAgICAgICAgICBrbm9i
TGlnaHQgPSB0aW50X2NvbG9yKG5hdmlDb2xvciwgKEJfTElHSFRFTl8yX1RJTlQgKyBCX0xJR0hU
RU5fTUFYX1RJTlQpIC8gMi4wKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRvdAorICAgICAg
ICBpZihpc0NoZWNrZWQob2JqKSkgeworICAgICAgICAgICAgLy8gZnVsbAorICAgICAgICAgICAg
dmlldy0+U2V0SGlnaENvbG9yKGtub2JEYXJrKTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxFbGxp
cHNlKHJlY3QpOworCisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3Ioa25vYik7CisgICAg
ICAgICAgICB2aWV3LT5GaWxsRWxsaXBzZShCUmVjdChyZWN0LmxlZnQgKyAyLCByZWN0LnRvcCAr
IDIsIHJlY3QucmlnaHQgLSAzLCByZWN0LmJvdHRvbSAtIDMpKTsKKworICAgICAgICAgICAgdmll
dy0+U2V0SGlnaENvbG9yKGtub2JMaWdodCk7CisgICAgICAgICAgICB2aWV3LT5GaWxsRWxsaXBz
ZShCUmVjdChyZWN0LmxlZnQgKyAzLCByZWN0LnRvcCArIDMsIHJlY3QucmlnaHQgLSA1LCByZWN0
LmJvdHRvbSAtIDUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGVtcHR5Cisg
ICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbm1heCk7CisgICAgICAgICAgICB2
aWV3LT5GaWxsRWxsaXBzZShyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY3QuSW5zZXRC
eSgtMS4wLCAtMS4wKTsKKworICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoZGFya2VuMSk7Cisg
ICAgICAgIHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgMTgwLjBmKTsKKyAgICAgICAgdmll
dy0+U2V0SGlnaENvbG9yKGxpZ2h0ZW5tYXgpOworICAgICAgICB2aWV3LT5TdHJva2VBcmMocmVj
dCwgNDUuMGYsIC0xODAuMGYpOworICAgICAgICAKKyAgICAgICAgcmVjdC5JbnNldEJ5KDEsIDEp
OworCisgICAgICAgIC8vIGlubmVyIGNpcmNsZQorICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3Io
ZGFya2VuMyk7CisgICAgICAgIHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgMTgwLjBmKTsK
KyAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGJnKTsKKyAgICAgICAgdmlldy0+U3Ryb2tlQXJj
KHJlY3QsIDQ1LjBmLCAtMTgwLjBmKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisg
ICAgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsbXQpIGNvbnN0CisgICAgeworICAgICAgICAv
KiBMZWF2ZSBzb21lIHNwYWNlIGZvciB0aGUgYXJyb3cgKi8KKyAgICAgICAgc3R5bGUtPnNldFBh
ZGRpbmdSaWdodChMZW5ndGgoMjIsIEZpeGVkKSk7CisgICAgICAgIGNvbnN0IGludCBtaW5IZWln
aHQgPSAyMDsKKyAgICAgICAgc3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgobWluSGVpZ2h0LCBG
aXhlZCkpOworICAgIH0KKworICAgIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG9i
aiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGZyYW1lKQorICAgIHsKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAg
IAorcHJpdmF0ZToKKyAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBib29sIHN1cHBvcnRzRm9jdXMoKSBjb25z
dDsKK307CisKK1JlbmRlclRoZW1lKiB0aGVtZSgpCit7CisgICAgc3RhdGljIFJlbmRlclRoZW1l
SGFpa3UgcmVuZGVyVGhlbWU7CisgICAgcmV0dXJuICZyZW5kZXJUaGVtZTsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZUhhaWt1OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29s
dXRlU2l6ZSh0cnVlKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250
RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVk
U2l6ZSgoaW50KSBiZV9wbGFpbl9mb250LT5TaXplKCkpOworfQorCit2b2lkIFJlbmRlclRoZW1l
SGFpa3U6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAg
aW50IHNpemUgPSAxMDsKKyAgICAvLyBUaGlzIHdhcyBjb3BpZWQgZnJvbSB0aGUgUXQgcG9ydDoK
KworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhl
biB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBBIGhhcmQtY29kZWQgc2l6ZSBvZiAnc2l6ZScgaXMgdXNlZC4g
VGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuIAorCisgICAgaWYgKHN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2l6ZSwgRml4ZWQpKTsKKworICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisg
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUsIEZpeGVkKSk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVIYWlrdTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K3sKKyAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIGNoZWNrYm94ZXMuCisgICAgc2V0Q2hlY2ti
b3hTaXplKHN0eWxlKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6
OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQoreworICAgIGlmIChwYWdlKQorICAgICAgICByZXR1
cm4gUmVuZGVyVGhlbWVIYWlrdTo6Y3JlYXRlKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUq
IGZhbGxiYWNrID0gUmVuZGVyVGhlbWVIYWlrdTo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOworICAg
IHJldHVybiBmYWxsYmFjazsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjRjNDE5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1NjcmVlbkhhaWt1LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JlZW4uaCIKKworI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisKKyNpbmNsdWRlIDxHcmFwaGljc0RlZnMuaD4KKyNpbmNsdWRlIDxpbnRlcmZhY2UvU2NyZWVu
Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCwg
YnV0IGl0IG5vdCB1c2VkIGZvciBub3cKKy8qCitzdGF0aWMgQlZpZXcqIGhhaWt1V2lkZ2V0Rm9y
UGFnZShjb25zdCBQYWdlKiBwYWdlKQoreworICAgIEZyYW1lKiBmcmFtZSA9IChwYWdlID8gcGFn
ZS0+bWFpbkZyYW1lKCkgOiAwKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IChmcmFtZSA/
IGZyYW1lLT52aWV3KCkgOiAwKTsKKworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBmcmFtZVZpZXctPmhhaWt1V2lkZ2V0KCk7Cit9Ki8KKworRmxv
YXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KikKK3sKKyAgICBCU2NyZWVuIHNjcmVlbjsKKyAgICAv
LyBGSVhNRTogV2UgYXNzdW1lIHRoaXMgc2NyZWVuIGlzIHZhbGlkCisgICAgcmV0dXJuIEZsb2F0
UmVjdChzY3JlZW4uRnJhbWUoKSk7Cit9CisKK0Zsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0
KFdpZGdldCogd2lkZ2V0KQoreworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB1c2UgdGhlIGdldF9k
ZXNrYmFyX2ZyYW1lKCkgZnVuY3Rpb24KKyAgICAvLyBmcm9tIEludGVyZmFjZURlZnMuaCB0byBt
YWtlIHRoaXMgc21hbGxlcgorICAgIHJldHVybiBzY3JlZW5SZWN0KHdpZGdldCk7Cit9CisKK2lu
dCBzY3JlZW5EZXB0aChXaWRnZXQqKQoreworICAgIEJTY3JlZW4gc2NyZWVuOworICAgIC8vIEZJ
WE1FOiBXZSBhc3N1bWUgdGhpcyBzY3JlZW4gaXMgdmFsaWQKKyAgICBjb2xvcl9zcGFjZSBjcyA9
IHNjcmVlbi5Db2xvclNwYWNlKCk7CisKKyAgICBzaXplX3QgcGl4ZWxDaHVuaywgcm93QWxpZ25t
ZW50LCBwaXhlbHNQZXJDaHVuazsKKyAgICBpZiAoZ2V0X3BpeGVsX3NpemVfZm9yKGNzLCAmcGl4
ZWxDaHVuaywgJnJvd0FsaWdubWVudCwgJnBpeGVsc1BlckNodW5rKSA9PSBCX09LKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHJpZ2h0CisgICAgICAgIHJldHVybiBw
aXhlbENodW5rICogODsKKyAgICB9CisKKyAgICByZXR1cm4gODsKK30KKworaW50IHNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gODsKK30KKworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikKK3sKKyAgICBC
U2NyZWVuIHNjcmVlbjsKKyAgICAvLyBGSVhNRTogV2UgYXNzdW1lIHRoaXMgc2NyZWVuIGlzIHZh
bGlkCisgICAgcmV0dXJuIHNjcmVlbi5Db2xvclNwYWNlKCkgPT0gQl9NT05PQ0hST01FXzFfQklU
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9TZWFyY2hQb3B1cE1lbnVIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWY5N2I4MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCisKKyNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTZWFyY2hQb3B1cE1lbnU6OlNlYXJjaFBvcHVwTWVudShQb3B1cE1l
bnVDbGllbnQqIGNsaWVudCkKKyAgICA6IFBvcHVwTWVudShjbGllbnQpCit7Cit9CisKK3ZvaWQg
U2VhcmNoUG9wdXBNZW51OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBTZWFyY2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyhj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcykKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNlYXJjaFBvcHVwTWVudTo6ZW5hYmxl
ZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9TaGFyZWRUaW1lckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGlt
ZXJIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NDY0NQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlr
dS5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVh
IEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZFRpbWVy
SGFpa3UuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisKKyNpbmNsdWRlIDxNZXNzYWdl
Lmg+CisjaW5jbHVkZSA8TWVzc2FnZVJ1bm5lci5oPgorI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2Vy
Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9BdXRvbG9jay5oPgorI2luY2x1ZGUgPExvb3Blci5oPgor
CisjZGVmaW5lIEZJUkVfTUVTU0FHRSAnZmlyZScKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1NoYXJlZFRpbWVySGFpa3U6OlNoYXJlZFRpbWVySGFpa3UoKQorICAgIDogQk1lc3NhZ2VGaWx0
ZXIoRklSRV9NRVNTQUdFKQorICAgICwgbV9maXJlVGltZSgwKQorICAgICwgbV9zaG91bGRSdW4o
dHJ1ZSksIG1fdGltZXJGdW5jdGlvbihOVUxMKQoreworfQorCitmaWx0ZXJfcmVzdWx0IFNoYXJl
ZFRpbWVySGFpa3U6OkZpbHRlcihCTWVzc2FnZSogbWVzc2FnZSwgQkhhbmRsZXIqKiBfdGFyZ2V0
KQoreworICAgIGlmIChtX3RpbWVyRnVuY3Rpb24gJiYgbV9zaG91bGRSdW4pCisgICAgICAgIG1f
dGltZXJGdW5jdGlvbigpOworCisgICAgcmV0dXJuIEJfU0tJUF9NRVNTQUdFOyAgCit9CisKK1No
YXJlZFRpbWVySGFpa3U6On5TaGFyZWRUaW1lckhhaWt1KCkKK3sKK30KKwordm9pZCBTaGFyZWRU
aW1lckhhaWt1OjpzZXRGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpCit7CisgICAgbV9maXJlVGlt
ZSA9IGZpcmVUaW1lOworICAgIGlmIChtX2ZpcmVUaW1lID4gMCAmJiBtX3Nob3VsZFJ1bikgewor
ICAgICAgICBiaWd0aW1lX3Qgc2xlZXB5VGltZSA9IChiaWd0aW1lX3QpKChtX2ZpcmVUaW1lIC0g
V1RGOjpjdXJyZW50VGltZSgpKSAqIDEwMDAwMDApOworICAgICAgICAKKyAgICAgICAgaWYoc2xl
ZXB5VGltZSA8IDApCisgICAgICAgICAgICBzbGVlcHlUaW1lID0gMDsKKworICAgICAgICBCTWVz
c2FnZVJ1bm5lcjo6U3RhcnRTZW5kaW5nKExvb3BlcigpLCBuZXcgQk1lc3NhZ2UoRklSRV9NRVNT
QUdFKSwgc2xlZXB5VGltZSwgMSk7CisgICAgfQorfQorCit2b2lkIFNoYXJlZFRpbWVySGFpa3U6
OnNldEZpcmVGdW5jdGlvbih2b2lkICgqZnVuY3Rpb24pKCkpCit7CisgICAgbV90aW1lckZ1bmN0
aW9uID0gZnVuY3Rpb247Cit9CisKK3ZvaWQgU2hhcmVkVGltZXJIYWlrdTo6c2V0U2hvdWxkUnVu
KGJvb2wgc2hvdWxkUnVuKQoreworICAgIG1fc2hvdWxkUnVuID0gc2hvdWxkUnVuOworfQorCisv
LyBTdGF0aWMgaW5zdGFuY2UKK1NoYXJlZFRpbWVySGFpa3UqIGdldFNoYXJlZFRpbWVySGFpa3Uo
KQoreworICAgIC8vIFBsZWFzZSBub3RlIHRoaXMgaXMgc3RpbGwgYW4gZXhwZXJpbWVudGFsIHNv
bHV0aW9uLgorCisgICAgQkxvb3BlciAqbG9vcGVyID0gQkxvb3Blcjo6TG9vcGVyRm9yVGhyZWFk
KGZpbmRfdGhyZWFkKDApKTsKKyAgICAvLyBBU1NFUlQobG9vcGVyKTsKKyAgICAvLyBGSVhNRTog
d2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjdXJyZW50IGxvb3BlciBoYXMgYSB2YWxpZCBpZiBub3Qg
YWRkIGEgbmV3IG9uZS4KKyAgICAvLyB3ZSBzaG91bGQgYWxzbyBiZSBzdXJlIHRoZSBsb29wZXIg
aXMgYSBCV2luZG93Li4KKworICAgIHN0YXRpYyBTaGFyZWRUaW1lckhhaWt1KiBzaGFyZWRUaW1l
ciA9IDA7CisKKyAgICBpZiAoIXNoYXJlZFRpbWVyKSB7CisgICAgICAgIEJBdXRvbG9jayBsb2Nr
KGxvb3Blcik7CisgICAgICAgIHNoYXJlZFRpbWVyID0gbmV3IFNoYXJlZFRpbWVySGFpa3UoKTsK
KyAgICAgICAgbG9vcGVyLT5BZGRDb21tb25GaWx0ZXIoc2hhcmVkVGltZXIpOyAgICAgICAKKyAg
ICB9CisKKyAgICByZXR1cm4gc2hhcmVkVGltZXI7Cit9CisKKy8vIFdlYkNvcmUgZnVuY3Rpb25z
Cit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZnVuY3Rpb24pKCkpCit7
CisgICAgU2hhcmVkVGltZXJIYWlrdSogdGltZXI9Z2V0U2hhcmVkVGltZXJIYWlrdSgpOworICAg
IEJBdXRvbG9jayBsb2NrKHRpbWVyLT5Mb29wZXIoKSk7CisgICAgdGltZXItPnNldEZpcmVGdW5j
dGlvbihmdW5jdGlvbik7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUg
ZmlyZVRpbWUpCit7CisgICAgU2hhcmVkVGltZXJIYWlrdSogdGltZXIgPSBnZXRTaGFyZWRUaW1l
ckhhaWt1KCk7CisgICAgQkF1dG9sb2NrIGxvY2sodGltZXItPkxvb3BlcigpKTsKKyAgICB0aW1l
ci0+c2V0U2hvdWxkUnVuKHRydWUpOworICAgIHRpbWVyLT5zZXRGaXJlVGltZShmaXJlVGltZSk7
Cit9CisKK3ZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKK3sKKyAgICBTaGFyZWRUaW1lckhhaWt1KiB0
aW1lciA9IGdldFNoYXJlZFRpbWVySGFpa3UoKTsKKyAgICBCQXV0b2xvY2sgbG9jayh0aW1lci0+
TG9vcGVyKCkpOworICAgIHRpbWVyLT5zZXRTaG91bGRSdW4oZmFsc2UpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hh
cmVkVGltZXJIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjOGFhYgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5oCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxs
ZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFNoYXJlZFRpbWVySGFpa3VfaAorI2RlZmluZSBTaGFyZWRUaW1lckhhaWt1X2gK
KworI2luY2x1ZGUgPE9TLmg+CisjaW5jbHVkZSA8TWVzc2FnZUZpbHRlci5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBTaGFyZWRUaW1lckhhaWt1IDogcHVibGljIEJNZXNz
YWdlRmlsdGVyIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgU2hhcmVkVGltZXJIYWlr
dSgpOworICAgICAgICAgICAgflNoYXJlZFRpbWVySGFpa3UoKTsKKworICAgICAgICAgICAgdm9p
ZCBzZXRGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpOworICAgICAgICAgICAgdm9pZCBzZXRGaXJl
RnVuY3Rpb24odm9pZCAoKmZ1bmN0aW9uKSgpKTsKKyAgICAgICAgICAgIHZvaWQgc2V0U2hvdWxk
UnVuKGJvb2wgc2hvdWxkUnVuKTsKKworICAgICAgICAgICAgLy92b2lkICBNZXNzYWdlUmVjZWl2
ZWQoQk1lc3NhZ2UqIG1lc3NhZ2UpOworICAgICAgICAgICAgdmlydHVhbCBmaWx0ZXJfcmVzdWx0
IEZpbHRlcihCTWVzc2FnZSogbWVzc2FnZSwgQkhhbmRsZXIqKiBfdGFyZ2V0KTsKKworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgLy92b2lkIHdhaXQoKTsKKyAgICAgICAgICAgIC8vc3Rh
dGljIGludDMyIHRocmVhZEZ1bmN0aW9uKHZvaWQgKmRhdGEpOworCisgICAgICAgICAgICAvL3Ro
cmVhZF9pZCBtX3RocmVhZDsKKyAgICAgICAgICAgIC8vc2VtX2lkIG1fd2FpdFNlbTsKKyAgICAg
ICAgICAgIGRvdWJsZSBtX2ZpcmVUaW1lOworICAgICAgICAgICAgdm9pZCAoKm1fdGltZXJGdW5j
dGlvbikoKTsKKyAgICAgICAgICAgIGJvb2wgbV9zaG91bGRSdW47CisgICAgfTsKKworICAgIFNo
YXJlZFRpbWVySGFpa3UqIGdldFNoYXJlZFRpbWVySGFpa3UoKTsKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFNoYXJlZFRpbWVySGFpa3VfaAorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1NvdW5kSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9Tb3VuZEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVl
OTNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1
LmNwcApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291bmQuaCIKKworI2lu
Y2x1ZGUgPEJlZXAuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgc3lzdGVtQmVl
cCgpCit7CisgICAgYmVlcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEu
Ni4zLjMKCg==
</data>
<flag name="review"
          id="16770"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32308</attachid>
            <date>2009-07-06 08:35:55 -0700</date>
            <delta_ts>2009-07-16 09:15:18 -0700</delta_ts>
            <desc>Patch to add a sixth bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-sixth-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>25280</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA5MjVhNjI3ZGUyNTg5Yzg0Njc5MWYxYWE4ZWYzNzIwZjcxOGU4ZDhjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgNiBKdWwgMjAwOSAxNzozMjo1NyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgc2l4dGggYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDUg
KysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TeXN0ZW1UaW1lSGFpa3UuY3Bw
ICAgIHwgICA0NyArKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcCB8ICAyMDEgKysrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5jcHAgIHwgICA2OCArKysrKysrKysKIFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaCAgICB8ICAgNTUgKysrKysrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9XaWRnZXRIYWlrdS5jcHAgICAgICAgIHwgIDExOSArKysrKysr
KysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNTk1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25z
KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TeXN0ZW1UaW1l
SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWNmMWMyZS4uMjk5Y2ZiOSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDggQEAKKzIwMDktMDctMDYgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgYSBzaXh0aCBidW5jaCBvZiBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTUyCisK
KyAgICAgICAgQWRkaW5nIGZpdmUgZmlsZXMsIFN5c3RlbVRpbWVIYWlrdS5jcHAsIFRlbXBvcmFy
eUxpbmtTdHVicy5jcHAsCisgICAgICAgIFRyYW5zbGF0b3JEZWNvZGVyLmNwcCwgVHJhbnNsYXRv
ckRlY29kZXIuaCBhbmQgV2lkZ2V0SGFpa3UuY3BwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9TeXN0ZW1UaW1lSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRU
aW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCk6CisgICAg
ICAgIChXZWJDb3JlOjppbnB1dEVsZW1lbnRBbHRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
c2V0QnV0dG9uRGVmYXVsdExhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRMYW5ndWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCk6CisgICAgICAgIChXZWJD
b3JlOjpmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzayk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2spOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnR29Gb3J3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z1N0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0N1dCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdJZ25vcmVTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdMZWFyblNwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Nl
YXJjaFdlYik6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRp
Y3Rpb25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbmsp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0JvbGQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnSXRhbGljKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ1VuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdP
dXRsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJl
Y3Rpb25NZW51KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHRE
aXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6c2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OnNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6c2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OnVua25vd25GaWxlU2l6ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QVhXZWJBcmVhVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpBWExpbmtUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYTGlz
dE1hcmtlclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QVhJbWFnZU1hcFRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhIZWFkaW5nVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVRpdGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYQnV0dG9uQWN0aW9uVmVyYik6CisgICAgICAgIChXZWJD
b3JlOjpBWFRleHRGaWVsZEFjdGlvblZlcmIpOgorICAgICAgICAoV2ViQ29yZTo6QVhSYWRpb0J1
dHRvbkFjdGlvblZlcmIpOgorICAgICAgICAoV2ViQ29yZTo6QVhDaGVja2VkQ2hlY2tCb3hBY3Rp
b25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFYVW5jaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJi
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYTGlua0FjdGlvblZlcmIpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhEZWZpbml0aW9uTGlzdFRlcm1UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYRGVmaW5p
dGlvbkxpc3REZWZpbml0aW9uVGV4dCk6CisgICAgICAgIChsb2FkUmVzb3VyY2VJbnRvQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OnN1cHBvcnRlZEtleVNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp1c2VySWRsZVRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpL
VVJMOjpmaWxlU3lzdGVtUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6
bmF0aXZlVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3VwcG9ydGVkS2V5U2l6ZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpUcmFuc2xhdG9yRGVjb2Rlcjo6VHJhbnNsYXRvckRlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRvckRlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFuc2xhdG9yRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0b3JEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zbGF0b3JEZWNvZGVyOjpnZXRCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3Jt
L2hhaWt1L1dpZGdldEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6V2lkZ2V0OjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpz
ZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGb2N1cyk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpoaWRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldpZGdldDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRJc1Nl
bGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6aW52YWxpZGF0ZVJlY3QpOgorCiAy
MDA5LTA3LTAyICBQaWVycmUgZCdIZXJiZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9TeXN0ZW1UaW1lSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9TeXN0ZW1UaW1lSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQ2MGQwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1N5c3Rl
bVRpbWVIYWlrdS5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5c3RlbVRp
bWUuaCIKKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citkb3VibGUgY3VycmVudFRpbWUoKQoreworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIHN0
cnVjdCB0aW1lem9uZSB0ejsKKworICAgIGdldHRpbWVvZmRheSgmdHYsICZ0eik7CisgICAgcmV0
dXJuIChkb3VibGUpdHYudHZfc2VjICsgKGRvdWJsZSkodHYudHZfdXNlYyAvIDEwMDAwMDAuMCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFhMDEzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICog
Q29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFp
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
ZmlnLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNvb2tpZUph
ci5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkRhdGFHcmlkQ29sdW1uTGlzdC5o
IgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJIaXN0b3J5LmgiCisjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgImxvYWRlci5o
IgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIKKyNpbmNsdWRlICJTY3Jv
bGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5n
LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4K
KworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCisvLyBMb2NhbGl6ZWRTdHJpbmdzCitTdHJpbmcgV2ViQ29yZTo6c3Vi
bWl0QnV0dG9uRGVmYXVsdExhYmVsKCkgeyByZXR1cm4gIlN1Ym1pdCI7IH0KK1N0cmluZyBXZWJD
b3JlOjppbnB1dEVsZW1lbnRBbHRUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBX
ZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJSZXNldCI7IH0KK1N0
cmluZyBXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UoKSB7IHJldHVybiAiZW4iOyB9CitTdHJpbmcg
V2ViQ29yZTo6c2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkgeyByZXR1cm4gIlNlYXJjaGFi
bGUgSW5kZXgiOyB9CitTdHJpbmcgV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgp
IHsgcmV0dXJuICJDaG9vc2UgRmlsZSI7IH0KK1N0cmluZyBXZWJDb3JlOjpmaWxlQnV0dG9uTm9G
aWxlU2VsZWN0ZWRMYWJlbCgpIHsgcmV0dXJuICJObyBmaWxlIHNlbGVjdGVkIjsgfQorU3RyaW5n
IFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKSB7IHJldHVy
biBTdHJpbmcoICJPcGVuIGluIG5ldyB0YWIiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKSB7IHJldHVybiBTdHJpbmcoICJEb3dubG9h
ZCBsaW5rIHRvIGRpc2siICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdD
b3B5TGlua1RvQ2xpcGJvYXJkKCkgeyByZXR1cm4gU3RyaW5nKCAiQ29weSBsaW5rIHRvIGNsaXBi
b2FyZCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUlu
TmV3V2luZG93KCkgeyByZXR1cm4gU3RyaW5nKCAiT3BlbiBpbWFnZSBpbiBuZXcgd2luZG93IiAp
OyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlz
aygpIHsgcmV0dXJuIFN0cmluZyggIkRvd25sb2FkIGltYWdlIHRvIGRpc2siICk7IH0KK1N0cmlu
ZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgpIHsgcmV0
dXJuIFN0cmluZyggIkNvcHkgaW1hZ2UgdG8gY2xpcGJvYXJkIiApOyB9CitTdHJpbmcgV2ViQ29y
ZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKSB7IHJldHVybiBTdHJp
bmcoICJPcGVuIGZyYW1lIGluIG5ldyB3aW5kb3ciICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdDb3B5KCkgeyByZXR1cm4gU3RyaW5nKCAiQ29weSIgKTsgfQorU3RyaW5n
IFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygpIHsgcmV0dXJuIFN0cmluZyggIkdv
IGJhY2siICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQo
KSB7IHJldHVybiBTdHJpbmcoICJHbyBmb3J3YXJkIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnU3RvcCgpIHsgcmV0dXJuIFN0cmluZyggIlN0b3AiICk7IH0KK1N0cmlu
ZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKSB7IHJldHVybiBTdHJpbmcoICJS
ZWxvYWQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDdXQoKSB7IHJl
dHVybiBTdHJpbmcoICJDdXQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdQYXN0ZSgpIHsgcmV0dXJuIFN0cmluZyggIlBhc3RlIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKSB7IHJldHVybiBTdHJpbmcoICJObyBn
dWVzc2VzIGZvdW5kIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSWdu
b3JlU3BlbGxpbmcoKSB7IHJldHVybiBTdHJpbmcoICJJZ25vcmUgc3BlbGxpbmciICk7IH0KK1N0
cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkgeyByZXR1cm4g
U3RyaW5nKCAiTGVhcm4gc3BlbGxpbmciICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdTZWFyY2hXZWIoKSB7IHJldHVybiBTdHJpbmcoICJTZWFyY2ggd2ViIiApOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkgeyBy
ZXR1cm4gU3RyaW5nKCAiTG9va3VwIGluIGRpY3Rpb25hcnkiICk7IH0KK1N0cmluZyBXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluaygpIHsgcmV0dXJuIFN0cmluZyggIk9wZW4gbGlu
ayIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIo
KSB7IHJldHVybiBTdHJpbmcoICJJZ25vcmUgZ3JhbW1hciIgKTsgfQorU3RyaW5nIFdlYkNvcmU6
OmNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpIHsgcmV0dXJuIFN0cmluZyggIlNwZWxs
aW5nIG1lbnUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Bl
bGxpbmdQYW5lbChib29sIHNob3cpIHsgcmV0dXJuIFN0cmluZyggIlNob3cgc3BlbGxpbmcgcGFu
ZWwiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5n
KCkgeyByZXR1cm4gU3RyaW5nKCAiQ2hlY2sgc3BlbGxpbmciICk7IH0KK1N0cmluZyBXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSB7IHJldHVybiBT
dHJpbmcoICJDaGVjayBzcGVsbGluZyB3aGlsZSB0eXBpbmciICk7IH0KK1N0cmluZyBXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSB7IHJldHVybiBT
dHJpbmcoICJDaGVjayBmb3IgZ3JhbW1hciB3aXRoIHNwZWxsaW5nIiApOyB9CitTdHJpbmcgV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKSB7IHJldHVybiBTdHJpbmcoICJGb250
IG1lbnUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdCb2xkKCkgeyBy
ZXR1cm4gU3RyaW5nKCAiQm9sZCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ0l0YWxpYygpIHsgcmV0dXJuIFN0cmluZyggIkl0YWxpYyIgKTsgfQorU3RyaW5nIFdlYkNv
cmU6OmNvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSgpIHsgcmV0dXJuIFN0cmluZyggIlVuZGVy
bGluZSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSB7
IHJldHVybiBTdHJpbmcoICJPdXRsaW5lIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKSB7IHJldHVybiBTdHJpbmcoICJXcml0aW5n
IGRpcmVjdGlvbiBtZW51IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFn
RGVmYXVsdERpcmVjdGlvbigpIHsgcmV0dXJuIFN0cmluZyggIkRlZmF1bHQgZGlyZWN0aW9uIiAp
OyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSB7IHJl
dHVybiBTdHJpbmcoICJMZWZ0IHRvIHJpZ2h0IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4
dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSB7IHJldHVybiBTdHJpbmcoICJSaWdodCB0byBsZWZ0
IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQo
KSB7IHJldHVybiBTdHJpbmcoICJJbnNwZWN0IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6c2VhcmNo
TWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCAiTm8gcmVjZW50IHRl
eHQgc2VhcmNoZXMiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpzZWFyY2hNZW51UmVjZW50U2VhcmNo
ZXNUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCAiUmVjZW50IHRleHQgc2VhcmNoZXMiICk7IH0KK1N0
cmluZyBXZWJDb3JlOjpzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKSB7IHJldHVy
biBTdHJpbmcoICJDbGVhciByZWNlbnQgdGV4dCBzZWFyY2hlcyIgKTsgfQorU3RyaW5nIFdlYkNv
cmU6OnVua25vd25GaWxlU2l6ZVRleHQoKSB7IHJldHVybiBTdHJpbmcoIlVua25vd24iKTsgfQor
U3RyaW5nIFdlYkNvcmU6OkFYV2ViQXJlYVRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3Ry
aW5nIFdlYkNvcmU6OkFYTGlua1RleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdl
YkNvcmU6OkFYTGlzdE1hcmtlclRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdl
YkNvcmU6OkFYSW1hZ2VNYXBUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJD
b3JlOjpBWEhlYWRpbmdUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3Jl
OjppbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IEludFNpemUmIHNpemUp
IHsgcmV0dXJuIFN0cmluZygiSW1hZ2UiKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBX
ZWJDb3JlOjpBWEJ1dHRvbkFjdGlvblZlcmIoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5n
IFdlYkNvcmU6OkFYVGV4dEZpZWxkQWN0aW9uVmVyYigpIHsgcmV0dXJuIFN0cmluZygpOyB9CitT
dHJpbmcgV2ViQ29yZTo6QVhSYWRpb0J1dHRvbkFjdGlvblZlcmIoKSB7IHJldHVybiBTdHJpbmco
KTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYQ2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYigpIHsgcmV0
dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhVbmNoZWNrZWRDaGVja0JveEFjdGlv
blZlcmIoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYTGlua0FjdGlv
blZlcmIoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYRGVmaW5pdGlv
bkxpc3RUZXJtVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhE
ZWZpbml0aW9uTGlzdERlZmluaXRpb25UZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworVmVj
dG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBWZWN0b3I8Y2hhcj4oKTsKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIGhpc3RvcnlDb250YWlucyhTdHJpbmcgY29uc3QmKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9
CisKK1N0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5
U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcgJmNoYWxsZW5nZVN0cmluZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCAmdXJsKQoreworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworZmxvYXQgdXNlcklkbGVUaW1lKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwLjA7Cit9CisKK3ZvaWQgY2FsbE9uTWFpblRocmVhZCh2
b2lkICgqKSgpKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBT
dHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0
cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Njcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJU
aGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGlj
IFNjcm9sbGJhclRoZW1lIHRoZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisKK3ZvaWQgZ2V0
U3VwcG9ydGVkS2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zYmE4Y2U5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9U
cmFuc2xhdG9yRGVjb2Rlci5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VHJhbnNsYXRvckRlY29kZXIuaCIKKworI2luY2x1ZGUgPFRyYW5zbGF0aW9uVXRpbHMuaD4KKyNp
bmNsdWRlIDxEYXRhSU8uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZQoreworCitUcmFuc2xhdG9y
RGVjb2Rlcjo6VHJhbnNsYXRvckRlY29kZXIoKQoreworICAgIG1faW1hZ2UgPSAwOworICAgIHNl
dFNpemUoLTEsLTEpOworfQorCitib29sIFRyYW5zbGF0b3JEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKSBjb25zdAoreworICAgIHJldHVybiAhKHNpemUoKSA9PSBJbnRTaXplKC0xLCAtMSkpOwor
fQorCitSR0JBMzJCdWZmZXIqIFRyYW5zbGF0b3JEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCisvLyBBbGwgc3BlY2lmaWMgZGVj
b2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEgdGhleSBhcmUgZ2l2
ZW4uCit2b2lkIFRyYW5zbGF0b3JEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpIAoreyAKKyAgICBpZihhbGxEYXRhUmVjZWl2ZWQpIHsKKyAg
ICAgICAgQk1lbW9yeUlPIGlvKGRhdGEtPmRhdGEoKSxkYXRhLT5zaXplKCkpOworICAgICAgICBt
X2ltYWdlID0gQlRyYW5zbGF0aW9uVXRpbHM6OkdldEJpdG1hcCgmaW8pOworICAgICAgICBpZiAo
bV9pbWFnZSkgeworICAgICAgICAgICAgLy9zZXQgdGhlIGltYWdlIHNpemUgZGVjb2RlZC4KKyAg
ICAgICAgICAgIHNldFNpemUobV9pbWFnZS0+Qm91bmRzKCkuV2lkdGgoKSArIDEsIG1faW1hZ2Ut
PkJvdW5kcygpLkhlaWdodCgpICsgMSk7CisgICAgICAgIH0gICAKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9U
cmFuc2xhdG9yRGVjb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVj
b2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZmJkMDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmgK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24g
PHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFRyYW5zbGF0b3JEZWNvZGVyX2gKKyNkZWZpbmUgVHJhbnNsYXRvckRlY29k
ZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8Qml0bWFwLmg+CisK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFRyYW5zbGF0b3JEZWNvZGVyIDogcHVi
bGljIEltYWdlRGVjb2RlciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFuc2xhdG9yRGVjb2Rl
cigpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKwor
ICAgICAgICAvLyBBbGwgc3BlY2lmaWMgZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5n
IHdpdGggdGhlIGRhdGEgdGhleSBhcmUgZ2l2ZW4uCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIDsKKworICAgICAg
ICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7
CisKKyAgICAgICAgQkJpdG1hcCogZ2V0Qml0bWFwKCkgeyByZXR1cm4gbV9pbWFnZTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgQkJpdG1hcCogbV9pbWFnZTsKKyAgICB9OworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJhbnNsYXRvckRlY29kZXJfaAorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQzODVmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1dpZGdldEhhaWt1LmNwcApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXaWRnZXQuaCIKKworI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisKKyNpbmNsdWRlIDxDb250cm9sLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQor
eworICAgIGluaXQod2lkZ2V0KTsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKK30KKworSW50
UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdl
dCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50UmVjdCByZWN0OworICAg
IGlmKHBsYXRmb3JtV2lkZ2V0KCktPkxvY2tMb29wZXIoKSl7CisgICAgICAgIHJlY3QgPSBwbGF0
Zm9ybVdpZGdldCgpLT5GcmFtZSgpOworICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5VbmxvY2tM
b29wZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBXaWRnZXQ6OnNl
dEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghcGxhdGZvcm1XaWRn
ZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGZyYW1lUmVjdCgpICE9IHJlY3Qpewor
ICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5Nb3ZlVG8ocmVjdC54KCksIHJlY3QueSgpKTsKKyAg
ICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+UmVzaXplVG8ocmVjdC53aWR0aCgpIC0gMSwgcmVjdC5o
ZWlnaHQoKSAtIDEpOworICAgIH0KK30KKwordm9pZCBXaWRnZXQ6OnNldEZvY3VzKCkKK3sKKyAg
ICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+TWFrZUZv
Y3VzKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3Ip
Cit7CisgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCkt
PlNldFZpZXdDdXJzb3IoY3Vyc29yLmltcGwoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzaG93KCkK
K3sKKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+
U2hvdygpOworfQorCit2b2lkIFdpZGdldDo6aGlkZSgpCit7CisgICAgaWYgKHBsYXRmb3JtV2lk
Z2V0KCkpCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPkhpZGUoKTsKK30KKwordm9pZCBXaWRn
ZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgSW50UmVjdCBjb25zdCYgcikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHBsYXRmb3JtV2lkZ2V0KCktPkludmFsaWRh
dGUocmVjdCk7CisgICAgcGxhdGZvcm1XaWRnZXQoKS0+Rmx1c2goKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="16771"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32861</attachid>
            <date>2009-07-16 05:21:47 -0700</date>
            <delta_ts>2009-07-16 06:43:32 -0700</delta_ts>
            <desc>Patch to add a first bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-first-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>10541</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA0ZDBkZmFiNmEyMWQxZWMzNjM4NTU5MDVlZmJjYjI3MjJhNDUzMmMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTQ6MTg6NDAgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIGZpcnN0IGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjggKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAgfCAgMTk5ICsrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2Fy
ZEhhaWt1LmggICB8ICAgNzEgKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAyOTggaW5zZXJ0
aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U1YTgwNi4uNzZlNTY0ZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzMSBAQAorMjAwOS0wNy0xNiAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhIGZpcnN0IGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODgKKworICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Q2xpcGJvYXJkSGFpa3UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkSGFpa3U6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRIYWlrdTo6Y2xlYXJBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhh
aWt1OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpzZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojp0eXBlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkSGFpa3U6OmRyYWdMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlr
dTo6ZHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpzZXREcmFn
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmRyYWdJbWFnZUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmNyZWF0ZURyYWdJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojp3cml0ZVVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRIYWlrdTo6aGFzRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3Uv
Q2xpcGJvYXJkSGFpa3UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlr
dTo6fkNsaXBib2FyZEhhaWt1KToKKwogMjAwOS0wNy0xNSAgRGltaXRyaSBHbGF6a292ICA8ZGds
YXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhOGQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuY3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZEhhaWt1
LmgiCisKKyNpbmNsdWRlICJIYXNoVGFibGUuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2lu
Y2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVk
ZSA8YXBwL0NsaXBib2FyZC5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxTdHJp
bmcuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NsaXBib2FyZEhhaWt1OjpDbGlwYm9h
cmRIYWlrdShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5nKSAK
KyAgICA6IENsaXBib2FyZChwb2xpY3ksIGZvckRyYWdnaW5nKQoreworfQorCit2b2lkIENsaXBi
b2FyZEhhaWt1OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIEJNZXNzYWdl
ICpkYXRhID0gKEJNZXNzYWdlICopIE5VTEw7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2Nr
KCkpIHsKKyAgICAgICAgaWYgKChkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCkpKSB7CisgICAg
ICAgICAgICBkYXRhLT5SZW1vdmVOYW1lKEJTdHJpbmcodHlwZSkuU3RyaW5nKCkpOworICAgICAg
ICAgICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKKyAgICAgICAgfQorICAgICAgICBiZV9jbGlw
Ym9hcmQtPlVubG9jaygpOworICAgIH0KK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6Y2xlYXJB
bGxEYXRhKCkgCit7CisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGJl
X2NsaXBib2FyZC0+Q2xlYXIoKTsKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKKyAg
ICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK1N0cmluZyBDbGlwYm9h
cmRIYWlrdTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0
IAoreworICAgIEJTdHJpbmcgcmVzdWx0OworICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBCTWVz
c2FnZSAqZGF0YSA9IChCTWVzc2FnZSAqKSBOVUxMOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+
TG9jaygpKSB7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpKSkgewor
ICAgICAgICAgICAgaWYgKGRhdGEtPkZpbmRTdHJpbmcoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSwg
JnJlc3VsdCkgPT0gQl9PSykKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkSGFpa3U6OnNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpIAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgQk1lc3NhZ2UgKmJkYXRhID0gKEJNZXNzYWdlICopIE5VTEw7CisKKyAgICBpZiAoYmVf
Y2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgaWYgKChiZGF0YSA9IGJlX2NsaXBib2FyZC0+
RGF0YSgpKSkgeworICAgICAgICAgICAgYmRhdGEtPlJlbW92ZU5hbWUoQlN0cmluZyh0eXBlKS5T
dHJpbmcoKSk7CisgICAgICAgICAgICBpZiAoYmRhdGEtPkFkZFN0cmluZyhCU3RyaW5nKHR5cGUp
LlN0cmluZygpLCBCU3RyaW5nKGRhdGEpKSA9PSBCX09LKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKKyAg
ICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQorSGFzaFNldDxTdHJpbmc+IENs
aXBib2FyZEhhaWt1Ojp0eXBlcygpIGNvbnN0IAoreworICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1
bHQ7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3NhZ2UgKikgTlVMTDsKKworICAgIGlmIChi
ZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBpZiAoKGRhdGEgPSBiZV9jbGlwYm9hcmQt
PkRhdGEoKSkpIHsKKyAgICAgICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgICAgICB1aW50MzIg
dHlwZTsKKyAgICAgICAgICAgIGludDMyIGNvdW50OworCisgICAgICAgICAgICBmb3IgKGludDMy
IGkgPSAwOyBkYXRhLT5HZXRJbmZvKEJfQU5ZX1RZUEUsIGksICZuYW1lLCAmdHlwZSwgJmNvdW50
KSA9PSBCX09LOyBpKyspCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuYW1lKTsKKyAgICAg
ICAgfQorICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZEhhaWt1OjpmaWxl
cygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
SW50UG9pbnQgQ2xpcGJvYXJkSGFpa3U6OmRyYWdMb2NhdGlvbigpIGNvbnN0IAoreyAKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRQb2ludCgwLDApOworfQorCitDYWNoZWRJ
bWFnZSogQ2xpcGJvYXJkSGFpa3U6OmRyYWdJbWFnZSgpIGNvbnN0IAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7IAorfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpzZXRE
cmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpIAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK05vZGUqIENsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2VFbGVtZW50KCkg
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsgCit9CisKK3ZvaWQgQ2xp
cGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBvaW50JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitEcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkSGFp
a3U6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xvYykgY29uc3QKK3sgCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBi
b2FyZEhhaWt1Ojp3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0
ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIENsaXBib2FyZEhhaWt1OjpoYXNEYXRhKCkgCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKKyAgICBCTWVzc2FnZSAqZGF0YSA9IChCTWVzc2FnZSAqKSBOVUxMOworCisgICAgaWYgKGJl
X2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBib2FyZC0+
RGF0YSgpKSkKKyAgICAgICAgICAgIHJlc3VsdCA9ICFkYXRhLT5Jc0VtcHR5KCk7CisKKyAgICAg
ICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJv
YXJkSGFpa3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU3ZTIyCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5o
CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENsaXBib2FyZEhhaWt1
X2gKKyNkZWZpbmUgQ2xpcGJvYXJkSGFpa3VfaAorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisj
aW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xv
Y2tlci5oPgorI2luY2x1ZGUgPGFwcC9DbGlwYm9hcmQuaD4KKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgY2xhc3MgQ2FjaGVkSW1hZ2U7CisKKyAgICAvLyBTdGF0ZSBhdmFpbGFibGUgZHVy
aW5nIElFJ3MgZXZlbnRzIGZvciBkcmFnIGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCisgICAgY2xh
c3MgQ2xpcGJvYXJkSGFpa3UgOiBwdWJsaWMgQ2xpcGJvYXJkIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIENsaXBib2FyZEhhaWt1KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIGJvb2wgZm9y
RHJhZ2dpbmcpOworICAgICAgICB+Q2xpcGJvYXJkSGFpa3UoKSB7IH0KKworICAgICAgICB2b2lk
IGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgICAgICB2b2lkIGNsZWFyQWxsRGF0
YSgpOworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1
Y2Nlc3MpIGNvbnN0OworICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3Mg
QVBJCisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CisKKyAgICAgICAgSW50UG9p
bnQgZHJhZ0xvY2F0aW9uKCkgY29uc3Q7CisgICAgICAgIENhY2hlZEltYWdlKiBkcmFnSW1hZ2Uo
KSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJ
bnRQb2ludCYpOworICAgICAgICBOb2RlKiBkcmFnSW1hZ2VFbGVtZW50KCk7CisgICAgICAgIHZv
aWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKKworICAgICAg
ICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2Mp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVs
ZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFt
ZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKik7CisK
KyAgICAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ2xpcGJvYXJkSGFpa3VfaAorCi0tIAoxLjYuMy4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32868</attachid>
            <date>2009-07-16 06:43:32 -0700</date>
            <delta_ts>2009-07-20 10:28:06 -0700</delta_ts>
            <desc>Patch to add a first bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-first-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>19281</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBkMjQ3MTJhNzFiYTQ5YTc1YmY1Zjg0MzVhYWY3M2MyYjZlZDk0ZTEyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTU6NDE6NDkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIGZpcnN0IGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzAgKysr
KysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcCB8ICAxOTkg
KysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2Fy
ZEhhaWt1LmggICB8ICAgNzEgKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tp
ZUphckhhaWt1LmNwcCB8ICAgNjEgKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vy
c29ySGFpa3UuY3BwICAgIHwgIDIzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNSBm
aWxlcyBjaGFuZ2VkLCA2MzggaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlr
dS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDdlNWE4MDYuLjk1MzNmNWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAKKzIwMDktMDctMTYgIE1heGlt
ZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBmaXJzdCBidW5jaCBvZiBIYWlrdS1z
cGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI2OTUyCisKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9DbGlw
Ym9hcmRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6
OkNsaXBib2FyZEhhaWt1KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpjbGVh
ckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmNsZWFyQWxsRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Z2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRIYWlrdTo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmZp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpkcmFnTG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmRyYWdJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEhhaWt1OjpjcmVhdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkSGFpa3U6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6d3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFp
a3U6OndyaXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6Omhhc0Rh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6On5DbGlwYm9hcmRIYWlrdSk6CisgICAg
ICAgICogcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3Uv
Q3Vyc29ySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6Q3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6fkN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJzb3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpwb2ludGVyQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6Om1vdmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jvc3ND
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZEN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjppQmVhbUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjp3YWl0Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OmhlbHBDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6ZWFzdFJlc2l6ZUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpub3J0aEVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0
UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OnNvdXRoUmVzaXplQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNvdXRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpzb3V0aFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2VzdFJlc2l6ZUN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmVhc3RXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5v
cnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFdl
c3RTb3V0aEVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uUmVzaXpl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OnJvd1Jlc2l6ZUN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjp2ZXJ0aWNhbFRleHRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2VsbEN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpub0Ryb3BDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpwcm9ncmVzc0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjphbGlhc0N1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub25lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
Om5vdEFsbG93ZWRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6em9vbUluQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6Onpvb21PdXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z3JhYkN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpncmFiYmluZ0N1cnNvcik6CisKIDIwMDktMDctMTUg
IERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0NsaXBib2FyZEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFp
a3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YThkOWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcApA
QCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDbGlwYm9hcmRIYWlrdS5oIgorCisjaW5jbHVkZSAiSGFzaFRhYmxlLmgiCisjaW5j
bHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPGFwcC9DbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxNZXNz
YWdlLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
bGlwYm9hcmRIYWlrdTo6Q2xpcGJvYXJkSGFpa3UoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGlj
eSwgYm9vbCBmb3JEcmFnZ2luZykgCisgICAgOiBDbGlwYm9hcmQocG9saWN5LCBmb3JEcmFnZ2lu
ZykKK3sKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkKK3sKKyAgICBCTWVzc2FnZSAqZGF0YSA9IChCTWVzc2FnZSAqKSBOVUxMOworCisgICAg
aWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgoZGF0YSA9IGJlX2NsaXBi
b2FyZC0+RGF0YSgpKSkgeworICAgICAgICAgICAgZGF0YS0+UmVtb3ZlTmFtZShCU3RyaW5nKHR5
cGUpLlN0cmluZygpKTsKKyAgICAgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q2xpcGJvYXJkSGFpa3U6OmNsZWFyQWxsRGF0YSgpIAoreworICAgIGlmIChiZV9jbGlwYm9hcmQt
PkxvY2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGJlX2Ns
aXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAg
fQorfQorCitTdHJpbmcgQ2xpcGJvYXJkSGFpa3U6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBl
LCBib29sJiBzdWNjZXNzKSBjb25zdCAKK3sKKyAgICBCU3RyaW5nIHJlc3VsdDsKKyAgICBzdWNj
ZXNzID0gZmFsc2U7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3NhZ2UgKikgTlVMTDsKKwor
ICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBpZiAoKGRhdGEgPSBiZV9j
bGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlmIChkYXRhLT5GaW5kU3RyaW5nKEJT
dHJpbmcodHlwZSkuU3RyaW5nKCksICZyZXN1bHQpID09IEJfT0spCisgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2so
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIENsaXBib2FyZEhhaWt1
OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSAKK3sKKyAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIEJNZXNzYWdlICpiZGF0YSA9IChCTWVzc2FnZSAq
KSBOVUxMOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGlmICgo
YmRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpIHsKKyAgICAgICAgICAgIGJkYXRhLT5SZW1v
dmVOYW1lKEJTdHJpbmcodHlwZSkuU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKGJkYXRhLT5B
ZGRTdHJpbmcoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSwgQlN0cmluZyhkYXRhKSkgPT0gQl9PSykK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGJlX2Ns
aXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBB
UEkKK0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRIYWlrdTo6dHlwZXMoKSBjb25zdCAKK3sKKyAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIEJNZXNzYWdlICpkYXRhID0gKEJNZXNzYWdl
ICopIE5VTEw7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgaWYg
KChkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCkpKSB7CisgICAgICAgICAgICBjaGFyICpuYW1l
OworICAgICAgICAgICAgdWludDMyIHR5cGU7CisgICAgICAgICAgICBpbnQzMiBjb3VudDsKKwor
ICAgICAgICAgICAgZm9yIChpbnQzMiBpID0gMDsgZGF0YS0+R2V0SW5mbyhCX0FOWV9UWVBFLCBp
LCAmbmFtZSwgJnR5cGUsICZjb3VudCkgPT0gQl9PSzsgaSsrKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hZGQobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2so
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVmUHRyPEZpbGVMaXN0
PiBDbGlwYm9hcmRIYWlrdTo6ZmlsZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IENsaXBib2FyZEhhaWt1OjpkcmFnTG9jYXRp
b24oKSBjb25zdCAKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50UG9p
bnQoMCwwKTsKK30KKworQ2FjaGVkSW1hZ2UqIENsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2UoKSBj
b25zdCAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOyAKK30KKwordm9p
ZCBDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9p
bnQmKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitOb2RlKiBDbGlwYm9hcmRIYWlr
dTo6ZHJhZ0ltYWdlRWxlbWVudCgpIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7IAorfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2VFbGVtZW50KE5v
ZGUqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRHJh
Z0ltYWdlUmVmIENsaXBib2FyZEhhaWt1OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdM
b2MpIGNvbnN0Cit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikgCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6d3JpdGVVUkwoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYsIEZyYW1lKikgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBDbGlwYm9hcmRIYWlrdTo6d3JpdGVSYW5nZShSYW5nZSosIEZyYW1lKikgCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBDbGlwYm9hcmRIYWlrdTo6aGFzRGF0YSgpIAorewor
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQk1lc3NhZ2UgKmRhdGEgPSAoQk1lc3NhZ2Ug
KikgTlVMTDsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBpZiAo
KGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKSkpCisgICAgICAgICAgICByZXN1bHQgPSAhZGF0
YS0+SXNFbXB0eSgpOworCisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMzllN2UyMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvQ2xpcGJvYXJkSGFpa3UuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBDbGlwYm9hcmRIYWlrdV9oCisjZGVmaW5lIENsaXBib2FyZEhhaWt1X2gKKworI2lu
Y2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZEFjY2Vzc1BvbGljeS5oIgor
CisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxhcHAvQ2xpcGJvYXJkLmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIENhY2hlZEltYWdlOworCisgICAg
Ly8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBh
bmQgY29weS9wYXN0ZQorICAgIGNsYXNzIENsaXBib2FyZEhhaWt1IDogcHVibGljIENsaXBib2Fy
ZCB7CisgICAgcHVibGljOgorICAgICAgICBDbGlwYm9hcmRIYWlrdShDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5nKTsKKyAgICAgICAgfkNsaXBib2FyZEhhaWt1
KCkgeyB9CisKKyAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAg
ICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKKyAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdDsKKyAgICAgICAgYm9vbCBzZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKworICAgICAgICAvLyBl
eHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMo
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNv
bnN0OworCisgICAgICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OworICAgICAgICBD
YWNoZWRJbWFnZSogZHJhZ0ltYWdlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdl
KENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAgICAgTm9kZSogZHJhZ0ltYWdl
RWxlbWVudCgpOworICAgICAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0
IEludFBvaW50Jik7CisKKyAgICAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlKEludFBvaW50JiBkcmFnTG9jKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xh
cmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
dGl0bGUsIEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFu
Z2UoUmFuZ2UqLCBGcmFtZSopOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7Cisg
ICAgfTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENsaXBib2FyZEhhaWt1
X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzUxOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlrdS5jcHAKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1F
OiBTaG91bGRuJ3QgdGhpcyBiZSBzYXZlZCB0byBhbmQgcmVzdG9yZWQgZnJvbSBkaXNrIHRvbz8K
K3N0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjb29raWVKYXI7CisKK3ZvaWQgc2V0Q29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qcG9saWN5VVJMKi8sIGNvbnN0IFN0
cmluZyYgdmFsdWUpCit7CisgICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsK
K30KKworU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBjb29r
aWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoKQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBhIHNldHRpbmcKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0N1cnNvckhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ3Vyc29ySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQy
Y2QwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1cnNvckhh
aWt1LmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIK
KworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxhcHAvQXBwRGVmcy5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3Vyc29yOjpDdXJzb3IoUGxhdGZvcm1DdXJz
b3IgcCkKKyAgICA6IG1faW1wbChwKQoreworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJz
b3ImIG90aGVyKQorICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKK3sKK30KKworQ3Vyc29yOjp+
Q3Vyc29yKCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9y
PShjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG1faW1wbCA9IG90aGVyLm1faW1wbDsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK3N0YXRpYyBDdXJzb3IgZ2xvYmFsX2N1cnNvcigoUGxhdGZv
cm1DdXJzb3IpQl9DVVJTT1JfU1lTVEVNX0RFRkFVTFQpOworc3RhdGljIEN1cnNvciBpYmVhbV9j
dXJzb3IoKFBsYXRmb3JtQ3Vyc29yKUJfQ1VSU09SX0lfQkVBTSk7CisKK2NvbnN0IEN1cnNvciYg
cG9pbnRlckN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgbW92ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGhhbmRDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxf
Y3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4g
aWJlYW1fY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQoreworICAgIHJl
dHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGhlbHBDdXJzb3IoKQorewor
ICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RSZXNpemVD
dXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IG5vcnRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBub3J0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9i
YWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFNv
dXRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29u
c3QgQ3Vyc29yJiBlYXN0V2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9j
dXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0
aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJu
IGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB2ZXJ0aWNhbFRl
eHRDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIGNlbGxDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25z
dCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBub0Ryb3BDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9i
YWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQoreworICAgIHJldHVy
biBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHByb2dyZXNzQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNv
cigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9u
ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNv
ciYgbm90QWxsb3dlZEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xv
YmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiYmluZ0N1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwotLSAKMS42LjMuMgoK
</data>
<flag name="review"
          id="17221"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32869</attachid>
            <date>2009-07-16 06:53:44 -0700</date>
            <delta_ts>2009-08-07 02:46:26 -0700</delta_ts>
            <desc>Patch to add a fourth bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-fourth-bunch-of-Haiku-specific-files-for-Web.patch</filename>
            <type>text/plain</type>
            <size>17417</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA5ZjZjNWE5ODBhYzg3OTdiYTc2MGE3Njc3OGJiOGQ5NmY5NmI0OTcwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTU6NTI6MDMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIGZvdXJ0aCBidW5jaCBvZiBIYWlrdS1zcGVjaWZpYyBmaWxlcyBmb3IgV2ViQ29yZS4K
Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDI4ICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwICAg
ICAgICAgfCAgMTMwICsrKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnRIYWlrdS5jcHAgIHwgIDIwMiArKysrKysrKysrKysrKysrKysrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAgfCAgIDg5ICsrKysr
KysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAg
fCAgIDQ0ICsrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDQ5MyBpbnNlcnRpb25zKCspLCAwIGRlbGV0
aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGFzdGVi
b2FyZEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
UGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNw
cAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggN2U1YTgwNi4uNTg1MWU3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAwOS0wNy0xNiAgTWF4aW1lIFNp
bW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIGZvdXJ0aCBidW5jaCBvZiBIYWlrdS1zcGVj
aWZpYyBmaWxlcyBmb3IgV2ViQ29yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI2OTg4CisKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QYXN0ZWJv
YXJkSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQp
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OnBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
Ojpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjprZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRv
d3NLZXlDb2RlRm9yS2V5RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdo
ZWVsRXZlbnQpOgorCiAyMDA5LTA3LTE1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmJlZWI4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisKKyNpbmNsdWRlICJE
b2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRl
IDxDbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKK3sK
K30KKworUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQoreworICAg
IHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQoKTsKKyAgICBy
ZXR1cm4gcGFzdGVib2FyZDsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihS
YW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZy
YW1lKQoreworICAgIEJDbGlwYm9hcmQgY2xpcGJvYXJkKCJXZWJLaXQiKTsKKyAgICBCTWVzc2Fn
ZSogZGF0YTsKKworICAgIGlmIChjbGlwYm9hcmQuTG9jaygpKSB7CisgICAgICAgIGNsaXBib2Fy
ZC5DbGVhcigpOworICAgICAgICBpZiAoKGRhdGEgPSBjbGlwYm9hcmQuRGF0YSgpKSkgeworICAg
ICAgICAgICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgQlN0cmluZyhmcmFtZS0+c2Vs
ZWN0ZWRUZXh0KCkpKTsKKyAgICAgICAgICAgIGNsaXBib2FyZC5Db21taXQoKTsKKyAgICAgICAg
fQorICAgICAgICBjbGlwYm9hcmQuVW5sb2NrKCk7CisgICAgfQorfQorCitib29sIFBhc3RlYm9h
cmQ6OmNhblNtYXJ0UmVwbGFjZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZyYW1l
KQoreworICAgIEJDbGlwYm9hcmQgY2xpcGJvYXJkKCJXZWJLaXQiKTsKKyAgICBCU3RyaW5nIHN0
cmluZzsKKyAgICBCTWVzc2FnZSogZGF0YTsKKworICAgIGlmIChjbGlwYm9hcmQuTG9jaygpKSB7
CisgICAgICAgIGlmICgoZGF0YSA9IGNsaXBib2FyZC5EYXRhKCkpKQorICAgICAgICAgICAgZGF0
YS0+RmluZFN0cmluZygidGV4dC9wbGFpbiIsICZzdHJpbmcpOworCisgICAgICAgIGNsaXBib2Fy
ZC5VbmxvY2soKTsKKyAgICB9CisJcmV0dXJuIHN0cmluZzsKK30KKworUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwg
UGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBj
aG9zZVBsYWluVGV4dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiwgRnJhbWUqKQoreworICAgIEJDbGlwYm9hcmQgY2xpcGJvYXJkKCJXZWJLaXQiKTsKKyAg
ICBCTWVzc2FnZSogZGF0YTsKKworICAgIGlmIChjbGlwYm9hcmQuTG9jaygpKSB7CisgICAgICAg
IGNsaXBib2FyZC5DbGVhcigpOworICAgICAgICBpZiAoKGRhdGEgPSBjbGlwYm9hcmQuRGF0YSgp
KSkgeworICAgICAgICAgICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgdXJsLnN0cmlu
ZygpKTsKKyAgICAgICAgICAgIGNsaXBib2FyZC5Db21taXQoKTsKKyAgICAgICAgfQorICAgICAg
ICBjbGlwYm9hcmQuVW5sb2NrKCk7CisgICAgfQorfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRl
SW1hZ2UoTm9kZSosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQoreworICAgIEJDbGlwYm9h
cmQgY2xpcGJvYXJkKCJXZWJLaXQiKTsKKyAgICBpZiAoY2xpcGJvYXJkLkxvY2soKSkgeworICAg
ICAgICBjbGlwYm9hcmQuQ2xlYXIoKTsKKyAgICAgICAgY2xpcGJvYXJkLkNvbW1pdCgpOworICAg
ICAgICBjbGlwYm9hcmQuVW5sb2NrKCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJk
RXZlbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlMWVh
YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXli
b2FyZEV2ZW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlICJLZXlib2FyZENvZGVz
LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5o
PgorI2luY2x1ZGUgPEludGVyZmFjZURlZnMuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckhhaWt1
S2V5Q29kZShjaGFyIHNpbmdsZUJ5dGUsIGludDMyIGtleUNvZGUpCit7CisJCXN3aXRjaChzaW5n
bGVCeXRlKXsKKwkJY2FzZSBCX0ZVTkNUSU9OX0tFWToKKworCSAgICAJc3dpdGNoIChrZXlDb2Rl
KSB7CisgICAgICAgIAljYXNlIEJfRjFfS0VZOgorICAgICAgICAJICAgIHJldHVybiAiRjEiOwor
ICAgICAgICAJY2FzZSBCX0YyX0tFWToKKyAgICAgICAgICAgIAlyZXR1cm4gIkYyIjsKKyAgICAg
ICAgCWNhc2UgQl9GM19LRVk6CisgICAgICAgICAgICAJcmV0dXJuICJGMyI7CisJCQljYXNlIEJf
RjRfS0VZOgorCQkJCXJldHVybiAiRjQiOworCQkJY2FzZSBCX0Y1X0tFWToKKwkJCQlyZXR1cm4g
IkY1IjsKKwkJCWNhc2UgQl9GNl9LRVk6CisJCQkJcmV0dXJuICJGNiI7CisJCQljYXNlIEJfRjdf
S0VZOgorCQkJCXJldHVybiAiRjciOworCQkJY2FzZSBCX0Y4X0tFWToKKwkJCQlyZXR1cm4gIkY4
IjsKKwkJCWNhc2UgQl9GOV9LRVk6CisJCQkJcmV0dXJuICJGOSI7CisJCQljYXNlIEJfRjEwX0tF
WToKKwkJCQlyZXR1cm4gIkYxMCI7CisJCQljYXNlIEJfRjExX0tFWToKKwkJCQlyZXR1cm4gIkYx
MSI7CisJCQljYXNlIEJfRjEyX0tFWToKKwkJCQlyZXR1cm4gIkYxMiI7CisJCQljYXNlIEJfUFJJ
TlRfS0VZOgorCQkJCXJldHVybiAiUHJpbnQiOworCQkJY2FzZSBCX1BBVVNFX0tFWToKKwkJCQly
ZXR1cm4gIlBhdXNlIjsKKwkJCWNhc2UgQl9TQ1JPTExfS0VZOgorCQkJCXJldHVybiAiIjsgLy9G
SVgKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b0FT
Q0lJVXBwZXIoKGludClrZXlDb2RlKSk7CisJICAgIAl9OworCSAgICAJYnJlYWs7CisKKwkgICAg
Y2FzZSBCX0JBQ0tTUEFDRToKKwkgICAgCXJldHVybiAiVSswMDA5IjsKKwkgICAgY2FzZSBCX0xF
RlRfQVJST1c6CisJICAgIAlyZXR1cm4gIkxlZnQiOworCSAgICBjYXNlIEJfUklHSFRfQVJST1c6
CisJICAgIAlyZXR1cm4gIlJpZ2h0IjsKKwkgICAgY2FzZSBCX1VQX0FSUk9XOgorCSAgICAJcmV0
dXJuICJVcCI7CisJICAgIGNhc2UgQl9ET1dOX0FSUk9XOgorCSAgICAJcmV0dXJuICJEb3duIjsK
KwkgICAgY2FzZSBCX0lOU0VSVDoKKwkgICAgCXJldHVybiAiSW5zZXJ0IjsKKwkgICAgY2FzZSBC
X0VOVEVSOgorCSAgICAJcmV0dXJuICJFbnRlciI7CisJICAgIGNhc2UgQl9ERUxFVEU6CisJICAg
IAlyZXR1cm4gIlUrMDA3RiI7CisJICAgIGNhc2UgQl9IT01FOgorCSAgICAJcmV0dXJuICJIb21l
IjsKKwkgICAgY2FzZSBCX0VORDoKKwkgICAgCXJldHVybiAiRW5kIjsKKwkgICAgY2FzZSBCX1BB
R0VfVVA6CisJICAgIAlyZXR1cm4gIlBhZ2VVcCI7CisJICAgIGNhc2UgQl9QQUdFX0RPV046CisJ
ICAgIAlyZXR1cm4gIlBhZ2VEb3duIjsKKwkgICAgLy9jYXNlIEJfU1BBQ0U6CisJICAgIC8vCXJl
dHVybiAiIjsKKwkgICAgY2FzZSBCX1RBQjoKKwkgICAgCXJldHVybiAiVSswMDA5IjsKKwkgICAg
Ly9jYXNlIEJfRVNDQVBFOgorCSAgICAvLwlyZXR1cm4gIiI7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgCXJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKChp
bnQpa2V5Q29kZSkpOworICAgIH0KK30KKworc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktl
eUV2ZW50KGNoYXIgc2luZ2xlQnl0ZSkKK3sKKyAgICBzd2l0Y2ggKHNpbmdsZUJ5dGUpIHsKKyAg
ICBjYXNlIEJfQkFDS1NQQUNFOgorICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNL
U1BBQ0Uga2V5CisgICAgY2FzZSBCX1RBQjoKKyAgICAgICByZXR1cm4gVktfVEFCOyAvLyAoMDkp
IFRBQiBrZXkqLyAKKyAgICBjYXNlIEJfUkVUVVJOOgorICAgICAgICByZXR1cm4gVktfUkVUVVJO
OyAvLygwRCkgUmV0dXJuIGtleQorICAgIGNhc2UgQl9FU0NBUEU6CisgICAgICAgIHJldHVybiBW
S19FU0NBUEU7IC8vICgxQikgRVNDIGtleQorICAgIGNhc2UgQl9TUEFDRToKKyAgICAgICAgcmV0
dXJuIFZLX1NQQUNFOyAvLyAoMjApIFNQQUNFQkFSCisgICAgY2FzZSBCX1BBR0VfVVA6CisgICAg
ICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtleQorICAgIGNhc2UgQl9QQUdF
X0RPV046CisgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkKKyAg
ICBjYXNlIEJfRU5EOgorICAgICAgICByZXR1cm4gVktfRU5EOyAvLyAoMjMpIEVORCBrZXkKKyAg
ICBjYXNlIEJfSE9NRToKKyAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkK
KyAgICBjYXNlIEJfTEVGVF9BUlJPVzoKKyAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkg
TEVGVCBBUlJPVyBrZXkKKyAgICBjYXNlIEJfVVBfQVJST1c6CisgICAgICAgIHJldHVybiBWS19V
UDsgLy8gKDI2KSBVUCBBUlJPVyBrZXkKKyAgICBjYXNlIEJfUklHSFRfQVJST1c6CisgICAgICAg
IHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICBjYXNlIEJfRE9X
Tl9BUlJPVzoKKyAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkK
KyAgICBjYXNlIEJfSU5TRVJUOgorICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElO
UyBrZXkKKyAgICBjYXNlIEJfREVMRVRFOgorICAgICAgICByZXR1cm4gVktfREVMRVRFOyAvLyAo
MkUpIERFTCBrZXkKKyAgICBjYXNlIDB4MmU6CisgICAgICAgIHJldHVybiggMCApOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiggMCApOworICAgIH0KK30KKworUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoQk1lc3NhZ2UgKm1lc3NhZ2UpCit7CisJQlN0
cmluZyBieXRlcyA9CW1lc3NhZ2UtPkZpbmRTdHJpbmcoImJ5dGVzIik7CisJbV90ZXh0ID0gU3Ry
aW5nOjpmcm9tVVRGOChieXRlcy5TdHJpbmcoKSwgYnl0ZXMuTGVuZ3RoKCkpOworICAgIG1fdW5t
b2RpZmllZFRleHQgPSBTdHJpbmcoYnl0ZXMuU3RyaW5nKCksIGJ5dGVzLkxlbmd0aCgpKTsKKyAg
ICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2RlKGJ5dGVzLkJ5
dGVBdCgwKSwgbWVzc2FnZS0+RmluZEludDMyKCJrZXkiKSk7CisKKyAgICBpZiAobWVzc2FnZS0+
d2hhdCA9PSBCX0tFWV9VUCkKKyAgICAgICAgbV90eXBlID0gS2V5VXA7CisgICAgZWxzZSBpZiAo
bWVzc2FnZS0+d2hhdCA9PSBCX0tFWV9ET1dOKQorICAgICAgICBtX3R5cGUgPSBLZXlEb3duOwor
CisgICAgbV9hdXRvUmVwZWF0ID0gdHJ1ZTsKKyAgICBtX2N0cmxLZXkgPSBmYWxzZTsKKyAgICBt
X2FsdEtleSA9IGZhbHNlOworICAgIG1fbWV0YUtleSA9IGZhbHNlOyAgICAKKyAgICBtX3dpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoYnl0ZXMuQnl0ZUF0
KDApKTsgCisgICAgbV9pc0tleXBhZCA9IGZhbHNlOworICAgIG1fc2hpZnRLZXkgPSBmYWxzZTsK
K30KKwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVu
dChUeXBlIHR5cGUsIGJvb2wpCit7CisgICAgLy8gQ2FuIG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBL
ZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMgd2UgbGFjayBpbmZvcm1hdGlvbiBmb3Ig
b3RoZXIgY29udmVyc2lvbnMuCisgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBt
X3R5cGUgPSB0eXBlOworICAgIGlmICh0eXBlID09IFJhd0tleURvd24pIHsKKyAgICAgICAgbV90
ZXh0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKKyAgICAgICAg
bV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSAwOworICAgIH0KK30KKworYm9vbCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzY3NmMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNw
cApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
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
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKworI2luY2x1ZGUgPFN1cHBvcnREZWZzLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1v
dXNlRXZlbnQoY29uc3QgQk1lc3NhZ2UqIG1zZywgQlBvaW50IHNjcmVlblBvaW50KQoreworICAg
IG1fdGltZXN0YW1wID0gIFdURjo6Y3VycmVudFRpbWUoKTsgLy8gRklYTUUgKGZyb20gdGhlIGJt
ZXNzYWdlPykKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQobXNnLT5GaW5kUG9pbnQoImJlOnZp
ZXdfd2hlcmUiKSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KHNjcmVlblBvaW50
KTsgLy8gSW50UG9pbnQobXNnLT5GaW5kUG9pbnQoIndoZXJlIikpOworCisgICAgbV9zaGlmdEtl
eSA9IGZhbHNlOyAvLyBGSVhNRQorICAgIG1fY3RybEtleSA9IGZhbHNlOworICAgIG1fYWx0S2V5
ID0gZmFsc2U7CisgICAgbV9tZXRhS2V5ID0gZmFsc2U7CisKKyAgICBpbnQzMiBidXR0b25zID0g
bXNnLT5GaW5kSW50MzIoImJ1dHRvbnMiKTsKKyAgICBzd2l0Y2ggKGJ1dHRvbnMpIHsKKyAgICBj
YXNlIDA6CisgICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgMToJCisgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSAyOgorICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfTsKKworICAgIHN3aXRjaCAobXNnLT53aGF0KSB7CisgICAgY2Fz
ZSBCX01PVVNFX0RPV046CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFByZXNzZWQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQl9NT1VTRV9VUDoKKyAgICAgICAgbV9ldmVudFR5
cGUgPSBNb3VzZUV2ZW50UmVsZWFzZWQ7CisgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsg
Ly8gRklYTUU6IHdlYmNvcmUgd2FudHMgdG8ga25vdyB0aGUgYnV0dG9uIHJlbGVhc2VkIGJ1dCB3
ZSBkb24ndCBrbm93LgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEJfTU9VU0VfTU9WRUQ6Cisg
ICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRNb3ZlZDsKKyAgICAg
ICAgYnJlYWs7CisgICAgfTsKKworICAgIG1fY2xpY2tDb3VudCA9IG1zZy0+RmluZEludDMyKCJj
bGlja3MiKTsKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZlNjJkYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3BwCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5n
b29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQo
Qk1lc3NhZ2UgKm1lc3NhZ2UpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4yCgo=
</data>
<flag name="review"
          id="17222"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32870</attachid>
            <date>2009-07-16 07:22:55 -0700</date>
            <delta_ts>2009-07-17 07:55:27 -0700</delta_ts>
            <desc>Patch to add ScrollBar and ScrollView code specific to Haiku.</desc>
            <filename>Added-ScrollBar-and-ScrollView-code-specific-to-Haik.patch</filename>
            <type>text/plain</type>
            <size>45295</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAxMWI2Njk0NjkyNThiMGQwYTkzNDQ3NDQyYzZjNmRlZDllZjMwM2I1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTY6MTg6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBTY3JvbGxCYXIgYW5kIFNjcm9sbFZpZXcgY29kZSBzcGVjaWZpYyB0byBIYWlrdS4KCi0t
LQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx
MDIgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXIuaCAgICAg
ICAgfCAgIDYzICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhh
aWt1LmNwcCB8ICAxMjUgKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdD
YW52YXNIYWlrdS5jcHAgIHwgIDIwMCArKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
U2Nyb2xsVmlld0NhbnZhc0hhaWt1LmggICAgfCAgIDc3ICsrKysKIFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvU2Nyb2xsVmlld0hhaWt1LmNwcCAgICAgICAgfCAgMzE1ICsrKysrKysrKysrKysrCiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAgICAgICAgICAgIHwgIDQ3NiAr
KysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3
LmggICAgICAgICAgICAgfCAgIDg0ICsrKysKIDggZmlsZXMgY2hhbmdlZCwgMTQ0MiBpbnNlcnRp
b25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNI
YWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxW
aWV3SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9X
S1Njcm9sbFZpZXcuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9XS1Njcm9sbFZpZXcuaAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggN2U1YTgwNi4uNDZmNzg0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDUgQEAKKzIwMDkt
MDctMTYgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgU2Nyb2xsQmFyIGFu
ZCBTY3JvbGxWaWV3IGNvZGUgc3BlY2lmaWMgdG8gSGFpa3UuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4OAorCisgICAgICAgICogcGxhdGZvcm0v
aGFpa3UvUGxhdGZvcm1TY3JvbGxCYXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybVNjcm9sbGJhcjo6aXNXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3Jv
bGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOgorICAgICAgICAqIHBsYXRm
b3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEhh
aWt1U2Nyb2xsQmFyOjpIYWlrdVNjcm9sbEJhcik6CisgICAgICAgIChIYWlrdVNjcm9sbEJhcjo6
VmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNjcm9s
bGJhcik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKToK
KyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoUGxh
dGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUG9zaXRpb24pOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9s
bGJhcjo6d2lkdGgpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OmhlaWdodCk6CisgICAg
ICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdCk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9s
bGJhcjo6c2V0RW5hYmxlZCk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6cGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpTY3JvbGxWaWV3Q2Fu
dmFzSGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpEcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TWVzc2FnZVJlY2Vp
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TW91c2VNb3Zl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlRG93bik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNlVXApOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpEb1Njcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OktleURvd24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpLZXlVcCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Q2FudmFzSGFpa3U6OldpbmRvd0FjdGl2YXRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkZyYW1lUmVzaXplZCk6CisgICAgICAgICogcGxhdGZv
cm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpTZXRTY3JvbGxCYXJNYXhWKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6U2V0U2Nyb2xsQmFyTWF4SCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNldFNjcm9sbFZpZXcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbFZpZXdQcml2YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpBdHRh
Y2hlZFRvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjpLZXlEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZp
ZXdQcml2YXRlOjpLZXlVcCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxW
aWV3UHJpdmF0ZTo6VmlzaWJsZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OlNjcm9sbFZpZXdQcml2YXRlOjpTZXRDb250ZW50U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6Q29udGVudFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OkNvbnRlbnRXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6Q29udGVudEhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6U2Ny
b2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2
YXRlOjpTY3JvbGxCeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUlu
aXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsYmFyTW9kZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxiYXJNb2Rlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtUmVtb3ZlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDb250ZW50c1NpemUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1NpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2NyZWVuVG9Db250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzVG9TY3JlZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1DYW5CbGl0T25TY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRBbGxvd3NTY3JvbGxpbmcpOgorICAgICAgICAqIHBsYXRm
b3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoV0tTY3JvbGxWaWV3
OjpXS1Njcm9sbFZpZXcpOgorICAgICAgICAoV0tTY3JvbGxWaWV3Ojp+V0tTY3JvbGxWaWV3KToK
KyAgICAgICAgKFdLU2Nyb2xsVmlldzo6SW5zdGFudGlhdGUpOgorICAgICAgICAoV0tTY3JvbGxW
aWV3OjpBcmNoaXZlKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6QXR0YWNoZWRUb1dpbmRvdyk6
CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdyk6CisgICAgICAgIChX
S1Njcm9sbFZpZXc6OkFsbEF0dGFjaGVkKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6QWxsRGV0
YWNoZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpTY3JvbGxCYXIpOgorICAgICAgICAoV0tT
Y3JvbGxWaWV3OjpTY3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6U2V0U2Ny
b2xsQmFyTW9kZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlNldFRhcmdldCk6CisgICAgICAg
IChXS1Njcm9sbFZpZXc6OlRhcmdldCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6Ok1lc3NhZ2VS
ZWNlaXZlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6Ok1vdXNlRG93bik6CisgICAgICAgIChX
S1Njcm9sbFZpZXc6Ok1vdXNlVXApOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNb3VzZU1vdmVk
KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6RnJhbWVNb3ZlZCk6CisgICAgICAgIChXS1Njcm9s
bFZpZXc6OlJlc2l6ZVRvUHJlZmVycmVkKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6R2V0UHJl
ZmVycmVkU2l6ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OkNhbGNGcmFtZSk6CisgICAgICAg
IChXS1Njcm9sbFZpZXc6Ok1vZGlmeUZsYWdzKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6V2lu
ZG93QWN0aXZhdGVkKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TWFrZUZvY3VzKToKKyAgICAg
ICAgKFdLU2Nyb2xsVmlldzo6UmVzb2x2ZVNwZWNpZmllcik6CisgICAgICAgIChXS1Njcm9sbFZp
ZXc6OkdldFN1cHBvcnRlZFN1aXRlcyk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6Ok1pblNpemUp
OgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpQcmVmZXJyZWRTaXplKToKKyAgICAgICAgKFdLU2Ny
b2xsVmlldzo6UGVyZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3
Lmg6IEFkZGVkLgorCiAyMDA5LTA3LTE1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE0ZDAzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RA
Z21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsYXRmb3JtU2Nyb2xsYmFyX2gKKyNkZWZpbmUg
UGxhdGZvcm1TY3JvbGxiYXJfaAorCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCisKKyNpbmNsdWRlIDxpbnRlcmZhY2UvU2Nyb2xsQmFyLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgU2Ny
b2xsYmFyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJh
ckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7Cisg
ICAgICAgIHZpcnR1YWwgflBsYXRmb3JtU2Nyb2xsYmFyKCk7CisKKyAgICAgICAgdmlydHVhbCBi
b29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZpcnR1YWwg
aW50IHdpZHRoKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisKKyAgICAgICAg
c3RhdGljIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PihCX0hfU0NST0xMX0JBUl9IRUlHSFQpOyB9CisgICAgICAgIHN0YXRpYyBpbnQgdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oQl9WX1NDUk9M
TF9CQVJfV0lEVEgpOyB9CisKKyAgICAgICAgdm9pZCB2YWx1ZUNoYW5nZWQoZmxvYXQpOworICAg
IHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworICAgIH07CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsYXRmb3JtU2Nyb2xsYmFyX2gK
KwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhh
aWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjMTk3ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5j
cHAKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2
ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJh
ci5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUg
IkN1cnNvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgor
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNp
bmNsdWRlIDxWaWV3Lmg+CisKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKworY2xhc3Mg
SGFpa3VTY3JvbGxCYXIgOiBwdWJsaWMgQlNjcm9sbEJhcgoreworcHVibGljOgorICAgIEhhaWt1
U2Nyb2xsQmFyKFBsYXRmb3JtU2Nyb2xsYmFyKiBwbGF0Zm9ybVNjcm9sbGJhciwgQlZpZXcqIHRh
cmdldCwgb3JpZW50YXRpb24gcG9zdHVyZSkgCisgICAgICAgIDogQlNjcm9sbEJhcigocG9zdHVy
ZSA9PSBCX1ZFUlRJQ0FMKSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgQlJlY3QoMCwgMCwg
Ql9WX1NDUk9MTF9CQVJfV0lEVEgsIDApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSZWN0
KDAsIDAsIDAsIEJfSF9TQ1JPTExfQkFSX0hFSUdIVCksCisgICAgICAgICAgICAgICAgICAgICAi
c2Nyb2xsX2JhciIsIHRhcmdldCwgMCwgMSwgcG9zdHVyZSkKKyAgICB7CisgICAgICAgIG1fcGxh
dGZvcm1TY3JvbGxiYXIgPSBwbGF0Zm9ybVNjcm9sbGJhcjsKKyAgICB9CisKKyAgICB2b2lkIFZh
bHVlQ2hhbmdlZChmbG9hdCBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIG1fcGxhdGZvcm1TY3Jv
bGxiYXItPnZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBQbGF0
Zm9ybVNjcm9sbGJhciogbV9wbGF0Zm9ybVNjcm9sbGJhcjsKK307CisKK1BsYXRmb3JtU2Nyb2xs
YmFyOjpQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKKyAgICA6IFNjcm9sbGJhcihjbGllbnQs
IG9yaWVudGF0aW9uLCBzaXplKQoreworICAgIEhhaWt1U2Nyb2xsQmFyKiBzY3JvbGxiYXIgPSBu
ZXcgSGFpa3VTY3JvbGxCYXIodGhpcywgLyp0YXJnZXQqL05VTEwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpID8gQl9WRVJUSUNBTCA6IEJfSE9SSVpPTlRBTCk7CisgICAgc2V0UGxhdGZv
cm1XaWRnZXQoc2Nyb2xsYmFyKTsKK30JCQkJCisKK1BsYXRmb3JtU2Nyb2xsYmFyOjp+UGxhdGZv
cm1TY3JvbGxiYXIoKQoreworICAgIHNldFBsYXRmb3JtV2lkZ2V0KE5VTEwpOworfQorCit2b2lk
IFBsYXRmb3JtU2Nyb2xsYmFyOjp2YWx1ZUNoYW5nZWQoZmxvYXQgbmV3VmFsdWUpCit7CisgICAg
c2V0VmFsdWUoKGludCkgbmV3VmFsdWUpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1
cGRhdGVUaHVtYlBvc2l0aW9uKCkKK3sKKyAgICBIYWlrdVNjcm9sbEJhciogc2Nyb2xsYmFyID0g
c3RhdGljX2Nhc3Q8SGFpa3VTY3JvbGxCYXIqPihwbGF0Zm9ybVdpZGdldCgpKTsKKyAgICBzY3Jv
bGxiYXItPlNldFZhbHVlKG1fY3VycmVudFBvcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxi
YXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpCit7CisgICAgSGFpa3VTY3JvbGxCYXIqIHNjcm9s
bGJhciA9IHN0YXRpY19jYXN0PEhhaWt1U2Nyb2xsQmFyKj4ocGxhdGZvcm1XaWRnZXQoKSk7Cisg
ICAgZmxvYXQgcHJvcG9ydGlvbiA9IChmbG9hdCkgbV92aXNpYmxlU2l6ZSAvICAoZmxvYXQpIG1f
dG90YWxTaXplOworICAgIGlmICghKHByb3BvcnRpb24gPT0gc2Nyb2xsYmFyLT5Qcm9wb3J0aW9u
KCkgfHwgcHJvcG9ydGlvbiA8IDAuMCkpCisgICAgICAgIHNjcm9sbGJhci0+U2V0UHJvcG9ydGlv
bihwcm9wb3J0aW9uKTsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFdpZGdldDo6d2lkdGgoKTsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xs
YmFyOjpoZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OmhlaWdodCgpOworfQor
Cit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnNldEZyYW1lUmVjdChyZWN0KTsKK30KKwordm9pZCBQ
bGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgUGxhdGZv
cm1TY3JvbGxiYXI6OnNldEVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3Jv
bGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qp
Cit7CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdGhpcz8KK30KKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjczMjNkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5jcHAKQEAgLTAsMCArMSwyMDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56
YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3Q2FudmFzSGFpa3UuaCIKKworI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgorCisjaW5j
bHVkZSAiU2hhcmVkVGltZXJIYWlrdS5oIgorCisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4K
KyNpbmNsdWRlIDxTY3JvbGxCYXIuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8
TG9vcGVyLmg+CisjaW5jbHVkZSA8QXV0b2xvY2suaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Njcm9sbFZpZXdDYW52YXNIYWlrdTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1KFNjcm9sbFZp
ZXcqIHNjcm9sbFZpZXcsIEJWaWV3KiBwYXJlbnQsIHVpbnQzMiBmbGFncykKKyAgICA6IEJWaWV3
KEJSZWN0KDAsMCwwLDApLCAic2Nyb2xsX3ZpZXdfY2FudmFzIiwgQl9GT0xMT1dfQUxMX1NJREVT
LCBCX1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRTIHwgZmxhZ3MpCisgICAgLCBtX3Njcm9sbFZp
ZXcoc2Nyb2xsVmlldykKK3sKKyAgICBTZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7Cit9CisK
Kwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkRyYXcoQlJlY3QgdXBkYXRlUmVjdCkKK3sK
KyAgICBGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3
KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSB8fCAhZnYtPmZyYW1lKCktPmNvbnRlbnRS
ZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoZnYtPm5lZWRzTGF5b3V0
KCkpCisgICAgICAgIGZ2LT5sYXlvdXQoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjdHgodGhp
cyk7CisgICAgZnYtPmZyYW1lKCktPnBhaW50Q2FyZXQoJmN0eCwgMCwgMCwgdXBkYXRlUmVjdCk7
Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNZXNzYWdlUmVjZWl2ZWQoQk1lc3Nh
Z2UgKm1zZykKK3sKKyAgICAvLyBGSVhNRTogQ2FwdHVyZSBtb3VzZSB3aGVlbCBtZXNzYWdlcwor
ICAgIEJWaWV3OjpNZXNzYWdlUmVjZWl2ZWQobXNnKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2Fu
dmFzSGFpa3U6Ok1vdXNlTW92ZWQoQlBvaW50IHdoZXJlLCB1aW50MzIgY29kZSwgY29uc3QgQk1l
c3NhZ2UqIGFfbWVzc2FnZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8
ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQlBvaW50IHNjcmVlblBvc2l0
aW9uID0gQ29udmVydFRvU2NyZWVuKHdoZXJlKTsKKworICAgIGZ2LT5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQoYV9tZXNzYWdlLCBzY3JlZW5Q
b3NpdGlvbikpOworCisgICAgQlZpZXc6Ok1vdXNlTW92ZWQod2hlcmUsIGNvZGUsIGFfbWVzc2Fn
ZSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZURvd24oQlBvaW50IHdo
ZXJlKQoreworICAgIEJNZXNzYWdlKiBtZXNzYWdlPUxvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgp
OworICAgIGlmKCFtZXNzYWdlKSByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZ2
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBp
ZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICBCUG9pbnQgc2Ny
ZWVuUG9zaXRpb24gPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICBmdi0+ZnJhbWUoKS0+
bG9hZGVyKCktPnJlc2V0TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKTsKKworICAg
aW50MzIgYnV0dG9ucyA9IG1lc3NhZ2UtPkZpbmRJbnQzMigiYnV0dG9ucyIpOworCisgICBpZigg
YnV0dG9ucyA9PSAyICkKKyAgICAgICBmdi0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRD
b250ZXh0TWVudUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChtZXNzYWdlLHNjcmVlblBvc2l0aW9u
KSk7CisgICBlbHNlCisgICAgICAgZnYtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVN
b3VzZVByZXNzRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2Usc2NyZWVuUG9zaXRpb24p
KTsKKworICAgQlZpZXc6Ok1vdXNlRG93bih3aGVyZSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0Nh
bnZhc0hhaWt1OjpNb3VzZVVwKEJQb2ludCB3aGVyZSkKK3sKKyAgICBCTWVzc2FnZSogbWVzc2Fn
ZT1Mb29wZXIoKS0+Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZighbWVzc2FnZSkgcmV0dXJuOwor
CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiBmdiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1l
Vmlldyo+KG1fc2Nyb2xsVmlldyk7CisgICAgaWYgKCFmdiB8fCAhZnYtPmZyYW1lKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEJQb2ludCBzY3JlZW5Qb3NpdGlvbiA9IENvbnZlcnRUb1NjcmVl
bih3aGVyZSk7CisKKyAgICBmdi0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNl
UmVsZWFzZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChtZXNzYWdlLCBzY3JlZW5Qb3NpdGlvbikp
OworCisgICAgQlZpZXc6Ok1vdXNlVXAod2hlcmUpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52
YXNIYWlrdTo6RG9TY3JvbGwoYm9vbCBpc0hvcml6b250YWwsIGZsb2F0IG11bHRpcGxpZXIpCit7
CisgICAgcHJpbnRmKCJTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkRvU2Nyb2xsXG4iKTsKK30KKwor
dm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OktleURvd24oY29uc3QgY2hhciogYnl0ZXMsIGlu
dDMyIG51bUJ5dGVzKQoreworICAgIEJNZXNzYWdlKiBtZXNzYWdlPUxvb3BlcigpLT5DdXJyZW50
TWVzc2FnZSgpOworICAgIGlmKCFtZXNzYWdlKSByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3
KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAJcmV0dXJuOworCisgICAgaWYo
IWZ2LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2
ZW50KG1lc3NhZ2UpKSkKKyAgICAJcHJpbnRmKCItLT5LZXlEb3duOiBub3QgYXJyaXZlZFxuIik7
ICAgIAorCisgICAgaWYoc3RhdGljX2Nhc3Q8aW50PihieXRlc1swXSkgIT0gc3RhdGljX2Nhc3Q8
aW50PihCX1RBQikpIC8vb3RoZXJzPworICAgICAgICBCVmlldzo6S2V5RG93bihieXRlcywgbnVt
Qnl0ZXMpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5VXAoY29uc3QgY2hh
ciogYnl0ZXMsIGludDMyIG51bUJ5dGVzKQoreworICAgIEJNZXNzYWdlKiBtZXNzYWdlPUxvb3Bl
cigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlmKCFtZXNzYWdlKSByZXR1cm47CisKKyAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4o
bV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAJcmV0dXJu
OworCisgICAgaWYoZnYtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9y
bUtleWJvYXJkRXZlbnQobWVzc2FnZSkpKQorICAgIAlwcmludGYoIi0tPktleVVwOiBub3QgYXJy
aXZlZFxuIik7IAorCisgICAgaWYoc3RhdGljX2Nhc3Q8aW50PihieXRlc1swXSkgIT0gc3RhdGlj
X2Nhc3Q8aW50PihCX1RBQikpIC8vb3RoZXJzPworICAgICAgICBCVmlldzo6S2V5VXAoYnl0ZXMs
IG51bUJ5dGVzKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OldpbmRvd0FjdGl2
YXRlZChib29sIHN0YXRlKQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnYgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAgIGlmICghZnYgfHwg
IWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmdi0+ZnJhbWUoKS0+cGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHN0YXRlKTsKK30KKworCit2b2lkIFNjcm9s
bFZpZXdDYW52YXNIYWlrdTo6RnJhbWVSZXNpemVkKGZsb2F0IHcsZmxvYXQgaCkKK3sKKyAgICBp
ZiAoIW1fc2Nyb2xsVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2Nyb2xsVmll
dy0+Y29udGVudHNXaWR0aCgpICE9IChpbnQpKHcgKyAxKSB8fCBtX3Njcm9sbFZpZXctPmNvbnRl
bnRzSGVpZ2h0KCkgIT0gKGludCkoaCArIDEpKSB7CisgICAgCVdlYkNvcmU6OkZyYW1lVmlldyog
ZnYgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZVZpZXcqPihtX3Njcm9sbFZpZXcpOworICAg
IAlpZiAoZnYpeworICAgICAgICAgICAgLy9mdi0+ZnJhbWUoKS0+Zm9yY2VMYXlvdXQoKTsKKyAg
ICAgICAgICAgIC8vZnYtPmFkanVzdFZpZXdTaXplKCk7CisgICAgICAgICAgICBmdi0+c2V0TmVl
ZHNMYXlvdXQoKTsKKyAgICAJfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlr
dS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWRmNjg5Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApAQCAtMCww
ICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVh
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
aWZuZGVmIFNjcm9sbFZpZXdDYW52YXNIYWlrdV9oCisjZGVmaW5lIFNjcm9sbFZpZXdDYW52YXNI
YWlrdV9oCisKKyNpbmNsdWRlIDxWaWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIFNjcm9sbFZpZXc7CisKKyAgICBjbGFzcyBTY3JvbGxWaWV3Q2FudmFzSGFpa3UgOiBw
dWJsaWMgQlZpZXcKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTY3JvbGxWaWV3Q2FudmFz
SGFpa3UoU2Nyb2xsVmlldyosIEJWaWV3KiBwYXJlbnQsIHVpbnQzMiBmbGFncyk7CisKKyAgICAg
ICAgdm9pZCBTZXRTY3JvbGxCYXJNYXhWKGZsb2F0IHZWKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3Njcm9sbEJhck1heFYgPSB2VjsKKyAgICAgICAgfQorICAgICAgICB2b2lkIFNldFNjcm9s
bEJhck1heEgoZmxvYXQgdkgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsQmFyTWF4
SCA9IHZIOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBEcmF3KEJSZWN0IHVwZGF0ZVJlY3Qp
OworICAgICAgICB2b2lkIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSAqbXNnKTsKKyAgICAgICAg
dm9pZCBNb3VzZU1vdmVkKEJQb2ludCB3aGVyZSwgdWludDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdl
KiBhX21lc3NhZ2UpOworICAgICAgICB2b2lkIE1vdXNlRG93bihCUG9pbnQgd2hlcmUpOworICAg
ICAgICB2b2lkIE1vdXNlVXAoQlBvaW50IHdoZXJlKTsKKyAgICAgICAgdm9pZCBLZXlEb3duKGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcyk7CisgICAgICAgIHZvaWQgS2V5VXAoY29u
c3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5dGVzKTsKKyAgICAgICAgdm9pZCBXaW5kb3dBY3Rp
dmF0ZWQoYm9vbCBzdGF0ZSk7CisKKyAgICAgICAgdm9pZCBTZXRTY3JvbGxWaWV3KFNjcm9sbFZp
ZXcqIHNjcm9sbFZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsVmlldyA9IHNj
cm9sbFZpZXc7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIEZyYW1lUmVzaXplZChmbG9hdCB3
LCBmbG9hdCBoKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBEb1Njcm9s
bChib29sIGlzSG9yaXpvbnRhbCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAgICAgU2Nyb2xs
VmlldyogbV9zY3JvbGxWaWV3OworICAgICAgICBmbG9hdCBtX3Njcm9sbEJhck1heEg7CisgICAg
ICAgIGZsb2F0IG1fc2Nyb2xsQmFyTWF4VjsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gU2Nyb2xsVmlld0NhbnZhc0hhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TY3JvbGxWaWV3SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjk5YWZkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1Njcm9sbFZpZXdIYWlrdS5jcHAKQEAgLTAsMCArMSwzMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQW5kcmVhIEFuemFuaSAgIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKyAqIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRQ
b2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9s
bFZpZXdDYW52YXNIYWlrdS5oIgorI2luY2x1ZGUgIldLU2Nyb2xsVmlldy5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKyNpbmNsdWRlIDxWaWV3
Lmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNp
bmNsdWRlIDxzdXBwb3J0L0F1dG9sb2NrLmg+CisjaW5jbHVkZSA8U2Nyb2xsVmlldy5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZh
dGUgOiBwdWJsaWMgV0tTY3JvbGxWaWV3Cit7CitwdWJsaWM6CisgICAgU2Nyb2xsVmlld1ByaXZh
dGUoV2ViQ29yZTo6U2Nyb2xsVmlldyogc2Nyb2xsVmlldykKKyAgICAgICAgOiBXS1Njcm9sbFZp
ZXcoIldlYkNvcmUgU2Nyb2xsVmlld1ByaXZhdGUiLCBuZXcgU2Nyb2xsVmlld0NhbnZhc0hhaWt1
KE5VTEwsIE5VTEwsIDApLAorICAgICAgICAgICAgICAgICAgICAgICBCX0ZPTExPV19OT05FLCBC
X1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRTICkgLy9CX0ZVTExfVVBEQVRFX09OX1JFU0laRQor
ICAgICAgICAsIG1fc2Nyb2xsVmlldyhzY3JvbGxWaWV3KQorICAgICAgICAsIG1fY29udGVudFNp
emUoMCwgMCkKKyAgICB7CisgICAgICAgIFNldFZpZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKKyAg
ICB9CisKKyAgICB2b2lkIEF0dGFjaGVkVG9XaW5kb3coKQorICAgIHsKKyAgICAgICAgUmVzaXpl
QnkoLSAoQl9WX1NDUk9MTF9CQVJfV0lEVEggLSAxKSwgLSAoQl9IX1NDUk9MTF9CQVJfSEVJR0hU
IC0gMSkpOworCSAgIAlXS1Njcm9sbFZpZXc6OkF0dGFjaGVkVG9XaW5kb3coKTsKKyAgICB9CisK
Kwl2b2lkIEtleURvd24oY29uc3QgY2hhciogYnl0ZXMsIGludDMyIG51bUJ5dGVzKQorCXsKKyAg
ICAgICAgLy8gRklYTUU6IHdoZW4gU2Nyb2xsVmlldy5oIHRha2VzIHRoZSBmb2N1cyBzaG91bGQg
Zm9jdXMgdGhlIHRhcmdldCgpLi4KKwkKKyAgICAgICAgaWYoVGFyZ2V0KCkpCisgICAgICAgICAg
ICBUYXJnZXQoKS0+S2V5RG93bihieXRlcywgbnVtQnl0ZXMpOworCX0KKworICAJdm9pZCBLZXlV
cChjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpCisJeworICAgICAgICAvL3NlZSBj
b21tZW50IGFib3ZlLgorCisgICAgICAgIGlmKFRhcmdldCgpKQorICAgICAgICAgICAgVGFyZ2V0
KCktPktleVVwKGJ5dGVzLCBudW1CeXRlcyk7CisJfQorCisgIAlCUmVjdCBWaXNpYmxlRnJhbWUo
KQorICAgIHsKKyAgICAgICAgaWYgKFRhcmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIFRhcmdl
dCgpLT5Cb3VuZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEJvdW5kcygp
OworICAgIH0KKworICAgIHZvaWQgU2V0Q29udGVudFNpemUoQlNpemUgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIG1fY29udGVudFNpemUgPSBzaXplOworIAl9CisKKyAgICBCU2l6ZSBDb250ZW50U2l6
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZW50U2l6ZTsKKyAgICB9CisKKyAgICBm
bG9hdCBDb250ZW50V2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGVudFNpemUu
d2lkdGg7CisgICAgfQorCisgICAgZmxvYXQgQ29udGVudEhlaWdodCgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9jb250ZW50U2l6ZS5oZWlnaHQ7CisgICAgfQorCisgICAgQlBvaW50IFNjcm9s
bE9mZnNldCgpCisgICAgeworICAgICAgICBpZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gVGFyZ2V0KCktPkxlZnRUb3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IEJQb2ludCgwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIFNjcm9sbEJ5KGZsb2F0IGRoLCBmbG9h
dCBkdikKKyAgICB7CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdldCgp
LT5TY3JvbGxCeShkaCwgZHYpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpTY3Jv
bGxWaWV3KiBtX3Njcm9sbFZpZXc7CisgICAgQlNpemUgbV9jb250ZW50U2l6ZTsKK307CisKK3Zv
aWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX2RhdGEgPSBuZXcgU2Nyb2xs
Vmlld1ByaXZhdGUodGhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0cm95
KCkKK3sKKyAgICBkZWxldGUgbV9kYXRhOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRm
b3JtVmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+
VmlzaWJsZUZyYW1lKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxi
YXJNb2RlcygpCit7CisgICAgaWYgKG1fZGF0YS0+U2Nyb2xsQmFyTW9kZShCX0hPUklaT05UQUwp
ICE9IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpCisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xs
QmFyTW9kZShCX0hPUklaT05UQUwsIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpOworCisgICAg
aWYgKG1fZGF0YS0+U2Nyb2xsQmFyTW9kZShCX1ZFUlRJQ0FMKSAhPSB2ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoKSkKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIHZl
cnRpY2FsU2Nyb2xsYmFyTW9kZSgpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNj
cm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUmIGhvcml6b250YWwsIFNjcm9sbGJhck1vZGUmIHZl
cnRpY2FsKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzdGlsbCBwcm9ibG1lcyB3aXRoIGRpZmZl
cmVudCBzY3JvbGxiYXIgbW9kZXMuCisgICAgI2lmIDAKKworICAgIGlmICghbV9kYXRhKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGhvcml6b250YWwpIHsKKyAgICBjYXNlIFNjcm9s
bGJhckF1dG86CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05UQUws
IFNjcm9sbGJhckF1dG8pOwkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxiYXJBbHdh
eXNPbjoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRBTCwgU2Ny
b2xsYmFyQWx3YXlzT24pOyAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxiYXJBbHdh
eXNPZmY6CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05UQUwsIFNj
cm9sbGJhckFsd2F5c09mZik7IAorICAgICAgICBicmVhazsJCisgICAgfQorCisgICAgc3dpdGNo
ICh2ZXJ0aWNhbCkgeworICAgIGNhc2UgU2Nyb2xsYmFyQXV0bzoKKyAgICAgICAgbV9kYXRhLT5T
ZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckF1dG8pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFNjcm9sbGJhckFsd2F5c09uOgorICAgICAgICBtX2RhdGEtPlNldFNjcm9s
bEJhck1vZGUoQl9WRVJUSUNBTCwgU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNjcm9sbGJhckFsd2F5c09mZjoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxC
YXJNb2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckFsd2F5c09mZik7CisgICAgICAgIGJyZWFrOwkK
KyAgICB9CisKKyAgICAjZW5kaWYKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENo
aWxkKFdpZGdldCogY2hpbGQpCit7CisgICAgQlZpZXcqIHRhcmdldCA9IG1fZGF0YS0+VGFyZ2V0
KCk7CisgICAgaWYgKHRhcmdldCkKKyAgICAgICAgY2hpbGQtPnNldFBsYXRmb3JtV2lkZ2V0KHRh
cmdldCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZW1vdmVDaGlsZChXaWRnZXQq
IGNoaWxkKQoreyAKKyAgICBCVmlldyogdGFyZ2V0ID0gbV9kYXRhLT5UYXJnZXQoKTsKKworICAg
IGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5Mb2NrTG9vcGVyKCkpIHsKKyAgICAgICAgY2hpbGQtPnBs
YXRmb3JtV2lkZ2V0KCktPlJlbW92ZVNlbGYoKTsKKyAgICAgICAgdGFyZ2V0LT5VbmxvY2tMb29w
ZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDb250ZW50c1Np
emUoKQoreworICAgIC8vc2Nyb2xsYmFyIGZpeDoKKyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihC
X0hPUklaT05UQUwpLT5TZXRSYW5nZSgwLCB3IC0gd2lkdGgoKSAtMSArIEJfVl9TQ1JPTExfQkFS
X1dJRFRIKTsKKyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihCX0hPUklaT05UQUwpLT5TZXRQcm9w
b3J0aW9uKCAgd2lkdGgoKSAgLyAoZmxvYXQpKHctMSkpOworCisgICAgLy8gbV9kYXRhLT5TY3Jv
bGxCYXIoQl9WRVJUSUNBTCktPlNldFJhbmdlKDAsIGggLSBoZWlnaHQoKSAtMSArIEJfSF9TQ1JP
TExfQkFSX0hFSUdIVCk7CisgICAgLy8gbV9kYXRhLT5TY3JvbGxCYXIoQl9WRVJUSUNBTCktPlNl
dFByb3BvcnRpb24oICBoZWlnaHQoKSAgLyAoZmxvYXQpKGgtMSkpOworfQorCitJbnRTaXplIFNj
cm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBpbnQgd2lkdGgg
PSAwOworICAgIGludCBoZWlnaHQgPSAwOworICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7Cisg
ICAgICAgIEJTaXplIGZyYW1lID0gcGxhdGZvcm1XaWRnZXQoKS0+UHJlZmVycmVkU2l6ZSgpOwor
ICAgICAgICB3aWR0aCA9IGZyYW1lLkludGVnZXJXaWR0aCgpOworICAgICAgICBoZWlnaHQgPSBm
cmFtZS5JbnRlZ2VySGVpZ2h0KCk7CisgICAgICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdo
dCA+PSAwKTsKKyAgICB9CisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9CisK
K3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsUG9pbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIGJvb2wgbm93KQoreworICAgIGlmICh1cGRhdGVSZWN0LndpZHRoKCkgPT0gMCB8
fCB1cGRhdGVSZWN0LmhlaWdodCgpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIEJSZWN0
IHVwZGF0ZSh1cGRhdGVSZWN0KTsKKworICAgIEJWaWV3KiB0YXJnZXQgPSBtX2RhdGEtPlRhcmdl
dCgpOworCisgICAgaWYgKCF1cGRhdGUuSXNWYWxpZCgpIHx8ICF0YXJnZXQpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVwZGF0ZSA9IHVwZGF0ZSAmIG1fZGF0YS0+VmlzaWJsZUZyYW1lKCk7CisK
KyAgICB0YXJnZXQtPkludmFsaWRhdGUodXBkYXRlKTsKKworICAgIGlmIChub3cpCisgICAgICAg
CXRhcmdldC0+U3luYygpOworICAgIGVsc2UKKyAgICAgICAJdGFyZ2V0LT5GbHVzaCgpOworfQor
CitJbnRQb2ludCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcmVlblRvQ29udGVudHMoY29uc3QgSW50
UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIHBvaW50Owor
fQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbihjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIC8vIEZJWE1FCisgICAgcmV0dXJuIHJlY3Q7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRDYW5CbGl0T25TY3JvbGwoYm9vbCBmbGFn
KQoreworICAgIGlmKCFtX2RhdGEgfHwgIW1fZGF0YS0+VGFyZ2V0KCkpCisgICAgICAgIHJldHVy
bjsKKwkKKyAgICBpZiAobV9kYXRhLT5WaWV3Q29sb3IoKSA9PSBCX1RSQU5TUEFSRU5UX0NPTE9S
ICYmICFmbGFnKSB7CisgICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKDI1NSwgMjU1LCAyNTUp
OworICAgICAgICBtX2RhdGEtPlRhcmdldCgpLT5TZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7
CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPkludmFsaWRhdGUoKTsKKyAgICB9IGVsc2UgaWYg
KG1fZGF0YS0+Vmlld0NvbG9yKCkgIT0gQl9UUkFOU1BBUkVOVF9DT0xPUiAmJiBmbGFnKSB7Cisg
ICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKEJfVFJBTlNQQVJFTlRfQ09MT1IpOworICAgICAg
ICBtX2RhdGEtPlRhcmdldCgpLT5TZXRWaWV3Q29sb3IoQl9UUkFOU1BBUkVOVF9DT0xPUik7Cisg
ICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPkludmFsaWRhdGUoKTsKKyAgICB9CisvLyAgICBpZihm
bGFnKQorLy8gICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKDI1NSwgMjU1LCAyNTUpOworLy8g
ICAgZWxzZQorLy8gICAgICAgIG1fZGF0YS0+U2V0Vmlld0NvbG9yKEJfVFJBTlNQQVJFTlRfQ09M
T1IpOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtQ2FuQmxpdE9uU2Nyb2xsKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5WaWV3Q29sb3IoKSA9PSBCX1RSQU5TUEFSRU5UX0NP
TE9SOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtSXNPZmZzY3JlZW4oKSBjb25zdAor
eworICAgIHJldHVybiAhcGxhdGZvcm1XaWRnZXQoKSB8fCAhcGxhdGZvcm1XaWRnZXQoKS0+SXNI
aWRkZW4oKTsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldEFsbG93c1Njcm9sbGluZyhi
b29sIGFsbG93cykKK3sKKyAgIC8vZGlzYWJsZSBzY3JvbGxiYXJzIG9yIGhpZGUgc2Nyb2xsYmFy
cz8KKyAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmNkNzYwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAwNC0yMDA1LCBBeGVsIETDtnJmbGVyLCBheGVsZEBwaW5jLXNvZnR3YXJlLmRlLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBNSVQgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tT
Y3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlIDxMYXlvdXRVdGlscy5oPgorI2luY2x1ZGUgPE1lc3Nh
Z2UuaD4KKyNpbmNsdWRlIDxXaW5kb3cuaD4KKworCitXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmll
dyhjb25zdCBjaGFyICpuYW1lLCBCVmlldyAqdGFyZ2V0LCB1aW50MzIgcmVzaXppbmdNb2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyIGZsYWdzKQorICAgIDogQlZpZXcoQ2Fs
Y0ZyYW1lKHRhcmdldCwgdHJ1ZSwgdHJ1ZSksIG5hbWUsIHJlc2l6aW5nTW9kZSwgTW9kaWZ5Rmxh
Z3MoZmxhZ3MpKSwKKyAgICBmVGFyZ2V0KHRhcmdldCksCisgICAgZkhvcml6b250YWxTY3JvbGxC
YXIoTlVMTCksCisgICAgZlZlcnRpY2FsU2Nyb2xsQmFyKE5VTEwpLAorICAgIGZIaWdobGlnaHRl
ZChmYWxzZSksCisgICAgZlZlcnRpY2FsU2Nyb2xsQmFyTW9kZShTY3JvbGxiYXJBbHdheXNPbiks
CisgICAgZkhvcml6b250YWxTY3JvbGxCYXJNb2RlKFNjcm9sbGJhckFsd2F5c09uKQkKK3sKKwli
b29sIGhvcml6b250YWwgPSB0cnVlOworCWJvb2wgdmVydGljYWwgPSB0cnVlOworCQorCUJSZWN0
IHRhcmdldEZyYW1lOworCWlmIChmVGFyZ2V0KSB7CisJCS8vIGxheW91dCB0YXJnZXQgYW5kIGFk
ZCBpdAorCQkvL2ZUYXJnZXQtPlRhcmdldGVkQnlTY3JvbGxWaWV3KHRoaXMpOworCQlmVGFyZ2V0
LT5Nb3ZlVG8oQl9PUklHSU4pOworICAgICAgICAKKwkJQWRkQ2hpbGQoZlRhcmdldCk7CisJCXRh
cmdldEZyYW1lID0gZlRhcmdldC0+RnJhbWUoKTsKKwl9IGVsc2UgeworCQkvLyBubyB0YXJnZXQg
c3BlY2lmaWVkCisJCXRhcmdldEZyYW1lID0gQm91bmRzKCk7CisJCWlmIChob3Jpem9udGFsKQor
CQkJdGFyZ2V0RnJhbWUuYm90dG9tIC09IEJfSF9TQ1JPTExfQkFSX0hFSUdIVCArIDE7CisJCWlm
ICh2ZXJ0aWNhbCkKKwkJCXRhcmdldEZyYW1lLnJpZ2h0IC09IEJfVl9TQ1JPTExfQkFSX1dJRFRI
ICsgMTsKKwl9CisgICAgCisJaWYgKGhvcml6b250YWwpIHsKKwkJQlJlY3QgcmVjdCA9IHRhcmdl
dEZyYW1lOworCQlyZWN0LnRvcCA9IHJlY3QuYm90dG9tICsgMTsKKwkJcmVjdC5ib3R0b20gPSBy
ZWN0LnRvcCArIEJfSF9TQ1JPTExfQkFSX0hFSUdIVDsKKwkJZkhvcml6b250YWxTY3JvbGxCYXIg
PSBuZXcgQlNjcm9sbEJhcihyZWN0LCAiX0hTQl8iLCBmVGFyZ2V0LCAwLCAxMDAwLCBCX0hPUkla
T05UQUwpOworCQlBZGRDaGlsZChmSG9yaXpvbnRhbFNjcm9sbEJhcik7CisJfQorICAgIAorCWlm
ICh2ZXJ0aWNhbCkgeworCQlCUmVjdCByZWN0ID0gdGFyZ2V0RnJhbWU7CisJCXJlY3QubGVmdCA9
IHJlY3QucmlnaHQgKyAxOworCQlyZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgQl9WX1NDUk9MTF9C
QVJfV0lEVEg7CisJCWZWZXJ0aWNhbFNjcm9sbEJhciA9IG5ldyBCU2Nyb2xsQmFyKHJlY3QsICJf
VlNCXyIsIGZUYXJnZXQsIDAsIDEwMDAsIEJfVkVSVElDQUwpOworCQlBZGRDaGlsZChmVmVydGlj
YWxTY3JvbGxCYXIpOworCX0KKyAgICAKKwlmUHJldmlvdXNXaWR0aCA9IHVpbnQxNihCb3VuZHMo
KS5XaWR0aCgpKTsKKwlmUHJldmlvdXNIZWlnaHQgPSB1aW50MTYoQm91bmRzKCkuSGVpZ2h0KCkp
OworfQorCisKK1dLU2Nyb2xsVmlldzo6V0tTY3JvbGxWaWV3KEJNZXNzYWdlICphcmNoaXZlKQor
OiBCVmlldyhhcmNoaXZlKSwKK2ZIaWdobGlnaHRlZChmYWxzZSkKK3sKKwkvLyBJbiBhIHNoYWxs
b3cgYXJjaGl2ZSwgd2UgbWF5IG5vdCBoYXZlIGEgdGFyZ2V0IGFueW1vcmUuIFdlIG11c3QKKwkv
LyBiZSBwcmVwYXJlZCBmb3IgdGhpcyBjYXNlCisgICAgCisJLy8gZG9uJ3QgY29uZnVzZSBvdXIg
c2Nyb2xsIGJhcnMgd2l0aCBvdXIgKGV2ZW50dWFsKSB0YXJnZXQKKwlpbnQzMiBmaXJzdEJhciA9
IDA7CisJaWYgKCFhcmNoaXZlLT5GaW5kQm9vbCgiX25vX3RhcmdldF8iKSkgeworCQlmVGFyZ2V0
ID0gQ2hpbGRBdCgwKTsKKwkJZmlyc3RCYXIrKzsKKwl9IGVsc2UKKwkJZlRhcmdldCA9IE5VTEw7
CisgICAgCisJLy8gc2VhcmNoIGZvciBvdXIgc2Nyb2xsIGJhcnMKKyAgICAKKwlmSG9yaXpvbnRh
bFNjcm9sbEJhciA9IE5VTEw7CisJZlZlcnRpY2FsU2Nyb2xsQmFyID0gTlVMTDsKKyAgICAKKwlC
VmlldyAqdmlldzsKKwl3aGlsZSAoKHZpZXcgPSBDaGlsZEF0KGZpcnN0QmFyKyspKSkgeworCQlC
U2Nyb2xsQmFyICpiYXIgPSBkeW5hbWljX2Nhc3Q8QlNjcm9sbEJhciAqPih2aWV3KTsKKwkJaWYg
KCFiYXIpCisJCQljb250aW51ZTsKKwkJCisJCWlmIChiYXItPk9yaWVudGF0aW9uKCkgPT0gQl9I
T1JJWk9OVEFMKQorCQkJZkhvcml6b250YWxTY3JvbGxCYXIgPSBiYXI7CisJCWVsc2UgaWYgKGJh
ci0+T3JpZW50YXRpb24oKSA9PSBCX1ZFUlRJQ0FMKQorCQkJZlZlcnRpY2FsU2Nyb2xsQmFyID0g
YmFyOworCX0KKyAgICAKKwlmUHJldmlvdXNXaWR0aCA9IHVpbnQxNihCb3VuZHMoKS5XaWR0aCgp
KTsKKwlmUHJldmlvdXNIZWlnaHQgPSB1aW50MTYoQm91bmRzKCkuSGVpZ2h0KCkpOworfQorCisK
K1dLU2Nyb2xsVmlldzo6fldLU2Nyb2xsVmlldygpCit7Cit9CisKKworQkFyY2hpdmFibGUgKgor
V0tTY3JvbGxWaWV3OjpJbnN0YW50aWF0ZShCTWVzc2FnZSAqYXJjaGl2ZSkKK3sKKwlpZiAodmFs
aWRhdGVfaW5zdGFudGlhdGlvbihhcmNoaXZlLCAiV0tTY3JvbGxWaWV3IikpCisJCXJldHVybiBu
ZXcgV0tTY3JvbGxWaWV3KGFyY2hpdmUpOworICAgIAorCXJldHVybiBOVUxMOworfQorCisKK3N0
YXR1c190CitXS1Njcm9sbFZpZXc6OkFyY2hpdmUoQk1lc3NhZ2UgKmFyY2hpdmUsIGJvb2wgZGVl
cCkgY29uc3QKK3sKKwlzdGF0dXNfdCBzdGF0dXMgPSBCVmlldzo6QXJjaGl2ZShhcmNoaXZlLCBk
ZWVwKTsKKwlpZiAoc3RhdHVzICE9IEJfT0spCisJCXJldHVybiBzdGF0dXM7CisgICAgCisJLy8g
SWYgdGhpcyBpcyBhIGRlZXAgYXJjaGl2ZSwgdGhlIEJWaWV3IGNsYXNzIHdpbGwgdGFrZSBjYXJl
CisJLy8gb2Ygb3VyIGNoaWxkcmVuLgorICAgIAorCWlmIChzdGF0dXMgPT0gQl9PSyAmJiAhZlRh
cmdldCkKKwkJc3RhdHVzID0gYXJjaGl2ZS0+QWRkQm9vbCgiX25vX3RhcmdldF8iLCB0cnVlKTsK
KyAgICAKKwkvLyBUaGUgaGlnaGxpZ2h0ZWQgc3RhdGUgaXMgbm90IGFyY2hpdmVkLCBidXQgc2lu
Y2UgaXQgaXMKKwkvLyB1c3VhbGx5IChvciBzaG91bGQgYmUpIHVzZWQgdG8gaW5kaWNhdGUgZm9j
dXMsIHRoaXMKKwkvLyBpcyBwcm9iYWJseSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgCisJ
cmV0dXJuIHN0YXR1czsKK30KKworCit2b2lkCitXS1Njcm9sbFZpZXc6OkF0dGFjaGVkVG9XaW5k
b3coKQoreworCUJWaWV3OjpBdHRhY2hlZFRvV2luZG93KCk7CisgICAgCisJaWYgKCghZkhvcml6
b250YWxTY3JvbGxCYXIgJiYgIWZWZXJ0aWNhbFNjcm9sbEJhcikKKwkJfHwgKGZIb3Jpem9udGFs
U2Nyb2xsQmFyICYmIGZWZXJ0aWNhbFNjcm9sbEJhcikKKwkJfHwgV2luZG93KCktPkxvb2soKSAh
PSBCX0RPQ1VNRU5UX1dJTkRPV19MT09LKQorCQlyZXR1cm47CisgICAgCisJLy8gSWYgd2UgaGF2
ZSBvbmx5IG9uZSBiYXIsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgYXJlIGluIHRoZQorCS8vIGJv
dHRvbSByaWdodCBlZGdlIG9mIGEgd2luZG93IHdpdGggdGhlIEJfRE9DVU1FTlRfTE9PSyB0bwor
CS8vIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgYmFyIHRvIGFja25vd2xlZGdlIHRoZSByZXNpemUg
a25vYi4KKyAgICAKKwlCUmVjdCBib3VuZHMgPSBDb252ZXJ0VG9TY3JlZW4oQm91bmRzKCkpOwor
CUJSZWN0IHdpbmRvd0JvdW5kcyA9IFdpbmRvdygpLT5GcmFtZSgpOworICAgIAorICAgIAorCWlm
IChmSG9yaXpvbnRhbFNjcm9sbEJhcikKKwkJZkhvcml6b250YWxTY3JvbGxCYXItPlJlc2l6ZUJ5
KC1CX1ZfU0NST0xMX0JBUl9XSURUSCwgMCk7CisJZWxzZSBpZiAoZlZlcnRpY2FsU2Nyb2xsQmFy
KQorCQlmVmVydGljYWxTY3JvbGxCYXItPlJlc2l6ZUJ5KDAsIC1CX0hfU0NST0xMX0JBUl9IRUlH
SFQpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6RGV0YWNoZWRGcm9tV2luZG93KCkKK3sK
KwlCVmlldzo6RGV0YWNoZWRGcm9tV2luZG93KCk7Cit9CisKKwordm9pZAorV0tTY3JvbGxWaWV3
OjpBbGxBdHRhY2hlZCgpCit7CisJQlZpZXc6OkFsbEF0dGFjaGVkKCk7Cit9CisKKwordm9pZAor
V0tTY3JvbGxWaWV3OjpBbGxEZXRhY2hlZCgpCit7CisJQlZpZXc6OkFsbERldGFjaGVkKCk7Cit9
CisKKworCitCU2Nyb2xsQmFyICoKK1dLU2Nyb2xsVmlldzo6U2Nyb2xsQmFyKG9yaWVudGF0aW9u
IHBvc3R1cmUpIGNvbnN0Cit7CisJaWYgKHBvc3R1cmUgPT0gQl9IT1JJWk9OVEFMKQorCQlyZXR1
cm4gZkhvcml6b250YWxTY3JvbGxCYXI7CisgICAgCisJcmV0dXJuIGZWZXJ0aWNhbFNjcm9sbEJh
cjsKK30KKworU2Nyb2xsYmFyTW9kZQkJCitXS1Njcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUob3Jp
ZW50YXRpb24gcG9zdHVyZSkKK3sKKyAgICAvLwlyZXR1cm4gU2Nyb2xsYmFyQXV0bzsKKwkKKwlp
ZiAocG9zdHVyZSA9PSBCX0hPUklaT05UQUwpeworCQkvL3ByaW50ZigiKysrKyBIIGdldCAlZFxu
IixmSG9yaXpvbnRhbFNjcm9sbEJhck1vZGUpOworCQlyZXR1cm4gZkhvcml6b250YWxTY3JvbGxC
YXJNb2RlOworCX0KKyAgICAKKwkvL3ByaW50ZigiKysrKyBWIGdldCAlZFxuIixmVmVydGljYWxT
Y3JvbGxCYXJNb2RlKTsJCisJcmV0dXJuIGZWZXJ0aWNhbFNjcm9sbEJhck1vZGU7CQorfQorCit2
b2lkCitXS1Njcm9sbFZpZXc6OlNldFNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVyZSwg
U2Nyb2xsYmFyTW9kZSBtb2RlKQoreworCWlmIChwb3N0dXJlID09IEJfSE9SSVpPTlRBTCAmJiBt
b2RlICE9IGZIb3Jpem9udGFsU2Nyb2xsQmFyTW9kZSkgeworICAgICAgICAKKwkJLy9wcmludGYo
IisrKysgSCBjdXJyZW50ICVsZCB3YW50ICVsZFxuIixmSG9yaXpvbnRhbFNjcm9sbEJhck1vZGUs
bW9kZSk7CisgICAgICAgIAorCQlpZihtb2RlID09IFNjcm9sbGJhckFsd2F5c09uIHx8IG1vZGUg
PT0gU2Nyb2xsYmFyQXV0byApIHsKKwkJCS8vcHJpbnRmKCIrKysrKyBIIFNob3coJWQpXG4iLChp
bnQpdGhpcyk7CisJCQlpZihmSG9yaXpvbnRhbFNjcm9sbEJhci0+SXNIaWRkZW4oKSl7CisJCQkJ
Zkhvcml6b250YWxTY3JvbGxCYXItPlNob3coKTsKKwkJCQlpZiAoVGFyZ2V0KCkpCisJCQkJCVRh
cmdldCgpLT5SZXNpemVCeSgwLCAtQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsKKwkJCX0KKwkJfQor
CQlpZihtb2RlID09IFNjcm9sbGJhckFsd2F5c09mZil7CisJCQkvL3ByaW50ZigiKysrKysgSCBI
aWRlKCVkKVxuIiwoaW50KXRoaXMpOwkJCisJCQlpZighZkhvcml6b250YWxTY3JvbGxCYXItPklz
SGlkZGVuKCkpeworCQkJCWZIb3Jpem9udGFsU2Nyb2xsQmFyLT5IaWRlKCk7CisJCQkJaWYgKFRh
cmdldCgpKQorCQkJCQlUYXJnZXQoKS0+UmVzaXplQnkoMCwgQl9IX1NDUk9MTF9CQVJfSEVJR0hU
KTsKKwkJCX0KKwkJfQkKKwkJCisJCS8vc2V0IHRoZSBuZXcgbW9kZS4KKwkJZkhvcml6b250YWxT
Y3JvbGxCYXJNb2RlID0gbW9kZTsJCisJfSAKKwkKKwkKKyAgICAKKwlpZiAocG9zdHVyZSA9PSBC
X1ZFUlRJQ0FMICYmIG1vZGUgIT0gZlZlcnRpY2FsU2Nyb2xsQmFyTW9kZSApIHsKKyAgICAgICAg
CisJCS8vcHJpbnRmKCIrKysrIFYgY3VycmVudCAlbGQgd2FudCAlbGRcbiIsZlZlcnRpY2FsU2Ny
b2xsQmFyTW9kZSxtb2RlKTsKKyAgICAgICAgCisJCWlmIChtb2RlID09IFNjcm9sbGJhckFsd2F5
c09uIHx8IG1vZGUgPT0gU2Nyb2xsYmFyQXV0bykgeworCQkJLy9wcmludGYoIisrKysrIFYgU2hv
dyglZClcbiIsKGludCl0aGlzKTsKKwkJCWlmKGZWZXJ0aWNhbFNjcm9sbEJhci0+SXNIaWRkZW4o
KSl7CisJCQkJZlZlcnRpY2FsU2Nyb2xsQmFyLT5TaG93KCk7CisJCQkJaWYgKFRhcmdldCgpKQkJ
CQorCQkJCQlUYXJnZXQoKS0+UmVzaXplQnkoLUJfVl9TQ1JPTExfQkFSX1dJRFRILCAwKTsKKwkJ
CX0KKwkJfQorCQlpZiAobW9kZSA9PSBTY3JvbGxiYXJBbHdheXNPZmYpIHsJCQorCQkJLy9wcmlu
dGYoIisrKysrIFYgSGlkZSglZClcbiIsKGludCl0aGlzKTsKKwkJCWlmKCFmVmVydGljYWxTY3Jv
bGxCYXItPklzSGlkZGVuKCkpIHsKKwkJCQlmVmVydGljYWxTY3JvbGxCYXItPkhpZGUoKTsKKwkJ
CQlpZiAoVGFyZ2V0KCkpCQkJCisJCQkJCVRhcmdldCgpLT5SZXNpemVCeShCX1ZfU0NST0xMX0JB
Ul9XSURUSCwgMCk7CisJCQl9CisJCX0JCisJCQorCQkvL3NldCB0aGUgbmV3IG1vZGU6CisJCWZW
ZXJ0aWNhbFNjcm9sbEJhck1vZGUgPSBtb2RlOwkJCQorCX0gCisgICAgCit9CisKKwordm9pZAor
V0tTY3JvbGxWaWV3OjpTZXRUYXJnZXQoQlZpZXcgKnRhcmdldCkKK3sKKwlpZiAoZlRhcmdldCA9
PSB0YXJnZXQpCisJCXJldHVybjsKKyAgICAKKwlpZiAoZlRhcmdldCkgeworCQlmVGFyZ2V0LT5U
YXJnZXRlZEJ5U2Nyb2xsVmlldyhOVUxMKTsKKwkJUmVtb3ZlQ2hpbGQoZlRhcmdldCk7CisgICAg
ICAgIAorCQkvLyB3ZSBhcmUgbm90IHN1cHBvc2VkIHRvIGRlbGV0ZSB0aGUgdmlldworCX0KKyAg
ICAKKwlmVGFyZ2V0ID0gdGFyZ2V0OworCWlmIChmSG9yaXpvbnRhbFNjcm9sbEJhcikKKwkJZkhv
cml6b250YWxTY3JvbGxCYXItPlNldFRhcmdldCh0YXJnZXQpOworCWlmIChmVmVydGljYWxTY3Jv
bGxCYXIpCisJCWZWZXJ0aWNhbFNjcm9sbEJhci0+U2V0VGFyZ2V0KHRhcmdldCk7CisgICAgCisJ
aWYgKHRhcmdldCkgeworCQkvL3RhcmdldC0+VGFyZ2V0ZWRCeVNjcm9sbFZpZXcodGhpcyk7Cisg
ICAgICAgIAorCQlBZGRDaGlsZCh0YXJnZXQsIENoaWxkQXQoMCkpOworICAgICAgICAvLyBUaGlz
IHdheSwgd2UgYXJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIHRhcmdldCB3aWxsCisgICAgICAgIC8v
IGJlIGFkZGVkIHRvcCBtb3N0IGluIHRoZSBsaXN0ICh3aGljaCBpcyBpbXBvcnRhbnQKKyAgICAg
ICAgLy8gZm9yIHVuYXJjaGl2aW5nKQorCX0KK30KKworCitCVmlldyAqCitXS1Njcm9sbFZpZXc6
OlRhcmdldCgpIGNvbnN0Cit7CisJcmV0dXJuIGZUYXJnZXQ7Cit9CisKKwordm9pZAorV0tTY3Jv
bGxWaWV3OjpNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UgKm1lc3NhZ2UpCit7CisJc3dpdGNoICht
ZXNzYWdlLT53aGF0KSB7CisJCWRlZmF1bHQ6CisJCQlCVmlldzo6TWVzc2FnZVJlY2VpdmVkKG1l
c3NhZ2UpOworCX0KK30KKworCit2b2lkCitXS1Njcm9sbFZpZXc6Ok1vdXNlRG93bihCUG9pbnQg
cG9pbnQpCit7CisJQlZpZXc6Ok1vdXNlRG93bihwb2ludCk7Cit9CisKKwordm9pZAorV0tTY3Jv
bGxWaWV3OjpNb3VzZVVwKEJQb2ludCBwb2ludCkKK3sKKwlCVmlldzo6TW91c2VVcChwb2ludCk7
Cit9CisKKwordm9pZAorV0tTY3JvbGxWaWV3OjpNb3VzZU1vdmVkKEJQb2ludCBwb2ludCwgdWlu
dDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlICpkcmFnTWVzc2FnZSkKK3sKKwlCVmlldzo6TW91c2VN
b3ZlZChwb2ludCwgY29kZSwgZHJhZ01lc3NhZ2UpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmll
dzo6RnJhbWVNb3ZlZChCUG9pbnQgcG9zaXRpb24pCit7CisJQlZpZXc6OkZyYW1lTW92ZWQocG9z
aXRpb24pOworfQorCisKK3ZvaWQgCitXS1Njcm9sbFZpZXc6OlJlc2l6ZVRvUHJlZmVycmVkKCkK
K3sKKwlCVmlldzo6UmVzaXplVG9QcmVmZXJyZWQoKTsKK30KKworCit2b2lkIAorV0tTY3JvbGxW
aWV3OjpHZXRQcmVmZXJyZWRTaXplKGZsb2F0ICpfd2lkdGgsIGZsb2F0ICpfaGVpZ2h0KQorewor
CUJSZWN0IGZyYW1lID0gQ2FsY0ZyYW1lKGZUYXJnZXQsIGZIb3Jpem9udGFsU2Nyb2xsQmFyLCBm
VmVydGljYWxTY3JvbGxCYXIpOworICAgIAorCWlmIChmVGFyZ2V0KSB7CisJCWZsb2F0IHdpZHRo
LCBoZWlnaHQ7CisJCWZUYXJnZXQtPkdldFByZWZlcnJlZFNpemUoJndpZHRoLCAmaGVpZ2h0KTsK
KyAgICAgICAgCisJCWZyYW1lLnJpZ2h0ICs9IHdpZHRoIC0gZlRhcmdldC0+RnJhbWUoKS5XaWR0
aCgpOworCQlmcmFtZS5ib3R0b20gKz0gaGVpZ2h0IC0gZlRhcmdldC0+RnJhbWUoKS5IZWlnaHQo
KTsKKwl9CisgICAgCisJaWYgKF93aWR0aCkKKwkJKl93aWR0aCA9IGZyYW1lLldpZHRoKCk7CisJ
aWYgKF9oZWlnaHQpCisJCSpfaGVpZ2h0ID0gZnJhbWUuSGVpZ2h0KCk7Cit9CisKKworCisKKy8q
KiBUaGlzIHN0YXRpYyBtZXRob2QgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGZyYW1lIHRoYXQg
dGhlCisgKglTY3JvbGxWaWV3IHdpbGwgY292ZXIgZGVwZW5kaW5nIG9uIHRoZSBmcmFtZSBvZiBp
dHMgdGFyZ2V0CisgKgkKKyAqCUl0IGlzIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCBhdCBv
dGhlciBwbGFjZXMuCisgKi8KKworQlJlY3QKK1dLU2Nyb2xsVmlldzo6Q2FsY0ZyYW1lKEJWaWV3
ICp0YXJnZXQsIGJvb2wgaG9yaXpvbnRhbCwgYm9vbCB2ZXJ0aWNhbCkKK3sKKwlCUmVjdCBmcmFt
ZSA9IHRhcmdldCA/IHRhcmdldC0+RnJhbWUoKSA6IEJSZWN0KDAsIDAsIDgwLCA4MCk7CisgICAg
CisJaWYgKHZlcnRpY2FsKQorCQlmcmFtZS5yaWdodCArPSBCX1ZfU0NST0xMX0JBUl9XSURUSDsK
KwlpZiAoaG9yaXpvbnRhbCkKKwkJZnJhbWUuYm90dG9tICs9IEJfSF9TQ1JPTExfQkFSX0hFSUdI
VDsKKyAgICAKKwkKKyAgICAKKwlpZiAodmVydGljYWwpCisgICAgICAgIGZyYW1lLnJpZ2h0Kys7
CisJaWYgKGhvcml6b250YWwpCisgICAgICAgIGZyYW1lLmJvdHRvbSsrOworCQorCXJldHVybiBm
cmFtZTsKK30KKworCisKKworLyoqIFRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlICJmbGFncyIgYXJn
dW1lbnQgYXMgcGFzc2VkIG9uIHRvCisgKgl0aGUgQlZpZXcgY29uc3RydWN0b3IuCisgKi8KKwor
aW50MzIKK1dLU2Nyb2xsVmlldzo6TW9kaWZ5RmxhZ3MoaW50MzIgZmxhZ3MpCit7CisJcmV0dXJu
IGZsYWdzICYgfihCX1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRTIHwgQl9GVUxMX1VQREFURV9P
Tl9SRVNJWkUpOworfQorCisKK3ZvaWQKK1dLU2Nyb2xsVmlldzo6V2luZG93QWN0aXZhdGVkKGJv
b2wgYWN0aXZlKQoreworCWlmIChmSGlnaGxpZ2h0ZWQpCisJCUludmFsaWRhdGUoKTsKKyAgICAK
KwlCVmlldzo6V2luZG93QWN0aXZhdGVkKGFjdGl2ZSk7Cit9CisKKwordm9pZCAKK1dLU2Nyb2xs
Vmlldzo6TWFrZUZvY3VzKGJvb2wgc3RhdGUpCit7CisJQlZpZXc6Ok1ha2VGb2N1cyhzdGF0ZSk7
Cit9CisKKworQkhhbmRsZXIgKgorV0tTY3JvbGxWaWV3OjpSZXNvbHZlU3BlY2lmaWVyKEJNZXNz
YWdlICptc2csIGludDMyIGluZGV4LCBCTWVzc2FnZSAqc3BlY2lmaWVyLCBpbnQzMiBmb3JtLCBj
b25zdCBjaGFyICpwcm9wZXJ0eSkKK3sKKwlyZXR1cm4gQlZpZXc6OlJlc29sdmVTcGVjaWZpZXIo
bXNnLCBpbmRleCwgc3BlY2lmaWVyLCBmb3JtLCBwcm9wZXJ0eSk7Cit9CisKKworc3RhdHVzX3Qg
CitXS1Njcm9sbFZpZXc6OkdldFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSAqZGF0YSkKK3sKKwly
ZXR1cm4gQlZpZXc6OkdldFN1cHBvcnRlZFN1aXRlcyhkYXRhKTsKK30KKworCitCU2l6ZQorV0tT
Y3JvbGxWaWV3OjpNaW5TaXplKCkKK3sKKyAgICAvLyBUT0RPOiBUaGlzIGlzIG5vdCB5ZXQgY29y
cmVjdC4KKwlCU2l6ZSBzaXplID0gKGZUYXJnZXQgPyBmVGFyZ2V0LT5NaW5TaXplKCkgOiBCU2l6
ZSgtMSwgLTEpKTsKKyAgICAKKwlpZiAoZlZlcnRpY2FsU2Nyb2xsQmFyKQorCQlzaXplLndpZHRo
ICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworCWlmIChmSG9yaXpvbnRhbFNjcm9sbEJhcikKKwkJ
c2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworICAgIAorCXJldHVybiBCTGF5
b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4cGxpY2l0TWluU2l6ZSgpLCBzaXplKTsKK30KKworCitC
U2l6ZQorV0tTY3JvbGxWaWV3OjpQcmVmZXJyZWRTaXplKCkKK3sKKyAgICAvLyBUT0RPOiBUaGlz
IGlzIG5vdCB5ZXQgY29ycmVjdC4KKwlCU2l6ZSBzaXplID0gKGZUYXJnZXQgPyBmVGFyZ2V0LT5Q
cmVmZXJyZWRTaXplKCkgOiBCU2l6ZSgtMSwgLTEpKTsKKyAgICAKKwlpZiAoZlZlcnRpY2FsU2Ny
b2xsQmFyKQorCQlzaXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworCWlmIChmSG9y
aXpvbnRhbFNjcm9sbEJhcikKKwkJc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9MTF9CQVJfSEVJR0hU
OworICAgIAorCXJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4cGxpY2l0TWluU2l6
ZSgpLCBzaXplKTsKK30KKworCitzdGF0dXNfdAorV0tTY3JvbGxWaWV3OjpQZXJmb3JtKHBlcmZv
cm1fY29kZSBkLCB2b2lkICphcmcpCit7CisJcmV0dXJuIEJWaWV3OjpQZXJmb3JtKGQsIGFyZyk7
Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3Lmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjkxZmYwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiogQ29w
eXJpZ2h0IDIwMDQsIE9wZW5CZU9TLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbkJlT1MgTGljZW5zZS4KKyAqLworI2lmbmRl
ZiBfV0tfU0NST0xMX1ZJRVdfSAorI2RlZmluZSBfV0tfU0NST0xMX1ZJRVdfSAorCisvKioJVGhl
IFdLU2Nyb2xsVmlldyBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIHRvIGFkZCBhIHNjcm9sbGluZwor
ICoJbWVjaGFuaXNtIHRvIHRoZSB0YXJnZXQgdmlldy4KKyAqLworCisjaW5jbHVkZSA8U2Nyb2xs
QmFyLmg+CisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK2NsYXNzIFdLU2Nyb2xsVmlldyA6IHB1YmxpYyBCVmlldyB7CitwdWJsaWM6CisgICAg
V0tTY3JvbGxWaWV3KGNvbnN0IGNoYXIgKm5hbWUsIEJWaWV3ICp0YXJnZXQsCisgICAgICAgICAg
ICAgICAgIHVpbnQzMiByZXNpemluZ01vZGUgPSBCX0ZPTExPV19MRUZUIHwgQl9GT0xMT1dfVE9Q
LAorICAgICAgICAgICAgICAgICB1aW50MzIgZmxhZ3MgPSAwKTsKKyAgICBXS1Njcm9sbFZpZXco
Qk1lc3NhZ2UgKmFyY2hpdmUpOworICAgIHZpcnR1YWwgfldLU2Nyb2xsVmlldygpOworICAgIAor
ICAgIHN0YXRpYyBCQXJjaGl2YWJsZQkqSW5zdGFudGlhdGUoQk1lc3NhZ2UgKmFyY2hpdmUpOwor
ICAgIHZpcnR1YWwgc3RhdHVzX3QJQXJjaGl2ZShCTWVzc2FnZSAqYXJjaGl2ZSwgYm9vbCBkZWVw
ID0gdHJ1ZSkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCB2b2lkCQlBdHRhY2hlZFRvV2luZG93
KCk7CisgICAgCisgICAgQlNjcm9sbEJhcgkJCSpTY3JvbGxCYXIob3JpZW50YXRpb24gcG9zdHVy
ZSkgY29uc3Q7CisgICAgU2Nyb2xsYmFyTW9kZQkJU2Nyb2xsQmFyTW9kZShvcmllbnRhdGlvbiBw
b3N0dXJlKTsKKyAgICB2b2lkCQkJCVNldFNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVy
ZSwgU2Nyb2xsYmFyTW9kZSBtb2RlKTsKKyAgICAKKyAgICB2b2lkCQkJCVNldFRhcmdldChCVmll
dyAqdGFyZ2V0KTsKKyAgICBCVmlldwkJCQkqVGFyZ2V0KCkgY29uc3Q7CisgICAgCisgICAgdmly
dHVhbCB2b2lkCQlNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UgKm1lc3NhZ2UpOworICAgIHZpcnR1
YWwgdm9pZAkJTW91c2VEb3duKEJQb2ludCBwb2ludCk7CisgICAgCisgICAgdmlydHVhbCB2b2lk
CQlXaW5kb3dBY3RpdmF0ZWQoYm9vbCBhY3RpdmUpOworICAgIHZpcnR1YWwJdm9pZAkJTW91c2VV
cChCUG9pbnQgcG9pbnQpOworICAgIHZpcnR1YWwJdm9pZAkJTW91c2VNb3ZlZChCUG9pbnQgcG9p
bnQsIHVpbnQzMiBjb2RlLCBjb25zdCBCTWVzc2FnZSAqbXNnKTsKKyAgICAKKyAgICB2aXJ0dWFs
CXZvaWQJCURldGFjaGVkRnJvbVdpbmRvdygpOworICAgIHZpcnR1YWwJdm9pZAkJQWxsQXR0YWNo
ZWQoKTsKKyAgICB2aXJ0dWFsCXZvaWQJCUFsbERldGFjaGVkKCk7CisgICAgCisgICAgdmlydHVh
bAl2b2lkCQlGcmFtZU1vdmVkKEJQb2ludCBwb3NpdGlvbik7CisgICAgCisgICAgdmlydHVhbCBC
SGFuZGxlcgkqUmVzb2x2ZVNwZWNpZmllcihCTWVzc2FnZSAqbWVzc2FnZSwgaW50MzIgaW5kZXgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTWVzc2FnZSAqc3Bl
Y2lmaWVyLCBpbnQzMiBmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqcHJvcGVydHkpOworICAgIAorICAgIHZpcnR1YWwgdm9pZAkJUmVz
aXplVG9QcmVmZXJyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQJCUdldFByZWZlcnJlZFNpemUoZmxv
YXQgKl93aWR0aCwgZmxvYXQgKl9oZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZAkJTWFrZUZvY3Vz
KGJvb2wgc3RhdGUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190CUdldFN1cHBvcnRlZFN1
aXRlcyhCTWVzc2FnZSAqZGF0YSk7CisgICAgCisgICAgdmlydHVhbAlCU2l6ZQkJTWluU2l6ZSgp
OworICAgIHZpcnR1YWwJQlNpemUJCVByZWZlcnJlZFNpemUoKTsKKyAgICAKKyAgICAvLyBwcml2
YXRlIG9yIHJlc2VydmVkIG1ldGhvZHMgYXJlIGZvbGxvd2luZworICAgIAorICAgIHZpcnR1YWwg
c3RhdHVzX3QJUGVyZm9ybShwZXJmb3JtX2NvZGUgZCwgdm9pZCAqYXJnKTsKKyAgICAKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEJWaWV3OworICAgIAorICAgIHN0YXRpYyBCUmVjdAkJQ2Fs
Y0ZyYW1lKEJWaWV3ICp0YXJnZXQsIGJvb2wgaCwgYm9vbCB2KTsKKyAgICBzdGF0aWMgaW50MzIJ
CU1vZGlmeUZsYWdzKGludDMyIGZsYWdzKTsKKyAgICAKKyAgICBCVmlldwkJCQkqZlRhcmdldDsK
KyAgICBCU2Nyb2xsQmFyCQkJKmZIb3Jpem9udGFsU2Nyb2xsQmFyOworICAgIEJTY3JvbGxCYXIJ
CQkqZlZlcnRpY2FsU2Nyb2xsQmFyOworICAgIHVpbnQxNgkJCQlmUHJldmlvdXNXaWR0aDsKKyAg
ICB1aW50MTYJCQkJZlByZXZpb3VzSGVpZ2h0OworICAgIGJvb2wJCQkJZkhpZ2hsaWdodGVkOwor
ICAgIAorICAgIFNjcm9sbGJhck1vZGUJCWZWZXJ0aWNhbFNjcm9sbEJhck1vZGU7CisgICAgU2Ny
b2xsYmFyTW9kZQkJZkhvcml6b250YWxTY3JvbGxCYXJNb2RlOwkJCit9OworCisjZW5kaWYgIC8q
IF9XS19TQ1JPTExfVklFV19IICovCisKLS0gCjEuNi4zLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32875</attachid>
            <date>2009-07-16 09:01:18 -0700</date>
            <delta_ts>2009-08-07 10:42:01 -0700</delta_ts>
            <desc>Patch to add a fifth bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-fifth-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>31354</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA4NWNlODdmYzYxY2ZlZmY4YjgzOTA2YTY0YjVjMzJkYzc4NmZlNzdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTg6MDA6MDEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIGZpZnRoIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
NTkgKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5jcHAgICAgICAg
fCAgIDY5ICsrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3Bw
ICAgICB8ICAzNTMgKysrKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2NyZWVuSGFpa3UuY3BwICAgICAgICAgIHwgICA4OCArKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwIHwgICA1MiArKysrCiBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwICAgICB8ICAxMzEgKysrKysrKysrCiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaCAgICAgICB8ICAgNTcgKysr
KwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcCAgICAgICAgICAgfCAgIDQy
ICsrKwogOCBmaWxlcyBjaGFuZ2VkLCA4NTEgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhl
bWVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Nj
cmVlbkhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
U2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U1YTgwNi4uOTNjNjMwMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw2MiBAQAorMjAwOS0wNy0xNiAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdt
YWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBhIGZpZnRoIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3Jl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODgK
KworICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OlBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnU6On5Qb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojpz
aG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6aGlkZSk6CisgICAgICAgIChXZWJD
b3JlOjpQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwTWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwpOgorICAgICAgICAqIHBsYXRm
b3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSGFpa3U6OlJlbmRlclRoZW1lSGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVIYWlrdTo6flJlbmRlclRoZW1lSGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVIYWlrdTo6c3VwcG9ydHNIb3Zlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUhhaWt1OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlr
dTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVIYWlrdTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhh
aWt1OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnBhaW50Q2hl
Y2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGFpbnRSYWRpbyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjphZGp1c3RNZW51TGlzdFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnBhaW50TWVudUxpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6dGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVI
YWlrdTo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1Ojpz
ZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6c2V0
UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkF2YWls
YWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuRGVwdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVu
SXNNb25vY2hyb21lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9TZWFyY2hQb3B1cE1lbnVI
YWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51OjpTZWFy
Y2hQb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51OjpzYXZlUmVj
ZW50U2VhcmNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51Ojpsb2FkUmVj
ZW50U2VhcmNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoUG9wdXBNZW51OjplbmFibGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRUaW1lckhhaWt1OjpTaGFyZWRUaW1lckhhaWt1KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6OkZpbHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRUaW1lckhhaWt1Ojp+U2hhcmVkVGltZXJIYWlrdSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRUaW1lckhhaWt1OjpzZXRGaXJlVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRUaW1lckhhaWt1OjpzZXRGaXJlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkVGltZXJIYWlrdTo6c2V0U2hvdWxkUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFNo
YXJlZFRpbWVySGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlZEZ1
bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RvcFNoYXJlZFRpbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9TaGFyZWRUaW1lckhhaWt1Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Nv
dW5kSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUJlZXApOgorCiAy
MDA5LTA3LTE1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bv
cHVwTWVudUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWE4
MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVI
YWlrdS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJD
b3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdv
b2RAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Lmgi
CisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisKKyNpbmNsdWRlIDxNZW51Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUG9w
dXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BvcHVw
Q2xpZW50KGNsaWVudCkKK3sKKyAgICBtX21lbnUgPSBOVUxMOworfQorCitQb3B1cE1lbnU6On5Q
b3B1cE1lbnUoKQoreworICAgIGRlbGV0ZSBtX21lbnU7CisgICAgbV9tZW51ID0gTlVMTDsKK30K
Kwordm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2
aWV3LCBpbnQgaW5kZXgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQb3B1
cE1lbnU6OmhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBN
ZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Ym9vbCBQb3B1cE1lbnU6Oml0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVI
YWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDBhZDQKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwCkBAIC0wLDAg
KzEsMzUzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KKyAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdv
b2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisKKyNpbmNsdWRlIDxGb250Lmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IEkgYW0gbm90IHN1cmUgd2h5IHNvIG1hbnkgbWV0aG9k
cyBhcmUgaW5saW5lIGhlcmUuIFRoaXMgd2FzIGNvcGllZCBmcm9tIHRoZSAKKy8vIFN5bGxhYmxl
IHBvcnQuIEl0IHNob3VsZCBwcm9iYWJseSBhbGwgYmUgc2NyYXBwZWQuCitjbGFzcyBSZW5kZXJU
aGVtZUhhaWt1IDogcHVibGljIFJlbmRlclRoZW1lCit7CitwdWJsaWM6CisgICAgUmVuZGVyVGhl
bWVIYWlrdSgpIDogUmVuZGVyVGhlbWUoKSB7IH0KKwl+UmVuZGVyVGhlbWVIYWlrdSgpIHsgfQor
CisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5
IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CisgICAgeworICAgIAly
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
SGFpa3UoKSk7CisgICAgfQorCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRleHRTZWFyY2hI
aWdobGlnaHRDb2xvcigpIGNvbnN0CisgICAgeworICAgIAlyZXR1cm4gQ29sb3IodWlfY29sb3Io
Ql9NRU5VX1NFTEVDVEVEX0JBQ0tHUk9VTkRfQ09MT1IpKTsKKyAgICB9CisKKyAgICAvLyBUaGUg
cGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAgCXJldHVybiBDb2xvcih1aV9j
b2xvcihCX0NPTlRST0xfSElHSExJR0hUX0NPTE9SKSk7CisgICAgfQorCisgICAgQ29sb3IgcGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CisgICAgeworICAg
IAlyZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX0hJR0hMSUdIVF9DT0xPUikpOworICAg
IH0KKworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdAorICAgIHsKKyAgICAJcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJfQ09OVFJP
TF9URVhUX0NPTE9SKSk7CisgICAgfQorCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAgCXJldHVybiBD
b2xvcih1aV9jb2xvcihCX0NPTlRST0xfVEVYVF9DT0xPUikpOworICAgIH0KKworICAgIC8vIExp
c3QgQm94IHNlbGVjdGlvbiBjb2xvcgorICAgLyogCisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVM
aXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xv
ciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmly
dHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcigpIGNvbnN0OworICAgICovCisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQorICAgIHsKKyAgICAgICAgaWYgKGkuY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICAJcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vY29kZSB0YWtlbiBmcm9t
IHRoZSBIYWlrdSBzb3VyY2UgY29kZSAoQ2hlY2tCb3guY3BwKQorCisgICAgICAgIHJnYl9jb2xv
ciBub1RpbnQgPSB1aV9jb2xvcihCX1BBTkVMX0JBQ0tHUk9VTkRfQ09MT1IpOworICAgICAgICBy
Z2JfY29sb3IgbGlnaHRlbjEgPSB0aW50X2NvbG9yKG5vVGludCwgQl9MSUdIVEVOXzFfVElOVCk7
CisgICAgICAgIHJnYl9jb2xvciBsaWdodGVuTWF4ID0gdGludF9jb2xvcihub1RpbnQsIEJfTElH
SFRFTl9NQVhfVElOVCk7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW4xID0gdGludF9jb2xvcihu
b1RpbnQsIEJfREFSS0VOXzFfVElOVCk7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW4yID0gdGlu
dF9jb2xvcihub1RpbnQsIEJfREFSS0VOXzJfVElOVCk7CisgICAgICAgIHJnYl9jb2xvciBkYXJr
ZW4zID0gdGludF9jb2xvcihub1RpbnQsIEJfREFSS0VOXzNfVElOVCk7CisgICAgICAgIHJnYl9j
b2xvciBkYXJrZW40ID0gdGludF9jb2xvcihub1RpbnQsIEJfREFSS0VOXzRfVElOVCk7CisKKyAg
ICAgICAgQlJlY3QgcmVjdCA9IHIgOworICAgICAgICBCVmlldyoJdmlldz1pLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOworCisgICAgICAgIGlmIChpc0VuYWJsZWQoIG8gKSkgeworICAgICAg
ICAgICAgLy8gRmlsbGluZworICAgICAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGxpZ2h0ZW5N
YXgpOworICAgICAgICAgICAgdmlldy0+RmlsbFJlY3QocmVjdCk7CisKKyAgICAgICAgICAgIHZp
ZXctPkJlZ2luTGluZUFycmF5KDYpOworCisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2lu
dChyZWN0LmxlZnQsIHJlY3QuYm90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJQb2lu
dChyZWN0LmxlZnQsIHJlY3QudG9wKSwgZGFya2VuMSk7CisgICAgICAgICAgICB2aWV3LT5BZGRM
aW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCksIGRhcmtlbjEpOworICAgICAgICAgICAgICAg
IHJlY3QuSW5zZXRCeSgxLCAxKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJl
Y3QubGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJl
Y3QubGVmdCwgcmVjdC50b3ApLCBkYXJrZW40KTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUo
QlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgQlBv
aW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSwgZGFya2VuNCk7CisgICAgICAgICAgICB2aWV3LT5B
ZGRMaW5lKEJQb2ludChyZWN0LmxlZnQgKyAxLjBmLCByZWN0LmJvdHRvbSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20pLCBub1RpbnQpOwor
ICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20p
LAorICAgICAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wICsg
MS4wZiksIG5vVGludCk7CisKKyAgICAgICAgICAgIHZpZXctPkVuZExpbmVBcnJheSgpOworCisg
ICAgICAgICAgICAvLyBDaGVja21hcmsKKyAgICAgICAgICAgIGlmICggaXNDaGVja2VkKCBvICkg
KSB7CisgICAgICAgICAgICAgICAgcmVjdC5JbnNldEJ5KDIsIDIpOworCisgICAgICAgICAgICAg
ICAgdmlldy0+U2V0SGlnaENvbG9yKHVpX2NvbG9yKEJfS0VZQk9BUkRfTkFWSUdBVElPTl9DT0xP
UikpOworICAgICAgICAgICAgICAgIHZpZXctPlNldFBlblNpemUoMik7CisgICAgICAgICAgICAg
ICAgdmlldy0+U2V0RHJhd2luZ01vZGUoQl9PUF9PVkVSKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gbmVlZGVkIGJlY2F1c2Ugb2YgYW50aS1hbGlhc2luZworICAgICAgICAgICAgICAgIHZpZXct
PlN0cm9rZUxpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSk7CisgICAgICAgICAg
ICAgICAgdmlldy0+U3Ryb2tlTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LmJvdHRvbSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3ApKTsK
KyAgICAgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKDEpOworICAgICAgICAgICAgICAgIHZp
ZXctPlNldERyYXdpbmdNb2RlKEJfT1BfQ09QWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBGaWxsaW5nCisgICAgICAgICAgICB2aWV3LT5TZXRIaWdo
Q29sb3IobGlnaHRlbjEpOworICAgICAgICAgICAgdmlldy0+RmlsbFJlY3QocmVjdCk7CisKKyAg
ICAgICAgICAgIC8vIEJveAorICAgICAgICAgICAgdmlldy0+QmVnaW5MaW5lQXJyYXkoNik7CisK
KyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20p
LAorICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIG5vVGlu
dCk7CisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9w
KSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSwgbm9U
aW50KTsKKyAgICAgICAgICAgIHJlY3QuSW5zZXRCeSgxLCAxKTsKKyAgICAgICAgICAgIHZpZXct
PkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pLAorICAgICAgICAgICAgICAg
ICAgICBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIGRhcmtlbjIpOworICAgICAgICAgICAg
dmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksCisgICAgICAgICAgICAg
ICAgICAgIEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCksIGRhcmtlbjIpOworICAgICAgICAg
ICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0ICsgMS4wZiwgcmVjdC5ib3R0b20pLAor
ICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20pLCBkYXJr
ZW4xKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QucmlnaHQsIHJlY3Qu
Ym90dG9tKSwKKyAgICAgICAgICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9w
ICsgMS4wZiksIGRhcmtlbjEpOworCisgICAgICAgICAgICB2aWV3LT5FbmRMaW5lQXJyYXkoKTsK
KworICAgICAgICAgICAgLy8gQ2hlY2ttYXJrCisgICAgICAgICAgICBpZiAoaXNDaGVja2VkKCBv
ICkpIHsKKyAgICAgICAgICAgICAgICByZWN0Lkluc2V0QnkoMiwgMik7CisKKyAgICAgICAgICAg
ICAgICB2aWV3LT5TZXRIaWdoQ29sb3IodGludF9jb2xvcih1aV9jb2xvcihCX0tFWUJPQVJEX05B
VklHQVRJT05fQ09MT1IpLAorICAgICAgICAgICAgICAgICAgICBCX0RJU0FCTEVEX01BUktfVElO
VCkpOworICAgICAgICAgICAgICAgIHZpZXctPlNldFBlblNpemUoMik7CisgICAgICAgICAgICAg
ICAgdmlldy0+U2V0RHJhd2luZ01vZGUoQl9PUF9PVkVSKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gbmVlZGVkIGJlY2F1c2Ugb2YgYW50aS1hbGlhc2luZworICAgICAgICAgICAgICAgIHZpZXct
PlN0cm9rZUxpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSk7CisgICAgICAgICAg
ICAgICAgdmlldy0+U3Ryb2tlTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LmJvdHRvbSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3ApKTsK
KyAgICAgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKDEpOworICAgICAgICAgICAgICAgIHZp
ZXctPlNldERyYXdpbmdNb2RlKEJfT1BfQ09QWSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldENo
ZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50
UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIGlmIChpLmNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvL2NvZGUg
dGFrZW4gZnJvbSB0aGUgSGFpa3Ugc291cmNlIGNvZGUgKFJhZGlvQnV0dG9uLmNwcCkKKworICAg
ICAgICAvLyBsYXlvdXQgdGhlIHJlY3QgZm9yIHRoZSBkb3QKKyAgICAgICAgQlJlY3QgcmVjdCA9
IHIgOworICAgICAgICBCVmlldyoJdmlldz1pLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwor
CisgICAgICAgIC8vIGNvbG9ycworICAgICAgICByZ2JfY29sb3IgYmcgPSB1aV9jb2xvcihCX1BB
TkVMX0JBQ0tHUk9VTkRfQ09MT1IpOworICAgICAgICByZ2JfY29sb3IgbGlnaHRlbm1heDsKKyAg
ICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW4xOworICAgICAgICByZ2JfY29sb3IgZGFya2VuMTsKKyAg
ICAgICAgcmdiX2NvbG9yIGRhcmtlbjI7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW4zOworICAg
ICAgICByZ2JfY29sb3IgZGFya2VubWF4OworCisgICAgICAgIHJnYl9jb2xvciBuYXZpQ29sb3Ig
PSB1aV9jb2xvcihCX0tFWUJPQVJEX05BVklHQVRJT05fQ09MT1IpOworICAgICAgICByZ2JfY29s
b3Iga25vYjsKKyAgICAgICAgcmdiX2NvbG9yIGtub2JEYXJrOworICAgICAgICByZ2JfY29sb3Ig
a25vYkxpZ2h0OworCisgICAgICAgIGlmIChpc0VuYWJsZWQoIG8gKSkgeworICAgICAgICAgICAg
bGlnaHRlbm1heAk9IHRpbnRfY29sb3IoYmcsIEJfTElHSFRFTl9NQVhfVElOVCk7CisgICAgICAg
ICAgICBsaWdodGVuMQk9IHRpbnRfY29sb3IoYmcsIEJfTElHSFRFTl8xX1RJTlQpOworICAgICAg
ICAgICAgZGFya2VuMQkJPSB0aW50X2NvbG9yKGJnLCBCX0RBUktFTl8xX1RJTlQpOworICAgICAg
ICAgICAgZGFya2VuMgkJPSB0aW50X2NvbG9yKGJnLCBCX0RBUktFTl8yX1RJTlQpOworICAgICAg
ICAgICAgZGFya2VuMwkJPSB0aW50X2NvbG9yKGJnLCBCX0RBUktFTl8zX1RJTlQpOworICAgICAg
ICAgICAgZGFya2VubWF4CT0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fTUFYX1RJTlQpOworCisg
ICAgICAgICAgICBrbm9iCQk9IG5hdmlDb2xvcjsKKyAgICAgICAgICAgIGtub2JEYXJrCT0gdGlu
dF9jb2xvcihuYXZpQ29sb3IsIEJfREFSS0VOXzNfVElOVCk7CisgICAgICAgICAgICBrbm9iTGln
aHQJPSB0aW50X2NvbG9yKG5hdmlDb2xvciwgMC4xNSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBsaWdodGVubWF4CT0gdGludF9jb2xvcihiZywgQl9MSUdIVEVOXzJfVElOVCk7Cisg
ICAgICAgICAgICBsaWdodGVuMQk9IGJnOworICAgICAgICAgICAgZGFya2VuMQkJPSBiZzsKKyAg
ICAgICAgICAgIGRhcmtlbjIJCT0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fMV9USU5UKTsKKyAg
ICAgICAgICAgIGRhcmtlbjMJCT0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fMl9USU5UKTsKKyAg
ICAgICAgICAgIGRhcmtlbm1heAk9IHRpbnRfY29sb3IoYmcsIEJfRElTQUJMRURfTEFCRUxfVElO
VCk7CisKKyAgICAgICAgICAgIGtub2IJCT0gdGludF9jb2xvcihuYXZpQ29sb3IsIEJfTElHSFRF
Tl8yX1RJTlQpOworICAgICAgICAgICAga25vYkRhcmsJPSB0aW50X2NvbG9yKG5hdmlDb2xvciwg
Ql9MSUdIVEVOXzFfVElOVCk7CisgICAgICAgICAgICBrbm9iTGlnaHQJPSB0aW50X2NvbG9yKG5h
dmlDb2xvciwgKEJfTElHSFRFTl8yX1RJTlQgKyBCX0xJR0hURU5fTUFYX1RJTlQpIC8gMi4wKTsK
KwkJfQorCisgICAgICAgIC8vIGRvdAorICAgICAgICBpZiggaXNDaGVja2VkKCBvICkgKSB7Cisg
ICAgICAgICAgICAvLyBmdWxsCisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3Ioa25vYkRh
cmspOworICAgICAgICAgICAgdmlldy0+RmlsbEVsbGlwc2UocmVjdCk7CisKKyAgICAgICAgICAg
IHZpZXctPlNldEhpZ2hDb2xvcihrbm9iKTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxFbGxpcHNl
KEJSZWN0KHJlY3QubGVmdCArIDIsIHJlY3QudG9wICsgMiwgcmVjdC5yaWdodCAtIDMsIHJlY3Qu
Ym90dG9tIC0gMykpOworCisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3Ioa25vYkxpZ2h0
KTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxFbGxpcHNlKEJSZWN0KHJlY3QubGVmdCArIDMsIHJl
Y3QudG9wICsgMywgcmVjdC5yaWdodCAtIDUsIHJlY3QuYm90dG9tIC0gNSkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gZW1wdHkKKyAgICAgICAgICAgIHZpZXctPlNldEhpZ2hD
b2xvcihsaWdodGVubWF4KTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxFbGxpcHNlKHJlY3QpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmVjdC5JbnNldEJ5KC0xLjAsIC0xLjApOworCisgICAgICAg
IHZpZXctPlNldEhpZ2hDb2xvcihkYXJrZW4xKTsKKyAgICAgICAgdmlldy0+U3Ryb2tlQXJjKHJl
Y3QsIDQ1LjBmLCAxODAuMGYpOworICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbm1h
eCk7CisgICAgICAgIHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgLTE4MC4wZik7CisgICAg
ICAgIAorICAgICAgICByZWN0Lkluc2V0QnkoMSwgMSk7CisKKyAgICAgICAgLy8gaW5uZXIgY2ly
Y2xlCisgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcihkYXJrZW4zKTsKKyAgICAgICAgdmlldy0+
U3Ryb2tlQXJjKHJlY3QsIDQ1LjBmLCAxODAuMGYpOworICAgICAgICB2aWV3LT5TZXRIaWdoQ29s
b3IoYmcpOworICAgICAgICB2aWV3LT5TdHJva2VBcmMocmVjdCwgNDUuMGYsIC0xODAuMGYpOwor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFk
aW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZSkgY29uc3QKKyAgICB7CisgICAgCS8qIExlYXZlIHNvbWUgc3BhY2UgZm9yIHRoZSBhcnJv
dyAqLworICAgIAlzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aCgyMiwgRml4ZWQpKTsKKyAg
ICAJY29uc3QgaW50IG1pbkhlaWdodCA9IDIwOworICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0
KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CisgICAgfQorCisgICAgYm9vbCBwYWludE1lbnVM
aXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3lzdGVt
Rm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisgICAgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAg
dm9pZCBjbG9zZSgpOworCisgICAgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7Cit9OworCitS
ZW5kZXJUaGVtZSogdGhlbWUoKQoreworICAgIHN0YXRpYyBSZW5kZXJUaGVtZUhhaWt1IHJ0Owor
ICAgIHJldHVybiAmcnQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6c3lzdGVtRm9udChp
bnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUoIHRydWUgKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZSggKGludCkgYmVfcGxhaW5fZm9udC0+
U2l6ZSgpICk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6c2V0Q2hlY2tib3hTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZT0xMDsKKyAgICAvLyBUaGlz
IHdhcyBjb3BpZWQgZnJvbSB0aGUgUXQgcG9ydDoKKworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisg
ICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVp
Z2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBBIGhhcmQt
Y29kZWQgc2l6ZSBvZiAnc2l6ZScgaXMgdXNlZC4gVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5
IGZvciBub3cuIAorCisgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZSwgRml4ZWQpKTsKKworICAgIGlm
IChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKHNpemUsIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6c2V0UmFkaW9T
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIHRoZSBzYW1l
IGFzIGNoZWNrYm94ZXMuCisgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKK30KKworUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQor
eworICAgIGlmIChwYWdlKQorICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWVIYWlrdTo6Y3JlYXRl
KCk7CisKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVIYWlr
dTo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOworICAgIHJldHVybiBmYWxsYmFjazsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1NjcmVlbkhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmFkMTgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcApAQCAtMCwwICsx
LDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmVlbi5oIgorCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5o
PgorI2luY2x1ZGUgPGludGVyZmFjZS9TY3JlZW4uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopCit7CisgICAgQlNjcmVlbiBzY3JlZW47
CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNjcmVlbiBpcyB2YWxpZAorICAgIHJldHVy
biBGbG9hdFJlY3Qoc2NyZWVuLkZyYW1lKCkpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxh
YmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgdXNlIHRo
ZSBnZXRfZGVza2Jhcl9mcmFtZSgpIGZ1bmN0aW9uCisgICAgLy8gZnJvbSBJbnRlcmZhY2VEZWZz
LmggdG8gbWFrZSB0aGlzIHNtYWxsZXIKKyAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOwor
fQorCitpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KikKK3sKKyAgICBCU2NyZWVuIHNjcmVlbjsKKyAg
ICAvLyBGSVhNRTogV2UgYXNzdW1lIHRoaXMgc2NyZWVuIGlzIHZhbGlkCisgICAgY29sb3Jfc3Bh
Y2UgY3MgPSBzY3JlZW4uQ29sb3JTcGFjZSgpOworCisgICAgc2l6ZV90IHBpeGVsQ2h1bmssIHJv
d0FsaWdubWVudCwgcGl4ZWxzUGVyQ2h1bms7CisgICAgaWYgKGdldF9waXhlbF9zaXplX2Zvcihj
cywgJnBpeGVsQ2h1bmssICZyb3dBbGlnbm1lbnQsICZwaXhlbHNQZXJDaHVuaykgPT0gQl9PSykK
KyAgICAgICAgLy8gRklYTUU6IE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQKKyAgICAgICAgcmV0
dXJuIHBpeGVsQ2h1bmsgKiA4OworCisgICAgcmV0dXJuIDg7Cit9CisKK2ludCBzY3JlZW5EZXB0
aFBlckNvbXBvbmVudChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDg7Cit9CisKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCit7CisgICAgQlNj
cmVlbiBzY3JlZW47CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNjcmVlbiBpcyB2YWxp
ZAorICAgIHJldHVybiBzY3JlZW4uQ29sb3JTcGFjZSgpID09IEJfTU9OT0NIUk9NRV8xX0JJVDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjFmOTdiODIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAiQXRv
bWljU3RyaW5nLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2VhcmNoUG9wdXBNZW51OjpTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51
Q2xpZW50KiBjbGllbnQpCisgICAgOiBQb3B1cE1lbnUoY2xpZW50KQoreworfQorCit2b2lkIFNl
YXJjaFBvcHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBTZWFyY2hQb3B1cE1lbnU6OmVuYWJsZWQo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
U2hhcmVkVGltZXJIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVy
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MDBkZjAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3Uu
Y3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBB
bnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRUaW1lckhh
aWt1LmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5o
PgorI2luY2x1ZGUgPE1lc3NhZ2VSdW5uZXIuaD4KKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5o
PgorI2luY2x1ZGUgPHN1cHBvcnQvQXV0b2xvY2suaD4KKyNpbmNsdWRlIDxMb29wZXIuaD4KKwor
I2RlZmluZSBGSVJFX01FU1NBR0UgJ2ZpcmUnCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
aGFyZWRUaW1lckhhaWt1OjpTaGFyZWRUaW1lckhhaWt1KCkKKyAgICA6IEJNZXNzYWdlRmlsdGVy
KEZJUkVfTUVTU0FHRSkKKyAgICAsIG1fZmlyZVRpbWUoMCkKKyAgICAsIG1fc2hvdWxkUnVuKHRy
dWUpLCBtX3RpbWVyRnVuY3Rpb24oTlVMTCkKK3sKK30KKworZmlsdGVyX3Jlc3VsdCBTaGFyZWRU
aW1lckhhaWt1OjpGaWx0ZXIoQk1lc3NhZ2UqIG1lc3NhZ2UsIEJIYW5kbGVyKiogX3RhcmdldCkK
K3sKKyAgICBpZiAobV90aW1lckZ1bmN0aW9uICYmIG1fc2hvdWxkUnVuKQorICAgICAgICBtX3Rp
bWVyRnVuY3Rpb24oKTsKKworICAgIHJldHVybiBCX1NLSVBfTUVTU0FHRTsJCit9CisKK1NoYXJl
ZFRpbWVySGFpa3U6On5TaGFyZWRUaW1lckhhaWt1KCkKK3sKK30KKwordm9pZCBTaGFyZWRUaW1l
ckhhaWt1OjpzZXRGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpCit7CisgICAgbV9maXJlVGltZSA9
IGZpcmVUaW1lOworICAgIGlmIChtX2ZpcmVUaW1lID4gMCAmJiBtX3Nob3VsZFJ1bikgeworICAg
ICAgICBiaWd0aW1lX3Qgc2xlZXB5VGltZSA9IHN0YXRpY19jYXN0PGJpZ3RpbWVfdD4oKG1fZmly
ZVRpbWUgLSBXVEY6OmN1cnJlbnRUaW1lKCkpICogMTAwMDAwMCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoc2xlZXB5VGltZSA8IDApCisgICAgICAgICAgICBzbGVlcHlUaW1lID0gMDsKKworICAg
ICAgICBCTWVzc2FnZVJ1bm5lcjo6U3RhcnRTZW5kaW5nKExvb3BlcigpLCBuZXcgQk1lc3NhZ2Uo
RklSRV9NRVNTQUdFKSwgc2xlZXB5VGltZSwgMSk7CisgICAgfQorfQorCit2b2lkIFNoYXJlZFRp
bWVySGFpa3U6OnNldEZpcmVGdW5jdGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBtX3RpbWVyRnVu
Y3Rpb24gPSBmOworfQorCit2b2lkIFNoYXJlZFRpbWVySGFpa3U6OnNldFNob3VsZFJ1bihib29s
IHNob3VsZFJ1bikKK3sKKyAgICBtX3Nob3VsZFJ1biA9IHNob3VsZFJ1bjsKK30KKworLy8gU3Rh
dGljIGluc3RhbmNlCitTaGFyZWRUaW1lckhhaWt1KiBnZXRTaGFyZWRUaW1lckhhaWt1KCkKK3sK
KyAgICAvLyBQbGVhc2Ugbm90ZSB0aGlzIGlzIHN0aWxsIGFuIGV4cGVyaW1lbnRhbCBzb2x1dGlv
bi4KKworICAgIEJMb29wZXIgKmxvb3BlciA9IEJMb29wZXI6Okxvb3BlckZvclRocmVhZChmaW5k
X3RocmVhZChOVUxMKSk7CisgICAgLy8gQVNTRVJUKGxvb3Blcik7CisgICAgLy8gRklYTUU6IHdl
IHNob3VsZCBjaGVjayBpZiB0aGUgY3VycmVudCBsb29wZXIgaGFzIGEgdmFsaWQgaWYgbm90IGFk
ZCBhIG5ldyBvbmUuCisgICAgLy8gd2Ugc2hvdWxkIGFsc28gYmUgc3VyZSB0aGUgbG9vcGVyIGlz
IGEgQldpbmRvdy4uCisKKyAgICBzdGF0aWMgU2hhcmVkVGltZXJIYWlrdSogc2hhcmVkVGltZXIg
PSBOVUxMOworCisgICAgaWYgKCFzaGFyZWRUaW1lcikgeworICAgICAgICBCQXV0b2xvY2sgbG9j
ayhsb29wZXIpOworICAgICAgICBzaGFyZWRUaW1lciA9IG5ldyBTaGFyZWRUaW1lckhhaWt1KCk7
CisgICAgICAgIGxvb3Blci0+QWRkQ29tbW9uRmlsdGVyKHNoYXJlZFRpbWVyKTsgICAgCQorICAg
IH0KKworICAgIHJldHVybiBzaGFyZWRUaW1lcjsKK30KKworLy8gV2ViQ29yZSBmdW5jdGlvbnMK
K3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgpKQoreworICAgIFNo
YXJlZFRpbWVySGFpa3UqIHRpbWVyID0gZ2V0U2hhcmVkVGltZXJIYWlrdSgpOworICAgIEJBdXRv
bG9jayBsb2NrKHRpbWVyLT5Mb29wZXIoKSk7CisgICAgdGltZXItPnNldEZpcmVGdW5jdGlvbihm
KTsKK30KKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKK3sK
KyAgICBTaGFyZWRUaW1lckhhaWt1KiB0aW1lciA9IGdldFNoYXJlZFRpbWVySGFpa3UoKTsKKyAg
ICBCQXV0b2xvY2sgbG9jayh0aW1lci0+TG9vcGVyKCkpOworICAgIHRpbWVyLT5zZXRTaG91bGRS
dW4odHJ1ZSk7CisgICAJdGltZXItPnNldEZpcmVUaW1lKGZpcmVUaW1lKTsKK30KKwordm9pZCBz
dG9wU2hhcmVkVGltZXIoKQoreworICAgIFNoYXJlZFRpbWVySGFpa3UqIHRpbWVyID0gZ2V0U2hh
cmVkVGltZXJIYWlrdSgpOworICAgIEJBdXRvbG9jayBsb2NrKHRpbWVyLT5Mb29wZXIoKSk7Cisg
ICAgdGltZXItPnNldFNob3VsZFJ1bihmYWxzZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDU0MDcxCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmgKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21h
aWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2hh
cmVkVGltZXJIYWlrdV9oCisjZGVmaW5lIFNoYXJlZFRpbWVySGFpa3VfaAorCisjaW5jbHVkZSA8
T1MuaD4KKyNpbmNsdWRlIDxNZXNzYWdlRmlsdGVyLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIGNsYXNzIFNoYXJlZFRpbWVySGFpa3UgOiBwdWJsaWMgQk1lc3NhZ2VGaWx0ZXIgewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBTaGFyZWRUaW1lckhhaWt1KCk7CisgICAgICAg
ICAgICB+U2hhcmVkVGltZXJIYWlrdSgpOworCisgICAgICAgICAgICB2b2lkIHNldEZpcmVUaW1l
KGRvdWJsZSBmaXJlVGltZSk7CisgICAgICAgICAgICB2b2lkIHNldEZpcmVGdW5jdGlvbih2b2lk
ICgqZikoKSk7CisgICAgICAgICAgICB2b2lkIHNldFNob3VsZFJ1bihib29sIHNob3VsZFJ1bik7
CisKKyAgICAgICAgICAgIHZpcnR1YWwJZmlsdGVyX3Jlc3VsdCBGaWx0ZXIoQk1lc3NhZ2UqIG1l
c3NhZ2UsIEJIYW5kbGVyKiogX3RhcmdldCk7CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIGRvdWJsZSBtX2ZpcmVUaW1lOworICAgICAgICAgICAgdm9pZCAoKm1fdGltZXJGdW5jdGlv
bikoKTsKKyAgICAgICAgICAgIGJvb2wgbV9zaG91bGRSdW47CisgICAgfTsKKworICAgIFNoYXJl
ZFRpbWVySGFpa3UqIGdldFNoYXJlZFRpbWVySGFpa3UoKTsKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFNoYXJlZFRpbWVySGFpa3VfaAorCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1NvdW5kSGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
b3VuZEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVlOTNm
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhhaWt1LmNw
cApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
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
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291bmQuaCIKKworI2luY2x1
ZGUgPEJlZXAuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgc3lzdGVtQmVlcCgp
Cit7CisgICAgYmVlcCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4z
LjIKCg==
</data>
<flag name="review"
          id="17227"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32876</attachid>
            <date>2009-07-16 09:15:18 -0700</date>
            <delta_ts>2009-08-07 11:39:46 -0700</delta_ts>
            <desc>Patch to add a sixth bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-sixth-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>25047</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBhMjgwZGE4NzQ1MTQzYzg2Y2Y0MWVmMGE4ZWExNGJiNGRjOTdjYTdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFRodSwgMTYgSnVsIDIwMDkgMTg6MTM6NTYgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIHNpeHRoIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTAy
ICsrKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGltZUhhaWt1LmNw
cCAgICB8ICAgNDcgKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAgfCAgMTk4ICsrKysrKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuY3BwICB8ICAgNjcgKysrKysrKysrCiBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmggICAgfCAgIDU1ICsrKysrKysKIFdl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwICAgICAgICB8ICAxMTggKysrKysr
KysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDU4NyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9u
cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGlt
ZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvVHJhbnNsYXRvckRlY29kZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9XaWRnZXRIYWlrdS5jcHAKCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlNWE4MDYuLmJkZDQ1NjEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTA1IEBACisyMDA5LTA3LTE2ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIGEgc2l4dGggYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4OAor
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGltZUhhaWt1LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjdXJyZW50VGltZSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3Uv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzdWJtaXRC
dXR0b25EZWZhdWx0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCk6CisgICAgICAg
IChXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNoYWJs
ZUluZGV4SW50cm9kdWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVCdXR0b25DaG9vc2VG
aWxlTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFi
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtU
b0Rpc2spOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0Ns
aXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJ
bk5ld1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9h
ZEltYWdlVG9EaXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NvcHlJ
bWFnZVRvQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09w
ZW5GcmFtZUluTmV3V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnR29CYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdDdXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnUGFzdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ0lnbm9yZUdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnU3BlbGxpbmdNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1No
b3dTcGVsbGluZ1BhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0No
ZWNrU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZ1doaWxlVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdGb250TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdC
b2xkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRN
ZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ0luc3BlY3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNlYXJjaE1lbnVOb1JlY2Vu
dFNlYXJjaGVzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hNZW51UmVjZW50U2VhcmNo
ZXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVz
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp1bmtub3duRmlsZVNpemVUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFYV2ViQXJlYVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QVhMaW5rVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpBWExpc3RNYXJrZXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSW1hZ2VNYXBUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSGVhZGluZ1RleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6aW1hZ2VUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpBWEJ1dHRvbkFj
dGlvblZlcmIpOgorICAgICAgICAoV2ViQ29yZTo6QVhUZXh0RmllbGRBY3Rpb25WZXJiKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYUmFkaW9CdXR0b25BY3Rpb25WZXJiKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYQ2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYik6CisgICAgICAgIChXZWJDb3JlOjpBWFVu
Y2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYik6CisgICAgICAgIChXZWJDb3JlOjpBWExpbmtBY3Rp
b25WZXJiKToKKyAgICAgICAgKFdlYkNvcmU6OkFYRGVmaW5pdGlvbkxpc3RUZXJtVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWERlZmluaXRpb25MaXN0RGVmaW5pdGlvblRleHQpOgorICAgICAg
ICAobG9hZFJlc291cmNlSW50b0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Omhpc3RvcnlDb250
YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpzdXBwb3J0ZWRLZXlTaXplcyk6CisgICAgICAgIChX
ZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6dXNlcklkbGVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6ZmlsZVN5c3RlbVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldFN1cHBvcnRlZEtleVNpemVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9UcmFuc2xh
dG9yRGVjb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRvckRlY29k
ZXI6OlRyYW5zbGF0b3JEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0b3JEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRvckRlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2xhdG9yRGVj
b2Rlcjo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29k
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2xhdG9yRGVjb2Rlcjo6Z2V0Qml0
bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9XaWRnZXRIYWlrdS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojp+V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6ZnJhbWVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0RnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OldpZGdldDo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6aGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6c2V0SXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXQ6OmludmFsaWRhdGVSZWN0KToKKwogMjAwOS0wNy0xNSAgRGltaXRyaSBHbGF6a292ICA8ZGds
YXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGltZUhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU3lzdGVtVGltZUhhaWt1LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg4MmVmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9TeXN0ZW1UaW1lSGFpa3UuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
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
aCIKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZG91YmxlIGN1cnJlbnRUaW1lKCkKK3sKKyAgICBzdHJ1
Y3QgdGltZXZhbCB0djsKKyAgICBzdHJ1Y3QgdGltZXpvbmUgdHo7CisKKyAgICBnZXR0aW1lb2Zk
YXkoJnR2LCAmdHopOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHR2LnR2X3NlYykg
KyAoc3RhdGljX2Nhc3Q8ZG91YmxlPih0di50dl91c2VjKSAvIDEwMDAwMDAuMCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwY2M1
YjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0
IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIk5vZGUu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRl
ICJsb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisj
aW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIlNjcmVlbi5oIgorI2luY2x1ZGUgIkhpc3Rvcnku
aCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
KyNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgor
I2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEYXRhR3JpZENvbHVtbkxpc3QuaCIK
KyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKKy8vIExvY2FsaXplZFN0cmluZ3MKK1N0cmluZyBXZWJDb3JlOjpzdWJtaXRCdXR0b25EZWZh
dWx0TGFiZWwoKSB7IHJldHVybiAiU3VibWl0IjsgfQorU3RyaW5nIFdlYkNvcmU6OmlucHV0RWxl
bWVudEFsdFRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OnJlc2V0
QnV0dG9uRGVmYXVsdExhYmVsKCkgeyByZXR1cm4gIlJlc2V0IjsgfQorU3RyaW5nIFdlYkNvcmU6
OmRlZmF1bHRMYW5ndWFnZSgpIHsgcmV0dXJuICJlbiI7IH0KK1N0cmluZyBXZWJDb3JlOjpzZWFy
Y2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKSB7IHJldHVybiAiU2VhcmNoYWJsZSBJbmRleCI7IH0K
K1N0cmluZyBXZWJDb3JlOjpmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkgeyByZXR1cm4gIkNo
b29zZSBGaWxlIjsgfQorU3RyaW5nIFdlYkNvcmU6OmZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExh
YmVsKCkgeyByZXR1cm4gIk5vIGZpbGUgc2VsZWN0ZWQiOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpIHsgcmV0dXJuIFN0cmluZyggIk9w
ZW4gaW4gbmV3IHRhYiIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkTGlua1RvRGlzaygpIHsgcmV0dXJuIFN0cmluZyggIkRvd25sb2FkIGxpbmsgdG8gZGlz
ayIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlw
Ym9hcmQoKSB7IHJldHVybiBTdHJpbmcoICJDb3B5IGxpbmsgdG8gY2xpcGJvYXJkIiApOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKSB7
IHJldHVybiBTdHJpbmcoICJPcGVuIGltYWdlIGluIG5ldyB3aW5kb3ciICk7IH0KK1N0cmluZyBX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkgeyByZXR1cm4g
U3RyaW5nKCAiRG93bmxvYWQgaW1hZ2UgdG8gZGlzayIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkgeyByZXR1cm4gU3RyaW5nKCAi
Q29weSBpbWFnZSB0byBjbGlwYm9hcmQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpIHsgcmV0dXJuIFN0cmluZyggIk9wZW4gZnJh
bWUgaW4gbmV3IHdpbmRvdyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z0NvcHkoKSB7IHJldHVybiBTdHJpbmcoICJDb3B5IiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKCkgeyByZXR1cm4gU3RyaW5nKCAiR28gYmFjayIgKTsgfQor
U3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpIHsgcmV0dXJuIFN0
cmluZyggIkdvIGZvcndhcmQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdTdG9wKCkgeyByZXR1cm4gU3RyaW5nKCAiU3RvcCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpIHsgcmV0dXJuIFN0cmluZyggIlJlbG9hZCIgKTsgfQor
U3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0N1dCgpIHsgcmV0dXJuIFN0cmluZygg
IkN1dCIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkgeyBy
ZXR1cm4gU3RyaW5nKCAiUGFzdGUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpIHsgcmV0dXJuIFN0cmluZyggIk5vIGd1ZXNzZXMgZm91bmQi
ICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygp
IHsgcmV0dXJuIFN0cmluZyggIklnbm9yZSBzcGVsbGluZyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6
OmNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSB7IHJldHVybiBTdHJpbmcoICJMZWFy
biBzcGVsbGluZyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1NlYXJj
aFdlYigpIHsgcmV0dXJuIFN0cmluZyggIlNlYXJjaCB3ZWIiICk7IH0KK1N0cmluZyBXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoKSB7IHJldHVybiBTdHJpbmco
ICJMb29rdXAgaW4gZGljdGlvbmFyeSIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rKCkgeyByZXR1cm4gU3RyaW5nKCAiT3BlbiBsaW5rIiApOyB9CitTdHJp
bmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpIHsgcmV0dXJuIFN0
cmluZyggIklnbm9yZSBncmFtbWFyIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdNZW51KCkgeyByZXR1cm4gU3RyaW5nKCAiU3BlbGxpbmcgbWVudSIgKTsg
fQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJv
b2wgc2hvdykgeyByZXR1cm4gU3RyaW5nKCAiU2hvdyBzcGVsbGluZyBwYW5lbCIgKTsgfQorU3Ry
aW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSB7IHJldHVybiBT
dHJpbmcoICJDaGVjayBzcGVsbGluZyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpIHsgcmV0dXJuIFN0cmluZyggIkNoZWNr
IHNwZWxsaW5nIHdoaWxlIHR5cGluZyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51
SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZygpIHsgcmV0dXJuIFN0cmluZyggIkNoZWNr
IGZvciBncmFtbWFyIHdpdGggc3BlbGxpbmciICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdGb250TWVudSgpIHsgcmV0dXJuIFN0cmluZyggIkZvbnQgbWVudSIgKTsgfQor
U3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKSB7IHJldHVybiBTdHJpbmco
ICJCb2xkIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkg
eyByZXR1cm4gU3RyaW5nKCAiSXRhbGljIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnVW5kZXJsaW5lKCkgeyByZXR1cm4gU3RyaW5nKCAiVW5kZXJsaW5lIiApOyB9CitT
dHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgpIHsgcmV0dXJuIFN0cmlu
ZyggIk91dGxpbmUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdXcml0
aW5nRGlyZWN0aW9uTWVudSgpIHsgcmV0dXJuIFN0cmluZyggIldyaXRpbmcgZGlyZWN0aW9uIG1l
bnUiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0
aW9uKCkgeyByZXR1cm4gU3RyaW5nKCAiRGVmYXVsdCBkaXJlY3Rpb24iICk7IH0KK1N0cmluZyBX
ZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpIHsgcmV0dXJuIFN0cmluZygg
IkxlZnQgdG8gcmlnaHQiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdS
aWdodFRvTGVmdCgpIHsgcmV0dXJuIFN0cmluZyggIlJpZ2h0IHRvIGxlZnQiICk7IH0KK1N0cmlu
ZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgpIHsgcmV0dXJuIFN0
cmluZyggIkluc3BlY3QiICk7IH0KK1N0cmluZyBXZWJDb3JlOjpzZWFyY2hNZW51Tm9SZWNlbnRT
ZWFyY2hlc1RleHQoKSB7IHJldHVybiBTdHJpbmcoICJObyByZWNlbnQgdGV4dCBzZWFyY2hlcyIg
KTsgfQorU3RyaW5nIFdlYkNvcmU6OnNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKSB7IHJl
dHVybiBTdHJpbmcoICJSZWNlbnQgdGV4dCBzZWFyY2hlcyIgKTsgfQorU3RyaW5nIFdlYkNvcmU6
OnNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgpIHsgcmV0dXJuIFN0cmluZyggIkNs
ZWFyIHJlY2VudCB0ZXh0IHNlYXJjaGVzIiApOyB9CitTdHJpbmcgV2ViQ29yZTo6dW5rbm93bkZp
bGVTaXplVGV4dCgpIHsgcmV0dXJuIFN0cmluZygiVW5rbm93biIpOyB9CitTdHJpbmcgV2ViQ29y
ZTo6QVhXZWJBcmVhVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6
QVhMaW5rVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhMaXN0
TWFya2VyVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhJbWFn
ZU1hcFRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYSGVhZGlu
Z1RleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmltYWdlVGl0bGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyByZXR1cm4gU3Ry
aW5nKCJJbWFnZSIpOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnVGV4dERp
cmVjdGlvbk1lbnUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OkFYQnV0
dG9uQWN0aW9uVmVyYigpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhU
ZXh0RmllbGRBY3Rpb25WZXJiKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3Jl
OjpBWFJhZGlvQnV0dG9uQWN0aW9uVmVyYigpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcg
V2ViQ29yZTo6QVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KK1N0cmluZyBXZWJDb3JlOjpBWFVuY2hlY2tlZENoZWNrQm94QWN0aW9uVmVyYigpIHsgcmV0
dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhMaW5rQWN0aW9uVmVyYigpIHsgcmV0
dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6QVhEZWZpbml0aW9uTGlzdFRlcm1UZXh0
KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpBWERlZmluaXRpb25MaXN0
RGVmaW5pdGlvblRleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorCitWZWN0b3I8Y2hhcj4gbG9h
ZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFZlY3RvcjxjaGFyPigpOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgaGlzdG9yeUNvbnRhaW5zKFN0cmluZyBjb25zdCYpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXplcygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30KKworU3RyaW5nIHNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNv
bnN0IFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwpCit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitmbG9hdCB1c2VySWRsZVRpbWUoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDAuMDsKK30KKwordm9pZCBjYWxsT25NYWluVGhyZWFkKHZv
aWQgKCopKCkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3Ry
aW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMg
U2Nyb2xsYmFyVGhlbWUgdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsKK30KKwordm9pZCBnZXRT
dXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvVHJhbnNsYXRvckRlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjk4NGE3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Ry
YW5zbGF0b3JEZWNvZGVyLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
cmFuc2xhdG9yRGVjb2Rlci5oIgorCisjaW5jbHVkZSA8VHJhbnNsYXRpb25VdGlscy5oPgorI2lu
Y2x1ZGUgPERhdGFJTy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKK1RyYW5zbGF0b3JE
ZWNvZGVyOjpUcmFuc2xhdG9yRGVjb2RlcigpCit7CisgICAgbV9pbWFnZSA9IE5VTEw7CisgICAg
c2V0U2l6ZSgtMSwgLTEpOworfQorCitib29sIFRyYW5zbGF0b3JEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBzaXplKCkgIT0gSW50U2l6ZSgtMSwgLTEpOwor
fQorCitSR0JBMzJCdWZmZXIqIFRyYW5zbGF0b3JEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiAwOworfQorCisvLyBBbGwgc3BlY2lmaWMgZGVj
b2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEgdGhleSBhcmUgZ2l2
ZW4uCit2b2lkIFRyYW5zbGF0b3JEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpIAoreyAKKyAgICBpZihhbGxEYXRhUmVjZWl2ZWQpIHsgLy9w
cm9ncmVzc2l2ZSBsb2FkaW5nPworICAgICAgICBCTWVtb3J5SU8JaW8oZGF0YS0+ZGF0YSgpLGRh
dGEtPnNpemUoKSk7CisgICAgICAgIG1faW1hZ2UgPSBCVHJhbnNsYXRpb25VdGlsczo6R2V0Qml0
bWFwKCZpbyk7CisgICAgICAgIGlmIChtX2ltYWdlKQorICAgICAgICAgICAgLy9zZXQgdGhlIGlt
YWdlIHNpemUgZGVjb2RlZC4KKyAgICAgICAgICAgIHNldFNpemUobV9pbWFnZS0+Qm91bmRzKCku
V2lkdGgoKSArIDEsIG1faW1hZ2UtPkJvdW5kcygpLkhlaWdodCgpICsgMSk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNs
YXRvckRlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZmZDhk
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UcmFuc2xhdG9yRGVj
b2Rlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1l
IFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBUcmFuc2xhdG9yRGVjb2Rlcl9oCisjZGVmaW5lIFRyYW5zbGF0
b3JEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgPEJpdG1h
cC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBUcmFuc2xhdG9yRGVjb2Rl
ciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNsYXRv
ckRlY29kZXIoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29u
c3Q7CisKKyAgICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIgcGx1Z2lucyBtdXN0IGRvIHNv
bWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgorICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSA7CisK
KyAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpOworCisgICAgICAgIEJCaXRtYXAqIGdldEJpdG1hcCgpIHsgcmV0dXJuIG1faW1hZ2U7
IH0KKworICAgIHByaXZhdGU6CisJCUJCaXRtYXAqIG1faW1hZ2U7CisgICAgfTsKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRyYW5zbGF0b3JEZWNvZGVyX2gKKwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XaWRnZXRIYWlrdS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43OTAwMGVjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9XaWRnZXRIYWlrdS5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
aWRnZXQuaCIKKworI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisKKyNpbmNsdWRlIDxDb250cm9sLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQorewor
ICAgIGluaXQod2lkZ2V0KTsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKK30KKworSW50UmVj
dCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgp
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50UmVjdCByZWN0OworICAgIGlm
KHBsYXRmb3JtV2lkZ2V0KCktPkxvY2tMb29wZXIoKSl7CisgICAgICAgIHJlY3QgPSBwbGF0Zm9y
bVdpZGdldCgpLT5GcmFtZSgpOworICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5VbmxvY2tMb29w
ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVjdDsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZy
YW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghcGxhdGZvcm1XaWRnZXQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGZyYW1lUmVjdCgpICE9IHJlY3QpIHsKKyAg
ICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+TW92ZVRvKHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAg
ICAgIHBsYXRmb3JtV2lkZ2V0KCktPlJlc2l6ZVRvKHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QuaGVp
Z2h0KCkgLSAxKTsKKwl9Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCit7CisgICAgaWYg
KHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPk1ha2VGb2N1cygp
OworfQorCit2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQorewor
ICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5TZXRW
aWV3Q3Vyc29yKGN1cnNvci5pbXBsKCkpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7Cisg
ICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPlNob3co
KTsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQoreworICAgIGlmIChwbGF0Zm9ybVdpZGdldCgp
KQorICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5IaWRlKCk7Cit9CisKK3ZvaWQgV2lkZ2V0Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIHAsIEludFJlY3QgY29uc3QmIHIpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVdpZGdldCgpLT5JbnZhbGlkYXRlKHJl
Y3QpOworICAgIHBsYXRmb3JtV2lkZ2V0KCktPkZsdXNoKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwotLSAKMS42LjMuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32940</attachid>
            <date>2009-07-17 07:55:27 -0700</date>
            <delta_ts>2009-07-17 08:29:46 -0700</delta_ts>
            <desc>Patch to add ScrollBar and ScrollView code specific to Haiku.</desc>
            <filename>Added-ScrollBar-and-ScrollView-code-specific-to-Haik.patch</filename>
            <type>text/plain</type>
            <size>46565</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAwN2ZkMzMxMTY0MzE1NTMwNWYwZWVkOWQ3NmJhZTA5ZjNkMjExYzMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMTcgSnVsIDIwMDkgMTY6MzY6MTcgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBTY3JvbGxCYXIgYW5kIFNjcm9sbFZpZXcgY29kZSBzcGVjaWZpYyB0byBIYWlrdS4KCi0t
LQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx
MDIgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXIuaCAgICAg
ICAgfCAgIDYzICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhh
aWt1LmNwcCB8ICAxMjEgKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdD
YW52YXNIYWlrdS5jcHAgIHwgIDIwNSArKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oICAgIHwgICA2NyArKysrCiBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAgICAgICAgIHwgIDMxMSArKysrKysrKysrKysrKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcCAgICAgICAgICAgfCAgNDE1
ICsrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZp
ZXcuaCAgICAgICAgICAgICB8ICAgNzggKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxMzYyIGluc2Vy
dGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZh
c0hhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9s
bFZpZXdIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1dLU2Nyb2xsVmlldy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1dLU2Nyb2xsVmlldy5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA5NDIwZTY1Li43ODc1ZjlmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAw
OS0wNy0xNyAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBTY3JvbGxCYXIg
YW5kIFNjcm9sbFZpZXcgY29kZSBzcGVjaWZpYyB0byBIYWlrdS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTg4CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtU2Nyb2xsYmFyOjppc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNj
cm9sbGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCk6CisgICAgICAgICogcGxh
dGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
SGFpa3VTY3JvbGxCYXI6OkhhaWt1U2Nyb2xsQmFyKToKKyAgICAgICAgKEhhaWt1U2Nyb2xsQmFy
OjpWYWx1ZUNoYW5nZWQpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OlBsYXRmb3JtU2Ny
b2xsYmFyKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIp
OgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChQ
bGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbik6CisgICAgICAgIChQbGF0Zm9y
bVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0aW9uKToKKyAgICAgICAgKFBsYXRmb3JtU2Ny
b2xsYmFyOjp3aWR0aCk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KToKKyAg
ICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KToKKyAgICAgICAgKFBsYXRmb3JtU2Ny
b2xsYmFyOjpzZXRFbmFibGVkKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpwYWludCk6
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNjcm9sbFZpZXdD
YW52YXNIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkRy
YXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNZXNzYWdlUmVj
ZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZU1v
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TW91c2VEb3du
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TW91c2VVcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkRvU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5RG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OktleVVwKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6V2luZG93QWN0aXZhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RnJhbWVSZXNpemVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNldFNjcm9sbEJhck1heFYpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpTZXRTY3JvbGxCYXJNYXhIKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6U2V0U2Nyb2xsVmlldyk6CisgICAg
ICAgICogcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0hhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6U2Nyb2xsVmlld1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OkF0
dGFjaGVkVG9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmll
d1ByaXZhdGU6OktleURvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGU6OktleVVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9s
bFZpZXdQcml2YXRlOjpWaXNpYmxlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNldENvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpDb250ZW50U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6Q29udGVudFdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpDb250ZW50SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpT
Y3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1By
aXZhdGU6OlNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3Jt
SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybURlc3Ryb3kpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJNb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbGJhck1vZGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtQWRkQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1SZW1vdmVDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENvbnRlbnRzU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JlZW5Ub0NvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENhbkJsaXRPblNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUNhbkJsaXRPblNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUlzT2Zmc2NyZWVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEFsbG93c1Njcm9sbGluZyk6CisgICAgICAgICogcGxh
dGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXS1Njcm9sbFZp
ZXc6OldLU2Nyb2xsVmlldyk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6On5XS1Njcm9sbFZpZXcp
OgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpJbnN0YW50aWF0ZSk6CisgICAgICAgIChXS1Njcm9s
bFZpZXc6OkFyY2hpdmUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpBdHRhY2hlZFRvV2luZG93
KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6RGV0YWNoZWRGcm9tV2luZG93KToKKyAgICAgICAg
KFdLU2Nyb2xsVmlldzo6QWxsQXR0YWNoZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpBbGxE
ZXRhY2hlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlNjcm9sbEJhcik6CisgICAgICAgIChX
S1Njcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpTZXRT
Y3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6U2V0VGFyZ2V0KToKKyAgICAg
ICAgKFdLU2Nyb2xsVmlldzo6VGFyZ2V0KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TWVzc2Fn
ZVJlY2VpdmVkKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TW91c2VEb3duKToKKyAgICAgICAg
KFdLU2Nyb2xsVmlldzo6TW91c2VVcCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6Ok1vdXNlTW92
ZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpGcmFtZU1vdmVkKToKKyAgICAgICAgKFdLU2Ny
b2xsVmlldzo6UmVzaXplVG9QcmVmZXJyZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpHZXRQ
cmVmZXJyZWRTaXplKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6Q2FsY0ZyYW1lKToKKyAgICAg
ICAgKFdLU2Nyb2xsVmlldzo6TW9kaWZ5RmxhZ3MpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpX
aW5kb3dBY3RpdmF0ZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNYWtlRm9jdXMpOgorICAg
ICAgICAoV0tTY3JvbGxWaWV3OjpSZXNvbHZlU3BlY2lmaWVyKToKKyAgICAgICAgKFdLU2Nyb2xs
Vmlldzo6R2V0U3VwcG9ydGVkU3VpdGVzKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TWluU2l6
ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlByZWZlcnJlZFNpemUpOgorICAgICAgICAoV0tT
Y3JvbGxWaWV3OjpQZXJmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZp
ZXcuaDogQWRkZWQuCisKIDIwMDktMDctMTYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMTRkMDM5OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvUGxhdGZvcm1TY3JvbGxCYXIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
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
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUGxhdGZvcm1TY3JvbGxiYXJfaAorI2RlZmluZSBQbGF0
Zm9ybVNjcm9sbGJhcl9oCisKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKKworI2luY2x1ZGUgPGludGVyZmFjZS9TY3JvbGxCYXIuaD4KKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBQbGF0Zm9ybVNjcm9sbGJhciA6IHB1YmxpYyBTY3JvbGxi
YXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xp
ZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKKyAgICAg
ICAgdmlydHVhbCB+UGxhdGZvcm1TY3JvbGxiYXIoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBpbnQg
d2lkdGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKworICAgICAgICBzdGF0
aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KEJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7IH0KKyAgICAgICAgc3RhdGljIGludCB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihCX1ZfU0NST0xMX0JB
Ul9XSURUSCk7IH0KKworICAgICAgICB2b2lkIHZhbHVlQ2hhbmdlZChmbG9hdCk7CisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQcm9wb3J0aW9uKCk7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGxhdGZvcm1TY3JvbGxiYXJfaAorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE3Mjk5Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcApA
QCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgi
CisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiQ3Vy
c29yLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1
ZGUgPFZpZXcuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworCitjbGFzcyBIYWlr
dVNjcm9sbEJhciA6IHB1YmxpYyBCU2Nyb2xsQmFyIHsKK3B1YmxpYzoKKyAgICBIYWlrdVNjcm9s
bEJhcihQbGF0Zm9ybVNjcm9sbGJhciogcGxhdGZvcm1TY3JvbGxiYXIsIEJWaWV3KiB0YXJnZXQs
IG9yaWVudGF0aW9uIHBvc3R1cmUpIAorICAgICAgICA6IEJTY3JvbGxCYXIoKHBvc3R1cmUgPT0g
Ql9WRVJUSUNBTCkgPyBCUmVjdCgwLCAwLCBCX1ZfU0NST0xMX0JBUl9XSURUSCwgMCkgOiBCUmVj
dCgwLCAwLCAwLCBCX0hfU0NST0xMX0JBUl9IRUlHSFQpLAorICAgICAgICAgICAgICAgICAgICAg
InNjcm9sbF9iYXIiLCB0YXJnZXQsIDAsIDEsIHBvc3R1cmUpCisgICAgeworICAgICAgICBtX3Bs
YXRmb3JtU2Nyb2xsYmFyID0gcGxhdGZvcm1TY3JvbGxiYXI7CisgICAgfQorCisgICAgdm9pZCBW
YWx1ZUNoYW5nZWQoZmxvYXQgbmV3VmFsdWUpCisgICAgeworICAgICAgICBtX3BsYXRmb3JtU2Ny
b2xsYmFyLT52YWx1ZUNoYW5nZWQobmV3VmFsdWUpOworICAgIH0KK3ByaXZhdGU6CisgICAgUGxh
dGZvcm1TY3JvbGxiYXIqIG1fcGxhdGZvcm1TY3JvbGxiYXI7Cit9OworCitQbGF0Zm9ybVNjcm9s
bGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQorICAg
IDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpCit7CisgICAgSGFpa3VTY3Jv
bGxCYXIqIHNjcm9sbGJhciA9IG5ldyBIYWlrdVNjcm9sbEJhcih0aGlzLCAvKnRhcmdldCovMCwg
KG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IEJfVkVSVElDQUwgOiBCX0hPUkla
T05UQUwpOworICAgIHNldFBsYXRmb3JtV2lkZ2V0KHNjcm9sbGJhcik7Cit9CisKK1BsYXRmb3Jt
U2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIoKQoreworICAgIHNldFBsYXRmb3JtV2lkZ2V0
KDApOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp2YWx1ZUNoYW5nZWQoZmxvYXQgbmV3
VmFsdWUpCit7CisgICAgc2V0VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihuZXdWYWx1ZSkpOworfQor
Cit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkKK3sKKyAgICBI
YWlrdVNjcm9sbEJhciogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8SGFpa3VTY3JvbGxCYXIqPihw
bGF0Zm9ybVdpZGdldCgpKTsKKyAgICBzY3JvbGxiYXItPlNldFZhbHVlKG1fY3VycmVudFBvcyk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpCit7
CisgICAgSGFpa3VTY3JvbGxCYXIqIHNjcm9sbGJhciA9IHN0YXRpY19jYXN0PEhhaWt1U2Nyb2xs
QmFyKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisgICAgZmxvYXQgcHJvcG9ydGlvbiA9IHN0YXRpY19j
YXN0PGZsb2F0PihtX3Zpc2libGVTaXplKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6
ZSk7CisKKyAgICBpZiAoIShwcm9wb3J0aW9uID09IHNjcm9sbGJhci0+UHJvcG9ydGlvbigpIHx8
IHByb3BvcnRpb24gPCAwLjApKQorICAgICAgICBzY3JvbGxiYXItPlNldFByb3BvcnRpb24ocHJv
cG9ydGlvbik7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgoKSBjb25zdAorewor
ICAgIHJldHVybiBXaWRnZXQ6OndpZHRoKCk7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6
aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2lkZ2V0OjpoZWlnaHQoKTsKK30KKwordm9p
ZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRGcmFtZVJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFBsYXRmb3JtU2Ny
b2xsYmFyOjpzZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFy
OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorewor
ICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRoaXM/Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45ZGQ5Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuY3BwCkBAIC0wLDAgKzEsMjA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBn
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
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgiCisKKyNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKworI2luY2x1ZGUg
IlNoYXJlZFRpbWVySGFpa3UuaCIKKworI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+CisjaW5j
bHVkZSA8U2Nyb2xsQmFyLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUgPExvb3Bl
ci5oPgorI2luY2x1ZGUgPEF1dG9sb2NrLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
Y3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNjcm9sbFZpZXdDYW52YXNIYWlrdShTY3JvbGxWaWV3KiBz
Y3JvbGxWaWV3LCBCVmlldyogcGFyZW50LCB1aW50MzIgZmxhZ3MpCisgICAgOiBCVmlldyhCUmVj
dCgwLCAwLCAwLCAwKSwgInNjcm9sbF92aWV3X2NhbnZhcyIsIEJfRk9MTE9XX0FMTF9TSURFUywg
Ql9XSUxMX0RSQVcgfCBCX0ZSQU1FX0VWRU5UUyB8IGZsYWdzKQorICAgICwgbV9zY3JvbGxWaWV3
KHNjcm9sbFZpZXcpCit7CisgICAgU2V0Vmlld0NvbG9yKDI1NSwgMjU1LCAyNTUpOworfQorCisK
K3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpCit7Cisg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3Njcm9s
bFZpZXcpOworICAgIGlmICghZnJhbWVWaWV3IHx8ICFmcmFtZVZpZXctPmZyYW1lKCkgfHwgIWZy
YW1lVmlldy0+ZnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoaWxlIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGZyYW1lVmlldy0+
bGF5b3V0KCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQgY3R4dCh0aGlzKTsKKyAgICBmcmFtZVZp
ZXctPmZyYW1lKCktPnBhaW50Q2FyZXQoJmN0eHQsIDAsIDAsIHVwZGF0ZVJlY3QpOworfQorCit2
b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlICptc2cp
Cit7CisgICAgLy8gRklYTUU6IENhcHR1cmUgbW91c2Ugd2hlZWwgbWVzc2FnZXMKKyAgICBCVmll
dzo6TWVzc2FnZVJlY2VpdmVkKG1zZyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1
OjpNb3VzZU1vdmVkKEJQb2ludCB3aGVyZSwgdWludDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlKiBt
ZXNzYWdlKQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmll
dyB8fCAhZnJhbWVWaWV3LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCUG9pbnQg
c2NyZWVuUG9zaXRpb24gPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICAgZnJhbWVWaWV3
LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQo
bWVzc2FnZSwgc2NyZWVuUG9zaXRpb24pKTsKKworICAgIEJWaWV3OjpNb3VzZU1vdmVkKHdoZXJl
LCBjb2RlLCBtZXNzYWdlKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNl
RG93bihCUG9pbnQgd2hlcmUpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+
Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVW
aWV3LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCUG9pbnQgc2NyZWVuUG9zaXRp
b24gPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICAgZnJhbWVWaWV3LT5mcmFtZSgpLT5s
b2FkZXIoKS0+cmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOworCisgICAg
aW50MzIgYnV0dG9ucyA9IG1lc3NhZ2UtPkZpbmRJbnQzMigiYnV0dG9ucyIpOworCisgICAgaWYg
KGJ1dHRvbnMgPT0gMikKKyAgICAgICBmcmFtZVZpZXctPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQobWVzc2FnZSwgc2NyZWVu
UG9zaXRpb24pKTsKKyAgICBlbHNlCisgICAgICAgZnJhbWVWaWV3LT5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91c2VFdmVudChtZXNzYWdl
LCBzY3JlZW5Qb3NpdGlvbikpOworCisgICAgQlZpZXc6Ok1vdXNlRG93bih3aGVyZSk7Cit9CisK
K3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZVVwKEJQb2ludCB3aGVyZSkKK3sKKyAg
ICBCTWVzc2FnZSogbWVzc2FnZSA9IExvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlm
ICghbWVzc2FnZSkgCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3
KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3LT5mcmFtZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBCUG9pbnQgc2NyZWVuUG9zaXRpb24gPSBDb252ZXJ0VG9TY3JlZW4od2hl
cmUpOworCisgICAgZnJhbWVWaWV3LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2UsIHNjcmVlblBvc2l0aW9u
KSk7CisKKyAgICBCVmlldzo6TW91c2VVcCh3aGVyZSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0Nh
bnZhc0hhaWt1OjpEb1Njcm9sbChib29sIGlzSG9yaXpvbnRhbCwgZmxvYXQgbXVsdGlwbGllcikK
K3sKKyAgICBwcmludGYoIlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RG9TY3JvbGxcbiIpOworfQor
Cit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5RG93bihjb25zdCBjaGFyKiBieXRlcywg
aW50MzIgbnVtQnl0ZXMpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+Q3Vy
cmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJh
bWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3
LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZyYW1lVmlldy0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChtZXNzYWdl
KSkpCisgICAgICAgIHByaW50ZigiLS0+S2V5RG93bjogbm90IGFycml2ZWRcbiIpOyAgICAKKwor
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzWzBdKSAhPSBzdGF0aWNfY2FzdDxpbnQ+KEJf
VEFCKSkgLy9vdGhlcnM/CisgICAgICAgIEJWaWV3OjpLZXlEb3duKGJ5dGVzLCBudW1CeXRlcyk7
Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpLZXlVcChjb25zdCBjaGFyKiBieXRl
cywgaW50MzIgbnVtQnl0ZXMpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+
Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpIAorICAgICAgICByZXR1cm47CisK
KyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7CisgICAgaWYgKCFmcmFtZVZpZXcgfHwgIWZyYW1l
Vmlldy0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGZyYW1lVmlldy0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChtZXNz
YWdlKSkpCisgICAgICAgIHByaW50ZigiLS0+S2V5VXA6IG5vdCBhcnJpdmVkXG4iKTsgCisKKyAg
ICBpZiAoc3RhdGljX2Nhc3Q8aW50PihieXRlc1swXSkgIT0gc3RhdGljX2Nhc3Q8aW50PihCX1RB
QikpIC8vb3RoZXJzPworICAgICAgICBCVmlldzo6S2V5VXAoYnl0ZXMsIG51bUJ5dGVzKTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OldpbmRvd0FjdGl2YXRlZChib29sIHN0YXRl
KQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAh
ZnJhbWVWaWV3LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFtZVZpZXctPmZy
YW1lKCktPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShzdGF0ZSk7Cit9CisK
Kwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkZyYW1lUmVzaXplZChmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0KQoreworICAgIGlmICghbV9zY3JvbGxWaWV3KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9zY3JvbGxWaWV3LT5jb250ZW50c1dpZHRoKCkgIT0gc3RhdGljX2Nhc3Q8
aW50Pih3aWR0aCArIDEpCisgICAgICAgIHx8IG1fc2Nyb2xsVmlldy0+Y29udGVudHNIZWlnaHQo
KSAhPSBzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCArIDEpKSB7CisgICAgICAgIFdlYkNvcmU6OkZy
YW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9z
Y3JvbGxWaWV3KTsKKyAgICAgICAgaWYgKGZyYW1lVmlldykgeworICAgICAgICAgICAgLy9mcmFt
ZVZpZXctPmZyYW1lKCktPmZvcmNlTGF5b3V0KCk7CisgICAgICAgICAgICAvL2ZyYW1lVmlldy0+
YWRqdXN0Vmlld1NpemUoKTsKKyAgICAgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDY2YWIzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNjcm9sbFZpZXdDYW52YXNIYWlrdV9oCisjZGVmaW5lIFNjcm9sbFZpZXdDYW52YXNIYWlrdV9o
CisKKyNpbmNsdWRlIDxWaWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IFNjcm9sbFZpZXc7CisKKyAgICBjbGFzcyBTY3JvbGxWaWV3Q2FudmFzSGFpa3UgOiBwdWJsaWMg
QlZpZXcgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2Nyb2xsVmlld0NhbnZhc0hhaWt1KFNjcm9s
bFZpZXcqLCBCVmlldyogcGFyZW50LCB1aW50MzIgZmxhZ3MpOworCisgICAgICAgIHZvaWQgU2V0
U2Nyb2xsQmFyTWF4VihmbG9hdCBtYXhWZXJ0aWNhbCkgeyBtX3Njcm9sbEJhck1heFYgPSBtYXhW
ZXJ0aWNhbDsgfQorICAgICAgICB2b2lkIFNldFNjcm9sbEJhck1heEgoZmxvYXQgbWF4SG9yaXpv
bnRhbCkgeyBtX3Njcm9sbEJhck1heEggPSBtYXhIb3Jpem9udGFsOyB9CisKKyAgICAgICAgdm9p
ZCBEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpOworICAgICAgICB2b2lkIE1lc3NhZ2VSZWNlaXZlZChC
TWVzc2FnZSAqbXNnKTsKKyAgICAgICAgdm9pZCBNb3VzZU1vdmVkKEJQb2ludCB3aGVyZSwgdWlu
dDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBNb3VzZURv
d24oQlBvaW50IHdoZXJlKTsKKyAgICAgICAgdm9pZCBNb3VzZVVwKEJQb2ludCB3aGVyZSk7Cisg
ICAgICAgIHZvaWQgS2V5RG93bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpOwor
ICAgICAgICB2b2lkIEtleVVwKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcyk7Cisg
ICAgICAgIHZvaWQgV2luZG93QWN0aXZhdGVkKGJvb2wgc3RhdGUpOworCisgICAgICAgIHZvaWQg
U2V0U2Nyb2xsVmlldyhTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KSB7IG1fc2Nyb2xsVmlldyA9IHNj
cm9sbFZpZXc7IH0KKworICAgICAgICB2b2lkIEZyYW1lUmVzaXplZChmbG9hdCB3LCBmbG9hdCBo
KTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBEb1Njcm9sbChib29sIGlz
SG9yaXpvbnRhbCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAgICAgU2Nyb2xsVmlldyogbV9z
Y3JvbGxWaWV3OworICAgICAgICBmbG9hdCBtX3Njcm9sbEJhck1heEg7CisgICAgICAgIGZsb2F0
IG1fc2Nyb2xsQmFyTWF4VjsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gU2Nyb2xsVmlld0NhbnZhc0hhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9TY3JvbGxWaWV3SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
Y3JvbGxWaWV3SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVh
MTY0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZp
ZXdIYWlrdS5jcHAKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QW5kcmVhIEFuemFuaSAgIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIAor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXdDYW52
YXNIYWlrdS5oIgorI2luY2x1ZGUgIldLU2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5j
bHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxz
dXBwb3J0L0F1dG9sb2NrLmg+CisjaW5jbHVkZSA8U2Nyb2xsVmlldy5oPgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJs
aWMgV0tTY3JvbGxWaWV3IHsKK3B1YmxpYzoKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZShXZWJDb3Jl
OjpTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQorICAgICAgICA6IFdLU2Nyb2xsVmlldygiV2ViQ29y
ZSBTY3JvbGxWaWV3UHJpdmF0ZSIsIG5ldyBTY3JvbGxWaWV3Q2FudmFzSGFpa3UoMCwgMCwgMCks
CisgICAgICAgICAgICAgICAgICAgICAgIEJfRk9MTE9XX05PTkUsIEJfV0lMTF9EUkFXIHwgQl9G
UkFNRV9FVkVOVFMpIC8vQl9GVUxMX1VQREFURV9PTl9SRVNJWkUKKyAgICAgICAgLCBtX3Njcm9s
bFZpZXcoc2Nyb2xsVmlldykKKyAgICAgICAgLCBtX2NvbnRlbnRTaXplKDAsIDApCisgICAgewor
ICAgICAgICBTZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7CisgICAgfQorCisgICAgdm9pZCBB
dHRhY2hlZFRvV2luZG93KCkKKyAgICB7CisgICAgICAgIFJlc2l6ZUJ5KC0oQl9WX1NDUk9MTF9C
QVJfV0lEVEggLSAxKSwgLShCX0hfU0NST0xMX0JBUl9IRUlHSFQgLSAxKSk7CisgICAgICAgIFdL
U2Nyb2xsVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpOworICAgIH0KKworICAgIHZvaWQgS2V5RG93
bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogd2hlbiBTY3JvbGxWaWV3LmggdGFrZXMgdGhlIGZvY3VzIHNob3VsZCBmb2N1cyB0aGUg
dGFyZ2V0KCkuCisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdldCgpLT5L
ZXlEb3duKGJ5dGVzLCBudW1CeXRlcyk7CisgICAgfQorCisgICAgICB2b2lkIEtleVVwKGNvbnN0
IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcykKKyAgICB7CisgICAgICAgIC8vc2VlIGNvbW1l
bnQgYWJvdmUuCisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdldCgpLT5L
ZXlVcChieXRlcywgbnVtQnl0ZXMpOworICAgIH0KKworICAgICAgQlJlY3QgVmlzaWJsZUZyYW1l
KCkKKyAgICB7CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBUYXJn
ZXQoKS0+Qm91bmRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBCb3VuZHMo
KTsKKyAgICB9CisKKyAgICB2b2lkIFNldENvbnRlbnRTaXplKEJTaXplIHNpemUpCisgICAgewor
ICAgICAgICBtX2NvbnRlbnRTaXplID0gc2l6ZTsKKyAgICB9CisKKyAgICBCU2l6ZSBDb250ZW50
U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZW50U2l6ZTsKKyAgICB9CisKKyAg
ICBmbG9hdCBDb250ZW50V2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGVudFNp
emUud2lkdGg7CisgICAgfQorCisgICAgZmxvYXQgQ29udGVudEhlaWdodCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9jb250ZW50U2l6ZS5oZWlnaHQ7CisgICAgfQorCisgICAgQlBvaW50IFNj
cm9sbE9mZnNldCgpCisgICAgeworICAgICAgICBpZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gVGFyZ2V0KCktPkxlZnRUb3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0
dXJuIEJQb2ludCgwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIFNjcm9sbEJ5KGZsb2F0IGR4LCBm
bG9hdCBkeSkKKyAgICB7CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdl
dCgpLT5TY3JvbGxCeShkeCwgZHkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpT
Y3JvbGxWaWV3KiBtX3Njcm9sbFZpZXc7CisgICAgQlNpemUgbV9jb250ZW50U2l6ZTsKK307CisK
K3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX2RhdGEgPSBuZXcgU2Ny
b2xsVmlld1ByaXZhdGUodGhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0
cm95KCkKK3sKKyAgICBkZWxldGUgbV9kYXRhOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBs
YXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0
YS0+VmlzaWJsZUZyYW1lKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3Jv
bGxiYXJNb2RlcygpCit7CisgICAgaWYgKG1fZGF0YS0+U2Nyb2xsQmFyTW9kZShCX0hPUklaT05U
QUwpICE9IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpCisgICAgICAgIG1fZGF0YS0+U2V0U2Ny
b2xsQmFyTW9kZShCX0hPUklaT05UQUwsIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpOworCisg
ICAgaWYgKG1fZGF0YS0+U2Nyb2xsQmFyTW9kZShCX1ZFUlRJQ0FMKSAhPSB2ZXJ0aWNhbFNjcm9s
bGJhck1vZGUoKSkKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUws
IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9y
bVNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUmIGhvcml6b250YWwsIFNjcm9sbGJhck1vZGUm
IHZlcnRpY2FsKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzdGlsbCBwcm9ibGVtcyB3aXRoIGRp
ZmZlcmVudCBzY3JvbGxiYXIgbW9kZXMuCisgICAgI2lmIDAKKworICAgIGlmICghbV9kYXRhKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGhvcml6b250YWwpIHsKKyAgICBjYXNlIFNj
cm9sbGJhckF1dG86CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05U
QUwsIFNjcm9sbGJhckF1dG8pOyAgICAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxi
YXJBbHdheXNPbjoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRB
TCwgU2Nyb2xsYmFyQWx3YXlzT24pOyAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxi
YXJBbHdheXNPZmY6CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05U
QUwsIFNjcm9sbGJhckFsd2F5c09mZik7IAorICAgICAgICBicmVhazsgICAgCisgICAgfQorCisg
ICAgc3dpdGNoICh2ZXJ0aWNhbCkgeworICAgIGNhc2UgU2Nyb2xsYmFyQXV0bzoKKyAgICAgICAg
bV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckF1dG8pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbGJhckFsd2F5c09uOgorICAgICAgICBtX2RhdGEt
PlNldFNjcm9sbEJhck1vZGUoQl9WRVJUSUNBTCwgU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNjcm9sbGJhckFsd2F5c09mZjoKKyAgICAgICAgbV9kYXRhLT5T
ZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckFsd2F5c09mZik7CisgICAgICAg
IGJyZWFrOyAgICAKKyAgICB9CisKKyAgICAjZW5kaWYKK30KKwordm9pZCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUFkZENoaWxkKFdpZGdldCogY2hpbGQpCit7CisgICAgQlZpZXcqIHRhcmdldCA9IG1f
ZGF0YS0+VGFyZ2V0KCk7CisgICAgaWYgKHRhcmdldCkKKyAgICAgICAgY2hpbGQtPnNldFBsYXRm
b3JtV2lkZ2V0KHRhcmdldCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZW1vdmVD
aGlsZChXaWRnZXQqIGNoaWxkKQoreyAKKyAgICBCVmlldyogdGFyZ2V0ID0gbV9kYXRhLT5UYXJn
ZXQoKTsKKworICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5Mb2NrTG9vcGVyKCkpIHsKKyAgICAg
ICAgY2hpbGQtPnBsYXRmb3JtV2lkZ2V0KCktPlJlbW92ZVNlbGYoKTsKKyAgICAgICAgdGFyZ2V0
LT5VbmxvY2tMb29wZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1T
ZXRDb250ZW50c1NpemUoKQoreworICAgIC8vc2Nyb2xsYmFyIGZpeDoKKyAgICAvLyBtX2RhdGEt
PlNjcm9sbEJhcihCX0hPUklaT05UQUwpLT5TZXRSYW5nZSgwLCB3IC0gd2lkdGgoKSAtMSArIEJf
Vl9TQ1JPTExfQkFSX1dJRFRIKTsKKyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihCX0hPUklaT05U
QUwpLT5TZXRQcm9wb3J0aW9uKHdpZHRoKCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4ody0xKSk7CisK
KyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihCX1ZFUlRJQ0FMKS0+U2V0UmFuZ2UoMCwgaCAtIGhl
aWdodCgpIC0xICsgQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsKKyAgICAvLyBtX2RhdGEtPlNjcm9s
bEJhcihCX1ZFUlRJQ0FMKS0+U2V0UHJvcG9ydGlvbihoZWlnaHQoKSAvIHN0YXRpY19jYXN0PGZs
b2F0PihoLTEpKTsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzU2l6
ZSgpIGNvbnN0Cit7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKyAg
ICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgICAgICBCU2l6ZSBmcmFtZSA9IHBsYXRmb3Jt
V2lkZ2V0KCktPlByZWZlcnJlZFNpemUoKTsKKyAgICAgICAgd2lkdGggPSBmcmFtZS5JbnRlZ2Vy
V2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gZnJhbWUuSW50ZWdlckhlaWdodCgpOworICAgICAg
ICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgfQorICAgIHJldHVybiBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVu
dFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKK3sKKyAgICBp
ZiAoIXVwZGF0ZVJlY3Qud2lkdGgoKSB8fCAhdXBkYXRlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQlJlY3QgdXBkYXRlKHVwZGF0ZVJlY3QpOworICAgIEJWaWV3KiB0YXJn
ZXQgPSBtX2RhdGEtPlRhcmdldCgpOworCisgICAgaWYgKCF1cGRhdGUuSXNWYWxpZCgpIHx8ICF0
YXJnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIHVwZGF0ZSA9IHVwZGF0ZSAmIG1fZGF0YS0+
VmlzaWJsZUZyYW1lKCk7CisgICAgdGFyZ2V0LT5JbnZhbGlkYXRlKHVwZGF0ZSk7CisKKyAgICBp
ZiAobm93KQorICAgICAgICAgICB0YXJnZXQtPlN5bmMoKTsKKyAgICBlbHNlCisgICAgICAgICAg
IHRhcmdldC0+Rmx1c2goKTsKK30KKworSW50UG9pbnQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3Jl
ZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RQorICAgIHJldHVybiBwb2ludDsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUNv
bnRlbnRzVG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RQorICAgIHJldHVybiByZWN0OworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q2Fu
QmxpdE9uU2Nyb2xsKGJvb2wgZmxhZykKK3sKKyAgICBpZiAoIW1fZGF0YSB8fCAhbV9kYXRhLT5U
YXJnZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2RhdGEtPlZpZXdDb2xv
cigpID09IEJfVFJBTlNQQVJFTlRfQ09MT1IgJiYgIWZsYWcpIHsKKyAgICAgICAgbV9kYXRhLT5T
ZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNl
dFZpZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52
YWxpZGF0ZSgpOworICAgIH0gZWxzZSBpZiAobV9kYXRhLT5WaWV3Q29sb3IoKSAhPSBCX1RSQU5T
UEFSRU5UX0NPTE9SICYmIGZsYWcpIHsKKyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoQl9U
UkFOU1BBUkVOVF9DT0xPUik7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNldFZpZXdDb2xv
cihCX1RSQU5TUEFSRU5UX0NPTE9SKTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52YWxp
ZGF0ZSgpOworICAgIH0KKworLy8gICAgaWYoZmxhZykKKy8vICAgICAgICBtX2RhdGEtPlNldFZp
ZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBtX2RhdGEtPlNl
dFZpZXdDb2xvcihCX1RSQU5TUEFSRU5UX0NPTE9SKTsKK30KKworYm9vbCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUNhbkJsaXRPblNjcm9sbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+Vmll
d0NvbG9yKCkgPT0gQl9UUkFOU1BBUkVOVF9DT0xPUjsKK30KKworYm9vbCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUlzT2Zmc2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXBsYXRmb3JtV2lkZ2V0
KCkgfHwgIXBsYXRmb3JtV2lkZ2V0KCktPklzSGlkZGVuKCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmll
dzo6cGxhdGZvcm1TY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTY3Jv
bGxWaWV3OjpzZXRBbGxvd3NTY3JvbGxpbmcoYm9vbCBhbGxvd3MpCit7CisgICAgLy9kaXNhYmxl
IHNjcm9sbGJhcnMgb3IgaGlkZSBzY3JvbGxiYXJzPworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9s
bFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzQzMTgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAK
QEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1LCBBeGVsIETDtnJm
bGVyLCBheGVsZEBwaW5jLXNvZnR3YXJlLmRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlIDxM
YXlvdXRVdGlscy5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxXaW5kb3cuaD4K
KworCitXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmlldyhjb25zdCBjaGFyKiBuYW1lLCBCVmlldyog
dGFyZ2V0LCB1aW50MzIgcmVzaXppbmdNb2RlLCB1aW50MzIgZmxhZ3MpCisgICAgOiBCVmlldyhD
YWxjRnJhbWUodGFyZ2V0LCB0cnVlLCB0cnVlKSwgbmFtZSwgcmVzaXppbmdNb2RlLCBNb2RpZnlG
bGFncyhmbGFncykpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX2hvcml6b250YWxT
Y3JvbGxCYXIoMCkKKyAgICAsIG1fdmVydGljYWxTY3JvbGxCYXIoMCkKKyAgICAsIG1faGlnaGxp
Z2h0ZWQoZmFsc2UpCisgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsQmFyTW9kZShTY3JvbGxiYXJBbHdh
eXNPbikKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbEJhck1vZGUoU2Nyb2xsYmFyQWx3YXlzT24p
ICAgIAoreworICAgIGJvb2wgaG9yaXpvbnRhbCA9IHRydWU7CisgICAgYm9vbCB2ZXJ0aWNhbCA9
IHRydWU7CisgICAgCisgICAgQlJlY3QgdGFyZ2V0RnJhbWU7CisgICAgaWYgKG1fdGFyZ2V0KSB7
CisgICAgICAgLy8gbGF5b3V0IHRhcmdldCBhbmQgYWRkIGl0CisgICAgICAgLy9tX3RhcmdldC0+
VGFyZ2V0ZWRCeVNjcm9sbFZpZXcodGhpcyk7CisgICAgICAgbV90YXJnZXQtPk1vdmVUbyhCX09S
SUdJTik7CisgICAgICAgIAorICAgICAgIEFkZENoaWxkKG1fdGFyZ2V0KTsKKyAgICAgICB0YXJn
ZXRGcmFtZSA9IG1fdGFyZ2V0LT5GcmFtZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgLy8gbm8g
dGFyZ2V0IHNwZWNpZmllZAorICAgICAgIHRhcmdldEZyYW1lID0gQm91bmRzKCk7CisgICAgICAg
aWYgKGhvcml6b250YWwpCisgICAgICAgICAgIHRhcmdldEZyYW1lLmJvdHRvbSAtPSBCX0hfU0NS
T0xMX0JBUl9IRUlHSFQgKyAxOworICAgICAgIGlmICh2ZXJ0aWNhbCkKKyAgICAgICAgICAgdGFy
Z2V0RnJhbWUucmlnaHQgLT0gQl9WX1NDUk9MTF9CQVJfV0lEVEggKyAxOworICAgIH0KKyAgICAK
KyAgICBpZiAoaG9yaXpvbnRhbCkgeworICAgICAgIEJSZWN0IHJlY3QgPSB0YXJnZXRGcmFtZTsK
KyAgICAgICByZWN0LnRvcCA9IHJlY3QuYm90dG9tICsgMTsKKyAgICAgICByZWN0LmJvdHRvbSA9
IHJlY3QudG9wICsgQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbEJhciA9IG5ldyBCU2Nyb2xsQmFyKHJlY3QsICJfSFNCXyIsIG1fdGFyZ2V0LCAwLCAxMDAw
LCBCX0hPUklaT05UQUwpOworICAgICAgIEFkZENoaWxkKG1faG9yaXpvbnRhbFNjcm9sbEJhcik7
CisgICAgfQorICAgIAorICAgIGlmICh2ZXJ0aWNhbCkgeworICAgICAgIEJSZWN0IHJlY3QgPSB0
YXJnZXRGcmFtZTsKKyAgICAgICByZWN0LmxlZnQgPSByZWN0LnJpZ2h0ICsgMTsKKyAgICAgICBy
ZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgQl9WX1NDUk9MTF9CQVJfV0lEVEg7CisgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbEJhciA9IG5ldyBCU2Nyb2xsQmFyKHJlY3QsICJfVlNCXyIsIG1fdGFyZ2V0
LCAwLCAxMDAwLCBCX1ZFUlRJQ0FMKTsKKyAgICAgICBBZGRDaGlsZChtX3ZlcnRpY2FsU2Nyb2xs
QmFyKTsKKyAgICB9CisgICAgCisgICAgbV9wcmV2aW91c1dpZHRoID0gdWludDE2KEJvdW5kcygp
LldpZHRoKCkpOworICAgIG1fcHJldmlvdXNIZWlnaHQgPSB1aW50MTYoQm91bmRzKCkuSGVpZ2h0
KCkpOworfQorCitXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmlldyhCTWVzc2FnZSogYXJjaGl2ZSkK
KyAgICA6IEJWaWV3KGFyY2hpdmUpCisgICAgLCBtX2hpZ2hsaWdodGVkKGZhbHNlKQoreworICAg
IC8vIEluIGEgc2hhbGxvdyBhcmNoaXZlLCB3ZSBtYXkgbm90IGhhdmUgYSB0YXJnZXQgYW55bW9y
ZS4gV2UgbXVzdAorICAgIC8vIGJlIHByZXBhcmVkIGZvciB0aGlzIGNhc2UKKyAgICAKKyAgICAv
LyBkb24ndCBjb25mdXNlIG91ciBzY3JvbGwgYmFycyB3aXRoIG91ciAoZXZlbnR1YWwpIHRhcmdl
dAorICAgIGludDMyIGZpcnN0QmFyID0gMDsKKyAgICBpZiAoIWFyY2hpdmUtPkZpbmRCb29sKCJf
bm9fdGFyZ2V0XyIpKSB7CisgICAgICAgbV90YXJnZXQgPSBDaGlsZEF0KDApOworICAgICAgIGZp
cnN0QmFyKys7CisgICAgfSBlbHNlCisgICAgICAgbV90YXJnZXQgPSAwOworICAgIAorICAgIC8v
IHNlYXJjaCBmb3Igb3VyIHNjcm9sbCBiYXJzCisgICAgCisgICAgbV9ob3Jpem9udGFsU2Nyb2xs
QmFyID0gMDsKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsQmFyID0gMDsKKyAgICAKKyAgICBCVmlldyog
dmlldzsKKyAgICB3aGlsZSAoKHZpZXcgPSBDaGlsZEF0KGZpcnN0QmFyKyspKSkgeworICAgICAg
IEJTY3JvbGxCYXIqIGJhciA9IGR5bmFtaWNfY2FzdDxCU2Nyb2xsQmFyKj4odmlldyk7CisgICAg
ICAgaWYgKCFiYXIpCisgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgIAorICAgICAgIGlmIChi
YXItPk9yaWVudGF0aW9uKCkgPT0gQl9IT1JJWk9OVEFMKQorICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxCYXIgPSBiYXI7CisgICAgICAgZWxzZSBpZiAoYmFyLT5PcmllbnRhdGlvbigpID09
IEJfVkVSVElDQUwpCisgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXIgPSBiYXI7CisgICAg
fQorICAgIAorICAgIG1fcHJldmlvdXNXaWR0aCA9IHVpbnQxNihCb3VuZHMoKS5XaWR0aCgpKTsK
KyAgICBtX3ByZXZpb3VzSGVpZ2h0ID0gdWludDE2KEJvdW5kcygpLkhlaWdodCgpKTsKK30KKwor
V0tTY3JvbGxWaWV3Ojp+V0tTY3JvbGxWaWV3KCkKK3sKK30KKworQkFyY2hpdmFibGUqIFdLU2Ny
b2xsVmlldzo6SW5zdGFudGlhdGUoQk1lc3NhZ2UqIGFyY2hpdmUpCit7CisgICAgaWYgKHZhbGlk
YXRlX2luc3RhbnRpYXRpb24oYXJjaGl2ZSwgIldLU2Nyb2xsVmlldyIpKQorICAgICAgIHJldHVy
biBuZXcgV0tTY3JvbGxWaWV3KGFyY2hpdmUpOworICAgIAorICAgIHJldHVybiAwOworfQorCitz
dGF0dXNfdCBXS1Njcm9sbFZpZXc6OkFyY2hpdmUoQk1lc3NhZ2UqIGFyY2hpdmUsIGJvb2wgZGVl
cCkgY29uc3QKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBCVmlldzo6QXJjaGl2ZShhcmNoaXZl
LCBkZWVwKTsKKyAgICBpZiAoc3RhdHVzICE9IEJfT0spCisgICAgICAgcmV0dXJuIHN0YXR1czsK
KyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgZGVlcCBhcmNoaXZlLCB0aGUgQlZpZXcgY2xhc3Mg
d2lsbCB0YWtlIGNhcmUKKyAgICAvLyBvZiBvdXIgY2hpbGRyZW4uCisgICAgCisgICAgaWYgKHN0
YXR1cyA9PSBCX09LICYmICFtX3RhcmdldCkKKyAgICAgICBzdGF0dXMgPSBhcmNoaXZlLT5BZGRC
b29sKCJfbm9fdGFyZ2V0XyIsIHRydWUpOworICAgIAorICAgIC8vIFRoZSBoaWdobGlnaHRlZCBz
dGF0ZSBpcyBub3QgYXJjaGl2ZWQsIGJ1dCBzaW5jZSBpdCBpcworICAgIC8vIHVzdWFsbHkgKG9y
IHNob3VsZCBiZSkgdXNlZCB0byBpbmRpY2F0ZSBmb2N1cywgdGhpcworICAgIC8vIGlzIHByb2Jh
Ymx5IHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgICAKKyAgICByZXR1cm4gc3RhdHVzOworfQor
Cit2b2lkIFdLU2Nyb2xsVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpCit7CisgICAgQlZpZXc6OkF0
dGFjaGVkVG9XaW5kb3coKTsKKyAgICAKKyAgICBpZiAoKCFtX2hvcml6b250YWxTY3JvbGxCYXIg
JiYgIW1fdmVydGljYWxTY3JvbGxCYXIpCisgICAgICAgfHwgKG1faG9yaXpvbnRhbFNjcm9sbEJh
ciAmJiBtX3ZlcnRpY2FsU2Nyb2xsQmFyKQorICAgICAgIHx8IFdpbmRvdygpLT5Mb29rKCkgIT0g
Ql9ET0NVTUVOVF9XSU5ET1dfTE9PSykKKyAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYg
d2UgaGF2ZSBvbmx5IG9uZSBiYXIsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgYXJlIGluIHRoZQor
ICAgIC8vIGJvdHRvbSByaWdodCBlZGdlIG9mIGEgd2luZG93IHdpdGggdGhlIEJfRE9DVU1FTlRf
TE9PSyB0bworICAgIC8vIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgYmFyIHRvIGFja25vd2xlZGdl
IHRoZSByZXNpemUga25vYi4KKyAgICAKKyAgICBCUmVjdCBib3VuZHMgPSBDb252ZXJ0VG9TY3Jl
ZW4oQm91bmRzKCkpOworICAgIEJSZWN0IHdpbmRvd0JvdW5kcyA9IFdpbmRvdygpLT5GcmFtZSgp
OworICAgIAorICAgIAorICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxCYXIpCisgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsQmFyLT5SZXNpemVCeSgtQl9WX1NDUk9MTF9CQVJfV0lEVEgsIDApOwor
ICAgIGVsc2UgaWYgKG1fdmVydGljYWxTY3JvbGxCYXIpCisgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bEJhci0+UmVzaXplQnkoMCwgLUJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7Cit9CisKK3ZvaWQgV0tT
Y3JvbGxWaWV3OjpEZXRhY2hlZEZyb21XaW5kb3coKQoreworICAgIEJWaWV3OjpEZXRhY2hlZEZy
b21XaW5kb3coKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OkFsbEF0dGFjaGVkKCkKK3sKKyAg
ICBCVmlldzo6QWxsQXR0YWNoZWQoKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OkFsbERldGFj
aGVkKCkKK3sKKyAgICBCVmlldzo6QWxsRGV0YWNoZWQoKTsKK30KKworQlNjcm9sbEJhciogV0tT
Y3JvbGxWaWV3OjpTY3JvbGxCYXIob3JpZW50YXRpb24gcG9zdHVyZSkgY29uc3QKK3sKKyAgICBp
ZiAocG9zdHVyZSA9PSBCX0hPUklaT05UQUwpCisgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNj
cm9sbEJhcjsKKyAgICAKKyAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbEJhcjsKK30KKworU2Ny
b2xsYmFyTW9kZSBXS1Njcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVy
ZSkKK3sKKyAgICAvLyByZXR1cm4gU2Nyb2xsYmFyQXV0bzsKKyAgICAKKyAgICBpZiAocG9zdHVy
ZSA9PSBCX0hPUklaT05UQUwpIHsKKyAgICAgICAvL3ByaW50ZigiKysrKyBIIGdldCAlZFxuIiwg
bV9ob3Jpem9udGFsU2Nyb2xsQmFyTW9kZSk7CisgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNj
cm9sbEJhck1vZGU7CisgICAgfQorICAgIAorICAgIC8vcHJpbnRmKCIrKysrIFYgZ2V0ICVkXG4i
LCBtX3ZlcnRpY2FsU2Nyb2xsQmFyTW9kZSk7ICAgCisgICAgcmV0dXJuIG1fdmVydGljYWxTY3Jv
bGxCYXJNb2RlOyAgIAorfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6U2V0U2Nyb2xsQmFyTW9kZShv
cmllbnRhdGlvbiBwb3N0dXJlLCBTY3JvbGxiYXJNb2RlIG1vZGUpCit7CisgICAgaWYgKHBvc3R1
cmUgPT0gQl9IT1JJWk9OVEFMICYmIG1vZGUgIT0gbV9ob3Jpem9udGFsU2Nyb2xsQmFyTW9kZSkg
eworICAgICAgICAKKyAgICAgICAvL3ByaW50ZigiKysrKyBIIGN1cnJlbnQgJWxkIHdhbnQgJWxk
XG4iLG1faG9yaXpvbnRhbFNjcm9sbEJhck1vZGUsbW9kZSk7CisgICAgICAgIAorICAgICAgIGlm
IChtb2RlID09IFNjcm9sbGJhckFsd2F5c09uIHx8IG1vZGUgPT0gU2Nyb2xsYmFyQXV0bykgewor
ICAgICAgICAgICAvL3ByaW50ZigiKysrKysgSCBTaG93KCVkKVxuIiwgKGludCl0aGlzKTsKKyAg
ICAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbEJhci0+SXNIaWRkZW4oKSkgeworICAgICAg
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsQmFyLT5TaG93KCk7CisgICAgICAgICAgICAgICBp
ZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICAgICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KDAsIC1C
X0hfU0NST0xMX0JBUl9IRUlHSFQpOworICAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlm
IChtb2RlID09IFNjcm9sbGJhckFsd2F5c09mZikgeworICAgICAgICAgICAvL3ByaW50ZigiKysr
KysgSCBIaWRlKCVkKVxuIiwgKGludCl0aGlzKTsgICAgICAgIAorICAgICAgICAgICBpZiAoIW1f
aG9yaXpvbnRhbFNjcm9sbEJhci0+SXNIaWRkZW4oKSkgeworICAgICAgICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsQmFyLT5IaWRlKCk7CisgICAgICAgICAgICAgICBpZiAoVGFyZ2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KDAsIEJfSF9TQ1JPTExfQkFSX0hF
SUdIVCk7CisgICAgICAgICAgIH0KKyAgICAgICB9ICAgIAorICAgICAgIAorICAgICAgIC8vc2V0
IHRoZSBuZXcgbW9kZS4KKyAgICAgICBtX2hvcml6b250YWxTY3JvbGxCYXJNb2RlID0gbW9kZTsg
ICAgCisgICAgfSAKKyAgICAKKyAgICAKKyAgICAKKyAgICBpZiAocG9zdHVyZSA9PSBCX1ZFUlRJ
Q0FMICYmIG1vZGUgIT0gbV92ZXJ0aWNhbFNjcm9sbEJhck1vZGUpIHsKKyAgICAgICAvL3ByaW50
ZigiKysrKyBWIGN1cnJlbnQgJWxkIHdhbnQgJWxkXG4iLCBtX3ZlcnRpY2FsU2Nyb2xsQmFyTW9k
ZSwgbW9kZSk7CisgICAgICAgIAorICAgICAgIGlmIChtb2RlID09IFNjcm9sbGJhckFsd2F5c09u
IHx8IG1vZGUgPT0gU2Nyb2xsYmFyQXV0bykgeworICAgICAgICAgICAvL3ByaW50ZigiKysrKysg
ViBTaG93KCVkKVxuIiwgKGludCl0aGlzKTsKKyAgICAgICAgICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxCYXItPklzSGlkZGVuKCkpIHsKKyAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXIt
PlNob3coKTsKKyAgICAgICAgICAgICAgIGlmIChUYXJnZXQoKSkgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICBUYXJnZXQoKS0+UmVzaXplQnkoLUJfVl9TQ1JPTExfQkFSX1dJRFRILCAw
KTsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAobW9kZSA9PSBTY3JvbGxiYXJB
bHdheXNPZmYpIHsgICAgICAgIAorICAgICAgICAgICAvL3ByaW50ZigiKysrKysgViBIaWRlKCVk
KVxuIiwgKGludCl0aGlzKTsKKyAgICAgICAgICAgaWYgKCFtX3ZlcnRpY2FsU2Nyb2xsQmFyLT5J
c0hpZGRlbigpKSB7CisgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsQmFyLT5IaWRlKCk7
CisgICAgICAgICAgICAgICBpZiAoVGFyZ2V0KCkpICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KEJfVl9TQ1JPTExfQkFSX1dJRFRILCAwKTsKKyAgICAg
ICAgICAgfQorICAgICAgIH0gICAgCisgICAgICAgCisgICAgICAgLy9zZXQgdGhlIG5ldyBtb2Rl
OgorICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXJNb2RlID0gbW9kZTsgICAgICAgICAgICAKKyAg
ICB9IAorICAgIAorfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6U2V0VGFyZ2V0KEJWaWV3KiB0YXJn
ZXQpCit7CisgICAgaWYgKG1fdGFyZ2V0ID09IHRhcmdldCkKKyAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKG1fdGFyZ2V0KSB7CisgICAgICAgbV90YXJnZXQtPlRhcmdldGVkQnlTY3JvbGxW
aWV3KDApOworICAgICAgIFJlbW92ZUNoaWxkKG1fdGFyZ2V0KTsKKyAgICAgICAgCisgICAgICAg
Ly8gd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBkZWxldGUgdGhlIHZpZXcKKyAgICB9CisgICAgCisg
ICAgbV90YXJnZXQgPSB0YXJnZXQ7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbEJhcikKKyAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxCYXItPlNldFRhcmdldCh0YXJnZXQpOworICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsQmFyKQorICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXItPlNldFRhcmdl
dCh0YXJnZXQpOworICAgIAorICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAvL3RhcmdldC0+VGFy
Z2V0ZWRCeVNjcm9sbFZpZXcodGhpcyk7CisgICAgICAgIAorICAgICAgIEFkZENoaWxkKHRhcmdl
dCwgQ2hpbGRBdCgwKSk7CisgICAgICAgIC8vIFRoaXMgd2F5LCB3ZSBhcmUgbWFraW5nIHN1cmUg
dGhhdCB0aGUgdGFyZ2V0IHdpbGwKKyAgICAgICAgLy8gYmUgYWRkZWQgdG9wIG1vc3QgaW4gdGhl
IGxpc3QgKHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICAvLyBmb3IgdW5hcmNoaXZpbmcpCisg
ICAgfQorfQorCitCVmlldyogV0tTY3JvbGxWaWV3OjpUYXJnZXQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3RhcmdldDsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6Ok1lc3NhZ2VSZWNlaXZlZChC
TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UtPndoYXQpIHsKKyAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICBCVmlldzo6TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UpOwor
ICAgIH0KK30KKwordm9pZCBXS1Njcm9sbFZpZXc6Ok1vdXNlRG93bihCUG9pbnQgcG9pbnQpCit7
CisgICAgQlZpZXc6Ok1vdXNlRG93bihwb2ludCk7Cit9CisKK3ZvaWQgV0tTY3JvbGxWaWV3OjpN
b3VzZVVwKEJQb2ludCBwb2ludCkKK3sKKyAgICBCVmlldzo6TW91c2VVcChwb2ludCk7Cit9CisK
K3ZvaWQgV0tTY3JvbGxWaWV3OjpNb3VzZU1vdmVkKEJQb2ludCBwb2ludCwgdWludDMyIGNvZGUs
IGNvbnN0IEJNZXNzYWdlKiBkcmFnTWVzc2FnZSkKK3sKKyAgICBCVmlldzo6TW91c2VNb3ZlZChw
b2ludCwgY29kZSwgZHJhZ01lc3NhZ2UpOworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6RnJhbWVN
b3ZlZChCUG9pbnQgcG9zaXRpb24pCit7CisgICAgQlZpZXc6OkZyYW1lTW92ZWQocG9zaXRpb24p
OworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6UmVzaXplVG9QcmVmZXJyZWQoKQoreworICAgIEJW
aWV3OjpSZXNpemVUb1ByZWZlcnJlZCgpOworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6R2V0UHJl
ZmVycmVkU2l6ZShmbG9hdCogX3dpZHRoLCBmbG9hdCogX2hlaWdodCkKK3sKKyAgICBCUmVjdCBm
cmFtZSA9IENhbGNGcmFtZShtX3RhcmdldCwgbV9ob3Jpem9udGFsU2Nyb2xsQmFyLCBtX3ZlcnRp
Y2FsU2Nyb2xsQmFyKTsKKyAgICAKKyAgICBpZiAobV90YXJnZXQpIHsKKyAgICAgICBmbG9hdCB3
aWR0aCwgaGVpZ2h0OworICAgICAgIG1fdGFyZ2V0LT5HZXRQcmVmZXJyZWRTaXplKCZ3aWR0aCwg
JmhlaWdodCk7CisgICAgICAgIAorICAgICAgIGZyYW1lLnJpZ2h0ICs9IHdpZHRoIC0gbV90YXJn
ZXQtPkZyYW1lKCkuV2lkdGgoKTsKKyAgICAgICBmcmFtZS5ib3R0b20gKz0gaGVpZ2h0IC0gbV90
YXJnZXQtPkZyYW1lKCkuSGVpZ2h0KCk7CisgICAgfQorICAgIAorICAgIGlmIChfd2lkdGgpCisg
ICAgICAgKl93aWR0aCA9IGZyYW1lLldpZHRoKCk7CisgICAgaWYgKF9oZWlnaHQpCisgICAgICAg
Kl9oZWlnaHQgPSBmcmFtZS5IZWlnaHQoKTsKK30KKworCisvKiogVGhpcyBzdGF0aWMgbWV0aG9k
IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBmcmFtZSB0aGF0IHRoZQorICogICAgU2Nyb2xsVmll
dyB3aWxsIGNvdmVyIGRlcGVuZGluZyBvbiB0aGUgZnJhbWUgb2YgaXRzIHRhcmdldAorICogICAg
CisgKiAgICBJdCBpcyB1c2VkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgYXQgb3RoZXIgcGxhY2Vz
LgorICovCisKK0JSZWN0IFdLU2Nyb2xsVmlldzo6Q2FsY0ZyYW1lKEJWaWV3KiB0YXJnZXQsIGJv
b2wgaG9yaXpvbnRhbCwgYm9vbCB2ZXJ0aWNhbCkKK3sKKyAgICBCUmVjdCBmcmFtZSA9IHRhcmdl
dCA/IHRhcmdldC0+RnJhbWUoKSA6IEJSZWN0KDAsIDAsIDgwLCA4MCk7CisgICAgCisgICAgaWYg
KHZlcnRpY2FsKQorICAgICAgIGZyYW1lLnJpZ2h0ICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOwor
ICAgIGlmIChob3Jpem9udGFsKQorICAgICAgIGZyYW1lLmJvdHRvbSArPSBCX0hfU0NST0xMX0JB
Ul9IRUlHSFQ7CisKKyAgICBpZiAodmVydGljYWwpCisgICAgICAgIGZyYW1lLnJpZ2h0Kys7Cisg
ICAgaWYgKGhvcml6b250YWwpCisgICAgICAgIGZyYW1lLmJvdHRvbSsrOworICAgIAorICAgIHJl
dHVybiBmcmFtZTsKK30KKworCisvKiogVGhpcyBtZXRob2QgY2hhbmdlcyB0aGUgImZsYWdzIiBh
cmd1bWVudCBhcyBwYXNzZWQgb24gdG8KKyAqICAgIHRoZSBCVmlldyBjb25zdHJ1Y3Rvci4KKyAq
LworCitpbnQzMiBXS1Njcm9sbFZpZXc6Ok1vZGlmeUZsYWdzKGludDMyIGZsYWdzKQoreworICAg
IHJldHVybiBmbGFncyAmIH4oQl9XSUxMX0RSQVcgfCBCX0ZSQU1FX0VWRU5UUyB8IEJfRlVMTF9V
UERBVEVfT05fUkVTSVpFKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OldpbmRvd0FjdGl2YXRl
ZChib29sIGFjdGl2ZSkKK3sKKyAgICBpZiAobV9oaWdobGlnaHRlZCkKKyAgICAgICBJbnZhbGlk
YXRlKCk7CisgICAgCisgICAgQlZpZXc6OldpbmRvd0FjdGl2YXRlZChhY3RpdmUpOworfQorCit2
b2lkIFdLU2Nyb2xsVmlldzo6TWFrZUZvY3VzKGJvb2wgc3RhdGUpCit7CisgICAgQlZpZXc6Ok1h
a2VGb2N1cyhzdGF0ZSk7Cit9CisKK0JIYW5kbGVyKiBXS1Njcm9sbFZpZXc6OlJlc29sdmVTcGVj
aWZpZXIoQk1lc3NhZ2UqIG1zZywgaW50MzIgaW5kZXgsIEJNZXNzYWdlKiBzcGVjaWZpZXIsIGlu
dDMyIGZvcm0sIGNvbnN0IGNoYXIqIHByb3BlcnR5KQoreworICAgIHJldHVybiBCVmlldzo6UmVz
b2x2ZVNwZWNpZmllcihtc2csIGluZGV4LCBzcGVjaWZpZXIsIGZvcm0sIHByb3BlcnR5KTsKK30K
Kworc3RhdHVzX3QgV0tTY3JvbGxWaWV3OjpHZXRTdXBwb3J0ZWRTdWl0ZXMoQk1lc3NhZ2UqIGRh
dGEpCit7CisgICAgcmV0dXJuIEJWaWV3OjpHZXRTdXBwb3J0ZWRTdWl0ZXMoZGF0YSk7Cit9CisK
K0JTaXplIFdLU2Nyb2xsVmlldzo6TWluU2l6ZSgpCit7CisgICAgLy8gVE9ETzogVGhpcyBpcyBu
b3QgeWV0IGNvcnJlY3QuCisgICAgQlNpemUgc2l6ZSA9IChtX3RhcmdldCA/IGZUYXJnZXQtPk1p
blNpemUoKSA6IEJTaXplKC0xLCAtMSkpOworICAgIAorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
QmFyKQorICAgICAgIHNpemUud2lkdGggKz0gQl9WX1NDUk9MTF9CQVJfV0lEVEg7CisgICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbEJhcikKKyAgICAgICBzaXplLmhlaWdodCArPSBCX0hfU0NST0xM
X0JBUl9IRUlHSFQ7CisgICAgCisgICAgcmV0dXJuIEJMYXlvdXRVdGlsczo6Q29tcG9zZVNpemUo
RXhwbGljaXRNaW5TaXplKCksIHNpemUpOworfQorCitCU2l6ZSBXS1Njcm9sbFZpZXc6OlByZWZl
cnJlZFNpemUoKQoreworICAgIC8vIFRPRE86IFRoaXMgaXMgbm90IHlldCBjb3JyZWN0LgorICAg
IEJTaXplIHNpemUgPSAobV90YXJnZXQgPyBmVGFyZ2V0LT5QcmVmZXJyZWRTaXplKCkgOiBCU2l6
ZSgtMSwgLTEpKTsKKyAgICAKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbEJhcikKKyAgICAgICBz
aXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxCYXIpCisgICAgICAgc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9MTF9CQVJfSEVJR0hUOwor
ICAgIAorICAgIHJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXplKEV4cGxpY2l0TWluU2l6
ZSgpLCBzaXplKTsKK30KKworc3RhdHVzX3QgV0tTY3JvbGxWaWV3OjpQZXJmb3JtKHBlcmZvcm1f
Y29kZSBkLCB2b2lkKiBhcmcpCit7CisgICAgcmV0dXJuIEJWaWV3OjpQZXJmb3JtKGQsIGFyZyk7
Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3Lmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjI1Y2Y0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiogQ29w
eXJpZ2h0IDIwMDQsIE9wZW5CZU9TLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqIERpc3RyaWJ1
dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbkJlT1MgTGljZW5zZS4KKyAqLworI2lmbmRl
ZiBfV0tfU0NST0xMX1ZJRVdfSAorI2RlZmluZSBfV0tfU0NST0xMX1ZJRVdfSAorCisvKiogVGhl
IFdLU2Nyb2xsVmlldyBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIHRvIGFkZCBhIHNjcm9sbGluZwor
ICogIG1lY2hhbmlzbSB0byB0aGUgdGFyZ2V0IHZpZXcuCisgKi8KKworI2luY2x1ZGUgPFNjcm9s
bEJhci5oPgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitjbGFzcyBXS1Njcm9sbFZpZXcgOiBwdWJsaWMgQlZpZXcgeworcHVibGljOgorICAg
IFdLU2Nyb2xsVmlldyhjb25zdCBjaGFyKiBuYW1lLCBCVmlldyogdGFyZ2V0LCB1aW50MzIgcmVz
aXppbmdNb2RlID0gQl9GT0xMT1dfTEVGVCB8IEJfRk9MTE9XX1RPUCwgdWludDMyIGZsYWdzID0g
MCk7CisgICAgV0tTY3JvbGxWaWV3KEJNZXNzYWdlKiBhcmNoaXZlKTsKKyAgICB2aXJ0dWFsIH5X
S1Njcm9sbFZpZXcoKTsKKyAgICAKKyAgICBzdGF0aWMgQkFyY2hpdmFibGUqIEluc3RhbnRpYXRl
KEJNZXNzYWdlKiBhcmNoaXZlKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190ICAgIEFyY2hpdmUoQk1l
c3NhZ2UqIGFyY2hpdmUsIGJvb2wgZGVlcCA9IHRydWUpIGNvbnN0OworCisgICAgdmlydHVhbCB2
b2lkICAgICAgICBBdHRhY2hlZFRvV2luZG93KCk7CisKKyAgICBCU2Nyb2xsQmFyKiAgICAgICAg
IFNjcm9sbEJhcihvcmllbnRhdGlvbiBwb3N0dXJlKSBjb25zdDsKKyAgICBTY3JvbGxiYXJNb2Rl
ICAgICAgIFNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVyZSk7CisgICAgdm9pZCAgICAg
ICAgICAgICAgICBTZXRTY3JvbGxCYXJNb2RlKG9yaWVudGF0aW9uIHBvc3R1cmUsIFNjcm9sbGJh
ck1vZGUgbW9kZSk7CisKKyAgICB2b2lkICAgICAgICAgICAgICAgIFNldFRhcmdldChCVmlldyog
dGFyZ2V0KTsKKyAgICBCVmlldyogICAgICAgICAgICAgIFRhcmdldCgpIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkICAgICAgICBNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UqIG1lc3NhZ2UpOwor
ICAgIHZpcnR1YWwgdm9pZCAgICAgICAgTW91c2VEb3duKEJQb2ludCBwb2ludCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgICAgICAgIFdpbmRvd0FjdGl2YXRlZChib29sIGFjdGl2ZSk7CisgICAgdmly
dHVhbCB2b2lkICAgICAgICBNb3VzZVVwKEJQb2ludCBwb2ludCk7CisgICAgdmlydHVhbCB2b2lk
ICAgICAgICBNb3VzZU1vdmVkKEJQb2ludCBwb2ludCwgdWludDMyIGNvZGUsIGNvbnN0IEJNZXNz
YWdlKiBtc2cpOworCisgICAgdmlydHVhbCB2b2lkICAgICAgICBEZXRhY2hlZEZyb21XaW5kb3co
KTsKKyAgICB2aXJ0dWFsIHZvaWQgICAgICAgIEFsbEF0dGFjaGVkKCk7CisgICAgdmlydHVhbCB2
b2lkICAgICAgICBBbGxEZXRhY2hlZCgpOworCisgICAgdmlydHVhbCB2b2lkICAgICAgICBGcmFt
ZU1vdmVkKEJQb2ludCBwb3NpdGlvbik7CisKKyAgICB2aXJ0dWFsIEJIYW5kbGVyKiAgIFJlc29s
dmVTcGVjaWZpZXIoQk1lc3NhZ2UqIG1lc3NhZ2UsIGludDMyIGluZGV4LCBCTWVzc2FnZSogc3Bl
Y2lmaWVyLCBpbnQzMiBmb3JtLCBjb25zdCBjaGFyKiBwcm9wZXJ0eSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgICAgICAgIFJlc2l6ZVRvUHJlZmVycmVkKCk7CisgICAgdmlydHVhbCB2b2lkICAgICAg
ICBHZXRQcmVmZXJyZWRTaXplKGZsb2F0KiBfd2lkdGgsIGZsb2F0KiBfaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgICAgICAgIE1ha2VGb2N1cyhib29sIHN0YXRlID0gdHJ1ZSk7CisgICAgdmly
dHVhbCBzdGF0dXNfdCAgICBHZXRTdXBwb3J0ZWRTdWl0ZXMoQk1lc3NhZ2UqIGRhdGEpOworCisg
ICAgdmlydHVhbCBCU2l6ZSAgICAgICBNaW5TaXplKCk7CisgICAgdmlydHVhbCBCU2l6ZSAgICAg
ICBQcmVmZXJyZWRTaXplKCk7CisKKyAgICB2aXJ0dWFsIHN0YXR1c190ICAgIFBlcmZvcm0ocGVy
Zm9ybV9jb2RlIGQsIHZvaWQqIGFyZyk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJW
aWV3OworICAgIAorICAgIHN0YXRpYyBCUmVjdCAgICAgICAgQ2FsY0ZyYW1lKEJWaWV3KiB0YXJn
ZXQsIGJvb2wgaG9yaXpvbnRhbCwgYm9vbCB2ZXJ0aWNhbCk7CisgICAgc3RhdGljIGludDMyICAg
ICAgICBNb2RpZnlGbGFncyhpbnQzMiBmbGFncyk7CisKKyAgICBCVmlldyogICAgICAgICAgICAg
IG1fdGFyZ2V0OworICAgIEJTY3JvbGxCYXIqICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsQmFy
OworICAgIEJTY3JvbGxCYXIqICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbEJhcjsKKyAgICB1aW50
MTYgICAgICAgICAgICAgIG1fcHJldmlvdXNXaWR0aDsKKyAgICB1aW50MTYgICAgICAgICAgICAg
IG1fcHJldmlvdXNIZWlnaHQ7CisgICAgYm9vbCAgICAgICAgICAgICAgICBtX2hpZ2hsaWdodGVk
OworCisgICAgU2Nyb2xsYmFyTW9kZSAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsQmFyTW9kZTsKKyAg
ICBTY3JvbGxiYXJNb2RlICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbEJhck1vZGU7ICAgICAgIAor
fTsKKworI2VuZGlmICAvKiBfV0tfU0NST0xMX1ZJRVdfSCAqLworCi0tIAoxLjYuMy4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32943</attachid>
            <date>2009-07-17 08:29:46 -0700</date>
            <delta_ts>2009-07-28 12:13:30 -0700</delta_ts>
            <desc>Patch to add ScrollBar and ScrollView code specific to Haiku.</desc>
            <filename>Added-ScrollBar-and-ScrollView-code-specific-to-Haik.patch</filename>
            <type>text/plain</type>
            <size>46567</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSAwN2ZkMzMxMTY0MzE1NTMwNWYwZWVkOWQ3NmJhZTA5ZjNkMjExYzMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgMTcgSnVsIDIwMDkgMTY6MzY6MTcgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBTY3JvbGxCYXIgYW5kIFNjcm9sbFZpZXcgY29kZSBzcGVjaWZpYyB0byBIYWlrdS4KCi0t
LQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx
MDIgKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXIuaCAgICAg
ICAgfCAgIDYzICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhh
aWt1LmNwcCB8ICAxMjEgKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdD
YW52YXNIYWlrdS5jcHAgIHwgIDIwNSArKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oICAgIHwgICA2NyArKysrCiBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1Njcm9sbFZpZXdIYWlrdS5jcHAgICAgICAgIHwgIDMxMSArKysrKysrKysrKysrKysK
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcCAgICAgICAgICAgfCAgNDE1
ICsrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZp
ZXcuaCAgICAgICAgICAgICB8ICAgNzggKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxMzYyIGluc2Vy
dGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZh
c0hhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9s
bFZpZXdIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1dLU2Nyb2xsVmlldy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1dLU2Nyb2xsVmlldy5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA5NDIwZTY1Li43ODc1ZjlmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAw
OS0wNy0xNyAgTWF4aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBTY3JvbGxCYXIg
YW5kIFNjcm9sbFZpZXcgY29kZSBzcGVjaWZpYyB0byBIYWlrdS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2OTg4CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtU2Nyb2xsYmFyOjppc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNj
cm9sbGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCk6CisgICAgICAgICogcGxh
dGZvcm0vaGFpa3UvUGxhdGZvcm1TY3JvbGxCYXJIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAo
SGFpa3VTY3JvbGxCYXI6OkhhaWt1U2Nyb2xsQmFyKToKKyAgICAgICAgKEhhaWt1U2Nyb2xsQmFy
OjpWYWx1ZUNoYW5nZWQpOgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OlBsYXRmb3JtU2Ny
b2xsYmFyKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIp
OgorICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChQ
bGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbik6CisgICAgICAgIChQbGF0Zm9y
bVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0aW9uKToKKyAgICAgICAgKFBsYXRmb3JtU2Ny
b2xsYmFyOjp3aWR0aCk6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KToKKyAg
ICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KToKKyAgICAgICAgKFBsYXRmb3JtU2Ny
b2xsYmFyOjpzZXRFbmFibGVkKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpwYWludCk6
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNjcm9sbFZpZXdD
YW52YXNIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkRy
YXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNZXNzYWdlUmVj
ZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZU1v
dmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TW91c2VEb3du
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TW91c2VVcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkRvU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5RG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OktleVVwKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6V2luZG93QWN0aXZhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RnJhbWVSZXNpemVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNldFNjcm9sbEJhck1heFYpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpTZXRTY3JvbGxCYXJNYXhIKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6U2V0U2Nyb2xsVmlldyk6CisgICAg
ICAgICogcGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0hhaWt1LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6U2Nyb2xsVmlld1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OkF0
dGFjaGVkVG9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmll
d1ByaXZhdGU6OktleURvd24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGU6OktleVVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9s
bFZpZXdQcml2YXRlOjpWaXNpYmxlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNldENvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpDb250ZW50U2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6Q29udGVudFdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpDb250ZW50SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpT
Y3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1By
aXZhdGU6OlNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3Jt
SW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybURlc3Ryb3kpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxiYXJNb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbGJhck1vZGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtQWRkQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1SZW1vdmVDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENvbnRlbnRzU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JlZW5Ub0NvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNUb1NjcmVlbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldENhbkJsaXRPblNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUNhbkJsaXRPblNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUlzT2Zmc2NyZWVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEFsbG93c1Njcm9sbGluZyk6CisgICAgICAgICogcGxh
dGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXS1Njcm9sbFZp
ZXc6OldLU2Nyb2xsVmlldyk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6On5XS1Njcm9sbFZpZXcp
OgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpJbnN0YW50aWF0ZSk6CisgICAgICAgIChXS1Njcm9s
bFZpZXc6OkFyY2hpdmUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpBdHRhY2hlZFRvV2luZG93
KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6RGV0YWNoZWRGcm9tV2luZG93KToKKyAgICAgICAg
KFdLU2Nyb2xsVmlldzo6QWxsQXR0YWNoZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpBbGxE
ZXRhY2hlZCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlNjcm9sbEJhcik6CisgICAgICAgIChX
S1Njcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpTZXRT
Y3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6U2V0VGFyZ2V0KToKKyAgICAg
ICAgKFdLU2Nyb2xsVmlldzo6VGFyZ2V0KToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TWVzc2Fn
ZVJlY2VpdmVkKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TW91c2VEb3duKToKKyAgICAgICAg
KFdLU2Nyb2xsVmlldzo6TW91c2VVcCk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6Ok1vdXNlTW92
ZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpGcmFtZU1vdmVkKToKKyAgICAgICAgKFdLU2Ny
b2xsVmlldzo6UmVzaXplVG9QcmVmZXJyZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpHZXRQ
cmVmZXJyZWRTaXplKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6Q2FsY0ZyYW1lKToKKyAgICAg
ICAgKFdLU2Nyb2xsVmlldzo6TW9kaWZ5RmxhZ3MpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpX
aW5kb3dBY3RpdmF0ZWQpOgorICAgICAgICAoV0tTY3JvbGxWaWV3OjpNYWtlRm9jdXMpOgorICAg
ICAgICAoV0tTY3JvbGxWaWV3OjpSZXNvbHZlU3BlY2lmaWVyKToKKyAgICAgICAgKFdLU2Nyb2xs
Vmlldzo6R2V0U3VwcG9ydGVkU3VpdGVzKToKKyAgICAgICAgKFdLU2Nyb2xsVmlldzo6TWluU2l6
ZSk6CisgICAgICAgIChXS1Njcm9sbFZpZXc6OlByZWZlcnJlZFNpemUpOgorICAgICAgICAoV0tT
Y3JvbGxWaWV3OjpQZXJmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZp
ZXcuaDogQWRkZWQuCisKIDIwMDktMDctMTYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMTRkMDM5OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvUGxhdGZvcm1TY3JvbGxCYXIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
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
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUGxhdGZvcm1TY3JvbGxiYXJfaAorI2RlZmluZSBQbGF0
Zm9ybVNjcm9sbGJhcl9oCisKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKKworI2luY2x1ZGUgPGludGVyZmFjZS9TY3JvbGxCYXIuaD4KKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBQbGF0Zm9ybVNjcm9sbGJhciA6IHB1YmxpYyBTY3JvbGxi
YXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xp
ZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKKyAgICAg
ICAgdmlydHVhbCB+UGxhdGZvcm1TY3JvbGxiYXIoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBpbnQg
d2lkdGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKworICAgICAgICBzdGF0
aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KEJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7IH0KKyAgICAgICAgc3RhdGljIGludCB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihCX1ZfU0NST0xMX0JB
Ul9XSURUSCk7IH0KKworICAgICAgICB2b2lkIHZhbHVlQ2hhbmdlZChmbG9hdCk7CisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQcm9wb3J0aW9uKCk7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGxhdGZvcm1TY3JvbGxiYXJfaAorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtU2Nyb2xsQmFySGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE3Mjk5Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVNjcm9sbEJhckhhaWt1LmNwcApA
QCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgi
CisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiQ3Vy
c29yLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1
ZGUgPFZpZXcuaD4KKworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworCitjbGFzcyBIYWlr
dVNjcm9sbEJhciA6IHB1YmxpYyBCU2Nyb2xsQmFyIHsKK3B1YmxpYzoKKyAgICBIYWlrdVNjcm9s
bEJhcihQbGF0Zm9ybVNjcm9sbGJhciogcGxhdGZvcm1TY3JvbGxiYXIsIEJWaWV3KiB0YXJnZXQs
IG9yaWVudGF0aW9uIHBvc3R1cmUpIAorICAgICAgICA6IEJTY3JvbGxCYXIoKHBvc3R1cmUgPT0g
Ql9WRVJUSUNBTCkgPyBCUmVjdCgwLCAwLCBCX1ZfU0NST0xMX0JBUl9XSURUSCwgMCkgOiBCUmVj
dCgwLCAwLCAwLCBCX0hfU0NST0xMX0JBUl9IRUlHSFQpLAorICAgICAgICAgICAgICAgICAgICAg
InNjcm9sbF9iYXIiLCB0YXJnZXQsIDAsIDEsIHBvc3R1cmUpCisgICAgeworICAgICAgICBtX3Bs
YXRmb3JtU2Nyb2xsYmFyID0gcGxhdGZvcm1TY3JvbGxiYXI7CisgICAgfQorCisgICAgdm9pZCBW
YWx1ZUNoYW5nZWQoZmxvYXQgbmV3VmFsdWUpCisgICAgeworICAgICAgICBtX3BsYXRmb3JtU2Ny
b2xsYmFyLT52YWx1ZUNoYW5nZWQobmV3VmFsdWUpOworICAgIH0KK3ByaXZhdGU6CisgICAgUGxh
dGZvcm1TY3JvbGxiYXIqIG1fcGxhdGZvcm1TY3JvbGxiYXI7Cit9OworCitQbGF0Zm9ybVNjcm9s
bGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQorICAg
IDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpCit7CisgICAgSGFpa3VTY3Jv
bGxCYXIqIHNjcm9sbGJhciA9IG5ldyBIYWlrdVNjcm9sbEJhcih0aGlzLCAvKnRhcmdldCovMCwg
KG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSA/IEJfVkVSVElDQUwgOiBCX0hPUkla
T05UQUwpOworICAgIHNldFBsYXRmb3JtV2lkZ2V0KHNjcm9sbGJhcik7Cit9CisKK1BsYXRmb3Jt
U2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIoKQoreworICAgIHNldFBsYXRmb3JtV2lkZ2V0
KDApOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp2YWx1ZUNoYW5nZWQoZmxvYXQgbmV3
VmFsdWUpCit7CisgICAgc2V0VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihuZXdWYWx1ZSkpOworfQor
Cit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkKK3sKKyAgICBI
YWlrdVNjcm9sbEJhciogc2Nyb2xsYmFyID0gc3RhdGljX2Nhc3Q8SGFpa3VTY3JvbGxCYXIqPihw
bGF0Zm9ybVdpZGdldCgpKTsKKyAgICBzY3JvbGxiYXItPlNldFZhbHVlKG1fY3VycmVudFBvcyk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJvcG9ydGlvbigpCit7
CisgICAgSGFpa3VTY3JvbGxCYXIqIHNjcm9sbGJhciA9IHN0YXRpY19jYXN0PEhhaWt1U2Nyb2xs
QmFyKj4ocGxhdGZvcm1XaWRnZXQoKSk7CisgICAgZmxvYXQgcHJvcG9ydGlvbiA9IHN0YXRpY19j
YXN0PGZsb2F0PihtX3Zpc2libGVTaXplKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6
ZSk7CisKKyAgICBpZiAoIShwcm9wb3J0aW9uID09IHNjcm9sbGJhci0+UHJvcG9ydGlvbigpIHx8
IHByb3BvcnRpb24gPCAwLjApKQorICAgICAgICBzY3JvbGxiYXItPlNldFByb3BvcnRpb24ocHJv
cG9ydGlvbik7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6d2lkdGgoKSBjb25zdAorewor
ICAgIHJldHVybiBXaWRnZXQ6OndpZHRoKCk7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6
aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2lkZ2V0OjpoZWlnaHQoKTsKK30KKwordm9p
ZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRGcmFtZVJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1TY3JvbGxiYXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFBsYXRmb3JtU2Ny
b2xsYmFyOjpzZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFy
OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorewor
ICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRoaXM/Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45ZGQ5Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuY3BwCkBAIC0wLDAgKzEsMjA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBn
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
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlld0NhbnZhc0hhaWt1LmgiCisKKyNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgorI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKworI2luY2x1ZGUg
IlNoYXJlZFRpbWVySGFpa3UuaCIKKworI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+CisjaW5j
bHVkZSA8U2Nyb2xsQmFyLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUgPExvb3Bl
ci5oPgorI2luY2x1ZGUgPEF1dG9sb2NrLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
Y3JvbGxWaWV3Q2FudmFzSGFpa3U6OlNjcm9sbFZpZXdDYW52YXNIYWlrdShTY3JvbGxWaWV3KiBz
Y3JvbGxWaWV3LCBCVmlldyogcGFyZW50LCB1aW50MzIgZmxhZ3MpCisgICAgOiBCVmlldyhCUmVj
dCgwLCAwLCAwLCAwKSwgInNjcm9sbF92aWV3X2NhbnZhcyIsIEJfRk9MTE9XX0FMTF9TSURFUywg
Ql9XSUxMX0RSQVcgfCBCX0ZSQU1FX0VWRU5UUyB8IGZsYWdzKQorICAgICwgbV9zY3JvbGxWaWV3
KHNjcm9sbFZpZXcpCit7CisgICAgU2V0Vmlld0NvbG9yKDI1NSwgMjU1LCAyNTUpOworfQorCisK
K3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpCit7Cisg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3Njcm9s
bFZpZXcpOworICAgIGlmICghZnJhbWVWaWV3IHx8ICFmcmFtZVZpZXctPmZyYW1lKCkgfHwgIWZy
YW1lVmlldy0+ZnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoaWxlIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIGZyYW1lVmlldy0+
bGF5b3V0KCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQgY3R4dCh0aGlzKTsKKyAgICBmcmFtZVZp
ZXctPmZyYW1lKCktPnBhaW50Q2FyZXQoJmN0eHQsIDAsIDAsIHVwZGF0ZVJlY3QpOworfQorCit2
b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6TWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlICptc2cp
Cit7CisgICAgLy8gRklYTUU6IENhcHR1cmUgbW91c2Ugd2hlZWwgbWVzc2FnZXMKKyAgICBCVmll
dzo6TWVzc2FnZVJlY2VpdmVkKG1zZyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1
OjpNb3VzZU1vdmVkKEJQb2ludCB3aGVyZSwgdWludDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlKiBt
ZXNzYWdlKQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmll
dyB8fCAhZnJhbWVWaWV3LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCUG9pbnQg
c2NyZWVuUG9zaXRpb24gPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICAgZnJhbWVWaWV3
LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQo
bWVzc2FnZSwgc2NyZWVuUG9zaXRpb24pKTsKKworICAgIEJWaWV3OjpNb3VzZU1vdmVkKHdoZXJl
LCBjb2RlLCBtZXNzYWdlKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6Ok1vdXNl
RG93bihCUG9pbnQgd2hlcmUpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+
Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVW
aWV3LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBCUG9pbnQgc2NyZWVuUG9zaXRp
b24gPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworCisgICAgZnJhbWVWaWV3LT5mcmFtZSgpLT5s
b2FkZXIoKS0+cmVzZXRNdWx0aXBsZUZvcm1TdWJtaXNzaW9uUHJvdGVjdGlvbigpOworCisgICAg
aW50MzIgYnV0dG9ucyA9IG1lc3NhZ2UtPkZpbmRJbnQzMigiYnV0dG9ucyIpOworCisgICAgaWYg
KGJ1dHRvbnMgPT0gMikKKyAgICAgICBmcmFtZVZpZXctPmZyYW1lKCktPmV2ZW50SGFuZGxlcigp
LT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQobWVzc2FnZSwgc2NyZWVu
UG9zaXRpb24pKTsKKyAgICBlbHNlCisgICAgICAgZnJhbWVWaWV3LT5mcmFtZSgpLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91c2VFdmVudChtZXNzYWdl
LCBzY3JlZW5Qb3NpdGlvbikpOworCisgICAgQlZpZXc6Ok1vdXNlRG93bih3aGVyZSk7Cit9CisK
K3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpNb3VzZVVwKEJQb2ludCB3aGVyZSkKK3sKKyAg
ICBCTWVzc2FnZSogbWVzc2FnZSA9IExvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlm
ICghbWVzc2FnZSkgCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3
KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3LT5mcmFtZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBCUG9pbnQgc2NyZWVuUG9zaXRpb24gPSBDb252ZXJ0VG9TY3JlZW4od2hl
cmUpOworCisgICAgZnJhbWVWaWV3LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KG1lc3NhZ2UsIHNjcmVlblBvc2l0aW9u
KSk7CisKKyAgICBCVmlldzo6TW91c2VVcCh3aGVyZSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0Nh
bnZhc0hhaWt1OjpEb1Njcm9sbChib29sIGlzSG9yaXpvbnRhbCwgZmxvYXQgbXVsdGlwbGllcikK
K3sKKyAgICBwcmludGYoIlNjcm9sbFZpZXdDYW52YXNIYWlrdTo6RG9TY3JvbGxcbiIpOworfQor
Cit2b2lkIFNjcm9sbFZpZXdDYW52YXNIYWlrdTo6S2V5RG93bihjb25zdCBjaGFyKiBieXRlcywg
aW50MzIgbnVtQnl0ZXMpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+Q3Vy
cmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJh
bWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3
LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZyYW1lVmlldy0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChtZXNzYWdl
KSkpCisgICAgICAgIHByaW50ZigiLS0+S2V5RG93bjogbm90IGFycml2ZWRcbiIpOyAgICAKKwor
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzWzBdKSAhPSBzdGF0aWNfY2FzdDxpbnQ+KEJf
VEFCKSkgLy9vdGhlcnM/CisgICAgICAgIEJWaWV3OjpLZXlEb3duKGJ5dGVzLCBudW1CeXRlcyk7
Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc0hhaWt1OjpLZXlVcChjb25zdCBjaGFyKiBieXRl
cywgaW50MzIgbnVtQnl0ZXMpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIoKS0+
Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UpIAorICAgICAgICByZXR1cm47CisK
KyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkZyYW1lVmlldyo+KG1fc2Nyb2xsVmlldyk7CisgICAgaWYgKCFmcmFtZVZpZXcgfHwgIWZyYW1l
Vmlldy0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGZyYW1lVmlldy0+ZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChtZXNz
YWdlKSkpCisgICAgICAgIHByaW50ZigiLS0+S2V5VXA6IG5vdCBhcnJpdmVkXG4iKTsgCisKKyAg
ICBpZiAoc3RhdGljX2Nhc3Q8aW50PihieXRlc1swXSkgIT0gc3RhdGljX2Nhc3Q8aW50PihCX1RB
QikpIC8vb3RoZXJzPworICAgICAgICBCVmlldzo6S2V5VXAoYnl0ZXMsIG51bUJ5dGVzKTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OldpbmRvd0FjdGl2YXRlZChib29sIHN0YXRl
KQoreworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RnJhbWVWaWV3Kj4obV9zY3JvbGxWaWV3KTsKKyAgICBpZiAoIWZyYW1lVmlldyB8fCAh
ZnJhbWVWaWV3LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFtZVZpZXctPmZy
YW1lKCktPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShzdGF0ZSk7Cit9CisK
Kwordm9pZCBTY3JvbGxWaWV3Q2FudmFzSGFpa3U6OkZyYW1lUmVzaXplZChmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0KQoreworICAgIGlmICghbV9zY3JvbGxWaWV3KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9zY3JvbGxWaWV3LT5jb250ZW50c1dpZHRoKCkgIT0gc3RhdGljX2Nhc3Q8
aW50Pih3aWR0aCArIDEpCisgICAgICAgIHx8IG1fc2Nyb2xsVmlldy0+Y29udGVudHNIZWlnaHQo
KSAhPSBzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCArIDEpKSB7CisgICAgICAgIFdlYkNvcmU6OkZy
YW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVWaWV3Kj4obV9z
Y3JvbGxWaWV3KTsKKyAgICAgICAgaWYgKGZyYW1lVmlldykgeworICAgICAgICAgICAgLy9mcmFt
ZVZpZXctPmZyYW1lKCktPmZvcmNlTGF5b3V0KCk7CisgICAgICAgICAgICAvL2ZyYW1lVmlldy0+
YWRqdXN0Vmlld1NpemUoKTsKKyAgICAgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZpZXdDYW52YXNIYWlrdS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDY2YWIzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JvbGxWaWV3Q2FudmFzSGFpa3UuaApAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNjcm9sbFZpZXdDYW52YXNIYWlrdV9oCisjZGVmaW5lIFNjcm9sbFZpZXdDYW52YXNIYWlrdV9o
CisKKyNpbmNsdWRlIDxWaWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IFNjcm9sbFZpZXc7CisKKyAgICBjbGFzcyBTY3JvbGxWaWV3Q2FudmFzSGFpa3UgOiBwdWJsaWMg
QlZpZXcgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2Nyb2xsVmlld0NhbnZhc0hhaWt1KFNjcm9s
bFZpZXcqLCBCVmlldyogcGFyZW50LCB1aW50MzIgZmxhZ3MpOworCisgICAgICAgIHZvaWQgU2V0
U2Nyb2xsQmFyTWF4VihmbG9hdCBtYXhWZXJ0aWNhbCkgeyBtX3Njcm9sbEJhck1heFYgPSBtYXhW
ZXJ0aWNhbDsgfQorICAgICAgICB2b2lkIFNldFNjcm9sbEJhck1heEgoZmxvYXQgbWF4SG9yaXpv
bnRhbCkgeyBtX3Njcm9sbEJhck1heEggPSBtYXhIb3Jpem9udGFsOyB9CisKKyAgICAgICAgdm9p
ZCBEcmF3KEJSZWN0IHVwZGF0ZVJlY3QpOworICAgICAgICB2b2lkIE1lc3NhZ2VSZWNlaXZlZChC
TWVzc2FnZSAqbXNnKTsKKyAgICAgICAgdm9pZCBNb3VzZU1vdmVkKEJQb2ludCB3aGVyZSwgdWlu
dDMyIGNvZGUsIGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBNb3VzZURv
d24oQlBvaW50IHdoZXJlKTsKKyAgICAgICAgdm9pZCBNb3VzZVVwKEJQb2ludCB3aGVyZSk7Cisg
ICAgICAgIHZvaWQgS2V5RG93bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpOwor
ICAgICAgICB2b2lkIEtleVVwKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcyk7Cisg
ICAgICAgIHZvaWQgV2luZG93QWN0aXZhdGVkKGJvb2wgc3RhdGUpOworCisgICAgICAgIHZvaWQg
U2V0U2Nyb2xsVmlldyhTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KSB7IG1fc2Nyb2xsVmlldyA9IHNj
cm9sbFZpZXc7IH0KKworICAgICAgICB2b2lkIEZyYW1lUmVzaXplZChmbG9hdCB3LCBmbG9hdCBo
KTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBEb1Njcm9sbChib29sIGlz
SG9yaXpvbnRhbCwgZmxvYXQgbXVsdGlwbGllcik7CisKKyAgICAgICAgU2Nyb2xsVmlldyogbV9z
Y3JvbGxWaWV3OworICAgICAgICBmbG9hdCBtX3Njcm9sbEJhck1heEg7CisgICAgICAgIGZsb2F0
IG1fc2Nyb2xsQmFyTWF4VjsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gU2Nyb2xsVmlld0NhbnZhc0hhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9TY3JvbGxWaWV3SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
Y3JvbGxWaWV3SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVh
MTY0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Njcm9sbFZp
ZXdIYWlrdS5jcHAKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QW5kcmVhIEFuemFuaSAgIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIAor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXdDYW52
YXNIYWlrdS5oIgorI2luY2x1ZGUgIldLU2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisjaW5j
bHVkZSA8V2luZG93Lmg+CisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRlIDxz
dXBwb3J0L0F1dG9sb2NrLmg+CisjaW5jbHVkZSA8U2Nyb2xsVmlldy5oPgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJs
aWMgV0tTY3JvbGxWaWV3IHsKK3B1YmxpYzoKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZShXZWJDb3Jl
OjpTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQorICAgICAgICA6IFdLU2Nyb2xsVmlldygiV2ViQ29y
ZSBTY3JvbGxWaWV3UHJpdmF0ZSIsIG5ldyBTY3JvbGxWaWV3Q2FudmFzSGFpa3UoMCwgMCwgMCks
CisgICAgICAgICAgICAgICAgICAgICAgIEJfRk9MTE9XX05PTkUsIEJfV0lMTF9EUkFXIHwgQl9G
UkFNRV9FVkVOVFMpIC8vQl9GVUxMX1VQREFURV9PTl9SRVNJWkUKKyAgICAgICAgLCBtX3Njcm9s
bFZpZXcoc2Nyb2xsVmlldykKKyAgICAgICAgLCBtX2NvbnRlbnRTaXplKDAsIDApCisgICAgewor
ICAgICAgICBTZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7CisgICAgfQorCisgICAgdm9pZCBB
dHRhY2hlZFRvV2luZG93KCkKKyAgICB7CisgICAgICAgIFJlc2l6ZUJ5KC0oQl9WX1NDUk9MTF9C
QVJfV0lEVEggLSAxKSwgLShCX0hfU0NST0xMX0JBUl9IRUlHSFQgLSAxKSk7CisgICAgICAgIFdL
U2Nyb2xsVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpOworICAgIH0KKworICAgIHZvaWQgS2V5RG93
bihjb25zdCBjaGFyKiBieXRlcywgaW50MzIgbnVtQnl0ZXMpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogd2hlbiBTY3JvbGxWaWV3LmggdGFrZXMgdGhlIGZvY3VzIHNob3VsZCBmb2N1cyB0aGUg
dGFyZ2V0KCkuCisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdldCgpLT5L
ZXlEb3duKGJ5dGVzLCBudW1CeXRlcyk7CisgICAgfQorCisgICAgICB2b2lkIEtleVVwKGNvbnN0
IGNoYXIqIGJ5dGVzLCBpbnQzMiBudW1CeXRlcykKKyAgICB7CisgICAgICAgIC8vc2VlIGNvbW1l
bnQgYWJvdmUuCisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdldCgpLT5L
ZXlVcChieXRlcywgbnVtQnl0ZXMpOworICAgIH0KKworICAgICAgQlJlY3QgVmlzaWJsZUZyYW1l
KCkKKyAgICB7CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBUYXJn
ZXQoKS0+Qm91bmRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBCb3VuZHMo
KTsKKyAgICB9CisKKyAgICB2b2lkIFNldENvbnRlbnRTaXplKEJTaXplIHNpemUpCisgICAgewor
ICAgICAgICBtX2NvbnRlbnRTaXplID0gc2l6ZTsKKyAgICB9CisKKyAgICBCU2l6ZSBDb250ZW50
U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb250ZW50U2l6ZTsKKyAgICB9CisKKyAg
ICBmbG9hdCBDb250ZW50V2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29udGVudFNp
emUud2lkdGg7CisgICAgfQorCisgICAgZmxvYXQgQ29udGVudEhlaWdodCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9jb250ZW50U2l6ZS5oZWlnaHQ7CisgICAgfQorCisgICAgQlBvaW50IFNj
cm9sbE9mZnNldCgpCisgICAgeworICAgICAgICBpZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gVGFyZ2V0KCktPkxlZnRUb3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0
dXJuIEJQb2ludCgwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIFNjcm9sbEJ5KGZsb2F0IGR4LCBm
bG9hdCBkeSkKKyAgICB7CisgICAgICAgIGlmIChUYXJnZXQoKSkKKyAgICAgICAgICAgIFRhcmdl
dCgpLT5TY3JvbGxCeShkeCwgZHkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpT
Y3JvbGxWaWV3KiBtX3Njcm9sbFZpZXc7CisgICAgQlNpemUgbV9jb250ZW50U2l6ZTsKK307CisK
K3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX2RhdGEgPSBuZXcgU2Ny
b2xsVmlld1ByaXZhdGUodGhpcyk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1EZXN0
cm95KCkKK3sKKyAgICBkZWxldGUgbV9kYXRhOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OnBs
YXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0
YS0+VmlzaWJsZUZyYW1lKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3Jv
bGxiYXJNb2RlcygpCit7CisgICAgaWYgKG1fZGF0YS0+U2Nyb2xsQmFyTW9kZShCX0hPUklaT05U
QUwpICE9IGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpCisgICAgICAgIG1fZGF0YS0+U2V0U2Ny
b2xsQmFyTW9kZShCX0hPUklaT05UQUwsIGhvcml6b250YWxTY3JvbGxiYXJNb2RlKCkpOworCisg
ICAgaWYgKG1fZGF0YS0+U2Nyb2xsQmFyTW9kZShCX1ZFUlRJQ0FMKSAhPSB2ZXJ0aWNhbFNjcm9s
bGJhck1vZGUoKSkKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUws
IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9y
bVNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUmIGhvcml6b250YWwsIFNjcm9sbGJhck1vZGUm
IHZlcnRpY2FsKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzdGlsbCBwcm9ibGVtcyB3aXRoIGRp
ZmZlcmVudCBzY3JvbGxiYXIgbW9kZXMuCisgICAgI2lmIDAKKworICAgIGlmICghbV9kYXRhKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGhvcml6b250YWwpIHsKKyAgICBjYXNlIFNj
cm9sbGJhckF1dG86CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05U
QUwsIFNjcm9sbGJhckF1dG8pOyAgICAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxi
YXJBbHdheXNPbjoKKyAgICAgICAgbV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfSE9SSVpPTlRB
TCwgU2Nyb2xsYmFyQWx3YXlzT24pOyAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxi
YXJBbHdheXNPZmY6CisgICAgICAgIG1fZGF0YS0+U2V0U2Nyb2xsQmFyTW9kZShCX0hPUklaT05U
QUwsIFNjcm9sbGJhckFsd2F5c09mZik7IAorICAgICAgICBicmVhazsgICAgCisgICAgfQorCisg
ICAgc3dpdGNoICh2ZXJ0aWNhbCkgeworICAgIGNhc2UgU2Nyb2xsYmFyQXV0bzoKKyAgICAgICAg
bV9kYXRhLT5TZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckF1dG8pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbGJhckFsd2F5c09uOgorICAgICAgICBtX2RhdGEt
PlNldFNjcm9sbEJhck1vZGUoQl9WRVJUSUNBTCwgU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNjcm9sbGJhckFsd2F5c09mZjoKKyAgICAgICAgbV9kYXRhLT5T
ZXRTY3JvbGxCYXJNb2RlKEJfVkVSVElDQUwsIFNjcm9sbGJhckFsd2F5c09mZik7CisgICAgICAg
IGJyZWFrOyAgICAKKyAgICB9CisKKyAgICAjZW5kaWYKK30KKwordm9pZCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUFkZENoaWxkKFdpZGdldCogY2hpbGQpCit7CisgICAgQlZpZXcqIHRhcmdldCA9IG1f
ZGF0YS0+VGFyZ2V0KCk7CisgICAgaWYgKHRhcmdldCkKKyAgICAgICAgY2hpbGQtPnNldFBsYXRm
b3JtV2lkZ2V0KHRhcmdldCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZW1vdmVD
aGlsZChXaWRnZXQqIGNoaWxkKQoreyAKKyAgICBCVmlldyogdGFyZ2V0ID0gbV9kYXRhLT5UYXJn
ZXQoKTsKKworICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LT5Mb2NrTG9vcGVyKCkpIHsKKyAgICAg
ICAgY2hpbGQtPnBsYXRmb3JtV2lkZ2V0KCktPlJlbW92ZVNlbGYoKTsKKyAgICAgICAgdGFyZ2V0
LT5VbmxvY2tMb29wZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1T
ZXRDb250ZW50c1NpemUoKQoreworICAgIC8vc2Nyb2xsYmFyIGZpeDoKKyAgICAvLyBtX2RhdGEt
PlNjcm9sbEJhcihCX0hPUklaT05UQUwpLT5TZXRSYW5nZSgwLCB3IC0gd2lkdGgoKSAtMSArIEJf
Vl9TQ1JPTExfQkFSX1dJRFRIKTsKKyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihCX0hPUklaT05U
QUwpLT5TZXRQcm9wb3J0aW9uKHdpZHRoKCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4ody0xKSk7CisK
KyAgICAvLyBtX2RhdGEtPlNjcm9sbEJhcihCX1ZFUlRJQ0FMKS0+U2V0UmFuZ2UoMCwgaCAtIGhl
aWdodCgpIC0xICsgQl9IX1NDUk9MTF9CQVJfSEVJR0hUKTsKKyAgICAvLyBtX2RhdGEtPlNjcm9s
bEJhcihCX1ZFUlRJQ0FMKS0+U2V0UHJvcG9ydGlvbihoZWlnaHQoKSAvIHN0YXRpY19jYXN0PGZs
b2F0PihoLTEpKTsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjpwbGF0Zm9ybUNvbnRlbnRzU2l6
ZSgpIGNvbnN0Cit7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gMDsKKyAg
ICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgeworICAgICAgICBCU2l6ZSBmcmFtZSA9IHBsYXRmb3Jt
V2lkZ2V0KCktPlByZWZlcnJlZFNpemUoKTsKKyAgICAgICAgd2lkdGggPSBmcmFtZS5JbnRlZ2Vy
V2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gZnJhbWUuSW50ZWdlckhlaWdodCgpOworICAgICAg
ICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgfQorICAgIHJldHVybiBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVu
dFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKK3sKKyAgICBp
ZiAoIXVwZGF0ZVJlY3Qud2lkdGgoKSB8fCAhdXBkYXRlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQlJlY3QgdXBkYXRlKHVwZGF0ZVJlY3QpOworICAgIEJWaWV3KiB0YXJn
ZXQgPSBtX2RhdGEtPlRhcmdldCgpOworCisgICAgaWYgKCF1cGRhdGUuSXNWYWxpZCgpIHx8ICF0
YXJnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIHVwZGF0ZSA9IHVwZGF0ZSAmIG1fZGF0YS0+
VmlzaWJsZUZyYW1lKCk7CisgICAgdGFyZ2V0LT5JbnZhbGlkYXRlKHVwZGF0ZSk7CisKKyAgICBp
ZiAobm93KQorICAgICAgICAgICB0YXJnZXQtPlN5bmMoKTsKKyAgICBlbHNlCisgICAgICAgICAg
IHRhcmdldC0+Rmx1c2goKTsKK30KKworSW50UG9pbnQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3Jl
ZW5Ub0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RQorICAgIHJldHVybiBwb2ludDsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUNv
bnRlbnRzVG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RQorICAgIHJldHVybiByZWN0OworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0Q2Fu
QmxpdE9uU2Nyb2xsKGJvb2wgZmxhZykKK3sKKyAgICBpZiAoIW1fZGF0YSB8fCAhbV9kYXRhLT5U
YXJnZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2RhdGEtPlZpZXdDb2xv
cigpID09IEJfVFJBTlNQQVJFTlRfQ09MT1IgJiYgIWZsYWcpIHsKKyAgICAgICAgbV9kYXRhLT5T
ZXRWaWV3Q29sb3IoMjU1LCAyNTUsIDI1NSk7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNl
dFZpZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52
YWxpZGF0ZSgpOworICAgIH0gZWxzZSBpZiAobV9kYXRhLT5WaWV3Q29sb3IoKSAhPSBCX1RSQU5T
UEFSRU5UX0NPTE9SICYmIGZsYWcpIHsKKyAgICAgICAgbV9kYXRhLT5TZXRWaWV3Q29sb3IoQl9U
UkFOU1BBUkVOVF9DT0xPUik7CisgICAgICAgIG1fZGF0YS0+VGFyZ2V0KCktPlNldFZpZXdDb2xv
cihCX1RSQU5TUEFSRU5UX0NPTE9SKTsKKyAgICAgICAgbV9kYXRhLT5UYXJnZXQoKS0+SW52YWxp
ZGF0ZSgpOworICAgIH0KKworLy8gICAgaWYoZmxhZykKKy8vICAgICAgICBtX2RhdGEtPlNldFZp
ZXdDb2xvcigyNTUsIDI1NSwgMjU1KTsKKy8vICAgIGVsc2UKKy8vICAgICAgICBtX2RhdGEtPlNl
dFZpZXdDb2xvcihCX1RSQU5TUEFSRU5UX0NPTE9SKTsKK30KKworYm9vbCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUNhbkJsaXRPblNjcm9sbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+Vmll
d0NvbG9yKCkgPT0gQl9UUkFOU1BBUkVOVF9DT0xPUjsKK30KKworYm9vbCBTY3JvbGxWaWV3Ojpw
bGF0Zm9ybUlzT2Zmc2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXBsYXRmb3JtV2lkZ2V0
KCkgfHwgIXBsYXRmb3JtV2lkZ2V0KCktPklzSGlkZGVuKCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmll
dzo6cGxhdGZvcm1TY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTY3Jv
bGxWaWV3OjpzZXRBbGxvd3NTY3JvbGxpbmcoYm9vbCBhbGxvd3MpCit7CisgICAgLy9kaXNhYmxl
IHNjcm9sbGJhcnMgb3IgaGlkZSBzY3JvbGxiYXJzPworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9XS1Njcm9sbFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9s
bFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzQzMTgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dLU2Nyb2xsVmlldy5jcHAK
QEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1LCBBeGVsIETDtnJm
bGVyLCBheGVsZEBwaW5jLXNvZnR3YXJlLmRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogRGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlIDxM
YXlvdXRVdGlscy5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxXaW5kb3cuaD4K
KworCitXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmlldyhjb25zdCBjaGFyKiBuYW1lLCBCVmlldyog
dGFyZ2V0LCB1aW50MzIgcmVzaXppbmdNb2RlLCB1aW50MzIgZmxhZ3MpCisgICAgOiBCVmlldyhD
YWxjRnJhbWUodGFyZ2V0LCB0cnVlLCB0cnVlKSwgbmFtZSwgcmVzaXppbmdNb2RlLCBNb2RpZnlG
bGFncyhmbGFncykpCisgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX2hvcml6b250YWxT
Y3JvbGxCYXIoMCkKKyAgICAsIG1fdmVydGljYWxTY3JvbGxCYXIoMCkKKyAgICAsIG1faGlnaGxp
Z2h0ZWQoZmFsc2UpCisgICAgLCBtX3ZlcnRpY2FsU2Nyb2xsQmFyTW9kZShTY3JvbGxiYXJBbHdh
eXNPbikKKyAgICAsIG1faG9yaXpvbnRhbFNjcm9sbEJhck1vZGUoU2Nyb2xsYmFyQWx3YXlzT24p
ICAgIAoreworICAgIGJvb2wgaG9yaXpvbnRhbCA9IHRydWU7CisgICAgYm9vbCB2ZXJ0aWNhbCA9
IHRydWU7CisgICAgCisgICAgQlJlY3QgdGFyZ2V0RnJhbWU7CisgICAgaWYgKG1fdGFyZ2V0KSB7
CisgICAgICAgLy8gbGF5b3V0IHRhcmdldCBhbmQgYWRkIGl0CisgICAgICAgLy9tX3RhcmdldC0+
VGFyZ2V0ZWRCeVNjcm9sbFZpZXcodGhpcyk7CisgICAgICAgbV90YXJnZXQtPk1vdmVUbyhCX09S
SUdJTik7CisgICAgICAgIAorICAgICAgIEFkZENoaWxkKG1fdGFyZ2V0KTsKKyAgICAgICB0YXJn
ZXRGcmFtZSA9IG1fdGFyZ2V0LT5GcmFtZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgLy8gbm8g
dGFyZ2V0IHNwZWNpZmllZAorICAgICAgIHRhcmdldEZyYW1lID0gQm91bmRzKCk7CisgICAgICAg
aWYgKGhvcml6b250YWwpCisgICAgICAgICAgIHRhcmdldEZyYW1lLmJvdHRvbSAtPSBCX0hfU0NS
T0xMX0JBUl9IRUlHSFQgKyAxOworICAgICAgIGlmICh2ZXJ0aWNhbCkKKyAgICAgICAgICAgdGFy
Z2V0RnJhbWUucmlnaHQgLT0gQl9WX1NDUk9MTF9CQVJfV0lEVEggKyAxOworICAgIH0KKyAgICAK
KyAgICBpZiAoaG9yaXpvbnRhbCkgeworICAgICAgIEJSZWN0IHJlY3QgPSB0YXJnZXRGcmFtZTsK
KyAgICAgICByZWN0LnRvcCA9IHJlY3QuYm90dG9tICsgMTsKKyAgICAgICByZWN0LmJvdHRvbSA9
IHJlY3QudG9wICsgQl9IX1NDUk9MTF9CQVJfSEVJR0hUOworICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbEJhciA9IG5ldyBCU2Nyb2xsQmFyKHJlY3QsICJfSFNCXyIsIG1fdGFyZ2V0LCAwLCAxMDAw
LCBCX0hPUklaT05UQUwpOworICAgICAgIEFkZENoaWxkKG1faG9yaXpvbnRhbFNjcm9sbEJhcik7
CisgICAgfQorICAgIAorICAgIGlmICh2ZXJ0aWNhbCkgeworICAgICAgIEJSZWN0IHJlY3QgPSB0
YXJnZXRGcmFtZTsKKyAgICAgICByZWN0LmxlZnQgPSByZWN0LnJpZ2h0ICsgMTsKKyAgICAgICBy
ZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgQl9WX1NDUk9MTF9CQVJfV0lEVEg7CisgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbEJhciA9IG5ldyBCU2Nyb2xsQmFyKHJlY3QsICJfVlNCXyIsIG1fdGFyZ2V0
LCAwLCAxMDAwLCBCX1ZFUlRJQ0FMKTsKKyAgICAgICBBZGRDaGlsZChtX3ZlcnRpY2FsU2Nyb2xs
QmFyKTsKKyAgICB9CisgICAgCisgICAgbV9wcmV2aW91c1dpZHRoID0gdWludDE2KEJvdW5kcygp
LldpZHRoKCkpOworICAgIG1fcHJldmlvdXNIZWlnaHQgPSB1aW50MTYoQm91bmRzKCkuSGVpZ2h0
KCkpOworfQorCitXS1Njcm9sbFZpZXc6OldLU2Nyb2xsVmlldyhCTWVzc2FnZSogYXJjaGl2ZSkK
KyAgICA6IEJWaWV3KGFyY2hpdmUpCisgICAgLCBtX2hpZ2hsaWdodGVkKGZhbHNlKQoreworICAg
IC8vIEluIGEgc2hhbGxvdyBhcmNoaXZlLCB3ZSBtYXkgbm90IGhhdmUgYSB0YXJnZXQgYW55bW9y
ZS4gV2UgbXVzdAorICAgIC8vIGJlIHByZXBhcmVkIGZvciB0aGlzIGNhc2UKKyAgICAKKyAgICAv
LyBkb24ndCBjb25mdXNlIG91ciBzY3JvbGwgYmFycyB3aXRoIG91ciAoZXZlbnR1YWwpIHRhcmdl
dAorICAgIGludDMyIGZpcnN0QmFyID0gMDsKKyAgICBpZiAoIWFyY2hpdmUtPkZpbmRCb29sKCJf
bm9fdGFyZ2V0XyIpKSB7CisgICAgICAgbV90YXJnZXQgPSBDaGlsZEF0KDApOworICAgICAgIGZp
cnN0QmFyKys7CisgICAgfSBlbHNlCisgICAgICAgbV90YXJnZXQgPSAwOworICAgIAorICAgIC8v
IHNlYXJjaCBmb3Igb3VyIHNjcm9sbCBiYXJzCisgICAgCisgICAgbV9ob3Jpem9udGFsU2Nyb2xs
QmFyID0gMDsKKyAgICBtX3ZlcnRpY2FsU2Nyb2xsQmFyID0gMDsKKyAgICAKKyAgICBCVmlldyog
dmlldzsKKyAgICB3aGlsZSAoKHZpZXcgPSBDaGlsZEF0KGZpcnN0QmFyKyspKSkgeworICAgICAg
IEJTY3JvbGxCYXIqIGJhciA9IGR5bmFtaWNfY2FzdDxCU2Nyb2xsQmFyKj4odmlldyk7CisgICAg
ICAgaWYgKCFiYXIpCisgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgIAorICAgICAgIGlmIChi
YXItPk9yaWVudGF0aW9uKCkgPT0gQl9IT1JJWk9OVEFMKQorICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxCYXIgPSBiYXI7CisgICAgICAgZWxzZSBpZiAoYmFyLT5PcmllbnRhdGlvbigpID09
IEJfVkVSVElDQUwpCisgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXIgPSBiYXI7CisgICAg
fQorICAgIAorICAgIG1fcHJldmlvdXNXaWR0aCA9IHVpbnQxNihCb3VuZHMoKS5XaWR0aCgpKTsK
KyAgICBtX3ByZXZpb3VzSGVpZ2h0ID0gdWludDE2KEJvdW5kcygpLkhlaWdodCgpKTsKK30KKwor
V0tTY3JvbGxWaWV3Ojp+V0tTY3JvbGxWaWV3KCkKK3sKK30KKworQkFyY2hpdmFibGUqIFdLU2Ny
b2xsVmlldzo6SW5zdGFudGlhdGUoQk1lc3NhZ2UqIGFyY2hpdmUpCit7CisgICAgaWYgKHZhbGlk
YXRlX2luc3RhbnRpYXRpb24oYXJjaGl2ZSwgIldLU2Nyb2xsVmlldyIpKQorICAgICAgIHJldHVy
biBuZXcgV0tTY3JvbGxWaWV3KGFyY2hpdmUpOworICAgIAorICAgIHJldHVybiAwOworfQorCitz
dGF0dXNfdCBXS1Njcm9sbFZpZXc6OkFyY2hpdmUoQk1lc3NhZ2UqIGFyY2hpdmUsIGJvb2wgZGVl
cCkgY29uc3QKK3sKKyAgICBzdGF0dXNfdCBzdGF0dXMgPSBCVmlldzo6QXJjaGl2ZShhcmNoaXZl
LCBkZWVwKTsKKyAgICBpZiAoc3RhdHVzICE9IEJfT0spCisgICAgICAgcmV0dXJuIHN0YXR1czsK
KyAgICAKKyAgICAvLyBJZiB0aGlzIGlzIGEgZGVlcCBhcmNoaXZlLCB0aGUgQlZpZXcgY2xhc3Mg
d2lsbCB0YWtlIGNhcmUKKyAgICAvLyBvZiBvdXIgY2hpbGRyZW4uCisgICAgCisgICAgaWYgKHN0
YXR1cyA9PSBCX09LICYmICFtX3RhcmdldCkKKyAgICAgICBzdGF0dXMgPSBhcmNoaXZlLT5BZGRC
b29sKCJfbm9fdGFyZ2V0XyIsIHRydWUpOworICAgIAorICAgIC8vIFRoZSBoaWdobGlnaHRlZCBz
dGF0ZSBpcyBub3QgYXJjaGl2ZWQsIGJ1dCBzaW5jZSBpdCBpcworICAgIC8vIHVzdWFsbHkgKG9y
IHNob3VsZCBiZSkgdXNlZCB0byBpbmRpY2F0ZSBmb2N1cywgdGhpcworICAgIC8vIGlzIHByb2Jh
Ymx5IHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgICAKKyAgICByZXR1cm4gc3RhdHVzOworfQor
Cit2b2lkIFdLU2Nyb2xsVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpCit7CisgICAgQlZpZXc6OkF0
dGFjaGVkVG9XaW5kb3coKTsKKyAgICAKKyAgICBpZiAoKCFtX2hvcml6b250YWxTY3JvbGxCYXIg
JiYgIW1fdmVydGljYWxTY3JvbGxCYXIpCisgICAgICAgfHwgKG1faG9yaXpvbnRhbFNjcm9sbEJh
ciAmJiBtX3ZlcnRpY2FsU2Nyb2xsQmFyKQorICAgICAgIHx8IFdpbmRvdygpLT5Mb29rKCkgIT0g
Ql9ET0NVTUVOVF9XSU5ET1dfTE9PSykKKyAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYg
d2UgaGF2ZSBvbmx5IG9uZSBiYXIsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgYXJlIGluIHRoZQor
ICAgIC8vIGJvdHRvbSByaWdodCBlZGdlIG9mIGEgd2luZG93IHdpdGggdGhlIEJfRE9DVU1FTlRf
TE9PSyB0bworICAgIC8vIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgYmFyIHRvIGFja25vd2xlZGdl
IHRoZSByZXNpemUga25vYi4KKyAgICAKKyAgICBCUmVjdCBib3VuZHMgPSBDb252ZXJ0VG9TY3Jl
ZW4oQm91bmRzKCkpOworICAgIEJSZWN0IHdpbmRvd0JvdW5kcyA9IFdpbmRvdygpLT5GcmFtZSgp
OworICAgIAorICAgIAorICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxCYXIpCisgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsQmFyLT5SZXNpemVCeSgtQl9WX1NDUk9MTF9CQVJfV0lEVEgsIDApOwor
ICAgIGVsc2UgaWYgKG1fdmVydGljYWxTY3JvbGxCYXIpCisgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bEJhci0+UmVzaXplQnkoMCwgLUJfSF9TQ1JPTExfQkFSX0hFSUdIVCk7Cit9CisKK3ZvaWQgV0tT
Y3JvbGxWaWV3OjpEZXRhY2hlZEZyb21XaW5kb3coKQoreworICAgIEJWaWV3OjpEZXRhY2hlZEZy
b21XaW5kb3coKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OkFsbEF0dGFjaGVkKCkKK3sKKyAg
ICBCVmlldzo6QWxsQXR0YWNoZWQoKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OkFsbERldGFj
aGVkKCkKK3sKKyAgICBCVmlldzo6QWxsRGV0YWNoZWQoKTsKK30KKworQlNjcm9sbEJhciogV0tT
Y3JvbGxWaWV3OjpTY3JvbGxCYXIob3JpZW50YXRpb24gcG9zdHVyZSkgY29uc3QKK3sKKyAgICBp
ZiAocG9zdHVyZSA9PSBCX0hPUklaT05UQUwpCisgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNj
cm9sbEJhcjsKKyAgICAKKyAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbEJhcjsKK30KKworU2Ny
b2xsYmFyTW9kZSBXS1Njcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVy
ZSkKK3sKKyAgICAvLyByZXR1cm4gU2Nyb2xsYmFyQXV0bzsKKyAgICAKKyAgICBpZiAocG9zdHVy
ZSA9PSBCX0hPUklaT05UQUwpIHsKKyAgICAgICAvL3ByaW50ZigiKysrKyBIIGdldCAlZFxuIiwg
bV9ob3Jpem9udGFsU2Nyb2xsQmFyTW9kZSk7CisgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNj
cm9sbEJhck1vZGU7CisgICAgfQorICAgIAorICAgIC8vcHJpbnRmKCIrKysrIFYgZ2V0ICVkXG4i
LCBtX3ZlcnRpY2FsU2Nyb2xsQmFyTW9kZSk7ICAgCisgICAgcmV0dXJuIG1fdmVydGljYWxTY3Jv
bGxCYXJNb2RlOyAgIAorfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6U2V0U2Nyb2xsQmFyTW9kZShv
cmllbnRhdGlvbiBwb3N0dXJlLCBTY3JvbGxiYXJNb2RlIG1vZGUpCit7CisgICAgaWYgKHBvc3R1
cmUgPT0gQl9IT1JJWk9OVEFMICYmIG1vZGUgIT0gbV9ob3Jpem9udGFsU2Nyb2xsQmFyTW9kZSkg
eworICAgICAgICAKKyAgICAgICAvL3ByaW50ZigiKysrKyBIIGN1cnJlbnQgJWxkIHdhbnQgJWxk
XG4iLG1faG9yaXpvbnRhbFNjcm9sbEJhck1vZGUsbW9kZSk7CisgICAgICAgIAorICAgICAgIGlm
IChtb2RlID09IFNjcm9sbGJhckFsd2F5c09uIHx8IG1vZGUgPT0gU2Nyb2xsYmFyQXV0bykgewor
ICAgICAgICAgICAvL3ByaW50ZigiKysrKysgSCBTaG93KCVkKVxuIiwgKGludCl0aGlzKTsKKyAg
ICAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbEJhci0+SXNIaWRkZW4oKSkgeworICAgICAg
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsQmFyLT5TaG93KCk7CisgICAgICAgICAgICAgICBp
ZiAoVGFyZ2V0KCkpCisgICAgICAgICAgICAgICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KDAsIC1C
X0hfU0NST0xMX0JBUl9IRUlHSFQpOworICAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlm
IChtb2RlID09IFNjcm9sbGJhckFsd2F5c09mZikgeworICAgICAgICAgICAvL3ByaW50ZigiKysr
KysgSCBIaWRlKCVkKVxuIiwgKGludCl0aGlzKTsgICAgICAgIAorICAgICAgICAgICBpZiAoIW1f
aG9yaXpvbnRhbFNjcm9sbEJhci0+SXNIaWRkZW4oKSkgeworICAgICAgICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsQmFyLT5IaWRlKCk7CisgICAgICAgICAgICAgICBpZiAoVGFyZ2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KDAsIEJfSF9TQ1JPTExfQkFSX0hF
SUdIVCk7CisgICAgICAgICAgIH0KKyAgICAgICB9ICAgIAorICAgICAgIAorICAgICAgIC8vc2V0
IHRoZSBuZXcgbW9kZS4KKyAgICAgICBtX2hvcml6b250YWxTY3JvbGxCYXJNb2RlID0gbW9kZTsg
ICAgCisgICAgfSAKKyAgICAKKyAgICAKKyAgICAKKyAgICBpZiAocG9zdHVyZSA9PSBCX1ZFUlRJ
Q0FMICYmIG1vZGUgIT0gbV92ZXJ0aWNhbFNjcm9sbEJhck1vZGUpIHsKKyAgICAgICAvL3ByaW50
ZigiKysrKyBWIGN1cnJlbnQgJWxkIHdhbnQgJWxkXG4iLCBtX3ZlcnRpY2FsU2Nyb2xsQmFyTW9k
ZSwgbW9kZSk7CisgICAgICAgIAorICAgICAgIGlmIChtb2RlID09IFNjcm9sbGJhckFsd2F5c09u
IHx8IG1vZGUgPT0gU2Nyb2xsYmFyQXV0bykgeworICAgICAgICAgICAvL3ByaW50ZigiKysrKysg
ViBTaG93KCVkKVxuIiwgKGludCl0aGlzKTsKKyAgICAgICAgICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxCYXItPklzSGlkZGVuKCkpIHsKKyAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXIt
PlNob3coKTsKKyAgICAgICAgICAgICAgIGlmIChUYXJnZXQoKSkgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICBUYXJnZXQoKS0+UmVzaXplQnkoLUJfVl9TQ1JPTExfQkFSX1dJRFRILCAw
KTsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAobW9kZSA9PSBTY3JvbGxiYXJB
bHdheXNPZmYpIHsgICAgICAgIAorICAgICAgICAgICAvL3ByaW50ZigiKysrKysgViBIaWRlKCVk
KVxuIiwgKGludCl0aGlzKTsKKyAgICAgICAgICAgaWYgKCFtX3ZlcnRpY2FsU2Nyb2xsQmFyLT5J
c0hpZGRlbigpKSB7CisgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsQmFyLT5IaWRlKCk7
CisgICAgICAgICAgICAgICBpZiAoVGFyZ2V0KCkpICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgVGFyZ2V0KCktPlJlc2l6ZUJ5KEJfVl9TQ1JPTExfQkFSX1dJRFRILCAwKTsKKyAgICAg
ICAgICAgfQorICAgICAgIH0gICAgCisgICAgICAgCisgICAgICAgLy9zZXQgdGhlIG5ldyBtb2Rl
OgorICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXJNb2RlID0gbW9kZTsgICAgICAgICAgICAKKyAg
ICB9IAorICAgIAorfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6U2V0VGFyZ2V0KEJWaWV3KiB0YXJn
ZXQpCit7CisgICAgaWYgKG1fdGFyZ2V0ID09IHRhcmdldCkKKyAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKG1fdGFyZ2V0KSB7CisgICAgICAgbV90YXJnZXQtPlRhcmdldGVkQnlTY3JvbGxW
aWV3KDApOworICAgICAgIFJlbW92ZUNoaWxkKG1fdGFyZ2V0KTsKKyAgICAgICAgCisgICAgICAg
Ly8gd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBkZWxldGUgdGhlIHZpZXcKKyAgICB9CisgICAgCisg
ICAgbV90YXJnZXQgPSB0YXJnZXQ7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbEJhcikKKyAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxCYXItPlNldFRhcmdldCh0YXJnZXQpOworICAgIGlmICht
X3ZlcnRpY2FsU2Nyb2xsQmFyKQorICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXItPlNldFRhcmdl
dCh0YXJnZXQpOworICAgIAorICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAvL3RhcmdldC0+VGFy
Z2V0ZWRCeVNjcm9sbFZpZXcodGhpcyk7CisgICAgICAgIAorICAgICAgIEFkZENoaWxkKHRhcmdl
dCwgQ2hpbGRBdCgwKSk7CisgICAgICAgIC8vIFRoaXMgd2F5LCB3ZSBhcmUgbWFraW5nIHN1cmUg
dGhhdCB0aGUgdGFyZ2V0IHdpbGwKKyAgICAgICAgLy8gYmUgYWRkZWQgdG9wIG1vc3QgaW4gdGhl
IGxpc3QgKHdoaWNoIGlzIGltcG9ydGFudAorICAgICAgICAvLyBmb3IgdW5hcmNoaXZpbmcpCisg
ICAgfQorfQorCitCVmlldyogV0tTY3JvbGxWaWV3OjpUYXJnZXQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3RhcmdldDsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6Ok1lc3NhZ2VSZWNlaXZlZChC
TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UtPndoYXQpIHsKKyAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICBCVmlldzo6TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UpOwor
ICAgIH0KK30KKwordm9pZCBXS1Njcm9sbFZpZXc6Ok1vdXNlRG93bihCUG9pbnQgcG9pbnQpCit7
CisgICAgQlZpZXc6Ok1vdXNlRG93bihwb2ludCk7Cit9CisKK3ZvaWQgV0tTY3JvbGxWaWV3OjpN
b3VzZVVwKEJQb2ludCBwb2ludCkKK3sKKyAgICBCVmlldzo6TW91c2VVcChwb2ludCk7Cit9CisK
K3ZvaWQgV0tTY3JvbGxWaWV3OjpNb3VzZU1vdmVkKEJQb2ludCBwb2ludCwgdWludDMyIGNvZGUs
IGNvbnN0IEJNZXNzYWdlKiBkcmFnTWVzc2FnZSkKK3sKKyAgICBCVmlldzo6TW91c2VNb3ZlZChw
b2ludCwgY29kZSwgZHJhZ01lc3NhZ2UpOworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6RnJhbWVN
b3ZlZChCUG9pbnQgcG9zaXRpb24pCit7CisgICAgQlZpZXc6OkZyYW1lTW92ZWQocG9zaXRpb24p
OworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6UmVzaXplVG9QcmVmZXJyZWQoKQoreworICAgIEJW
aWV3OjpSZXNpemVUb1ByZWZlcnJlZCgpOworfQorCit2b2lkIFdLU2Nyb2xsVmlldzo6R2V0UHJl
ZmVycmVkU2l6ZShmbG9hdCogX3dpZHRoLCBmbG9hdCogX2hlaWdodCkKK3sKKyAgICBCUmVjdCBm
cmFtZSA9IENhbGNGcmFtZShtX3RhcmdldCwgbV9ob3Jpem9udGFsU2Nyb2xsQmFyLCBtX3ZlcnRp
Y2FsU2Nyb2xsQmFyKTsKKyAgICAKKyAgICBpZiAobV90YXJnZXQpIHsKKyAgICAgICBmbG9hdCB3
aWR0aCwgaGVpZ2h0OworICAgICAgIG1fdGFyZ2V0LT5HZXRQcmVmZXJyZWRTaXplKCZ3aWR0aCwg
JmhlaWdodCk7CisgICAgICAgIAorICAgICAgIGZyYW1lLnJpZ2h0ICs9IHdpZHRoIC0gbV90YXJn
ZXQtPkZyYW1lKCkuV2lkdGgoKTsKKyAgICAgICBmcmFtZS5ib3R0b20gKz0gaGVpZ2h0IC0gbV90
YXJnZXQtPkZyYW1lKCkuSGVpZ2h0KCk7CisgICAgfQorICAgIAorICAgIGlmIChfd2lkdGgpCisg
ICAgICAgKl93aWR0aCA9IGZyYW1lLldpZHRoKCk7CisgICAgaWYgKF9oZWlnaHQpCisgICAgICAg
Kl9oZWlnaHQgPSBmcmFtZS5IZWlnaHQoKTsKK30KKworCisvKiogVGhpcyBzdGF0aWMgbWV0aG9k
IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBmcmFtZSB0aGF0IHRoZQorICogICAgU2Nyb2xsVmll
dyB3aWxsIGNvdmVyIGRlcGVuZGluZyBvbiB0aGUgZnJhbWUgb2YgaXRzIHRhcmdldAorICogICAg
CisgKiAgICBJdCBpcyB1c2VkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgYXQgb3RoZXIgcGxhY2Vz
LgorICovCisKK0JSZWN0IFdLU2Nyb2xsVmlldzo6Q2FsY0ZyYW1lKEJWaWV3KiB0YXJnZXQsIGJv
b2wgaG9yaXpvbnRhbCwgYm9vbCB2ZXJ0aWNhbCkKK3sKKyAgICBCUmVjdCBmcmFtZSA9IHRhcmdl
dCA/IHRhcmdldC0+RnJhbWUoKSA6IEJSZWN0KDAsIDAsIDgwLCA4MCk7CisgICAgCisgICAgaWYg
KHZlcnRpY2FsKQorICAgICAgIGZyYW1lLnJpZ2h0ICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOwor
ICAgIGlmIChob3Jpem9udGFsKQorICAgICAgIGZyYW1lLmJvdHRvbSArPSBCX0hfU0NST0xMX0JB
Ul9IRUlHSFQ7CisKKyAgICBpZiAodmVydGljYWwpCisgICAgICAgIGZyYW1lLnJpZ2h0Kys7Cisg
ICAgaWYgKGhvcml6b250YWwpCisgICAgICAgIGZyYW1lLmJvdHRvbSsrOworICAgIAorICAgIHJl
dHVybiBmcmFtZTsKK30KKworCisvKiogVGhpcyBtZXRob2QgY2hhbmdlcyB0aGUgImZsYWdzIiBh
cmd1bWVudCBhcyBwYXNzZWQgb24gdG8KKyAqICAgIHRoZSBCVmlldyBjb25zdHJ1Y3Rvci4KKyAq
LworCitpbnQzMiBXS1Njcm9sbFZpZXc6Ok1vZGlmeUZsYWdzKGludDMyIGZsYWdzKQoreworICAg
IHJldHVybiBmbGFncyAmIH4oQl9XSUxMX0RSQVcgfCBCX0ZSQU1FX0VWRU5UUyB8IEJfRlVMTF9V
UERBVEVfT05fUkVTSVpFKTsKK30KKwordm9pZCBXS1Njcm9sbFZpZXc6OldpbmRvd0FjdGl2YXRl
ZChib29sIGFjdGl2ZSkKK3sKKyAgICBpZiAobV9oaWdobGlnaHRlZCkKKyAgICAgICBJbnZhbGlk
YXRlKCk7CisgICAgCisgICAgQlZpZXc6OldpbmRvd0FjdGl2YXRlZChhY3RpdmUpOworfQorCit2
b2lkIFdLU2Nyb2xsVmlldzo6TWFrZUZvY3VzKGJvb2wgc3RhdGUpCit7CisgICAgQlZpZXc6Ok1h
a2VGb2N1cyhzdGF0ZSk7Cit9CisKK0JIYW5kbGVyKiBXS1Njcm9sbFZpZXc6OlJlc29sdmVTcGVj
aWZpZXIoQk1lc3NhZ2UqIG1zZywgaW50MzIgaW5kZXgsIEJNZXNzYWdlKiBzcGVjaWZpZXIsIGlu
dDMyIGZvcm0sIGNvbnN0IGNoYXIqIHByb3BlcnR5KQoreworICAgIHJldHVybiBCVmlldzo6UmVz
b2x2ZVNwZWNpZmllcihtc2csIGluZGV4LCBzcGVjaWZpZXIsIGZvcm0sIHByb3BlcnR5KTsKK30K
Kworc3RhdHVzX3QgV0tTY3JvbGxWaWV3OjpHZXRTdXBwb3J0ZWRTdWl0ZXMoQk1lc3NhZ2UqIGRh
dGEpCit7CisgICAgcmV0dXJuIEJWaWV3OjpHZXRTdXBwb3J0ZWRTdWl0ZXMoZGF0YSk7Cit9CisK
K0JTaXplIFdLU2Nyb2xsVmlldzo6TWluU2l6ZSgpCit7CisgICAgLy8gVE9ETzogVGhpcyBpcyBu
b3QgeWV0IGNvcnJlY3QuCisgICAgQlNpemUgc2l6ZSA9IChtX3RhcmdldCA/IG1fdGFyZ2V0LT5N
aW5TaXplKCkgOiBCU2l6ZSgtMSwgLTEpKTsKKyAgICAKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bEJhcikKKyAgICAgICBzaXplLndpZHRoICs9IEJfVl9TQ1JPTExfQkFSX1dJRFRIOworICAgIGlm
IChtX2hvcml6b250YWxTY3JvbGxCYXIpCisgICAgICAgc2l6ZS5oZWlnaHQgKz0gQl9IX1NDUk9M
TF9CQVJfSEVJR0hUOworICAgIAorICAgIHJldHVybiBCTGF5b3V0VXRpbHM6OkNvbXBvc2VTaXpl
KEV4cGxpY2l0TWluU2l6ZSgpLCBzaXplKTsKK30KKworQlNpemUgV0tTY3JvbGxWaWV3OjpQcmVm
ZXJyZWRTaXplKCkKK3sKKyAgICAvLyBUT0RPOiBUaGlzIGlzIG5vdCB5ZXQgY29ycmVjdC4KKyAg
ICBCU2l6ZSBzaXplID0gKG1fdGFyZ2V0ID8gbV90YXJnZXQtPlByZWZlcnJlZFNpemUoKSA6IEJT
aXplKC0xLCAtMSkpOworICAgIAorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsQmFyKQorICAgICAg
IHNpemUud2lkdGggKz0gQl9WX1NDUk9MTF9CQVJfV0lEVEg7CisgICAgaWYgKG1faG9yaXpvbnRh
bFNjcm9sbEJhcikKKyAgICAgICBzaXplLmhlaWdodCArPSBCX0hfU0NST0xMX0JBUl9IRUlHSFQ7
CisgICAgCisgICAgcmV0dXJuIEJMYXlvdXRVdGlsczo6Q29tcG9zZVNpemUoRXhwbGljaXRNaW5T
aXplKCksIHNpemUpOworfQorCitzdGF0dXNfdCBXS1Njcm9sbFZpZXc6OlBlcmZvcm0ocGVyZm9y
bV9jb2RlIGQsIHZvaWQqIGFyZykKK3sKKyAgICByZXR1cm4gQlZpZXc6OlBlcmZvcm0oZCwgYXJn
KTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9XS1Njcm9sbFZpZXcu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjZjQ1OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvV0tTY3JvbGxWaWV3LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqKiBD
b3B5cmlnaHQgMjAwNCwgT3BlbkJlT1MuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiogRGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBPcGVuQmVPUyBMaWNlbnNlLgorICovCisjaWZu
ZGVmIF9XS19TQ1JPTExfVklFV19ICisjZGVmaW5lIF9XS19TQ1JPTExfVklFV19ICisKKy8qKiBU
aGUgV0tTY3JvbGxWaWV3IGlzIGEgY29udmVuaWVuY2UgY2xhc3MgdG8gYWRkIGEgc2Nyb2xsaW5n
CisgKiAgbWVjaGFuaXNtIHRvIHRoZSB0YXJnZXQgdmlldy4KKyAqLworCisjaW5jbHVkZSA8U2Ny
b2xsQmFyLmg+CisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK2NsYXNzIFdLU2Nyb2xsVmlldyA6IHB1YmxpYyBCVmlldyB7CitwdWJsaWM6Cisg
ICAgV0tTY3JvbGxWaWV3KGNvbnN0IGNoYXIqIG5hbWUsIEJWaWV3KiB0YXJnZXQsIHVpbnQzMiBy
ZXNpemluZ01vZGUgPSBCX0ZPTExPV19MRUZUIHwgQl9GT0xMT1dfVE9QLCB1aW50MzIgZmxhZ3Mg
PSAwKTsKKyAgICBXS1Njcm9sbFZpZXcoQk1lc3NhZ2UqIGFyY2hpdmUpOworICAgIHZpcnR1YWwg
fldLU2Nyb2xsVmlldygpOworICAgIAorICAgIHN0YXRpYyBCQXJjaGl2YWJsZSogSW5zdGFudGlh
dGUoQk1lc3NhZ2UqIGFyY2hpdmUpOworICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgQXJjaGl2ZShC
TWVzc2FnZSogYXJjaGl2ZSwgYm9vbCBkZWVwID0gdHJ1ZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgICAgICAgIEF0dGFjaGVkVG9XaW5kb3coKTsKKworICAgIEJTY3JvbGxCYXIqICAgICAg
ICAgU2Nyb2xsQmFyKG9yaWVudGF0aW9uIHBvc3R1cmUpIGNvbnN0OworICAgIFNjcm9sbGJhck1v
ZGUgICAgICAgU2Nyb2xsQmFyTW9kZShvcmllbnRhdGlvbiBwb3N0dXJlKTsKKyAgICB2b2lkICAg
ICAgICAgICAgICAgIFNldFNjcm9sbEJhck1vZGUob3JpZW50YXRpb24gcG9zdHVyZSwgU2Nyb2xs
YmFyTW9kZSBtb2RlKTsKKworICAgIHZvaWQgICAgICAgICAgICAgICAgU2V0VGFyZ2V0KEJWaWV3
KiB0YXJnZXQpOworICAgIEJWaWV3KiAgICAgICAgICAgICAgVGFyZ2V0KCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgICAgICAgIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSk7
CisgICAgdmlydHVhbCB2b2lkICAgICAgICBNb3VzZURvd24oQlBvaW50IHBvaW50KTsKKworICAg
IHZpcnR1YWwgdm9pZCAgICAgICAgV2luZG93QWN0aXZhdGVkKGJvb2wgYWN0aXZlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgICAgICAgIE1vdXNlVXAoQlBvaW50IHBvaW50KTsKKyAgICB2aXJ0dWFsIHZv
aWQgICAgICAgIE1vdXNlTW92ZWQoQlBvaW50IHBvaW50LCB1aW50MzIgY29kZSwgY29uc3QgQk1l
c3NhZ2UqIG1zZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgICAgICAgIERldGFjaGVkRnJvbVdpbmRv
dygpOworICAgIHZpcnR1YWwgdm9pZCAgICAgICAgQWxsQXR0YWNoZWQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgICAgICAgIEFsbERldGFjaGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgICAgICAgIEZy
YW1lTW92ZWQoQlBvaW50IHBvc2l0aW9uKTsKKworICAgIHZpcnR1YWwgQkhhbmRsZXIqICAgUmVz
b2x2ZVNwZWNpZmllcihCTWVzc2FnZSogbWVzc2FnZSwgaW50MzIgaW5kZXgsIEJNZXNzYWdlKiBz
cGVjaWZpZXIsIGludDMyIGZvcm0sIGNvbnN0IGNoYXIqIHByb3BlcnR5KTsKKworICAgIHZpcnR1
YWwgdm9pZCAgICAgICAgUmVzaXplVG9QcmVmZXJyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgICAg
ICAgIEdldFByZWZlcnJlZFNpemUoZmxvYXQqIF93aWR0aCwgZmxvYXQqIF9oZWlnaHQpOworICAg
IHZpcnR1YWwgdm9pZCAgICAgICAgTWFrZUZvY3VzKGJvb2wgc3RhdGUgPSB0cnVlKTsKKyAgICB2
aXJ0dWFsIHN0YXR1c190ICAgIEdldFN1cHBvcnRlZFN1aXRlcyhCTWVzc2FnZSogZGF0YSk7CisK
KyAgICB2aXJ0dWFsIEJTaXplICAgICAgIE1pblNpemUoKTsKKyAgICB2aXJ0dWFsIEJTaXplICAg
ICAgIFByZWZlcnJlZFNpemUoKTsKKworICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgUGVyZm9ybShw
ZXJmb3JtX2NvZGUgZCwgdm9pZCogYXJnKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
QlZpZXc7CisgICAgCisgICAgc3RhdGljIEJSZWN0ICAgICAgICBDYWxjRnJhbWUoQlZpZXcqIHRh
cmdldCwgYm9vbCBob3Jpem9udGFsLCBib29sIHZlcnRpY2FsKTsKKyAgICBzdGF0aWMgaW50MzIg
ICAgICAgIE1vZGlmeUZsYWdzKGludDMyIGZsYWdzKTsKKworICAgIEJWaWV3KiAgICAgICAgICAg
ICAgbV90YXJnZXQ7CisgICAgQlNjcm9sbEJhciogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxC
YXI7CisgICAgQlNjcm9sbEJhciogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsQmFyOworICAgIHVp
bnQxNiAgICAgICAgICAgICAgbV9wcmV2aW91c1dpZHRoOworICAgIHVpbnQxNiAgICAgICAgICAg
ICAgbV9wcmV2aW91c0hlaWdodDsKKyAgICBib29sICAgICAgICAgICAgICAgIG1faGlnaGxpZ2h0
ZWQ7CisKKyAgICBTY3JvbGxiYXJNb2RlICAgICAgIG1fdmVydGljYWxTY3JvbGxCYXJNb2RlOwor
ICAgIFNjcm9sbGJhck1vZGUgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsQmFyTW9kZTsgICAgICAg
Cit9OworCisjZW5kaWYgIC8qIF9XS19TQ1JPTExfVklFV19IICovCisKLS0gCjEuNi4zLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33093</attachid>
            <date>2009-07-20 10:28:06 -0700</date>
            <delta_ts>2009-07-21 02:47:20 -0700</delta_ts>
            <desc>Patch to add a first bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-first-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>19532</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA5YTQxNmFiYzYwNmVhYTVkN2RkZDkzNmVkZDhjNjc1Y2I4YWFkNTRjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IE1vbiwgMjAgSnVsIDIwMDkgMTk6MjM6NDkgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIGZpcnN0IGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzEgKysr
KysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcCB8ICAyMDUg
KysrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9h
cmRIYWlrdS5oICAgfCAgIDc3ICsrKysrKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29v
a2llSmFySGFpa3UuY3BwIHwgICA2MSArKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
dXJzb3JIYWlrdS5jcHAgICAgfCAgMjM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1
IGZpbGVzIGNoYW5nZWQsIDY1MSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJIYWlr
dS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1cnNvckhh
aWt1LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggOTQyMGU2NS4uOTAyZGQ5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAwOS0wNy0yMCAgTWF4
aW1lIFNpbW9uICA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIGZpcnN0IG9mIEhhaWt1LXNwZWNp
ZmljIGZpbGVzIGZvciBXZWJDb3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY5ODgKKworICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0NsaXBib2Fy
ZEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Q2xp
cGJvYXJkSGFpa3UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmNsZWFyRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Y2xlYXJBbGxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZEhhaWt1OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZEhhaWt1Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZmlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmRyYWdMb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkSGFpa3U6OmRyYWdJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkSGFpa3U6OnNldERyYWdJbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkSGFpa3U6OmNyZWF0ZURyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRI
YWlrdTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZEhhaWt1Ojp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6
d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6aGFzRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZEhhaWt1Ojp+Q2xpcGJvYXJkSGFpa3UpOgorICAgICAgICAqIHBsYXRmb3JtL2hh
aWt1L0Nvb2tpZUphckhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L0N1cnNvckhhaWt1LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpDdXJzb3I6On5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojptb3ZlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyb3NzQ3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OmhhbmRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6aUJlYW1DdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6d2FpdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpoZWxwQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OmVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6bm9ydGhSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhFYXN0UmVz
aXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoV2VzdFJlc2l6ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzb3V0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpz
b3V0aEVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291dGhXZXN0UmVzaXpl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Ondlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6bm9ydGhTb3V0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjplYXN0
V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVhc3RTb3V0aFdlc3RS
ZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0U291dGhFYXN0UmVzaXpl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtblJlc2l6ZUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpyb3dSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxU
ZXh0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNlbGxDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGV4dE1lbnVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9Ecm9wQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6cHJv
Z3Jlc3NDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6YWxpYXNDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6bm9uZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3RBbGxvd2VkQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6Onpvb21JbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjp6
b29tT3V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmdyYWJDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Z3JhYmJpbmdDdXJzb3IpOgorCiAyMDA5LTA3LTE2ICBGdW1pdG9zaGkgVWthaSAg
PHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hN2RhODU4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkSGFpa3Uu
aCIKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisKKyNp
bmNsdWRlIDxhcHAvQ2xpcGJvYXJkLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUg
PFN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2xpcGJvYXJkSGFpa3U6OkNs
aXBib2FyZEhhaWt1KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIGJvb2wgZm9yRHJhZ2dp
bmcpIAorICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgZm9yRHJhZ2dpbmcpCit7Cit9CisKK3ZvaWQg
Q2xpcGJvYXJkSGFpa3U6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgQk1l
c3NhZ2UqIGRhdGE7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAg
ZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpOworICAgICAgICBpZiAoZGF0YSkgeworICAgICAg
ICAgICAgZGF0YS0+UmVtb3ZlTmFtZShCU3RyaW5nKHR5cGUpLlN0cmluZygpKTsKKyAgICAgICAg
ICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIH0KKyAgICAgICAgYmVfY2xpcGJv
YXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OmNsZWFyQWxs
RGF0YSgpIAoreworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBiZV9j
bGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAg
ICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQorfQorCitTdHJpbmcgQ2xpcGJvYXJk
SGFpa3U6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdCAK
K3sKKyAgICBCU3RyaW5nIHJlc3VsdDsKKyAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgQk1lc3Nh
Z2UqIGRhdGE7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgZGF0
YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgpOworICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAg
ICAgaWYgKGRhdGEtPkZpbmRTdHJpbmcoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSwgJnJlc3VsdCkg
PT0gQl9PSykKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Jvb2wgQ2xpcGJvYXJkSGFpa3U6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIGRhdGEpIAoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQk1l
c3NhZ2UqIGJkYXRhOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAg
IGJkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCk7CisgICAgICAgIGlmIChiZGF0YSkgeworICAg
ICAgICAgICAgYmRhdGEtPlJlbW92ZU5hbWUoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSk7CisgICAg
ICAgICAgICBpZiAoYmRhdGEtPkFkZFN0cmluZyhCU3RyaW5nKHR5cGUpLlN0cmluZygpLCBCU3Ry
aW5nKGRhdGEpKSA9PSBCX09LKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgYmVfY2xpcGJvYXJkLT5Db21taXQoKTsKKyAgICAgICAgYmVfY2xpcGJv
YXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBFeHRl
bnNpb25zIGJleW9uZCBJRSdzIEFQSS4KK0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRIYWlrdTo6
dHlwZXMoKSBjb25zdCAKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIEJNZXNz
YWdlKiBkYXRhOworCisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIGRh
dGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKTsKKyAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAg
ICAgIGNoYXIqIG5hbWU7CisgICAgICAgICAgICB1aW50MzIgdHlwZTsKKyAgICAgICAgICAgIGlu
dDMyIGNvdW50OworCisgICAgICAgICAgICBmb3IgKGludDMyIGkgPSAwOyBkYXRhLT5HZXRJbmZv
KEJfQU5ZX1RZUEUsIGksICZuYW1lLCAmdHlwZSwgJmNvdW50KSA9PSBCX09LOyBpKyspCisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFkZChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBiZV9jbGlw
Ym9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NS
ZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZEhhaWt1OjpmaWxlcygpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQgQ2xpcGJvYXJkSGFp
a3U6OmRyYWdMb2NhdGlvbigpIGNvbnN0IAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBJbnRQb2ludCgwLCAwKTsKK30KKworQ2FjaGVkSW1hZ2UqIENsaXBib2FyZEhhaWt1
OjpkcmFnSW1hZ2UoKSBjb25zdCAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOyAKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdl
KiwgY29uc3QgSW50UG9pbnQmKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitOb2Rl
KiBDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlRWxlbWVudCgpIAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7IAorfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpzZXREcmFn
SW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworRHJhZ0ltYWdlUmVmIENsaXBib2FyZEhhaWt1OjpjcmVhdGVEcmFnSW1hZ2Uo
SW50UG9pbnQmIGRyYWdMb2NhdGlvbikgY29uc3QKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6ZGVjbGFyZUFuZFdyaXRl
RHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0
ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0ZVJhbmdlKFJhbmdlKiwg
RnJhbWUqKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENsaXBib2FyZEhh
aWt1OjpoYXNEYXRhKCkgCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBCTWVzc2Fn
ZSogZGF0YTsKKworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBkYXRh
ID0gYmVfY2xpcGJvYXJkLT5EYXRhKCk7CisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAg
cmVzdWx0ID0gIWRhdGEtPklzRW1wdHkoKTsKKworICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9j
aygpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlr
dS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNGE1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgKQEAgLTAsMCArMSw3NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQ2xpcGJvYXJkSGFpa3VfaAorI2RlZmluZSBDbGlwYm9hcmRI
YWlrdV9oCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kuaCIKKworI2luY2x1ZGUgPHN1cHBvcnQvTG9ja2VyLmg+CisjaW5jbHVkZSA8YXBw
L0NsaXBib2FyZC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBDYWNoZWRJ
bWFnZTsKKworICAgIC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRy
YWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUuCisgICAgY2xhc3MgQ2xpcGJvYXJkSGFpa3UgOiBw
dWJsaWMgQ2xpcGJvYXJkIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsaXBib2FyZEhhaWt1PiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9v
bCBmb3JEcmFnZ2luZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkcG90UmVmKG5l
dyBDbGlwYm9hcmRIYWlrdShwb2xpY3ksIGZvckRyYWdnaW5nKSk7CisgICAgICAgIH0KKyAgICAg
ICAgfkNsaXBib2FyZEhhaWt1KCkgeyB9CisKKyAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlKTsKKyAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKKyAgICAgICAgU3Ry
aW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRh
KTsKKworICAgICAgICAvLyBFeHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSS4KKyAgICAgICAgSGFz
aFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxG
aWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKKworICAgICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24o
KSBjb25zdDsKKyAgICAgICAgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgpIGNvbnN0OworICAgICAg
ICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CisgICAg
ICAgIE5vZGUqIGRyYWdJbWFnZUVsZW1lbnQoKTsKKyAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2VF
bGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOworCisgICAgICAgIHZpcnR1YWwgRHJhZ0lt
YWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgZHJhZ0xvYykgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKKworICAgICAgICB2aXJ0dWFs
IGJvb2wgaGFzRGF0YSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2xpcGJvYXJkSGFpa3Uo
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LCBib29sIGZvckRyYWdnaW5nKTsKKyAgICB9OworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2xpcGJvYXJkSGFpa3VfaAorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjczNTE5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0Nvb2tpZUphckhhaWt1LmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFNob3VsZG4ndCB0
aGlzIGJlIHNhdmVkIHRvIGFuZCByZXN0b3JlZCBmcm9tIGRpc2sgdG9vPworc3RhdGljIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKKwordm9pZCBzZXRDb29raWVzKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgLypwb2xpY3lVUkwqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBjb29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOworfQorCitTdHJpbmcg
Y29va2llcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJs
LnN0cmluZygpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZCgpCit7CisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgc2V0dGluZworICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvQ3Vyc29ySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmYmQwNwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwCkBAIC0w
LDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPGFwcC9BcHBEZWZzLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDdXJzb3I6OkN1cnNvcihQbGF0Zm9ybUN1cnNvciBjdXJzb3IpCisg
ICAgOiBtX2ltcGwoY3Vyc29yKQoreworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3Im
IG90aGVyKQorICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKK3sKK30KKworQ3Vyc29yOjp+Q3Vy
c29yKCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShj
b25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG1faW1wbCA9IG90aGVyLm1faW1wbDsKKyAgICBy
ZXR1cm4qIHRoaXM7Cit9CisKK3N0YXRpYyBDdXJzb3IgZ2xvYmFsX2N1cnNvcihzdGF0aWNfY2Fz
dDxQbGF0Zm9ybUN1cnNvcj4oQl9DVVJTT1JfU1lTVEVNX0RFRkFVTFQpKTsKK3N0YXRpYyBDdXJz
b3IgaWJlYW1fY3Vyc29yKHN0YXRpY19jYXN0PFBsYXRmb3JtQ3Vyc29yPihCX0NVUlNPUl9JX0JF
QU0pKTsKKworY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xv
YmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCit7Cisg
ICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigp
Cit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaUJlYW1D
dXJzb3IoKQoreworICAgIHJldHVybiBpYmVhbV9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
d2FpdEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgaGVscEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVy
biBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9y
dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9j
dXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNp
emVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIHdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVh
c3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29sdW1uUmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29y
JiByb3dSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9j
dXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY2VsbEN1cnNvcigpCit7CisgICAgcmV0dXJuIGds
b2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3IoKQorewor
ICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNv
cigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29w
eUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNv
ciYgcHJvZ3Jlc3NDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsK
K30KKworY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJzb3IoKQorewor
ICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHpvb21PdXRDdXJz
b3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGdy
YWJDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4yCgo=
</data>
<flag name="review"
          id="17422"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33166</attachid>
            <date>2009-07-21 02:47:20 -0700</date>
            <delta_ts>2009-07-21 03:26:51 -0700</delta_ts>
            <desc>Patch to add a first bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-first-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>19438</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBmM2EyOTk2NmU0ZjdlYWU5NjljZWQzMTllYTMyYmQ1NTU5NWU3YTFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMjEgSnVsIDIwMDkgMTE6MDg6MjEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIGZpcnN0IGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzEgKysr
KysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcCB8ICAyMDcg
KysrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9h
cmRIYWlrdS5oICAgfCAgIDczICsrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29r
aWVKYXJIYWlrdS5jcHAgfCAgIDYxICsrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1
cnNvckhhaWt1LmNwcCAgICB8ICAyMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUg
ZmlsZXMgY2hhbmdlZCwgNjQ5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFp
a3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA5NDIwZTY1Li4yZDNkOTRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDA5LTA3LTIxICBNYXhp
bWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgZmlyc3QgYnVuY2ggb2YgSGFpa3Ut
c3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4OAorCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ2xp
cGJvYXJkSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1
OjpDbGlwYm9hcmRIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpjbGVhckFsbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmdldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkSGFpa3U6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojpm
aWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0xvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZEhhaWt1OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcGJvYXJkSGFpa3U6OndyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhh
aWt1Ojp3cml0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpoYXNE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkSGFpa3U6On5DbGlwYm9hcmRIYWlrdSk6CisgICAgICAgICogcGxhdGZv
cm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cnNvcjo6fkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpwb2ludGVyQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6Om1vdmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jvc3NDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFuZEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjppQmVhbUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjp3YWl0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Omhl
bHBDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6ZWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpub3J0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVh
c3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0UmVzaXplQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OnNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNvdXRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFdlc3RS
ZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2VzdFJlc2l6ZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpub3J0aFNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OmVhc3RXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoRWFzdFNvdXRo
V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFdlc3RTb3V0aEVhc3RS
ZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uUmVzaXplQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJvd1Jlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjp2ZXJ0
aWNhbFRleHRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2VsbEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpjb250ZXh0TWVudUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub0Ryb3BD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9ncmVzc0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjphbGlhc0N1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpub25lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vdEFsbG93ZWRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6em9vbUluQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6Onpvb21PdXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z3JhYkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpncmFiYmluZ0N1cnNvcik6CisKIDIwMDktMDctMTYgIEZ1bWl0b3NoaSBV
a2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWMwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcApAQCAtMCwwICsxLDIwNyBAQAor
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
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRI
YWlrdS5oIgorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgor
I2luY2x1ZGUgPGFwcC9DbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVk
ZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ2xpcGJvYXJkSGFpa3U6OkNsaXBib2FyZEhhaWt1KENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIGJvb2wgZm9yRHJhZ2dpbmcpIAorICAgIDogQ2xpcGJvYXJkKHBvbGlj
eSwgZm9yRHJhZ2dpbmcpCit7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OmNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7Cisg
ICAgICAgIEJNZXNzYWdlKiBkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCk7CisKKyAgICAgICAg
aWYgKGRhdGEpIHsKKyAgICAgICAgICAgIGRhdGEtPlJlbW92ZU5hbWUoQlN0cmluZyh0eXBlKS5T
dHJpbmcoKSk7CisgICAgICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1pdCgpOworICAgICAgICB9
CisKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2xp
cGJvYXJkSGFpa3U6OmNsZWFyQWxsRGF0YSgpIAoreworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxv
Y2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGJlX2NsaXBi
b2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQor
fQorCitTdHJpbmcgQ2xpcGJvYXJkSGFpa3U6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBi
b29sJiBzdWNjZXNzKSBjb25zdCAKK3sKKyAgICBCU3RyaW5nIHJlc3VsdDsKKyAgICBzdWNjZXNz
ID0gZmFsc2U7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgQk1l
c3NhZ2UqIGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKTsKKworICAgICAgICBpZiAoZGF0YSkK
KyAgICAgICAgICAgIGlmIChkYXRhLT5GaW5kU3RyaW5nKEJTdHJpbmcodHlwZSkuU3RyaW5nKCks
ICZyZXN1bHQpID09IEJfT0spCisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisKKyAg
ICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitib29sIENsaXBib2FyZEhhaWt1OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhKSAKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAg
aWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIEJNZXNzYWdlKiBiZGF0YSA9IGJl
X2NsaXBib2FyZC0+RGF0YSgpOworCisgICAgICAgIGlmIChiZGF0YSkgeworICAgICAgICAgICAg
YmRhdGEtPlJlbW92ZU5hbWUoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSk7CisKKyAgICAgICAgICAg
IGlmIChiZGF0YS0+QWRkU3RyaW5nKEJTdHJpbmcodHlwZSkuU3RyaW5nKCksIEJTdHJpbmcoZGF0
YSkpID09IEJfT0spCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+
VW5sb2NrKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gRXh0ZW5zaW9u
cyBiZXlvbmQgSUUncyBBUEkuCitIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkSGFpa3U6OnR5cGVz
KCkgY29uc3QgCit7CisgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKworICAgIGlmIChiZV9j
bGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBCTWVzc2FnZSogZGF0YSA9IGJlX2NsaXBib2Fy
ZC0+RGF0YSgpOworCisgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAgICBjaGFyKiBuYW1l
OworICAgICAgICAgICAgdWludDMyIHR5cGU7CisgICAgICAgICAgICBpbnQzMiBjb3VudDsKKwor
ICAgICAgICAgICAgZm9yIChpbnQzMiBpID0gMDsgZGF0YS0+R2V0SW5mbyhCX0FOWV9UWVBFLCBp
LCAmbmFtZSwgJnR5cGUsICZjb3VudCkgPT0gQl9PSzsgaSsrKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hZGQobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9j
aygpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8RmlsZUxp
c3Q+IENsaXBib2FyZEhhaWt1OjpmaWxlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQgQ2xpcGJvYXJkSGFpa3U6OmRyYWdMb2Nh
dGlvbigpIGNvbnN0IAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRQ
b2ludCgwLCAwKTsKK30KKworQ2FjaGVkSW1hZ2UqIENsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2Uo
KSBjb25zdCAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOyAKK30KKwor
dm9pZCBDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50
UG9pbnQmKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitOb2RlKiBDbGlwYm9hcmRI
YWlrdTo6ZHJhZ0ltYWdlRWxlbWVudCgpIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7IAorfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2VFbGVtZW50
KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
RHJhZ0ltYWdlUmVmIENsaXBib2FyZEhhaWt1OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRy
YWdMb2NhdGlvbikgY29uc3QKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVs
ZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0ZVVSTChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKSAKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENsaXBib2FyZEhhaWt1OjpoYXNEYXRh
KCkgCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIGlmIChiZV9jbGlwYm9hcmQt
PkxvY2soKSkgeworICAgICAgICBCTWVzc2FnZSogZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgp
OworCisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgcmVzdWx0ID0gIWRhdGEtPklzRW1w
dHkoKTsKKworICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjIzZTNkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Ns
aXBib2FyZEhhaWt1LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2xpcGJvYXJkSGFpa3VfaAorI2RlZmluZSBDbGlwYm9hcmRIYWlrdV9oCisKKyNpbmNsdWRlICJD
bGlwYm9hcmQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIENhY2hlZEltYWdlOworCisgICAgLy8gU3RhdGUgYXZh
aWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0
ZS4KKyAgICBjbGFzcyBDbGlwYm9hcmRIYWlrdSA6IHB1YmxpYyBDbGlwYm9hcmQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkSGFpa3U+IGNyZWF0ZShD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5nKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZEhhaWt1KHBvbGljeSwg
Zm9yRHJhZ2dpbmcpKTsKKyAgICAgICAgfQorICAgICAgICB+Q2xpcGJvYXJkSGFpa3UoKSB7IH0K
KworICAgICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgICAgICB2
b2lkIGNsZWFyQWxsRGF0YSgpOworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0OworICAgICAgICBib29sIHNldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgICAgIC8vIEV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJLgorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0Owor
CisgICAgICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OworICAgICAgICBDYWNoZWRJ
bWFnZSogZHJhZ0ltYWdlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hl
ZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAgICAgTm9kZSogZHJhZ0ltYWdlRWxlbWVu
dCgpOworICAgICAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBv
aW50Jik7CisKKyAgICAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKElu
dFBvaW50JiBkcmFnTG9jKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUs
IEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFu
Z2UqLCBGcmFtZSopOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBDbGlwYm9hcmRIYWlrdShDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIGJv
b2wgZm9yRHJhZ2dpbmcpOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBDbGlwYm9hcmRIYWlrdV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ29va2llSmFySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1MTlkNwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlr
b3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKworI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0
cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgYmUgc2F2ZWQgdG8gYW5kIHJlc3Rv
cmVkIGZyb20gZGlzayB0b28/CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2ll
SmFyOworCit2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKnBv
bGljeVVSTCovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNvb2tpZUphci5zZXQodXJs
LnN0cmluZygpLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworfQorCitib29sIGNv
b2tpZXNFbmFibGVkKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUg
YSBzZXR0aW5nCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1cnNvckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zMDNlZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ3Vyc29yLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5j
bHVkZSA8YXBwL0FwcERlZnMuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cnNvcjo6
Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIGN1cnNvcikKKyAgICA6IG1faW1wbChjdXJzb3IpCit7Cit9
CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCisgICAgOiBtX2ltcGwob3Ro
ZXIubV9pbXBsKQoreworfQorCitDdXJzb3I6On5DdXJzb3IoKQoreworfQorCitDdXJzb3I6OkN1
cnNvcihJbWFnZSosIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCit7Cisg
ICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJldHVybiogdGhpczsKK30KKworc3RhdGlj
IEN1cnNvciBnbG9iYWxfY3Vyc29yID0gY29uc3RfY2FzdDxCQ3Vyc29yKj4oQl9DVVJTT1JfU1lT
VEVNX0RFRkFVTFQpOworc3RhdGljIEN1cnNvciBpYmVhbV9jdXJzb3IgPSBjb25zdF9jYXN0PEJD
dXJzb3IqPihCX0NVUlNPUl9JX0JFQU0pOworCitjb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3Io
KQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG1vdmVD
dXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IGNyb3NzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3Qg
Q3Vyc29yJiBoYW5kQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCit7CisgICAgcmV0dXJuIGliZWFtX2N1cnNvcjsK
K30KKworY29uc3QgQ3Vyc29yJiB3YWl0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xv
YmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFJlc2l6ZUN1
cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
bm9ydGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30K
KworY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoUmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RS
ZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBD
dXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJu
IGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhTb3V0aFJlc2l6ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFz
dFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0
dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0
UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3Qg
Q3Vyc29yJiBjb2x1bW5SZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGds
b2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgdmVydGljYWxUZXh0Q3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjb250
ZXh0TWVudUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgbm9Ecm9wQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNvcjsKK30K
KworY29uc3QgQ3Vyc29yJiBjb3B5Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsX2N1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBwcm9ncmVzc0N1cnNvcigpCit7CisgICAgcmV0dXJuIGds
b2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgYWxpYXNDdXJzb3IoKQoreworICAgIHJl
dHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vbmVDdXJzb3IoKQorewor
ICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRD
dXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxfY3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IHpvb21JbkN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgem9vbU91dEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbF9jdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZ3JhYmJpbmdDdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxfY3Vyc29yOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjIK
Cg==
</data>
<flag name="review"
          id="17487"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33168</attachid>
            <date>2009-07-21 03:26:51 -0700</date>
            <delta_ts>2009-07-28 12:17:39 -0700</delta_ts>
            <desc>Patch to add a first bunch of Haiku-specific files for WebCore.</desc>
            <filename>Added-a-first-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>19402</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3N2IyNWE0M2VhNzU1MDkyZTRiMjE5YjY2MTdhYWM1OGY4ZDJlZTU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IFR1ZSwgMjEgSnVsIDIwMDkgMTI6MjQ6MzQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBB
ZGRlZCBhIGZpcnN0IGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzEgKysr
KysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcCB8ICAyMDcg
KysrKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9h
cmRIYWlrdS5oICAgfCAgIDczICsrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29r
aWVKYXJIYWlrdS5jcHAgfCAgIDYxICsrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1
cnNvckhhaWt1LmNwcCAgICB8ICAyMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUg
ZmlsZXMgY2hhbmdlZCwgNjQ5IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Nvb2tpZUphckhhaWt1
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFp
a3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA5NDIwZTY1Li4yZDNkOTRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDA5LTA3LTIxICBNYXhp
bWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgZmlyc3QgYnVuY2ggb2YgSGFpa3Ut
c3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4OAorCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ2xp
cGJvYXJkSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1
OjpDbGlwYm9hcmRIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpjbGVhckFsbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OmdldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkSGFpa3U6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1Ojpm
aWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0xvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkSGFpa3U6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRIYWlrdTo6ZHJhZ0ltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRIYWlrdTo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZEhhaWt1OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcGJvYXJkSGFpa3U6OndyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhh
aWt1Ojp3cml0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpoYXNE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEhhaWt1OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkSGFpa3U6On5DbGlwYm9hcmRIYWlrdSk6CisgICAgICAgICogcGxhdGZv
cm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cnNvcjo6fkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpwb2ludGVyQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6Om1vdmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jvc3NDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6aGFuZEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjppQmVhbUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjp3YWl0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Omhl
bHBDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6ZWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpub3J0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVh
c3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0UmVzaXplQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OnNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNvdXRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFdlc3RS
ZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2VzdFJlc2l6ZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpub3J0aFNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OmVhc3RXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoRWFzdFNvdXRo
V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFdlc3RTb3V0aEVhc3RS
ZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uUmVzaXplQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJvd1Jlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjp2ZXJ0
aWNhbFRleHRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2VsbEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpjb250ZXh0TWVudUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub0Ryb3BD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9ncmVzc0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjphbGlhc0N1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpub25lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vdEFsbG93ZWRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6em9vbUluQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6Onpvb21PdXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z3JhYkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpncmFiYmluZ0N1cnNvcik6CisKIDIwMDktMDctMTYgIEZ1bWl0b3NoaSBV
a2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ2xpcGJvYXJkSGFpa3UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWMwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0NsaXBib2FyZEhhaWt1LmNwcApAQCAtMCwwICsxLDIwNyBAQAor
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
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRI
YWlrdS5oIgorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJGaWxlTGlzdC5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgor
I2luY2x1ZGUgPGFwcC9DbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVk
ZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ2xpcGJvYXJkSGFpa3U6OkNsaXBib2FyZEhhaWt1KENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIGJvb2wgZm9yRHJhZ2dpbmcpIAorICAgIDogQ2xpcGJvYXJkKHBvbGlj
eSwgZm9yRHJhZ2dpbmcpCit7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkSGFpa3U6OmNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7Cisg
ICAgICAgIEJNZXNzYWdlKiBkYXRhID0gYmVfY2xpcGJvYXJkLT5EYXRhKCk7CisKKyAgICAgICAg
aWYgKGRhdGEpIHsKKyAgICAgICAgICAgIGRhdGEtPlJlbW92ZU5hbWUoQlN0cmluZyh0eXBlKS5T
dHJpbmcoKSk7CisgICAgICAgICAgICBiZV9jbGlwYm9hcmQtPkNvbW1pdCgpOworICAgICAgICB9
CisKKyAgICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2xp
cGJvYXJkSGFpa3U6OmNsZWFyQWxsRGF0YSgpIAoreworICAgIGlmIChiZV9jbGlwYm9hcmQtPkxv
Y2soKSkgeworICAgICAgICBiZV9jbGlwYm9hcmQtPkNsZWFyKCk7CisgICAgICAgIGJlX2NsaXBi
b2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+VW5sb2NrKCk7CisgICAgfQor
fQorCitTdHJpbmcgQ2xpcGJvYXJkSGFpa3U6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBi
b29sJiBzdWNjZXNzKSBjb25zdCAKK3sKKyAgICBCU3RyaW5nIHJlc3VsdDsKKyAgICBzdWNjZXNz
ID0gZmFsc2U7CisKKyAgICBpZiAoYmVfY2xpcGJvYXJkLT5Mb2NrKCkpIHsKKyAgICAgICAgQk1l
c3NhZ2UqIGRhdGEgPSBiZV9jbGlwYm9hcmQtPkRhdGEoKTsKKworICAgICAgICBpZiAoZGF0YSkK
KyAgICAgICAgICAgIGlmIChkYXRhLT5GaW5kU3RyaW5nKEJTdHJpbmcodHlwZSkuU3RyaW5nKCks
ICZyZXN1bHQpID09IEJfT0spCisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisKKyAg
ICAgICAgYmVfY2xpcGJvYXJkLT5VbmxvY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitib29sIENsaXBib2FyZEhhaWt1OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhKSAKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAg
aWYgKGJlX2NsaXBib2FyZC0+TG9jaygpKSB7CisgICAgICAgIEJNZXNzYWdlKiBiZGF0YSA9IGJl
X2NsaXBib2FyZC0+RGF0YSgpOworCisgICAgICAgIGlmIChiZGF0YSkgeworICAgICAgICAgICAg
YmRhdGEtPlJlbW92ZU5hbWUoQlN0cmluZyh0eXBlKS5TdHJpbmcoKSk7CisKKyAgICAgICAgICAg
IGlmIChiZGF0YS0+QWRkU3RyaW5nKEJTdHJpbmcodHlwZSkuU3RyaW5nKCksIEJTdHJpbmcoZGF0
YSkpID09IEJfT0spCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGJlX2NsaXBib2FyZC0+Q29tbWl0KCk7CisgICAgICAgIGJlX2NsaXBib2FyZC0+
VW5sb2NrKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gRXh0ZW5zaW9u
cyBiZXlvbmQgSUUncyBBUEkuCitIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkSGFpa3U6OnR5cGVz
KCkgY29uc3QgCit7CisgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKworICAgIGlmIChiZV9j
bGlwYm9hcmQtPkxvY2soKSkgeworICAgICAgICBCTWVzc2FnZSogZGF0YSA9IGJlX2NsaXBib2Fy
ZC0+RGF0YSgpOworCisgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAgICBjaGFyKiBuYW1l
OworICAgICAgICAgICAgdWludDMyIHR5cGU7CisgICAgICAgICAgICBpbnQzMiBjb3VudDsKKwor
ICAgICAgICAgICAgZm9yIChpbnQzMiBpID0gMDsgZGF0YS0+R2V0SW5mbyhCX0FOWV9UWVBFLCBp
LCAmbmFtZSwgJnR5cGUsICZjb3VudCkgPT0gQl9PSzsgaSsrKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hZGQobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9j
aygpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8RmlsZUxp
c3Q+IENsaXBib2FyZEhhaWt1OjpmaWxlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQgQ2xpcGJvYXJkSGFpa3U6OmRyYWdMb2Nh
dGlvbigpIGNvbnN0IAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRQ
b2ludCgwLCAwKTsKK30KKworQ2FjaGVkSW1hZ2UqIENsaXBib2FyZEhhaWt1OjpkcmFnSW1hZ2Uo
KSBjb25zdCAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOyAKK30KKwor
dm9pZCBDbGlwYm9hcmRIYWlrdTo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50
UG9pbnQmKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitOb2RlKiBDbGlwYm9hcmRI
YWlrdTo6ZHJhZ0ltYWdlRWxlbWVudCgpIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7IAorfQorCit2b2lkIENsaXBib2FyZEhhaWt1OjpzZXREcmFnSW1hZ2VFbGVtZW50
KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
RHJhZ0ltYWdlUmVmIENsaXBib2FyZEhhaWt1OjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRy
YWdMb2NhdGlvbikgY29uc3QKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBDbGlwYm9hcmRIYWlrdTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVs
ZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0ZVVSTChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIENsaXBib2FyZEhhaWt1Ojp3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKSAKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIENsaXBib2FyZEhhaWt1OjpoYXNEYXRh
KCkgCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIGlmIChiZV9jbGlwYm9hcmQt
PkxvY2soKSkgeworICAgICAgICBCTWVzc2FnZSogZGF0YSA9IGJlX2NsaXBib2FyZC0+RGF0YSgp
OworCisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgcmVzdWx0ID0gIWRhdGEtPklzRW1w
dHkoKTsKKworICAgICAgICBiZV9jbGlwYm9hcmQtPlVubG9jaygpOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9DbGlwYm9hcmRIYWlrdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjIzZTNkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0Ns
aXBib2FyZEhhaWt1LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2xpcGJvYXJkSGFpa3VfaAorI2RlZmluZSBDbGlwYm9hcmRIYWlrdV9oCisKKyNpbmNsdWRlICJD
bGlwYm9hcmQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIENhY2hlZEltYWdlOworCisgICAgLy8gU3RhdGUgYXZh
aWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0
ZS4KKyAgICBjbGFzcyBDbGlwYm9hcmRIYWlrdSA6IHB1YmxpYyBDbGlwYm9hcmQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkSGFpa3U+IGNyZWF0ZShD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5nKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZEhhaWt1KHBvbGljeSwg
Zm9yRHJhZ2dpbmcpKTsKKyAgICAgICAgfQorICAgICAgICB+Q2xpcGJvYXJkSGFpa3UoKSB7IH0K
KworICAgICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgICAgICB2
b2lkIGNsZWFyQWxsRGF0YSgpOworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0OworICAgICAgICBib29sIHNldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgICAgIC8vIEV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJLgorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0Owor
CisgICAgICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OworICAgICAgICBDYWNoZWRJ
bWFnZSogZHJhZ0ltYWdlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hl
ZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAgICAgTm9kZSogZHJhZ0ltYWdlRWxlbWVu
dCgpOworICAgICAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSosIGNvbnN0IEludFBv
aW50Jik7CisKKyAgICAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKElu
dFBvaW50JiBkcmFnTG9jKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUs
IEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFu
Z2UqLCBGcmFtZSopOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBDbGlwYm9hcmRIYWlrdShDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIGJv
b2wgZm9yRHJhZ2dpbmcpOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBDbGlwYm9hcmRIYWlrdV9oCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ29va2llSmFySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db29raWVKYXJI
YWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1MTlkNwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29va2llSmFySGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlr
b3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdv
b2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKworI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0
cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgYmUgc2F2ZWQgdG8gYW5kIHJlc3Rv
cmVkIGZyb20gZGlzayB0b28/CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2ll
SmFyOworCit2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKnBv
bGljeVVSTCovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGNvb2tpZUphci5zZXQodXJs
LnN0cmluZygpLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworfQorCitib29sIGNv
b2tpZXNFbmFibGVkKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUg
YSBzZXR0aW5nCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1cnNvckhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lNjZhNWJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ3Vyc29yLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5j
bHVkZSA8YXBwL0FwcERlZnMuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cnNvcjo6
Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIGN1cnNvcikKKyAgICA6IG1faW1wbChjdXJzb3IpCit7Cit9
CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCisgICAgOiBtX2ltcGwob3Ro
ZXIubV9pbXBsKQoreworfQorCitDdXJzb3I6On5DdXJzb3IoKQoreworfQorCitDdXJzb3I6OkN1
cnNvcihJbWFnZSosIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCit7Cisg
ICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJldHVybiogdGhpczsKK30KKworc3RhdGlj
IEN1cnNvciBnbG9iYWxDdXJzb3IgPSBjb25zdF9jYXN0PEJDdXJzb3IqPihCX0NVUlNPUl9TWVNU
RU1fREVGQVVMVCk7CitzdGF0aWMgQ3Vyc29yIGliZWFtQ3Vyc29yID0gY29uc3RfY2FzdDxCQ3Vy
c29yKj4oQl9DVVJTT1JfSV9CRUFNKTsKKworY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG1vdmVDdXJz
b3IoKQoreworICAgIHJldHVybiBnbG9iYWxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY3Jv
c3NDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNv
ciYgaGFuZEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbEN1cnNvcjsKK30KKworY29uc3Qg
Q3Vyc29yJiBpQmVhbUN1cnNvcigpCit7CisgICAgcmV0dXJuIGliZWFtQ3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxDdXJzb3I7Cit9
CisKK2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbEN1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4g
Z2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoUmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJl
c2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbEN1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2Vz
dFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbEN1cnNvcjsKK30KKworY29uc3Qg
Q3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVy
biBnbG9iYWxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3Io
KQoreworICAgIHJldHVybiBnbG9iYWxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhF
YXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOwor
fQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgcmV0dXJuIGdsb2JhbEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjb2x1bW5SZXNpemVD
dXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
cm93UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25z
dCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbEN1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFs
Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKK3sKKyAgICBy
ZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7
CisgICAgcmV0dXJuIGdsb2JhbEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBjb3B5Q3Vyc29y
KCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHByb2dy
ZXNzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25z
dCBDdXJzb3ImIG5vbmVDdXJzb3IoKQoreworICAgIHJldHVybiBnbG9iYWxDdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgbm90QWxsb3dlZEN1cnNvcigpCit7CisgICAgcmV0dXJuIGdsb2JhbEN1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJzb3IoKQoreworICAgIHJldHVybiBn
bG9iYWxDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigpCit7CisgICAg
cmV0dXJuIGdsb2JhbEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vy
c29yKCkKK3sKKyAgICByZXR1cm4gZ2xvYmFsQ3Vyc29yOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKLS0gCjEuNi4zLjIKCg==
</data>
<flag name="review"
          id="17885"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34263</attachid>
            <date>2009-08-07 02:46:26 -0700</date>
            <delta_ts>2009-08-07 08:23:20 -0700</delta_ts>
            <desc>Patch to add a fourth bunch of Haiku-specfic files to WebCore.</desc>
            <filename>0001-Added-a-fourth-bunch-of-Haiku-specific-files-for-Web.patch</filename>
            <type>text/plain</type>
            <size>18435</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBhODQ4YmE3MDliNTEyNDgzM2NjZmU1ZTkyODVmMjlkNzJiZGZjMGYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgNyBBdWcgMjAwOSAxMTozOToxOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgZm91cnRoIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMjggKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgICAg
ICAgICB8ICAxMzkgKysrKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnRIYWlrdS5jcHAgIHwgIDE5NyArKysrKysrKysrKysrKysrKysrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAgfCAgIDg3ICsrKysr
KysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAg
fCAgIDYyICsrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA1MTMgaW5zZXJ0aW9ucygrKSwgMCBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3Rl
Ym9hcmRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5j
cHAKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDY5MjM4MTMuLjJhM2UzNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDktMDgtMDcgIE1heGltZSBT
aW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBmb3VydGggYnVuY2ggb2YgSGFpa3Utc3Bl
Y2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNjk4OAorCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUGFzdGVi
b2FyZEhhaWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpQYXN0
ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjpwbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0
ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6a2V5SWRlbnRpZmllckZvckhhaWt1S2V5Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjp3aW5k
b3dzS2V5Q29kZUZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1X
aGVlbEV2ZW50KToKKwogMjAwOS0wNy0zMCAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVjazAyQGdt
YWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uM2U5OTczOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvUGFzdGVib2FyZEhhaWt1LmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIm1hcmt1cC5oIgorCisjaW5jbHVkZSA8c3VwcG9ydC9Mb2NrZXIuaD4KKyNpbmNsdWRl
IDxDbGlwYm9hcmQuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8U3RyaW5nLmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKK3sK
K30KKworUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQoreworICAg
IHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQoKTsKKyAgICBy
ZXR1cm4gcGFzdGVib2FyZDsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihS
YW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZy
YW1lKQoreworICAgIEJDbGlwYm9hcmQgY2xpcGJvYXJkKCJXZWJLaXQiKTsKKyAgICBpZiAoIWNs
aXBib2FyZC5Mb2NrKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsaXBib2FyZC5DbGVhcigp
OworICAgIEJNZXNzYWdlKiBkYXRhID0gY2xpcGJvYXJkLkRhdGEoKTsKKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIGRhdGEtPkFkZFN0cmluZygidGV4dC9wbGFpbiIsIEJT
dHJpbmcoZnJhbWUtPnNlbGVjdGVkVGV4dCgpKSk7CisgICAgY2xpcGJvYXJkLkNvbW1pdCgpOwor
CisgICAgY2xpcGJvYXJkLlVubG9jaygpOworfQorCitib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0
UmVwbGFjZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZyYW1lKQoreworICAgIEJD
bGlwYm9hcmQgY2xpcGJvYXJkKCJXZWJLaXQiKTsKKyAgICBpZiAoIWNsaXBib2FyZC5Mb2NrKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEJNZXNzYWdlKiBkYXRhID0gY2xpcGJvYXJkLkRhdGEo
KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIEJTdHJpbmcgc3RyaW5n
OworICAgIGRhdGEtPkZpbmRTdHJpbmcoInRleHQvcGxhaW4iLCAmc3RyaW5nKTsKKworICAgIGNs
aXBib2FyZC5VbmxvY2soKTsKKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1Bhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJh
bWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9v
bCYgY2hvc2VQbGFpblRleHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBCQ2xpcGJvYXJkIGNsaXBib2FyZCgiV2ViS2l0Iik7
CisgICAgaWYgKCFjbGlwYm9hcmQuTG9jaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGlw
Ym9hcmQuQ2xlYXIoKTsKKworICAgIEJNZXNzYWdlKiBkYXRhID0gY2xpcGJvYXJkLkRhdGEoKTsK
KyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGRhdGEtPkFkZFN0cmluZygi
dGV4dC9wbGFpbiIsIHVybC5zdHJpbmcoKSk7CisgICAgY2xpcGJvYXJkLkNvbW1pdCgpOworCisg
ICAgY2xpcGJvYXJkLlVubG9jaygpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2Uo
Tm9kZSosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQoreworICAgIEJDbGlwYm9hcmQgY2xp
cGJvYXJkKCJXZWJLaXQiKTsKKyAgICBpZiAoIWNsaXBib2FyZC5Mb2NrKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNsaXBib2FyZC5DbGVhcigpOworICAgIGNsaXBib2FyZC5Db21taXQoKTsK
KworICAgIGNsaXBib2FyZC5VbmxvY2soKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50
SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGQ4ZDAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudEhhaWt1LmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+
CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUgPFN0cmluZy5oPgorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2Rl
KGNoYXIgc2luZ2xlQnl0ZSwgaW50MzIga2V5Q29kZSkKK3sKKyAgICAgICAgc3dpdGNoIChzaW5n
bGVCeXRlKSB7CisgICAgICAgIGNhc2UgQl9GVU5DVElPTl9LRVk6CisKKyAgICAgICAgICAgIHN3
aXRjaCAoa2V5Q29kZSkgeworICAgICAgICAgICAgY2FzZSBCX0YxX0tFWToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIkYxIjsKKyAgICAgICAgICAgIGNhc2UgQl9GMl9LRVk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJGMiI7CisgICAgICAgICAgICBjYXNlIEJfRjNfS0VZOgorICAgICAgICAg
ICAgICAgIHJldHVybiAiRjMiOworICAgICAgICAgICAgY2FzZSBCX0Y0X0tFWToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIkY0IjsKKyAgICAgICAgICAgIGNhc2UgQl9GNV9LRVk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJGNSI7CisgICAgICAgICAgICBjYXNlIEJfRjZfS0VZOgorICAgICAg
ICAgICAgICAgIHJldHVybiAiRjYiOworICAgICAgICAgICAgY2FzZSBCX0Y3X0tFWToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIkY3IjsKKyAgICAgICAgICAgIGNhc2UgQl9GOF9LRVk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICJGOCI7CisgICAgICAgICAgICBjYXNlIEJfRjlfS0VZOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiRjkiOworICAgICAgICAgICAgY2FzZSBCX0YxMF9LRVk6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJGMTAiOworICAgICAgICAgICAgY2FzZSBCX0YxMV9LRVk6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJGMTEiOworICAgICAgICAgICAgY2FzZSBCX0YxMl9L
RVk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJGMTIiOworICAgICAgICAgICAgY2FzZSBCX1BS
SU5UX0tFWToKKyAgICAgICAgICAgICAgICByZXR1cm4gIlByaW50IjsKKyAgICAgICAgICAgIGNh
c2UgQl9QQVVTRV9LRVk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJQYXVzZSI7CisgICAgICAg
ICAgICBjYXNlIEJfU0NST0xMX0tFWToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7IC8vIEZJ
WE1FCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKChpbnQpa2V5Q29kZSkpOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQl9CQUNLU1BBQ0U6Cisg
ICAgICAgICAgICByZXR1cm4gIlUrMDAwOSI7CisgICAgICAgIGNhc2UgQl9MRUZUX0FSUk9XOgor
ICAgICAgICAgICAgcmV0dXJuICJMZWZ0IjsKKyAgICAgICAgY2FzZSBCX1JJR0hUX0FSUk9XOgor
ICAgICAgICAgICAgcmV0dXJuICJSaWdodCI7CisgICAgICAgIGNhc2UgQl9VUF9BUlJPVzoKKyAg
ICAgICAgICAgIHJldHVybiAiVXAiOworICAgICAgICBjYXNlIEJfRE9XTl9BUlJPVzoKKyAgICAg
ICAgICAgIHJldHVybiAiRG93biI7CisgICAgICAgIGNhc2UgQl9JTlNFUlQ6CisgICAgICAgICAg
ICByZXR1cm4gIkluc2VydCI7CisgICAgICAgIGNhc2UgQl9FTlRFUjoKKyAgICAgICAgICAgIHJl
dHVybiAiRW50ZXIiOworICAgICAgICBjYXNlIEJfREVMRVRFOgorICAgICAgICAgICAgcmV0dXJu
ICJVKzAwN0YiOworICAgICAgICBjYXNlIEJfSE9NRToKKyAgICAgICAgICAgIHJldHVybiAiSG9t
ZSI7CisgICAgICAgIGNhc2UgQl9FTkQ6CisgICAgICAgICAgICByZXR1cm4gIkVuZCI7CisgICAg
ICAgIGNhc2UgQl9QQUdFX1VQOgorICAgICAgICAgICAgcmV0dXJuICJQYWdlVXAiOworICAgICAg
ICBjYXNlIEJfUEFHRV9ET1dOOgorICAgICAgICAgICAgcmV0dXJuICJQYWdlRG93biI7CisgICAg
ICAgIGNhc2UgQl9UQUI6CisgICAgICAgICAgICByZXR1cm4gIlUrMDAwOSI7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIHRvQVND
SUlVcHBlcigoaW50KWtleUNvZGUpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgd2luZG93c0tl
eUNvZGVGb3JLZXlFdmVudChjaGFyIHNpbmdsZUJ5dGUpCit7CisgICAgc3dpdGNoIChzaW5nbGVC
eXRlKSB7CisgICAgY2FzZSBCX0JBQ0tTUEFDRToKKyAgICAgICAgcmV0dXJuIFZLX0JBQ0s7IC8v
ICgwOCkgQkFDS1NQQUNFIGtleQorICAgIGNhc2UgQl9UQUI6CisgICAgICAgIHJldHVybiBWS19U
QUI7IC8vICgwOSkgVEFCIGtleQorICAgIGNhc2UgQl9SRVRVUk46CisgICAgICAgIHJldHVybiBW
S19SRVRVUk47IC8vKDBEKSBSZXR1cm4ga2V5CisgICAgY2FzZSBCX0VTQ0FQRToKKyAgICAgICAg
cmV0dXJuIFZLX0VTQ0FQRTsgLy8gKDFCKSBFU0Mga2V5CisgICAgY2FzZSBCX1NQQUNFOgorICAg
ICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIKKyAgICBjYXNlIEJfUEFHRV9V
UDoKKyAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgY2Fz
ZSBCX1BBR0VfRE9XTjoKKyAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFHRSBET1dO
IGtleQorICAgIGNhc2UgQl9FTkQ6CisgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5E
IGtleQorICAgIGNhc2UgQl9IT01FOgorICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBI
T01FIGtleQorICAgIGNhc2UgQl9MRUZUX0FSUk9XOgorICAgICAgICByZXR1cm4gVktfTEVGVDsg
Ly8gKDI1KSBMRUZUIEFSUk9XIGtleQorICAgIGNhc2UgQl9VUF9BUlJPVzoKKyAgICAgICAgcmV0
dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAgIGNhc2UgQl9SSUdIVF9BUlJPVzoK
KyAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQorICAgIGNh
c2UgQl9ET1dOX0FSUk9XOgorICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4KSBET1dOIEFS
Uk9XIGtleQorICAgIGNhc2UgQl9JTlNFUlQ6CisgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8v
ICgyRCkgSU5TIGtleQorICAgIGNhc2UgQl9ERUxFVEU6CisgICAgICAgIHJldHVybiBWS19ERUxF
VEU7IC8vICgyRSkgREVMIGtleQorICAgIGNhc2UgMHgyZToKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAg
ICBCU3RyaW5nIGJ5dGVzID0gbWVzc2FnZS0+RmluZFN0cmluZygiYnl0ZXMiKTsKKworICAgIG1f
dGV4dCA9IFN0cmluZzo6ZnJvbVVURjgoYnl0ZXMuU3RyaW5nKCksIGJ5dGVzLkxlbmd0aCgpKTsK
KyAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKGJ5dGVzLlN0cmluZygpLCBieXRlcy5MZW5n
dGgoKSk7CisgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvckhhaWt1S2V5Q29k
ZShieXRlcy5CeXRlQXQoMCksIG1lc3NhZ2UtPkZpbmRJbnQzMigia2V5IikpOworCisgICAgaWYg
KG1lc3NhZ2UtPndoYXQgPT0gQl9LRVlfVVApCisgICAgICAgIG1fdHlwZSA9IEtleVVwOworICAg
IGVsc2UgaWYgKG1lc3NhZ2UtPndoYXQgPT0gQl9LRVlfRE9XTikKKyAgICAgICAgbV90eXBlID0g
S2V5RG93bjsKKworICAgIG1fYXV0b1JlcGVhdCA9IHRydWU7CisgICAgbV9jdHJsS2V5ID0gZmFs
c2U7CisgICAgbV9hbHRLZXkgPSBmYWxzZTsKKyAgICBtX21ldGFLZXkgPSBmYWxzZTsKKyAgICBt
X3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoYnl0ZXMu
Qnl0ZUF0KDApKTsKKyAgICBtX2lzS2V5cGFkID0gZmFsc2U7CisgICAgbV9zaGlmdEtleSA9IGZh
bHNlOworfQorCit2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93
bkV2ZW50KFR5cGUgdHlwZSwgYm9vbCkKK3sKKyAgICAvLyBDYW4gb25seSBjaGFuZ2UgdHlwZSBm
cm9tIEtleURvd24gdG8gUmF3S2V5RG93biBvciBDaGFyLCBhcyB3ZSBsYWNrIGluZm9ybWF0aW9u
IGZvciBvdGhlciBjb252ZXJzaW9ucy4KKyAgICBBU1NFUlQobV90eXBlID09IEtleURvd24pOwor
ICAgIG1fdHlwZSA9IHR5cGU7CisgICAgaWYgKHR5cGUgPT0gUmF3S2V5RG93bikgeworICAgICAg
ICBtX3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9IFN0cmluZygpOworICAg
ICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IDA7CisgICAgfQorfQorCitib29sIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50
SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlr
dS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxMGExMgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFp
a3UuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBN
YXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8U3VwcG9ydERl
ZnMuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtTW91c2VFdmVudDo6UGxh
dGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIG1fdGltZXN0
YW1wID0gbWVzc2FnZS0+RmluZEludDY0KCJ3aGVuIik7CisgICAgbV9wb3NpdGlvbiA9IEludFBv
aW50KG1lc3NhZ2UtPkZpbmRQb2ludCgid2hlcmUiKSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9
IEludFBvaW50KG1lc3NhZ2UtPkZpbmRQb2ludCgiZ2xvYmFsUG9zaXRpb24iKSk7CisKKyAgICAv
LyBGSVhNRTogVXNpbmcgbWVzc2FnZS0+RmluZEludDMyKCJtb2RpZmllcnMiKTsKKyAgICBtX3No
aWZ0S2V5ID0gZmFsc2U7CisgICAgbV9jdHJsS2V5ID0gZmFsc2U7CisgICAgbV9hbHRLZXkgPSBm
YWxzZTsKKyAgICBtX21ldGFLZXkgPSBmYWxzZTsKKworICAgIGludDMyIGJ1dHRvbnMgPSBtZXNz
YWdlLT5GaW5kSW50MzIoImJ1dHRvbnMiKTsKKyAgICBzd2l0Y2ggKGJ1dHRvbnMpIHsKKyAgICBj
YXNlIDE6CisgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSAyOgorICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDM6CisgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAg
ICAgICBicmVhazsKKyAgICB9OworCisgICAgc3dpdGNoIChtZXNzYWdlLT53aGF0KSB7CisgICAg
Y2FzZSBCX01PVVNFX0RPV046CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFByZXNz
ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQl9NT1VTRV9VUDoKKyAgICAgICAgbV9ldmVu
dFR5cGUgPSBNb3VzZUV2ZW50UmVsZWFzZWQ7CisgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRv
bjsgLy8gRklYTUU6IFdlYmNvcmUgd2FudHMgdG8ga25vdyB0aGUgYnV0dG9uIHJlbGVhc2VkIGJ1
dCB3ZSBkb24ndCBrbm93LgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEJfTU9VU0VfTU9WRUQ6
CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRNb3ZlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfTsKKworICAgIG1fY2xpY2tDb3VudCA9IG1lc3NhZ2UtPkZpbmRJ
bnQzMigiY2xpY2tzIik7CisKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzQ4ZDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8
bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9u
IDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKKworI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorCisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2lu
Y2x1ZGUgPFBvaW50Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF0Zm9ybVdoZWVs
RXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChCTWVzc2FnZSogbWVzc2FnZSkKKyAgICA6IG1fZ3Jh
bnVsYXJpdHkoU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQpCisgICAgLCBtX3NoaWZ0S2V5KGZhbHNl
KQorICAgICwgbV9jdHJsS2V5KGZhbHNlKQorICAgICwgbV9hbHRLZXkoZmFsc2UpCisgICAgLCBt
X21ldGFLZXkoZmFsc2UpCisgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCit7CisgICAgbV9wb3Np
dGlvbiA9IEludFBvaW50KG1lc3NhZ2UtPkZpbmRQb2ludCgicG9zaXRpb24iKSk7CisgICAgbV9n
bG9iYWxQb3NpdGlvbiA9IEludFBvaW50KG1lc3NhZ2UtPkZpbmRQb2ludCgiZ2xvYmFsX3Bvc2l0
aW9uIikpOworCisgICAgbV9kZWx0YVggPSBtZXNzYWdlLT5GaW5kRmxvYXQoImJlOndoZWVsX2Rl
bHRhX3giKTsKKyAgICBtX2RlbHRhWSA9IG1lc3NhZ2UtPkZpbmRGbG9hdCgiYmU6d2hlZWxfZGVs
dGFfeSIpOworCisgICAgbV93aGVlbFRpY2tzWCA9IG1fZGVsdGFYOworICAgIG1fd2hlZWxUaWNr
c1kgPSBtX2RlbHRhWTsKKworICAgIG1fZGVsdGFYICo9IC1zdGF0aWNfY2FzdDxmbG9hdD4oY1Nj
cm9sbGJhclBpeGVsc1BlckxpbmVTdGVwKTsKKyAgICBtX2RlbHRhWSAqPSAtc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwotLSAKMS42LjMuMgoK
</data>
<flag name="review"
          id="18428"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34278</attachid>
            <date>2009-08-07 08:23:20 -0700</date>
            <delta_ts>2009-08-07 17:48:21 -0700</delta_ts>
            <desc>Patch to add a fourth bunch of Haiku-specfic files to WebCore.</desc>
            <filename>Added-a-fourth-bunch-of-Haiku-specific-files-for-Web.patch</filename>
            <type>text/plain</type>
            <size>17944</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA3OGEwYWRmYWNlNGY5YTIxYzU0ZWZhNzY1YzQ3N2QxNDg0MzU4YTYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgNyBBdWcgMjAwOSAxNzoyMTo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgZm91cnRoIGJ1bmNoIG9mIEhhaWt1LXNwZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgoK
LS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMjggKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAgICAg
ICAgICB8ICAxMzggKysrKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnRIYWlrdS5jcHAgIHwgIDE5MyArKysrKysrKysrKysrKysrKysrKwogV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAgfCAgIDgyICsrKysr
KysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAg
fCAgIDYyICsrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNTAzIGluc2VydGlvbnMoKyksIDAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QYXN0
ZWJvYXJkSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3Uu
Y3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA2OTIzODEzLi4yYTNlMzRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDA5LTA4LTA3ICBNYXhpbWUg
U2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgZm91cnRoIGJ1bmNoIG9mIEhhaWt1LXNw
ZWNpZmljIGZpbGVzIGZvciBXZWJDb3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjY5ODgKKworICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1Bhc3Rl
Ym9hcmRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFz
dGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6cGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OmRvY3VtZW50RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3Jp
dGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vaGFp
a3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmtleUlkZW50aWZpZXJGb3JIYWlrdUtleUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6d2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZl
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3Jt
V2hlZWxFdmVudCk6CisKIDIwMDktMDctMzAgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2swMkBn
bWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9QYXN0ZWJvYXJkSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY3YTdmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1Bhc3RlYm9hcmRIYWlrdS5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisKKyNpbmNsdWRl
ICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDxzdXBwb3J0L0xvY2tlci5oPgorI2luY2x1ZGUg
PENsaXBib2FyZC5oPgorI2luY2x1ZGUgPE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4K
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQorewor
fQorCitQYXN0ZWJvYXJkKiBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCit7CisgICAg
c3RhdGljIFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgpOworICAgIHJl
dHVybiBwYXN0ZWJvYXJkOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJh
bmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJh
bWUpCit7CisgICAgQkNsaXBib2FyZCBjbGlwYm9hcmQoIldlYktpdCIpOworICAgIGlmICghY2xp
cGJvYXJkLkxvY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpcGJvYXJkLkNsZWFyKCk7
CisgICAgQk1lc3NhZ2UqIGRhdGEgPSBjbGlwYm9hcmQuRGF0YSgpOworICAgIGlmICghZGF0YSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgQlN0
cmluZyhmcmFtZS0+c2VsZWN0ZWRUZXh0KCkpKTsKKyAgICBjbGlwYm9hcmQuQ29tbWl0KCk7CisK
KyAgICBjbGlwYm9hcmQuVW5sb2NrKCk7Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRS
ZXBsYWNlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCit7CisgICAgQkNs
aXBib2FyZCBjbGlwYm9hcmQoIldlYktpdCIpOworICAgIGlmICghY2xpcGJvYXJkLkxvY2soKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgQk1lc3NhZ2UqIGRhdGEgPSBjbGlwYm9h
cmQuRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgQlN0cmluZyBzdHJpbmc7CisgICAgZGF0YS0+RmluZFN0cmluZygidGV4dC9wbGFpbiIsICZz
dHJpbmcpOworCisgICAgY2xpcGJvYXJkLlVubG9jaygpOworCisgICAgcmV0dXJuIHN0cmluZzsK
K30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZy
YWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs
bG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQoreworICAgIEJDbGlwYm9hcmQgY2xp
cGJvYXJkKCJXZWJLaXQiKTsKKyAgICBpZiAoIWNsaXBib2FyZC5Mb2NrKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNsaXBib2FyZC5DbGVhcigpOworCisgICAgQk1lc3NhZ2UqIGRhdGEgPSBj
bGlwYm9hcmQuRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZGF0YS0+QWRkU3RyaW5nKCJ0ZXh0L3BsYWluIiwgdXJsLnN0cmluZygpKTsKKyAgICBjbGlwYm9h
cmQuQ29tbWl0KCk7CisKKyAgICBjbGlwYm9hcmQuVW5sb2NrKCk7Cit9CisKK3ZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZShOb2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCit7Cisg
ICAgQkNsaXBib2FyZCBjbGlwYm9hcmQoIldlYktpdCIpOworICAgIGlmICghY2xpcGJvYXJkLkxv
Y2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpcGJvYXJkLkNsZWFyKCk7CisgICAgY2xp
cGJvYXJkLkNvbW1pdCgpOworCisgICAgY2xpcGJvYXJkLlVubG9jaygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxh
dGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0
Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMTU0NWRmYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
UGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICog
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
ZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlICJL
ZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxJ
bnRlcmZhY2VEZWZzLmg+CisjaW5jbHVkZSA8TWVzc2FnZS5oPgorI2luY2x1ZGUgPFN0cmluZy5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVy
Rm9ySGFpa3VLZXlDb2RlKGNoYXIgc2luZ2xlQnl0ZSwgaW50IGtleUNvZGUpCit7CisgICAgc3dp
dGNoIChzaW5nbGVCeXRlKSB7CisgICAgY2FzZSBCX0ZVTkNUSU9OX0tFWToKKworICAgICAgICBz
d2l0Y2ggKGtleUNvZGUpIHsKKyAgICAgICAgY2FzZSBCX0YxX0tFWToKKyAgICAgICAgICAgIHJl
dHVybiAiRjEiOworICAgICAgICBjYXNlIEJfRjJfS0VZOgorICAgICAgICAgICAgcmV0dXJuICJG
MiI7CisgICAgICAgIGNhc2UgQl9GM19LRVk6CisgICAgICAgICAgICByZXR1cm4gIkYzIjsKKyAg
ICAgICAgY2FzZSBCX0Y0X0tFWToKKyAgICAgICAgICAgIHJldHVybiAiRjQiOworICAgICAgICBj
YXNlIEJfRjVfS0VZOgorICAgICAgICAgICAgcmV0dXJuICJGNSI7CisgICAgICAgIGNhc2UgQl9G
Nl9LRVk6CisgICAgICAgICAgICByZXR1cm4gIkY2IjsKKyAgICAgICAgY2FzZSBCX0Y3X0tFWToK
KyAgICAgICAgICAgIHJldHVybiAiRjciOworICAgICAgICBjYXNlIEJfRjhfS0VZOgorICAgICAg
ICAgICAgcmV0dXJuICJGOCI7CisgICAgICAgIGNhc2UgQl9GOV9LRVk6CisgICAgICAgICAgICBy
ZXR1cm4gIkY5IjsKKyAgICAgICAgY2FzZSBCX0YxMF9LRVk6CisgICAgICAgICAgICByZXR1cm4g
IkYxMCI7CisgICAgICAgIGNhc2UgQl9GMTFfS0VZOgorICAgICAgICAgICAgcmV0dXJuICJGMTEi
OworICAgICAgICBjYXNlIEJfRjEyX0tFWToKKyAgICAgICAgICAgIHJldHVybiAiRjEyIjsKKyAg
ICAgICAgY2FzZSBCX1BSSU5UX0tFWToKKyAgICAgICAgICAgIHJldHVybiAiUHJpbnQiOworICAg
ICAgICBjYXNlIEJfUEFVU0VfS0VZOgorICAgICAgICAgICAgcmV0dXJuICJQYXVzZSI7CisgICAg
ICAgIGNhc2UgQl9TQ1JPTExfS0VZOgorICAgICAgICAgICAgcmV0dXJuICIiOyAvLyBGSVhNRQor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBCX0JBQ0tTUEFDRToKKyAgICAg
ICAgcmV0dXJuICJVKzAwMDkiOworICAgIGNhc2UgQl9MRUZUX0FSUk9XOgorICAgICAgICByZXR1
cm4gIkxlZnQiOworICAgIGNhc2UgQl9SSUdIVF9BUlJPVzoKKyAgICAgICAgcmV0dXJuICJSaWdo
dCI7CisgICAgY2FzZSBCX1VQX0FSUk9XOgorICAgICAgICByZXR1cm4gIlVwIjsKKyAgICBjYXNl
IEJfRE9XTl9BUlJPVzoKKyAgICAgICAgcmV0dXJuICJEb3duIjsKKyAgICBjYXNlIEJfSU5TRVJU
OgorICAgICAgICByZXR1cm4gIkluc2VydCI7CisgICAgY2FzZSBCX0VOVEVSOgorICAgICAgICBy
ZXR1cm4gIkVudGVyIjsKKyAgICBjYXNlIEJfREVMRVRFOgorICAgICAgICByZXR1cm4gIlUrMDA3
RiI7CisgICAgY2FzZSBCX0hPTUU6CisgICAgICAgIHJldHVybiAiSG9tZSI7CisgICAgY2FzZSBC
X0VORDoKKyAgICAgICAgcmV0dXJuICJFbmQiOworICAgIGNhc2UgQl9QQUdFX1VQOgorICAgICAg
ICByZXR1cm4gIlBhZ2VVcCI7CisgICAgY2FzZSBCX1BBR0VfRE9XTjoKKyAgICAgICAgcmV0dXJu
ICJQYWdlRG93biI7CisgICAgY2FzZSBCX1RBQjoKKyAgICAgICAgcmV0dXJuICJVKzAwMDkiOwor
ICAgIH0KKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVy
KGtleUNvZGUpKTsKK30KKworc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGNo
YXIgc2luZ2xlQnl0ZSkKK3sKKyAgICBzd2l0Y2ggKHNpbmdsZUJ5dGUpIHsKKyAgICBjYXNlIEJf
QkFDS1NQQUNFOgorICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5
CisgICAgY2FzZSBCX1RBQjoKKyAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5
CisgICAgY2FzZSBCX1JFVFVSTjoKKyAgICAgICAgcmV0dXJuIFZLX1JFVFVSTjsgLy8oMEQpIFJl
dHVybiBrZXkKKyAgICBjYXNlIEJfRVNDQVBFOgorICAgICAgICByZXR1cm4gVktfRVNDQVBFOyAv
LyAoMUIpIEVTQyBrZXkKKyAgICBjYXNlIEJfU1BBQ0U6CisgICAgICAgIHJldHVybiBWS19TUEFD
RTsgLy8gKDIwKSBTUEFDRUJBUgorICAgIGNhc2UgQl9QQUdFX1VQOgorICAgICAgICByZXR1cm4g
VktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBrZXkKKyAgICBjYXNlIEJfUEFHRV9ET1dOOgorICAg
ICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgY2FzZSBCX0VO
RDoKKyAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5CisgICAgY2FzZSBCX0hP
TUU6CisgICAgICAgIHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5CisgICAgY2FzZSBC
X0xFRlRfQVJST1c6CisgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cg
a2V5CisgICAgY2FzZSBCX1VQX0FSUk9XOgorICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikg
VVAgQVJST1cga2V5CisgICAgY2FzZSBCX1JJR0hUX0FSUk9XOgorICAgICAgICByZXR1cm4gVktf
UklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5CisgICAgY2FzZSBCX0RPV05fQVJST1c6Cisg
ICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5CisgICAgY2FzZSBC
X0lOU0VSVDoKKyAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAg
Y2FzZSBCX0RFTEVURToKKyAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5
CisgICAgY2FzZSAweDJlOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0K
K30KKworUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoQk1lc3Nh
Z2UqIG1lc3NhZ2UpCisgICAgOiBtX2F1dG9SZXBlYXQoZmFsc2UpCisgICAgLCBtX2N0cmxLZXko
ZmFsc2UpCisgICAgLCBtX2FsdEtleShmYWxzZSkKKyAgICAsIG1fbWV0YUtleShmYWxzZSkKKyAg
ICAsIG1faXNLZXlwYWQoZmFsc2UpCisgICAgLCBtX3NoaWZ0S2V5KGZhbHNlKQoreworICAgIEJT
dHJpbmcgYnl0ZXMgPSBtZXNzYWdlLT5GaW5kU3RyaW5nKCJieXRlcyIpOworCisgICAgbV90ZXh0
ID0gU3RyaW5nOjpmcm9tVVRGOChieXRlcy5TdHJpbmcoKSwgYnl0ZXMuTGVuZ3RoKCkpOworICAg
IG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoYnl0ZXMuU3RyaW5nKCksIGJ5dGVzLkxlbmd0aCgp
KTsKKyAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2RlKGJ5
dGVzLkJ5dGVBdCgwKSwgbWVzc2FnZS0+RmluZEludDMyKCJrZXkiKSk7CisKKyAgICBpZiAobWVz
c2FnZS0+d2hhdCA9PSBCX0tFWV9VUCkKKyAgICAgICAgbV90eXBlID0gS2V5VXA7CisgICAgZWxz
ZSBpZiAobWVzc2FnZS0+d2hhdCA9PSBCX0tFWV9ET1dOKQorICAgICAgICBtX3R5cGUgPSBLZXlE
b3duOworCisgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktl
eUV2ZW50KGJ5dGVzLkJ5dGVBdCgwKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sKQoreworICAgIC8vIENh
biBvbmx5IGNoYW5nZSB0eXBlIGZyb20gS2V5RG93biB0byBSYXdLZXlEb3duIG9yIENoYXIsIGFz
IHdlIGxhY2sgaW5mb3JtYXRpb24gZm9yIG90aGVyIGNvbnZlcnNpb25zLgorICAgIEFTU0VSVCht
X3R5cGUgPT0gS2V5RG93bik7CisgICAgbV90eXBlID0gdHlwZTsKKyAgICBpZiAodHlwZSA9PSBS
YXdLZXlEb3duKSB7CisgICAgICAgIG1fdGV4dCA9IFN0cmluZygpOworICAgICAgICBtX3VubW9k
aWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9rZXlJZGVudGlm
aWVyID0gU3RyaW5nKCk7CisgICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gMDsKKyAg
ICB9Cit9CisKK2Jvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bs
YXRmb3JtTW91c2VFdmVudEhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kMjEyZjhiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Q
bGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKworI2luY2x1ZGUgPE1lc3NhZ2UuaD4K
KyNpbmNsdWRlIDxTdXBwb3J0RGVmcy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxh
dGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgQk1lc3NhZ2UqIG1lc3Nh
Z2UpCisgICAgOiBtX3RpbWVzdGFtcChtZXNzYWdlLT5GaW5kSW50NjQoIndoZW4iKSkKKyAgICAs
IG1fcG9zaXRpb24oSW50UG9pbnQobWVzc2FnZS0+RmluZFBvaW50KCJ3aGVyZSIpKSkKKyAgICAs
IG1fZ2xvYmFsUG9zaXRpb24obWVzc2FnZS0+RmluZFBvaW50KCJnbG9iYWxQb3NpdGlvbiIpKQor
ICAgICwgbV9zaGlmdEtleShmYWxzZSkKKyAgICAsIG1fY3RybEtleShmYWxzZSkKKyAgICAsIG1f
YWx0S2V5KGZhbHNlKQorICAgICwgbV9tZXRhS2V5KGZhbHNlKQorICAgICwgbV9jbGlja0NvdW50
KG1lc3NhZ2UtPkZpbmRJbnQzMigiY2xpY2tzIikpCit7CisgICAgaW50MzIgYnV0dG9ucyA9IG1l
c3NhZ2UtPkZpbmRJbnQzMigiYnV0dG9ucyIpOworICAgIHN3aXRjaCAoYnV0dG9ucykgeworICAg
IGNhc2UgMToKKyAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIDI6CisgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247Cisg
ICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICBzd2l0Y2ggKG1lc3NhZ2UtPndoYXQpIHsKKyAg
ICBjYXNlIEJfTU9VU0VfRE9XTjoKKyAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50UHJl
c3NlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCX01PVVNFX1VQOgorICAgICAgICBtX2V2
ZW50VHlwZSA9IE1vdXNlRXZlbnRSZWxlYXNlZDsKKyAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0
dG9uOyAvLyBGSVhNRTogV2ViY29yZSB3YW50cyB0byBrbm93IHRoZSBidXR0b24gcmVsZWFzZWQg
YnV0IHdlIGRvbid0IGtub3cuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQl9NT1VTRV9NT1ZF
RDoKKyAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOwor
ICAgICAgICBicmVhazsKKyAgICB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3Uu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0NWY0OAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3Bw
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUg
U2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgorCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisKKyNpbmNsdWRlIDxNZXNzYWdlLmg+
CisjaW5jbHVkZSA8UG9pbnQuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3Jt
V2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEJNZXNzYWdlKiBtZXNzYWdlKQorICAgIDog
bV9ncmFudWxhcml0eShTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCkKKyAgICAsIG1fc2hpZnRLZXko
ZmFsc2UpCisgICAgLCBtX2N0cmxLZXkoZmFsc2UpCisgICAgLCBtX2FsdEtleShmYWxzZSkKKyAg
ICAsIG1fbWV0YUtleShmYWxzZSkKKyAgICAsIG1faXNBY2NlcHRlZChmYWxzZSkKK3sKKyAgICBt
X3Bvc2l0aW9uID0gSW50UG9pbnQobWVzc2FnZS0+RmluZFBvaW50KCJwb3NpdGlvbiIpKTsKKyAg
ICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQobWVzc2FnZS0+RmluZFBvaW50KCJnbG9iYWxf
cG9zaXRpb24iKSk7CisKKyAgICBtX2RlbHRhWCA9IG1lc3NhZ2UtPkZpbmRGbG9hdCgiYmU6d2hl
ZWxfZGVsdGFfeCIpOworICAgIG1fZGVsdGFZID0gbWVzc2FnZS0+RmluZEZsb2F0KCJiZTp3aGVl
bF9kZWx0YV95Iik7CisKKyAgICBtX3doZWVsVGlja3NYID0gbV9kZWx0YVg7CisgICAgbV93aGVl
bFRpY2tzWSA9IG1fZGVsdGFZOworCisgICAgbV9kZWx0YVggKj0gLWNTY3JvbGxiYXJQaXhlbHNQ
ZXJMaW5lU3RlcDsKKyAgICBtX2RlbHRhWSAqPSAtY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVw
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKLS0gCjEuNi4zLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34291</attachid>
            <date>2009-08-07 10:42:01 -0700</date>
            <delta_ts>2009-08-07 12:20:48 -0700</delta_ts>
            <desc>Patch to add a fifth bunch of Haiku-specfic files to WebCore.</desc>
            <filename>Added-a-fifth-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>30590</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSBhMzlkMDkwYzNkZjAxOGMyMDIwNjk2OGNmZDVmN2EzNjc1MDQ2MWVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgNyBBdWcgMjAwOSAxOTozOTowNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgZmlmdGggYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1
OSArKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BvcHVwTWVudUhhaWt1LmNwcCAgICAgICB8
ICAgNjggKysrKysKIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAg
ICAgIHwgIDMyMiArKysrKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9TY3JlZW5IYWlrdS5jcHAgICAgICAgICAgfCAgIDg2ICsrKysrKwogV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TZWFyY2hQb3B1cE1lbnVIYWlrdS5jcHAgfCAgIDUxICsrKysKIFdlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5jcHAgICAgIHwgIDEzMSArKysrKysrKysKIFdl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvU2hhcmVkVGltZXJIYWlrdS5oICAgICAgIHwgICA1NiArKysr
CiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NvdW5kSGFpa3UuY3BwICAgICAgICAgICB8ICAgNDIg
KysrCiA4IGZpbGVzIGNoYW5nZWQsIDgxNSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3Uu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9SZW5kZXJUaGVt
ZUhhaWt1LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU2Ny
ZWVuSGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
ZWFyY2hQb3B1cE1lbnVIYWlrdS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NvdW5kSGFpa3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2OTIzODEzLi4zNDEwODdiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDYyIEBACisyMDA5LTA4LTA3ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIGEgZmlmdGggYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4OAor
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvUG9wdXBNZW51SGFpa3UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6UG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6
OlBvcHVwTWVudTo6flBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OnNo
b3cpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpoaWRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBNZW51OjppdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCk6CisgICAgICAgICogcGxhdGZv
cm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVIYWlrdTo6UmVuZGVyVGhlbWVIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUhhaWt1Ojp+UmVuZGVyVGhlbWVIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUhhaWt1OjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSGFpa3U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1
OjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwbGF0Zm9ybUluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFp
a3U6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGFpbnRDaGVj
a2JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OmFkanVzdE1lbnVMaXN0U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVIYWlrdTo6cGFpbnRNZW51TGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjp0aGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhh
aWt1OjpzeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSGFpa3U6OnNl
dENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUhhaWt1OjpzZXRS
YWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuQXZhaWxh
YmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChXZWJD
b3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5J
c01vbm9jaHJvbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhh
aWt1LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OlNlYXJj
aFBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OnNhdmVSZWNl
bnRTZWFyY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OmxvYWRSZWNl
bnRTZWFyY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQb3B1cE1lbnU6OmVuYWJsZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6OlNoYXJlZFRpbWVySGFpa3UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXJIYWlrdTo6RmlsdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6On5TaGFyZWRUaW1lckhhaWt1KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFRpbWVySGFpa3U6OnNldEZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZFRpbWVySGFpa3U6OnNldEZpcmVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRUaW1lckhhaWt1OjpzZXRTaG91bGRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hh
cmVkVGltZXJIYWlrdSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzdG9wU2hhcmVkVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1
L1NoYXJlZFRpbWVySGFpa3UuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvU291
bmRIYWlrdS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c3lzdGVtQmVlcCk6CisKIDIw
MDktMDctMzAgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2swMkBnbWFpbC5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9Qb3B1cE1lbnVIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Bv
cHVwTWVudUhhaWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDYw
OGM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Qb3B1cE1lbnVI
YWlrdS5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJD
b3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdv
b2RAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Lmgi
CisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSA8TWVudS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUG9wdXBNZW51
OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BvcHVwQ2xpZW50
KGNsaWVudCkKKyAgICAsIG1fbWVudSgwKQoreworfQorCitQb3B1cE1lbnU6On5Qb3B1cE1lbnUo
KQoreworICAgIGRlbGV0ZSBtX21lbnU7CisgICAgbV9tZW51ID0gMDsKK30KKwordm9pZCBQb3B1
cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3LCBpbnQgaW5k
ZXgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQb3B1cE1lbnU6OmhpZGUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51Ojp1cGRhdGVG
cm9tRWxlbWVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQb3B1cE1l
bnU6Oml0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUmVuZGVyVGhlbWVIYWlrdS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjAxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1JlbmRlclRoZW1lSGFpa3UuY3BwCkBAIC0wLDAgKzEsMzIyIEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqICAgICAg
ICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29t
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
PEZvbnQuaD4KKyNpbmNsdWRlIDxWaWV3Lmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBGSVhNRTogSSBhbSBub3Qgc3VyZSB3aHkgc28gbWFueSBtZXRob2RzIGFyZSBpbmxpbmUgaGVy
ZS4gVGhpcyB3YXMgY29waWVkIGZyb20gdGhlCisvLyBTeWxsYWJsZSBwb3J0LiBJdCBzaG91bGQg
cHJvYmFibHkgYWxsIGJlIHNjcmFwcGVkLgorY2xhc3MgUmVuZGVyVGhlbWVIYWlrdSA6IHB1Ymxp
YyBSZW5kZXJUaGVtZSB7CitwdWJsaWM6CisgICAgUmVuZGVyVGhlbWVIYWlrdSgpIDogUmVuZGVy
VGhlbWUoKSB7IH0KKyAgICB+UmVuZGVyVGhlbWVIYWlrdSgpIHsgfQorCisgICAgLy8gQSBtZXRo
b2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVk
cmF3aW5nIHdoZW4gaG92ZXJlZC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lSGFpa3UoKSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ29sb3IodWlfY29sb3IoQl9NRU5VX1NF
TEVDVEVEX0JBQ0tHUk9VTkRfQ09MT1IpKTsKKyAgICB9CisKKyAgICAvLyBUaGUgcGxhdGZvcm0g
c2VsZWN0aW9uIGNvbG9yLgorICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBDb2xvcih1aV9jb2xvcihC
X0NPTlRST0xfSElHSExJR0hUX0NPTE9SKSk7CisgICAgfQorCisgICAgQ29sb3IgcGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gQ29sb3IodWlfY29sb3IoQl9DT05UUk9MX0hJR0hMSUdIVF9DT0xPUikpOworICAgIH0K
KworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIENvbG9yKHVpX2NvbG9yKEJfQ09OVFJP
TF9URVhUX0NPTE9SKSk7CisgICAgfQorCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBDb2xvcih1aV9jb2xvcihCX0NPTlRST0xfVEVYVF9DT0xPUikpOworICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgaW50UmVjdCkKKyAgICB7
CisgICAgICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZ2JfY29sb3Igbm9UaW50ID0gdWlfY29sb3Io
Ql9QQU5FTF9CQUNLR1JPVU5EX0NPTE9SKTsKKyAgICAgICAgcmdiX2NvbG9yIGxpZ2h0ZW4xID0g
dGludF9jb2xvcihub1RpbnQsIEJfTElHSFRFTl8xX1RJTlQpOworICAgICAgICByZ2JfY29sb3Ig
bGlnaHRlbk1heCA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0xJR0hURU5fTUFYX1RJTlQpOworICAg
ICAgICByZ2JfY29sb3IgZGFya2VuMSA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0RBUktFTl8xX1RJ
TlQpOworICAgICAgICByZ2JfY29sb3IgZGFya2VuMiA9IHRpbnRfY29sb3Iobm9UaW50LCBCX0RB
UktFTl8yX1RJTlQpOworICAgICAgICByZ2JfY29sb3IgZGFya2VuMyA9IHRpbnRfY29sb3Iobm9U
aW50LCBCX0RBUktFTl8zX1RJTlQpOworICAgICAgICByZ2JfY29sb3IgZGFya2VuNCA9IHRpbnRf
Y29sb3Iobm9UaW50LCBCX0RBUktFTl80X1RJTlQpOworCisgICAgICAgIEJSZWN0IHJlY3QgPSBp
bnRSZWN0OworICAgICAgICBCVmlldyogdmlldyA9IGluZm8uY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGlzRW5hYmxlZChvYmplY3QpKSB7CisgICAgICAgICAgICAv
LyBGaWxsaW5nCisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbk1heCk7Cisg
ICAgICAgICAgICB2aWV3LT5GaWxsUmVjdChyZWN0KTsKKworICAgICAgICAgICAgdmlldy0+QmVn
aW5MaW5lQXJyYXkoNik7CisKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3Qu
bGVmdCwgcmVjdC5ib3R0b20pLCBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIGRhcmtlbjEp
OworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCks
IEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCksIGRhcmtlbjEpOworICAgICAgICAgICAgcmVj
dC5JbnNldEJ5KDEsIDEpOworICAgICAgICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5s
ZWZ0LCByZWN0LmJvdHRvbSksIEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwgZGFya2VuNCk7
CisgICAgICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwg
QlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSwgZGFya2VuNCk7CisgICAgICAgICAgICB2aWV3
LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQgKyAxLjBmLCByZWN0LmJvdHRvbSksIEJQb2ludChy
ZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSksIG5vVGludCk7CisgICAgICAgICAgICB2aWV3LT5BZGRM
aW5lKEJQb2ludChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSksIEJQb2ludChyZWN0LnJpZ2h0LCBy
ZWN0LnRvcCArIDEuMGYpLCBub1RpbnQpOworCisgICAgICAgICAgICB2aWV3LT5FbmRMaW5lQXJy
YXkoKTsKKworICAgICAgICAgICAgLy8gQ2hlY2ttYXJrCisgICAgICAgICAgICBpZiAoaXNDaGVj
a2VkKG9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICByZWN0Lkluc2V0QnkoMiwgMik7CisKKyAg
ICAgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IodWlfY29sb3IoQl9LRVlCT0FSRF9OQVZJ
R0FUSU9OX0NPTE9SKSk7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0UGVuU2l6ZSgyKTsKKyAg
ICAgICAgICAgICAgICB2aWV3LT5TZXREcmF3aW5nTW9kZShCX09QX09WRVIpOworICAgICAgICAg
ICAgICAgICAgICAvLyBuZWVkZWQgYmVjYXVzZSBvZiBhbnRpLWFsaWFzaW5nCisgICAgICAgICAg
ICAgICAgdmlldy0+U3Ryb2tlTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIEJQb2lu
dChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSkpOworICAgICAgICAgICAgICAgIHZpZXctPlN0cm9r
ZUxpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pLCBCUG9pbnQocmVjdC5yaWdodCwg
cmVjdC50b3ApKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKDEpOworICAgICAg
ICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2RlKEJfT1BfQ09QWSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGaWxsaW5nCisgICAgICAgICAgICB2
aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbjEpOworICAgICAgICAgICAgdmlldy0+RmlsbFJlY3Qo
cmVjdCk7CisKKyAgICAgICAgICAgIC8vIEJveAorICAgICAgICAgICAgdmlldy0+QmVnaW5MaW5l
QXJyYXkoNik7CisKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwg
cmVjdC5ib3R0b20pLCBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIG5vVGludCk7CisgICAg
ICAgICAgICB2aWV3LT5BZGRMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSwgQlBvaW50
KHJlY3QucmlnaHQsIHJlY3QudG9wKSwgbm9UaW50KTsKKyAgICAgICAgICAgIHJlY3QuSW5zZXRC
eSgxLCAxKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBvaW50KHJlY3QubGVmdCwgcmVj
dC5ib3R0b20pLCBCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIGRhcmtlbjIpOworICAgICAg
ICAgICAgdmlldy0+QWRkTGluZShCUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCksIEJQb2ludChy
ZWN0LnJpZ2h0LCByZWN0LnRvcCksIGRhcmtlbjIpOworICAgICAgICAgICAgdmlldy0+QWRkTGlu
ZShCUG9pbnQocmVjdC5sZWZ0ICsgMS4wZiwgcmVjdC5ib3R0b20pLCBCUG9pbnQocmVjdC5yaWdo
dCwgcmVjdC5ib3R0b20pLCBkYXJrZW4xKTsKKyAgICAgICAgICAgIHZpZXctPkFkZExpbmUoQlBv
aW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSwgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9w
ICsgMS4wZiksIGRhcmtlbjEpOworCisgICAgICAgICAgICB2aWV3LT5FbmRMaW5lQXJyYXkoKTsK
KworICAgICAgICAgICAgLy8gQ2hlY2ttYXJrCisgICAgICAgICAgICBpZiAoaXNDaGVja2VkKG9i
amVjdCkpIHsKKyAgICAgICAgICAgICAgICByZWN0Lkluc2V0QnkoMiwgMik7CisKKyAgICAgICAg
ICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IodGludF9jb2xvcih1aV9jb2xvcihCX0tFWUJPQVJE
X05BVklHQVRJT05fQ09MT1IpLCBCX0RJU0FCTEVEX01BUktfVElOVCkpOworICAgICAgICAgICAg
ICAgIHZpZXctPlNldFBlblNpemUoMik7CisgICAgICAgICAgICAgICAgdmlldy0+U2V0RHJhd2lu
Z01vZGUoQl9PUF9PVkVSKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ug
b2YgYW50aS1hbGlhc2luZworICAgICAgICAgICAgICAgIHZpZXctPlN0cm9rZUxpbmUoQlBvaW50
KHJlY3QubGVmdCwgcmVjdC50b3ApLCBCUG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20pKTsK
KyAgICAgICAgICAgICAgICB2aWV3LT5TdHJva2VMaW5lKEJQb2ludChyZWN0LmxlZnQsIHJlY3Qu
Ym90dG9tKSwgQlBvaW50KHJlY3QucmlnaHQsIHJlY3QudG9wKSk7CisgICAgICAgICAgICAgICAg
dmlldy0+U2V0UGVuU2l6ZSgxKTsKKyAgICAgICAgICAgICAgICB2aWV3LT5TZXREcmF3aW5nTW9k
ZShCX09QX0NPUFkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50
UmVjdCYgaW50UmVjdCkKKyAgICB7CisgICAgICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvL2NvZGUg
dGFrZW4gZnJvbSB0aGUgSGFpa3Ugc291cmNlIGNvZGUgKFJhZGlvQnV0dG9uLmNwcCkKKworICAg
ICAgICAvLyBsYXlvdXQgdGhlIHJlY3QgZm9yIHRoZSBkb3QKKyAgICAgICAgQlJlY3QgcmVjdCA9
IGludFJlY3Q7CisgICAgICAgIEJWaWV3KiB2aWV3ID0gaW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKworICAgICAgICAvLyBjb2xvcnMKKyAgICAgICAgcmdiX2NvbG9yIGJnID0gdWlf
Y29sb3IoQl9QQU5FTF9CQUNLR1JPVU5EX0NPTE9SKTsKKyAgICAgICAgcmdiX2NvbG9yIGxpZ2h0
ZW5tYXg7CisgICAgICAgIHJnYl9jb2xvciBsaWdodGVuMTsKKyAgICAgICAgcmdiX2NvbG9yIGRh
cmtlbjE7CisgICAgICAgIHJnYl9jb2xvciBkYXJrZW4yOworICAgICAgICByZ2JfY29sb3IgZGFy
a2VuMzsKKyAgICAgICAgcmdiX2NvbG9yIGRhcmtlbm1heDsKKworICAgICAgICByZ2JfY29sb3Ig
bmF2aUNvbG9yID0gdWlfY29sb3IoQl9LRVlCT0FSRF9OQVZJR0FUSU9OX0NPTE9SKTsKKyAgICAg
ICAgcmdiX2NvbG9yIGtub2I7CisgICAgICAgIHJnYl9jb2xvciBrbm9iRGFyazsKKyAgICAgICAg
cmdiX2NvbG9yIGtub2JMaWdodDsKKworICAgICAgICBpZiAoaXNFbmFibGVkKG9iamVjdCkpIHsK
KyAgICAgICAgICAgIGxpZ2h0ZW5tYXggPSB0aW50X2NvbG9yKGJnLCBCX0xJR0hURU5fTUFYX1RJ
TlQpOworICAgICAgICAgICAgbGlnaHRlbjEgPSB0aW50X2NvbG9yKGJnLCBCX0xJR0hURU5fMV9U
SU5UKTsKKyAgICAgICAgICAgIGRhcmtlbjEgPSB0aW50X2NvbG9yKGJnLCBCX0RBUktFTl8xX1RJ
TlQpOworICAgICAgICAgICAgZGFya2VuMiA9IHRpbnRfY29sb3IoYmcsIEJfREFSS0VOXzJfVElO
VCk7CisgICAgICAgICAgICBkYXJrZW4zID0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fM19USU5U
KTsKKyAgICAgICAgICAgIGRhcmtlbm1heCA9IHRpbnRfY29sb3IoYmcsIEJfREFSS0VOX01BWF9U
SU5UKTsKKworICAgICAgICAgICAga25vYiA9IG5hdmlDb2xvcjsKKyAgICAgICAgICAgIGtub2JE
YXJrID0gdGludF9jb2xvcihuYXZpQ29sb3IsIEJfREFSS0VOXzNfVElOVCk7CisgICAgICAgICAg
ICBrbm9iTGlnaHQgPSB0aW50X2NvbG9yKG5hdmlDb2xvciwgMC4xNSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBsaWdodGVubWF4ID0gdGludF9jb2xvcihiZywgQl9MSUdIVEVOXzJf
VElOVCk7CisgICAgICAgICAgICBsaWdodGVuMSA9IGJnOworICAgICAgICAgICAgZGFya2VuMSA9
IGJnOworICAgICAgICAgICAgZGFya2VuMiA9IHRpbnRfY29sb3IoYmcsIEJfREFSS0VOXzFfVElO
VCk7CisgICAgICAgICAgICBkYXJrZW4zID0gdGludF9jb2xvcihiZywgQl9EQVJLRU5fMl9USU5U
KTsKKyAgICAgICAgICAgIGRhcmtlbm1heCA9IHRpbnRfY29sb3IoYmcsIEJfRElTQUJMRURfTEFC
RUxfVElOVCk7CisKKyAgICAgICAgICAgIGtub2IgPSB0aW50X2NvbG9yKG5hdmlDb2xvciwgQl9M
SUdIVEVOXzJfVElOVCk7CisgICAgICAgICAgICBrbm9iRGFyayA9IHRpbnRfY29sb3IobmF2aUNv
bG9yLCBCX0xJR0hURU5fMV9USU5UKTsKKyAgICAgICAgICAgIGtub2JMaWdodCA9IHRpbnRfY29s
b3IobmF2aUNvbG9yLCAoQl9MSUdIVEVOXzJfVElOVCArIEJfTElHSFRFTl9NQVhfVElOVCkgLyAy
LjApOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG90CisgICAgICAgIGlmIChpc0NoZWNrZWQo
b2JqZWN0KSkgeworICAgICAgICAgICAgLy8gZnVsbAorICAgICAgICAgICAgdmlldy0+U2V0SGln
aENvbG9yKGtub2JEYXJrKTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxFbGxpcHNlKHJlY3QpOwor
CisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3Ioa25vYik7CisgICAgICAgICAgICB2aWV3
LT5GaWxsRWxsaXBzZShCUmVjdChyZWN0LmxlZnQgKyAyLCByZWN0LnRvcCArIDIsIHJlY3Qucmln
aHQgLSAzLCByZWN0LmJvdHRvbSAtIDMpKTsKKworICAgICAgICAgICAgdmlldy0+U2V0SGlnaENv
bG9yKGtub2JMaWdodCk7CisgICAgICAgICAgICB2aWV3LT5GaWxsRWxsaXBzZShCUmVjdChyZWN0
LmxlZnQgKyAzLCByZWN0LnRvcCArIDMsIHJlY3QucmlnaHQgLSA1LCByZWN0LmJvdHRvbSAtIDUp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGVtcHR5CisgICAgICAgICAgICB2
aWV3LT5TZXRIaWdoQ29sb3IobGlnaHRlbm1heCk7CisgICAgICAgICAgICB2aWV3LT5GaWxsRWxs
aXBzZShyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJlY3QuSW5zZXRCeSgtMS4wLCAtMS4w
KTsKKworICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoZGFya2VuMSk7CisgICAgICAgIHZpZXct
PlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgMTgwLjBmKTsKKyAgICAgICAgdmlldy0+U2V0SGlnaENv
bG9yKGxpZ2h0ZW5tYXgpOworICAgICAgICB2aWV3LT5TdHJva2VBcmMocmVjdCwgNDUuMGYsIC0x
ODAuMGYpOworCisgICAgICAgIHJlY3QuSW5zZXRCeSgxLCAxKTsKKworICAgICAgICAvLyBpbm5l
ciBjaXJjbGUKKyAgICAgICAgdmlldy0+U2V0SGlnaENvbG9yKGRhcmtlbjMpOworICAgICAgICB2
aWV3LT5TdHJva2VBcmMocmVjdCwgNDUuMGYsIDE4MC4wZik7CisgICAgICAgIHZpZXctPlNldEhp
Z2hDb2xvcihiZyk7CisgICAgICAgIHZpZXctPlN0cm9rZUFyYyhyZWN0LCA0NS4wZiwgLTE4MC4w
Zik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZvaWQgYWRqdXN0TWVudUxp
c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlbGVtZW50KSBjb25zdAorICAgIHsKKyAgICAgICAgLyogTGVhdmUgc29tZSBzcGFj
ZSBmb3IgdGhlIGFycm93ICovCisgICAgICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3Ro
KDIyLCBGaXhlZCkpOworICAgICAgICBjb25zdCBpbnQgbWluSGVpZ2h0ID0gMjA7CisgICAgICAg
IHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKKyAgICB9CisK
KyAgICBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgc3VwcG9ydHNGb2N1
cygpIGNvbnN0OworfTsKKworUmVuZGVyVGhlbWUqIHRoZW1lKCkKK3sKKyAgICBzdGF0aWMgUmVu
ZGVyVGhlbWVIYWlrdSByZW5kZXJUaGVtZTsKKyAgICByZXR1cm4gJnJlbmRlclRoZW1lOworfQor
Cit2b2lkIFJlbmRlclRoZW1lSGFpa3U6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRT
cGVjaWZpZWRTaXplKHN0YXRpY19jYXN0PGludD4oYmVfcGxhaW5fZm9udC0+U2l6ZSgpKSk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVIYWlrdTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZSA9IDEwOworCisgICAgLy8gSWYgdGhlIHdpZHRo
IGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBk
by4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxl
LT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IEEg
aGFyZC1jb2RlZCBzaXplIG9mICdzaXplJyBpcyB1c2VkLiBUaGlzIGlzIHdyb25nIGJ1dCBuZWNl
c3NhcnkgZm9yIG5vdy4KKworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUsIEZpeGVkKSk7CisKKyAg
ICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChzaXplLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lSGFpa3U6OnNldFJh
ZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyB0aGUg
c2FtZSBhcyBjaGVja2JveGVzLgorICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7Cit9CisKK1Bh
c3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFn
ZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lSGFpa3U6OmNy
ZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBmYWxsYmFjayA9IFJlbmRlclRoZW1l
SGFpa3U6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9TY3JlZW5IYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDMyOTdiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAKQEAgLTAs
MCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxl
YXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5o
PgorI2luY2x1ZGUgPGludGVyZmFjZS9TY3JlZW4uaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopCit7CisgICAgQlNjcmVlbiBzY3JlZW47
CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNjcmVlbiBpcyB2YWxpZAorICAgIHJldHVy
biBGbG9hdFJlY3Qoc2NyZWVuLkZyYW1lKCkpOworfQorCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxh
YmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBGSVhNRTogV2UgY291bGQgdXNlIHRo
ZSBnZXRfZGVza2Jhcl9mcmFtZSgpIGZ1bmN0aW9uCisgICAgLy8gZnJvbSBJbnRlcmZhY2VEZWZz
LmggdG8gbWFrZSB0aGlzIHNtYWxsZXIKKyAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOwor
fQorCitpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KikKK3sKKyAgICBCU2NyZWVuIHNjcmVlbjsKKyAg
ICAvLyBGSVhNRTogV2UgYXNzdW1lIHRoaXMgc2NyZWVuIGlzIHZhbGlkCisgICAgY29sb3Jfc3Bh
Y2UgY3MgPSBzY3JlZW4uQ29sb3JTcGFjZSgpOworCisgICAgc2l6ZV90IHBpeGVsQ2h1bmssIHJv
d0FsaWdubWVudCwgcGl4ZWxzUGVyQ2h1bms7CisgICAgaWYgKGdldF9waXhlbF9zaXplX2Zvcihj
cywgJnBpeGVsQ2h1bmssICZyb3dBbGlnbm1lbnQsICZwaXhlbHNQZXJDaHVuaykgPT0gQl9PSykK
KyAgICAgICAgLy8gRklYTUU6IE5vdCBzdXJlIGlmIHRoaXMgaXMgcmlnaHQKKyAgICAgICAgcmV0
dXJuIHBpeGVsQ2h1bmsgKiA4OworCisgICAgcmV0dXJuIDg7Cit9CisKK2ludCBzY3JlZW5EZXB0
aFBlckNvbXBvbmVudChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDg7Cit9CisKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCit7CisgICAgQlNj
cmVlbiBzY3JlZW47CisgICAgLy8gRklYTUU6IFdlIGFzc3VtZSB0aGlzIHNjcmVlbiBpcyB2YWxp
ZAorICAgIHJldHVybiBzY3JlZW4uQ29sb3JTcGFjZSgpID09IEJfTU9OT0NIUk9NRV8xX0JJVDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2hhaWt1L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvU2VhcmNoUG9wdXBNZW51SGFpa3UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmZkNWQ5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1NlYXJjaFBvcHVwTWVudUhhaWt1LmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgorCisjaW5jbHVkZSAiQXRv
bWljU3RyaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NlYXJjaFBvcHVwTWVudTo6U2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNs
aWVudCogY2xpZW50KQorICAgIDogUG9wdXBNZW51KGNsaWVudCkKK3sKK30KKwordm9pZCBTZWFy
Y2hQb3B1cE1lbnU6OnNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFNlYXJjaFBvcHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU2VhcmNoUG9wdXBNZW51OjplbmFibGVkKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1No
YXJlZFRpbWVySGFpa3UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhh
aWt1LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjQ0ZTZmCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmNw
cApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56
YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkVGltZXJIYWlr
dS5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlIDxMb29wZXIuaD4KKyNp
bmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8TWVzc2FnZVJ1bm5lci5oPgorI2luY2x1ZGUg
PHN1cHBvcnQvTG9ja2VyLmg+CisjaW5jbHVkZSA8c3VwcG9ydC9BdXRvbG9jay5oPgorCisjZGVm
aW5lIEZJUkVfTUVTU0FHRSAnZmlyZScKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NoYXJl
ZFRpbWVySGFpa3U6OlNoYXJlZFRpbWVySGFpa3UoKQorICAgIDogQk1lc3NhZ2VGaWx0ZXIoRklS
RV9NRVNTQUdFKQorICAgICwgbV9maXJlVGltZSgwKQorICAgICwgbV9zaG91bGRSdW4odHJ1ZSkK
KyAgICAsIG1fdGltZXJGdW5jdGlvbigwKQoreworfQorCitmaWx0ZXJfcmVzdWx0IFNoYXJlZFRp
bWVySGFpa3U6OkZpbHRlcihCTWVzc2FnZSogbWVzc2FnZSwgQkhhbmRsZXIqKiBfdGFyZ2V0KQor
eworICAgIGlmIChtX3RpbWVyRnVuY3Rpb24gJiYgbV9zaG91bGRSdW4pCisgICAgICAgIG1fdGlt
ZXJGdW5jdGlvbigpOworCisgICAgcmV0dXJuIEJfU0tJUF9NRVNTQUdFOworfQorCitTaGFyZWRU
aW1lckhhaWt1Ojp+U2hhcmVkVGltZXJIYWlrdSgpCit7Cit9CisKK3ZvaWQgU2hhcmVkVGltZXJI
YWlrdTo6c2V0RmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQoreworICAgIG1fZmlyZVRpbWUgPSBm
aXJlVGltZTsKKyAgICBpZiAobV9maXJlVGltZSA+IDAgJiYgbV9zaG91bGRSdW4pIHsKKyAgICAg
ICAgYmlndGltZV90IHNsZWVweVRpbWUgPSBzdGF0aWNfY2FzdDxiaWd0aW1lX3Q+KChtX2ZpcmVU
aW1lIC0gV1RGOjpjdXJyZW50VGltZSgpKSAqIDEwMDAwMDApOworCisgICAgICAgIGlmIChzbGVl
cHlUaW1lIDwgMCkKKyAgICAgICAgICAgIHNsZWVweVRpbWUgPSAwOworCisgICAgICAgIEJNZXNz
YWdlUnVubmVyOjpTdGFydFNlbmRpbmcoTG9vcGVyKCksIG5ldyBCTWVzc2FnZShGSVJFX01FU1NB
R0UpLCBzbGVlcHlUaW1lLCAxKTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkVGltZXJIYWlrdTo6
c2V0RmlyZUZ1bmN0aW9uKHZvaWQgKCpmKSgpKQoreworICAgIG1fdGltZXJGdW5jdGlvbiA9IGY7
Cit9CisKK3ZvaWQgU2hhcmVkVGltZXJIYWlrdTo6c2V0U2hvdWxkUnVuKGJvb2wgc2hvdWxkUnVu
KQoreworICAgIG1fc2hvdWxkUnVuID0gc2hvdWxkUnVuOworfQorCisvLyBTdGF0aWMgaW5zdGFu
Y2UKK1NoYXJlZFRpbWVySGFpa3UqIGdldFNoYXJlZFRpbWVySGFpa3UoKQoreworICAgIC8vIFBs
ZWFzZSBub3RlIHRoaXMgaXMgc3RpbGwgYW4gZXhwZXJpbWVudGFsIHNvbHV0aW9uLgorCisgICAg
Qkxvb3BlciAqbG9vcGVyID0gQkxvb3Blcjo6TG9vcGVyRm9yVGhyZWFkKGZpbmRfdGhyZWFkKDAp
KTsKKyAgICAvLyBBU1NFUlQobG9vcGVyKTsKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGNoZWNr
IGlmIHRoZSBjdXJyZW50IGxvb3BlciBoYXMgYSB2YWxpZCBpZiBub3QgYWRkIGEgbmV3IG9uZS4K
KyAgICAvLyB3ZSBzaG91bGQgYWxzbyBiZSBzdXJlIHRoZSBsb29wZXIgaXMgYSBCV2luZG93Li4K
KworICAgIHN0YXRpYyBTaGFyZWRUaW1lckhhaWt1KiBzaGFyZWRUaW1lciA9IDA7CisKKyAgICBp
ZiAoIXNoYXJlZFRpbWVyKSB7CisgICAgICAgIEJBdXRvbG9jayBsb2NrKGxvb3Blcik7CisgICAg
ICAgIHNoYXJlZFRpbWVyID0gbmV3IFNoYXJlZFRpbWVySGFpa3UoKTsKKyAgICAgICAgbG9vcGVy
LT5BZGRDb21tb25GaWx0ZXIoc2hhcmVkVGltZXIpOworICAgIH0KKworICAgIHJldHVybiBzaGFy
ZWRUaW1lcjsKK30KKworLy8gV2ViQ29yZSBmdW5jdGlvbnMKK3ZvaWQgc2V0U2hhcmVkVGltZXJG
aXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgpKQoreworICAgIFNoYXJlZFRpbWVySGFpa3UqIHRpbWVy
ID0gZ2V0U2hhcmVkVGltZXJIYWlrdSgpOworICAgIEJBdXRvbG9jayBsb2NrKHRpbWVyLT5Mb29w
ZXIoKSk7CisgICAgdGltZXItPnNldEZpcmVGdW5jdGlvbihmKTsKK30KKwordm9pZCBzZXRTaGFy
ZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKK3sKKyAgICBTaGFyZWRUaW1lckhhaWt1
KiB0aW1lciA9IGdldFNoYXJlZFRpbWVySGFpa3UoKTsKKyAgICBCQXV0b2xvY2sgbG9jayh0aW1l
ci0+TG9vcGVyKCkpOworICAgIHRpbWVyLT5zZXRTaG91bGRSdW4odHJ1ZSk7CisgICAgdGltZXIt
PnNldEZpcmVUaW1lKGZpcmVUaW1lKTsKK30KKwordm9pZCBzdG9wU2hhcmVkVGltZXIoKQorewor
ICAgIFNoYXJlZFRpbWVySGFpa3UqIHRpbWVyID0gZ2V0U2hhcmVkVGltZXJIYWlrdSgpOworICAg
IEJBdXRvbG9jayBsb2NrKHRpbWVyLT5Mb29wZXIoKSk7CisgICAgdGltZXItPnNldFNob3VsZFJ1
bihmYWxzZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9TaGFyZWRUaW1lckhhaWt1LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1NoYXJlZFRpbWVySGFpa3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wYzM2M2ZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9T
aGFyZWRUaW1lckhhaWt1LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2hhcmVkVGltZXJIYWlrdV9oCisjZGVm
aW5lIFNoYXJlZFRpbWVySGFpa3VfaAorCisjaW5jbHVkZSA8TWVzc2FnZUZpbHRlci5oPgorI2lu
Y2x1ZGUgPE9TLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBTaGFyZWRUaW1l
ckhhaWt1IDogcHVibGljIEJNZXNzYWdlRmlsdGVyIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgU2hhcmVkVGltZXJIYWlrdSgpOworICAgICAgICAgICAgflNoYXJlZFRpbWVySGFpa3Uo
KTsKKworICAgICAgICAgICAgdm9pZCBzZXRGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpOworICAg
ICAgICAgICAgdm9pZCBzZXRGaXJlRnVuY3Rpb24odm9pZCAoKmYpKCkpOworICAgICAgICAgICAg
dm9pZCBzZXRTaG91bGRSdW4oYm9vbCBzaG91bGRSdW4pOworCisgICAgICAgICAgICB2aXJ0dWFs
IGZpbHRlcl9yZXN1bHQgRmlsdGVyKEJNZXNzYWdlKiBtZXNzYWdlLCBCSGFuZGxlcioqIF90YXJn
ZXQpOworCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBkb3VibGUgbV9maXJlVGltZTsK
KyAgICAgICAgICAgIHZvaWQgKCptX3RpbWVyRnVuY3Rpb24pKCk7CisgICAgICAgICAgICBib29s
IG1fc2hvdWxkUnVuOworICAgIH07CisKKyAgICBTaGFyZWRUaW1lckhhaWt1KiBnZXRTaGFyZWRU
aW1lckhhaWt1KCk7Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTaGFyZWRU
aW1lckhhaWt1X2gKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Tb3VuZEhh
aWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlZTkzZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvU291bmRIYWlrdS5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoK
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
Zy5oIgorI2luY2x1ZGUgIlNvdW5kLmgiCisKKyNpbmNsdWRlIDxCZWVwLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIHN5c3RlbUJlZXAoKQoreworICAgIGJlZXAoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCi0tIAoxLjYuMy4yCgo=
</data>
<flag name="review"
          id="18458"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34301</attachid>
            <date>2009-08-07 11:39:46 -0700</date>
            <delta_ts>2009-08-07 12:18:49 -0700</delta_ts>
            <desc>Patch to add a sixth bunch of Haiku-specfic files to WebCore.</desc>
            <filename>Added-a-sixth-bunch-of-Haiku-specific-files-for-WebC.patch</filename>
            <type>text/plain</type>
            <size>13989</size>
            <attacher name="Maxime Simon">simon.maxime</attacher>
            
              <data encoding="base64">RnJvbSA0YjY1MjU0MzM3NzFkY2QwNTRkZDg3ZGIzMWVlYjY2MmYwMmRkOTcxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+
CkRhdGU6IEZyaSwgNyBBdWcgMjAwOSAyMDozODozNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFk
ZGVkIGEgc2l4dGggYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCgot
LS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzYg
KysrKysrKwogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIHwg
IDEyNiArKysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1Ry
YW5zbGF0b3JEZWNvZGVyLmNwcCAgfCAgIDY4ICsrKysrKysrKysrKysKIFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaCAgICB8ICAgNTUgKysrKysrKysrKysKIFdlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwICAgICAgICB8ICAgOTUgKysrKysrKysr
KysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzODAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L1RyYW5zbGF0b3JEZWNvZGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2OTIzODEzLi5lZjA5ZTY2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM5IEBACisyMDA5LTA4LTA3ICBNYXhpbWUgU2ltb24gIDxzaW1vbi5tYXhpbWVAZ21haWwuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IGEgc2l4dGggYnVuY2ggb2YgSGFpa3Utc3BlY2lmaWMgZmlsZXMgZm9yIFdlYkNvcmUuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjk4OAorCisgICAg
ICAgICogcGxhdGZvcm0vaGFpa3UvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogQWRkZWQuCisgICAg
ICAgIChsb2FkUmVzb3VyY2VJbnRvQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6aGlzdG9yeUNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OnN1cHBvcnRlZEtleVNpemVzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjp1c2VySWRsZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uTWFpblRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09m
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpmaWxlU3lzdGVtUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRTdXBwb3J0ZWRLZXlTaXplcyk6CisgICAgICAgICogcGxhdGZvcm0vaGFp
a3UvVHJhbnNsYXRvckRlY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
bGF0b3JEZWNvZGVyOjpUcmFuc2xhdG9yRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFu
c2xhdG9yRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
bGF0b3JEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNsYXRvckRlY29kZXI6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1RyYW5z
bGF0b3JEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRvckRlY29k
ZXI6OmdldEJpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6V2lkZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OldpZGdldDo6fldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmZyYW1l
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZyYW1lUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldElzU2VsZWN0ZWQpOgorCiAyMDA5LTA3LTMw
ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrMDJAZ21haWwuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM4
MGZjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgi
CisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAi
RGF0YUdyaWRDb2x1bW5MaXN0LmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpc3RvcnkuaCIKKyNpbmNsdWRl
ICJJY29uTG9hZGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgi
CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIKKyNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgi
CisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSA8cnVu
dGltZS9KU1ZhbHVlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1ZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJ
bnRvQXJyYXkoY29uc3QgY2hhciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gVmVjdG9yPGNoYXI+KCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBoaXN0
b3J5Q29udGFpbnMoU3RyaW5nIGNvbnN0JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Zl
Y3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVNpemVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCitTdHJpbmcgc2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5n
ICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK2Zsb2F0IHVzZXJJZGxlVGltZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBjYWxsT25NYWluVGhyZWFkKHZvaWQgKCopKCkpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIEtVUkw6OmZp
bGVTeXN0ZW1QYXRoKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKwordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5n
PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVy
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMzUwZTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1RyYW5zbGF0b3JEZWNvZGVyLmNwcApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4
aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2xhdG9yRGVjb2Rlci5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxEYXRhSU8uaD4KKyNpbmNsdWRlIDxUcmFu
c2xhdGlvblV0aWxzLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUcmFuc2xhdG9yRGVj
b2Rlcjo6VHJhbnNsYXRvckRlY29kZXIoKQorICAgIDogbV9pbWFnZSgwKQoreworICAgIHNldFNp
emUoLTEsIC0xKTsKK30KKworYm9vbCBUcmFuc2xhdG9yRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSgpICE9IEludFNpemUoLTEsIC0xKTsKK30KKwor
UkdCQTMyQnVmZmVyKiBUcmFuc2xhdG9yRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCisv
LyBBbGwgc3BlY2lmaWMgZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhl
IGRhdGEgdGhleSBhcmUgZ2l2ZW4uCit2b2lkIFRyYW5zbGF0b3JEZWNvZGVyOjpzZXREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKGFsbERh
dGFSZWNlaXZlZCkgeyAvL3Byb2dyZXNzaXZlIGxvYWRpbmc/CisgICAgICAgIEJNZW1vcnlJTyBp
byhkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgIG1faW1hZ2UgPSBCVHJhbnNs
YXRpb25VdGlsczo6R2V0Qml0bWFwKCZpbyk7CisgICAgICAgIGlmIChtX2ltYWdlKQorICAgICAg
ICAgICAgLy9zZXQgdGhlIGltYWdlIHNpemUgZGVjb2RlZC4KKyAgICAgICAgICAgIHNldFNpemUo
bV9pbWFnZS0+Qm91bmRzKCkuV2lkdGgoKSArIDEsIG1faW1hZ2UtPkJvdW5kcygpLkhlaWdodCgp
ICsgMSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvVHJhbnNsYXRvckRlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zMzNiMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9UcmFuc2xhdG9yRGVjb2Rlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUcmFuc2xhdG9yRGVjb2Rlcl9o
CisjZGVmaW5lIFRyYW5zbGF0b3JEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5o
IgorI2luY2x1ZGUgPEJpdG1hcC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFz
cyBUcmFuc2xhdG9yRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNsYXRvckRlY29kZXIoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkgY29uc3Q7CisKKyAgICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIg
cGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKKworICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICAgICAgQkJpdG1hcCogZ2V0Qml0bWFwKCkg
eyByZXR1cm4gbV9pbWFnZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQkJpdG1hcCogbV9p
bWFnZTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJhbnNs
YXRvckRlY29kZXJfaAorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdl
dEhhaWt1LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvV2lkZ2V0SGFpa3UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzFmY2EKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1dpZGdldEhhaWt1LmNwcApAQCAtMCwwICsxLDk1IEBA
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
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxDb250cm9sLmg+CisjaW5jbHVkZSA8Vmll
dy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1X
aWRnZXQgd2lkZ2V0KQoreworICAgIGluaXQod2lkZ2V0KTsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0
KCkKK3sKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZnJhbWU7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZv
Y3VzKCkKK3sKKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1XaWRn
ZXQoKS0+TWFrZUZvY3VzKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJiBjdXJzb3IpCit7CisgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHBsYXRm
b3JtV2lkZ2V0KCktPlNldFZpZXdDdXJzb3IoY3Vyc29yLmltcGwoKSk7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpzaG93KCkKK3sKKyAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZv
cm1XaWRnZXQoKS0+U2hvdygpOworfQorCit2b2lkIFdpZGdldDo6aGlkZSgpCit7CisgICAgaWYg
KHBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtV2lkZ2V0KCktPkhpZGUoKTsKK30K
Kwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgSW50UmVjdCBjb25zdCYg
cikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxl
Y3RlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKwotLSAKMS42LjMuMgoK
</data>
<flag name="review"
          id="18469"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>