<?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>86296</bug_id>
          
          <creation_ts>2012-05-12 08:10:51 -0700</creation_ts>
          <short_desc>Implement LayoutTest&apos;s eventSender.beginDragWithFiles interface in windows platform</short_desc>
          <delta_ts>2012-05-30 19:02:51 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="huangxueqing">huangxueqing</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>dcheng</cc>
    
    <cc>enrica</cc>
    
    <cc>jberlin</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>622345</commentid>
    <comment_count>0</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-12 08:10:51 -0700</bug_when>
    <thetext>eventSender.beginDragWithFiles should be implemented in windows port, which block drag-drop test case in windows platfrom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622361</commentid>
    <comment_count>1</comment_count>
      <attachid>141580</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-12 08:48:52 -0700</bug_when>
    <thetext>Created attachment 141580
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622369</commentid>
    <comment_count>2</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-12 09:01:41 -0700</bug_when>
    <thetext>This patch only provide a case for single file drag and drop since bug#79861 depends on this, and the test case for drag and drop with multi-files will commit with bug#79861.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629727</commentid>
    <comment_count>3</comment_count>
      <attachid>141580</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-21 16:59:00 -0700</bug_when>
    <thetext>Comment on attachment 141580
patch

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

&gt; LayoutTests/ChangeLog:8
&gt; +        * editing/pasteboard/drag-and-drop-file-to-input.html: Added.

I don&apos;t understand why we&apos;re adding a test test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629737</commentid>
    <comment_count>4</comment_count>
      <attachid>141580</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-21 17:10:11 -0700</bug_when>
    <thetext>Comment on attachment 141580
patch

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

Please rebase and run check-webkit-style.  I started to review, but there are too many style errors.

&gt; LayoutTests/ChangeLog:9
&gt; +        * editing/pasteboard/drag-and-drop-file-to-input.html: Added.
&gt; +        * platform/win/editing/pasteboard/drag-and-drop-file-to-input-expected.txt: Added.

You don&apos;t need to add a new test case for this, although I would expect the win/Skipped file to be updated as this will probably cause some tests to pass.

&gt; LayoutTests/editing/pasteboard/drag-and-drop-file-to-input.html:29
&gt; +    for (var i=0; i&lt;fileInput.files.length; ++i)
&gt; +    {

Spaces around =, spaces around &lt;, { goes on previous line.

&gt; Source/WebCore/platform/win/DragDataWin.cpp:116
&gt; +    if (m_platformDragData) {
&gt; +        STGMEDIUM medium;

Nit: WebKit tends to use early returns rather than indenting the whole method.

&gt; Source/WebCore/platform/win/DragDataWin.cpp:120
&gt; +        HDROP hdrop = (HDROP)GlobalLock(medium.hGlobal);

Please use static_cast&lt;HDROP&gt;() instead of (HDROP).

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:62
&gt; +    Vector&lt;FORMATETC&gt;  m_formats;

Nit: Why 2 spaces?

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:70
&gt; +: m_ref(1)
&gt; +, m_current(0)

Nit: Indent 4 spaces

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:80
&gt; +    for(size_t i = 0; i &lt; formats.size(); ++i)

Nit: Space after &apos;for&apos;

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:84
&gt; +STDMETHODIMP  WCEnumFormatEtc::QueryInterface(REFIID riid, void** ppvObject)

Nit: 2 spaces?

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:103
&gt; +    long c = InterlockedDecrement(&amp;m_ref);

Please use a longer variable name than &apos;c&apos;.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:109
&gt; +STDMETHODIMP WCEnumFormatEtc::Next(ULONG celt, LPFORMATETC lpFormatEtc, ULONG* pceltFetched)

What is celt?

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:111
&gt; +    if(pceltFetched != 0)

Space after &apos;if&apos;

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:116
&gt; +    if(celt &lt;= 0 || lpFormatEtc == 0 || m_current &gt;= m_formats.size())

Space after &apos;if&apos;

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:119
&gt; +    if(pceltFetched == 0 &amp;&amp; celt != 1) // pceltFetched can be 0 only for 1 item request

Space after &apos;if&apos;

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:126
&gt; +    if (pceltFetched != 0)

if (pceltFetched)

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:148
&gt; +    if(!ppCloneEnumFormatEtc)

Space after &apos;if&apos;

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:152
&gt; +    if(!newEnum)

Space after &apos;if&apos;

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:174
&gt; +: m_ref(1)

indent 4

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:180
&gt; +    for(size_t i = 0; i &lt; m_medium.size(); ++i) {

Space after &apos;for&apos;

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:338
&gt; +    *ppenumFormatEtc=0;

Spaces around =

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:342
&gt; +        *ppenumFormatEtc= new WCEnumFormatEtc(m_formats);

space before =</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630313</commentid>
    <comment_count>5</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-22 06:14:32 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 141580 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141580&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:8
&gt; &gt; +        * editing/pasteboard/drag-and-drop-file-to-input.html: Added.
&gt; 
&gt; I don&apos;t understand why we&apos;re adding a test test.

I thought a new implementation always need a test case to validate it. I will remove test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631586</commentid>
    <comment_count>6</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-23 06:15:55 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 141580 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141580&amp;action=review
&gt; 
&gt; Please rebase and run check-webkit-style.  I started to review, but there are too many style errors.
&gt; 
&gt; &gt; LayoutTests/ChangeLog:9
&gt; &gt; +        * editing/pasteboard/drag-and-drop-file-to-input.html: Added.
&gt; &gt; +        * platform/win/editing/pasteboard/drag-and-drop-file-to-input-expected.txt: Added.
&gt; 
&gt; You don&apos;t need to add a new test case for this, although I would expect the win/Skipped file to be updated as this will probably cause some tests to pass.
Well, I weill remove it.

&gt; 
&gt; &gt; LayoutTests/editing/pasteboard/drag-and-drop-file-to-input.html:29
&gt; &gt; +    for (var i=0; i&lt;fileInput.files.length; ++i)
&gt; &gt; +    {
&gt; 
&gt; Spaces around =, spaces around &lt;, { goes on previous line.
&gt; 
&gt; &gt; Source/WebCore/platform/win/DragDataWin.cpp:116
&gt; &gt; +    if (m_platformDragData) {
&gt; &gt; +        STGMEDIUM medium;
&gt; 
&gt; Nit: WebKit tends to use early returns rather than indenting the whole method.
Done

&gt; 
&gt; &gt; Source/WebCore/platform/win/DragDataWin.cpp:120
&gt; &gt; +        HDROP hdrop = (HDROP)GlobalLock(medium.hGlobal);
&gt; 
&gt; Please use static_cast&lt;HDROP&gt;() instead of (HDROP).
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:62
&gt; &gt; +    Vector&lt;FORMATETC&gt;  m_formats;
&gt; 
&gt; Nit: Why 2 spaces?
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:70
&gt; &gt; +: m_ref(1)
&gt; &gt; +, m_current(0)
&gt; 
&gt; Nit: Indent 4 spaces
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:80
&gt; &gt; +    for(size_t i = 0; i &lt; formats.size(); ++i)
&gt; 
&gt; Nit: Space after &apos;for&apos;
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:84
&gt; &gt; +STDMETHODIMP  WCEnumFormatEtc::QueryInterface(REFIID riid, void** ppvObject)
&gt; 
&gt; Nit: 2 spaces?
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:103
&gt; &gt; +    long c = InterlockedDecrement(&amp;m_ref);
&gt; 
&gt; Please use a longer variable name than &apos;c&apos;.
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:109
&gt; &gt; +STDMETHODIMP WCEnumFormatEtc::Next(ULONG celt, LPFORMATETC lpFormatEtc, ULONG* pceltFetched)
&gt; 
&gt; What is celt?
celf is the number of FORMATETC items in the IEnumFORMATETC interface, please see http://msdn.microsoft.com/en-us/library/windows/desktop/dd542673(v=vs.85).aspx

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:111
&gt; &gt; +    if(pceltFetched != 0)
&gt; 
&gt; Space after &apos;if&apos;
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:116
&gt; &gt; +    if(celt &lt;= 0 || lpFormatEtc == 0 || m_current &gt;= m_formats.size())
&gt; 
&gt; Space after &apos;if&apos;
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:119
&gt; &gt; +    if(pceltFetched == 0 &amp;&amp; celt != 1) // pceltFetched can be 0 only for 1 item request
&gt; 
&gt; Space after &apos;if&apos;
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:126
&gt; &gt; +    if (pceltFetched != 0)
&gt; 
&gt; if (pceltFetched)
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:148
&gt; &gt; +    if(!ppCloneEnumFormatEtc)
&gt; 
&gt; Space after &apos;if&apos;
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:152
&gt; &gt; +    if(!newEnum)
&gt; 
&gt; Space after &apos;if&apos;
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:174
&gt; &gt; +: m_ref(1)
&gt; 
&gt; indent 4
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:180
&gt; &gt; +    for(size_t i = 0; i &lt; m_medium.size(); ++i) {
&gt; 
&gt; Space after &apos;for&apos;
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:338
&gt; &gt; +    *ppenumFormatEtc=0;
&gt; 
&gt; Spaces around =
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:342
&gt; &gt; +        *ppenumFormatEtc= new WCEnumFormatEtc(m_formats);
&gt; 
&gt; space before =
Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631590</commentid>
    <comment_count>7</comment_count>
      <attachid>143554</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-23 06:17:30 -0700</bug_when>
    <thetext>Created attachment 143554
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631741</commentid>
    <comment_count>8</comment_count>
      <attachid>143554</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-23 09:59:46 -0700</bug_when>
    <thetext>Comment on attachment 143554
patch

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

Please run check-webkit-style.  It would be nice to figure out why your diff isn&apos;t applying properly.  Are you using webkit-patch or svn-create-patch?

&gt; Source/WebCore/ChangeLog:8
&gt; +        Test: This modification was an requirement for eventSender.beginDragWithiFiles, update win/skipped file to reomve drag-drop releated test case will valiate this. 

Typo: reomve -&gt; remove.

Do any of the tests in win/Skipped pass for you on Win or WinCE after this change?  If so, we can remove them from win/Skipped in this change.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:47
&gt; +    WCEnumFormatEtc(const Vector&lt;FORMATETC&gt;&amp; formats);
&gt; +    WCEnumFormatEtc(const Vector&lt;FORMATETC*&gt;&amp; formats);

explicit

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:71
&gt; +    for (size_t i = 0; i &lt; formats.size(); ++i)
&gt; +        m_formats.append(formats[i]);

Nit: I think you can just use assignment here.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:102
&gt; +    if (refCount == 0)

if (!refCount).  I think check-webkit-style would have caught this.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:109
&gt; +    if (pceltFetched != 0)

if (pceltFetched)

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:114
&gt; +    if (celt &lt;= 0 || lpFormatEtc == 0 || m_current &gt;= m_formats.size())

!lpFormatEtc

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:117
&gt; +    if (pceltFetched == 0 &amp;&amp; celt != 1) // pceltFetched can be 0 only for 1 item request

Here too

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:124
&gt; +    if (pceltFetched != 0)

And here

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:127
&gt; +    return cReturn == 0 ? S_OK : S_FALSE;

And here

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:203
&gt; +    if (refCount == 0)

if (!refCount)

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:236
&gt; +    HRESULT  hr = DV_E_TYMED;

extra space?  Also, try not to abbreviate variable names.  hr -&gt; hresult

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:260
&gt; +    FORMATETC* fetc = new FORMATETC;

fetc -&gt; formatetc

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:272
&gt; +    ZeroMemory(fetc,sizeof(FORMATETC));
&gt; +    ZeroMemory(pStgMed,sizeof(STGMEDIUM));

Spaces after ,

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:319
&gt; +    if (pMedSrc-&gt;pUnkForRelease != 0) {

Comparison to zero.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:364
&gt; +    size_t ptr = 0;

ptr -&gt; position

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:367
&gt; +            FORMATETC* current = m_formats[ptr];

Can we just delete m_formats[ptr] and void using a temporary variable?

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:370
&gt; +            m_formats[ptr] = m_formats[m_formats.size() - 1];
&gt; +            m_formats[m_formats.size() - 1] = 0;
&gt; +            m_formats.removeLast();

Can we just use m_formats.remove(ptr)?

&gt; Tools/DumpRenderTree/win/EventSender.cpp:644
&gt; +    if (filesArray) {
&gt; +        JSStringRef lengthProperty = JSStringCreateWithUTF8CString(&quot;length&quot;);

Nit: We normally early return rather than indenting the majority of the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633579</commentid>
    <comment_count>9</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-24 22:46:38 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 143554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143554&amp;action=review
&gt; 
&gt; Please run check-webkit-style.  It would be nice to figure out why your diff isn&apos;t applying properly.  Are you using webkit-patch or svn-create-patch?
&gt; 
Thanks for your patient at first. Unfortunately, check-webkit-style cannot run in chinese windows platform properly and show error message as &quot;utf_8.py, line 16: &apos;utf8&apos; can&apos;t decode byte 0xb0 in position 24.&quot;, hence i have to check code style manually.

&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Test: This modification was an requirement for eventSender.beginDragWithiFiles, update win/skipped file to reomve drag-drop releated test case will valiate this. 
&gt; 
&gt; Typo: reomve -&gt; remove.
&gt; 
done

&gt; Do any of the tests in win/Skipped pass for you on Win or WinCE after this change?  If so, we can remove them from win/Skipped in this change.
&gt; 
There are 13 items listed in win/Skipped, and 5 tests pass in this change, remaining tests seems need to rebaseline the expected result in windows. Do you think should we file a new bug to do that?

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:47
&gt; &gt; +    WCEnumFormatEtc(const Vector&lt;FORMATETC&gt;&amp; formats);
&gt; &gt; +    WCEnumFormatEtc(const Vector&lt;FORMATETC*&gt;&amp; formats);
&gt; 
&gt; explicit
done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:71
&gt; &gt; +    for (size_t i = 0; i &lt; formats.size(); ++i)
&gt; &gt; +        m_formats.append(formats[i]);
&gt; 
&gt; Nit: I think you can just use assignment here.
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:102
&gt; &gt; +    if (refCount == 0)
&gt; 
&gt; if (!refCount).  I think check-webkit-style would have caught this.
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:109
&gt; &gt; +    if (pceltFetched != 0)
&gt; 
&gt; if (pceltFetched)
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:114
&gt; &gt; +    if (celt &lt;= 0 || lpFormatEtc == 0 || m_current &gt;= m_formats.size())
&gt; 
&gt; !lpFormatEtc
done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:117
&gt; &gt; +    if (pceltFetched == 0 &amp;&amp; celt != 1) // pceltFetched can be 0 only for 1 item request
&gt; 
&gt; Here too
done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:124
&gt; &gt; +    if (pceltFetched != 0)
&gt; 
&gt; And here
done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:127
&gt; &gt; +    return cReturn == 0 ? S_OK : S_FALSE;
&gt; 
&gt; And here
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:203
&gt; &gt; +    if (refCount == 0)
&gt; 
&gt; if (!refCount)
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:236
&gt; &gt; +    HRESULT  hr = DV_E_TYMED;
&gt; 
&gt; extra space?  Also, try not to abbreviate variable names.  hr -&gt; hresult
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:260
&gt; &gt; +    FORMATETC* fetc = new FORMATETC;
&gt; 
&gt; fetc -&gt; formatetc
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:272
&gt; &gt; +    ZeroMemory(fetc,sizeof(FORMATETC));
&gt; &gt; +    ZeroMemory(pStgMed,sizeof(STGMEDIUM));
&gt; 
&gt; Spaces after ,
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:319
&gt; &gt; +    if (pMedSrc-&gt;pUnkForRelease != 0) {
&gt; 
&gt; Comparison to zero.
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:364
&gt; &gt; +    size_t ptr = 0;
&gt; 
&gt; ptr -&gt; position
&gt; 
done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:367
&gt; &gt; +            FORMATETC* current = m_formats[ptr];
&gt; 
&gt; Can we just delete m_formats[ptr] and void using a temporary variable?
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:370
&gt; &gt; +            m_formats[ptr] = m_formats[m_formats.size() - 1];
&gt; &gt; +            m_formats[m_formats.size() - 1] = 0;
&gt; &gt; +            m_formats.removeLast();
&gt; 
&gt; Can we just use m_formats.remove(ptr)?
&gt; 
Yes. But as you know, the remaining items will be move to previous position in vector if we erase a element. I think removeLast more effective than that.

&gt; &gt; Tools/DumpRenderTree/win/EventSender.cpp:644
&gt; &gt; +    if (filesArray) {
&gt; &gt; +        JSStringRef lengthProperty = JSStringCreateWithUTF8CString(&quot;length&quot;);
&gt; 
&gt; Nit: We normally early return rather than indenting the majority of the function.
done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633596</commentid>
    <comment_count>10</comment_count>
      <attachid>143985</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-24 23:17:45 -0700</bug_when>
    <thetext>Created attachment 143985
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633598</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-24 23:21:28 -0700</bug_when>
    <thetext>Attachment 143985 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Tools/DumpRenderTree/win/DRTDropSource.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/win/DRTDropSource.h:33:  This { should be at the end of the previous line  [whitespace/braces] [4]
Tools/DumpRenderTree/win/DRTDropSource.h:49:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/win/DRTDataObject.h:44:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/win/DRTDataObject.h:49:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/win/DRTDataObject.h:53:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/DRTDataObject.h:71:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:51:  This { should be at the end of the previous line  [whitespace/braces] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:56:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:61:  Should have a space between // and comment  [whitespace/comments] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:155:  Declaration has space between type name and * in WCEnumFormatEtc *newEnum  [whitespace/declaration] [3]
Tools/DumpRenderTree/win/DRTDataObject.cpp:201:  Extra space after ( in function call  [whitespace/parens] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:206:  Extra space after ( in function call  [whitespace/parens] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:242:  Extra space between HRESULT and hResult  [whitespace/declaration] [3]
Tools/DumpRenderTree/win/DRTDataObject.cpp:245:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:250:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Tools/DumpRenderTree/win/DRTDataObject.cpp:297:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/DRTDataObject.cpp:300:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/DRTDataObject.cpp:303:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/DRTDataObject.cpp:306:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/DRTDataObject.cpp:309:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/DRTDataObject.cpp:352:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/EventSender.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/DumpRenderTree/win/EventSender.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 24 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633625</commentid>
    <comment_count>12</comment_count>
      <attachid>143988</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-25 00:05:06 -0700</bug_when>
    <thetext>Created attachment 143988
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633630</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-25 00:08:44 -0700</bug_when>
    <thetext>Attachment 143988 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Tools/DumpRenderTree/win/DRTDataObject.cpp:350:  Missing space after ,  [whitespace/comma] [3]
Tools/DumpRenderTree/win/EventSender.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633641</commentid>
    <comment_count>14</comment_count>
      <attachid>143991</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-25 00:23:39 -0700</bug_when>
    <thetext>Created attachment 143991
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633974</commentid>
    <comment_count>15</comment_count>
      <attachid>143991</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-05-25 09:03:21 -0700</bug_when>
    <thetext>Comment on attachment 143991
patch

It doesn&apos;t look like you made any changes to the LayoutTests/platform/win/Skipped file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634049</commentid>
    <comment_count>16</comment_count>
      <attachid>143991</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-25 10:38:40 -0700</bug_when>
    <thetext>Comment on attachment 143991
patch

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

Looking much better.  Can you file a bug about check-webkit-style not running on Chinese Windows?  Please include a stack trace.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:373
&gt; +            m_formats[m_formats.size() - 1] = 0;
&gt; +            m_formats.removeLast();

Do we need to set &quot;m_formats[m_formats.size() - 1] = 0&quot; if we&apos;re going to remove it?

&gt; Tools/DumpRenderTree/win/DRTDataObject.h:68
&gt; +    Vector&lt;FORMATETC*&gt; m_formats;
&gt; +    Vector&lt;STGMEDIUM*&gt; m_medium;

Can we use Vector&lt;OwnPtr&lt;FORMATETC&gt; &gt; and Vector&lt;OwnPtr&lt;STGMEDIUM&gt; &gt;?

&gt; Tools/DumpRenderTree/win/DRTDropSource.h:36
&gt; +    virtual ULONG STDMETHODCALLTYPE AddRef(void);
&gt; +    virtual ULONG STDMETHODCALLTYPE Release(void);

Can we remove void?

&gt; Tools/DumpRenderTree/win/EventSender.cpp:668
&gt; +    DROPFILES* dropFiles = reinterpret_cast&lt;DROPFILES *&gt;(GlobalLock(medium.hGlobal));

Nit: No space between DROPFILES and *.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634434</commentid>
    <comment_count>17</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-25 16:39:32 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 143991 [details])
&gt; It doesn&apos;t look like you made any changes to the LayoutTests/platform/win/Skipped file.

I tested tests listed in win/Skipped in local, the some of them need to rebaseline in Windows, I think we&apos;d better file a bug to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634488</commentid>
    <comment_count>18</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-05-25 17:46:28 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 143991 [details] [details])
&gt; &gt; It doesn&apos;t look like you made any changes to the LayoutTests/platform/win/Skipped file.
&gt; 
&gt; I tested tests listed in win/Skipped in local, the some of them need to rebaseline in Windows, I think we&apos;d better file a bug to do that.

Ok, please do that and mention the bug in your ChangeLog for this patch.

If there were any that could just come off the Skipped list as a result of your patch (without needing rebaselining), please just remove them from the Skipped list. As part of your patch, you can move the rest to a separate section of the Skipped list that has a link to the bug you mentioned about rebaselining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634905</commentid>
    <comment_count>19</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-27 23:00:36 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 143991 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143991&amp;action=review
&gt; 
&gt; Looking much better.  Can you file a bug about check-webkit-style not running on Chinese Windows?  Please include a stack trace.
&gt; 
Done

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:373
&gt; &gt; +            m_formats[m_formats.size() - 1] = 0;
&gt; &gt; +            m_formats.removeLast();
&gt; 
&gt; Do we need to set &quot;m_formats[m_formats.size() - 1] = 0&quot; if we&apos;re going to remove it?
&gt; 
Yes, set m_formats[m_formats.size() - 1] = 0 void it was destructed since we had assign m_formats[m_formats.size() - 1] to m_formats[position].

&gt; &gt; Tools/DumpRenderTree/win/DRTDataObject.h:68
&gt; &gt; +    Vector&lt;FORMATETC*&gt; m_formats;
&gt; &gt; +    Vector&lt;STGMEDIUM*&gt; m_medium;
&gt; 
&gt; Can we use Vector&lt;OwnPtr&lt;FORMATETC&gt; &gt; and Vector&lt;OwnPtr&lt;STGMEDIUM&gt; &gt;?
&gt; 
I don&apos;t think we should use OwenPtr&lt;FORMATTEC&gt; and OwnPtr&lt;STGMEDIUM&gt; than FORMATTEC* and STGMEDIUM*, the reasons as bellow:
1. OwnPtr did not provide a method like void deleteOwnedPtr(STGMEDIUM ptr), hence we need explicit call ReleaseStgMedium(medium) event though we use OwnPtr&lt;STGMEDIUM&gt;;
2. DRTDataObject was a COM object, i think we should avoid use smart pointer as a member of COM object.

&gt; &gt; Tools/DumpRenderTree/win/DRTDropSource.h:36
&gt; &gt; +    virtual ULONG STDMETHODCALLTYPE AddRef(void);
&gt; &gt; +    virtual ULONG STDMETHODCALLTYPE Release(void);
&gt; 
&gt; Can we remove void?
Done

&gt; 
&gt; &gt; Tools/DumpRenderTree/win/EventSender.cpp:668
&gt; &gt; +    DROPFILES* dropFiles = reinterpret_cast&lt;DROPFILES *&gt;(GlobalLock(medium.hGlobal));
&gt; 
&gt; Nit: No space between DROPFILES and *.
Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634906</commentid>
    <comment_count>20</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-27 23:01:31 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (From update of attachment 143991 [details] [details] [details])
&gt; &gt; &gt; It doesn&apos;t look like you made any changes to the LayoutTests/platform/win/Skipped file.
&gt; &gt; 
&gt; &gt; I tested tests listed in win/Skipped in local, the some of them need to rebaseline in Windows, I think we&apos;d better file a bug to do that.
&gt; 
&gt; Ok, please do that and mention the bug in your ChangeLog for this patch.
&gt; 
&gt; If there were any that could just come off the Skipped list as a result of your patch (without needing rebaselining), please just remove them from the Skipped list. As part of your patch, you can move the rest to a separate section of the Skipped list that has a link to the bug you mentioned about rebaselining.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634908</commentid>
    <comment_count>21</comment_count>
      <attachid>144273</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-27 23:03:00 -0700</bug_when>
    <thetext>Created attachment 144273
patch

The some of tests listed in win/Skipped were removed, the remaining will be rebaselined in bug#87610.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635141</commentid>
    <comment_count>22</comment_count>
      <attachid>144336</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-28 05:08:43 -0700</bug_when>
    <thetext>Created attachment 144336
patch

The some of tests listed in win/Skipped were removed, the remaining will be rebaselined in bug#87610.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636192</commentid>
    <comment_count>23</comment_count>
      <attachid>144336</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-29 10:28:27 -0700</bug_when>
    <thetext>Comment on attachment 144336
patch

The commit queue won&apos;t be able to land a patch it can&apos;t apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636866</commentid>
    <comment_count>24</comment_count>
      <attachid>144704</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-29 22:44:07 -0700</bug_when>
    <thetext>Created attachment 144704
patch

create patch after update to the latest revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636869</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 22:47:36 -0700</bug_when>
    <thetext>Attachment 144704 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Tools/DumpRenderTree/win/DRTDataObject.cpp:244:  Tab found; better to use spaces  [whitespace/tab] [1]
Tools/DumpRenderTree/win/DRTDataObject.cpp:247:  Tab found; better to use spaces  [whitespace/tab] [1]
Tools/DumpRenderTree/win/DRTDataObject.cpp:248:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Total errors found: 3 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636877</commentid>
    <comment_count>26</comment_count>
      <attachid>144708</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-29 22:54:09 -0700</bug_when>
    <thetext>Created attachment 144708
patch

Create patch after update to the latest revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636881</commentid>
    <comment_count>27</comment_count>
      <attachid>144710</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-29 22:57:02 -0700</bug_when>
    <thetext>Created attachment 144710
patch

Create patch after update to the latest revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636882</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 23:00:17 -0700</bug_when>
    <thetext>Attachment 144710 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Tools/DumpRenderTree/win/DRTDataObject.cpp:244:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636886</commentid>
    <comment_count>29</comment_count>
      <attachid>144711</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-29 23:08:41 -0700</bug_when>
    <thetext>Created attachment 144711
patch

Create patch after update to the latest revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636889</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 23:12:29 -0700</bug_when>
    <thetext>Attachment 144711 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1
Tools/DumpRenderTree/win/DRTDataObject.cpp:244:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636900</commentid>
    <comment_count>31</comment_count>
      <attachid>144716</attachid>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-29 23:24:49 -0700</bug_when>
    <thetext>Created attachment 144716
patch

Create patch after update to the latest revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636923</commentid>
    <comment_count>32</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-29 23:38:49 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 144336 [details])
&gt; The commit queue won&apos;t be able to land a patch it can&apos;t apply.

I had re-create patch after update to the latest revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637333</commentid>
    <comment_count>33</comment_count>
      <attachid>144716</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-30 09:57:04 -0700</bug_when>
    <thetext>Comment on attachment 144716
patch

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

&gt; LayoutTests/platform/win/Skipped:249
&gt;  editing/pasteboard/drop-file-svg.html
&gt;  editing/pasteboard/file-drag-to-editable.html

Nit: The comment above this section should probably be fixed.  This can be done when investigating the other failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637438</commentid>
    <comment_count>34</comment_count>
      <attachid>144716</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-30 11:10:00 -0700</bug_when>
    <thetext>Comment on attachment 144716
patch

Clearing flags on attachment: 144716

Committed r118941: &lt;http://trac.webkit.org/changeset/118941&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637439</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-30 11:10:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637926</commentid>
    <comment_count>36</comment_count>
    <who name="huangxueqing">huangxueqing</who>
    <bug_when>2012-05-30 19:02:51 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 144716 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144716&amp;action=review
&gt; 
&gt; &gt; LayoutTests/platform/win/Skipped:249
&gt; &gt;  editing/pasteboard/drop-file-svg.html
&gt; &gt;  editing/pasteboard/file-drag-to-editable.html
&gt; 
&gt; Nit: The comment above this section should probably be fixed.  This can be done when investigating the other failures.

Well, I will follow it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141580</attachid>
            <date>2012-05-12 08:48:52 -0700</date>
            <delta_ts>2012-05-23 06:17:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles.patch</filename>
            <type>text/plain</type>
            <size>31486</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDExNjg1NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTEyICBYdWVxaW5nIEh1YW5nICA8
aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAgICAgICBldmVudFNlbmRlci5CZWdpbkRyYWdX
aXRoRmlsZXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHdpbmRvd3MgcG9ydCwgd2hpY2ggYmxv
Y2tlZCBkcmFnLWRyb3AgdGVzdCBjYXNlIGluIHdpbmRvd3MgcGxhdGZvcm0uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI5NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJk
L2RyYWctYW5kLWRyb3AtZmlsZS10by1pbnB1dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctYW5kLWRyb3AtZmlsZS10by1pbnB1dC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDEyLTA1LTEyICBaYW4gRG9iZXJzZWsgIDx6YW5kb2Jl
cnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgR1RLIGdhcmRlbmluZy4gQWxz
byBhZGQgYmFzZWxpbmVzIGZvciBuZXcgdGVzdHMgYWZ0ZXIKSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9kcmFnLWFuZC1kcm9wLWZpbGUtdG8taW5wdXQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1hbmQtZHJvcC1maWxl
LXRvLWlucHV0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvZHJhZy1hbmQtZHJvcC1maWxlLXRvLWlucHV0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzcgQEAKKzxib2R5PgorCis8aW5wdXQgaWQ9ImZpbGVJbnB1dCIgdHlwZT0iZmlsZSIg
bXVsdGlwbGU9InRydWUiIG9uQ2hhbmdlPSJkaXNwbGF5RmlsZXMoKSI+PC9pbnB1dD4KKzxkaXYg
aWQ9InJlc3VsdCI+PC9kaXY+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitpZiAod2luZG93LmV2ZW50
U2VuZGVyKSB7CisgICAgdmFyIGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJmaWxlSW5wdXQiKTsgCisgICAgdmFyIGZpbGVSZWN0ID0gaW5wdXRFbGVtZW50LmdldENsaWVu
dFJlY3RzKClbMF07CisgICAgdmFyIHRhcmdldFggPSBmaWxlUmVjdC5sZWZ0ICsgZmlsZVJlY3Qu
d2lkdGggLyAyOworICAgIHZhciB0YXJnZXRZID0gZmlsZVJlY3QudG9wICsgZmlsZVJlY3QuaGVp
Z2h0IC8gMjsKKyAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWydnb3QtZmlsZS11
cGxvYWQuaHRtbCddKTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJnZXRYLCB0YXJn
ZXRZKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
CitmdW5jdGlvbiBkaXNwbGF5RmlsZXMoKQoreworICAgIHZhciBmaWxlSW5wdXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZmlsZUlucHV0Iik7CisgICAgZm9yICh2YXIgaT0wOyBpPGZpbGVJ
bnB1dC5maWxlcy5sZW5ndGg7ICsraSkKKyAgICB7CisgICAgICAgIHZhciByZXN1bHQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iik7CisgICAgICAgIHJlc3VsdC5pbm5lckhUTUwg
Kz0gZmlsZUlucHV0LmZpbGVzW2ldLm5hbWU7CisgICAgfQorfQorCis8L3NjcmlwdD4KKworPC9i
b2R5PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2VkaXRpbmcvcGFzdGVib2FyZC9k
cmFnLWFuZC1kcm9wLWZpbGUtdG8taW5wdXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1hbmQtZHJvcC1m
aWxlLXRvLWlucHV0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9lZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1hbmQtZHJvcC1maWxlLXRvLWlucHV0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACisKK2dvdC1maWxlLXVw
bG9hZC5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTY4NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNS0x
MiAgWHVlcWluZyBIdWFuZyAgPGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZl
bnRTZW5kZXIuQmVnaW5EcmFnV2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB3aW5k
b3dzIHBvcnQsIHdoaWNoIGJsb2NrZWQgZHJhZy1kcm9wIHRlc3QgY2FzZSBpbiB3aW5kb3dzIHBs
YXRmb3JtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODYyOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0OiBldmVudFNlbmRlci5CZWdpbkRyYWdXaXRoRmlsZXMgbmVlZCBpbXBsZW1lbnQgfERyYWdE
YXRhOjpudW1iZXJPZkZpbGVzfCwgYW5kIGJ1Zzc5ODYxIGRlbnBlbmRzIG9uIHRoaXMgYnVnLCB0
aGVyZWZvcmUgYnVnNzk4NjEncyB0ZXN0IGNhc2Ugd2lsbCB2YWxpZGF0ZSB0aGlzIG1vZGlmY2F0
aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpudW1iZXJPZkZpbGVzKToKKwogMjAxMi0wNS0xMiAgSWx5YSBU
aWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogbW92ZSByZWNvcmRpbmcgYnV0dG9uIHN0YXRlIGNvbnRyb2wgb3V0IG9mIGFkZFByb2ZpbGVI
ZWFkZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5j
cHAJKHJldmlzaW9uIDExNjgzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFn
RGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsMjMgQEAKIAogdW5zaWdu
ZWQgRHJhZ0RhdGE6Om51bWJlck9mRmlsZXMoKSBjb25zdAogewotICAgIHJldHVybiAwOworICAg
IHVuc2lnbmVkIG51bUZpbGVzID0gMDsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhKSB7Cisg
ICAgICAgIFNUR01FRElVTSBtZWRpdW07CisgICAgICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURy
YWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQoKSwgJm1lZGl1bSkpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgSERST1AgaGRyb3AgPSAoSERST1ApR2xvYmFsTG9jayhtZWRp
dW0uaEdsb2JhbCk7CisKKyAgICAgICAgaWYgKCFoZHJvcCkKKyAgICAgICAgICAgIHJldHVybiAw
OworCisgICAgICAgIG51bUZpbGVzID0gRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIDB4RkZGRkZGRkYs
IDAsIDApOworCisgICAgICAgIERyYWdGaW5pc2goaGRyb3ApOworICAgICAgICBHbG9iYWxVbmxv
Y2sobWVkaXVtLmhHbG9iYWwpOworICAgIH0KKyAgICByZXR1cm4gbnVtRmlsZXM7CiB9CiAKIHZv
aWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0Cklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMTY4NTYpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw1NiBAQAorMjAxMi0wNS0xMiAgWHVlcWluZyBIdWFuZyAgPGh1YW5neHVlcWluZ0BiYWlkdS5j
b20+CisKKyAgICAgICAgZXZlbnRTZW5kZXIuQmVnaW5EcmFnV2l0aEZpbGVzIHNob3VsZCBiZSBp
bXBsZW1lbnRlZCBpbiB3aW5kb3dzIHBvcnQsIHdoaWNoIGJsb2NrZWQgZHJhZy1kcm9wIHRlc3Qg
Y2FzZSBpbiB3aW5kb3dzIHBsYXRmb3JtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChjZkhEcm9wRm9ybWF0KToKKyAgICAgICAgKGNmRmlsZU5hbWVXRm9y
bWF0KToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yyk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRF
dGM6OldDRW51bUZvcm1hdEV0Yyk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OlF1ZXJ5SW50
ZXJmYWNlKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6QWRkUmVmKToKKyAgICAgICAgKFdD
RW51bUZvcm1hdEV0Yzo6UmVsZWFzZSk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6Ok5leHQp
OgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpTa2lwKToKKyAgICAgICAgKFdDRW51bUZvcm1h
dEV0Yzo6UmVzZXQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpDbG9uZSk6CisgICAgICAg
IChEUlREYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0
OjpEUlREYXRhT2JqZWN0KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6On5EUlREYXRhT2JqZWN0
KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKERS
VERhdGFPYmplY3Q6OkFkZFJlZik6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpSZWxlYXNlKToK
KyAgICAgICAgKERSVERhdGFPYmplY3Q6OkdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVj
dDo6R2V0RGF0YUhlcmUpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6UXVlcnlHZXREYXRhKToK
KyAgICAgICAgKERSVERhdGFPYmplY3Q6OkdldENhbm9uaWNhbEZvcm1hdEV0Yyk6CisgICAgICAg
IChEUlREYXRhT2JqZWN0OjpTZXREYXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkNvcHlN
ZWRpdW0pOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6RW51bUZvcm1hdEV0Yyk6CisgICAgICAg
IChEUlREYXRhT2JqZWN0OjpEQWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRVbmFk
dmlzZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpFbnVtREFkdmlzZSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9E
UlREYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoRFJURGF0YU9iamVjdCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KERSVERyb3BTb3VyY2U6OkRSVERyb3BTb3VyY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6
fkRSVERyb3BTb3VyY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6UXVlcnlJbnRlcmZhY2Up
OgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6QWRkUmVmKToKKyAgICAgICAgKERSVERyb3BTb3Vy
Y2U6OlJlbGVhc2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UpOgor
ICAgICAgICAoRFJURHJvcFNvdXJjZTo6UXVlcnlDb250aW51ZURyYWcpOgorICAgICAgICAoRFJU
RHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNrKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4v
RFJURHJvcFNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKERSVERyb3BTb3VyY2UpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd2luL0V2ZW50U2VuZGVyLmNwcDoKKyAgICAgICAgKGJlZ2luRHJhZ1dp
dGhGaWxlc0NhbGxiYWNrKToKKwogMjAxMi0wNS0xMSAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEFkZCBwcmV2aW91cy9uZXh0IGJ1dHRvbnMgdGhlIGdhcmRlbi1v
LW1hdGljcyBwZXJmIHBhbmVsCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0
YU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERh
dGFPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RS
VERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisKK0ZPUk1B
VEVUQyogY2ZIRHJvcEZvcm1hdCgpCit7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQg
PSB7Q0ZfSERST1AsIDAsIERWQVNQRUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAg
ICByZXR1cm4gJnVybEZvcm1hdDsKK30KKworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgp
Cit7CisgICAgc3RhdGljIFVJTlQgY2YgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMIkZpbGVO
YW1lVyIpOworICAgIHN0YXRpYyBGT1JNQVRFVEMgdXJsRm9ybWF0ID0ge2NmLCAwLCBEVkFTUEVD
VF9DT05URU5ULCAtMSwgVFlNRURfSEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9
CisKK2NsYXNzIFdDRW51bUZvcm1hdEV0YyA6IHB1YmxpYyBJRW51bUZPUk1BVEVUQworeworcHVi
bGljOgorICAgIFdDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0
cyk7CisgICAgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0
cyk7CisKKyAgICAvL0lVbmtub3duIG1lbWJlcnMKKyAgICBTVERNRVRIT0QoUXVlcnlJbnRlcmZh
Y2UpKFJFRklJRCwgdm9pZCoqKTsKKyAgICBTVERNRVRIT0RfKFVMT05HLCBBZGRSZWYpKHZvaWQp
OworICAgIFNURE1FVEhPRF8oVUxPTkcsIFJlbGVhc2UpKHZvaWQpOworCisgICAgLy9JRW51bUZP
Uk1BVEVUQyBtZW1iZXJzCisgICAgU1RETUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVUQywg
VUxPTkcqKTsKKyAgICBTVERNRVRIT0QoU2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChSZXNl
dCkodm9pZCk7CisgICAgU1RETUVUSE9EKENsb25lKShJRW51bUZPUk1BVEVUQyoqKTsKKworcHJp
dmF0ZToKKyAgICBsb25nIG1fcmVmOworICAgIFZlY3RvcjxGT1JNQVRFVEM+ICBtX2Zvcm1hdHM7
CisgICAgc2l6ZV90IG1fY3VycmVudDsKK307CisKKworCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51
bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cykKKzogbV9yZWYoMSkK
KywgbV9jdXJyZW50KDApCit7CisgICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IGZvcm1hdHMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fZm9ybWF0cy5hcHBlbmQoZm9ybWF0c1tpXSk7Cit9CisKK1dD
RW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYg
Zm9ybWF0cykKKzogbV9yZWYoMSkKKywgbV9jdXJyZW50KDApCit7CisgICAgZm9yKHNpemVfdCBp
ID0gMDsgaSA8IGZvcm1hdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZm9ybWF0cy5hcHBlbmQo
KmZvcm1hdHNbaV0pOworfQorCitTVERNRVRIT0RJTVAgIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJ
bnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVj
dCA9IDA7CisgICAgaWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFs
SUlEKHJpaWQsIElJRF9JRW51bUZPUk1BVEVUQykpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRo
aXM7CisgICAgICAgIEFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAg
ICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVt
Rm9ybWF0RXRjOjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1l
bnQoJm1fcmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVtRm9ybWF0RXRjOjpS
ZWxlYXNlKHZvaWQpCit7CisgICAgbG9uZyBjID0gSW50ZXJsb2NrZWREZWNyZW1lbnQoJm1fcmVm
KTsKKyAgICBpZiAoYyA9PSAwKQorICAgICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gYzsK
K30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZP
Uk1BVEVUQyBscEZvcm1hdEV0YywgVUxPTkcqIHBjZWx0RmV0Y2hlZCkKK3sKKyAgICBpZihwY2Vs
dEZldGNoZWQgIT0gMCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZD0wOworCisgICAgVUxPTkcgY1Jl
dHVybiA9IGNlbHQ7CisKKyAgICBpZihjZWx0IDw9IDAgfHwgbHBGb3JtYXRFdGMgPT0gMCB8fCBt
X2N1cnJlbnQgPj0gbV9mb3JtYXRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisK
KyAgICBpZihwY2VsdEZldGNoZWQgPT0gMCAmJiBjZWx0ICE9IDEpIC8vIHBjZWx0RmV0Y2hlZCBj
YW4gYmUgMCBvbmx5IGZvciAxIGl0ZW0gcmVxdWVzdAorICAgICAgICByZXR1cm4gU19GQUxTRTsK
KworICAgIHdoaWxlIChtX2N1cnJlbnQgPCBtX2Zvcm1hdHMuc2l6ZSgpICYmIGNSZXR1cm4gPiAw
KSB7CisgICAgICAgICpscEZvcm1hdEV0YysrID0gbV9mb3JtYXRzW21fY3VycmVudCsrXTsKKyAg
ICAgICAgLS1jUmV0dXJuOworICAgIH0KKyAgICBpZiAocGNlbHRGZXRjaGVkICE9IDApCisgICAg
ICAgICpwY2VsdEZldGNoZWQgPSBjZWx0IC0gY1JldHVybjsKKworICAgIHJldHVybiAoY1JldHVy
biA9PSAwKSA/IFNfT0sgOiBTX0ZBTFNFOworfQorCitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0
RXRjOjpTa2lwKFVMT05HIGNlbHQpCit7CisgICAgaWYoKG1fY3VycmVudCArIGludChjZWx0KSkg
Pj0gbV9mb3JtYXRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisgICAgbV9jdXJy
ZW50ICs9IGNlbHQ7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1G
b3JtYXRFdGM6OlJlc2V0KHZvaWQpCit7CisgICAgbV9jdXJyZW50ID0gMDsKKyAgICByZXR1cm4g
U19PSzsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6Q2xvbmUoSUVudW1GT1JN
QVRFVEMqKiBwcENsb25lRW51bUZvcm1hdEV0YykKK3sKKyAgICBpZighcHBDbG9uZUVudW1Gb3Jt
YXRFdGMpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBXQ0VudW1Gb3JtYXRFdGMg
Km5ld0VudW0gPSBuZXcgV0NFbnVtRm9ybWF0RXRjKG1fZm9ybWF0cyk7CisgICAgaWYoIW5ld0Vu
dW0pCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgbmV3RW51bS0+QWRkUmVm
KCk7CisgICAgbmV3RW51bS0+bV9jdXJyZW50ID0gbV9jdXJyZW50OworICAgICpwcENsb25lRW51
bUZvcm1hdEV0YyA9IG5ld0VudW07CisgICAgcmV0dXJuIFNfT0s7Cit9CisKKworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCitIUkVTVUxUIERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKERSVERh
dGFPYmplY3QqKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisgICAgKnJlc3VsdCA9IG5ldyBEUlREYXRhT2JqZWN0KCk7CisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0RSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QoKQorOiBtX3JlZigxKQor
eworfQorCitEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgpCit7CisgICAgZm9yKHNpemVf
dCBpID0gMDsgaSA8IG1fbWVkaXVtLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlbGVhc2VTdGdN
ZWRpdW0obV9tZWRpdW1baV0pOworICAgICAgICBkZWxldGUgbV9tZWRpdW1baV07CisgICAgfQor
ICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVzKG1fZm9ybWF0cyk7Cit9CisKK1NURE1FVEhPRElNUCBE
UlREYXRhT2JqZWN0OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCx2b2lkKiogcHB2T2JqZWN0
KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9J
VW5rbm93bikgfHwgCisgICAgICAgIElzRXF1YWxJSUQocmlpZCwgSUlEX0lEYXRhT2JqZWN0KSkg
eworICAgICAgICAqcHB2T2JqZWN0PXRoaXM7CisgICAgfQorICAgIGlmICgqcHB2T2JqZWN0KSB7
CisgICAgICAgIEFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisgICAgcmV0
dXJuIEVfTk9JTlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERhdGFPYmpl
Y3Q6OkFkZFJlZiggdm9pZCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1f
cmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0YU9iamVjdDo6UmVsZWFzZSgg
dm9pZCkKK3sKKyAgICBsb25nIGMgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAg
IGlmIChjID09IDApCisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiBjOworfQorCitT
VERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRldGNJ
biwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZighcGZvcm1hdGV0Y0luIHx8ICFwbWVk
aXVtKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgIHBtZWRpdW0tPmhHbG9iYWwgPSAw
OworCisgICAgZm9yKHNpemVfdCBpPTA7IGkgPCBtX2Zvcm1hdHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYoLypwZm9ybWF0ZXRjSW4tPnR5bWVkICYgbV9mb3JtYXRzW2ldLT50eW1lZCAmJiov
ICAgICAvLyB0eW1lZCBjYW4gYmUgMCAoVFlNRURfTlVMTCkgLSBidXQgaXQgY2FuIGhhdmUgYSBt
ZWRpdW0gdGhhdCBjb250YWlucyBhbiBwVW5rRm9yUmVsZWFzZQorICAgICAgICAgICAgcGZvcm1h
dGV0Y0luLT5saW5kZXggPT0gbV9mb3JtYXRzW2ldLT5saW5kZXggJiYKKyAgICAgICAgICAgIHBm
b3JtYXRldGNJbi0+ZHdBc3BlY3QgPT0gbV9mb3JtYXRzW2ldLT5kd0FzcGVjdCAmJgorICAgICAg
ICAgICAgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KSB7
CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zvcm1hdHNb
aV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0
RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVfTk9USU1Q
TDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShGT1JNQVRF
VEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmKCFwZm9ybWF0ZXRjKQorICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOworCisgICAgaWYgKCEoRFZBU1BFQ1RfQ09OVEVOVCAmIHBmb3JtYXRldGMtPmR3
QXNwZWN0KSkKKyAgICAgICAgcmV0dXJuIChEVl9FX0RWQVNQRUNUKTsKKyAgICBIUkVTVUxUICBo
ciA9IERWX0VfVFlNRUQ7CisgICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IG1fZm9ybWF0cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZihwZm9ybWF0ZXRjLT50eW1lZCAmIG1fZm9ybWF0c1tpXS0+
dHltZWQpIHsKKyAgICAgICAgICAgIGlmKHBmb3JtYXRldGMtPmNmRm9ybWF0ID09IG1fZm9ybWF0
c1tpXS0+Y2ZGb3JtYXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgaHIgPSBEVl9FX0NMSVBGT1JNQVQ7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaHIgPSBEVl9FX1RZTUVEOworICAgIH0KKyAgICBy
ZXR1cm4gaHI7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpHZXRDYW5vbmljYWxG
b3JtYXRFdGMoRk9STUFURVRDKiwgRk9STUFURVRDKikKK3sgCisgICAgcmV0dXJuIERBVEFfU19T
QU1FRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6U2V0RGF0YShG
T1JNQVRFVEMqIHBmb3JtYXRldGMsIFNUR01FRElVTSogcG1lZGl1bSwgQk9PTCBmUmVsZWFzZSkK
K3sgCisgICAgaWYoIXBmb3JtYXRldGMgfHwgIXBtZWRpdW0pCisgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisKKyAgICBGT1JNQVRFVEMqIGZldGM9bmV3IEZPUk1BVEVUQzsKKyAgICBpZiAoIWZl
dGMpCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgU1RHTUVESVVNKiBwU3Rn
TWVkID0gbmV3IFNUR01FRElVTTsKKworICAgIGlmKCFwU3RnTWVkKSB7CisgICAgICAgIGRlbGV0
ZSBmZXRjOworICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgICB9CisKKyAgICBaZXJv
TWVtb3J5KGZldGMsc2l6ZW9mKEZPUk1BVEVUQykpOworICAgIFplcm9NZW1vcnkocFN0Z01lZCxz
aXplb2YoU1RHTUVESVVNKSk7CisKKyAgICAqZmV0YyA9ICpwZm9ybWF0ZXRjOworICAgIG1fZm9y
bWF0cy5hcHBlbmQoZmV0Yyk7CisKKyAgICBpZihmUmVsZWFzZSkKKyAgICAgICAgKnBTdGdNZWQg
PSAqcG1lZGl1bTsKKyAgICBlbHNlCisgICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1lZGl1
bSwgcGZvcm1hdGV0Yyk7CisgICAgbV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworCisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK3ZvaWQgRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bShTVEdNRURJVU0q
IHBNZWREZXN0LCBTVEdNRURJVU0qIHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYykKK3sKKyAg
ICBzd2l0Y2gocE1lZFNyYy0+dHltZWQpCisgICAgeworI2lmICFPUyhXSU5DRSkKKyAgICBjYXNl
IFRZTUVEX0hHTE9CQUw6CisgICAgICAgIHBNZWREZXN0LT5oR2xvYmFsID0gKEhHTE9CQUwpT2xl
RHVwbGljYXRlRGF0YShwTWVkU3JjLT5oR2xvYmFsLHBGbXRTcmMtPmNmRm9ybWF0LCAwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9HREk6CisgICAgICAgIHBNZWREZXN0LT5oQml0
bWFwID0gKEhCSVRNQVApT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oQml0bWFwLHBGbXRTcmMt
PmNmRm9ybWF0LCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9NRlBJQ1Q6Cisg
ICAgICAgIHBNZWREZXN0LT5oTWV0YUZpbGVQaWN0ID0gKEhNRVRBRklMRVBJQ1QpT2xlRHVwbGlj
YXRlRGF0YShwTWVkU3JjLT5oTWV0YUZpbGVQaWN0LHBGbXRTcmMtPmNmRm9ybWF0LCAwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9FTkhNRjoKKyAgICAgICAgcE1lZERlc3QtPmhF
bmhNZXRhRmlsZSA9IChIRU5ITUVUQUZJTEUpT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oRW5o
TWV0YUZpbGUscEZtdFNyYy0+Y2ZGb3JtYXQsIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRZTUVEX0ZJTEU6CisgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFtZSA9IChMUE9MRVNUUilP
bGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pGaWxlTmFtZSxwRm10U3JjLT5jZkZvcm1hdCwg
MCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBUWU1FRF9JU1RSRUFNOgorICAg
ICAgICBwTWVkRGVzdC0+cHN0bSA9IHBNZWRTcmMtPnBzdG07CisgICAgICAgIHBNZWRTcmMtPnBz
dG0tPkFkZFJlZigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0lTVE9SQUdFOgor
ICAgICAgICBwTWVkRGVzdC0+cHN0ZyA9IHBNZWRTcmMtPnBzdGc7CisgICAgICAgIHBNZWRTcmMt
PnBzdGctPkFkZFJlZigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgcE1lZERlc3QtPnR5bWVkID0gcE1lZFNyYy0+dHltZWQ7CisgICAg
cE1lZERlc3QtPnBVbmtGb3JSZWxlYXNlID0gMDsKKyAgICBpZihwTWVkU3JjLT5wVW5rRm9yUmVs
ZWFzZSAhPSAwKSB7CisgICAgICAgIHBNZWREZXN0LT5wVW5rRm9yUmVsZWFzZSA9IHBNZWRTcmMt
PnBVbmtGb3JSZWxlYXNlOworICAgICAgICBwTWVkU3JjLT5wVW5rRm9yUmVsZWFzZS0+QWRkUmVm
KCk7CisgICAgfQorfQorU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkVudW1Gb3JtYXRFdGMo
RFdPUkQgZHdEaXJlY3Rpb24sIElFbnVtRk9STUFURVRDKiogcHBlbnVtRm9ybWF0RXRjKQoreyAK
KyAgICBpZighcHBlbnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgKnBwZW51bUZvcm1hdEV0Yz0wOworICAgIHN3aXRjaCAoZHdEaXJlY3Rpb24pCisgICAgewor
ICAgIGNhc2UgREFUQURJUl9HRVQ6CisgICAgICAgICpwcGVudW1Gb3JtYXRFdGM9IG5ldyBXQ0Vu
dW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICAgICAgaWYoISgqcHBlbnVtRm9ybWF0RXRjKSkK
KyAgICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgREFUQURJUl9TRVQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfTk9USU1Q
TDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1F
VEhPRElNUCBEUlREYXRhT2JqZWN0OjpEQWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNl
U2luayosRFdPUkQqKQoreyAKKyAgICByZXR1cm4gT0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEOwor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKERXT1JEKQoreworICAg
IHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGF0
YU9iamVjdDo6RW51bURBZHZpc2UoSUVudW1TVEFUREFUQSoqKQoreworICAgIHJldHVybiBPTEVf
RV9BRFZJU0VOT1RTVVBQT1JURUQ7Cit9CisKK3ZvaWQgRFJURGF0YU9iamVjdDo6Y2xlYXJEYXRh
KENMSVBGT1JNQVQgZm9ybWF0KQoreworICAgIHNpemVfdCBwdHIgPSAwOworICAgIHdoaWxlIChw
dHIgPCBtX2Zvcm1hdHMuc2l6ZSgpKSB7CisgICAgICAgIGlmIChtX2Zvcm1hdHNbcHRyXS0+Y2ZG
b3JtYXQgPT0gZm9ybWF0KSB7CisgICAgICAgICAgICBGT1JNQVRFVEMqIGN1cnJlbnQgPSBtX2Zv
cm1hdHNbcHRyXTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1twdHJdID0gbV9mb3JtYXRzW21fZm9y
bWF0cy5zaXplKCkgLSAxXTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgp
IC0gMV0gPSAwOworICAgICAgICAgICAgbV9mb3JtYXRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIGRlbGV0ZSBjdXJyZW50OworICAgICAgICAgICAgU1RHTUVESVVNKiBtZWRpdW0gPSBtX21l
ZGl1bVtwdHJdOworICAgICAgICAgICAgbV9tZWRpdW1bcHRyXSA9IG1fbWVkaXVtW21fbWVkaXVt
LnNpemUoKSAtIDFdOworICAgICAgICAgICAgbV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV0g
PSAwOworICAgICAgICAgICAgbV9tZWRpdW0ucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgUmVs
ZWFzZVN0Z01lZGl1bShtZWRpdW0pOworICAgICAgICAgICAgZGVsZXRlIG1lZGl1bTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHB0cisrOworICAgIH0KK30KSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaAkocmV2aXNpb24gMCkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERSVERhdGFPYmplY3RfaAorI2Rl
ZmluZSBEUlREYXRhT2JqZWN0X2gKKworI2luY2x1ZGUgPFNobE9iai5oPgorI2luY2x1ZGUgPG9i
amlkbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworRk9STUFURVRDKiBjZkhEcm9wRm9y
bWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKTsKKworY2xhc3MgRFJURGF0
YU9iamVjdCA6IHB1YmxpYyBJRGF0YU9iamVjdCB7CitwdWJsaWM6CisgICAgdm9pZCBDb3B5TWVk
aXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBw
Rm10U3JjKTsKKworICAgIC8vSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOyAg
ICAgICAgCisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYodm9pZCk7
CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZvaWQpOworCisg
ICAgLy9JRGF0YU9iamVjdAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBH
ZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdEluLCBTVEdNRURJVU0qIHBtZWRpdW0pOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREYXRhSGVyZShGT1JNQVRFVEMqIHBm
b3JtYXQsIFNUR01FRElVTSogcG1lZGl1bSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFF1ZXJ5R2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXQpOworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDYW5vbmljYWxGb3JtYXRFdGMoRk9STUFURVRD
KiBwZm9ybWF0ZWN0SW4sRk9STUFURVRDKiBwZm9ybWF0T3V0KTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXQsIFNUR01FRElV
TSpwbWVkaXVtLCBCT09MIHJlbGVhc2UpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBFbnVtRm9ybWF0RXRjKERXT1JEIGR3RGlyZWN0aW9uLCBJRW51bUZPUk1BVEVUQyoq
IHBwZW51bUZvcm1hdEV0Yyk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERBZHZpc2UoRk9STUFURVRDKiwgRFdPUkQsIElBZHZpc2VTaW5rKiwgRFdPUkQqKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFVuYWR2aXNlKERXT1JEKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRW51bURBZHZpc2UoSUVudW1TVEFUREFU
QSoqKTsKKworICAgIHZvaWQgY2xlYXJEYXRhKENMSVBGT1JNQVQpOworICAgIAorICAgIHN0YXRp
YyBIUkVTVUxUIGNyZWF0ZUluc3RhbmNlKERSVERhdGFPYmplY3QqKik7Citwcml2YXRlOgorICAg
IERSVERhdGFPYmplY3QoKTsKKyAgICB+RFJURGF0YU9iamVjdCgpOworICAgIGxvbmcgbV9yZWY7
CisgICAgVmVjdG9yPEZPUk1BVEVUQyo+IG1fZm9ybWF0czsKKyAgICBWZWN0b3I8U1RHTUVESVVN
Kj4gbV9tZWRpdW07Cit9OworCisjZW5kaWYgLy9EUlREYXRhT2JqZWN0X2gKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEUlREcm9wU291cmNlLmgiCisKK0RS
VERyb3BTb3VyY2U6OkRSVERyb3BTb3VyY2UoKQorOiBtX3JlZigxKQorLCBtX2Ryb3BwZWQoZmFs
c2UpCit7Cit9CisKK0RSVERyb3BTb3VyY2U6On5EUlREcm9wU291cmNlKCkKK3sKK30KKworU1RE
TUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lk
KiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlE
KHJpaWQsIElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSURyb3BTb3VyY2Up
KSB7CisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKworICAg
ICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30K
KworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURHJvcFNvdXJjZTo6QWRkUmVmKHZvaWQpCit7Cisg
ICAgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50KCZtX3JlZik7Cit9CisKK1NURE1FVEhPRElN
UF8oVUxPTkcpIERSVERyb3BTb3VyY2U6OlJlbGVhc2Uodm9pZCkKK3sKKyAgICBsb25nIGMgPSBJ
bnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmIChjID09IDApCisgICAgICAgIGRl
bGV0ZSB0aGlzOworICAgIHJldHVybiBjOworfQorCitIUkVTVUxUIERSVERyb3BTb3VyY2U6OmNy
ZWF0ZUluc3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworICAgICpyZXN1bHQgPSBuZXcgRFJURHJvcFNv
dXJjZTsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6
OlF1ZXJ5Q29udGludWVEcmFnKEJPT0wgZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRl
KQoreworICAgIGlmIChmRXNjYXBlUHJlc3NlZCB8fCAhKGdyZktleVN0YXRlICYgKE1LX0xCVVRU
T058TUtfUkJVVFRPTikpKSB7CisgICAgICAgIG1fZHJvcHBlZCA9ICFmRXNjYXBlUHJlc3NlZDsK
KyAgICAgICAgcmV0dXJuIGZFc2NhcGVQcmVzc2VkID8gRFJBR0RST1BfU19DQU5DRUwgOiBEUkFH
RFJPUF9TX0RST1A7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElN
UCBEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2soRFdPUkQgZHdFZmZlY3QpCit7CisgICAgcmV0
dXJuIERSQUdEUk9QX1NfVVNFREVGQVVMVENVUlNPUlM7Cit9CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisqLworCisjaWZuZGVmIERS
VERyb3BTb3VyY2VfaAorI2RlZmluZSBEUlREcm9wU291cmNlX2gKKworI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKyNpbmNsdWRlIDxTaGxPYmouaD4KKworY2xhc3MgRFJURHJvcFNvdXJjZSA6IHB1Ymxp
YyBJRHJvcFNvdXJjZQoreworcHVibGljOgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7ICAg
ICAgICAKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZih2b2lkKTsK
KyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5Q29udGludWVEcmFnKEJPT0wg
ZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRlKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgR2l2ZUZlZWRiYWNrKERXT1JEIGR3RWZmZWN0KTsKKworICAgIHN0
YXRpYyBIUkVTVUxUIGNyZWF0ZUluc3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0KTsKK3ByaXZh
dGU6CisgICAgRFJURHJvcFNvdXJjZSgpOworICAgIH5EUlREcm9wU291cmNlKCk7CisgICAgbG9u
ZyBtX3JlZjsKKyAgICBib29sIG1fZHJvcHBlZDsKK307CisKKyNlbmRpZiAvL0RSVERyb3BTb3Vy
Y2VfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUu
dmNwcm9qCShyZXZpc2lvbiAxMTY4MzcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDIyIEBACiAJ
CQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0
LmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuXERSVERh
dGFPYmplY3QuaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIu
XERSVERyb3BTb3VyY2UuY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii5cRFJURHJvcFNvdXJjZS5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlS
ZWxhdGl2ZVBhdGg9Ii5cRHVtcFJlbmRlclRyZWUuY3BwIgogCQkJPgogCQk8L0ZpbGU+CkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJKHJldmlzaW9uIDExNjgz
NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlk
dSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxLDExICszMiwxNCBAQAogCiAjaW5jbHVkZSAiRHJhZ2dpbmdJbmZvLmgiCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisjaW5j
bHVkZSAiRFJURHJvcFNvdXJjZS5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbmNsdWRlIDxX
ZWJLaXQvV2ViS2l0Lmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgpAQCAtNjMwLDYgKzYzNCw3MyBA
QAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGlj
IEpTVmFsdWVSZWYgYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNPYmplY3RSZWYgZmlsZXNB
cnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIDApOworICAgIGlm
IChmaWxlc0FycmF5KSB7CisgICAgICAgIEpTU3RyaW5nUmVmIGxlbmd0aFByb3BlcnR5ID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgICAgICBWZWN0b3I8VUNo
YXI+IGZpbGVzOworICAgICAgICBpbnQgZmlsZXNDb3VudCA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzQXJyYXksIGxlbmd0aFByb3Bl
cnR5LCAwKSwgMCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXNDb3VudDsgKytp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgZmlsZXNBcnJheSwgaSwgMCk7CisgICAgICAgICAgICBKU1N0cmluZ1Jl
ZiBmaWxlID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7CisgICAgICAg
ICAgICBmaWxlcy5hcHBlbmQoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKGZpbGUpLCBKU1N0cmlu
Z0dldExlbmd0aChmaWxlKSk7CisgICAgICAgICAgICBmaWxlcy5hcHBlbmQoMCk7CisgICAgICAg
ICAgICBKU1N0cmluZ1JlbGVhc2UoZmlsZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZp
bGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHN0cmlwIHRoZSBsYXN0
ICIwIiBpbiB8ZmlsZXN8IHNvIHRoYXQgfERyYWdRdWVyeUZpbGVXfCByZXRyaWV2ZWQgdGhlIG51
bWJlciBvZiBmaWxlcyBjb3JyZWN0bHkgZnJvbSBPbGUgQ2xpcGJvYXJkLgorICAgICAgICAgICAg
ZmlsZXMucmVtb3ZlKGZpbGVzLnNpemUoKSAtIDEsIDEpOworCisgICAgICAgICAgICBTVEdNRURJ
VU0gbWVkaXVtID0gezB9OworICAgICAgICAgICAgbWVkaXVtLnR5bWVkID0gVFlNRURfSEdMT0JB
TDsKKyAgICAgICAgICAgIFNJWkVfVCBkcm9wRmlsZXNTaXplID0gc2l6ZW9mKERST1BGSUxFUykg
KyAoc2l6ZW9mKFdDSEFSKSAqIGZpbGVzLnNpemUoKSk7CisgICAgICAgICAgICBtZWRpdW0uaEds
b2JhbCA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUgfCBHTUVNX0RERVNIQVJFLCBkcm9wRmls
ZXNTaXplKTsKKyAgICAgICAgICAgIERST1BGSUxFUyogZHJvcEZpbGVzID0gcmVpbnRlcnByZXRf
Y2FzdDxEUk9QRklMRVMgKj4oR2xvYmFsTG9jayhtZWRpdW0uaEdsb2JhbCkpOworICAgICAgICAg
ICAgZHJvcEZpbGVzLT5wRmlsZXMgPSBzaXplb2YoRFJPUEZJTEVTKTsKKyAgICAgICAgICAgIGRy
b3BGaWxlcy0+ZldpZGUgPSBUUlVFOworCisgICAgICAgICAgICBVQ2hhciogZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZWludGVycHJldF9jYXN0PEJZVEUqPihkcm9wRmlsZXMpICsg
c2l6ZW9mKERST1BGSUxFUykpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaT0wOyBpPGZpbGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBmaWxlc1tpXTsKKworICAg
ICAgICAgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5oR2xvYmFsKTsgCisKKyAgICAgICAgICAgIGlm
IChkcmFnZ2luZ0luZm8pIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgZHJhZ2dpbmdJbmZvOwor
ICAgICAgICAgICAgICAgIGRyYWdnaW5nSW5mbyA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIENPTVB0cjxEUlREYXRhT2JqZWN0PiBkYXRhT2JlamVjdDsKKyAgICAgICAgICAgIENP
TVB0cjxJRHJvcFNvdXJjZT4gc291cmNlOworICAgICAgICAgICAgaWYgKEZBSUxFRChEUlREYXRh
T2JqZWN0OjpjcmVhdGVJbnN0YW5jZSgmZGF0YU9iZWplY3QpKSkKKyAgICAgICAgICAgICAgICBk
YXRhT2JlamVjdCA9IDA7CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQoRFJURHJvcFNvdXJjZTo6
Y3JlYXRlSW5zdGFuY2UoJnNvdXJjZSkpKQorICAgICAgICAgICAgICAgIHNvdXJjZSA9IDA7CisK
KyAgICAgICAgICAgIGlmIChkYXRhT2JlamVjdCAmJiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAg
ICBkcmFnZ2luZ0luZm8gPSBuZXcgRHJhZ2dpbmdJbmZvKGRhdGFPYmVqZWN0LmdldCgpLCBzb3Vy
Y2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIGRyYWdnaW5nSW5mby0+c2V0UGVyZm9ybWVkRHJv
cEVmZmVjdChEUk9QRUZGRUNUX0NPUFkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoZHJhZ2dpbmdJbmZvKSB7CisgICAgICAgICAgICAgICAgZHJhZ2dpbmdJbmZvLT5kYXRhT2Jq
ZWN0KCktPlNldERhdGEoY2ZIRHJvcEZvcm1hdCgpLCAmbWVkaXVtLCBGQUxTRSk7CisgICAgICAg
ICAgICAgICAgZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCktPlNldERhdGEoY2ZGaWxlTmFtZVdG
b3JtYXQoKSwgJm1lZGl1bSwgRkFMU0UpOworICAgICAgICAgICAgICAgIE9sZVNldENsaXBib2Fy
ZChkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgZG93biA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGxl
bmd0aFByb3BlcnR5KTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1td
ID0gewogICAgIHsgImNvbnRleHRDbGljayIsIGNvbnRleHRDbGlja0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgeyAibW91c2VEb3duIiwgbW91c2VEb3duQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTY0Miw2
ICs3MTMsNyBAQAogICAgIHsgInRleHRab29tT3V0IiwgdGV4dFpvb21PdXRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgIHsgInpvb21QYWdlSW4iLCB6b29tUGFnZUluQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICB7ICJ6b29tUGFnZU91dCIsIHpvb21QYWdlT3V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJi
ZWdpbkRyYWdXaXRoRmlsZXMiLCBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgIHsgMCwgMCwgMCB9CiB9OwogCg==
</data>
<flag name="review"
          id="147738"
          type_id="1"
          status="-"
          setter="tony"
    />
    <flag name="commit-queue"
          id="147739"
          type_id="3"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143554</attachid>
            <date>2012-05-23 06:17:30 -0700</date>
            <delta_ts>2012-05-24 23:17:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles.patch</filename>
            <type>text/plain</type>
            <size>29224</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MTYzKQ0KKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxNSBAQA0KKzIwMTItMDUtMjMgIFh1
ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIGV2ZW50U2Vu
ZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gd2luZG93cywg
d2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9wIHJlbGF0ZWQgdGVzdCBjYXNlLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlzIG1vZGlmaWNh
dGlvbiB3YXMgYW4gcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhpRmls
ZXMsIHVwZGF0ZSB3aW4vc2tpcHBlZCBmaWxlIHRvIHJlb212ZSBkcmFnLWRyb3AgcmVsZWF0ZWQg
dGVzdCBjYXNlIHdpbGwgdmFsaWF0ZSB0aGlzLiAKKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9E
cmFnRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6bnVtYmVyT2ZGaWxl
cyk6CisKIDIwMTItMDUtMjMgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGVsaW1pbmF0ZSBnZXR0ZXJzIGZyb20gSGVhcFNu
YXBzaG90LmpzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4u
Y3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRh
V2luLmNwcAkocmV2aXNpb24gMTE4MDk2KQ0KKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnRGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xLDUgKzEsNiBAQA0KIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTExLDcgKzExMiwyNCBAQA0KIAog
dW5zaWduZWQgRHJhZ0RhdGE6Om51bWJlck9mRmlsZXMoKSBjb25zdAogewotICAgIHJldHVybiAw
OworICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFNUR01FRElVTSBtZWRpdW07CisgICAgaWYgKEZBSUxFRChtX3BsYXRmb3JtRHJhZ0RhdGEtPkdl
dERhdGEoY2ZIRHJvcEZvcm1hdCgpLCAmbWVkaXVtKSkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgSERST1AgaGRyb3AgPSBzdGF0aWNfY2FzdDxIRFJPUD4oR2xvYmFsTG9jayhtZWRpdW0uaEds
b2JhbCkpOworCisgICAgaWYgKCFoZHJvcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNp
Z25lZCBudW1GaWxlcyA9IERyYWdRdWVyeUZpbGVXKGhkcm9wLCAweEZGRkZGRkZGLCAwLCAwKTsK
KworICAgIERyYWdGaW5pc2goaGRyb3ApOworICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2Jh
bCk7CisKKyAgICByZXR1cm4gbnVtRmlsZXM7CiB9CiAKIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5h
bWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0CkluZGV4OiBUb29scy9DaGFuZ2VMb2cN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODE2MykNCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsNTYgQEANCisyMDEyLTA1
LTIzICBYdWVxaW5nIEh1YW5nICA8aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAgICAgICBl
dmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHdp
bmRvd3MsIHdoaWNoIGJsb2NrZWQgZHJhZyBhbmQgZHJvcCByZWxhdGVkIHRlc3QgY2FzZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2Mjk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAoY2ZIRHJvcEZvcm1h
dCk6CisgICAgICAgIChjZkZpbGVOYW1lV0Zvcm1hdCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRF
dGMpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMpOgorICAgICAg
ICAoV0NFbnVtRm9ybWF0RXRjOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChXQ0VudW1Gb3Jt
YXRFdGM6OkFkZFJlZik6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OlJlbGVhc2UpOgorICAg
ICAgICAoV0NFbnVtRm9ybWF0RXRjOjpOZXh0KToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6
U2tpcCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OlJlc2V0KToKKyAgICAgICAgKFdDRW51
bUZvcm1hdEV0Yzo6Q2xvbmUpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFu
Y2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6RFJURGF0YU9iamVjdCk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpR
dWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpBZGRSZWYpOgorICAgICAg
ICAoRFJURGF0YU9iamVjdDo6UmVsZWFzZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXRE
YXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkdldERhdGFIZXJlKToKKyAgICAgICAgKERS
VERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXRD
YW5vbmljYWxGb3JtYXRFdGMpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6U2V0RGF0YSk6Cisg
ICAgICAgIChEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OkVudW1Gb3JtYXRFdGMpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6REFkdmlzZSk6Cisg
ICAgICAgIChEUlREYXRhT2JqZWN0OjpEVW5hZHZpc2UpOgorICAgICAgICAoRFJURGF0YU9iamVj
dDo6RW51bURBZHZpc2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6Y2xlYXJEYXRhKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oOiBBZGRlZC4KKyAgICAg
ICAgKERSVERhdGFPYmplY3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9w
U291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChEUlREcm9wU291cmNlOjpEUlREcm9wU291cmNl
KToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6On5EUlREcm9wU291cmNlKToKKyAgICAgICAgKERS
VERyb3BTb3VyY2U6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OkFk
ZFJlZik6CisgICAgICAgIChEUlREcm9wU291cmNlOjpSZWxlYXNlKToKKyAgICAgICAgKERSVERy
b3BTb3VyY2U6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OlF1ZXJ5
Q29udGludWVEcmFnKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OkdpdmVGZWVkYmFjayk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaDogQWRkZWQuCisgICAg
ICAgIChEUlREcm9wU291cmNlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRl
ci5jcHA6CisgICAgICAgIChiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjayk6CisKIDIwMTItMDQt
MTggIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAg
ICAgIFtRdF0gTWFrZSB0aGUgd2ViIHZpZXcncyB1cmwgcHJvcGVydHkgZm9sbG93IHRoZSBhY3Rp
dmUgdXJsCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHAN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5j
cHAJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmpl
Y3QuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwzODEgQEANCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERhdGFPYmplY3QuaCIKKworRk9STUFURVRDKiBj
ZkhEcm9wRm9ybWF0KCkKK3sKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZvcm1hdCA9IHtDRl9I
RFJPUCwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAgIHJldHVy
biAmdXJsRm9ybWF0OworfQorCitGT1JNQVRFVEMqIGNmRmlsZU5hbWVXRm9ybWF0KCkKK3sKKyAg
ICBzdGF0aWMgVUlOVCBjZiA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0KEwiRmlsZU5hbWVXIik7
CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Y2YsIDAsIERWQVNQRUNUX0NPTlRF
TlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsKK30KKworY2xh
c3MgV0NFbnVtRm9ybWF0RXRjIDogcHVibGljIElFbnVtRk9STUFURVRDCit7CitwdWJsaWM6Cisg
ICAgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEM+JiBmb3JtYXRzKTsKKyAg
ICBXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQyo+JiBmb3JtYXRzKTsKKwor
ICAgIC8vSVVua25vd24gbWVtYmVycworICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkoUkVG
SUlELCB2b2lkKiopOworICAgIFNURE1FVEhPRF8oVUxPTkcsIEFkZFJlZikodm9pZCk7CisgICAg
U1RETUVUSE9EXyhVTE9ORywgUmVsZWFzZSkodm9pZCk7CisKKyAgICAvL0lFbnVtRk9STUFURVRD
IG1lbWJlcnMKKyAgICBTVERNRVRIT0QoTmV4dCkoVUxPTkcsIExQRk9STUFURVRDLCBVTE9ORyop
OworICAgIFNURE1FVEhPRChTa2lwKShVTE9ORyk7CisgICAgU1RETUVUSE9EKFJlc2V0KSh2b2lk
KTsKKyAgICBTVERNRVRIT0QoQ2xvbmUpKElFbnVtRk9STUFURVRDKiopOworCitwcml2YXRlOgor
ICAgIGxvbmcgbV9yZWY7CisgICAgVmVjdG9yPEZPUk1BVEVUQz4gbV9mb3JtYXRzOworICAgIHNp
emVfdCBtX2N1cnJlbnQ7Cit9OworCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhj
b25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBt
X2N1cnJlbnQoMCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1hdHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG1fZm9ybWF0cy5hcHBlbmQoZm9ybWF0c1tpXSk7Cit9CisKK1dDRW51
bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9y
bWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZvcm1hdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZm9ybWF0cy5h
cHBlbmQoKmZvcm1hdHNbaV0pOworfQorCitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpR
dWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAqcHB2
T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8IElz
RXF1YWxJSUQocmlpZCwgSUlEX0lFbnVtRk9STUFURVRDKSkgeworICAgICAgICAqcHB2T2JqZWN0
ID0gdGhpczsKKyAgICAgICAgQWRkUmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0K
KworICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBX
Q0VudW1Gb3JtYXRFdGM6OkFkZFJlZih2b2lkKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZElu
Y3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBXQ0VudW1Gb3JtYXRF
dGM6OlJlbGVhc2Uodm9pZCkKK3sKKyAgICBsb25nIHJlZkNvdW50ID0gSW50ZXJsb2NrZWREZWNy
ZW1lbnQoJm1fcmVmKTsKKyAgICBpZiAocmVmQ291bnQgPT0gMCkKKyAgICAgICAgZGVsZXRlIHRo
aXM7CisgICAgcmV0dXJuIHJlZkNvdW50OworfQorCitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0
RXRjOjpOZXh0KFVMT05HIGNlbHQsIExQRk9STUFURVRDIGxwRm9ybWF0RXRjLCBVTE9ORyogcGNl
bHRGZXRjaGVkKQoreworICAgIGlmIChwY2VsdEZldGNoZWQgIT0gMCkKKyAgICAgICAgKnBjZWx0
RmV0Y2hlZD0wOworCisgICAgVUxPTkcgY1JldHVybiA9IGNlbHQ7CisKKyAgICBpZiAoY2VsdCA8
PSAwIHx8IGxwRm9ybWF0RXRjID09IDAgfHwgbV9jdXJyZW50ID49IG1fZm9ybWF0cy5zaXplKCkp
CisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKHBjZWx0RmV0Y2hlZCA9PSAwICYm
IGNlbHQgIT0gMSkgLy8gcGNlbHRGZXRjaGVkIGNhbiBiZSAwIG9ubHkgZm9yIDEgaXRlbSByZXF1
ZXN0CisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgd2hpbGUgKG1fY3VycmVudCA8IG1f
Zm9ybWF0cy5zaXplKCkgJiYgY1JldHVybiA+IDApIHsKKyAgICAgICAgKmxwRm9ybWF0RXRjKysg
PSBtX2Zvcm1hdHNbbV9jdXJyZW50KytdOworICAgICAgICAtLWNSZXR1cm47CisgICAgfQorICAg
IGlmIChwY2VsdEZldGNoZWQgIT0gMCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQgLSBj
UmV0dXJuOworCisgICAgcmV0dXJuIGNSZXR1cm4gPT0gMCA/IFNfT0sgOiBTX0ZBTFNFOworfQor
CitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpTa2lwKFVMT05HIGNlbHQpCit7CisgICAg
aWYgKChtX2N1cnJlbnQgKyBjZWx0KSA+PSBtX2Zvcm1hdHMuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gU19GQUxTRTsKKyAgICBtX2N1cnJlbnQgKz0gY2VsdDsKKyAgICByZXR1cm4gU19PSzsKK30K
KworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6UmVzZXQodm9pZCkKK3sKKyAgICBtX2N1
cnJlbnQgPSAwOworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAgV0NFbnVtRm9y
bWF0RXRjOjpDbG9uZShJRW51bUZPUk1BVEVUQyoqIHBwQ2xvbmVFbnVtRm9ybWF0RXRjKQorewor
ICAgIGlmICghcHBDbG9uZUVudW1Gb3JtYXRFdGMpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CisKKyAgICBXQ0VudW1Gb3JtYXRFdGMgKm5ld0VudW0gPSBuZXcgV0NFbnVtRm9ybWF0RXRjKG1f
Zm9ybWF0cyk7CisgICAgaWYgKCFuZXdFbnVtKQorICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9S
WTsKKworICAgIG5ld0VudW0tPkFkZFJlZigpOworICAgIG5ld0VudW0tPm1fY3VycmVudCA9IG1f
Y3VycmVudDsKKyAgICAqcHBDbG9uZUVudW1Gb3JtYXRFdGMgPSBuZXdFbnVtOworICAgIHJldHVy
biBTX09LOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworSFJFU1VMVCBEUlREYXRhT2JqZWN0Ojpj
cmVhdGVJbnN0YW5jZShEUlREYXRhT2JqZWN0KiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICpyZXN1bHQgPSBuZXcgRFJURGF0YU9i
amVjdCgpOworICAgIHJldHVybiBTX09LOworfQorCitEUlREYXRhT2JqZWN0OjpEUlREYXRhT2Jq
ZWN0KCkKKyAgICA6IG1fcmVmKDEpCit7Cit9CisKK0RSVERhdGFPYmplY3Q6On5EUlREYXRhT2Jq
ZWN0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbWVkaXVtLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obV9tZWRpdW1baV0pOworICAgICAgICBkZWxl
dGUgbV9tZWRpdW1baV07CisgICAgfQorICAgIFdURjo6ZGVsZXRlQWxsVmFsdWVzKG1fZm9ybWF0
cyk7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpRdWVyeUludGVyZmFjZShSRUZJ
SUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAqcHB2T2JqZWN0ID0gMDsKKyAgICBp
ZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8IElzRXF1YWxJSUQocmlpZCwgSUlE
X0lEYXRhT2JqZWN0KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisKKyAgICBpZiAoKnBw
dk9iamVjdCkgeworICAgICAgICBBZGRSZWYoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAg
fQorICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBE
UlREYXRhT2JqZWN0OjpBZGRSZWYoIHZvaWQpCit7CisgICAgcmV0dXJuIEludGVybG9ja2VkSW5j
cmVtZW50KCZtX3JlZik7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERhdGFPYmplY3Q6
OlJlbGVhc2UoIHZvaWQpCit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVt
ZW50KCZtX3JlZik7CisgICAgaWYgKHJlZkNvdW50ID09IDApCisgICAgICAgIGRlbGV0ZSB0aGlz
OworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6
OkdldERhdGEoRk9STUFURVRDKiBwZm9ybWF0ZXRjSW4sIFNUR01FRElVTSogcG1lZGl1bSkKK3sg
CisgICAgaWYgKCFwZm9ybWF0ZXRjSW4gfHwgIXBtZWRpdW0pCisgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisgICAgcG1lZGl1bS0+aEdsb2JhbCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocGZvcm1hdGV0Y0lu
LT5saW5kZXggPT0gbV9mb3JtYXRzW2ldLT5saW5kZXggJiYgcGZvcm1hdGV0Y0luLT5kd0FzcGVj
dCA9PSBtX2Zvcm1hdHNbaV0tPmR3QXNwZWN0ICYmIHBmb3JtYXRldGNJbi0+Y2ZGb3JtYXQgPT0g
bV9mb3JtYXRzW2ldLT5jZkZvcm1hdCkgeworICAgICAgICAgICAgQ29weU1lZGl1bShwbWVkaXVt
LCBtX21lZGl1bVtpXSwgbV9mb3JtYXRzW2ldKTsKKyAgICAgICAgICAgIHJldHVybiBTX09LOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBEVl9FX0ZPUk1BVEVUQzsKK30KKworU1RETUVU
SE9ESU1QIERSVERhdGFPYmplY3Q6OkdldERhdGFIZXJlKEZPUk1BVEVUQyosIFNUR01FRElVTSop
Cit7IAorICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2Jq
ZWN0OjpRdWVyeUdldERhdGEoRk9STUFURVRDKiBwZm9ybWF0ZXRjKQoreyAKKyAgICBpZiAoIXBm
b3JtYXRldGMpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBpZiAoIShEVkFTUEVD
VF9DT05URU5UICYgcGZvcm1hdGV0Yy0+ZHdBc3BlY3QpKQorICAgICAgICByZXR1cm4gKERWX0Vf
RFZBU1BFQ1QpOworCisgICAgSFJFU1VMVCAgaHIgPSBEVl9FX1RZTUVEOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9y
bWF0ZXRjLT50eW1lZCAmIG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKKyAgICAgICAgICAgIGlmIChw
Zm9ybWF0ZXRjLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBTX09LOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhy
ID0gRFZfRV9DTElQRk9STUFUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGhyID0gRFZfRV9UWU1FRDsKKyAgICB9CisgICAgcmV0dXJuIGhyOworfQorCitTVERNRVRIT0RJ
TVAgRFJURGF0YU9iamVjdDo6R2V0Q2Fub25pY2FsRm9ybWF0RXRjKEZPUk1BVEVUQyosIEZPUk1B
VEVUQyopCit7IAorICAgIHJldHVybiBEQVRBX1NfU0FNRUZPUk1BVEVUQzsKK30KKworU1RETUVU
SE9ESU1QIERSVERhdGFPYmplY3Q6OlNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0ZXRjLCBTVEdN
RURJVU0qIHBtZWRpdW0sIEJPT0wgZlJlbGVhc2UpCit7IAorICAgIGlmICghcGZvcm1hdGV0YyB8
fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEZPUk1BVEVUQyog
ZmV0YyA9IG5ldyBGT1JNQVRFVEM7CisgICAgaWYgKCFmZXRjKQorICAgICAgICByZXR1cm4gRV9P
VVRPRk1FTU9SWTsKKworICAgIFNUR01FRElVTSogcFN0Z01lZCA9IG5ldyBTVEdNRURJVU07CisK
KyAgICBpZiAoIXBTdGdNZWQpIHsKKyAgICAgICAgZGVsZXRlIGZldGM7CisgICAgICAgIHJldHVy
biBFX09VVE9GTUVNT1JZOworICAgIH0KKworICAgIFplcm9NZW1vcnkoZmV0YyxzaXplb2YoRk9S
TUFURVRDKSk7CisgICAgWmVyb01lbW9yeShwU3RnTWVkLHNpemVvZihTVEdNRURJVU0pKTsKKwor
ICAgICpmZXRjID0gKnBmb3JtYXRldGM7CisgICAgbV9mb3JtYXRzLmFwcGVuZChmZXRjKTsKKwor
ICAgIGlmIChmUmVsZWFzZSkKKyAgICAgICAgKnBTdGdNZWQgPSAqcG1lZGl1bTsKKyAgICBlbHNl
CisgICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1lZGl1bSwgcGZvcm1hdGV0Yyk7CisgICAg
bV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3ZvaWQg
RFJURGF0YU9iamVjdDo6Q29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0q
IHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYykKK3sKKyAgICBzd2l0Y2ggKHBNZWRTcmMtPnR5
bWVkKSB7CisjaWYgIU9TKFdJTkNFKQorICAgIGNhc2UgVFlNRURfSEdMT0JBTDoKKyAgICAgICAg
cE1lZERlc3QtPmhHbG9iYWwgPSBzdGF0aWNfY2FzdDxIR0xPQkFMPihPbGVEdXBsaWNhdGVEYXRh
KHBNZWRTcmMtPmhHbG9iYWwscEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUWU1FRF9HREk6CisgICAgICAgIHBNZWREZXN0LT5oQml0bWFwID0gc3RhdGlj
X2Nhc3Q8SEJJVE1BUD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oQml0bWFwLHBGbXRTcmMt
PmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfTUZQSUNUOgor
ICAgICAgICBwTWVkRGVzdC0+aE1ldGFGaWxlUGljdCA9IHN0YXRpY19jYXN0PEhNRVRBRklMRVBJ
Q1Q+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aE1ldGFGaWxlUGljdCxwRm10U3JjLT5jZkZv
cm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0VOSE1GOgorICAgICAg
ICBwTWVkRGVzdC0+aEVuaE1ldGFGaWxlID0gc3RhdGljX2Nhc3Q8SEVOSE1FVEFGSUxFPihPbGVE
dXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhFbmhNZXRhRmlsZSxwRm10U3JjLT5jZkZvcm1hdCwgMCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0ZJTEU6CisgICAgICAgIHBNZWRTcmMt
Pmxwc3pGaWxlTmFtZSA9IHN0YXRpY19jYXN0PExQT0xFU1RSPihPbGVEdXBsaWNhdGVEYXRhKHBN
ZWRTcmMtPmxwc3pGaWxlTmFtZSxwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVh
azsKKyNlbmRpZgorICAgIGNhc2UgVFlNRURfSVNUUkVBTToKKyAgICAgICAgcE1lZERlc3QtPnBz
dG0gPSBwTWVkU3JjLT5wc3RtOworICAgICAgICBwTWVkU3JjLT5wc3RtLT5BZGRSZWYoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9JU1RPUkFHRToKKyAgICAgICAgcE1lZERlc3Qt
PnBzdGcgPSBwTWVkU3JjLT5wc3RnOworICAgICAgICBwTWVkU3JjLT5wc3RnLT5BZGRSZWYoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHBNZWREZXN0LT50eW1lZCA9IHBNZWRTcmMtPnR5bWVkOworICAgIHBNZWREZXN0LT5wVW5rRm9y
UmVsZWFzZSA9IDA7CisgICAgaWYgKHBNZWRTcmMtPnBVbmtGb3JSZWxlYXNlICE9IDApIHsKKyAg
ICAgICAgcE1lZERlc3QtPnBVbmtGb3JSZWxlYXNlID0gcE1lZFNyYy0+cFVua0ZvclJlbGVhc2U7
CisgICAgICAgIHBNZWRTcmMtPnBVbmtGb3JSZWxlYXNlLT5BZGRSZWYoKTsKKyAgICB9Cit9Cgor
U1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkVudW1Gb3JtYXRFdGMoRFdPUkQgZHdEaXJlY3Rp
b24sIElFbnVtRk9STUFURVRDKiogcHBlbnVtRm9ybWF0RXRjKQoreyAKKyAgICBpZiAoIXBwZW51
bUZvcm1hdEV0YykKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICpwcGVudW1Gb3Jt
YXRFdGMgPSAwOworICAgIHN3aXRjaCAoZHdEaXJlY3Rpb24pIHsKKyAgICBjYXNlIERBVEFESVJf
R0VUOgorICAgICAgICAqcHBlbnVtRm9ybWF0RXRjID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zv
cm1hdHMpOworICAgICAgICBpZiAoISgqcHBlbnVtRm9ybWF0RXRjKSkKKyAgICAgICAgICAgIHJl
dHVybiBFX09VVE9GTUVNT1JZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgREFUQURJUl9T
RVQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRh
T2JqZWN0OjpEQWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNlU2luayosRFdPUkQqKQor
eyAKKyAgICByZXR1cm4gT0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEOworfQorCitTVERNRVRIT0RJ
TVAgRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKERXT1JEKQoreworICAgIHJldHVybiBFX05PVElN
UEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGF0YU9iamVjdDo6RW51bURB
ZHZpc2UoSUVudW1TVEFUREFUQSoqKQoreworICAgIHJldHVybiBPTEVfRV9BRFZJU0VOT1RTVVBQ
T1JURUQ7Cit9CisKK3ZvaWQgRFJURGF0YU9iamVjdDo6Y2xlYXJEYXRhKENMSVBGT1JNQVQgZm9y
bWF0KQoreworICAgIHNpemVfdCBwdHIgPSAwOworICAgIHdoaWxlIChwdHIgPCBtX2Zvcm1hdHMu
c2l6ZSgpKSB7CisgICAgICAgIGlmIChtX2Zvcm1hdHNbcHRyXS0+Y2ZGb3JtYXQgPT0gZm9ybWF0
KSB7CisgICAgICAgICAgICBGT1JNQVRFVEMqIGN1cnJlbnQgPSBtX2Zvcm1hdHNbcHRyXTsKKyAg
ICAgICAgICAgIG1fZm9ybWF0c1twdHJdID0gbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAx
XTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV0gPSAwOworICAg
ICAgICAgICAgbV9mb3JtYXRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBjdXJy
ZW50OworICAgICAgICAgICAgU1RHTUVESVVNKiBtZWRpdW0gPSBtX21lZGl1bVtwdHJdOworICAg
ICAgICAgICAgbV9tZWRpdW1bcHRyXSA9IG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdOwor
ICAgICAgICAgICAgbV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV0gPSAwOworICAgICAgICAg
ICAgbV9tZWRpdW0ucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bSht
ZWRpdW0pOworICAgICAgICAgICAgZGVsZXRlIG1lZGl1bTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIHB0cisrOworICAgIH0KK30KSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCShyZXZpc2lvbiAwKQ0KKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJKHJldmlzaW9uIDApDQpAQCAtMCwwICsx
LDY5IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRFJURGF0YU9iamVjdF9oCisjZGVmaW5lIERSVERh
dGFPYmplY3RfaAorCisjaW5jbHVkZSA8U2hsT2JqLmg+CisjaW5jbHVkZSA8b2JqaWRsLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitGT1JNQVRFVEMqIGNmSERyb3BGb3JtYXQoKTsKKwor
Rk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpOworCitjbGFzcyBEUlREYXRhT2JqZWN0IDog
cHVibGljIElEYXRhT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIENvcHlNZWRpdW0oU1RHTUVE
SVVNKiBwTWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JNQVRFVEMqIHBGbXRTcmMpOwor
CisgICAgLy9JVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBR
dWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7ICAgICAgICAKKyAg
ICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZih2b2lkKTsKKyAgICB2aXJ0
dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7CisKKyAgICAvL0lEYXRh
T2JqZWN0CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldERhdGEoRk9S
TUFURVRDKiBwZm9ybWF0SW4sIFNUR01FRElVTSogcG1lZGl1bSk7CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldERhdGFIZXJlKEZPUk1BVEVUQyogcGZvcm1hdCwgU1RH
TUVESVVNKiBwbWVkaXVtKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
UXVlcnlHZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEdldENhbm9uaWNhbEZvcm1hdEV0YyhGT1JNQVRFVEMqIHBmb3JtYXRl
Y3RJbixGT1JNQVRFVEMqIHBmb3JtYXRPdXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdCwgU1RHTUVESVVNKnBtZWRpdW0s
IEJPT0wgcmVsZWFzZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVu
dW1Gb3JtYXRFdGMoRFdPUkQgZHdEaXJlY3Rpb24sIElFbnVtRk9STUFURVRDKiogcHBlbnVtRm9y
bWF0RXRjKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgREFkdmlzZShG
T1JNQVRFVEMqLCBEV09SRCwgSUFkdmlzZVNpbmsqLCBEV09SRCopOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEVW5hZHZpc2UoRFdPUkQpOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFbnVtREFkdmlzZShJRW51bVNUQVREQVRBKiopOworCisg
ICAgdm9pZCBjbGVhckRhdGEoQ0xJUEZPUk1BVCk7CisgICAgCisgICAgc3RhdGljIEhSRVNVTFQg
Y3JlYXRlSW5zdGFuY2UoRFJURGF0YU9iamVjdCoqKTsKK3ByaXZhdGU6CisgICAgRFJURGF0YU9i
amVjdCgpOworICAgIH5EUlREYXRhT2JqZWN0KCk7CisgICAgbG9uZyBtX3JlZjsKKyAgICBWZWN0
b3I8Rk9STUFURVRDKj4gbV9mb3JtYXRzOworICAgIFZlY3RvcjxTVEdNRURJVU0qPiBtX21lZGl1
bTsKK307CisKKyNlbmRpZiAvL0RSVERhdGFPYmplY3RfaApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQ0KKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAg
KzEsODYgQEANCisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEUlREcm9wU291cmNlLmgiCisKK0RSVERyb3BT
b3VyY2U6OkRSVERyb3BTb3VyY2UoKQorICAgIDogbV9yZWYoMSkKKyAgICAsIG1fZHJvcHBlZChm
YWxzZSkKK3sKK30KKworRFJURHJvcFNvdXJjZTo6fkRSVERyb3BTb3VyY2UoKQoreworfQorCitT
VERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZv
aWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxJ
SUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRHJvcFNvdXJj
ZSkpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigpOworCisg
ICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIHJldHVybiBFX05PSU5URVJGQUNFOwor
fQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlREcm9wU291cmNlOjpBZGRSZWYodm9pZCkKK3sK
KyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1fcmVmKTsKK30KKworU1RETUVUSE9E
SU1QXyhVTE9ORykgRFJURHJvcFNvdXJjZTo6UmVsZWFzZSh2b2lkKQoreworICAgIGxvbmcgcmVm
Q291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmIChyZWZDb3VudCA9
PSAwKQorICAgICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hS
RVNVTFQgRFJURHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UoSURyb3BTb3VyY2UqKiByZXN1bHQp
Cit7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAg
KnJlc3VsdCA9IG5ldyBEUlREcm9wU291cmNlOworICAgIHJldHVybiBTX09LOworfQorCitTVERN
RVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6UXVlcnlDb250aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJl
c3NlZCwgRFdPUkQgZ3JmS2V5U3RhdGUpCit7CisgICAgaWYgKGZFc2NhcGVQcmVzc2VkIHx8ICEo
Z3JmS2V5U3RhdGUgJiAoTUtfTEJVVFRPTiB8IE1LX1JCVVRUT04pKSkgeworICAgICAgICBtX2Ry
b3BwZWQgPSAhZkVzY2FwZVByZXNzZWQ7CisgICAgICAgIHJldHVybiBmRXNjYXBlUHJlc3NlZCA/
IERSQUdEUk9QX1NfQ0FOQ0VMIDogRFJBR0RST1BfU19EUk9QOworICAgIH0KKworICAgIHJldHVy
biBTX09LOworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNrKERX
T1JEIGR3RWZmZWN0KQoreworICAgIHJldHVybiBEUkFHRFJPUF9TX1VTRURFRkFVTFRDVVJTT1JT
OworfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJl
dmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaAko
cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNDkgQEANCisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyovCisKKyNpZm5kZWYgRFJURHJvcFNvdXJjZV9oCisjZGVmaW5lIERSVERy
b3BTb3VyY2VfaAorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPFNobE9iai5oPgor
CitjbGFzcyBEUlREcm9wU291cmNlIDogcHVibGljIElEcm9wU291cmNlCit7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJ
RCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsgICAgICAgIAorICAgIHZpcnR1YWwgVUxPTkcgU1RE
TUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgUXVlcnlDb250aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJlc3NlZCwgRFdPUkQgZ3JmS2V5
U3RhdGUpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHaXZlRmVlZGJh
Y2soRFdPUkQgZHdFZmZlY3QpOworCisgICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlSW5zdGFuY2Uo
SURyb3BTb3VyY2UqKiByZXN1bHQpOworcHJpdmF0ZToKKyAgICBEUlREcm9wU291cmNlKCk7Cisg
ICAgfkRSVERyb3BTb3VyY2UoKTsKKyAgICBsb25nIG1fcmVmOworICAgIGJvb2wgbV9kcm9wcGVk
OworfTsKKworI2VuZGlmIC8vRFJURHJvcFNvdXJjZV9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagkocmV2aXNpb24gMTE4MDk2KQ0K
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkNCkBAIC01MjcsNiArNTI3LDIyIEBADQogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxl
CisJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURGF0YU9iamVjdC5jcHAiCisJCQk+CisJCTwvRmlsZT4K
KwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0LmgiCisJCQk+CisJCTwv
RmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLlxEUlREcm9wU291cmNlLmNwcCIKKwkJ
CT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuXERSVERyb3BTb3VyY2Uu
aCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuXER1bXBSZW5k
ZXJUcmVlLmNwcCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0V2ZW50U2VuZGVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9FdmVudFNlbmRlci5jcHAJKHJldmlzaW9uIDExODA5NikNCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYg
QEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTEgKzMyLDE0
IEBADQogCiAjaW5jbHVkZSAiRHJhZ2dpbmdJbmZvLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWUuaCIKKyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisjaW5jbHVkZSAiRFJURHJvcFNvdXJj
ZS5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CiAj
aW5jbHVkZSA8d2luZG93cy5oPgpAQCAtNjMwLDYgKzYzNCw3NCBAQA0KICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGJlZ2lu
RHJhZ1dpdGhGaWxlc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKKworICAgIEpTT2JqZWN0UmVmIGZpbGVzQXJyYXkgPSBKU1ZhbHVlVG9P
YmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCAwKTsKKyAgICBpZiAoZmlsZXNBcnJheSkgewor
ICAgICAgICBKU1N0cmluZ1JlZiBsZW5ndGhQcm9wZXJ0eSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsZW5ndGgiKTsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBmaWxlczsKKyAgICAg
ICAgaW50IGZpbGVzQ291bnQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCBmaWxlc0FycmF5LCBsZW5ndGhQcm9wZXJ0eSwgMCksIDApOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzQ291bnQ7ICsraSkgeworICAgICAgICAgICAg
SlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZp
bGVzQXJyYXksIGksIDApOworICAgICAgICAgICAgSlNTdHJpbmdSZWYgZmlsZSA9IEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApOworICAgICAgICAgICAgZmlsZXMuYXBwZW5k
KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihmaWxlKSwgSlNTdHJpbmdHZXRMZW5ndGgoZmlsZSkp
OworICAgICAgICAgICAgZmlsZXMuYXBwZW5kKDApOworICAgICAgICAgICAgSlNTdHJpbmdSZWxl
YXNlKGZpbGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmaWxlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhcHBlbmQgIjAiIGluIHRoZSBlbmQgb2YgfGZpbGVz
fCBzbyB0aGF0IHxEcmFnUXVlcnlGaWxlV3wgcmV0cmlldmVkIHRoZSBudW1iZXIgb2YgZmlsZXMg
Y29ycmVjdGx5IGZyb20gT2xlIENsaXBib2FyZC4KKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZCgw
KTsKKworICAgICAgICAgICAgU1RHTUVESVVNIG1lZGl1bSA9IHswfTsKKyAgICAgICAgICAgIG1l
ZGl1bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgICAgICAgICBTSVpFX1QgZHJvcEZpbGVz
U2l6ZSA9IHNpemVvZihEUk9QRklMRVMpICsgKHNpemVvZihXQ0hBUikgKiBmaWxlcy5zaXplKCkp
OworICAgICAgICAgICAgbWVkaXVtLmhHbG9iYWwgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxF
IHwgR01FTV9EREVTSEFSRSwgZHJvcEZpbGVzU2l6ZSk7CisgICAgICAgICAgICBEUk9QRklMRVMq
IGRyb3BGaWxlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RFJPUEZJTEVTICo+KEdsb2JhbExvY2sobWVk
aXVtLmhHbG9iYWwpKTsKKwkJCW1lbXNldChkcm9wRmlsZXMsIDAsIHNpemVvZihEUk9QRklMRVMp
KTsKKyAgICAgICAgICAgIGRyb3BGaWxlcy0+cEZpbGVzID0gc2l6ZW9mKERST1BGSUxFUyk7Cisg
ICAgICAgICAgICBkcm9wRmlsZXMtPmZXaWRlID0gVFJVRTsKKworICAgICAgICAgICAgVUNoYXIq
IGRhdGEgPSByZWludGVycHJldF9jYXN0PFVDaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxCWVRFKj4o
ZHJvcEZpbGVzKSArIHNpemVvZihEUk9QRklMRVMpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YVtpXSA9
IGZpbGVzW2ldOworCisgICAgICAgICAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOyAK
KworICAgICAgICAgICAgaWYgKGRyYWdnaW5nSW5mbykgeworICAgICAgICAgICAgICAgIGRlbGV0
ZSBkcmFnZ2luZ0luZm87CisgICAgICAgICAgICAgICAgZHJhZ2dpbmdJbmZvID0gMDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgQ09NUHRyPERSVERhdGFPYmplY3Q+IGRhdGFPYmVqZWN0
OworICAgICAgICAgICAgQ09NUHRyPElEcm9wU291cmNlPiBzb3VyY2U7CisgICAgICAgICAgICBp
ZiAoRkFJTEVEKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKCZkYXRhT2JlamVjdCkpKQor
ICAgICAgICAgICAgICAgIGRhdGFPYmVqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKEZBSUxF
RChEUlREcm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSgmc291cmNlKSkpCisgICAgICAgICAgICAg
ICAgc291cmNlID0gMDsKKworICAgICAgICAgICAgaWYgKGRhdGFPYmVqZWN0ICYmIHNvdXJjZSkg
eworICAgICAgICAgICAgICAgIGRyYWdnaW5nSW5mbyA9IG5ldyBEcmFnZ2luZ0luZm8oZGF0YU9i
ZWplY3QuZ2V0KCksIHNvdXJjZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZHJhZ2dpbmdJbmZv
LT5zZXRQZXJmb3JtZWREcm9wRWZmZWN0KERST1BFRkZFQ1RfQ09QWSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChkcmFnZ2luZ0luZm8pIHsKKyAgICAgICAgICAgICAgICBkcmFn
Z2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0s
IEZBTFNFKTsKKyAgICAgICAgICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0
RGF0YShjZkZpbGVOYW1lV0Zvcm1hdCgpLCAmbWVkaXVtLCBGQUxTRSk7CisgICAgICAgICAgICAg
ICAgT2xlU2V0Q2xpcGJvYXJkKGRyYWdnaW5nSW5mby0+ZGF0YU9iamVjdCgpKTsKKyAgICAgICAg
ICAgICAgICBkb3duID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBK
U1N0cmluZ1JlbGVhc2UobGVuZ3RoUHJvcGVydHkpOworICAgIH0KKworICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpTU3RhdGljRnVuY3Rpb24g
c3RhdGljRnVuY3Rpb25zW10gPSB7CiAgICAgeyAiY29udGV4dENsaWNrIiwgY29udGV4dENsaWNr
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJtb3VzZURvd24iLCBtb3VzZURvd25DYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LApAQCAtNjQyLDYgKzcxNCw3IEBADQogICAgIHsgInRleHRab29tT3V0IiwgdGV4dFpv
b21PdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpvb21QYWdlSW4iLCB6b29tUGFnZUluQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICB7ICJ6b29tUGFnZU91dCIsIHpvb21QYWdlT3V0Q2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKKyAgICB7ICJiZWdpbkRyYWdXaXRoRmlsZXMiLCBiZWdpbkRyYWdXaXRoRmlsZXND
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAogICAgIHsgMCwgMCwgMCB9CiB9OwogCg==
</data>
<flag name="review"
          id="150147"
          type_id="1"
          status="-"
          setter="tony"
    />
    <flag name="commit-queue"
          id="150148"
          type_id="3"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143985</attachid>
            <date>2012-05-24 23:17:45 -0700</date>
            <delta_ts>2012-05-25 00:05:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles2.patch</filename>
            <type>text/plain</type>
            <size>29344</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MTYzKQ0KKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxNiBAQA0KKzIwMTItMDUtMjMgIFh1
ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIGV2ZW50U2Vu
ZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gd2luZG93cywg
d2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9wIHJlbGF0ZWQgdGVzdCBjYXNlLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlzIG1vZGlmaWNh
dGlvbiB3YXMgYW4gcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhpRmls
ZXMsIHVwZGF0ZSB3aW4vc2tpcHBlZCBmaWxlIHRvIHJlbW92ZSBkcmFnLWRyb3AgcmVsZWF0ZWQg
dGVzdCBjYXNlIHdpbGwgdmFsaWF0ZSB0aGlzLiAKKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9E
cmFnRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6bnVtYmVyT2ZGaWxl
cyk6CisKKwogMjAxMi0wNS0yMyAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZWxpbWluYXRlIGdldHRlcnMgZnJvbSBIZWFw
U25hcHNob3QuanMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdp
bi5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0Rh
dGFXaW4uY3BwCShyZXZpc2lvbiAxMTgwOTYpDQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0RyYWdEYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTEsNyArMTEyLDI0IEBADQog
CiB1bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IDA7CisgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgU1RHTUVESVVNIG1lZGl1bTsKKyAgICBpZiAoRkFJTEVEKG1fcGxhdGZvcm1EcmFnRGF0YS0+
R2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0pKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBIRFJPUCBoZHJvcCA9IHN0YXRpY19jYXN0PEhEUk9QPihHbG9iYWxMb2NrKG1lZGl1bS5o
R2xvYmFsKSk7CisKKyAgICBpZiAoIWhkcm9wKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVu
c2lnbmVkIG51bUZpbGVzID0gRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIDB4RkZGRkZGRkYsIDAsIDAp
OworCisgICAgRHJhZ0ZpbmlzaChoZHJvcCk7CisgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5oR2xv
YmFsKTsKKworICAgIHJldHVybiBudW1GaWxlczsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxl
bmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MTYzKQ0KKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSw1NiBAQA0KKzIwMTIt
MDUtMjMgIFh1ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAg
IGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4g
d2luZG93cywgd2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9wIHJlbGF0ZWQgdGVzdCBjYXNlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChjZkhEcm9wRm9y
bWF0KToKKyAgICAgICAgKGNmRmlsZU5hbWVXRm9ybWF0KToKKyAgICAgICAgKFdDRW51bUZvcm1h
dEV0Yyk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyk6CisgICAg
ICAgIChXQ0VudW1Gb3JtYXRFdGM6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKFdDRW51bUZv
cm1hdEV0Yzo6QWRkUmVmKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6UmVsZWFzZSk6Cisg
ICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6Ok5leHQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRj
OjpTa2lwKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6UmVzZXQpOgorICAgICAgICAoV0NF
bnVtRm9ybWF0RXRjOjpDbG9uZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpjcmVhdGVJbnN0
YW5jZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpEUlREYXRhT2JqZWN0KToKKyAgICAgICAg
KERSVERhdGFPYmplY3Q6On5EUlREYXRhT2JqZWN0KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6
OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkFkZFJlZik6CisgICAg
ICAgIChEUlREYXRhT2JqZWN0OjpSZWxlYXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6Okdl
dERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0RGF0YUhlcmUpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6UXVlcnlHZXREYXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6Okdl
dENhbm9uaWNhbEZvcm1hdEV0Yyk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpTZXREYXRhKToK
KyAgICAgICAgKERSVERhdGFPYmplY3Q6OkNvcHlNZWRpdW0pOgorICAgICAgICAoRFJURGF0YU9i
amVjdDo6RW51bUZvcm1hdEV0Yyk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpEQWR2aXNlKToK
KyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRVbmFkdmlzZSk6CisgICAgICAgIChEUlREYXRhT2Jq
ZWN0OjpFbnVtREFkdmlzZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpjbGVhckRhdGEpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAoRFJURGF0YU9iamVjdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERy
b3BTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERSVERyb3BTb3VyY2U6OkRSVERyb3BTb3Vy
Y2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6fkRSVERyb3BTb3VyY2UpOgorICAgICAgICAo
RFJURHJvcFNvdXJjZTo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6
QWRkUmVmKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OlJlbGVhc2UpOgorICAgICAgICAoRFJU
RHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6UXVl
cnlDb250aW51ZURyYWcpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNrKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oOiBBZGRlZC4KKyAg
ICAgICAgKERSVERyb3BTb3VyY2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1w
UmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50U2Vu
ZGVyLmNwcDoKKyAgICAgICAgKGJlZ2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrKToKKwogMjAxMi0w
NC0xOCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAg
ICAgICAgW1F0XSBNYWtlIHRoZSB3ZWIgdmlldydzIHVybCBwcm9wZXJ0eSBmb2xsb3cgdGhlIGFj
dGl2ZSB1cmwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNw
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0
LmNwcAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9i
amVjdC5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDM4NyBAQA0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRFJURGF0YU9iamVjdC5oIgorCitGT1JNQVRFVEMq
IGNmSERyb3BGb3JtYXQoKQoreworICAgIHN0YXRpYyBGT1JNQVRFVEMgdXJsRm9ybWF0ID0ge0NG
X0hEUk9QLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURfSEdMT0JBTH07CisgICAgcmV0
dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKQorewor
ICAgIHN0YXRpYyBVSU5UIGNmID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoTCJGaWxlTmFtZVci
KTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZvcm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1RfQ09O
VEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAgIHJldHVybiAmdXJsRm9ybWF0OworfQorCitG
T1JNQVRFVEMqIGNmVXJsV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQgY2YgPSBSZWdpc3Rl
ckNsaXBib2FyZEZvcm1hdChMIlVuaWZvcm1SZXNvdXJjZUxvY2F0b3JXIik7CisgICAgc3RhdGlj
IEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Y2YsIDAsIERWQVNQRUNUX0NPTlRFTlQsIC0xLCBUWU1F
RF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsKK30KKworY2xhc3MgV0NFbnVtRm9y
bWF0RXRjIDogcHVibGljIElFbnVtRk9STUFURVRDCit7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
V0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEM+JiBmb3JtYXRzKTsKKyAgICBl
eHBsaWNpdCBXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQyo+JiBmb3JtYXRz
KTsKKworICAgIC8vSVVua25vd24gbWVtYmVycworICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFj
ZSkoUkVGSUlELCB2b2lkKiopOworICAgIFNURE1FVEhPRF8oVUxPTkcsIEFkZFJlZikodm9pZCk7
CisgICAgU1RETUVUSE9EXyhVTE9ORywgUmVsZWFzZSkodm9pZCk7CisKKyAgICAvL0lFbnVtRk9S
TUFURVRDIG1lbWJlcnMKKyAgICBTVERNRVRIT0QoTmV4dCkoVUxPTkcsIExQRk9STUFURVRDLCBV
TE9ORyopOworICAgIFNURE1FVEhPRChTa2lwKShVTE9ORyk7CisgICAgU1RETUVUSE9EKFJlc2V0
KSh2b2lkKTsKKyAgICBTVERNRVRIT0QoQ2xvbmUpKElFbnVtRk9STUFURVRDKiopOworCitwcml2
YXRlOgorICAgIGxvbmcgbV9yZWY7CisgICAgVmVjdG9yPEZPUk1BVEVUQz4gbV9mb3JtYXRzOwor
ICAgIHNpemVfdCBtX2N1cnJlbnQ7Cit9OworCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1h
dEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisg
ICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1fZm9ybWF0cyhmb3JtYXRzKQoreworfQorCitXQ0Vu
dW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZv
cm1hdHMpCisgICAgOiBtX3JlZigxKQorICAgICwgbV9jdXJyZW50KDApCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNpemUoKTsgKytpKQorICAgICAgICBtX2Zvcm1hdHMu
YXBwZW5kKCpmb3JtYXRzW2ldKTsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6
UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBw
dk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJ
c0VxdWFsSUlEKHJpaWQsIElJRF9JRW51bUZPUk1BVEVUQykpIHsKKyAgICAgICAgKnBwdk9iamVj
dCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9
CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykg
V0NFbnVtRm9ybWF0RXRjOjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJ
bmNyZW1lbnQoJm1fcmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVtRm9ybWF0
RXRjOjpSZWxlYXNlKHZvaWQpCit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVj
cmVtZW50KCZtX3JlZik7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7
CisgICAgcmV0dXJuIHJlZkNvdW50OworfQorCitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRj
OjpOZXh0KFVMT05HIGNlbHQsIExQRk9STUFURVRDIGxwRm9ybWF0RXRjLCBVTE9ORyogcGNlbHRG
ZXRjaGVkKQoreworICAgIGlmIChwY2VsdEZldGNoZWQpCisgICAgICAgICpwY2VsdEZldGNoZWQg
PSAwOworCisgICAgVUxPTkcgY1JldHVybiA9IGNlbHQ7CisKKyAgICBpZiAoY2VsdCA8PSAwIHx8
ICFscEZvcm1hdEV0YyB8fCBtX2N1cnJlbnQgPj0gbV9mb3JtYXRzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIFNfRkFMU0U7CisKKyAgICBpZiAoIXBjZWx0RmV0Y2hlZCAmJiBjZWx0ICE9IDEpIC8v
IHBjZWx0RmV0Y2hlZCBjYW4gYmUgMCBvbmx5IGZvciAxIGl0ZW0gcmVxdWVzdAorICAgICAgICBy
ZXR1cm4gU19GQUxTRTsKKworICAgIHdoaWxlIChtX2N1cnJlbnQgPCBtX2Zvcm1hdHMuc2l6ZSgp
ICYmIGNSZXR1cm4gPiAwKSB7CisgICAgICAgICpscEZvcm1hdEV0YysrID0gbV9mb3JtYXRzW21f
Y3VycmVudCsrXTsKKyAgICAgICAgLS1jUmV0dXJuOworICAgIH0KKyAgICBpZiAocGNlbHRGZXRj
aGVkKQorICAgICAgICAqcGNlbHRGZXRjaGVkID0gY2VsdCAtIGNSZXR1cm47CisKKyAgICByZXR1
cm4gIWNSZXR1cm4gPyBTX09LIDogU19GQUxTRTsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZv
cm1hdEV0Yzo6U2tpcChVTE9ORyBjZWx0KQoreworICAgIGlmICgobV9jdXJyZW50ICsgY2VsdCkg
Pj0gbV9mb3JtYXRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisgICAgbV9jdXJy
ZW50ICs9IGNlbHQ7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1G
b3JtYXRFdGM6OlJlc2V0KHZvaWQpCit7CisgICAgbV9jdXJyZW50ID0gMDsKKyAgICByZXR1cm4g
U19PSzsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6Q2xvbmUoSUVudW1GT1JN
QVRFVEMqKiBwcENsb25lRW51bUZvcm1hdEV0YykKK3sKKyAgICBpZiAoIXBwQ2xvbmVFbnVtRm9y
bWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgV0NFbnVtRm9ybWF0RXRj
ICpuZXdFbnVtID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zvcm1hdHMpOworICAgIGlmICghbmV3
RW51bSkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisKKyAgICBuZXdFbnVtLT5BZGRS
ZWYoKTsKKyAgICBuZXdFbnVtLT5tX2N1cnJlbnQgPSBtX2N1cnJlbnQ7CisgICAgKnBwQ2xvbmVF
bnVtRm9ybWF0RXRjID0gbmV3RW51bTsKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KK0hSRVNVTFQgRFJURGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UoRFJURGF0YU9i
amVjdCoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERhdGFPYmplY3QoKTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworRFJURGF0YU9iamVjdDo6RFJURGF0YU9iamVjdCgpCisgICAgOiBtX3JlZigxKQor
eworfQorCitEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX21lZGl1bS5zaXplKCk7ICsraSkgeworICAgICAgICBSZWxlYXNlU3Rn
TWVkaXVtKG1fbWVkaXVtW2ldKTsKKyAgICAgICAgZGVsZXRlIG1fbWVkaXVtW2ldOworICAgIH0K
KyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2Zvcm1hdHMpOworfQorCitTVERNRVRIT0RJTVAg
RFJURGF0YU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmpl
Y3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxJSUQocmlpZCwgSUlE
X0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRGF0YU9iamVjdCkpCisgICAgICAg
ICpwcHZPYmplY3QgPSB0aGlzOworCisgICAgaWYgKCpwcHZPYmplY3QpIHsKKyAgICAgICAgQWRk
UmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAgICByZXR1cm4gRV9OT0lOVEVS
RkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0YU9iamVjdDo6QWRkUmVmKCB2
b2lkKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitT
VERNRVRIT0RJTVBfKFVMT05HKSBEUlREYXRhT2JqZWN0OjpSZWxlYXNlKCB2b2lkKQoreworICAg
IGxvbmcgcmVmQ291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICgh
cmVmQ291bnQpCisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30K
KworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkdldERhdGEoRk9STUFURVRDKiBwZm9ybWF0
ZXRjSW4sIFNUR01FRElVTSogcG1lZGl1bSkKK3sgCisgICAgaWYgKCFwZm9ybWF0ZXRjSW4gfHwg
IXBtZWRpdW0pCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgcG1lZGl1bS0+aEdsb2Jh
bCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAocGZvcm1hdGV0Y0luLT5saW5kZXggPT0gbV9mb3JtYXRzW2ldLT5s
aW5kZXggJiYgcGZvcm1hdGV0Y0luLT5kd0FzcGVjdCA9PSBtX2Zvcm1hdHNbaV0tPmR3QXNwZWN0
ICYmIHBmb3JtYXRldGNJbi0+Y2ZGb3JtYXQgPT0gbV9mb3JtYXRzW2ldLT5jZkZvcm1hdCkgewor
ICAgICAgICAgICAgQ29weU1lZGl1bShwbWVkaXVtLCBtX21lZGl1bVtpXSwgbV9mb3JtYXRzW2ld
KTsKKyAgICAgICAgICAgIHJldHVybiBTX09LOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBEVl9FX0ZPUk1BVEVUQzsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkdldERh
dGFIZXJlKEZPUk1BVEVUQyosIFNUR01FRElVTSopCit7IAorICAgIHJldHVybiBFX05PVElNUEw7
Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEoRk9STUFURVRD
KiBwZm9ybWF0ZXRjKQoreyAKKyAgICBpZiAoIXBmb3JtYXRldGMpCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisKKyAgICBpZiAoIShEVkFTUEVDVF9DT05URU5UICYgcGZvcm1hdGV0Yy0+ZHdB
c3BlY3QpKQorICAgICAgICByZXR1cm4gKERWX0VfRFZBU1BFQ1QpOworCisgICAgSFJFU1VMVCAg
aFJlc3VsdCA9IERWX0VfVFlNRUQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zvcm1h
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBmb3JtYXRldGMtPnR5bWVkICYgbV9mb3Jt
YXRzW2ldLT50eW1lZCkgeworICAgICAgICAgICAgaWYgKHBmb3JtYXRldGMtPmNmRm9ybWF0ID09
IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNfT0s7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaFJlc3VsdCA9IERWX0VfQ0xJUEZPUk1B
VDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBoUmVzdWx0ID0gRFZfRV9U
WU1FRDsKKyAgICB9CisgICAgcmV0dXJuIGhSZXN1bHQ7Cit9CisKK1NURE1FVEhPRElNUCBEUlRE
YXRhT2JqZWN0OjpHZXRDYW5vbmljYWxGb3JtYXRFdGMoRk9STUFURVRDKiwgRk9STUFURVRDKikK
K3sgCisgICAgcmV0dXJuIERBVEFfU19TQU1FRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAg
RFJURGF0YU9iamVjdDo6U2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRldGMsIFNUR01FRElVTSog
cG1lZGl1bSwgQk9PTCBmUmVsZWFzZSkKK3sgCisgICAgaWYgKCFwZm9ybWF0ZXRjIHx8ICFwbWVk
aXVtKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgRk9STUFURVRDKiBmb3JtYXRl
dGMgPSBuZXcgRk9STUFURVRDOworICAgIGlmICghZm9ybWF0ZXRjKQorICAgICAgICByZXR1cm4g
RV9PVVRPRk1FTU9SWTsKKworICAgIFNUR01FRElVTSogcFN0Z01lZCA9IG5ldyBTVEdNRURJVU07
CisKKyAgICBpZiAoIXBTdGdNZWQpIHsKKyAgICAgICAgZGVsZXRlIGZvcm1hdGV0YzsKKyAgICAg
ICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisgICAgfQorCisgICAgWmVyb01lbW9yeShmb3JtYXRl
dGMsIHNpemVvZihGT1JNQVRFVEMpKTsKKyAgICBaZXJvTWVtb3J5KHBTdGdNZWQsIHNpemVvZihT
VEdNRURJVU0pKTsKKworICAgICpmb3JtYXRldGMgPSAqcGZvcm1hdGV0YzsKKyAgICBtX2Zvcm1h
dHMuYXBwZW5kKGZvcm1hdGV0Yyk7CisKKyAgICBpZiAoZlJlbGVhc2UpCisgICAgICAgICpwU3Rn
TWVkID0gKnBtZWRpdW07CisgICAgZWxzZQorICAgICAgICBDb3B5TWVkaXVtKHBTdGdNZWQsIHBt
ZWRpdW0sIHBmb3JtYXRldGMpOworICAgIG1fbWVkaXVtLmFwcGVuZChwU3RnTWVkKTsKKworICAg
IHJldHVybiBTX09LOworfQorCit2b2lkIERSVERhdGFPYmplY3Q6OkNvcHlNZWRpdW0oU1RHTUVE
SVVNKiBwTWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3JjLCBGT1JNQVRFVEMqIHBGbXRTcmMpCit7
CisgICAgc3dpdGNoIChwTWVkU3JjLT50eW1lZCkgeworI2lmICFPUyhXSU5DRSkKKyAgICBjYXNl
IFRZTUVEX0hHTE9CQUw6CisgICAgICAgIHBNZWREZXN0LT5oR2xvYmFsID0gc3RhdGljX2Nhc3Q8
SEdMT0JBTD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oR2xvYmFsLHBGbXRTcmMtPmNmRm9y
bWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfR0RJOgorICAgICAgICBw
TWVkRGVzdC0+aEJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KE9sZUR1cGxpY2F0ZURhdGEo
cE1lZFNyYy0+aEJpdG1hcCxwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRZTUVEX01GUElDVDoKKyAgICAgICAgcE1lZERlc3QtPmhNZXRhRmlsZVBpY3Qg
PSBzdGF0aWNfY2FzdDxITUVUQUZJTEVQSUNUPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhN
ZXRhRmlsZVBpY3QscEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUWU1FRF9FTkhNRjoKKyAgICAgICAgcE1lZERlc3QtPmhFbmhNZXRhRmlsZSA9IHN0YXRp
Y19jYXN0PEhFTkhNRVRBRklMRT4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oRW5oTWV0YUZp
bGUscEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1F
RF9GSUxFOgorICAgICAgICBwTWVkU3JjLT5scHN6RmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxMUE9M
RVNUUj4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5scHN6RmlsZU5hbWUscEZtdFNyYy0+Y2ZG
b3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIFRZTUVEX0lTVFJF
QU06CisgICAgICAgIHBNZWREZXN0LT5wc3RtID0gcE1lZFNyYy0+cHN0bTsKKyAgICAgICAgcE1l
ZFNyYy0+cHN0bS0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfSVNU
T1JBR0U6CisgICAgICAgIHBNZWREZXN0LT5wc3RnID0gcE1lZFNyYy0+cHN0ZzsKKyAgICAgICAg
cE1lZFNyYy0+cHN0Zy0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwTWVkRGVzdC0+dHltZWQgPSBwTWVkU3JjLT50eW1l
ZDsKKyAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSAwOworICAgIGlmIChwTWVkU3JjLT5w
VW5rRm9yUmVsZWFzZSkgeworICAgICAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSBwTWVk
U3JjLT5wVW5rRm9yUmVsZWFzZTsKKyAgICAgICAgcE1lZFNyYy0+cFVua0ZvclJlbGVhc2UtPkFk
ZFJlZigpOworICAgIH0KK30KK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpFbnVtRm9ybWF0
RXRjKERXT1JEIGR3RGlyZWN0aW9uLCBJRW51bUZPUk1BVEVUQyoqIHBwZW51bUZvcm1hdEV0YykK
K3sgCisgICAgaWYgKCFwcGVudW1Gb3JtYXRFdGMpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CisKKyAgICAqcHBlbnVtRm9ybWF0RXRjID0gMDsKKyAgICBzd2l0Y2ggKGR3RGlyZWN0aW9uKSB7
CisgICAgY2FzZSBEQVRBRElSX0dFVDoKKyAgICAgICAgKnBwZW51bUZvcm1hdEV0YyA9IG5ldyBX
Q0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICAgICAgaWYgKCEoKnBwZW51bUZvcm1hdEV0
YykpCisgICAgICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIERBVEFESVJfU0VUOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFX05P
VElNUEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitT
VERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6REFkdmlzZShGT1JNQVRFVEMqLCBEV09SRCwgSUFk
dmlzZVNpbmsqLERXT1JEKikKK3sgCisgICAgcmV0dXJuIE9MRV9FX0FEVklTRU5PVFNVUFBPUlRF
RDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkRVbmFkdmlzZShEV09SRCkKK3sK
KyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERS
VERhdGFPYmplY3Q6OkVudW1EQWR2aXNlKElFbnVtU1RBVERBVEEqKikKK3sKKyAgICByZXR1cm4g
T0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEOworfQorCit2b2lkIERSVERhdGFPYmplY3Q6OmNsZWFy
RGF0YShDTElQRk9STUFUIGZvcm1hdCkKK3sKKyAgICBzaXplX3QgcG9zaXRpb24gPSAwOworICAg
IHdoaWxlIChwb3NpdGlvbiA8IG1fZm9ybWF0cy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fZm9y
bWF0c1twb3NpdGlvbl0tPmNmRm9ybWF0ID09IGZvcm1hdCkgeworICAgICAgICAgICAgRk9STUFU
RVRDKiBjdXJyZW50ID0gbV9mb3JtYXRzW3Bvc2l0aW9uXTsKKyAgICAgICAgICAgIG1fZm9ybWF0
c1twb3NpdGlvbl0gPSBtX2Zvcm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdOworICAgICAgICAg
ICAgbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXSA9IDA7CisgICAgICAgICAgICBtX2Zv
cm1hdHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CisgICAgICAg
ICAgICBTVEdNRURJVU0qIG1lZGl1bSA9IG1fbWVkaXVtW3Bvc2l0aW9uXTsKKyAgICAgICAgICAg
IG1fbWVkaXVtW3Bvc2l0aW9uXSA9IG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdOworICAg
ICAgICAgICAgbV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV0gPSAwOworICAgICAgICAgICAg
bV9tZWRpdW0ucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bShtZWRp
dW0pOworICAgICAgICAgICAgZGVsZXRlIG1lZGl1bTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIHBvc2l0aW9uKys7CisgICAgfQorfQpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJKHJldmlzaW9uIDApDQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaAkocmV2aXNpb24gMCkNCkBAIC0wLDAg
KzEsNzEgQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEUlREYXRhT2JqZWN0X2gKKyNkZWZpbmUgRFJU
RGF0YU9iamVjdF9oCisKKyNpbmNsdWRlIDxTaGxPYmouaD4KKyNpbmNsdWRlIDxvYmppZGwuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgpOwor
CitGT1JNQVRFVEMqIGNmRmlsZU5hbWVXRm9ybWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZVcmxXRm9y
bWF0KCk7CisKK2NsYXNzIERSVERhdGFPYmplY3QgOiBwdWJsaWMgSURhdGFPYmplY3QgeworcHVi
bGljOgorICAgIHZvaWQgQ29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0q
IHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYyk7CisKKyAgICAvL0lVbmtub3duCisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlk
LCB2b2lkKiogcHB2T2JqZWN0KTsgICAgICAgIAorICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgQWRkUmVmKHZvaWQpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZ
UEUgUmVsZWFzZSh2b2lkKTsKKworICAgIC8vSURhdGFPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRJbiwgU1RHTUVE
SVVNKiBwbWVkaXVtKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0
RGF0YUhlcmUoRk9STUFURVRDKiBwZm9ybWF0LCBTVEdNRURJVU0qIHBtZWRpdW0pOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUdldERhdGEoRk9STUFURVRDKiBw
Zm9ybWF0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0Q2Fub25p
Y2FsRm9ybWF0RXRjKEZPUk1BVEVUQyogcGZvcm1hdGVjdEluLEZPUk1BVEVUQyogcGZvcm1hdE91
dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldERhdGEoRk9STUFU
RVRDKiBwZm9ybWF0LCBTVEdNRURJVU0qcG1lZGl1bSwgQk9PTCByZWxlYXNlKTsKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRW51bUZvcm1hdEV0YyhEV09SRCBkd0RpcmVj
dGlvbiwgSUVudW1GT1JNQVRFVEMqKiBwcGVudW1Gb3JtYXRFdGMpOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEQWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNl
U2luayosIERXT1JEKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERV
bmFkdmlzZShEV09SRCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVu
dW1EQWR2aXNlKElFbnVtU1RBVERBVEEqKik7CisKKyAgICB2b2lkIGNsZWFyRGF0YShDTElQRk9S
TUFUKTsKKyAgICAKKyAgICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVJbnN0YW5jZShEUlREYXRhT2Jq
ZWN0KiopOworcHJpdmF0ZToKKyAgICBEUlREYXRhT2JqZWN0KCk7CisgICAgfkRSVERhdGFPYmpl
Y3QoKTsKKyAgICBsb25nIG1fcmVmOworICAgIFZlY3RvcjxGT1JNQVRFVEMqPiBtX2Zvcm1hdHM7
CisgICAgVmVjdG9yPFNUR01FRElVTSo+IG1fbWVkaXVtOworfTsKKworI2VuZGlmIC8vRFJURGF0
YU9iamVjdF9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJj
ZS5jcHAJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BT
b3VyY2UuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw4NiBAQA0KKy8qCisqIENvcHlyaWdo
dCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRSVERyb3BTb3VyY2UuaCIKKworRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJjZSgpCisg
ICAgOiBtX3JlZigxKQorICAgICwgbV9kcm9wcGVkKGZhbHNlKQoreworfQorCitEUlREcm9wU291
cmNlOjp+RFJURHJvcFNvdXJjZSgpCit7Cit9CisKK1NURE1FVEhPRElNUCBEUlREcm9wU291cmNl
OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAq
cHB2T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8
IElzRXF1YWxJSUQocmlpZCwgSUlEX0lEcm9wU291cmNlKSkgeworICAgICAgICAqcHB2T2JqZWN0
ID0gdGhpczsKKyAgICAgICAgQWRkUmVmKCk7CisKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAg
fQorCisgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcp
IERSVERyb3BTb3VyY2U6OkFkZFJlZih2b2lkKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZElu
Y3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlREcm9wU291cmNl
OjpSZWxlYXNlKHZvaWQpCit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVt
ZW50KCZtX3JlZik7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7Cisg
ICAgcmV0dXJuIHJlZkNvdW50OworfQorCitIUkVTVUxUIERSVERyb3BTb3VyY2U6OmNyZWF0ZUlu
c3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAg
ICByZXR1cm4gRV9JTlZBTElEQVJHOworICAgICpyZXN1bHQgPSBuZXcgRFJURHJvcFNvdXJjZTsK
KyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OlF1ZXJ5
Q29udGludWVEcmFnKEJPT0wgZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRlKQorewor
ICAgIGlmIChmRXNjYXBlUHJlc3NlZCB8fCAhKGdyZktleVN0YXRlICYgKE1LX0xCVVRUT04gfCBN
S19SQlVUVE9OKSkpIHsKKyAgICAgICAgbV9kcm9wcGVkID0gIWZFc2NhcGVQcmVzc2VkOworICAg
ICAgICByZXR1cm4gZkVzY2FwZVByZXNzZWQgPyBEUkFHRFJPUF9TX0NBTkNFTCA6IERSQUdEUk9Q
X1NfRFJPUDsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERS
VERyb3BTb3VyY2U6OkdpdmVGZWVkYmFjayhEV09SRCBkd0VmZmVjdCkKK3sKKyAgICByZXR1cm4g
RFJBR0RST1BfU19VU0VERUZBVUxUQ1VSU09SUzsKK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EUlREcm9wU291cmNlLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRFJURHJvcFNvdXJjZS5oCShyZXZpc2lvbiAwKQ0KKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDQ5IEBA
DQorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisqLworCisjaWZuZGVmIERS
VERyb3BTb3VyY2VfaAorI2RlZmluZSBEUlREcm9wU291cmNlX2gKKworI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKyNpbmNsdWRlIDxTaGxPYmouaD4KKworY2xhc3MgRFJURHJvcFNvdXJjZSA6IHB1Ymxp
YyBJRHJvcFNvdXJjZQoreworcHVibGljOgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7ICAg
ICAgICAKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZih2b2lkKTsK
KyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5Q29udGludWVEcmFnKEJPT0wg
ZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRlKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgR2l2ZUZlZWRiYWNrKERXT1JEIGR3RWZmZWN0KTsKKworICAgIHN0
YXRpYyBIUkVTVUxUIGNyZWF0ZUluc3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0KTsKK3ByaXZh
dGU6CisgICAgRFJURHJvcFNvdXJjZSgpOworICAgIH5EUlREcm9wU291cmNlKCk7CisgICAgbG9u
ZyBtX3JlZjsKKyAgICBib29sIG1fZHJvcHBlZDsKK307CisKKyNlbmRpZiAvL0RSVERyb3BTb3Vy
Y2VfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJv
ag0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJl
ZS52Y3Byb2oJKHJldmlzaW9uIDExODA5NikNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RHVtcFJlbmRlclRyZWUudmNwcm9qCSh3b3JraW5nIGNvcHkpDQpAQCAtNDAyLDYgKzQwMiwyMiBA
QA0KIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlRE
YXRhT2JqZWN0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxEUlREYXRhT2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRFJURHJvcFNvdXJjZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURHJvcFNvdXJjZS5oIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuXEV2ZW50U2VuZGVyLmNwcCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRT
ZW5kZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50
U2VuZGVyLmNwcAkocmV2aXNpb24gMTE4MDk2KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9FdmVudFNlbmRlci5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xLDUgKzEsNiBAQA0KIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwxMSArMzIsMTQgQEANCiAKICNp
bmNsdWRlICJEcmFnZ2luZ0luZm8uaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2lu
Y2x1ZGUgIkRSVERhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJEUlREcm9wU291cmNlLmgiCiAKICNp
bmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KICNpbmNsdWRlIDx3
aW5kb3dzLmg+CkBAIC02MzAsNiArNjM0LDc4IEBADQogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgYmVnaW5EcmFnV2l0aEZp
bGVzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworCisgICAgSlNPYmplY3RSZWYgZmlsZXNBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250
ZXh0LCBhcmd1bWVudHNbMF0sIDApOworCisgICAgaWYgKCFmaWxlc0FycmF5KQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1N0cmluZ1JlZiBs
ZW5ndGhQcm9wZXJ0eSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKTsK
KyAgICBWZWN0b3I8VUNoYXI+IGZpbGVzOworICAgIGludCBmaWxlc0NvdW50ID0gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXNBcnJheSwg
bGVuZ3RoUHJvcGVydHksIDApLCAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzQ291
bnQ7ICsraSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgZmlsZXNBcnJheSwgaSwgMCk7CisgICAgICAgIEpTU3RyaW5nUmVm
IGZpbGUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKTsKKyAgICAgICAg
ZmlsZXMuYXBwZW5kKEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihmaWxlKSwgSlNTdHJpbmdHZXRM
ZW5ndGgoZmlsZSkpOworICAgICAgICBmaWxlcy5hcHBlbmQoMCk7CisgICAgICAgIEpTU3RyaW5n
UmVsZWFzZShmaWxlKTsKKyAgICB9CisKKyAgICBpZiAoZmlsZXMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICAvLyBXZSBzaG91
bGQgYXBwZW5kICIwIiBpbiB0aGUgZW5kIG9mIHxmaWxlc3wgc28gdGhhdCB8RHJhZ1F1ZXJ5Rmls
ZVd8IHJldHJpZXZlZCB0aGUgbnVtYmVyIG9mIGZpbGVzIGNvcnJlY3RseSBmcm9tIE9sZSBDbGlw
Ym9hcmQuCisgICAgZmlsZXMuYXBwZW5kKDApOworCisgICAgU1RHTUVESVVNIG1lZGl1bSA9IHsw
fTsKKyAgICBtZWRpdW0udHltZWQgPSBUWU1FRF9IR0xPQkFMOworICAgIFNJWkVfVCBkcm9wRmls
ZXNTaXplID0gc2l6ZW9mKERST1BGSUxFUykgKyAoc2l6ZW9mKFdDSEFSKSAqIGZpbGVzLnNpemUo
KSk7CisgICAgbWVkaXVtLmhHbG9iYWwgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFIHwgR01F
TV9EREVTSEFSRSwgZHJvcEZpbGVzU2l6ZSk7CisgICAgRFJPUEZJTEVTKiBkcm9wRmlsZXMgPSBy
ZWludGVycHJldF9jYXN0PERST1BGSUxFUyAqPihHbG9iYWxMb2NrKG1lZGl1bS5oR2xvYmFsKSk7
CisgICAgbWVtc2V0KGRyb3BGaWxlcywgMCwgc2l6ZW9mKERST1BGSUxFUykpOworICAgIGRyb3BG
aWxlcy0+cEZpbGVzID0gc2l6ZW9mKERST1BGSUxFUyk7CisgICAgZHJvcEZpbGVzLT5mV2lkZSA9
IFRSVUU7CisKKyAgICBVQ2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZWlu
dGVycHJldF9jYXN0PEJZVEUqPihkcm9wRmlsZXMpICsgc2l6ZW9mKERST1BGSUxFUykpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRhdGFb
aV0gPSBmaWxlc1tpXTsKKworICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2JhbCk7IAorCisg
ICAgaWYgKGRyYWdnaW5nSW5mbykgeworICAgICAgICBkZWxldGUgZHJhZ2dpbmdJbmZvOworICAg
ICAgICBkcmFnZ2luZ0luZm8gPSAwOworICAgIH0KKworICAgIENPTVB0cjxEUlREYXRhT2JqZWN0
PiBkYXRhT2JlamVjdDsKKyAgICBDT01QdHI8SURyb3BTb3VyY2U+IHNvdXJjZTsKKyAgICBpZiAo
RkFJTEVEKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKCZkYXRhT2JlamVjdCkpKQorICAg
ICAgICBkYXRhT2JlamVjdCA9IDA7CisKKyAgICBpZiAoRkFJTEVEKERSVERyb3BTb3VyY2U6OmNy
ZWF0ZUluc3RhbmNlKCZzb3VyY2UpKSkKKyAgICAgICAgc291cmNlID0gMDsKKworICAgIGlmIChk
YXRhT2JlamVjdCAmJiBzb3VyY2UpIHsKKyAgICAgICAgZHJhZ2dpbmdJbmZvID0gbmV3IERyYWdn
aW5nSW5mbyhkYXRhT2JlamVjdC5nZXQoKSwgc291cmNlLmdldCgpKTsKKyAgICAgICAgZHJhZ2dp
bmdJbmZvLT5zZXRQZXJmb3JtZWREcm9wRWZmZWN0KERST1BFRkZFQ1RfQ09QWSk7CisgICAgfQor
CisgICAgaWYgKGRyYWdnaW5nSW5mbykgeworICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmpl
Y3QoKS0+U2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0sIEZBTFNFKTsKKyAgICAgICAg
ZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCktPlNldERhdGEoY2ZGaWxlTmFtZVdGb3JtYXQoKSwg
Jm1lZGl1bSwgRkFMU0UpOworICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0
RGF0YShjZlVybFdGb3JtYXQoKSwgJm1lZGl1bSwgRkFMU0UpOworICAgICAgICBPbGVTZXRDbGlw
Ym9hcmQoZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCkpOworICAgICAgICBkb3duID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBKU1N0cmluZ1JlbGVhc2UobGVuZ3RoUHJvcGVydHkpOworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CiAgICAgeyAiY29udGV4dENsaWNrIiwgY29udGV4
dENsaWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJtb3VzZURvd24iLCBtb3VzZURvd25DYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LApAQCAtNjQyLDYgKzcxOCw3IEBADQogICAgIHsgInRleHRab29tT3V0Iiwg
dGV4dFpvb21PdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpvb21QYWdlSW4iLCB6b29tUGFn
ZUluQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJ6b29tUGFnZU91dCIsIHpvb21QYWdlT3V0Q2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICB7ICJiZWdpbkRyYWdXaXRoRmlsZXMiLCBiZWdpbkRyYWdXaXRo
RmlsZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgMCwgMCwgMCB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143988</attachid>
            <date>2012-05-25 00:05:06 -0700</date>
            <delta_ts>2012-05-25 00:23:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles3.patch</filename>
            <type>text/plain</type>
            <size>29517</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4NDg0KQ0KKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxNSBAQA0KKzIwMTItMDUtMjQgIFh1
ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIGV2ZW50U2Vu
ZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gd2luZG93cywg
d2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9wIHJlbGF0ZWQgdGVzdCBjYXNlLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlzIGNoYW5nZSB3
YXMgcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcywgdXBkYXRl
IHdpbi9za2lwcGVkIGZpbGUgdG8gcmVtb3ZlIGRyYWctZHJvcCByZWxlYXRlZCB0ZXN0IGNhc2Ug
d2lsbCB2YWxpYXRlIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6Om51bWJlck9mRmlsZXMpOgorCiAyMDEy
LTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBmZWF0dXJlIGRlZmluZXMgZm9yIHdlYi1mYWNpbmcgcGFydHMgb2YgQ1NTIFJlZ2lvbnMg
YW5kIEV4Y2x1c2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0
YVdpbi5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJh
Z0RhdGFXaW4uY3BwCShyZXZpc2lvbiAxMTgwOTYpDQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdEYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTEsNyArMTEyLDI0IEBA
DQogCiB1bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIDA7CisgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgU1RHTUVESVVNIG1lZGl1bTsKKyAgICBpZiAoRkFJTEVEKG1fcGxhdGZvcm1EcmFnRGF0
YS0+R2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0pKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBIRFJPUCBoZHJvcCA9IHN0YXRpY19jYXN0PEhEUk9QPihHbG9iYWxMb2NrKG1lZGl1
bS5oR2xvYmFsKSk7CisKKyAgICBpZiAoIWhkcm9wKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHVuc2lnbmVkIG51bUZpbGVzID0gRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIDB4RkZGRkZGRkYsIDAs
IDApOworCisgICAgRHJhZ0ZpbmlzaChoZHJvcCk7CisgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5o
R2xvYmFsKTsKKworICAgIHJldHVybiBudW1GaWxlczsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNG
aWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MTYzKQ0K
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSw1NiBAQA0KKzIw
MTItMDUtMjMgIFh1ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAg
ICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQg
aW4gd2luZG93cywgd2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9wIHJlbGF0ZWQgdGVzdCBjYXNl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChjZkhEcm9w
Rm9ybWF0KToKKyAgICAgICAgKGNmRmlsZU5hbWVXRm9ybWF0KToKKyAgICAgICAgKFdDRW51bUZv
cm1hdEV0Yyk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyk6Cisg
ICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKFdDRW51
bUZvcm1hdEV0Yzo6QWRkUmVmKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6UmVsZWFzZSk6
CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6Ok5leHQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0
RXRjOjpTa2lwKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6UmVzZXQpOgorICAgICAgICAo
V0NFbnVtRm9ybWF0RXRjOjpDbG9uZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpjcmVhdGVJ
bnN0YW5jZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpEUlREYXRhT2JqZWN0KToKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6On5EUlREYXRhT2JqZWN0KToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkFkZFJlZik6Cisg
ICAgICAgIChEUlREYXRhT2JqZWN0OjpSZWxlYXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6
OkdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0RGF0YUhlcmUpOgorICAgICAg
ICAoRFJURGF0YU9iamVjdDo6UXVlcnlHZXREYXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6
OkdldENhbm9uaWNhbEZvcm1hdEV0Yyk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpTZXREYXRh
KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkNvcHlNZWRpdW0pOgorICAgICAgICAoRFJURGF0
YU9iamVjdDo6RW51bUZvcm1hdEV0Yyk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpEQWR2aXNl
KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRVbmFkdmlzZSk6CisgICAgICAgIChEUlREYXRh
T2JqZWN0OjpFbnVtREFkdmlzZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpjbGVhckRhdGEp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0Lmg6IEFkZGVkLgor
ICAgICAgICAoRFJURGF0YU9iamVjdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RS
VERyb3BTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERSVERyb3BTb3VyY2U6OkRSVERyb3BT
b3VyY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6fkRSVERyb3BTb3VyY2UpOgorICAgICAg
ICAoRFJURHJvcFNvdXJjZTo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJj
ZTo6QWRkUmVmKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OlJlbGVhc2UpOgorICAgICAgICAo
RFJURHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6
UXVlcnlDb250aW51ZURyYWcpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNr
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oOiBBZGRlZC4K
KyAgICAgICAgKERSVERyb3BTb3VyY2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9E
dW1wUmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50
U2VuZGVyLmNwcDoKKyAgICAgICAgKGJlZ2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrKToKKwogMjAx
Mi0wNC0xOCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAK
ICAgICAgICAgW1F0XSBNYWtlIHRoZSB3ZWIgdmlldydzIHVybCBwcm9wZXJ0eSBmb2xsb3cgdGhl
IGFjdGl2ZSB1cmwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0
YU9iamVjdC5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDM4NSBAQA0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRFJURGF0YU9iamVjdC5oIgorCitGT1JNQVRF
VEMqIGNmSERyb3BGb3JtYXQoKQoreworICAgIHN0YXRpYyBGT1JNQVRFVEMgdXJsRm9ybWF0ID0g
e0NGX0hEUk9QLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURfSEdMT0JBTH07CisgICAg
cmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKQor
eworICAgIHN0YXRpYyBVSU5UIGNmID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoTCJGaWxlTmFt
ZVciKTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZvcm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1Rf
Q09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAgIHJldHVybiAmdXJsRm9ybWF0OworfQor
CitGT1JNQVRFVEMqIGNmVXJsV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQgY2YgPSBSZWdp
c3RlckNsaXBib2FyZEZvcm1hdChMIlVuaWZvcm1SZXNvdXJjZUxvY2F0b3JXIik7CisgICAgc3Rh
dGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Y2YsIDAsIERWQVNQRUNUX0NPTlRFTlQsIC0xLCBU
WU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsKK30KKworY2xhc3MgV0NFbnVt
Rm9ybWF0RXRjIDogcHVibGljIElFbnVtRk9STUFURVRDIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQz4mIGZvcm1hdHMpOworICAg
IGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1h
dHMpOworCisgICAgLy8gSVVua25vd24gbWVtYmVycworICAgIFNURE1FVEhPRChRdWVyeUludGVy
ZmFjZSkoUkVGSUlELCB2b2lkKiopOworICAgIFNURE1FVEhPRF8oVUxPTkcsIEFkZFJlZikodm9p
ZCk7CisgICAgU1RETUVUSE9EXyhVTE9ORywgUmVsZWFzZSkodm9pZCk7CisKKyAgICAvLyBJRW51
bUZPUk1BVEVUQyBtZW1iZXJzCisgICAgU1RETUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVU
QywgVUxPTkcqKTsKKyAgICBTVERNRVRIT0QoU2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChS
ZXNldCkodm9pZCk7CisgICAgU1RETUVUSE9EKENsb25lKShJRW51bUZPUk1BVEVUQyoqKTsKKwor
cHJpdmF0ZToKKyAgICBsb25nIG1fcmVmOworICAgIFZlY3RvcjxGT1JNQVRFVEM+IG1fZm9ybWF0
czsKKyAgICBzaXplX3QgbV9jdXJyZW50OworfTsKKworV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1G
b3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQz4mIGZvcm1hdHMpCisgICAgOiBtX3JlZigx
KQorICAgICwgbV9jdXJyZW50KDApCisgICAgLCBtX2Zvcm1hdHMoZm9ybWF0cykKK3sKK30KKwor
V0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQyo+
JiBmb3JtYXRzKQorICAgIDogbV9yZWYoMSkKKyAgICAsIG1fY3VycmVudCgwKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9mb3Jt
YXRzLmFwcGVuZCgqZm9ybWF0c1tpXSk7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRF
dGM6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQoreworICAg
ICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9JVW5rbm93bikg
fHwgSXNFcXVhbElJRChyaWlkLCBJSURfSUVudW1GT1JNQVRFVEMpKSB7CisgICAgICAgICpwcHZP
YmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7Cisg
ICAgfQorCisgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxP
TkcpIFdDRW51bUZvcm1hdEV0Yzo6QWRkUmVmKHZvaWQpCit7CisgICAgcmV0dXJuIEludGVybG9j
a2VkSW5jcmVtZW50KCZtX3JlZik7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIFdDRW51bUZv
cm1hdEV0Yzo6UmVsZWFzZSh2b2lkKQoreworICAgIGxvbmcgcmVmQ291bnQgPSBJbnRlcmxvY2tl
ZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQpCisgICAgICAgIGRlbGV0ZSB0
aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1h
dEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZPUk1BVEVUQyBscEZvcm1hdEV0YywgVUxPTkcqIHBj
ZWx0RmV0Y2hlZCkKK3sKKyAgICBpZiAocGNlbHRGZXRjaGVkKQorICAgICAgICAqcGNlbHRGZXRj
aGVkID0gMDsKKworICAgIFVMT05HIGNSZXR1cm4gPSBjZWx0OworCisgICAgaWYgKGNlbHQgPD0g
MCB8fCAhbHBGb3JtYXRFdGMgfHwgbV9jdXJyZW50ID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFwY2VsdEZldGNoZWQgJiYgY2VsdCAhPSAx
KSAvLyBwY2VsdEZldGNoZWQgY2FuIGJlIDAgb25seSBmb3IgMSBpdGVtIHJlcXVlc3QKKyAgICAg
ICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICB3aGlsZSAobV9jdXJyZW50IDwgbV9mb3JtYXRzLnNp
emUoKSAmJiBjUmV0dXJuID4gMCkgeworICAgICAgICAqbHBGb3JtYXRFdGMrKyA9IG1fZm9ybWF0
c1ttX2N1cnJlbnQrK107CisgICAgICAgIC0tY1JldHVybjsKKyAgICB9CisgICAgaWYgKHBjZWx0
RmV0Y2hlZCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQgLSBjUmV0dXJuOworCisgICAg
cmV0dXJuICFjUmV0dXJuID8gU19PSyA6IFNfRkFMU0U7Cit9CisKK1NURE1FVEhPRElNUCBXQ0Vu
dW1Gb3JtYXRFdGM6OlNraXAoVUxPTkcgY2VsdCkKK3sKKyAgICBpZiAoKG1fY3VycmVudCArIGNl
bHQpID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworICAgIG1f
Y3VycmVudCArPSBjZWx0OworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAgV0NF
bnVtRm9ybWF0RXRjOjpSZXNldCh2b2lkKQoreworICAgIG1fY3VycmVudCA9IDA7CisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OkNsb25lKElFbnVt
Rk9STUFURVRDKiogcHBDbG9uZUVudW1Gb3JtYXRFdGMpCit7CisgICAgaWYgKCFwcENsb25lRW51
bUZvcm1hdEV0YykKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIFdDRW51bUZvcm1h
dEV0YyogbmV3RW51bSA9IG5ldyBXQ0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICBpZiAo
IW5ld0VudW0pCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgbmV3RW51bS0+
QWRkUmVmKCk7CisgICAgbmV3RW51bS0+bV9jdXJyZW50ID0gbV9jdXJyZW50OworICAgICpwcENs
b25lRW51bUZvcm1hdEV0YyA9IG5ld0VudW07CisgICAgcmV0dXJuIFNfT0s7Cit9CisKKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCitIUkVTVUxUIERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKERSVERh
dGFPYmplY3QqKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisgICAgKnJlc3VsdCA9IG5ldyBEUlREYXRhT2JqZWN0KCk7CisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0RSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QoKQorICAgIDogbV9yZWYo
MSkKK3sKK30KKworRFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QoKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9tZWRpdW0uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVsZWFz
ZVN0Z01lZGl1bShtX21lZGl1bVtpXSk7CisgICAgICAgIGRlbGV0ZSBtX21lZGl1bVtpXTsKKyAg
ICB9CisgICAgV1RGOjpkZWxldGVBbGxWYWx1ZXMobV9mb3JtYXRzKTsKK30KKworU1RETUVUSE9E
SU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2
T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQs
IElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSURhdGFPYmplY3QpKQorICAg
ICAgICAqcHB2T2JqZWN0ID0gdGhpczsKKworICAgIGlmICgqcHB2T2JqZWN0KSB7CisgICAgICAg
IEFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisgICAgcmV0dXJuIEVfTk9J
TlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERhdGFPYmplY3Q6OkFkZFJl
Zih2b2lkKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQor
CitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlREYXRhT2JqZWN0OjpSZWxlYXNlKHZvaWQpCit7Cisg
ICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7CisgICAgaWYg
KCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNvdW50Owor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMqIHBmb3Jt
YXRldGNJbiwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZiAoIXBmb3JtYXRldGNJbiB8
fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBwbWVkaXVtLT5oR2xv
YmFsID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1hdHNbaV0t
PmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4tPmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+ZHdBc3Bl
Y3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KSB7
CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zvcm1hdHNb
aV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0
RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVfTk9USU1Q
TDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShGT1JNQVRF
VEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmICghcGZvcm1hdGV0YykKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIGlmICghKERWQVNQRUNUX0NPTlRFTlQgJiBwZm9ybWF0ZXRjLT5k
d0FzcGVjdCkpCisgICAgICAgIHJldHVybiAoRFZfRV9EVkFTUEVDVCk7CisKKyAgICBIUkVTVUxU
IGhSZXN1bHQgPSBEVl9FX1RZTUVEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3Jt
YXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAmIG1fZm9y
bWF0c1tpXS0+dHltZWQpIHsKKyAgICAgICAgICAgIGlmIChwZm9ybWF0ZXRjLT5jZkZvcm1hdCA9
PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KQorICAgICAgICAgICAgICAgIGhSZXN1bHQgPSBTX09L
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhSZXN1bHQgPSBEVl9FX0NMSVBG
T1JNQVQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaFJlc3VsdCA9IERWX0VfVFlNRUQ7
CisgICAgfQorICAgIHJldHVybiBoUmVzdWx0OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9i
amVjdDo6R2V0Q2Fub25pY2FsRm9ybWF0RXRjKEZPUk1BVEVUQyosIEZPUk1BVEVUQyopCit7IAor
ICAgIHJldHVybiBEQVRBX1NfU0FNRUZPUk1BVEVUQzsKK30KKworU1RETUVUSE9ESU1QIERSVERh
dGFPYmplY3Q6OlNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0ZXRjLCBTVEdNRURJVU0qIHBtZWRp
dW0sIEJPT0wgZlJlbGVhc2UpCit7IAorICAgIGlmICghcGZvcm1hdGV0YyB8fCAhcG1lZGl1bSkK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEZPUk1BVEVUQyogZm9ybWF0ZXRjID0g
bmV3IEZPUk1BVEVUQzsKKyAgICBpZiAoIWZvcm1hdGV0YykKKyAgICAgICAgcmV0dXJuIEVfT1VU
T0ZNRU1PUlk7CisKKyAgICBTVEdNRURJVU0qIHBTdGdNZWQgPSBuZXcgU1RHTUVESVVNOworCisg
ICAgaWYgKCFwU3RnTWVkKSB7CisgICAgICAgIGRlbGV0ZSBmb3JtYXRldGM7CisgICAgICAgIHJl
dHVybiBFX09VVE9GTUVNT1JZOworICAgIH0KKworICAgIFplcm9NZW1vcnkoZm9ybWF0ZXRjLCBz
aXplb2YoRk9STUFURVRDKSk7CisgICAgWmVyb01lbW9yeShwU3RnTWVkLCBzaXplb2YoU1RHTUVE
SVVNKSk7CisKKyAgICAqZm9ybWF0ZXRjID0gKnBmb3JtYXRldGM7CisgICAgbV9mb3JtYXRzLmFw
cGVuZChmb3JtYXRldGMpOworCisgICAgaWYgKGZSZWxlYXNlKQorICAgICAgICAqcFN0Z01lZCA9
ICpwbWVkaXVtOworICAgIGVsc2UKKyAgICAgICAgQ29weU1lZGl1bShwU3RnTWVkLCBwbWVkaXVt
LCBwZm9ybWF0ZXRjKTsKKyAgICBtX21lZGl1bS5hcHBlbmQocFN0Z01lZCk7CisKKyAgICByZXR1
cm4gU19PSzsKK30KKwordm9pZCBEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElVTSog
cE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBwRm10U3JjKQoreworICAg
IHN3aXRjaCAocE1lZFNyYy0+dHltZWQpIHsKKyNpZiAhT1MoV0lOQ0UpCisgICAgY2FzZSBUWU1F
RF9IR0xPQkFMOgorICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IHN0YXRpY19jYXN0PEhHTE9C
QUw+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEdsb2JhbCwgcEZtdFNyYy0+Y2ZGb3JtYXQs
IDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9HREk6CisgICAgICAgIHBNZWRE
ZXN0LT5oQml0bWFwID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oT2xlRHVwbGljYXRlRGF0YShwTWVk
U3JjLT5oQml0bWFwLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRZTUVEX01GUElDVDoKKyAgICAgICAgcE1lZERlc3QtPmhNZXRhRmlsZVBpY3QgPSBz
dGF0aWNfY2FzdDxITUVUQUZJTEVQSUNUPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhNZXRh
RmlsZVBpY3QsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVFlNRURfRU5ITUY6CisgICAgICAgIHBNZWREZXN0LT5oRW5oTWV0YUZpbGUgPSBzdGF0aWNf
Y2FzdDxIRU5ITUVUQUZJTEU+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEVuaE1ldGFGaWxl
LCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVE
X0ZJTEU6CisgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFtZSA9IHN0YXRpY19jYXN0PExQT0xF
U1RSPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pGaWxlTmFtZSwgcEZtdFNyYy0+Y2ZG
b3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIFRZTUVEX0lTVFJF
QU06CisgICAgICAgIHBNZWREZXN0LT5wc3RtID0gcE1lZFNyYy0+cHN0bTsKKyAgICAgICAgcE1l
ZFNyYy0+cHN0bS0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfSVNU
T1JBR0U6CisgICAgICAgIHBNZWREZXN0LT5wc3RnID0gcE1lZFNyYy0+cHN0ZzsKKyAgICAgICAg
cE1lZFNyYy0+cHN0Zy0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwTWVkRGVzdC0+dHltZWQgPSBwTWVkU3JjLT50eW1l
ZDsKKyAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSAwOworICAgIGlmIChwTWVkU3JjLT5w
VW5rRm9yUmVsZWFzZSkgeworICAgICAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSBwTWVk
U3JjLT5wVW5rRm9yUmVsZWFzZTsKKyAgICAgICAgcE1lZFNyYy0+cFVua0ZvclJlbGVhc2UtPkFk
ZFJlZigpOworICAgIH0KK30KK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpFbnVtRm9ybWF0
RXRjKERXT1JEIGR3RGlyZWN0aW9uLCBJRW51bUZPUk1BVEVUQyoqIHBwZW51bUZvcm1hdEV0YykK
K3sgCisgICAgaWYgKCFwcGVudW1Gb3JtYXRFdGMpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CisKKyAgICAqcHBlbnVtRm9ybWF0RXRjID0gMDsKKyAgICBzd2l0Y2ggKGR3RGlyZWN0aW9uKSB7
CisgICAgY2FzZSBEQVRBRElSX0dFVDoKKyAgICAgICAgKnBwZW51bUZvcm1hdEV0YyA9IG5ldyBX
Q0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICAgICAgaWYgKCEoKnBwZW51bUZvcm1hdEV0
YykpCisgICAgICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIERBVEFESVJfU0VUOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFX05P
VElNUEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitT
VERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6REFkdmlzZShGT1JNQVRFVEMqLCBEV09SRCwgSUFk
dmlzZVNpbmsqLERXT1JEKikKK3sgCisgICAgcmV0dXJuIE9MRV9FX0FEVklTRU5PVFNVUFBPUlRF
RDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkRVbmFkdmlzZShEV09SRCkKK3sK
KyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERS
VERhdGFPYmplY3Q6OkVudW1EQWR2aXNlKElFbnVtU1RBVERBVEEqKikKK3sKKyAgICByZXR1cm4g
T0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEOworfQorCit2b2lkIERSVERhdGFPYmplY3Q6OmNsZWFy
RGF0YShDTElQRk9STUFUIGZvcm1hdCkKK3sKKyAgICBzaXplX3QgcG9zaXRpb24gPSAwOworICAg
IHdoaWxlIChwb3NpdGlvbiA8IG1fZm9ybWF0cy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fZm9y
bWF0c1twb3NpdGlvbl0tPmNmRm9ybWF0ID09IGZvcm1hdCkgeworICAgICAgICAgICAgRk9STUFU
RVRDKiBjdXJyZW50ID0gbV9mb3JtYXRzW3Bvc2l0aW9uXTsKKyAgICAgICAgICAgIG1fZm9ybWF0
c1twb3NpdGlvbl0gPSBtX2Zvcm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdOworICAgICAgICAg
ICAgbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXSA9IDA7CisgICAgICAgICAgICBtX2Zv
cm1hdHMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CisgICAgICAg
ICAgICBTVEdNRURJVU0qIG1lZGl1bSA9IG1fbWVkaXVtW3Bvc2l0aW9uXTsKKyAgICAgICAgICAg
IG1fbWVkaXVtW3Bvc2l0aW9uXSA9IG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdOworICAg
ICAgICAgICAgbV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV0gPSAwOworICAgICAgICAgICAg
bV9tZWRpdW0ucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bShtZWRp
dW0pOworICAgICAgICAgICAgZGVsZXRlIG1lZGl1bTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIHBvc2l0aW9uKys7CisgICAgfQorfQpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJKHJldmlzaW9uIDApDQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaAkocmV2aXNpb24gMCkNCkBAIC0wLDAg
KzEsNzEgQEANCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEUlREYXRhT2JqZWN0X2gKKyNkZWZpbmUgRFJU
RGF0YU9iamVjdF9oCisKKyNpbmNsdWRlIDxTaGxPYmouaD4KKyNpbmNsdWRlIDxvYmppZGwuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgpOwor
CitGT1JNQVRFVEMqIGNmRmlsZU5hbWVXRm9ybWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZVcmxXRm9y
bWF0KCk7CisKK2NsYXNzIERSVERhdGFPYmplY3QgOiBwdWJsaWMgSURhdGFPYmplY3QgeworcHVi
bGljOgorICAgIHZvaWQgQ29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0q
IHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYyk7CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlp
ZCwgdm9pZCoqIHBwdk9iamVjdCk7ICAgICAgICAKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhP
RENBTExUWVBFIEFkZFJlZih2b2lkKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExU
WVBFIFJlbGVhc2Uodm9pZCk7CisKKyAgICAvLyBJRGF0YU9iamVjdAorICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdEluLCBTVEdN
RURJVU0qIHBtZWRpdW0pOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBH
ZXREYXRhSGVyZShGT1JNQVRFVEMqIHBmb3JtYXQsIFNUR01FRElVTSogcG1lZGl1bSk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5R2V0RGF0YShGT1JNQVRFVEMq
IHBmb3JtYXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDYW5v
bmljYWxGb3JtYXRFdGMoRk9STUFURVRDKiBwZm9ybWF0ZWN0SW4sIEZPUk1BVEVUQyogcGZvcm1h
dE91dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldERhdGEoRk9S
TUFURVRDKiBwZm9ybWF0LCBTVEdNRURJVU0qcG1lZGl1bSwgQk9PTCByZWxlYXNlKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRW51bUZvcm1hdEV0YyhEV09SRCBkd0Rp
cmVjdGlvbiwgSUVudW1GT1JNQVRFVEMqKiBwcGVudW1Gb3JtYXRFdGMpOworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEQWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2
aXNlU2luayosIERXT1JEKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERVbmFkdmlzZShEV09SRCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEVudW1EQWR2aXNlKElFbnVtU1RBVERBVEEqKik7CisKKyAgICB2b2lkIGNsZWFyRGF0YShDTElQ
Rk9STUFUKTsKKyAgICAKKyAgICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVJbnN0YW5jZShEUlREYXRh
T2JqZWN0KiopOworcHJpdmF0ZToKKyAgICBEUlREYXRhT2JqZWN0KCk7CisgICAgfkRSVERhdGFP
YmplY3QoKTsKKyAgICBsb25nIG1fcmVmOworICAgIFZlY3RvcjxGT1JNQVRFVEMqPiBtX2Zvcm1h
dHM7CisgICAgVmVjdG9yPFNUR01FRElVTSo+IG1fbWVkaXVtOworfTsKKworI2VuZGlmIC8vIERS
VERhdGFPYmplY3RfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3Vy
Y2UuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BT
b3VyY2UuY3BwCShyZXZpc2lvbiAwKQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlRE
cm9wU291cmNlLmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsODYgQEANCisvKgorKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEUlREcm9wU291cmNlLmgiCisKK0RSVERyb3BTb3VyY2U6OkRSVERyb3BTb3VyY2Uo
KQorICAgIDogbV9yZWYoMSkKKyAgICAsIG1fZHJvcHBlZChmYWxzZSkKK3sKK30KKworRFJURHJv
cFNvdXJjZTo6fkRSVERyb3BTb3VyY2UoKQoreworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNv
dXJjZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7Cisg
ICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3du
KSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRHJvcFNvdXJjZSkpIHsKKyAgICAgICAgKnBwdk9i
amVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigpOworCisgICAgICAgIHJldHVybiBTX09LOwor
ICAgIH0KKworICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVM
T05HKSBEUlREcm9wU291cmNlOjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2Nr
ZWRJbmNyZW1lbnQoJm1fcmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURHJvcFNv
dXJjZTo6UmVsZWFzZSh2b2lkKQoreworICAgIGxvbmcgcmVmQ291bnQgPSBJbnRlcmxvY2tlZERl
Y3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQpCisgICAgICAgIGRlbGV0ZSB0aGlz
OworICAgIHJldHVybiByZWZDb3VudDsKK30KKworSFJFU1VMVCBEUlREcm9wU291cmNlOjpjcmVh
dGVJbnN0YW5jZShJRHJvcFNvdXJjZSoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERyb3BTb3Vy
Y2U7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBEUlREcm9wU291cmNlOjpR
dWVyeUNvbnRpbnVlRHJhZyhCT09MIGZFc2NhcGVQcmVzc2VkLCBEV09SRCBncmZLZXlTdGF0ZSkK
K3sKKyAgICBpZiAoZkVzY2FwZVByZXNzZWQgfHwgIShncmZLZXlTdGF0ZSAmIChNS19MQlVUVE9O
IHwgTUtfUkJVVFRPTikpKSB7CisgICAgICAgIG1fZHJvcHBlZCA9ICFmRXNjYXBlUHJlc3NlZDsK
KyAgICAgICAgcmV0dXJuIGZFc2NhcGVQcmVzc2VkID8gRFJBR0RST1BfU19DQU5DRUwgOiBEUkFH
RFJPUF9TX0RST1A7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElN
UCBEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2soRFdPUkQgZHdFZmZlY3QpCit7CisgICAgcmV0
dXJuIERSQUdEUk9QX1NfVVNFREVGQVVMVENVUlNPUlM7Cit9CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw0
OCBAQA0KKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKworI2lmbmRl
ZiBEUlREcm9wU291cmNlX2gKKyNkZWZpbmUgRFJURHJvcFNvdXJjZV9oCisKKyNpbmNsdWRlIDxT
aGxPYmouaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2NsYXNzIERSVERyb3BTb3VyY2UgOiBw
dWJsaWMgSURyb3BTb3VyY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7
ICAgICAgICAKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZih2b2lk
KTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5Q29udGludWVEcmFnKEJP
T0wgZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRlKTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2l2ZUZlZWRiYWNrKERXT1JEIGR3RWZmZWN0KTsKKworICAg
IHN0YXRpYyBIUkVTVUxUIGNyZWF0ZUluc3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0KTsKK3By
aXZhdGU6CisgICAgRFJURHJvcFNvdXJjZSgpOworICAgIH5EUlREcm9wU291cmNlKCk7CisgICAg
bG9uZyBtX3JlZjsKKyAgICBib29sIG1fZHJvcHBlZDsKK307CisKKyNlbmRpZiAvLyBEUlREcm9w
U291cmNlX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52
Y3Byb2oNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRl
clRyZWUudmNwcm9qCShyZXZpc2lvbiAxMTgwOTYpDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagkod29ya2luZyBjb3B5KQ0KQEAgLTQwMiw2ICs0MDIs
MjIgQEANCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5c
RFJURGF0YU9iamVjdC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cRFJURGF0YU9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuXERSVERyb3BTb3VyY2UuY3BwIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERSVERyb3BTb3VyY2UuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxFdmVudFNlbmRlci5j
cHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0V2
ZW50U2VuZGVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9F
dmVudFNlbmRlci5jcHAJKHJldmlzaW9uIDExODA5NikNCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vRXZlbnRTZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTUgKzMxLDE4IEBADQog
I2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAKICNpbmNsdWRlICJEcmFnZ2luZ0luZm8uaCIKKyNp
bmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisjaW5jbHVkZSAiRFJURHJvcFNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CisjaW5jbHVkZSA8V2Vi
S2l0L1dlYktpdC5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KLSNpbmNs
dWRlIDxXZWJLaXQvV2ViS2l0Lmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjZGVmaW5lIFdNX0RSVF9TRU5EX1FVRVVFRF9FVkVOVCAo
V01fQVBQKzEpCiAKQEAgLTYzMCw2ICs2MzQsNzggQEANCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBiZWdpbkRyYWdXaXRo
RmlsZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBKU09iamVjdFJlZiBmaWxlc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgMCk7CisKKyAgICBpZiAoIWZpbGVzQXJyYXkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTU3RyaW5nUmVm
IGxlbmd0aFByb3BlcnR5ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIp
OworICAgIFZlY3RvcjxVQ2hhcj4gZmlsZXM7CisgICAgaW50IGZpbGVzQ291bnQgPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlc0FycmF5
LCBsZW5ndGhQcm9wZXJ0eSwgMCksIDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXND
b3VudDsgKytpKSB7CisgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBmaWxlc0FycmF5LCBpLCAwKTsKKyAgICAgICAgSlNTdHJpbmdS
ZWYgZmlsZSA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApOworICAgICAg
ICBmaWxlcy5hcHBlbmQoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKGZpbGUpLCBKU1N0cmluZ0dl
dExlbmd0aChmaWxlKSk7CisgICAgICAgIGZpbGVzLmFwcGVuZCgwKTsKKyAgICAgICAgSlNTdHJp
bmdSZWxlYXNlKGZpbGUpOworICAgIH0KKworICAgIGlmIChmaWxlcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIC8vIFdlIHNo
b3VsZCBhcHBlbmQgIjAiIGluIHRoZSBlbmQgb2YgfGZpbGVzfCBzbyB0aGF0IHxEcmFnUXVlcnlG
aWxlV3wgcmV0cmlldmVkIHRoZSBudW1iZXIgb2YgZmlsZXMgY29ycmVjdGx5IGZyb20gT2xlIENs
aXBib2FyZC4KKyAgICBmaWxlcy5hcHBlbmQoMCk7CisKKyAgICBTVEdNRURJVU0gbWVkaXVtID0g
ezB9OworICAgIG1lZGl1bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgU0laRV9UIGRyb3BG
aWxlc1NpemUgPSBzaXplb2YoRFJPUEZJTEVTKSArIChzaXplb2YoV0NIQVIpICogZmlsZXMuc2l6
ZSgpKTsKKyAgICBtZWRpdW0uaEdsb2JhbCA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUgfCBH
TUVNX0RERVNIQVJFLCBkcm9wRmlsZXNTaXplKTsKKyAgICBEUk9QRklMRVMqIGRyb3BGaWxlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RFJPUEZJTEVTICo+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwp
KTsKKyAgICBtZW1zZXQoZHJvcEZpbGVzLCAwLCBzaXplb2YoRFJPUEZJTEVTKSk7CisgICAgZHJv
cEZpbGVzLT5wRmlsZXMgPSBzaXplb2YoRFJPUEZJTEVTKTsKKyAgICBkcm9wRmlsZXMtPmZXaWRl
ID0gVFJVRTsKKworICAgIFVDaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHJl
aW50ZXJwcmV0X2Nhc3Q8QllURSo+KGRyb3BGaWxlcykgKyBzaXplb2YoRFJPUEZJTEVTKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgZGF0
YVtpXSA9IGZpbGVzW2ldOworCisgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5oR2xvYmFsKTsgCisK
KyAgICBpZiAoZHJhZ2dpbmdJbmZvKSB7CisgICAgICAgIGRlbGV0ZSBkcmFnZ2luZ0luZm87Cisg
ICAgICAgIGRyYWdnaW5nSW5mbyA9IDA7CisgICAgfQorCisgICAgQ09NUHRyPERSVERhdGFPYmpl
Y3Q+IGRhdGFPYmVqZWN0OworICAgIENPTVB0cjxJRHJvcFNvdXJjZT4gc291cmNlOworICAgIGlm
IChGQUlMRUQoRFJURGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UoJmRhdGFPYmVqZWN0KSkpCisg
ICAgICAgIGRhdGFPYmVqZWN0ID0gMDsKKworICAgIGlmIChGQUlMRUQoRFJURHJvcFNvdXJjZTo6
Y3JlYXRlSW5zdGFuY2UoJnNvdXJjZSkpKQorICAgICAgICBzb3VyY2UgPSAwOworCisgICAgaWYg
KGRhdGFPYmVqZWN0ICYmIHNvdXJjZSkgeworICAgICAgICBkcmFnZ2luZ0luZm8gPSBuZXcgRHJh
Z2dpbmdJbmZvKGRhdGFPYmVqZWN0LmdldCgpLCBzb3VyY2UuZ2V0KCkpOworICAgICAgICBkcmFn
Z2luZ0luZm8tPnNldFBlcmZvcm1lZERyb3BFZmZlY3QoRFJPUEVGRkVDVF9DT1BZKTsKKyAgICB9
CisKKyAgICBpZiAoZHJhZ2dpbmdJbmZvKSB7CisgICAgICAgIGRyYWdnaW5nSW5mby0+ZGF0YU9i
amVjdCgpLT5TZXREYXRhKGNmSERyb3BGb3JtYXQoKSwgJm1lZGl1bSwgRkFMU0UpOworICAgICAg
ICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZkZpbGVOYW1lV0Zvcm1hdCgp
LCAmbWVkaXVtLCBGQUxTRSk7CisgICAgICAgIGRyYWdnaW5nSW5mby0+ZGF0YU9iamVjdCgpLT5T
ZXREYXRhKGNmVXJsV0Zvcm1hdCgpLCAmbWVkaXVtLCBGQUxTRSk7CisgICAgICAgIE9sZVNldENs
aXBib2FyZChkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKSk7CisgICAgICAgIGRvd24gPSB0cnVl
OworICAgIH0KKworICAgIEpTU3RyaW5nUmVsZWFzZShsZW5ndGhQcm9wZXJ0eSk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBzdGF0aWMgSlNTdGF0aWNG
dW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICB7ICJjb250ZXh0Q2xpY2siLCBjb250
ZXh0Q2xpY2tDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgIm1vdXNlRG93biIsIG1vdXNlRG93bkNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCkBAIC02NDIsNiArNzE4LDcgQEANCiAgICAgeyAidGV4dFpvb21PdXQi
LCB0ZXh0Wm9vbU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAiem9vbVBhZ2VJbiIsIHpvb21Q
YWdlSW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpvb21QYWdlT3V0Iiwgem9vbVBhZ2VPdXRD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgIHsgImJlZ2luRHJhZ1dpdGhGaWxlcyIsIGJlZ2luRHJhZ1dp
dGhGaWxlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAwLCAwLCAwIH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143991</attachid>
            <date>2012-05-25 00:23:39 -0700</date>
            <delta_ts>2012-05-28 05:08:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles4.patch</filename>
            <type>text/plain</type>
            <size>29539</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4NDg0KQ0KKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxNSBAQA0KKzIwMTItMDUtMjQgIFh1
ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIGV2ZW50U2Vu
ZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gd2luZG93cywg
d2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9wIHJlbGF0ZWQgdGVzdCBjYXNlLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlzIGNoYW5nZSB3
YXMgcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcywgdXBkYXRl
IHdpbi9za2lwcGVkIGZpbGUgdG8gcmVtb3ZlIGRyYWctZHJvcCByZWxlYXRlZCB0ZXN0IGNhc2Ug
d2lsbCB2YWxpYXRlIHRoaXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6Om51bWJlck9mRmlsZXMpOgorCiAyMDEy
LTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBmZWF0dXJlIGRlZmluZXMgZm9yIHdlYi1mYWNpbmcgcGFydHMgb2YgQ1NTIFJlZ2lvbnMg
YW5kIEV4Y2x1c2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0
YVdpbi5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJh
Z0RhdGFXaW4uY3BwCShyZXZpc2lvbiAxMTgwOTYpDQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdEYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTEsNyArMTEyLDI0IEBA
DQogCiB1bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIDA7CisgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgU1RHTUVESVVNIG1lZGl1bTsKKyAgICBpZiAoRkFJTEVEKG1fcGxhdGZvcm1EcmFnRGF0
YS0+R2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZtZWRpdW0pKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBIRFJPUCBoZHJvcCA9IHN0YXRpY19jYXN0PEhEUk9QPihHbG9iYWxMb2NrKG1lZGl1
bS5oR2xvYmFsKSk7CisKKyAgICBpZiAoIWhkcm9wKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHVuc2lnbmVkIG51bUZpbGVzID0gRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIDB4RkZGRkZGRkYsIDAs
IDApOworCisgICAgRHJhZ0ZpbmlzaChoZHJvcCk7CisgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5o
R2xvYmFsKTsKKworICAgIHJldHVybiBudW1GaWxlczsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNG
aWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MTYzKQ0K
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSw1NiBAQA0KKzIw
MTItMDUtMjMgIFh1ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAg
ICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQg
aW4gd2luZG93cywgd2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9wIHJlbGF0ZWQgdGVzdCBjYXNl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChjZkhEcm9w
Rm9ybWF0KToKKyAgICAgICAgKGNmRmlsZU5hbWVXRm9ybWF0KToKKyAgICAgICAgKFdDRW51bUZv
cm1hdEV0Yyk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyk6Cisg
ICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKFdDRW51
bUZvcm1hdEV0Yzo6QWRkUmVmKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6UmVsZWFzZSk6
CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6Ok5leHQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0
RXRjOjpTa2lwKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6UmVzZXQpOgorICAgICAgICAo
V0NFbnVtRm9ybWF0RXRjOjpDbG9uZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpjcmVhdGVJ
bnN0YW5jZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpEUlREYXRhT2JqZWN0KToKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6On5EUlREYXRhT2JqZWN0KToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkFkZFJlZik6Cisg
ICAgICAgIChEUlREYXRhT2JqZWN0OjpSZWxlYXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6
OkdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0RGF0YUhlcmUpOgorICAgICAg
ICAoRFJURGF0YU9iamVjdDo6UXVlcnlHZXREYXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6
OkdldENhbm9uaWNhbEZvcm1hdEV0Yyk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpTZXREYXRh
KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkNvcHlNZWRpdW0pOgorICAgICAgICAoRFJURGF0
YU9iamVjdDo6RW51bUZvcm1hdEV0Yyk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpEQWR2aXNl
KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRVbmFkdmlzZSk6CisgICAgICAgIChEUlREYXRh
T2JqZWN0OjpFbnVtREFkdmlzZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpjbGVhckRhdGEp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0Lmg6IEFkZGVkLgor
ICAgICAgICAoRFJURGF0YU9iamVjdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RS
VERyb3BTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERSVERyb3BTb3VyY2U6OkRSVERyb3BT
b3VyY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6fkRSVERyb3BTb3VyY2UpOgorICAgICAg
ICAoRFJURHJvcFNvdXJjZTo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJj
ZTo6QWRkUmVmKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OlJlbGVhc2UpOgorICAgICAgICAo
RFJURHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6
UXVlcnlDb250aW51ZURyYWcpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNr
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oOiBBZGRlZC4K
KyAgICAgICAgKERSVERyb3BTb3VyY2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9E
dW1wUmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50
U2VuZGVyLmNwcDoKKyAgICAgICAgKGJlZ2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrKToKKwogMjAx
Mi0wNC0xOCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAK
ICAgICAgICAgW1F0XSBNYWtlIHRoZSB3ZWIgdmlldydzIHVybCBwcm9wZXJ0eSBmb2xsb3cgdGhl
IGFjdGl2ZSB1cmwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0
YU9iamVjdC5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDM4NSBAQA0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRFJURGF0YU9iamVjdC5oIgorCitGT1JNQVRF
VEMqIGNmSERyb3BGb3JtYXQoKQoreworICAgIHN0YXRpYyBGT1JNQVRFVEMgdXJsRm9ybWF0ID0g
e0NGX0hEUk9QLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURfSEdMT0JBTH07CisgICAg
cmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKQor
eworICAgIHN0YXRpYyBVSU5UIGNmID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoTCJGaWxlTmFt
ZVciKTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZvcm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1Rf
Q09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAgIHJldHVybiAmdXJsRm9ybWF0OworfQor
CitGT1JNQVRFVEMqIGNmVXJsV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQgY2YgPSBSZWdp
c3RlckNsaXBib2FyZEZvcm1hdChMIlVuaWZvcm1SZXNvdXJjZUxvY2F0b3JXIik7CisgICAgc3Rh
dGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Y2YsIDAsIERWQVNQRUNUX0NPTlRFTlQsIC0xLCBU
WU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsKK30KKworY2xhc3MgV0NFbnVt
Rm9ybWF0RXRjIDogcHVibGljIElFbnVtRk9STUFURVRDIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQz4mIGZvcm1hdHMpOworICAg
IGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1h
dHMpOworCisgICAgLy8gSVVua25vd24gbWVtYmVycworICAgIFNURE1FVEhPRChRdWVyeUludGVy
ZmFjZSkoUkVGSUlELCB2b2lkKiopOworICAgIFNURE1FVEhPRF8oVUxPTkcsIEFkZFJlZikodm9p
ZCk7CisgICAgU1RETUVUSE9EXyhVTE9ORywgUmVsZWFzZSkodm9pZCk7CisKKyAgICAvLyBJRW51
bUZPUk1BVEVUQyBtZW1iZXJzCisgICAgU1RETUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVU
QywgVUxPTkcqKTsKKyAgICBTVERNRVRIT0QoU2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChS
ZXNldCkodm9pZCk7CisgICAgU1RETUVUSE9EKENsb25lKShJRW51bUZPUk1BVEVUQyoqKTsKKwor
cHJpdmF0ZToKKyAgICBsb25nIG1fcmVmOworICAgIFZlY3RvcjxGT1JNQVRFVEM+IG1fZm9ybWF0
czsKKyAgICBzaXplX3QgbV9jdXJyZW50OworfTsKKworV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1G
b3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQz4mIGZvcm1hdHMpCisgICAgOiBtX3JlZigx
KQorICAgICwgbV9jdXJyZW50KDApCisgICAgLCBtX2Zvcm1hdHMoZm9ybWF0cykKK3sKK30KKwor
V0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQyo+
JiBmb3JtYXRzKQorICAgIDogbV9yZWYoMSkKKyAgICAsIG1fY3VycmVudCgwKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9mb3Jt
YXRzLmFwcGVuZCgqZm9ybWF0c1tpXSk7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRF
dGM6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQoreworICAg
ICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9JVW5rbm93bikg
fHwgSXNFcXVhbElJRChyaWlkLCBJSURfSUVudW1GT1JNQVRFVEMpKSB7CisgICAgICAgICpwcHZP
YmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7Cisg
ICAgfQorCisgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxP
TkcpIFdDRW51bUZvcm1hdEV0Yzo6QWRkUmVmKHZvaWQpCit7CisgICAgcmV0dXJuIEludGVybG9j
a2VkSW5jcmVtZW50KCZtX3JlZik7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIFdDRW51bUZv
cm1hdEV0Yzo6UmVsZWFzZSh2b2lkKQoreworICAgIGxvbmcgcmVmQ291bnQgPSBJbnRlcmxvY2tl
ZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQpCisgICAgICAgIGRlbGV0ZSB0
aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1h
dEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZPUk1BVEVUQyBscEZvcm1hdEV0YywgVUxPTkcqIHBj
ZWx0RmV0Y2hlZCkKK3sKKyAgICBpZiAocGNlbHRGZXRjaGVkKQorICAgICAgICAqcGNlbHRGZXRj
aGVkID0gMDsKKworICAgIFVMT05HIGNSZXR1cm4gPSBjZWx0OworCisgICAgaWYgKGNlbHQgPD0g
MCB8fCAhbHBGb3JtYXRFdGMgfHwgbV9jdXJyZW50ID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFwY2VsdEZldGNoZWQgJiYgY2VsdCAhPSAx
KSAvLyBwY2VsdEZldGNoZWQgY2FuIGJlIDAgb25seSBmb3IgMSBpdGVtIHJlcXVlc3QKKyAgICAg
ICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICB3aGlsZSAobV9jdXJyZW50IDwgbV9mb3JtYXRzLnNp
emUoKSAmJiBjUmV0dXJuID4gMCkgeworICAgICAgICAqbHBGb3JtYXRFdGMrKyA9IG1fZm9ybWF0
c1ttX2N1cnJlbnQrK107CisgICAgICAgIC0tY1JldHVybjsKKyAgICB9CisgICAgaWYgKHBjZWx0
RmV0Y2hlZCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQgLSBjUmV0dXJuOworCisgICAg
cmV0dXJuICFjUmV0dXJuID8gU19PSyA6IFNfRkFMU0U7Cit9CisKK1NURE1FVEhPRElNUCBXQ0Vu
dW1Gb3JtYXRFdGM6OlNraXAoVUxPTkcgY2VsdCkKK3sKKyAgICBpZiAoKG1fY3VycmVudCArIGNl
bHQpID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworICAgIG1f
Y3VycmVudCArPSBjZWx0OworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAgV0NF
bnVtRm9ybWF0RXRjOjpSZXNldCh2b2lkKQoreworICAgIG1fY3VycmVudCA9IDA7CisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OkNsb25lKElFbnVt
Rk9STUFURVRDKiogcHBDbG9uZUVudW1Gb3JtYXRFdGMpCit7CisgICAgaWYgKCFwcENsb25lRW51
bUZvcm1hdEV0YykKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIFdDRW51bUZvcm1h
dEV0YyogbmV3RW51bSA9IG5ldyBXQ0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICBpZiAo
IW5ld0VudW0pCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgbmV3RW51bS0+
QWRkUmVmKCk7CisgICAgbmV3RW51bS0+bV9jdXJyZW50ID0gbV9jdXJyZW50OworICAgICpwcENs
b25lRW51bUZvcm1hdEV0YyA9IG5ld0VudW07CisgICAgcmV0dXJuIFNfT0s7Cit9CisKKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCitIUkVTVUxUIERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKERSVERh
dGFPYmplY3QqKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisgICAgKnJlc3VsdCA9IG5ldyBEUlREYXRhT2JqZWN0KCk7CisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0RSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QoKQorICAgIDogbV9yZWYo
MSkKK3sKK30KKworRFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QoKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9tZWRpdW0uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVsZWFz
ZVN0Z01lZGl1bShtX21lZGl1bVtpXSk7CisgICAgICAgIGRlbGV0ZSBtX21lZGl1bVtpXTsKKyAg
ICB9CisgICAgV1RGOjpkZWxldGVBbGxWYWx1ZXMobV9mb3JtYXRzKTsKK30KKworU1RETUVUSE9E
SU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2
T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQs
IElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSURhdGFPYmplY3QpKQorICAg
ICAgICAqcHB2T2JqZWN0ID0gdGhpczsKKworICAgIGlmICgqcHB2T2JqZWN0KSB7CisgICAgICAg
IEFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisgICAgcmV0dXJuIEVfTk9J
TlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERhdGFPYmplY3Q6OkFkZFJl
Zih2b2lkKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQor
CitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlREYXRhT2JqZWN0OjpSZWxlYXNlKHZvaWQpCit7Cisg
ICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7CisgICAgaWYg
KCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNvdW50Owor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMqIHBmb3Jt
YXRldGNJbiwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZiAoIXBmb3JtYXRldGNJbiB8
fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBwbWVkaXVtLT5oR2xv
YmFsID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1hdHNbaV0t
PmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4tPmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+ZHdBc3Bl
Y3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KSB7
CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zvcm1hdHNb
aV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0
RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVfTk9USU1Q
TDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShGT1JNQVRF
VEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmICghcGZvcm1hdGV0YykKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIGlmICghKERWQVNQRUNUX0NPTlRFTlQgJiBwZm9ybWF0ZXRjLT5k
d0FzcGVjdCkpCisgICAgICAgIHJldHVybiAoRFZfRV9EVkFTUEVDVCk7CisKKyAgICBIUkVTVUxU
IGhSZXN1bHQgPSBEVl9FX1RZTUVEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3Jt
YXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAmIG1fZm9y
bWF0c1tpXS0+dHltZWQpIHsKKyAgICAgICAgICAgIGlmIChwZm9ybWF0ZXRjLT5jZkZvcm1hdCA9
PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KQorICAgICAgICAgICAgICAgIGhSZXN1bHQgPSBTX09L
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhSZXN1bHQgPSBEVl9FX0NMSVBG
T1JNQVQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaFJlc3VsdCA9IERWX0VfVFlNRUQ7
CisgICAgfQorICAgIHJldHVybiBoUmVzdWx0OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9i
amVjdDo6R2V0Q2Fub25pY2FsRm9ybWF0RXRjKEZPUk1BVEVUQyosIEZPUk1BVEVUQyopCit7IAor
ICAgIHJldHVybiBEQVRBX1NfU0FNRUZPUk1BVEVUQzsKK30KKworU1RETUVUSE9ESU1QIERSVERh
dGFPYmplY3Q6OlNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0ZXRjLCBTVEdNRURJVU0qIHBtZWRp
dW0sIEJPT0wgZlJlbGVhc2UpCit7IAorICAgIGlmICghcGZvcm1hdGV0YyB8fCAhcG1lZGl1bSkK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEZPUk1BVEVUQyogZm9ybWF0ZXRjID0g
bmV3IEZPUk1BVEVUQzsKKyAgICBpZiAoIWZvcm1hdGV0YykKKyAgICAgICAgcmV0dXJuIEVfT1VU
T0ZNRU1PUlk7CisKKyAgICBTVEdNRURJVU0qIHBTdGdNZWQgPSBuZXcgU1RHTUVESVVNOworCisg
ICAgaWYgKCFwU3RnTWVkKSB7CisgICAgICAgIGRlbGV0ZSBmb3JtYXRldGM7CisgICAgICAgIHJl
dHVybiBFX09VVE9GTUVNT1JZOworICAgIH0KKworICAgIFplcm9NZW1vcnkoZm9ybWF0ZXRjLCBz
aXplb2YoRk9STUFURVRDKSk7CisgICAgWmVyb01lbW9yeShwU3RnTWVkLCBzaXplb2YoU1RHTUVE
SVVNKSk7CisKKyAgICAqZm9ybWF0ZXRjID0gKnBmb3JtYXRldGM7CisgICAgbV9mb3JtYXRzLmFw
cGVuZChmb3JtYXRldGMpOworCisgICAgaWYgKGZSZWxlYXNlKQorICAgICAgICAqcFN0Z01lZCA9
ICpwbWVkaXVtOworICAgIGVsc2UKKyAgICAgICAgQ29weU1lZGl1bShwU3RnTWVkLCBwbWVkaXVt
LCBwZm9ybWF0ZXRjKTsKKyAgICBtX21lZGl1bS5hcHBlbmQocFN0Z01lZCk7CisKKyAgICByZXR1
cm4gU19PSzsKK30KKwordm9pZCBEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElVTSog
cE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBwRm10U3JjKQoreworICAg
IHN3aXRjaCAocE1lZFNyYy0+dHltZWQpIHsKKyNpZiAhT1MoV0lOQ0UpCisgICAgY2FzZSBUWU1F
RF9IR0xPQkFMOgorICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IHN0YXRpY19jYXN0PEhHTE9C
QUw+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEdsb2JhbCwgcEZtdFNyYy0+Y2ZGb3JtYXQs
IDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9HREk6CisgICAgICAgIHBNZWRE
ZXN0LT5oQml0bWFwID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oT2xlRHVwbGljYXRlRGF0YShwTWVk
U3JjLT5oQml0bWFwLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRZTUVEX01GUElDVDoKKyAgICAgICAgcE1lZERlc3QtPmhNZXRhRmlsZVBpY3QgPSBz
dGF0aWNfY2FzdDxITUVUQUZJTEVQSUNUPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhNZXRh
RmlsZVBpY3QsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVFlNRURfRU5ITUY6CisgICAgICAgIHBNZWREZXN0LT5oRW5oTWV0YUZpbGUgPSBzdGF0aWNf
Y2FzdDxIRU5ITUVUQUZJTEU+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEVuaE1ldGFGaWxl
LCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVE
X0ZJTEU6CisgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFtZSA9IHN0YXRpY19jYXN0PExQT0xF
U1RSPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pGaWxlTmFtZSwgcEZtdFNyYy0+Y2ZG
b3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIFRZTUVEX0lTVFJF
QU06CisgICAgICAgIHBNZWREZXN0LT5wc3RtID0gcE1lZFNyYy0+cHN0bTsKKyAgICAgICAgcE1l
ZFNyYy0+cHN0bS0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfSVNU
T1JBR0U6CisgICAgICAgIHBNZWREZXN0LT5wc3RnID0gcE1lZFNyYy0+cHN0ZzsKKyAgICAgICAg
cE1lZFNyYy0+cHN0Zy0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwTWVkRGVzdC0+dHltZWQgPSBwTWVkU3JjLT50eW1l
ZDsKKyAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSAwOworICAgIGlmIChwTWVkU3JjLT5w
VW5rRm9yUmVsZWFzZSkgeworICAgICAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSBwTWVk
U3JjLT5wVW5rRm9yUmVsZWFzZTsKKyAgICAgICAgcE1lZFNyYy0+cFVua0ZvclJlbGVhc2UtPkFk
ZFJlZigpOworICAgIH0KK30KK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpFbnVtRm9ybWF0
RXRjKERXT1JEIGR3RGlyZWN0aW9uLCBJRW51bUZPUk1BVEVUQyoqIHBwZW51bUZvcm1hdEV0YykK
K3sgCisgICAgaWYgKCFwcGVudW1Gb3JtYXRFdGMpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CisKKyAgICAqcHBlbnVtRm9ybWF0RXRjID0gMDsKKyAgICBzd2l0Y2ggKGR3RGlyZWN0aW9uKSB7
CisgICAgY2FzZSBEQVRBRElSX0dFVDoKKyAgICAgICAgKnBwZW51bUZvcm1hdEV0YyA9IG5ldyBX
Q0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICAgICAgaWYgKCEoKnBwZW51bUZvcm1hdEV0
YykpCisgICAgICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIERBVEFESVJfU0VUOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFX05P
VElNUEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitT
VERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6REFkdmlzZShGT1JNQVRFVEMqLCBEV09SRCwgSUFk
dmlzZVNpbmsqLCBEV09SRCopCit7IAorICAgIHJldHVybiBPTEVfRV9BRFZJU0VOT1RTVVBQT1JU
RUQ7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpEVW5hZHZpc2UoRFdPUkQpCit7
CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBE
UlREYXRhT2JqZWN0OjpFbnVtREFkdmlzZShJRW51bVNUQVREQVRBKiopCit7CisgICAgcmV0dXJu
IE9MRV9FX0FEVklTRU5PVFNVUFBPUlRFRDsKK30KKwordm9pZCBEUlREYXRhT2JqZWN0OjpjbGVh
ckRhdGEoQ0xJUEZPUk1BVCBmb3JtYXQpCit7CisgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKKyAg
ICB3aGlsZSAocG9zaXRpb24gPCBtX2Zvcm1hdHMuc2l6ZSgpKSB7CisgICAgICAgIGlmIChtX2Zv
cm1hdHNbcG9zaXRpb25dLT5jZkZvcm1hdCA9PSBmb3JtYXQpIHsKKyAgICAgICAgICAgIEZPUk1B
VEVUQyogY3VycmVudCA9IG1fZm9ybWF0c1twb3NpdGlvbl07CisgICAgICAgICAgICBtX2Zvcm1h
dHNbcG9zaXRpb25dID0gbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXTsKKyAgICAgICAg
ICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV0gPSAwOworICAgICAgICAgICAgbV9m
b3JtYXRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OworICAgICAg
ICAgICAgU1RHTUVESVVNKiBtZWRpdW0gPSBtX21lZGl1bVtwb3NpdGlvbl07CisgICAgICAgICAg
ICBtX21lZGl1bVtwb3NpdGlvbl0gPSBtX21lZGl1bVttX21lZGl1bS5zaXplKCkgLSAxXTsKKyAg
ICAgICAgICAgIG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAgICAg
IG1fbWVkaXVtLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obWVk
aXVtKTsKKyAgICAgICAgICAgIGRlbGV0ZSBtZWRpdW07CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBwb3NpdGlvbisrOworICAgIH0KK30KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCShyZXZpc2lvbiAwKQ0KKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJKHJldmlzaW9uIDApDQpAQCAtMCww
ICsxLDcxIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRFJURGF0YU9iamVjdF9oCisjZGVmaW5lIERS
VERhdGFPYmplY3RfaAorCisjaW5jbHVkZSA8U2hsT2JqLmg+CisjaW5jbHVkZSA8b2JqaWRsLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitGT1JNQVRFVEMqIGNmSERyb3BGb3JtYXQoKTsK
KworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpOworCitGT1JNQVRFVEMqIGNmVXJsV0Zv
cm1hdCgpOworCitjbGFzcyBEUlREYXRhT2JqZWN0IDogcHVibGljIElEYXRhT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB2b2lkIENvcHlNZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVzdCwgU1RHTUVESVVN
KiBwTWVkU3JjLCBGT1JNQVRFVEMqIHBGbXRTcmMpOworCisgICAgLy8gSVVua25vd24KKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpOyAgICAgICAgCisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBBZGRSZWYodm9pZCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxM
VFlQRSBSZWxlYXNlKHZvaWQpOworCisgICAgLy8gSURhdGFPYmplY3QKKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRJbiwgU1RH
TUVESVVNKiBwbWVkaXVtKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
R2V0RGF0YUhlcmUoRk9STUFURVRDKiBwZm9ybWF0LCBTVEdNRURJVU0qIHBtZWRpdW0pOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUdldERhdGEoRk9STUFURVRD
KiBwZm9ybWF0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0Q2Fu
b25pY2FsRm9ybWF0RXRjKEZPUk1BVEVUQyogcGZvcm1hdGVjdEluLCBGT1JNQVRFVEMqIHBmb3Jt
YXRPdXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXREYXRhKEZP
Uk1BVEVUQyogcGZvcm1hdCwgU1RHTUVESVVNKnBtZWRpdW0sIEJPT0wgcmVsZWFzZSk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVudW1Gb3JtYXRFdGMoRFdPUkQgZHdE
aXJlY3Rpb24sIElFbnVtRk9STUFURVRDKiogcHBlbnVtRm9ybWF0RXRjKTsKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgREFkdmlzZShGT1JNQVRFVEMqLCBEV09SRCwgSUFk
dmlzZVNpbmsqLCBEV09SRCopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBEVW5hZHZpc2UoRFdPUkQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBFbnVtREFkdmlzZShJRW51bVNUQVREQVRBKiopOworCisgICAgdm9pZCBjbGVhckRhdGEoQ0xJ
UEZPUk1BVCk7CisgICAgCisgICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlSW5zdGFuY2UoRFJURGF0
YU9iamVjdCoqKTsKK3ByaXZhdGU6CisgICAgRFJURGF0YU9iamVjdCgpOworICAgIH5EUlREYXRh
T2JqZWN0KCk7CisgICAgbG9uZyBtX3JlZjsKKyAgICBWZWN0b3I8Rk9STUFURVRDKj4gbV9mb3Jt
YXRzOworICAgIFZlY3RvcjxTVEdNRURJVU0qPiBtX21lZGl1bTsKK307CisKKyNlbmRpZiAvLyBE
UlREYXRhT2JqZWN0X2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291
cmNlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9w
U291cmNlLmNwcAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJU
RHJvcFNvdXJjZS5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDg2IEBADQorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRFJURHJvcFNvdXJjZS5oIgorCitEUlREcm9wU291cmNlOjpEUlREcm9wU291cmNl
KCkKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2Ryb3BwZWQoZmFsc2UpCit7Cit9CisKK0RSVERy
b3BTb3VyY2U6On5EUlREcm9wU291cmNlKCkKK3sKK30KKworU1RETUVUSE9ESU1QIERSVERyb3BT
b3VyY2U6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQorewor
ICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9JVW5rbm93
bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSURyb3BTb3VyY2UpKSB7CisgICAgICAgICpwcHZP
YmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKworICAgICAgICByZXR1cm4gU19PSzsK
KyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhV
TE9ORykgRFJURHJvcFNvdXJjZTo6QWRkUmVmKHZvaWQpCit7CisgICAgcmV0dXJuIEludGVybG9j
a2VkSW5jcmVtZW50KCZtX3JlZik7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERyb3BT
b3VyY2U6OlJlbGVhc2Uodm9pZCkKK3sKKyAgICBsb25nIHJlZkNvdW50ID0gSW50ZXJsb2NrZWRE
ZWNyZW1lbnQoJm1fcmVmKTsKKyAgICBpZiAoIXJlZkNvdW50KQorICAgICAgICBkZWxldGUgdGhp
czsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hSRVNVTFQgRFJURHJvcFNvdXJjZTo6Y3Jl
YXRlSW5zdGFuY2UoSURyb3BTb3VyY2UqKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgKnJlc3VsdCA9IG5ldyBEUlREcm9wU291
cmNlOworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6
UXVlcnlDb250aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJlc3NlZCwgRFdPUkQgZ3JmS2V5U3RhdGUp
Cit7CisgICAgaWYgKGZFc2NhcGVQcmVzc2VkIHx8ICEoZ3JmS2V5U3RhdGUgJiAoTUtfTEJVVFRP
TiB8IE1LX1JCVVRUT04pKSkgeworICAgICAgICBtX2Ryb3BwZWQgPSAhZkVzY2FwZVByZXNzZWQ7
CisgICAgICAgIHJldHVybiBmRXNjYXBlUHJlc3NlZCA/IERSQUdEUk9QX1NfQ0FOQ0VMIDogRFJB
R0RST1BfU19EUk9QOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJ
TVAgRFJURHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNrKERXT1JEIGR3RWZmZWN0KQoreworICAgIHJl
dHVybiBEUkFHRFJPUF9TX1VTRURFRkFVTFRDVVJTT1JTOworfQpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEs
NDggQEANCisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyovCisKKyNpZm5k
ZWYgRFJURHJvcFNvdXJjZV9oCisjZGVmaW5lIERSVERyb3BTb3VyY2VfaAorCisjaW5jbHVkZSA8
U2hsT2JqLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCitjbGFzcyBEUlREcm9wU291cmNlIDog
cHVibGljIElEcm9wU291cmNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3Qp
OyAgICAgICAgCisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYodm9p
ZCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZvaWQpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUNvbnRpbnVlRHJhZyhC
T09MIGZFc2NhcGVQcmVzc2VkLCBEV09SRCBncmZLZXlTdGF0ZSk7CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdpdmVGZWVkYmFjayhEV09SRCBkd0VmZmVjdCk7CisKKyAg
ICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVJbnN0YW5jZShJRHJvcFNvdXJjZSoqIHJlc3VsdCk7Citw
cml2YXRlOgorICAgIERSVERyb3BTb3VyY2UoKTsKKyAgICB+RFJURHJvcFNvdXJjZSgpOworICAg
IGxvbmcgbV9yZWY7CisgICAgYm9vbCBtX2Ryb3BwZWQ7Cit9OworCisjZW5kaWYgLy8gRFJURHJv
cFNvdXJjZV9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUu
dmNwcm9qDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5k
ZXJUcmVlLnZjcHJvagkocmV2aXNpb24gMTE4MDk2KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHdvcmtpbmcgY29weSkNCkBAIC00MDIsNiArNDAy
LDIyIEBADQogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XERSVERhdGFPYmplY3QuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuXERSVERhdGFPYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREcm9wU291cmNlLmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREcm9wU291cmNlLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cRXZlbnRTZW5kZXIu
Y3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9F
dmVudFNlbmRlci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RXZlbnRTZW5kZXIuY3BwCShyZXZpc2lvbiAxMTgwOTYpDQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0V2ZW50U2VuZGVyLmNwcAkod29ya2luZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE2ICszMCwxOSBAQA0K
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlci5oIgogCisjaW5jbHVk
ZSAiRFJURGF0YU9iamVjdC5oIgorI2luY2x1ZGUgIkRSVERyb3BTb3VyY2UuaCIKICNpbmNsdWRl
ICJEcmFnZ2luZ0luZm8uaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NP
TVB0ci5oPgorI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+
CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dlYktpdC5oPgotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2RlZmluZSBXTV9E
UlRfU0VORF9RVUVVRURfRVZFTlQgKFdNX0FQUCsxKQogCkBAIC02MzAsNiArNjM0LDc4IEBADQog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpT
VmFsdWVSZWYgYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNPYmplY3RSZWYgZmlsZXNBcnJh
eSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIDApOworCisgICAgaWYg
KCFmaWxlc0FycmF5KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBKU1N0cmluZ1JlZiBsZW5ndGhQcm9wZXJ0eSA9IEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJsZW5ndGgiKTsKKyAgICBWZWN0b3I8VUNoYXI+IGZpbGVzOworICAgIGlu
dCBmaWxlc0NvdW50ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVy
dHkoY29udGV4dCwgZmlsZXNBcnJheSwgbGVuZ3RoUHJvcGVydHksIDApLCAwKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGZpbGVzQ291bnQ7ICsraSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZh
bHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXNBcnJheSwgaSwg
MCk7CisgICAgICAgIEpTU3RyaW5nUmVmIGZpbGUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHZhbHVlLCAwKTsKKyAgICAgICAgZmlsZXMuYXBwZW5kKEpTU3RyaW5nR2V0Q2hhcmFjdGVy
c1B0cihmaWxlKSwgSlNTdHJpbmdHZXRMZW5ndGgoZmlsZSkpOworICAgICAgICBmaWxlcy5hcHBl
bmQoMCk7CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShmaWxlKTsKKyAgICB9CisKKyAgICBpZiAo
ZmlsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICAvLyBXZSBzaG91bGQgYXBwZW5kICIwIiBpbiB0aGUgZW5kIG9mIHxmaWxl
c3wgc28gdGhhdCB8RHJhZ1F1ZXJ5RmlsZVd8IHJldHJpZXZlZCB0aGUgbnVtYmVyIG9mIGZpbGVz
IGNvcnJlY3RseSBmcm9tIE9sZSBDbGlwYm9hcmQuCisgICAgZmlsZXMuYXBwZW5kKDApOworCisg
ICAgU1RHTUVESVVNIG1lZGl1bSA9IHswfTsKKyAgICBtZWRpdW0udHltZWQgPSBUWU1FRF9IR0xP
QkFMOworICAgIFNJWkVfVCBkcm9wRmlsZXNTaXplID0gc2l6ZW9mKERST1BGSUxFUykgKyAoc2l6
ZW9mKFdDSEFSKSAqIGZpbGVzLnNpemUoKSk7CisgICAgbWVkaXVtLmhHbG9iYWwgPSBHbG9iYWxB
bGxvYyhHTUVNX01PVkVBQkxFIHwgR01FTV9EREVTSEFSRSwgZHJvcEZpbGVzU2l6ZSk7CisgICAg
RFJPUEZJTEVTKiBkcm9wRmlsZXMgPSByZWludGVycHJldF9jYXN0PERST1BGSUxFUyAqPihHbG9i
YWxMb2NrKG1lZGl1bS5oR2xvYmFsKSk7CisgICAgbWVtc2V0KGRyb3BGaWxlcywgMCwgc2l6ZW9m
KERST1BGSUxFUykpOworICAgIGRyb3BGaWxlcy0+cEZpbGVzID0gc2l6ZW9mKERST1BGSUxFUyk7
CisgICAgZHJvcEZpbGVzLT5mV2lkZSA9IFRSVUU7CisKKyAgICBVQ2hhciogZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZWludGVycHJldF9jYXN0PEJZVEUqPihkcm9wRmlsZXMpICsg
c2l6ZW9mKERST1BGSUxFUykpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBmaWxlc1tpXTsKKworICAgIEdsb2JhbFVubG9j
ayhtZWRpdW0uaEdsb2JhbCk7IAorCisgICAgaWYgKGRyYWdnaW5nSW5mbykgeworICAgICAgICBk
ZWxldGUgZHJhZ2dpbmdJbmZvOworICAgICAgICBkcmFnZ2luZ0luZm8gPSAwOworICAgIH0KKwor
ICAgIENPTVB0cjxEUlREYXRhT2JqZWN0PiBkYXRhT2JlamVjdDsKKyAgICBDT01QdHI8SURyb3BT
b3VyY2U+IHNvdXJjZTsKKyAgICBpZiAoRkFJTEVEKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKCZkYXRhT2JlamVjdCkpKQorICAgICAgICBkYXRhT2JlamVjdCA9IDA7CisKKyAgICBpZiAo
RkFJTEVEKERSVERyb3BTb3VyY2U6OmNyZWF0ZUluc3RhbmNlKCZzb3VyY2UpKSkKKyAgICAgICAg
c291cmNlID0gMDsKKworICAgIGlmIChkYXRhT2JlamVjdCAmJiBzb3VyY2UpIHsKKyAgICAgICAg
ZHJhZ2dpbmdJbmZvID0gbmV3IERyYWdnaW5nSW5mbyhkYXRhT2JlamVjdC5nZXQoKSwgc291cmNl
LmdldCgpKTsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5zZXRQZXJmb3JtZWREcm9wRWZmZWN0KERS
T1BFRkZFQ1RfQ09QWSk7CisgICAgfQorCisgICAgaWYgKGRyYWdnaW5nSW5mbykgeworICAgICAg
ICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZt
ZWRpdW0sIEZBTFNFKTsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCktPlNldERh
dGEoY2ZGaWxlTmFtZVdGb3JtYXQoKSwgJm1lZGl1bSwgRkFMU0UpOworICAgICAgICBkcmFnZ2lu
Z0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZlVybFdGb3JtYXQoKSwgJm1lZGl1bSwgRkFM
U0UpOworICAgICAgICBPbGVTZXRDbGlwYm9hcmQoZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCkp
OworICAgICAgICBkb3duID0gdHJ1ZTsKKyAgICB9CisKKyAgICBKU1N0cmluZ1JlbGVhc2UobGVu
Z3RoUHJvcGVydHkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKwogc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CiAgICAg
eyAiY29udGV4dENsaWNrIiwgY29udGV4dENsaWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJt
b3VzZURvd24iLCBtb3VzZURvd25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtNjQyLDYgKzcxOCw3IEBA
DQogICAgIHsgInRleHRab29tT3V0IiwgdGV4dFpvb21PdXRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
IHsgInpvb21QYWdlSW4iLCB6b29tUGFnZUluQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJ6b29t
UGFnZU91dCIsIHpvb21QYWdlT3V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJiZWdpbkRyYWdX
aXRoRmlsZXMiLCBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgMCwg
MCwgMCB9CiB9OwogCg==
</data>
<flag name="review"
          id="150693"
          type_id="1"
          status="-"
          setter="tony"
    />
    <flag name="commit-queue"
          id="150694"
          type_id="3"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144273</attachid>
            <date>2012-05-27 23:03:00 -0700</date>
            <delta_ts>2012-05-28 05:08:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles5.patch</filename>
            <type>text/plain</type>
            <size>31422</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTE4NjQ0KQ0KKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxMiBAQA0KKzIwMTItMDUtMjcgIFh1ZXFpbmcgSHVh
bmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIFRoZSB0ZXN0cyBsaXN0ZWQg
aW4gd2luL1NraXBwZWQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGJ1dCBz
b21lIG9mIHRoZXNlIG5lZWQgdG8gcmViYXNlbGluZSBpbiBXaW5kb3dzLCB3ZSBkbyB0aGF0IGlu
IGJ1ZyM4NzYxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMi0wNS0yNyAgVGFrYXNoaSBTYWthbW90
byAgPHRhc2FrQGdvb2dsZS5jb20+CiAKICAgICAgICAgZmFzdC9kb20vc2hhZG93L2NvbnRlbnQt
ZWxlbWVudC1pbi1tZWRpYS5odG1sIGlzIHdyb25nLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL1NraXBwZWQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4v
U2tpcHBlZAkocmV2aXNpb24gMTE4MDk2KQ0KKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCSh3b3JraW5nIGNvcHkpDQpAQCAtMjQyLDEzICsyNDIsOCBAQA0KIGVkaXRpbmcvcGFz
dGVib2FyZC9maWxlLWRyYWctdG8tZWRpdGFibGUuaHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2Zp
bGUtaW5wdXQtZmlsZXMtYWNjZXNzLmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctdG8tbmF2aWdhdGUu
aHRtbAotZmFzdC9ldmVudHMvcHJldmVudC1kcmFnLXRvLW5hdmlnYXRlLmh0bWwKLWZhc3QvZm9y
bXMvZmlsZS9maWxlLWlucHV0LWNoYW5nZS1ldmVudC5odG1sCi1mYXN0L2Zvcm1zL2ZpbGUvZ2V0
LWZpbGUtdXBsb2FkLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1maWxlLXJlLXJlbmRlci5o
dG1sCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9jbGlwYm9hcmQtZmlsZS1hY2Nlc3Mu
aHRtbAotZmFzdC9ldmVudHMvZHJhZy1maWxlLWNyYXNoLmh0bWwKLWZhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUuaHRtbAogZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0
bWVzc2FnZS1jbG9uZS1mcmFtZXMuaHRtbAogZmFzdC9ldmVudHMvZHJvcHpvbmUtMDA0Lmh0bWwK
IApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg2NDgpDQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDE1IEBADQorMjAxMi0wNS0yNyAg
WHVlcWluZyBIdWFuZyAgPGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRT
ZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB3aW5kb3dz
LCB3aGljaCBibG9ja2VkIGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0IGNhc2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI5NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IFRoaXMgY2hhbmdl
IHdhcyByZXF1aXJlbWVudCBmb3IgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzLCB1cGRh
dGUgd2luL3NraXBwZWQgZmlsZSB0byByZW1vdmUgZHJhZy1kcm9wIHJlbGVhdGVkIHRlc3QgY2Fz
ZSB3aWxsIHZhbGlhdGUgdGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnRGF0YVdp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcyk6CisKIDIw
MTItMDUtMjcgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIGN1dCwgY29weSBvciBwYXN0ZSBldmVudCB3b24ndCBiZSBmaXJlZCBpbiBTaGFkb3cgRE9N
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJ
KHJldmlzaW9uIDExODA5NikNCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0Rh
dGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMSw3ICsxMTIsMjQgQEANCiAKIHVuc2lnbmVk
IERyYWdEYXRhOjpudW1iZXJPZkZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICBp
ZiAoIW1fcGxhdGZvcm1EcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVEdNRURJ
VU0gbWVkaXVtOworICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURyYWdEYXRhLT5HZXREYXRhKGNm
SERyb3BGb3JtYXQoKSwgJm1lZGl1bSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhEUk9Q
IGhkcm9wID0gc3RhdGljX2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsK
KworICAgIGlmICghaGRyb3ApCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVt
RmlsZXMgPSBEcmFnUXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CisKKyAgICBE
cmFnRmluaXNoKGhkcm9wKTsKKyAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOworCisg
ICAgcmV0dXJuIG51bUZpbGVzOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0
b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg2NDgpDQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpDQpAQCAtMSwzICsxLDU3IEBADQorMjAxMi0wNS0yNyAgWHVl
cWluZyBIdWFuZyAgPGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRTZW5k
ZXIuYmVnaW5EcmFnV2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXaW5kb3dzLCB3
aGljaCBibG9ja2VkIGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0IGNhc2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9EUlREYXRhT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChjZkhEcm9wRm9ybWF0KToKKyAg
ICAgICAgKGNmRmlsZU5hbWVXRm9ybWF0KToKKyAgICAgICAgKGNmVXJsV0Zvcm1hdCk6CisgICAg
ICAgIChXQ0VudW1Gb3JtYXRFdGMpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1G
b3JtYXRFdGMpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpRdWVyeUludGVyZmFjZSk6Cisg
ICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OkFkZFJlZik6CisgICAgICAgIChXQ0VudW1Gb3JtYXRF
dGM6OlJlbGVhc2UpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpOZXh0KToKKyAgICAgICAg
KFdDRW51bUZvcm1hdEV0Yzo6U2tpcCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OlJlc2V0
KToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6Q2xvbmUpOgorICAgICAgICAoRFJURGF0YU9i
amVjdDo6Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6RFJURGF0YU9i
amVjdCk6CisgICAgICAgIChEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCk6CisgICAgICAg
IChEUlREYXRhT2JqZWN0OjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0
OjpBZGRSZWYpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6UmVsZWFzZSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpHZXREYXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkdldERhdGFI
ZXJlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpHZXRDYW5vbmljYWxGb3JtYXRFdGMpOgorICAgICAgICAoRFJURGF0YU9i
amVjdDo6U2V0RGF0YSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKToKKyAg
ICAgICAgKERSVERhdGFPYmplY3Q6OkVudW1Gb3JtYXRFdGMpOgorICAgICAgICAoRFJURGF0YU9i
amVjdDo6REFkdmlzZSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpEVW5hZHZpc2UpOgorICAg
ICAgICAoRFJURGF0YU9iamVjdDo6RW51bURBZHZpc2UpOgorICAgICAgICAoRFJURGF0YU9iamVj
dDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKERSVERhdGFPYmplY3QpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChEUlREcm9wU291
cmNlOjpEUlREcm9wU291cmNlKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6On5EUlREcm9wU291
cmNlKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAg
KERSVERyb3BTb3VyY2U6OkFkZFJlZik6CisgICAgICAgIChEUlREcm9wU291cmNlOjpSZWxlYXNl
KToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6OmNyZWF0ZUluc3RhbmNlKToKKyAgICAgICAgKERS
VERyb3BTb3VyY2U6OlF1ZXJ5Q29udGludWVEcmFnKToKKyAgICAgICAgKERSVERyb3BTb3VyY2U6
OkdpdmVGZWVkYmFjayk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3Vy
Y2UuaDogQWRkZWQuCisgICAgICAgIChEUlREcm9wU291cmNlKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9FdmVudFNlbmRlci5jcHA6CisgICAgICAgIChiZWdpbkRyYWdXaXRoRmlsZXNDYWxs
YmFjayk6CisKIDIwMTItMDUtMjcgIFN1ZGFyc2FuYSBOYWdpbmVuaSAgPHN1ZGFyc2FuYS5uYWdp
bmVuaUBsaW51eC5pbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0gRW5hYmxlIGJsb2Igc3VwcG9y
dCBmb3IgdGhlIEVGTCBwb3J0CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0
YU9iamVjdC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJU
RGF0YU9iamVjdC5jcHAJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0RSVERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSwzODcgQEANCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERhdGFPYmplY3QuaCIKKwor
Rk9STUFURVRDKiBjZkhEcm9wRm9ybWF0KCkKK3sKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZv
cm1hdCA9IHtDRl9IRFJPUCwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9
OworICAgIHJldHVybiAmdXJsRm9ybWF0OworfQorCitGT1JNQVRFVEMqIGNmRmlsZU5hbWVXRm9y
bWF0KCkKK3sKKyAgICBzdGF0aWMgVUlOVCBjZiA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0KEwi
RmlsZU5hbWVXIik7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Y2YsIDAsIERW
QVNQRUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1h
dDsKK30KKworRk9STUFURVRDKiBjZlVybFdGb3JtYXQoKQoreworICAgIHN0YXRpYyBVSU5UIGNm
ID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoTCJVbmlmb3JtUmVzb3VyY2VMb2NhdG9yVyIpOwor
ICAgIHN0YXRpYyBGT1JNQVRFVEMgdXJsRm9ybWF0ID0ge2NmLCAwLCBEVkFTUEVDVF9DT05URU5U
LCAtMSwgVFlNRURfSEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK2NsYXNz
IFdDRW51bUZvcm1hdEV0YyA6IHB1YmxpYyBJRW51bUZPUk1BVEVUQyB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEM+JiBmb3JtYXRz
KTsKKyAgICBleHBsaWNpdCBXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQyo+
JiBmb3JtYXRzKTsKKworICAgIC8vIElVbmtub3duIG1lbWJlcnMKKyAgICBTVERNRVRIT0QoUXVl
cnlJbnRlcmZhY2UpKFJFRklJRCwgdm9pZCoqKTsKKyAgICBTVERNRVRIT0RfKFVMT05HLCBBZGRS
ZWYpKCk7CisgICAgU1RETUVUSE9EXyhVTE9ORywgUmVsZWFzZSkoKTsKKworICAgIC8vIElFbnVt
Rk9STUFURVRDIG1lbWJlcnMKKyAgICBTVERNRVRIT0QoTmV4dCkoVUxPTkcsIExQRk9STUFURVRD
LCBVTE9ORyopOworICAgIFNURE1FVEhPRChTa2lwKShVTE9ORyk7CisgICAgU1RETUVUSE9EKFJl
c2V0KSgpOworICAgIFNURE1FVEhPRChDbG9uZSkoSUVudW1GT1JNQVRFVEMqKik7CisKK3ByaXZh
dGU6CisgICAgbG9uZyBtX3JlZjsKKyAgICBWZWN0b3I8Rk9STUFURVRDPiBtX2Zvcm1hdHM7Cisg
ICAgc2l6ZV90IG1fY3VycmVudDsKK307CisKK1dDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0
RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEM+JiBmb3JtYXRzKQorICAgIDogbV9yZWYoMSkKKyAg
ICAsIG1fY3VycmVudCgwKQorICAgICwgbV9mb3JtYXRzKGZvcm1hdHMpCit7Cit9CisKK1dDRW51
bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9y
bWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkKK3sKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZvcm1hdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZm9ybWF0cy5h
cHBlbmQoKmZvcm1hdHNbaV0pOworfQorCitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpR
dWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAqcHB2
T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8IElz
RXF1YWxJSUQocmlpZCwgSUlEX0lFbnVtRk9STUFURVRDKSkgeworICAgICAgICAqcHB2T2JqZWN0
ID0gdGhpczsKKyAgICAgICAgQWRkUmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0K
KworICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBX
Q0VudW1Gb3JtYXRFdGM6OkFkZFJlZigpCit7CisgICAgcmV0dXJuIEludGVybG9ja2VkSW5jcmVt
ZW50KCZtX3JlZik7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIFdDRW51bUZvcm1hdEV0Yzo6
UmVsZWFzZSgpCit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZt
X3JlZik7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0
dXJuIHJlZkNvdW50OworfQorCitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpOZXh0KFVM
T05HIGNlbHQsIExQRk9STUFURVRDIGxwRm9ybWF0RXRjLCBVTE9ORyogcGNlbHRGZXRjaGVkKQor
eworICAgIGlmIChwY2VsdEZldGNoZWQpCisgICAgICAgICpwY2VsdEZldGNoZWQgPSAwOworCisg
ICAgVUxPTkcgY1JldHVybiA9IGNlbHQ7CisKKyAgICBpZiAoY2VsdCA8PSAwIHx8ICFscEZvcm1h
dEV0YyB8fCBtX2N1cnJlbnQgPj0gbV9mb3JtYXRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFNf
RkFMU0U7CisKKyAgICBpZiAoIXBjZWx0RmV0Y2hlZCAmJiBjZWx0ICE9IDEpIC8vIHBjZWx0RmV0
Y2hlZCBjYW4gYmUgMCBvbmx5IGZvciAxIGl0ZW0gcmVxdWVzdAorICAgICAgICByZXR1cm4gU19G
QUxTRTsKKworICAgIHdoaWxlIChtX2N1cnJlbnQgPCBtX2Zvcm1hdHMuc2l6ZSgpICYmIGNSZXR1
cm4gPiAwKSB7CisgICAgICAgICpscEZvcm1hdEV0YysrID0gbV9mb3JtYXRzW21fY3VycmVudCsr
XTsKKyAgICAgICAgLS1jUmV0dXJuOworICAgIH0KKyAgICBpZiAocGNlbHRGZXRjaGVkKQorICAg
ICAgICAqcGNlbHRGZXRjaGVkID0gY2VsdCAtIGNSZXR1cm47CisKKyAgICByZXR1cm4gIWNSZXR1
cm4gPyBTX09LIDogU19GQUxTRTsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6
U2tpcChVTE9ORyBjZWx0KQoreworICAgIGlmICgobV9jdXJyZW50ICsgY2VsdCkgPj0gbV9mb3Jt
YXRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisgICAgbV9jdXJyZW50ICs9IGNl
bHQ7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6
OlJlc2V0KCkKK3sKKyAgICBtX2N1cnJlbnQgPSAwOworICAgIHJldHVybiBTX09LOworfQorCitT
VERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpDbG9uZShJRW51bUZPUk1BVEVUQyoqIHBwQ2xv
bmVFbnVtRm9ybWF0RXRjKQoreworICAgIGlmICghcHBDbG9uZUVudW1Gb3JtYXRFdGMpCisgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBXQ0VudW1Gb3JtYXRFdGMqIG5ld0VudW0gPSBu
ZXcgV0NFbnVtRm9ybWF0RXRjKG1fZm9ybWF0cyk7CisgICAgaWYgKCFuZXdFbnVtKQorICAgICAg
ICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKworICAgIG5ld0VudW0tPkFkZFJlZigpOworICAgIG5l
d0VudW0tPm1fY3VycmVudCA9IG1fY3VycmVudDsKKyAgICAqcHBDbG9uZUVudW1Gb3JtYXRFdGMg
PSBuZXdFbnVtOworICAgIHJldHVybiBTX09LOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworSFJF
U1VMVCBEUlREYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZShEUlREYXRhT2JqZWN0KiogcmVzdWx0
KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICpy
ZXN1bHQgPSBuZXcgRFJURGF0YU9iamVjdCgpOworICAgIHJldHVybiBTX09LOworfQorCitEUlRE
YXRhT2JqZWN0OjpEUlREYXRhT2JqZWN0KCkKKyAgICA6IG1fcmVmKDEpCit7Cit9CisKK0RSVERh
dGFPYmplY3Q6On5EUlREYXRhT2JqZWN0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fbWVkaXVtLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obV9tZWRp
dW1baV0pOworICAgICAgICBkZWxldGUgbV9tZWRpdW1baV07CisgICAgfQorICAgIFdURjo6ZGVs
ZXRlQWxsVmFsdWVzKG1fZm9ybWF0cyk7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0
OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAq
cHB2T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8
IElzRXF1YWxJSUQocmlpZCwgSUlEX0lEYXRhT2JqZWN0KSkKKyAgICAgICAgKnBwdk9iamVjdCA9
IHRoaXM7CisKKyAgICBpZiAoKnBwdk9iamVjdCkgeworICAgICAgICBBZGRSZWYoKTsKKyAgICAg
ICAgcmV0dXJuIFNfT0s7CisgICAgfQorICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitT
VERNRVRIT0RJTVBfKFVMT05HKSBEUlREYXRhT2JqZWN0OjpBZGRSZWYoKQoreworICAgIHJldHVy
biBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRIT0RJTVBfKFVMT05H
KSBEUlREYXRhT2JqZWN0OjpSZWxlYXNlKCkKK3sKKyAgICBsb25nIHJlZkNvdW50ID0gSW50ZXJs
b2NrZWREZWNyZW1lbnQoJm1fcmVmKTsKKyAgICBpZiAoIXJlZkNvdW50KQorICAgICAgICBkZWxl
dGUgdGhpczsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRh
T2JqZWN0OjpHZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdGV0Y0luLCBTVEdNRURJVU0qIHBtZWRp
dW0pCit7IAorICAgIGlmICghcGZvcm1hdGV0Y0luIHx8ICFwbWVkaXVtKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworICAgIHBtZWRpdW0tPmhHbG9iYWwgPSAwOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2Zvcm1hdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBmb3Jt
YXRldGNJbi0+bGluZGV4ID09IG1fZm9ybWF0c1tpXS0+bGluZGV4ICYmIHBmb3JtYXRldGNJbi0+
ZHdBc3BlY3QgPT0gbV9mb3JtYXRzW2ldLT5kd0FzcGVjdCAmJiBwZm9ybWF0ZXRjSW4tPmNmRm9y
bWF0ID09IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpIHsKKyAgICAgICAgICAgIENvcHlNZWRpdW0o
cG1lZGl1bSwgbV9tZWRpdW1baV0sIG1fZm9ybWF0c1tpXSk7CisgICAgICAgICAgICByZXR1cm4g
U19PSzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRFZfRV9GT1JNQVRFVEM7Cit9CisK
K1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpHZXREYXRhSGVyZShGT1JNQVRFVEMqLCBTVEdN
RURJVU0qKQoreyAKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitTVERNRVRIT0RJTVAgRFJU
RGF0YU9iamVjdDo6UXVlcnlHZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdGV0YykKK3sgCisgICAg
aWYgKCFwZm9ybWF0ZXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKCEo
RFZBU1BFQ1RfQ09OVEVOVCAmIHBmb3JtYXRldGMtPmR3QXNwZWN0KSkKKyAgICAgICAgcmV0dXJu
IChEVl9FX0RWQVNQRUNUKTsKKworICAgIEhSRVNVTFQgaFJlc3VsdCA9IERWX0VfVFlNRUQ7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zvcm1hdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKHBmb3JtYXRldGMtPnR5bWVkICYgbV9mb3JtYXRzW2ldLT50eW1lZCkgeworCQkJaWYg
KHBmb3JtYXRldGMtPmNmRm9ybWF0ID09IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpIHsKKyAgICAg
ICAgICAgICAgICBoUmVzdWx0ID0gU19PSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkJCX0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBoUmVzdWx0ID0gRFZfRV9DTElQRk9S
TUFUOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGhSZXN1bHQgPSBEVl9FX1RZTUVEOwor
ICAgIH0KKyAgICByZXR1cm4gaFJlc3VsdDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmpl
Y3Q6OkdldENhbm9uaWNhbEZvcm1hdEV0YyhGT1JNQVRFVEMqLCBGT1JNQVRFVEMqKQoreyAKKyAg
ICByZXR1cm4gREFUQV9TX1NBTUVGT1JNQVRFVEM7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRh
T2JqZWN0OjpTZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdGV0YywgU1RHTUVESVVNKiBwbWVkaXVt
LCBCT09MIGZSZWxlYXNlKQoreyAKKyAgICBpZiAoIXBmb3JtYXRldGMgfHwgIXBtZWRpdW0pCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBGT1JNQVRFVEMqIGZvcm1hdGV0YyA9IG5l
dyBGT1JNQVRFVEM7CisgICAgaWYgKCFmb3JtYXRldGMpCisgICAgICAgIHJldHVybiBFX09VVE9G
TUVNT1JZOworCisgICAgU1RHTUVESVVNKiBwU3RnTWVkID0gbmV3IFNUR01FRElVTTsKKworICAg
IGlmICghcFN0Z01lZCkgeworICAgICAgICBkZWxldGUgZm9ybWF0ZXRjOworICAgICAgICByZXR1
cm4gRV9PVVRPRk1FTU9SWTsKKyAgICB9CisKKyAgICBaZXJvTWVtb3J5KGZvcm1hdGV0Yywgc2l6
ZW9mKEZPUk1BVEVUQykpOworICAgIFplcm9NZW1vcnkocFN0Z01lZCwgc2l6ZW9mKFNUR01FRElV
TSkpOworCisgICAgKmZvcm1hdGV0YyA9ICpwZm9ybWF0ZXRjOworICAgIG1fZm9ybWF0cy5hcHBl
bmQoZm9ybWF0ZXRjKTsKKworICAgIGlmIChmUmVsZWFzZSkKKyAgICAgICAgKnBTdGdNZWQgPSAq
cG1lZGl1bTsKKyAgICBlbHNlCisgICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1lZGl1bSwg
cGZvcm1hdGV0Yyk7CisgICAgbV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworCisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK3ZvaWQgRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bShTVEdNRURJVU0qIHBN
ZWREZXN0LCBTVEdNRURJVU0qIHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYykKK3sKKyAgICBz
d2l0Y2ggKHBNZWRTcmMtPnR5bWVkKSB7CisjaWYgIU9TKFdJTkNFKQorICAgIGNhc2UgVFlNRURf
SEdMT0JBTDoKKyAgICAgICAgcE1lZERlc3QtPmhHbG9iYWwgPSBzdGF0aWNfY2FzdDxIR0xPQkFM
PihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhHbG9iYWwsIHBGbXRTcmMtPmNmRm9ybWF0LCAw
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfR0RJOgorICAgICAgICBwTWVkRGVz
dC0+aEJpdG1hcCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNy
Yy0+aEJpdG1hcCwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUWU1FRF9NRlBJQ1Q6CisgICAgICAgIHBNZWREZXN0LT5oTWV0YUZpbGVQaWN0ID0gc3Rh
dGljX2Nhc3Q8SE1FVEFGSUxFUElDVD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oTWV0YUZp
bGVQaWN0LCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRZTUVEX0VOSE1GOgorICAgICAgICBwTWVkRGVzdC0+aEVuaE1ldGFGaWxlID0gc3RhdGljX2Nh
c3Q8SEVOSE1FVEFGSUxFPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhFbmhNZXRhRmlsZSwg
cEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9G
SUxFOgorICAgICAgICBwTWVkU3JjLT5scHN6RmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxMUE9MRVNU
Uj4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5scHN6RmlsZU5hbWUsIHBGbXRTcmMtPmNmRm9y
bWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBUWU1FRF9JU1RSRUFN
OgorICAgICAgICBwTWVkRGVzdC0+cHN0bSA9IHBNZWRTcmMtPnBzdG07CisgICAgICAgIHBNZWRT
cmMtPnBzdG0tPkFkZFJlZigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0lTVE9S
QUdFOgorICAgICAgICBwTWVkRGVzdC0+cHN0ZyA9IHBNZWRTcmMtPnBzdGc7CisgICAgICAgIHBN
ZWRTcmMtPnBzdGctPkFkZFJlZigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcE1lZERlc3QtPnR5bWVkID0gcE1lZFNyYy0+dHltZWQ7
CisgICAgcE1lZERlc3QtPnBVbmtGb3JSZWxlYXNlID0gMDsKKyAgICBpZiAocE1lZFNyYy0+cFVu
a0ZvclJlbGVhc2UpIHsKKyAgICAgICAgcE1lZERlc3QtPnBVbmtGb3JSZWxlYXNlID0gcE1lZFNy
Yy0+cFVua0ZvclJlbGVhc2U7CisgICAgICAgIHBNZWRTcmMtPnBVbmtGb3JSZWxlYXNlLT5BZGRS
ZWYoKTsKKyAgICB9Cit9CitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6RW51bUZvcm1hdEV0
YyhEV09SRCBkd0RpcmVjdGlvbiwgSUVudW1GT1JNQVRFVEMqKiBwcGVudW1Gb3JtYXRFdGMpCit7
IAorICAgIGlmICghcHBlbnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
CisgICAgKnBwZW51bUZvcm1hdEV0YyA9IDA7CisgICAgc3dpdGNoIChkd0RpcmVjdGlvbikgewor
ICAgIGNhc2UgREFUQURJUl9HRVQ6CisgICAgICAgICpwcGVudW1Gb3JtYXRFdGMgPSBuZXcgV0NF
bnVtRm9ybWF0RXRjKG1fZm9ybWF0cyk7CisgICAgICAgIGlmICghKCpwcGVudW1Gb3JtYXRFdGMp
KQorICAgICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBEQVRBRElSX1NFVDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRV9OT1RJ
TVBMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RE
TUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkRBZHZpc2UoRk9STUFURVRDKiwgRFdPUkQsIElBZHZp
c2VTaW5rKiwgRFdPUkQqKQoreyAKKyAgICByZXR1cm4gT0xFX0VfQURWSVNFTk9UU1VQUE9SVEVE
OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKERXT1JEKQorewor
ICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJU
RGF0YU9iamVjdDo6RW51bURBZHZpc2UoSUVudW1TVEFUREFUQSoqKQoreworICAgIHJldHVybiBP
TEVfRV9BRFZJU0VOT1RTVVBQT1JURUQ7Cit9CisKK3ZvaWQgRFJURGF0YU9iamVjdDo6Y2xlYXJE
YXRhKENMSVBGT1JNQVQgZm9ybWF0KQoreworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisgICAg
d2hpbGUgKHBvc2l0aW9uIDwgbV9mb3JtYXRzLnNpemUoKSkgeworICAgICAgICBpZiAobV9mb3Jt
YXRzW3Bvc2l0aW9uXS0+Y2ZGb3JtYXQgPT0gZm9ybWF0KSB7CisgICAgICAgICAgICBGT1JNQVRF
VEMqIGN1cnJlbnQgPSBtX2Zvcm1hdHNbcG9zaXRpb25dOworICAgICAgICAgICAgbV9mb3JtYXRz
W3Bvc2l0aW9uXSA9IG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV07CisgICAgICAgICAg
ICBtX2Zvcm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAgICAgIG1fZm9y
bWF0cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBkZWxldGUgY3VycmVudDsKKyAgICAgICAg
ICAgIFNUR01FRElVTSogbWVkaXVtID0gbV9tZWRpdW1bcG9zaXRpb25dOworICAgICAgICAgICAg
bV9tZWRpdW1bcG9zaXRpb25dID0gbV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV07CisgICAg
ICAgICAgICBtX21lZGl1bVttX21lZGl1bS5zaXplKCkgLSAxXSA9IDA7CisgICAgICAgICAgICBt
X21lZGl1bS5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1
bSk7CisgICAgICAgICAgICBkZWxldGUgbWVkaXVtOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcG9zaXRpb24rKzsKKyAgICB9Cit9CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaAkocmV2aXNpb24gMCkNCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCAr
MSw3MSBAQA0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERSVERhdGFPYmplY3RfaAorI2RlZmluZSBEUlRE
YXRhT2JqZWN0X2gKKworI2luY2x1ZGUgPFNobE9iai5oPgorI2luY2x1ZGUgPG9iamlkbC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworRk9STUFURVRDKiBjZkhEcm9wRm9ybWF0KCk7CisK
K0ZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKTsKKworRk9STUFURVRDKiBjZlVybFdGb3Jt
YXQoKTsKKworY2xhc3MgRFJURGF0YU9iamVjdCA6IHB1YmxpYyBJRGF0YU9iamVjdCB7CitwdWJs
aWM6CisgICAgdm9pZCBDb3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSog
cE1lZFNyYywgRk9STUFURVRDKiBwRm10U3JjKTsKKworICAgIC8vIElVbmtub3duCisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlk
LCB2b2lkKiogcHB2T2JqZWN0KTsgICAgICAgIAorICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBS
ZWxlYXNlKCk7CisKKyAgICAvLyBJRGF0YU9iamVjdAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBHZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdEluLCBTVEdNRURJVU0qIHBt
ZWRpdW0pOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREYXRhSGVy
ZShGT1JNQVRFVEMqIHBmb3JtYXQsIFNUR01FRElVTSogcG1lZGl1bSk7CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5R2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXQp
OworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDYW5vbmljYWxGb3Jt
YXRFdGMoRk9STUFURVRDKiBwZm9ybWF0ZWN0SW4sIEZPUk1BVEVUQyogcGZvcm1hdE91dCk7Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldERhdGEoRk9STUFURVRDKiBw
Zm9ybWF0LCBTVEdNRURJVU0qcG1lZGl1bSwgQk9PTCByZWxlYXNlKTsKKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRW51bUZvcm1hdEV0YyhEV09SRCBkd0RpcmVjdGlvbiwg
SUVudW1GT1JNQVRFVEMqKiBwcGVudW1Gb3JtYXRFdGMpOworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBEQWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNlU2luayos
IERXT1JEKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERVbmFkdmlz
ZShEV09SRCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVudW1EQWR2
aXNlKElFbnVtU1RBVERBVEEqKik7CisKKyAgICB2b2lkIGNsZWFyRGF0YShDTElQRk9STUFUKTsK
KyAgICAKKyAgICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVJbnN0YW5jZShEUlREYXRhT2JqZWN0Kiop
OworcHJpdmF0ZToKKyAgICBEUlREYXRhT2JqZWN0KCk7CisgICAgfkRSVERhdGFPYmplY3QoKTsK
KyAgICBsb25nIG1fcmVmOworICAgIFZlY3RvcjxGT1JNQVRFVEMqPiBtX2Zvcm1hdHM7CisgICAg
VmVjdG9yPFNUR01FRElVTSo+IG1fbWVkaXVtOworfTsKKworI2VuZGlmIC8vIERSVERhdGFPYmpl
Y3RfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3Bw
CShyZXZpc2lvbiAwKQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNl
LmNwcAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsODYgQEANCisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
UlREcm9wU291cmNlLmgiCisKK0RSVERyb3BTb3VyY2U6OkRSVERyb3BTb3VyY2UoKQorICAgIDog
bV9yZWYoMSkKKyAgICAsIG1fZHJvcHBlZChmYWxzZSkKK3sKK30KKworRFJURHJvcFNvdXJjZTo6
fkRSVERyb3BTb3VyY2UoKQoreworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6UXVl
cnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9i
amVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0Vx
dWFsSUlEKHJpaWQsIElJRF9JRHJvcFNvdXJjZSkpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRo
aXM7CisgICAgICAgIEFkZFJlZigpOworCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKwor
ICAgIHJldHVybiBFX05PSU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlRE
cm9wU291cmNlOjpBZGRSZWYoKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgm
bV9yZWYpOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlREcm9wU291cmNlOjpSZWxlYXNl
KCkKK3sKKyAgICBsb25nIHJlZkNvdW50ID0gSW50ZXJsb2NrZWREZWNyZW1lbnQoJm1fcmVmKTsK
KyAgICBpZiAoIXJlZkNvdW50KQorICAgICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmVm
Q291bnQ7Cit9CisKK0hSRVNVTFQgRFJURHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UoSURyb3BT
b3VyY2UqKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBFX0lO
VkFMSURBUkc7CisgICAgKnJlc3VsdCA9IG5ldyBEUlREcm9wU291cmNlOworICAgIHJldHVybiBT
X09LOworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6UXVlcnlDb250aW51ZURyYWco
Qk9PTCBmRXNjYXBlUHJlc3NlZCwgRFdPUkQgZ3JmS2V5U3RhdGUpCit7CisgICAgaWYgKGZFc2Nh
cGVQcmVzc2VkIHx8ICEoZ3JmS2V5U3RhdGUgJiAoTUtfTEJVVFRPTiB8IE1LX1JCVVRUT04pKSkg
eworICAgICAgICBtX2Ryb3BwZWQgPSAhZkVzY2FwZVByZXNzZWQ7CisgICAgICAgIHJldHVybiBm
RXNjYXBlUHJlc3NlZCA/IERSQUdEUk9QX1NfQ0FOQ0VMIDogRFJBR0RST1BfU19EUk9QOworICAg
IH0KKworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6
R2l2ZUZlZWRiYWNrKERXT1JEIGR3RWZmZWN0KQoreworICAgIHJldHVybiBEUkFHRFJPUF9TX1VT
RURFRkFVTFRDVVJTT1JTOworfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERy
b3BTb3VyY2UuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlRE
cm9wU291cmNlLmgJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RS
VERyb3BTb3VyY2UuaAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNDggQEANCisvKgorKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyovCisKKyNpZm5kZWYgRFJURHJvcFNvdXJjZV9o
CisjZGVmaW5lIERSVERyb3BTb3VyY2VfaAorCisjaW5jbHVkZSA8U2hsT2JqLmg+CisjaW5jbHVk
ZSA8d2luZG93cy5oPgorCitjbGFzcyBEUlREcm9wU291cmNlIDogcHVibGljIElEcm9wU291cmNl
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJ
bnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOyAgICAgICAgCisgICAgdmly
dHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05H
IFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgUXVlcnlDb250aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJlc3NlZCwgRFdPUkQg
Z3JmS2V5U3RhdGUpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHaXZl
RmVlZGJhY2soRFdPUkQgZHdFZmZlY3QpOworCisgICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlSW5z
dGFuY2UoSURyb3BTb3VyY2UqKiByZXN1bHQpOworcHJpdmF0ZToKKyAgICBEUlREcm9wU291cmNl
KCk7CisgICAgfkRSVERyb3BTb3VyY2UoKTsKKyAgICBsb25nIG1fcmVmOworICAgIGJvb2wgbV9k
cm9wcGVkOworfTsKKworI2VuZGlmIC8vIERSVERyb3BTb3VyY2VfaApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvag0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHJldmlzaW9uIDEx
ODA5NikNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9q
CSh3b3JraW5nIGNvcHkpDQpAQCAtNDAyLDYgKzQwMiwyMiBAQA0KIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0LmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJU
RHJvcFNvdXJjZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii5cRFJURHJvcFNvdXJjZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuXEV2ZW50U2VuZGVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50U2VuZGVyLmNwcAkocmV2aXNpb24g
MTE4MDk2KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJKHdv
cmtpbmcgY29weSkNCkBAIC0xLDUgKzEsNiBAQA0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOSwxNiArMzAsMTkgQEANCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRXZlbnRTZW5kZXIuaCIKIAorI2luY2x1ZGUgIkRSVERhdGFPYmplY3QuaCIKKyNpbmNs
dWRlICJEUlREcm9wU291cmNlLmgiCiAjaW5jbHVkZSAiRHJhZ2dpbmdJbmZvLmgiCiAjaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKIAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KKyNpbmNsdWRlIDxXZWJLaXQv
V2ViS2l0Lmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotI2luY2x1ZGUg
PFdlYktpdC9XZWJLaXQuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKICNkZWZpbmUgV01fRFJUX1NFTkRfUVVFVUVEX0VWRU5UIChXTV9B
UFArMSkKIApAQCAtNjMwLDYgKzYzNCw4NiBAQA0KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGJlZ2luRHJhZ1dpdGhGaWxl
c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKKworICAgIEpTT2JqZWN0UmVmIGZpbGVzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYXJndW1lbnRzWzBdLCAwKTsKKworICAgIGlmICghZmlsZXNBcnJheSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNTdHJpbmdSZWYgbGVu
Z3RoUHJvcGVydHkgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIik7Cisg
ICAgVmVjdG9yPFVDaGFyPiBmaWxlczsKKyAgICBpbnQgZmlsZXNDb3VudCA9IEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzQXJyYXksIGxl
bmd0aFByb3BlcnR5LCAwKSwgMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlc0NvdW50
OyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4KGNvbnRleHQsIGZpbGVzQXJyYXksIGksIDApOworICAgICAgICBKU1N0cmluZ1JlZiBm
aWxlID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7CisgICAgICAgIGZp
bGVzLmFwcGVuZChKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIoZmlsZSksIEpTU3RyaW5nR2V0TGVu
Z3RoKGZpbGUpKTsKKyAgICAgICAgZmlsZXMuYXBwZW5kKDApOworICAgICAgICBKU1N0cmluZ1Jl
bGVhc2UoZmlsZSk7CisgICAgfQorCisgICAgaWYgKGZpbGVzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgLy8gV2Ugc2hvdWxk
IGFwcGVuZCAiMCIgaW4gdGhlIGVuZCBvZiB8ZmlsZXN8IHNvIHRoYXQgfERyYWdRdWVyeUZpbGVX
fCByZXRyaWV2ZWQgdGhlIG51bWJlciBvZiBmaWxlcyBjb3JyZWN0bHkgZnJvbSBPbGUgQ2xpcGJv
YXJkLgorICAgIGZpbGVzLmFwcGVuZCgwKTsKKworICAgIFNUR01FRElVTSBoRHJvcE1lZGl1bSA9
IHswfTsKKyAgICBoRHJvcE1lZGl1bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgU0laRV9U
IGRyb3BGaWxlc1NpemUgPSBzaXplb2YoRFJPUEZJTEVTKSArIChzaXplb2YoV0NIQVIpICogZmls
ZXMuc2l6ZSgpKTsKKyAgICBoRHJvcE1lZGl1bS5oR2xvYmFsID0gR2xvYmFsQWxsb2MoR01FTV9N
T1ZFQUJMRSB8IEdNRU1fRERFU0hBUkUsIGRyb3BGaWxlc1NpemUpOworICAgIERST1BGSUxFUyog
ZHJvcEZpbGVzID0gcmVpbnRlcnByZXRfY2FzdDxEUk9QRklMRVMqPihHbG9iYWxMb2NrKGhEcm9w
TWVkaXVtLmhHbG9iYWwpKTsKKyAgICBtZW1zZXQoZHJvcEZpbGVzLCAwLCBzaXplb2YoRFJPUEZJ
TEVTKSk7CisgICAgZHJvcEZpbGVzLT5wRmlsZXMgPSBzaXplb2YoRFJPUEZJTEVTKTsKKyAgICBk
cm9wRmlsZXMtPmZXaWRlID0gVFJVRTsKKworICAgIFVDaGFyKiBkYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxVQ2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGRyb3BGaWxlcykgKyBzaXplb2Yo
RFJPUEZJTEVTKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgZGF0YVtpXSA9IGZpbGVzW2ldOworICAgIEdsb2JhbFVubG9jayhoRHJvcE1l
ZGl1bS5oR2xvYmFsKTsgCisKKyAgICBTVEdNRURJVU0gaEZpbGVOYW1lTWVkaXVtID0gezB9Owor
ICAgIGhGaWxlTmFtZU1lZGl1bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgU0laRV9UIGhG
aWxlTmFtZVNpemUgPSBzaXplb2YoV0NIQVIpICogZmlsZXMuc2l6ZSgpOworICAgIGhGaWxlTmFt
ZU1lZGl1bS5oR2xvYmFsID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1fRERFU0hB
UkUsIGhGaWxlTmFtZVNpemUpOworICAgIFdDSEFSKiBoRmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxX
Q0hBUio+KEdsb2JhbExvY2soaEZpbGVOYW1lTWVkaXVtLmhHbG9iYWwpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKQorICAgICAgICBoRmlsZU5hbWVbaV0g
PSBmaWxlc1tpXTsKKyAgICBHbG9iYWxVbmxvY2soaEZpbGVOYW1lTWVkaXVtLmhHbG9iYWwpOwor
CisgICAgaWYgKGRyYWdnaW5nSW5mbykgeworICAgICAgICBkZWxldGUgZHJhZ2dpbmdJbmZvOwor
ICAgICAgICBkcmFnZ2luZ0luZm8gPSAwOworICAgIH0KKworICAgIENPTVB0cjxEUlREYXRhT2Jq
ZWN0PiBkYXRhT2JlamVjdDsKKyAgICBDT01QdHI8SURyb3BTb3VyY2U+IHNvdXJjZTsKKyAgICBp
ZiAoRkFJTEVEKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKCZkYXRhT2JlamVjdCkpKQor
ICAgICAgICBkYXRhT2JlamVjdCA9IDA7CisKKyAgICBpZiAoRkFJTEVEKERSVERyb3BTb3VyY2U6
OmNyZWF0ZUluc3RhbmNlKCZzb3VyY2UpKSkKKyAgICAgICAgc291cmNlID0gMDsKKworICAgIGlm
IChkYXRhT2JlamVjdCAmJiBzb3VyY2UpIHsKKyAgICAgICAgZHJhZ2dpbmdJbmZvID0gbmV3IERy
YWdnaW5nSW5mbyhkYXRhT2JlamVjdC5nZXQoKSwgc291cmNlLmdldCgpKTsKKyAgICAgICAgZHJh
Z2dpbmdJbmZvLT5zZXRQZXJmb3JtZWREcm9wRWZmZWN0KERST1BFRkZFQ1RfQ09QWSk7CisgICAg
fQorCisgICAgaWYgKGRyYWdnaW5nSW5mbykgeworICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFP
YmplY3QoKS0+U2V0RGF0YShjZkhEcm9wRm9ybWF0KCksICZoRHJvcE1lZGl1bSwgRkFMU0UpOwor
ICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZkZpbGVOYW1lV0Zv
cm1hdCgpLCAmaEZpbGVOYW1lTWVkaXVtLCBGQUxTRSk7CisgICAgICAgIGRyYWdnaW5nSW5mby0+
ZGF0YU9iamVjdCgpLT5TZXREYXRhKGNmVXJsV0Zvcm1hdCgpLCAmaEZpbGVOYW1lTWVkaXVtLCBG
QUxTRSk7CisgICAgICAgIE9sZVNldENsaXBib2FyZChkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3Qo
KSk7CisgICAgICAgIGRvd24gPSB0cnVlOworICAgIH0KKworICAgIEpTU3RyaW5nUmVsZWFzZShs
ZW5ndGhQcm9wZXJ0eSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCiBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAg
ICB7ICJjb250ZXh0Q2xpY2siLCBjb250ZXh0Q2xpY2tDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsg
Im1vdXNlRG93biIsIG1vdXNlRG93bkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC02NDIsNiArNzI2LDcg
QEANCiAgICAgeyAidGV4dFpvb21PdXQiLCB0ZXh0Wm9vbU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgeyAiem9vbVBhZ2VJbiIsIHpvb21QYWdlSW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpv
b21QYWdlT3V0Iiwgem9vbVBhZ2VPdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgImJlZ2luRHJh
Z1dpdGhGaWxlcyIsIGJlZ2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAw
LCAwLCAwIH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144336</attachid>
            <date>2012-05-28 05:08:43 -0700</date>
            <delta_ts>2012-05-29 22:44:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles5.patch</filename>
            <type>text/plain</type>
            <size>31363</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDExODY0NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA1LTI3ICBYdWVxaW5nIEh1YW5nICA8
aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAgICAgICBUaGUgdGVzdHMgbGlzdGVkIGluIHdp
bi9Ta2lwcGVkIHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIHRoaXMgY2hhbmdlLCBidXQgc29tZSBv
ZiB0aGVzZSBuZWVkIHRvIHJlYmFzZWxpbmUgaW4gV2luZG93cywgd2UgZG8gdGhhdCBpbiBidWcj
ODc2MTAuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
NjI5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIwMTItMDUtMjcgIFRha2FzaGkgU2FrYW1vdG8gIDx0
YXNha0Bnb29nbGUuY29tPgogCiAgICAgICAgIGZhc3QvZG9tL3NoYWRvdy9jb250ZW50LWVsZW1l
bnQtaW4tbWVkaWEuaHRtbCBpcyB3cm9uZy4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CShyZXZpc2lvbiAxMTgwOTYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAko
d29ya2luZyBjb3B5KQpAQCAtMjQyLDEzICsyNDIsOCBAQAogZWRpdGluZy9wYXN0ZWJvYXJkL2Zp
bGUtZHJhZy10by1lZGl0YWJsZS5odG1sCiBlZGl0aW5nL3Bhc3RlYm9hcmQvZmlsZS1pbnB1dC1m
aWxlcy1hY2Nlc3MuaHRtbAogZmFzdC9ldmVudHMvZHJhZy10by1uYXZpZ2F0ZS5odG1sCi1mYXN0
L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRtbAotZmFzdC9mb3Jtcy9maWxlL2Zp
bGUtaW5wdXQtY2hhbmdlLWV2ZW50Lmh0bWwKLWZhc3QvZm9ybXMvZmlsZS9nZXQtZmlsZS11cGxv
YWQuaHRtbAogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUtcmUtcmVuZGVyLmh0bWwKIGh0dHAv
dGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5odG1sCi1mYXN0
L2V2ZW50cy9kcmFnLWZpbGUtY3Jhc2guaHRtbAotZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0
bWVzc2FnZS1jbG9uZS5odG1sCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWNs
b25lLWZyYW1lcy5odG1sCiBmYXN0L2V2ZW50cy9kcm9wem9uZS0wMDQuaHRtbAogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMTg2NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNS0yNyAgWHVlcWluZyBIdWFuZyAg
PGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFn
V2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB3aW5kb3dzLCB3aGljaCBibG9ja2Vk
IGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0IGNhc2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IFRoaXMgY2hhbmdlIHdhcyByZXF1aXJlbWVu
dCBmb3IgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzLCB1cGRhdGUgd2luL3NraXBwZWQg
ZmlsZSB0byByZW1vdmUgZHJhZy1kcm9wIHJlbGVhdGVkIHRlc3QgY2FzZSB3aWxsIHZhbGlhdGUg
dGhpcy4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcyk6CisKIDIwMTItMDUtMjcgIFNoaW55
YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGN1dCwgY29weSBv
ciBwYXN0ZSBldmVudCB3b24ndCBiZSBmaXJlZCBpbiBTaGFkb3cgRE9NLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCShyZXZpc2lvbiAxMTgwOTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFp
ZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTEsNyArMTEyLDI0IEBACiAKIHVuc2lnbmVkIERyYWdEYXRhOjpudW1iZXJPZkZp
bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0
YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVEdNRURJVU0gbWVkaXVtOworICAgIGlmIChG
QUlMRUQobV9wbGF0Zm9ybURyYWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQoKSwgJm1lZGl1
bSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhEUk9QIGhkcm9wID0gc3RhdGljX2Nhc3Q8
SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsKKworICAgIGlmICghaGRyb3ApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVtRmlsZXMgPSBEcmFnUXVlcnlGaWxl
VyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CisKKyAgICBEcmFnRmluaXNoKGhkcm9wKTsKKyAg
ICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOworCisgICAgcmV0dXJuIG51bUZpbGVzOwog
fQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBj
b25zdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTE4NjQ4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTItMDUtMjcgIFh1ZXFpbmcgSHVhbmcgIDxodWFuZ3h1ZXFpbmdA
YmFpZHUuY29tPgorCisgICAgICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyBzaG91
bGQgYmUgaW1wbGVtZW50ZWQgaW4gV2luZG93cywgd2hpY2ggYmxvY2tlZCBkcmFnIGFuZCBkcm9w
IHJlbGF0ZWQgdGVzdCBjYXNlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHA6IEFkZGVk
LgorICAgICAgICAoY2ZIRHJvcEZvcm1hdCk6CisgICAgICAgIChjZkZpbGVOYW1lV0Zvcm1hdCk6
CisgICAgICAgIChjZlVybFdGb3JtYXQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjKToKKyAg
ICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKFdDRW51
bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpB
ZGRSZWYpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZWxlYXNlKToKKyAgICAgICAgKFdD
RW51bUZvcm1hdEV0Yzo6TmV4dCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OlNraXApOgor
ICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZXNldCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRF
dGM6OkNsb25lKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKToKKyAg
ICAgICAgKERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QpOgorICAgICAgICAoRFJURGF0YU9i
amVjdDo6fkRSVERhdGFPYmplY3QpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6UXVlcnlJbnRl
cmZhY2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6QWRkUmVmKToKKyAgICAgICAgKERSVERh
dGFPYmplY3Q6OlJlbGVhc2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0RGF0YSk6Cisg
ICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXREYXRhSGVyZSk6CisgICAgICAgIChEUlREYXRhT2Jq
ZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0Q2Fub25pY2Fs
Rm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlNldERhdGEpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpFbnVt
Rm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRBZHZpc2UpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkVudW1E
QWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YSk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaDogQWRkZWQuCisgICAgICAgIChEUlRE
YXRhT2JqZWN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5j
cHA6IEFkZGVkLgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJjZSk6CisgICAg
ICAgIChEUlREcm9wU291cmNlOjp+RFJURHJvcFNvdXJjZSk6CisgICAgICAgIChEUlREcm9wU291
cmNlOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpBZGRSZWYpOgor
ICAgICAgICAoRFJURHJvcFNvdXJjZTo6UmVsZWFzZSk6CisgICAgICAgIChEUlREcm9wU291cmNl
OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpRdWVyeUNvbnRpbnVl
RHJhZyk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2spOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmg6IEFkZGVkLgorICAgICAgICAoRFJU
RHJvcFNvdXJjZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwOgor
ICAgICAgICAoYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2spOgorCiAyMDEyLTA1LTI3ICBTdWRh
cnNhbmEgTmFnaW5lbmkgIDxzdWRhcnNhbmEubmFnaW5lbmlAbGludXguaW50ZWwuY29tPgogCiAg
ICAgICAgIFtFRkxdIEVuYWJsZSBibG9iIHN1cHBvcnQgZm9yIHRoZSBFRkwgcG9ydApJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRFJURGF0YU9iamVjdC5oIgorCitGT1JNQVRFVEMqIGNmSERyb3BGb3JtYXQoKQorewor
ICAgIHN0YXRpYyBGT1JNQVRFVEMgdXJsRm9ybWF0ID0ge0NGX0hEUk9QLCAwLCBEVkFTUEVDVF9D
T05URU5ULCAtMSwgVFlNRURfSEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisK
K0ZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKQoreworICAgIHN0YXRpYyBVSU5UIGNmID0g
UmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoTCJGaWxlTmFtZVciKTsKKyAgICBzdGF0aWMgRk9STUFU
RVRDIHVybEZvcm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9C
QUx9OworICAgIHJldHVybiAmdXJsRm9ybWF0OworfQorCitGT1JNQVRFVEMqIGNmVXJsV0Zvcm1h
dCgpCit7CisgICAgc3RhdGljIFVJTlQgY2YgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMIlVu
aWZvcm1SZXNvdXJjZUxvY2F0b3JXIik7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQg
PSB7Y2YsIDAsIERWQVNQRUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1
cm4gJnVybEZvcm1hdDsKK30KKworY2xhc3MgV0NFbnVtRm9ybWF0RXRjIDogcHVibGljIElFbnVt
Rk9STUFURVRDIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXQ0VudW1Gb3JtYXRFdGMoY29uc3Qg
VmVjdG9yPEZPUk1BVEVUQz4mIGZvcm1hdHMpOworICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0
Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1hdHMpOworCisgICAgLy8gSVVua25vd24g
bWVtYmVycworICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkoUkVGSUlELCB2b2lkKiopOwor
ICAgIFNURE1FVEhPRF8oVUxPTkcsIEFkZFJlZikoKTsKKyAgICBTVERNRVRIT0RfKFVMT05HLCBS
ZWxlYXNlKSgpOworCisgICAgLy8gSUVudW1GT1JNQVRFVEMgbWVtYmVycworICAgIFNURE1FVEhP
RChOZXh0KShVTE9ORywgTFBGT1JNQVRFVEMsIFVMT05HKik7CisgICAgU1RETUVUSE9EKFNraXAp
KFVMT05HKTsKKyAgICBTVERNRVRIT0QoUmVzZXQpKCk7CisgICAgU1RETUVUSE9EKENsb25lKShJ
RW51bUZPUk1BVEVUQyoqKTsKKworcHJpdmF0ZToKKyAgICBsb25nIG1fcmVmOworICAgIFZlY3Rv
cjxGT1JNQVRFVEM+IG1fZm9ybWF0czsKKyAgICBzaXplX3QgbV9jdXJyZW50OworfTsKKworV0NF
bnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQz4mIGZv
cm1hdHMpCisgICAgOiBtX3JlZigxKQorICAgICwgbV9jdXJyZW50KDApCisgICAgLCBtX2Zvcm1h
dHMoZm9ybWF0cykKK3sKK30KKworV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29u
c3QgVmVjdG9yPEZPUk1BVEVUQyo+JiBmb3JtYXRzKQorICAgIDogbV9yZWYoMSkKKyAgICAsIG1f
Y3VycmVudCgwKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0cy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9mb3JtYXRzLmFwcGVuZCgqZm9ybWF0c1tpXSk7Cit9CisKK1NURE1F
VEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lk
KiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlE
KHJpaWQsIElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSUVudW1GT1JNQVRF
VEMpKSB7CisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKyAg
ICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Cit9
CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIFdDRW51bUZvcm1hdEV0Yzo6QWRkUmVmKCkKK3sKKyAg
ICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1fcmVmKTsKK30KKworU1RETUVUSE9ESU1Q
XyhVTE9ORykgV0NFbnVtRm9ybWF0RXRjOjpSZWxlYXNlKCkKK3sKKyAgICBsb25nIHJlZkNvdW50
ID0gSW50ZXJsb2NrZWREZWNyZW1lbnQoJm1fcmVmKTsKKyAgICBpZiAoIXJlZkNvdW50KQorICAg
ICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK1NURE1FVEhPRElN
UCBXQ0VudW1Gb3JtYXRFdGM6Ok5leHQoVUxPTkcgY2VsdCwgTFBGT1JNQVRFVEMgbHBGb3JtYXRF
dGMsIFVMT05HKiBwY2VsdEZldGNoZWQpCit7CisgICAgaWYgKHBjZWx0RmV0Y2hlZCkKKyAgICAg
ICAgKnBjZWx0RmV0Y2hlZCA9IDA7CisKKyAgICBVTE9ORyBjUmV0dXJuID0gY2VsdDsKKworICAg
IGlmIChjZWx0IDw9IDAgfHwgIWxwRm9ybWF0RXRjIHx8IG1fY3VycmVudCA+PSBtX2Zvcm1hdHMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gU19GQUxTRTsKKworICAgIGlmICghcGNlbHRGZXRjaGVk
ICYmIGNlbHQgIT0gMSkgLy8gcGNlbHRGZXRjaGVkIGNhbiBiZSAwIG9ubHkgZm9yIDEgaXRlbSBy
ZXF1ZXN0CisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgd2hpbGUgKG1fY3VycmVudCA8
IG1fZm9ybWF0cy5zaXplKCkgJiYgY1JldHVybiA+IDApIHsKKyAgICAgICAgKmxwRm9ybWF0RXRj
KysgPSBtX2Zvcm1hdHNbbV9jdXJyZW50KytdOworICAgICAgICAtLWNSZXR1cm47CisgICAgfQor
ICAgIGlmIChwY2VsdEZldGNoZWQpCisgICAgICAgICpwY2VsdEZldGNoZWQgPSBjZWx0IC0gY1Jl
dHVybjsKKworICAgIHJldHVybiAhY1JldHVybiA/IFNfT0sgOiBTX0ZBTFNFOworfQorCitTVERN
RVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpTa2lwKFVMT05HIGNlbHQpCit7CisgICAgaWYgKCht
X2N1cnJlbnQgKyBjZWx0KSA+PSBtX2Zvcm1hdHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gU19G
QUxTRTsKKyAgICBtX2N1cnJlbnQgKz0gY2VsdDsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RE
TUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6UmVzZXQoKQoreworICAgIG1fY3VycmVudCA9IDA7
CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OkNs
b25lKElFbnVtRk9STUFURVRDKiogcHBDbG9uZUVudW1Gb3JtYXRFdGMpCit7CisgICAgaWYgKCFw
cENsb25lRW51bUZvcm1hdEV0YykKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIFdD
RW51bUZvcm1hdEV0YyogbmV3RW51bSA9IG5ldyBXQ0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsK
KyAgICBpZiAoIW5ld0VudW0pCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAg
bmV3RW51bS0+QWRkUmVmKCk7CisgICAgbmV3RW51bS0+bV9jdXJyZW50ID0gbV9jdXJyZW50Owor
ICAgICpwcENsb25lRW51bUZvcm1hdEV0YyA9IG5ld0VudW07CisgICAgcmV0dXJuIFNfT0s7Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCitIUkVTVUxUIERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKERSVERhdGFPYmplY3QqKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiBFX1BPSU5URVI7CisgICAgKnJlc3VsdCA9IG5ldyBEUlREYXRhT2JqZWN0KCk7Cisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKK0RSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QoKQorICAg
IDogbV9yZWYoMSkKK3sKK30KKworRFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QoKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9tZWRpdW0uc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgUmVsZWFzZVN0Z01lZGl1bShtX21lZGl1bVtpXSk7CisgICAgICAgIGRlbGV0ZSBtX21lZGl1
bVtpXTsKKyAgICB9CisgICAgV1RGOjpkZWxldGVBbGxWYWx1ZXMobV9mb3JtYXRzKTsKK30KKwor
U1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFs
SUlEKHJpaWQsIElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSURhdGFPYmpl
Y3QpKQorICAgICAgICAqcHB2T2JqZWN0ID0gdGhpczsKKworICAgIGlmICgqcHB2T2JqZWN0KSB7
CisgICAgICAgIEFkZFJlZigpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisgICAgcmV0
dXJuIEVfTk9JTlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERhdGFPYmpl
Y3Q6OkFkZFJlZigpCit7CisgICAgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50KCZtX3JlZik7
Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERhdGFPYmplY3Q6OlJlbGVhc2UoKQorewor
ICAgIGxvbmcgcmVmQ291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlm
ICghcmVmQ291bnQpCisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsK
K30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkdldERhdGEoRk9STUFURVRDKiBwZm9y
bWF0ZXRjSW4sIFNUR01FRElVTSogcG1lZGl1bSkKK3sgCisgICAgaWYgKCFwZm9ybWF0ZXRjSW4g
fHwgIXBtZWRpdW0pCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgcG1lZGl1bS0+aEds
b2JhbCA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAocGZvcm1hdGV0Y0luLT5saW5kZXggPT0gbV9mb3JtYXRzW2ld
LT5saW5kZXggJiYgcGZvcm1hdGV0Y0luLT5kd0FzcGVjdCA9PSBtX2Zvcm1hdHNbaV0tPmR3QXNw
ZWN0ICYmIHBmb3JtYXRldGNJbi0+Y2ZGb3JtYXQgPT0gbV9mb3JtYXRzW2ldLT5jZkZvcm1hdCkg
eworICAgICAgICAgICAgQ29weU1lZGl1bShwbWVkaXVtLCBtX21lZGl1bVtpXSwgbV9mb3JtYXRz
W2ldKTsKKyAgICAgICAgICAgIHJldHVybiBTX09LOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBEVl9FX0ZPUk1BVEVUQzsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6Okdl
dERhdGFIZXJlKEZPUk1BVEVUQyosIFNUR01FRElVTSopCit7IAorICAgIHJldHVybiBFX05PVElN
UEw7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEoRk9STUFU
RVRDKiBwZm9ybWF0ZXRjKQoreyAKKyAgICBpZiAoIXBmb3JtYXRldGMpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBpZiAoIShEVkFTUEVDVF9DT05URU5UICYgcGZvcm1hdGV0Yy0+
ZHdBc3BlY3QpKQorICAgICAgICByZXR1cm4gKERWX0VfRFZBU1BFQ1QpOworCisgICAgSFJFU1VM
VCBoUmVzdWx0ID0gRFZfRV9UWU1FRDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZm9y
bWF0cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocGZvcm1hdGV0Yy0+dHltZWQgJiBtX2Zv
cm1hdHNbaV0tPnR5bWVkKSB7CisJCQlpZiAocGZvcm1hdGV0Yy0+Y2ZGb3JtYXQgPT0gbV9mb3Jt
YXRzW2ldLT5jZkZvcm1hdCkgeworICAgICAgICAgICAgICAgIGhSZXN1bHQgPSBTX09LOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCQkJfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGhSZXN1bHQgPSBEVl9FX0NMSVBGT1JNQVQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgaFJlc3VsdCA9IERWX0VfVFlNRUQ7CisgICAgfQorICAgIHJldHVybiBoUmVzdWx0OworfQor
CitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0Q2Fub25pY2FsRm9ybWF0RXRjKEZPUk1B
VEVUQyosIEZPUk1BVEVUQyopCit7IAorICAgIHJldHVybiBEQVRBX1NfU0FNRUZPUk1BVEVUQzsK
K30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlNldERhdGEoRk9STUFURVRDKiBwZm9y
bWF0ZXRjLCBTVEdNRURJVU0qIHBtZWRpdW0sIEJPT0wgZlJlbGVhc2UpCit7IAorICAgIGlmICgh
cGZvcm1hdGV0YyB8fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IEZPUk1BVEVUQyogZm9ybWF0ZXRjID0gbmV3IEZPUk1BVEVUQzsKKyAgICBpZiAoIWZvcm1hdGV0
YykKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisKKyAgICBTVEdNRURJVU0qIHBTdGdN
ZWQgPSBuZXcgU1RHTUVESVVNOworCisgICAgaWYgKCFwU3RnTWVkKSB7CisgICAgICAgIGRlbGV0
ZSBmb3JtYXRldGM7CisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgIH0KKworICAg
IFplcm9NZW1vcnkoZm9ybWF0ZXRjLCBzaXplb2YoRk9STUFURVRDKSk7CisgICAgWmVyb01lbW9y
eShwU3RnTWVkLCBzaXplb2YoU1RHTUVESVVNKSk7CisKKyAgICAqZm9ybWF0ZXRjID0gKnBmb3Jt
YXRldGM7CisgICAgbV9mb3JtYXRzLmFwcGVuZChmb3JtYXRldGMpOworCisgICAgaWYgKGZSZWxl
YXNlKQorICAgICAgICAqcFN0Z01lZCA9ICpwbWVkaXVtOworICAgIGVsc2UKKyAgICAgICAgQ29w
eU1lZGl1bShwU3RnTWVkLCBwbWVkaXVtLCBwZm9ybWF0ZXRjKTsKKyAgICBtX21lZGl1bS5hcHBl
bmQocFN0Z01lZCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwordm9pZCBEUlREYXRhT2JqZWN0
OjpDb3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9S
TUFURVRDKiBwRm10U3JjKQoreworICAgIHN3aXRjaCAocE1lZFNyYy0+dHltZWQpIHsKKyNpZiAh
T1MoV0lOQ0UpCisgICAgY2FzZSBUWU1FRF9IR0xPQkFMOgorICAgICAgICBwTWVkRGVzdC0+aEds
b2JhbCA9IHN0YXRpY19jYXN0PEhHTE9CQUw+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEds
b2JhbCwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
WU1FRF9HREk6CisgICAgICAgIHBNZWREZXN0LT5oQml0bWFwID0gc3RhdGljX2Nhc3Q8SEJJVE1B
UD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oQml0bWFwLCBwRm10U3JjLT5jZkZvcm1hdCwg
MCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX01GUElDVDoKKyAgICAgICAgcE1l
ZERlc3QtPmhNZXRhRmlsZVBpY3QgPSBzdGF0aWNfY2FzdDxITUVUQUZJTEVQSUNUPihPbGVEdXBs
aWNhdGVEYXRhKHBNZWRTcmMtPmhNZXRhRmlsZVBpY3QsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfRU5ITUY6CisgICAgICAgIHBNZWREZXN0
LT5oRW5oTWV0YUZpbGUgPSBzdGF0aWNfY2FzdDxIRU5ITUVUQUZJTEU+KE9sZUR1cGxpY2F0ZURh
dGEocE1lZFNyYy0+aEVuaE1ldGFGaWxlLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0ZJTEU6CisgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxl
TmFtZSA9IHN0YXRpY19jYXN0PExQT0xFU1RSPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxw
c3pGaWxlTmFtZSwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisjZW5k
aWYKKyAgICBjYXNlIFRZTUVEX0lTVFJFQU06CisgICAgICAgIHBNZWREZXN0LT5wc3RtID0gcE1l
ZFNyYy0+cHN0bTsKKyAgICAgICAgcE1lZFNyYy0+cHN0bS0+QWRkUmVmKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVFlNRURfSVNUT1JBR0U6CisgICAgICAgIHBNZWREZXN0LT5wc3RnID0g
cE1lZFNyYy0+cHN0ZzsKKyAgICAgICAgcE1lZFNyYy0+cHN0Zy0+QWRkUmVmKCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwTWVkRGVz
dC0+dHltZWQgPSBwTWVkU3JjLT50eW1lZDsKKyAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2Ug
PSAwOworICAgIGlmIChwTWVkU3JjLT5wVW5rRm9yUmVsZWFzZSkgeworICAgICAgICBwTWVkRGVz
dC0+cFVua0ZvclJlbGVhc2UgPSBwTWVkU3JjLT5wVW5rRm9yUmVsZWFzZTsKKyAgICAgICAgcE1l
ZFNyYy0+cFVua0ZvclJlbGVhc2UtPkFkZFJlZigpOworICAgIH0KK30KK1NURE1FVEhPRElNUCBE
UlREYXRhT2JqZWN0OjpFbnVtRm9ybWF0RXRjKERXT1JEIGR3RGlyZWN0aW9uLCBJRW51bUZPUk1B
VEVUQyoqIHBwZW51bUZvcm1hdEV0YykKK3sgCisgICAgaWYgKCFwcGVudW1Gb3JtYXRFdGMpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAqcHBlbnVtRm9ybWF0RXRjID0gMDsKKyAg
ICBzd2l0Y2ggKGR3RGlyZWN0aW9uKSB7CisgICAgY2FzZSBEQVRBRElSX0dFVDoKKyAgICAgICAg
KnBwZW51bUZvcm1hdEV0YyA9IG5ldyBXQ0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICAg
ICAgaWYgKCEoKnBwZW51bUZvcm1hdEV0YykpCisgICAgICAgICAgICByZXR1cm4gRV9PVVRPRk1F
TU9SWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERBVEFESVJfU0VUOgorICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBFX05PVElNUEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6REFkdmlz
ZShGT1JNQVRFVEMqLCBEV09SRCwgSUFkdmlzZVNpbmsqLCBEV09SRCopCit7IAorICAgIHJldHVy
biBPTEVfRV9BRFZJU0VOT1RTVVBQT1JURUQ7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2Jq
ZWN0OjpEVW5hZHZpc2UoRFdPUkQpCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEUlREYXRhT2JqZWN0OjpFbnVtREFkdmlzZShJRW51bVNU
QVREQVRBKiopCit7CisgICAgcmV0dXJuIE9MRV9FX0FEVklTRU5PVFNVUFBPUlRFRDsKK30KKwor
dm9pZCBEUlREYXRhT2JqZWN0OjpjbGVhckRhdGEoQ0xJUEZPUk1BVCBmb3JtYXQpCit7CisgICAg
c2l6ZV90IHBvc2l0aW9uID0gMDsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBtX2Zvcm1hdHMuc2l6
ZSgpKSB7CisgICAgICAgIGlmIChtX2Zvcm1hdHNbcG9zaXRpb25dLT5jZkZvcm1hdCA9PSBmb3Jt
YXQpIHsKKyAgICAgICAgICAgIEZPUk1BVEVUQyogY3VycmVudCA9IG1fZm9ybWF0c1twb3NpdGlv
bl07CisgICAgICAgICAgICBtX2Zvcm1hdHNbcG9zaXRpb25dID0gbV9mb3JtYXRzW21fZm9ybWF0
cy5zaXplKCkgLSAxXTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0g
MV0gPSAwOworICAgICAgICAgICAgbV9mb3JtYXRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAg
IGRlbGV0ZSBjdXJyZW50OworICAgICAgICAgICAgU1RHTUVESVVNKiBtZWRpdW0gPSBtX21lZGl1
bVtwb3NpdGlvbl07CisgICAgICAgICAgICBtX21lZGl1bVtwb3NpdGlvbl0gPSBtX21lZGl1bVtt
X21lZGl1bS5zaXplKCkgLSAxXTsKKyAgICAgICAgICAgIG1fbWVkaXVtW21fbWVkaXVtLnNpemUo
KSAtIDFdID0gMDsKKyAgICAgICAgICAgIG1fbWVkaXVtLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIFJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsKKyAgICAgICAgICAgIGRlbGV0ZSBtZWRpdW07
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBwb3NpdGlvbisrOwor
ICAgIH0KK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaAko
cmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBC
YWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERSVERhdGFP
YmplY3RfaAorI2RlZmluZSBEUlREYXRhT2JqZWN0X2gKKworI2luY2x1ZGUgPFNobE9iai5oPgor
I2luY2x1ZGUgPG9iamlkbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworRk9STUFURVRD
KiBjZkhEcm9wRm9ybWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKTsKKwor
Rk9STUFURVRDKiBjZlVybFdGb3JtYXQoKTsKKworY2xhc3MgRFJURGF0YU9iamVjdCA6IHB1Ymxp
YyBJRGF0YU9iamVjdCB7CitwdWJsaWM6CisgICAgdm9pZCBDb3B5TWVkaXVtKFNUR01FRElVTSog
cE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBwRm10U3JjKTsKKworICAg
IC8vIElVbmtub3duCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5
SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsgICAgICAgIAorICAgIHZp
cnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9O
RyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7CisKKyAgICAvLyBJRGF0YU9iamVjdAorICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREYXRhKEZPUk1BVEVUQyogcGZv
cm1hdEluLCBTVEdNRURJVU0qIHBtZWRpdW0pOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBHZXREYXRhSGVyZShGT1JNQVRFVEMqIHBmb3JtYXQsIFNUR01FRElVTSogcG1l
ZGl1bSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5R2V0RGF0
YShGT1JNQVRFVEMqIHBmb3JtYXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBHZXRDYW5vbmljYWxGb3JtYXRFdGMoRk9STUFURVRDKiBwZm9ybWF0ZWN0SW4sIEZPUk1B
VEVUQyogcGZvcm1hdE91dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0LCBTVEdNRURJVU0qcG1lZGl1bSwgQk9PTCByZWxl
YXNlKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRW51bUZvcm1hdEV0
YyhEV09SRCBkd0RpcmVjdGlvbiwgSUVudW1GT1JNQVRFVEMqKiBwcGVudW1Gb3JtYXRFdGMpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEQWR2aXNlKEZPUk1BVEVUQyos
IERXT1JELCBJQWR2aXNlU2luayosIERXT1JEKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERVbmFkdmlzZShEV09SRCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEVudW1EQWR2aXNlKElFbnVtU1RBVERBVEEqKik7CisKKyAgICB2b2lkIGNs
ZWFyRGF0YShDTElQRk9STUFUKTsKKyAgICAKKyAgICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVJbnN0
YW5jZShEUlREYXRhT2JqZWN0KiopOworcHJpdmF0ZToKKyAgICBEUlREYXRhT2JqZWN0KCk7Cisg
ICAgfkRSVERhdGFPYmplY3QoKTsKKyAgICBsb25nIG1fcmVmOworICAgIFZlY3RvcjxGT1JNQVRF
VEMqPiBtX2Zvcm1hdHM7CisgICAgVmVjdG9yPFNUR01FRElVTSo+IG1fbWVkaXVtOworfTsKKwor
I2VuZGlmIC8vIERSVERhdGFPYmplY3RfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0RSVERyb3BTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9EUlREcm9wU291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9EUlREcm9wU291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAorLyoK
KyogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoK
KyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoK
KyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRFJURHJvcFNvdXJjZS5oIgorCitEUlREcm9wU291cmNlOjpEUlREcm9w
U291cmNlKCkKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2Ryb3BwZWQoZmFsc2UpCit7Cit9CisK
K0RSVERyb3BTb3VyY2U6On5EUlREcm9wU291cmNlKCkKK3sKK30KKworU1RETUVUSE9ESU1QIERS
VERyb3BTb3VyY2U6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0
KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9J
VW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSURyb3BTb3VyY2UpKSB7CisgICAgICAg
ICpwcHZPYmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKworICAgICAgICByZXR1cm4g
U19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9E
SU1QXyhVTE9ORykgRFJURHJvcFNvdXJjZTo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gSW50ZXJs
b2NrZWRJbmNyZW1lbnQoJm1fcmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURHJv
cFNvdXJjZTo6UmVsZWFzZSgpCit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVj
cmVtZW50KCZtX3JlZik7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7
CisgICAgcmV0dXJuIHJlZkNvdW50OworfQorCitIUkVTVUxUIERSVERyb3BTb3VyY2U6OmNyZWF0
ZUluc3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworICAgICpyZXN1bHQgPSBuZXcgRFJURHJvcFNvdXJj
ZTsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OlF1
ZXJ5Q29udGludWVEcmFnKEJPT0wgZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRlKQor
eworICAgIGlmIChmRXNjYXBlUHJlc3NlZCB8fCAhKGdyZktleVN0YXRlICYgKE1LX0xCVVRUT04g
fCBNS19SQlVUVE9OKSkpIHsKKyAgICAgICAgbV9kcm9wcGVkID0gIWZFc2NhcGVQcmVzc2VkOwor
ICAgICAgICByZXR1cm4gZkVzY2FwZVByZXNzZWQgPyBEUkFHRFJPUF9TX0NBTkNFTCA6IERSQUdE
Uk9QX1NfRFJPUDsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1Q
IERSVERyb3BTb3VyY2U6OkdpdmVGZWVkYmFjayhEV09SRCBkd0VmZmVjdCkKK3sKKyAgICByZXR1
cm4gRFJBR0RST1BfU19VU0VERUZBVUxUQ1VSU09SUzsKK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0RSVERyb3BTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKworI2lmbmRlZiBEUlRE
cm9wU291cmNlX2gKKyNkZWZpbmUgRFJURHJvcFNvdXJjZV9oCisKKyNpbmNsdWRlIDxTaGxPYmou
aD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2NsYXNzIERSVERyb3BTb3VyY2UgOiBwdWJsaWMg
SURyb3BTb3VyY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7ICAgICAg
ICAKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOworICAgIHZp
cnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUNvbnRpbnVlRHJhZyhCT09MIGZFc2NhcGVQcmVz
c2VkLCBEV09SRCBncmZLZXlTdGF0ZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIEdpdmVGZWVkYmFjayhEV09SRCBkd0VmZmVjdCk7CisKKyAgICBzdGF0aWMgSFJFU1VM
VCBjcmVhdGVJbnN0YW5jZShJRHJvcFNvdXJjZSoqIHJlc3VsdCk7Citwcml2YXRlOgorICAgIERS
VERyb3BTb3VyY2UoKTsKKyAgICB+RFJURHJvcFNvdXJjZSgpOworICAgIGxvbmcgbV9yZWY7Cisg
ICAgYm9vbCBtX2Ryb3BwZWQ7Cit9OworCisjZW5kaWYgLy8gRFJURHJvcFNvdXJjZV9oCkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHJl
dmlzaW9uIDExODA5NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJl
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsMjIgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0LmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRh
T2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cRFJURHJvcFNvdXJjZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cRFJURHJvcFNvdXJjZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuXEV2ZW50U2VuZGVyLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJKHJldmlz
aW9uIDExODA5NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjksMTYgKzMwLDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRXZlbnRTZW5kZXIuaCIKIAorI2luY2x1ZGUgIkRSVERhdGFPYmplY3QuaCIKKyNpbmNs
dWRlICJEUlREcm9wU291cmNlLmgiCiAjaW5jbHVkZSAiRHJhZ2dpbmdJbmZvLmgiCiAjaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKIAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KKyNpbmNsdWRlIDxXZWJLaXQv
V2ViS2l0Lmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotI2luY2x1ZGUg
PFdlYktpdC9XZWJLaXQuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKICNkZWZpbmUgV01fRFJUX1NFTkRfUVVFVUVEX0VWRU5UIChXTV9B
UFArMSkKIApAQCAtNjMwLDYgKzYzNCw4NiBAQAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgYmVnaW5EcmFnV2l0aEZpbGVz
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworCisgICAgSlNPYmplY3RSZWYgZmlsZXNBcnJheSA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBhcmd1bWVudHNbMF0sIDApOworCisgICAgaWYgKCFmaWxlc0FycmF5KQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1N0cmluZ1JlZiBsZW5n
dGhQcm9wZXJ0eSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKTsKKyAg
ICBWZWN0b3I8VUNoYXI+IGZpbGVzOworICAgIGludCBmaWxlc0NvdW50ID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXNBcnJheSwgbGVu
Z3RoUHJvcGVydHksIDApLCAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzQ291bnQ7
ICsraSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0
SW5kZXgoY29udGV4dCwgZmlsZXNBcnJheSwgaSwgMCk7CisgICAgICAgIEpTU3RyaW5nUmVmIGZp
bGUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKTsKKyAgICAgICAgZmls
ZXMuYXBwZW5kKEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihmaWxlKSwgSlNTdHJpbmdHZXRMZW5n
dGgoZmlsZSkpOworICAgICAgICBmaWxlcy5hcHBlbmQoMCk7CisgICAgICAgIEpTU3RyaW5nUmVs
ZWFzZShmaWxlKTsKKyAgICB9CisKKyAgICBpZiAoZmlsZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICAvLyBXZSBzaG91bGQg
YXBwZW5kICIwIiBpbiB0aGUgZW5kIG9mIHxmaWxlc3wgc28gdGhhdCB8RHJhZ1F1ZXJ5RmlsZVd8
IHJldHJpZXZlZCB0aGUgbnVtYmVyIG9mIGZpbGVzIGNvcnJlY3RseSBmcm9tIE9sZSBDbGlwYm9h
cmQuCisgICAgZmlsZXMuYXBwZW5kKDApOworCisgICAgU1RHTUVESVVNIGhEcm9wTWVkaXVtID0g
ezB9OworICAgIGhEcm9wTWVkaXVtLnR5bWVkID0gVFlNRURfSEdMT0JBTDsKKyAgICBTSVpFX1Qg
ZHJvcEZpbGVzU2l6ZSA9IHNpemVvZihEUk9QRklMRVMpICsgKHNpemVvZihXQ0hBUikgKiBmaWxl
cy5zaXplKCkpOworICAgIGhEcm9wTWVkaXVtLmhHbG9iYWwgPSBHbG9iYWxBbGxvYyhHTUVNX01P
VkVBQkxFIHwgR01FTV9EREVTSEFSRSwgZHJvcEZpbGVzU2l6ZSk7CisgICAgRFJPUEZJTEVTKiBk
cm9wRmlsZXMgPSByZWludGVycHJldF9jYXN0PERST1BGSUxFUyo+KEdsb2JhbExvY2soaERyb3BN
ZWRpdW0uaEdsb2JhbCkpOworICAgIG1lbXNldChkcm9wRmlsZXMsIDAsIHNpemVvZihEUk9QRklM
RVMpKTsKKyAgICBkcm9wRmlsZXMtPnBGaWxlcyA9IHNpemVvZihEUk9QRklMRVMpOworICAgIGRy
b3BGaWxlcy0+ZldpZGUgPSBUUlVFOworCisgICAgVUNoYXIqIGRhdGEgPSByZWludGVycHJldF9j
YXN0PFVDaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZHJvcEZpbGVzKSArIHNpemVvZihE
Uk9QRklMRVMpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgKytp
KQorICAgICAgICBkYXRhW2ldID0gZmlsZXNbaV07CisgICAgR2xvYmFsVW5sb2NrKGhEcm9wTWVk
aXVtLmhHbG9iYWwpOyAKKworICAgIFNUR01FRElVTSBoRmlsZU5hbWVNZWRpdW0gPSB7MH07Cisg
ICAgaEZpbGVOYW1lTWVkaXVtLnR5bWVkID0gVFlNRURfSEdMT0JBTDsKKyAgICBTSVpFX1QgaEZp
bGVOYW1lU2l6ZSA9IHNpemVvZihXQ0hBUikgKiBmaWxlcy5zaXplKCk7CisgICAgaEZpbGVOYW1l
TWVkaXVtLmhHbG9iYWwgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFIHwgR01FTV9EREVTSEFS
RSwgaEZpbGVOYW1lU2l6ZSk7CisgICAgV0NIQVIqIGhGaWxlTmFtZSA9IHN0YXRpY19jYXN0PFdD
SEFSKj4oR2xvYmFsTG9jayhoRmlsZU5hbWVNZWRpdW0uaEdsb2JhbCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGhGaWxlTmFtZVtpXSA9
IGZpbGVzW2ldOworICAgIEdsb2JhbFVubG9jayhoRmlsZU5hbWVNZWRpdW0uaEdsb2JhbCk7CisK
KyAgICBpZiAoZHJhZ2dpbmdJbmZvKSB7CisgICAgICAgIGRlbGV0ZSBkcmFnZ2luZ0luZm87Cisg
ICAgICAgIGRyYWdnaW5nSW5mbyA9IDA7CisgICAgfQorCisgICAgQ09NUHRyPERSVERhdGFPYmpl
Y3Q+IGRhdGFPYmVqZWN0OworICAgIENPTVB0cjxJRHJvcFNvdXJjZT4gc291cmNlOworICAgIGlm
IChGQUlMRUQoRFJURGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UoJmRhdGFPYmVqZWN0KSkpCisg
ICAgICAgIGRhdGFPYmVqZWN0ID0gMDsKKworICAgIGlmIChGQUlMRUQoRFJURHJvcFNvdXJjZTo6
Y3JlYXRlSW5zdGFuY2UoJnNvdXJjZSkpKQorICAgICAgICBzb3VyY2UgPSAwOworCisgICAgaWYg
KGRhdGFPYmVqZWN0ICYmIHNvdXJjZSkgeworICAgICAgICBkcmFnZ2luZ0luZm8gPSBuZXcgRHJh
Z2dpbmdJbmZvKGRhdGFPYmVqZWN0LmdldCgpLCBzb3VyY2UuZ2V0KCkpOworICAgICAgICBkcmFn
Z2luZ0luZm8tPnNldFBlcmZvcm1lZERyb3BFZmZlY3QoRFJPUEVGRkVDVF9DT1BZKTsKKyAgICB9
CisKKyAgICBpZiAoZHJhZ2dpbmdJbmZvKSB7CisgICAgICAgIGRyYWdnaW5nSW5mby0+ZGF0YU9i
amVjdCgpLT5TZXREYXRhKGNmSERyb3BGb3JtYXQoKSwgJmhEcm9wTWVkaXVtLCBGQUxTRSk7Cisg
ICAgICAgIGRyYWdnaW5nSW5mby0+ZGF0YU9iamVjdCgpLT5TZXREYXRhKGNmRmlsZU5hbWVXRm9y
bWF0KCksICZoRmlsZU5hbWVNZWRpdW0sIEZBTFNFKTsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5k
YXRhT2JqZWN0KCktPlNldERhdGEoY2ZVcmxXRm9ybWF0KCksICZoRmlsZU5hbWVNZWRpdW0sIEZB
TFNFKTsKKyAgICAgICAgT2xlU2V0Q2xpcGJvYXJkKGRyYWdnaW5nSW5mby0+ZGF0YU9iamVjdCgp
KTsKKyAgICAgICAgZG93biA9IHRydWU7CisgICAgfQorCisgICAgSlNTdHJpbmdSZWxlYXNlKGxl
bmd0aFByb3BlcnR5KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewogICAg
IHsgImNvbnRleHRDbGljayIsIGNvbnRleHRDbGlja0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAi
bW91c2VEb3duIiwgbW91c2VEb3duQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTY0Miw2ICs3MjYsNyBA
QAogICAgIHsgInRleHRab29tT3V0IiwgdGV4dFpvb21PdXRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
IHsgInpvb21QYWdlSW4iLCB6b29tUGFnZUluQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJ6b29t
UGFnZU91dCIsIHpvb21QYWdlT3V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJiZWdpbkRyYWdX
aXRoRmlsZXMiLCBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgMCwg
MCwgMCB9CiB9OwogCg==
</data>
<flag name="review"
          id="151154"
          type_id="1"
          status="+"
          setter="tony"
    />
    <flag name="commit-queue"
          id="151155"
          type_id="3"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144704</attachid>
            <date>2012-05-29 22:44:07 -0700</date>
            <delta_ts>2012-05-29 22:54:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles6.patch</filename>
            <type>text/plain</type>
            <size>31795</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTE4ODk0KQ0KKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxMiBAQA0KKzIwMTItMDUtMjkgIFh1ZXFpbmcgSHVh
bmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIFRoZSB0ZXN0cyBsaXN0ZWQg
aW4gd2luL1NraXBwZWQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGJ1dCBz
b21lIG9mIHRoZXNlIG5lZWQgdG8gcmViYXNlbGluZSBpbiBXaW5kb3dzLCB3ZSBkbyB0aGF0IGlu
IGJ1ZyM4NzYxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMi0wNS0yOSAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUZXN0IGV4cGVjdGF0aW9u
IHVwZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDExODg4
MykNCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQ0K
QEAgLTI0OCwyMSArMjQ4LDE2IEBADQogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtZmlsZS1zdmcu
aHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2ZpbGUtZHJhZy10by1lZGl0YWJsZS5odG1sCiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZmlsZS1pbnB1dC1maWxlcy1hY2Nlc3MuaHRtbAotZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93
LXBvc3RtZXNzYWdlLWNsb25lLWZyYW1lcy5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLWRhdGFUcmFu
c2Zlckl0ZW1MaXN0LWZpbGUtaGFuZGxpbmcuaHRtbAotZmFzdC9ldmVudHMvZHJhZy1maWxlLWNy
YXNoLmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctdG8tbmF2aWdhdGUuaHRtbAogZmFzdC9ldmVudHMv
ZHJvcC1oYW5kbGVyLXNob3VsZC1ub3Qtc3RvcC1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9k
cm9wLXdpdGgtZmlsZS1wYXRocy5odG1sCiBmYXN0L2V2ZW50cy9kcm9wem9uZS0wMDQuaHRtbAog
ZmFzdC9ldmVudHMvZmlsZS1pbnB1dC1oaWRkZW4taW4tb25kcm9wLmh0bWwKIGZhc3QvZXZlbnRz
L2lucHV0LWVsZW1lbnQtZGlzcGxheS1ub25lLWluLWRyYWdsZWF2ZS1jcmFzaC5odG1sCi1mYXN0
L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRtbAotZmFzdC9mb3Jtcy9maWxlL2Zp
bGUtaW5wdXQtY2hhbmdlLWV2ZW50Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLWlucHV0LXJl
c2V0Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLXJlc2V0LWluLWNoYW5nZS5odG1sCi1mYXN0
L2Zvcm1zL2ZpbGUvZ2V0LWZpbGUtdXBsb2FkLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1m
aWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUtcmUt
cmVuZGVyLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9yZWNvdmVyLWZpbGUtaW5wdXQtaW4tdW5wb3N0
ZWQtZm9ybS5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODg5NCkNCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsMTUgQEANCisy
MDEyLTA1LTI5ICBYdWVxaW5nIEh1YW5nICA8aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAg
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMgc2hvdWxkIGJlIGltcGxlbWVudGVk
IGluIFdpbmRvd3MsIHdoaWNoIGJsb2NrZWQgZHJhZyBhbmQgZHJvcCByZWxhdGVkIHRlc3RzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlz
IGNoYW5nZSB3YXMgcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxl
cywgdXBkYXRlIHdpbi9Ta2lwcGVkIGZpbGUgdG8gcmVtb3ZlIGRyYWcgYW5kIGRyb3AgcmVsYXRl
ZCB0ZXN0cyB3aWxsIHZhbGlhdGUgaXQuIAorCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdE
YXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpudW1iZXJPZkZpbGVzKToK
KwogMjAxMi0wNS0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Nocm9taXVtXSBNb3ZlIGZpbGVFeGlzdHMgdG8gUGxhdGZvcm0uaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJKHJldmlzaW9uIDEx
ODg4MykNCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3
b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExMSw3ICsxMTIsMjQgQEANCiAKIHVuc2lnbmVkIERyYWdEYXRhOjpu
dW1iZXJPZkZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZv
cm1EcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVEdNRURJVU0gbWVkaXVtOwor
ICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURyYWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQo
KSwgJm1lZGl1bSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhEUk9QIGhkcm9wID0gc3Rh
dGljX2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsKKworICAgIGlmICgh
aGRyb3ApCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVtRmlsZXMgPSBEcmFn
UXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CisKKyAgICBEcmFnRmluaXNoKGhk
cm9wKTsKKyAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOworCisgICAgcmV0dXJuIG51
bUZpbGVzOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYg
cmVzdWx0KSBjb25zdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg4OTQpDQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMSwzICsxLDU3IEBADQorMjAxMi0wNS0yOSAgWHVlcWluZyBIdWFuZyAg
PGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFn
V2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXaW5kb3dzLCB3aGljaCBibG9ja2Vk
IGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5j
cHA6IEFkZGVkLgorICAgICAgICAoY2ZIRHJvcEZvcm1hdCk6CisgICAgICAgIChjZkZpbGVOYW1l
V0Zvcm1hdCk6CisgICAgICAgIChjZlVybFdGb3JtYXQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0
RXRjKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAg
ICAgKFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoV0NFbnVtRm9y
bWF0RXRjOjpBZGRSZWYpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZWxlYXNlKToKKyAg
ICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6TmV4dCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6
OlNraXApOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZXNldCk6CisgICAgICAgIChXQ0Vu
dW1Gb3JtYXRFdGM6OkNsb25lKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6
UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6QWRkUmVmKToKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6OlJlbGVhc2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
RGF0YSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXREYXRhSGVyZSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
Q2Fub25pY2FsRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlNldERhdGEpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgIChEUlREYXRhT2Jq
ZWN0OjpFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRBZHZpc2UpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OkVudW1EQWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaDogQWRkZWQuCisgICAg
ICAgIChEUlREYXRhT2JqZWN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJv
cFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJj
ZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjp+RFJURHJvcFNvdXJjZSk6CisgICAgICAgIChE
UlREcm9wU291cmNlOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpB
ZGRSZWYpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6UmVsZWFzZSk6CisgICAgICAgIChEUlRE
cm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpRdWVy
eUNvbnRpbnVlRHJhZyk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2spOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmg6IEFkZGVkLgorICAg
ICAgICAoRFJURHJvcFNvdXJjZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5k
ZXIuY3BwOgorICAgICAgICAoYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2spOgorCiAyMDEyLTA1
LTI5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGEgbGlu
dGVyIGVycm9yIGZvciBwbmdzIHRoYXQgbGFjayBhbiBlbWJlZGRlZCBjaGVja3N1bQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAw
KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsMzg3IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgp
Cit7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Q0ZfSERST1AsIDAsIERWQVNQ
RUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsK
K30KKworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQg
Y2YgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMIkZpbGVOYW1lVyIpOworICAgIHN0YXRpYyBG
T1JNQVRFVEMgdXJsRm9ybWF0ID0ge2NmLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURf
SEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZVcmxX
Rm9ybWF0KCkKK3sKKyAgICBzdGF0aWMgVUlOVCBjZiA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0
KEwiVW5pZm9ybVJlc291cmNlTG9jYXRvclciKTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZv
cm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAg
IHJldHVybiAmdXJsRm9ybWF0OworfQorCitjbGFzcyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMg
SUVudW1GT1JNQVRFVEMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhj
b25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisKKyAgICAvLyBJVW5r
bm93biBtZW1iZXJzCisgICAgU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNlKShSRUZJSUQsIHZvaWQq
Kik7CisgICAgU1RETUVUSE9EXyhVTE9ORywgQWRkUmVmKSgpOworICAgIFNURE1FVEhPRF8oVUxP
TkcsIFJlbGVhc2UpKCk7CisKKyAgICAvLyBJRW51bUZPUk1BVEVUQyBtZW1iZXJzCisgICAgU1RE
TUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVUQywgVUxPTkcqKTsKKyAgICBTVERNRVRIT0Qo
U2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChSZXNldCkoKTsKKyAgICBTVERNRVRIT0QoQ2xv
bmUpKElFbnVtRk9STUFURVRDKiopOworCitwcml2YXRlOgorICAgIGxvbmcgbV9yZWY7CisgICAg
VmVjdG9yPEZPUk1BVEVUQz4gbV9mb3JtYXRzOworICAgIHNpemVfdCBtX2N1cnJlbnQ7Cit9Owor
CitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRD
PiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1f
Zm9ybWF0cyhmb3JtYXRzKQoreworfQorCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0
Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1hdHMpCisgICAgOiBtX3JlZigxKQorICAg
ICwgbV9jdXJyZW50KDApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKCpmb3JtYXRzW2ldKTsKK30KKwor
U1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQs
IHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1
YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRW51bUZP
Uk1BVEVUQykpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigp
OworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFD
RTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVtRm9ybWF0RXRjOjpBZGRSZWYoKQor
eworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRI
T0RJTVBfKFVMT05HKSBXQ0VudW1Gb3JtYXRFdGM6OlJlbGVhc2UoKQoreworICAgIGxvbmcgcmVm
Q291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQp
CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVU
SE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZPUk1BVEVUQyBscEZv
cm1hdEV0YywgVUxPTkcqIHBjZWx0RmV0Y2hlZCkKK3sKKyAgICBpZiAocGNlbHRGZXRjaGVkKQor
ICAgICAgICAqcGNlbHRGZXRjaGVkID0gMDsKKworICAgIFVMT05HIGNSZXR1cm4gPSBjZWx0Owor
CisgICAgaWYgKGNlbHQgPD0gMCB8fCAhbHBGb3JtYXRFdGMgfHwgbV9jdXJyZW50ID49IG1fZm9y
bWF0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFwY2VsdEZl
dGNoZWQgJiYgY2VsdCAhPSAxKSAvLyBwY2VsdEZldGNoZWQgY2FuIGJlIDAgb25seSBmb3IgMSBp
dGVtIHJlcXVlc3QKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICB3aGlsZSAobV9jdXJy
ZW50IDwgbV9mb3JtYXRzLnNpemUoKSAmJiBjUmV0dXJuID4gMCkgeworICAgICAgICAqbHBGb3Jt
YXRFdGMrKyA9IG1fZm9ybWF0c1ttX2N1cnJlbnQrK107CisgICAgICAgIC0tY1JldHVybjsKKyAg
ICB9CisgICAgaWYgKHBjZWx0RmV0Y2hlZCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQg
LSBjUmV0dXJuOworCisgICAgcmV0dXJuICFjUmV0dXJuID8gU19PSyA6IFNfRkFMU0U7Cit9CisK
K1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OlNraXAoVUxPTkcgY2VsdCkKK3sKKyAgICBp
ZiAoKG1fY3VycmVudCArIGNlbHQpID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAgICAgIHJldHVy
biBTX0ZBTFNFOworICAgIG1fY3VycmVudCArPSBjZWx0OworICAgIHJldHVybiBTX09LOworfQor
CitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpSZXNldCgpCit7CisgICAgbV9jdXJyZW50
ID0gMDsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0
Yzo6Q2xvbmUoSUVudW1GT1JNQVRFVEMqKiBwcENsb25lRW51bUZvcm1hdEV0YykKK3sKKyAgICBp
ZiAoIXBwQ2xvbmVFbnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgV0NFbnVtRm9ybWF0RXRjKiBuZXdFbnVtID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zvcm1h
dHMpOworICAgIGlmICghbmV3RW51bSkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisK
KyAgICBuZXdFbnVtLT5BZGRSZWYoKTsKKyAgICBuZXdFbnVtLT5tX2N1cnJlbnQgPSBtX2N1cnJl
bnQ7CisgICAgKnBwQ2xvbmVFbnVtRm9ybWF0RXRjID0gbmV3RW51bTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0hSRVNVTFQgRFJURGF0YU9iamVjdDo6Y3JlYXRl
SW5zdGFuY2UoRFJURGF0YU9iamVjdCoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERhdGFPYmplY3Qo
KTsKKyAgICByZXR1cm4gU19PSzsKK30KKworRFJURGF0YU9iamVjdDo6RFJURGF0YU9iamVjdCgp
CisgICAgOiBtX3JlZigxKQoreworfQorCitEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21lZGl1bS5zaXplKCk7ICsraSkgewor
ICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1fbWVkaXVtW2ldKTsKKyAgICAgICAgZGVsZXRlIG1f
bWVkaXVtW2ldOworICAgIH0KKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2Zvcm1hdHMpOwor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRGF0
YU9iamVjdCkpCisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworCisgICAgaWYgKCpwcHZPYmpl
Y3QpIHsKKyAgICAgICAgQWRkUmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAg
ICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0
YU9iamVjdDo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1f
cmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0YU9iamVjdDo6UmVsZWFzZSgp
Cit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7Cisg
ICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNv
dW50OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMq
IHBmb3JtYXRldGNJbiwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZiAoIXBmb3JtYXRl
dGNJbiB8fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBwbWVkaXVt
LT5oR2xvYmFsID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1h
dHNbaV0tPmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4tPmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+
ZHdBc3BlY3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9y
bWF0KSB7CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zv
cm1hdHNbaV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVj
dDo6R2V0RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVf
Tk9USU1QTDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShG
T1JNQVRFVEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmICghcGZvcm1hdGV0YykKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICghKERWQVNQRUNUX0NPTlRFTlQgJiBwZm9ybWF0
ZXRjLT5kd0FzcGVjdCkpCisgICAgICAgIHJldHVybiAoRFZfRV9EVkFTUEVDVCk7CisKKyAgICBI
UkVTVUxUIGhSZXN1bHQgPSBEVl9FX1RZTUVEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mb3JtYXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAm
IG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKKwkJCWlmIChwZm9ybWF0ZXRjLT5jZkZvcm1hdCA9PSBt
X2Zvcm1hdHNbaV0tPmNmRm9ybWF0KSB7CisgICAgICAgICAgICAgICAgaFJlc3VsdCA9IFNfT0s7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisJCQl9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgaFJlc3VsdCA9IERWX0VfQ0xJUEZPUk1BVDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBoUmVzdWx0ID0gRFZfRV9UWU1FRDsKKyAgICB9CisgICAgcmV0dXJuIGhSZXN1bHQ7
Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpHZXRDYW5vbmljYWxGb3JtYXRFdGMo
Rk9STUFURVRDKiwgRk9STUFURVRDKikKK3sgCisgICAgcmV0dXJuIERBVEFfU19TQU1FRk9STUFU
RVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6U2V0RGF0YShGT1JNQVRFVEMq
IHBmb3JtYXRldGMsIFNUR01FRElVTSogcG1lZGl1bSwgQk9PTCBmUmVsZWFzZSkKK3sgCisgICAg
aWYgKCFwZm9ybWF0ZXRjIHx8ICFwbWVkaXVtKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwor
CisgICAgRk9STUFURVRDKiBmb3JtYXRldGMgPSBuZXcgRk9STUFURVRDOworICAgIGlmICghZm9y
bWF0ZXRjKQorICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKworICAgIFNUR01FRElVTSog
cFN0Z01lZCA9IG5ldyBTVEdNRURJVU07CisKKyAgICBpZiAoIXBTdGdNZWQpIHsKKyAgICAgICAg
ZGVsZXRlIGZvcm1hdGV0YzsKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisgICAgfQor
CisgICAgWmVyb01lbW9yeShmb3JtYXRldGMsIHNpemVvZihGT1JNQVRFVEMpKTsKKyAgICBaZXJv
TWVtb3J5KHBTdGdNZWQsIHNpemVvZihTVEdNRURJVU0pKTsKKworICAgICpmb3JtYXRldGMgPSAq
cGZvcm1hdGV0YzsKKyAgICBtX2Zvcm1hdHMuYXBwZW5kKGZvcm1hdGV0Yyk7CisKKyAgICBpZiAo
ZlJlbGVhc2UpCisgICAgICAgICpwU3RnTWVkID0gKnBtZWRpdW07CisgICAgZWxzZQorICAgICAg
ICBDb3B5TWVkaXVtKHBTdGdNZWQsIHBtZWRpdW0sIHBmb3JtYXRldGMpOworICAgIG1fbWVkaXVt
LmFwcGVuZChwU3RnTWVkKTsKKworICAgIHJldHVybiBTX09LOworfQorCit2b2lkIERSVERhdGFP
YmplY3Q6OkNvcHlNZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVzdCwgU1RHTUVESVVNKiBwTWVkU3Jj
LCBGT1JNQVRFVEMqIHBGbXRTcmMpCit7CisgICAgc3dpdGNoIChwTWVkU3JjLT50eW1lZCkgewor
I2lmICFPUyhXSU5DRSkKKyAgICBjYXNlIFRZTUVEX0hHTE9CQUw6CisgICAgICAgIHBNZWREZXN0
LT5oR2xvYmFsID0gc3RhdGljX2Nhc3Q8SEdMT0JBTD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3Jj
LT5oR2xvYmFsLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFRZTUVEX0dESToKKyAgICAgICAgcE1lZERlc3QtPmhCaXRtYXAgPSBzdGF0aWNfY2FzdDxI
QklUTUFQPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhCaXRtYXAsIHBGbXRTcmMtPmNmRm9y
bWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfTUZQSUNUOgorICAgICAg
ICBwTWVkRGVzdC0+aE1ldGFGaWxlUGljdCA9IHN0YXRpY19jYXN0PEhNRVRBRklMRVBJQ1Q+KE9s
ZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aE1ldGFGaWxlUGljdCwgcEZtdFNyYy0+Y2ZGb3JtYXQs
IDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9FTkhNRjoKKyAgICAgICAgcE1l
ZERlc3QtPmhFbmhNZXRhRmlsZSA9IHN0YXRpY19jYXN0PEhFTkhNRVRBRklMRT4oT2xlRHVwbGlj
YXRlRGF0YShwTWVkU3JjLT5oRW5oTWV0YUZpbGUsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfRklMRToKKyAgICAgICAgcE1lZFNyYy0+bHBz
ekZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8TFBPTEVTVFI+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNy
Yy0+bHBzekZpbGVOYW1lLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsK
KyNlbmRpZgorICAgIGNhc2UgVFlNRURfSVNUUkVBTToKKyAgICAgICAgcE1lZERlc3QtPnBzdG0g
PSBwTWVkU3JjLT5wc3RtOworICAgICAgICBwTWVkU3JjLT5wc3RtLT5BZGRSZWYoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9JU1RPUkFHRToKKyAgICAgICAgcE1lZERlc3QtPnBz
dGcgPSBwTWVkU3JjLT5wc3RnOworICAgICAgICBwTWVkU3JjLT5wc3RnLT5BZGRSZWYoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHBN
ZWREZXN0LT50eW1lZCA9IHBNZWRTcmMtPnR5bWVkOworICAgIHBNZWREZXN0LT5wVW5rRm9yUmVs
ZWFzZSA9IDA7CisgICAgaWYgKHBNZWRTcmMtPnBVbmtGb3JSZWxlYXNlKSB7CisgICAgICAgIHBN
ZWREZXN0LT5wVW5rRm9yUmVsZWFzZSA9IHBNZWRTcmMtPnBVbmtGb3JSZWxlYXNlOworICAgICAg
ICBwTWVkU3JjLT5wVW5rRm9yUmVsZWFzZS0+QWRkUmVmKCk7CisgICAgfQorfQorU1RETUVUSE9E
SU1QIERSVERhdGFPYmplY3Q6OkVudW1Gb3JtYXRFdGMoRFdPUkQgZHdEaXJlY3Rpb24sIElFbnVt
Rk9STUFURVRDKiogcHBlbnVtRm9ybWF0RXRjKQoreyAKKyAgICBpZiAoIXBwZW51bUZvcm1hdEV0
YykKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICpwcGVudW1Gb3JtYXRFdGMgPSAw
OworICAgIHN3aXRjaCAoZHdEaXJlY3Rpb24pIHsKKyAgICBjYXNlIERBVEFESVJfR0VUOgorICAg
ICAgICAqcHBlbnVtRm9ybWF0RXRjID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zvcm1hdHMpOwor
ICAgICAgICBpZiAoISgqcHBlbnVtRm9ybWF0RXRjKSkKKyAgICAgICAgICAgIHJldHVybiBFX09V
VE9GTUVNT1JZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgREFUQURJUl9TRVQ6CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpE
QWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNlU2luayosIERXT1JEKikKK3sgCisgICAg
cmV0dXJuIE9MRV9FX0FEVklTRU5PVFNVUFBPUlRFRDsKK30KKworU1RETUVUSE9ESU1QIERSVERh
dGFPYmplY3Q6OkRVbmFkdmlzZShEV09SRCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQor
CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERSVERhdGFPYmplY3Q6OkVudW1EQWR2aXNlKElF
bnVtU1RBVERBVEEqKikKK3sKKyAgICByZXR1cm4gT0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEOwor
fQorCit2b2lkIERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YShDTElQRk9STUFUIGZvcm1hdCkKK3sK
KyAgICBzaXplX3QgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChwb3NpdGlvbiA8IG1fZm9ybWF0
cy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fZm9ybWF0c1twb3NpdGlvbl0tPmNmRm9ybWF0ID09
IGZvcm1hdCkgeworICAgICAgICAgICAgRk9STUFURVRDKiBjdXJyZW50ID0gbV9mb3JtYXRzW3Bv
c2l0aW9uXTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1twb3NpdGlvbl0gPSBtX2Zvcm1hdHNbbV9m
b3JtYXRzLnNpemUoKSAtIDFdOworICAgICAgICAgICAgbV9mb3JtYXRzW21fZm9ybWF0cy5zaXpl
KCkgLSAxXSA9IDA7CisgICAgICAgICAgICBtX2Zvcm1hdHMucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgZGVsZXRlIGN1cnJlbnQ7CisgICAgICAgICAgICBTVEdNRURJVU0qIG1lZGl1bSA9IG1f
bWVkaXVtW3Bvc2l0aW9uXTsKKyAgICAgICAgICAgIG1fbWVkaXVtW3Bvc2l0aW9uXSA9IG1fbWVk
aXVtW21fbWVkaXVtLnNpemUoKSAtIDFdOworICAgICAgICAgICAgbV9tZWRpdW1bbV9tZWRpdW0u
c2l6ZSgpIC0gMV0gPSAwOworICAgICAgICAgICAgbV9tZWRpdW0ucmVtb3ZlTGFzdCgpOworICAg
ICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bShtZWRpdW0pOworICAgICAgICAgICAgZGVsZXRlIG1l
ZGl1bTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHBvc2l0aW9u
Kys7CisgICAgfQorfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmpl
Y3QuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2Jq
ZWN0LmgJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFP
YmplY3QuaAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNzEgQEANCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBEUlREYXRhT2JqZWN0X2gKKyNkZWZpbmUgRFJURGF0YU9iamVjdF9oCisKKyNpbmNsdWRlIDxT
aGxPYmouaD4KKyNpbmNsdWRlIDxvYmppZGwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgpOworCitGT1JNQVRFVEMqIGNmRmlsZU5hbWVXRm9y
bWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZVcmxXRm9ybWF0KCk7CisKK2NsYXNzIERSVERhdGFPYmpl
Y3QgOiBwdWJsaWMgSURhdGFPYmplY3QgeworcHVibGljOgorICAgIHZvaWQgQ29weU1lZGl1bShT
VEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0qIHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNy
Yyk7CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7ICAgICAg
ICAKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOworICAgIHZp
cnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOworCisgICAgLy8gSURhdGFP
YmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RGF0YShGT1JN
QVRFVEMqIHBmb3JtYXRJbiwgU1RHTUVESVVNKiBwbWVkaXVtKTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RGF0YUhlcmUoRk9STUFURVRDKiBwZm9ybWF0LCBTVEdN
RURJVU0qIHBtZWRpdW0pOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBR
dWVyeUdldERhdGEoRk9STUFURVRDKiBwZm9ybWF0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgR2V0Q2Fub25pY2FsRm9ybWF0RXRjKEZPUk1BVEVUQyogcGZvcm1hdGVj
dEluLCBGT1JNQVRFVEMqIHBmb3JtYXRPdXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdCwgU1RHTUVESVVNKnBtZWRpdW0s
IEJPT0wgcmVsZWFzZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVu
dW1Gb3JtYXRFdGMoRFdPUkQgZHdEaXJlY3Rpb24sIElFbnVtRk9STUFURVRDKiogcHBlbnVtRm9y
bWF0RXRjKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgREFkdmlzZShG
T1JNQVRFVEMqLCBEV09SRCwgSUFkdmlzZVNpbmsqLCBEV09SRCopOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEVW5hZHZpc2UoRFdPUkQpOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFbnVtREFkdmlzZShJRW51bVNUQVREQVRBKiopOworCisg
ICAgdm9pZCBjbGVhckRhdGEoQ0xJUEZPUk1BVCk7CisgICAgCisgICAgc3RhdGljIEhSRVNVTFQg
Y3JlYXRlSW5zdGFuY2UoRFJURGF0YU9iamVjdCoqKTsKK3ByaXZhdGU6CisgICAgRFJURGF0YU9i
amVjdCgpOworICAgIH5EUlREYXRhT2JqZWN0KCk7CisgICAgbG9uZyBtX3JlZjsKKyAgICBWZWN0
b3I8Rk9STUFURVRDKj4gbV9mb3JtYXRzOworICAgIFZlY3RvcjxTVEdNRURJVU0qPiBtX21lZGl1
bTsKK307CisKKyNlbmRpZiAvLyBEUlREYXRhT2JqZWN0X2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcAkocmV2aXNpb24gMCkNCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5jcHAJKHJldmlzaW9uIDApDQpAQCAtMCww
ICsxLDg2IEBADQorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRFJURHJvcFNvdXJjZS5oIgorCitEUlREcm9w
U291cmNlOjpEUlREcm9wU291cmNlKCkKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2Ryb3BwZWQo
ZmFsc2UpCit7Cit9CisKK0RSVERyb3BTb3VyY2U6On5EUlREcm9wU291cmNlKCkKK3sKK30KKwor
U1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFs
SUlEKHJpaWQsIElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChyaWlkLCBJSURfSURyb3BTb3Vy
Y2UpKSB7CisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKwor
ICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsK
K30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURHJvcFNvdXJjZTo6QWRkUmVmKCkKK3sKKyAg
ICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1fcmVmKTsKK30KKworU1RETUVUSE9ESU1Q
XyhVTE9ORykgRFJURHJvcFNvdXJjZTo6UmVsZWFzZSgpCit7CisgICAgbG9uZyByZWZDb3VudCA9
IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7CisgICAgaWYgKCFyZWZDb3VudCkKKyAgICAg
ICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNvdW50OworfQorCitIUkVTVUxUIERSVERy
b3BTb3VyY2U6OmNyZWF0ZUluc3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0KQoreworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworICAgICpyZXN1bHQgPSBu
ZXcgRFJURHJvcFNvdXJjZTsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERS
VERyb3BTb3VyY2U6OlF1ZXJ5Q29udGludWVEcmFnKEJPT0wgZkVzY2FwZVByZXNzZWQsIERXT1JE
IGdyZktleVN0YXRlKQoreworICAgIGlmIChmRXNjYXBlUHJlc3NlZCB8fCAhKGdyZktleVN0YXRl
ICYgKE1LX0xCVVRUT04gfCBNS19SQlVUVE9OKSkpIHsKKyAgICAgICAgbV9kcm9wcGVkID0gIWZF
c2NhcGVQcmVzc2VkOworICAgICAgICByZXR1cm4gZkVzY2FwZVByZXNzZWQgPyBEUkFHRFJPUF9T
X0NBTkNFTCA6IERSQUdEUk9QX1NfRFJPUDsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworU1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OkdpdmVGZWVkYmFjayhEV09SRCBkd0VmZmVj
dCkKK3sKKyAgICByZXR1cm4gRFJBR0RST1BfU19VU0VERUZBVUxUQ1VSU09SUzsKK30KSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgNCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5oCShyZXZpc2lvbiAwKQ0K
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJldmlzaW9uIDAp
DQpAQCAtMCwwICsxLDQ4IEBADQorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUg
bWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisqLworCisjaWZuZGVmIERSVERyb3BTb3VyY2VfaAorI2RlZmluZSBEUlREcm9wU291cmNlX2gK
KworI2luY2x1ZGUgPFNobE9iai5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworY2xhc3MgRFJU
RHJvcFNvdXJjZSA6IHB1YmxpYyBJRHJvcFNvdXJjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lk
KiogcHB2T2JqZWN0KTsgICAgICAgIAorICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZ
UEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNl
KCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5Q29udGludWVE
cmFnKEJPT0wgZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRlKTsKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2l2ZUZlZWRiYWNrKERXT1JEIGR3RWZmZWN0KTsK
KworICAgIHN0YXRpYyBIUkVTVUxUIGNyZWF0ZUluc3RhbmNlKElEcm9wU291cmNlKiogcmVzdWx0
KTsKK3ByaXZhdGU6CisgICAgRFJURHJvcFNvdXJjZSgpOworICAgIH5EUlREcm9wU291cmNlKCk7
CisgICAgbG9uZyBtX3JlZjsKKyAgICBib29sIG1fZHJvcHBlZDsKK307CisKKyNlbmRpZiAvLyBE
UlREcm9wU291cmNlX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS52Y3Byb2oNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qCShyZXZpc2lvbiAxMTg4ODMpDQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagkod29ya2luZyBjb3B5KQ0KQEAgLTQwMiw2
ICs0MDIsMjIgQEANCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii5cRFJURGF0YU9iamVjdC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cRFJURGF0YU9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERSVERyb3BTb3VyY2UuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERSVERyb3BTb3VyY2UuaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxFdmVudFNl
bmRlci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0V2ZW50U2VuZGVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9FdmVudFNlbmRlci5jcHAJKHJldmlzaW9uIDExODg4MykNCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYg
QEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMTYgKzMwLDE5
IEBADQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCiAKKyNp
bmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisjaW5jbHVkZSAiRFJURHJvcFNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkRyYWdnaW5nSW5mby5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ09NUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dlYktpdC5oPgorI2luY2x1ZGUgPHdpbmRv
d3MuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuaD4KLSNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+Ci0jaW5jbHVk
ZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjZGVmaW5l
IFdNX0RSVF9TRU5EX1FVRVVFRF9FVkVOVCAoV01fQVBQKzEpCiAKQEAgLTY0Miw2ICs2NDYsODYg
QEANCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0
aWMgSlNWYWx1ZVJlZiBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU09iamVjdFJlZiBmaWxl
c0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgMCk7CisKKyAg
ICBpZiAoIWZpbGVzQXJyYXkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKKworICAgIEpTU3RyaW5nUmVmIGxlbmd0aFByb3BlcnR5ID0gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgIFZlY3RvcjxVQ2hhcj4gZmlsZXM7Cisg
ICAgaW50IGZpbGVzQ291bnQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgSlNPYmplY3RHZXRQ
cm9wZXJ0eShjb250ZXh0LCBmaWxlc0FycmF5LCBsZW5ndGhQcm9wZXJ0eSwgMCksIDApOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXNDb3VudDsgKytpKSB7CisgICAgICAgIEpTVmFsdWVS
ZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBmaWxlc0FycmF5
LCBpLCAwKTsKKyAgICAgICAgSlNTdHJpbmdSZWYgZmlsZSA9IEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgdmFsdWUsIDApOworICAgICAgICBmaWxlcy5hcHBlbmQoSlNTdHJpbmdHZXRDaGFy
YWN0ZXJzUHRyKGZpbGUpLCBKU1N0cmluZ0dldExlbmd0aChmaWxlKSk7CisgICAgICAgIGZpbGVz
LmFwcGVuZCgwKTsKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGZpbGUpOworICAgIH0KKworICAg
IGlmIChmaWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKworICAgIC8vIFdlIHNob3VsZCBhcHBlbmQgIjAiIGluIHRoZSBlbmQgb2Yg
fGZpbGVzfCBzbyB0aGF0IHxEcmFnUXVlcnlGaWxlV3wgcmV0cmlldmVkIHRoZSBudW1iZXIgb2Yg
ZmlsZXMgY29ycmVjdGx5IGZyb20gT2xlIENsaXBib2FyZC4KKyAgICBmaWxlcy5hcHBlbmQoMCk7
CisKKyAgICBTVEdNRURJVU0gaERyb3BNZWRpdW0gPSB7MH07CisgICAgaERyb3BNZWRpdW0udHlt
ZWQgPSBUWU1FRF9IR0xPQkFMOworICAgIFNJWkVfVCBkcm9wRmlsZXNTaXplID0gc2l6ZW9mKERS
T1BGSUxFUykgKyAoc2l6ZW9mKFdDSEFSKSAqIGZpbGVzLnNpemUoKSk7CisgICAgaERyb3BNZWRp
dW0uaEdsb2JhbCA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUgfCBHTUVNX0RERVNIQVJFLCBk
cm9wRmlsZXNTaXplKTsKKyAgICBEUk9QRklMRVMqIGRyb3BGaWxlcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RFJPUEZJTEVTKj4oR2xvYmFsTG9jayhoRHJvcE1lZGl1bS5oR2xvYmFsKSk7CisgICAgbWVt
c2V0KGRyb3BGaWxlcywgMCwgc2l6ZW9mKERST1BGSUxFUykpOworICAgIGRyb3BGaWxlcy0+cEZp
bGVzID0gc2l6ZW9mKERST1BGSUxFUyk7CisgICAgZHJvcEZpbGVzLT5mV2lkZSA9IFRSVUU7CisK
KyAgICBVQ2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZWludGVycHJldF9j
YXN0PEJZVEUqPihkcm9wRmlsZXMpICsgc2l6ZW9mKERST1BGSUxFUykpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBmaWxl
c1tpXTsKKyAgICBHbG9iYWxVbmxvY2soaERyb3BNZWRpdW0uaEdsb2JhbCk7IAorCisgICAgU1RH
TUVESVVNIGhGaWxlTmFtZU1lZGl1bSA9IHswfTsKKyAgICBoRmlsZU5hbWVNZWRpdW0udHltZWQg
PSBUWU1FRF9IR0xPQkFMOworICAgIFNJWkVfVCBoRmlsZU5hbWVTaXplID0gc2l6ZW9mKFdDSEFS
KSAqIGZpbGVzLnNpemUoKTsKKyAgICBoRmlsZU5hbWVNZWRpdW0uaEdsb2JhbCA9IEdsb2JhbEFs
bG9jKEdNRU1fTU9WRUFCTEUgfCBHTUVNX0RERVNIQVJFLCBoRmlsZU5hbWVTaXplKTsKKyAgICBX
Q0hBUiogaEZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8V0NIQVIqPihHbG9iYWxMb2NrKGhGaWxlTmFt
ZU1lZGl1bS5oR2xvYmFsKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXpl
KCk7IGkrKykKKyAgICAgICAgaEZpbGVOYW1lW2ldID0gZmlsZXNbaV07CisgICAgR2xvYmFsVW5s
b2NrKGhGaWxlTmFtZU1lZGl1bS5oR2xvYmFsKTsKKworICAgIGlmIChkcmFnZ2luZ0luZm8pIHsK
KyAgICAgICAgZGVsZXRlIGRyYWdnaW5nSW5mbzsKKyAgICAgICAgZHJhZ2dpbmdJbmZvID0gMDsK
KyAgICB9CisKKyAgICBDT01QdHI8RFJURGF0YU9iamVjdD4gZGF0YU9iZWplY3Q7CisgICAgQ09N
UHRyPElEcm9wU291cmNlPiBzb3VyY2U7CisgICAgaWYgKEZBSUxFRChEUlREYXRhT2JqZWN0Ojpj
cmVhdGVJbnN0YW5jZSgmZGF0YU9iZWplY3QpKSkKKyAgICAgICAgZGF0YU9iZWplY3QgPSAwOwor
CisgICAgaWYgKEZBSUxFRChEUlREcm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSgmc291cmNlKSkp
CisgICAgICAgIHNvdXJjZSA9IDA7CisKKyAgICBpZiAoZGF0YU9iZWplY3QgJiYgc291cmNlKSB7
CisgICAgICAgIGRyYWdnaW5nSW5mbyA9IG5ldyBEcmFnZ2luZ0luZm8oZGF0YU9iZWplY3QuZ2V0
KCksIHNvdXJjZS5nZXQoKSk7CisgICAgICAgIGRyYWdnaW5nSW5mby0+c2V0UGVyZm9ybWVkRHJv
cEVmZmVjdChEUk9QRUZGRUNUX0NPUFkpOworICAgIH0KKworICAgIGlmIChkcmFnZ2luZ0luZm8p
IHsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCktPlNldERhdGEoY2ZIRHJvcEZv
cm1hdCgpLCAmaERyb3BNZWRpdW0sIEZBTFNFKTsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5kYXRh
T2JqZWN0KCktPlNldERhdGEoY2ZGaWxlTmFtZVdGb3JtYXQoKSwgJmhGaWxlTmFtZU1lZGl1bSwg
RkFMU0UpOworICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZlVy
bFdGb3JtYXQoKSwgJmhGaWxlTmFtZU1lZGl1bSwgRkFMU0UpOworICAgICAgICBPbGVTZXRDbGlw
Ym9hcmQoZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCkpOworICAgICAgICBkb3duID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBKU1N0cmluZ1JlbGVhc2UobGVuZ3RoUHJvcGVydHkpOworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CiAgICAgeyAiY29udGV4dENsaWNrIiwgY29udGV4
dENsaWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJtb3VzZURvd24iLCBtb3VzZURvd25DYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LApAQCAtNjU0LDYgKzczOCw3IEBADQogICAgIHsgInRleHRab29tT3V0Iiwg
dGV4dFpvb21PdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpvb21QYWdlSW4iLCB6b29tUGFn
ZUluQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJ6b29tUGFnZU91dCIsIHpvb21QYWdlT3V0Q2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICB7ICJiZWdpbkRyYWdXaXRoRmlsZXMiLCBiZWdpbkRyYWdXaXRo
RmlsZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgMCwgMCwgMCB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144708</attachid>
            <date>2012-05-29 22:54:09 -0700</date>
            <delta_ts>2012-05-29 22:57:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles7.patch</filename>
            <type>text/plain</type>
            <size>31813</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTE4ODk0KQ0KKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxMiBAQA0KKzIwMTItMDUtMjkgIFh1ZXFpbmcgSHVh
bmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIFRoZSB0ZXN0cyBsaXN0ZWQg
aW4gd2luL1NraXBwZWQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGJ1dCBz
b21lIG9mIHRoZXNlIG5lZWQgdG8gcmViYXNlbGluZSBpbiBXaW5kb3dzLCB3ZSBkbyB0aGF0IGlu
IGJ1ZyM4NzYxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMi0wNS0yOSAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUZXN0IGV4cGVjdGF0aW9u
IHVwZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDExODg4
MykNCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQ0K
QEAgLTI0OCwyMSArMjQ4LDE2IEBADQogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtZmlsZS1zdmcu
aHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2ZpbGUtZHJhZy10by1lZGl0YWJsZS5odG1sCiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZmlsZS1pbnB1dC1maWxlcy1hY2Nlc3MuaHRtbAotZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93
LXBvc3RtZXNzYWdlLWNsb25lLWZyYW1lcy5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLWRhdGFUcmFu
c2Zlckl0ZW1MaXN0LWZpbGUtaGFuZGxpbmcuaHRtbAotZmFzdC9ldmVudHMvZHJhZy1maWxlLWNy
YXNoLmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctdG8tbmF2aWdhdGUuaHRtbAogZmFzdC9ldmVudHMv
ZHJvcC1oYW5kbGVyLXNob3VsZC1ub3Qtc3RvcC1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9k
cm9wLXdpdGgtZmlsZS1wYXRocy5odG1sCiBmYXN0L2V2ZW50cy9kcm9wem9uZS0wMDQuaHRtbAog
ZmFzdC9ldmVudHMvZmlsZS1pbnB1dC1oaWRkZW4taW4tb25kcm9wLmh0bWwKIGZhc3QvZXZlbnRz
L2lucHV0LWVsZW1lbnQtZGlzcGxheS1ub25lLWluLWRyYWdsZWF2ZS1jcmFzaC5odG1sCi1mYXN0
L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRtbAotZmFzdC9mb3Jtcy9maWxlL2Zp
bGUtaW5wdXQtY2hhbmdlLWV2ZW50Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLWlucHV0LXJl
c2V0Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLXJlc2V0LWluLWNoYW5nZS5odG1sCi1mYXN0
L2Zvcm1zL2ZpbGUvZ2V0LWZpbGUtdXBsb2FkLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1m
aWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUtcmUt
cmVuZGVyLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9yZWNvdmVyLWZpbGUtaW5wdXQtaW4tdW5wb3N0
ZWQtZm9ybS5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODg5NCkNCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsMTUgQEANCisy
MDEyLTA1LTI5ICBYdWVxaW5nIEh1YW5nICA8aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAg
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMgc2hvdWxkIGJlIGltcGxlbWVudGVk
IGluIFdpbmRvd3MsIHdoaWNoIGJsb2NrZWQgZHJhZyBhbmQgZHJvcCByZWxhdGVkIHRlc3RzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlz
IGNoYW5nZSB3YXMgcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxl
cywgdXBkYXRlIHdpbi9Ta2lwcGVkIGZpbGUgdG8gcmVtb3ZlIGRyYWcgYW5kIGRyb3AgcmVsYXRl
ZCB0ZXN0cyB3aWxsIHZhbGlhdGUgaXQuIAorCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdE
YXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpudW1iZXJPZkZpbGVzKToK
KwogMjAxMi0wNS0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Nocm9taXVtXSBNb3ZlIGZpbGVFeGlzdHMgdG8gUGxhdGZvcm0uaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJKHJldmlzaW9uIDEx
ODg4MykNCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3
b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExMSw3ICsxMTIsMjQgQEANCiAKIHVuc2lnbmVkIERyYWdEYXRhOjpu
dW1iZXJPZkZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZv
cm1EcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVEdNRURJVU0gbWVkaXVtOwor
ICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURyYWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQo
KSwgJm1lZGl1bSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhEUk9QIGhkcm9wID0gc3Rh
dGljX2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsKKworICAgIGlmICgh
aGRyb3ApCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVtRmlsZXMgPSBEcmFn
UXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CisKKyAgICBEcmFnRmluaXNoKGhk
cm9wKTsKKyAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOworCisgICAgcmV0dXJuIG51
bUZpbGVzOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYg
cmVzdWx0KSBjb25zdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg4OTQpDQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMSwzICsxLDU3IEBADQorMjAxMi0wNS0yOSAgWHVlcWluZyBIdWFuZyAg
PGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFn
V2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXaW5kb3dzLCB3aGljaCBibG9ja2Vk
IGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5j
cHA6IEFkZGVkLgorICAgICAgICAoY2ZIRHJvcEZvcm1hdCk6CisgICAgICAgIChjZkZpbGVOYW1l
V0Zvcm1hdCk6CisgICAgICAgIChjZlVybFdGb3JtYXQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0
RXRjKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAg
ICAgKFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoV0NFbnVtRm9y
bWF0RXRjOjpBZGRSZWYpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZWxlYXNlKToKKyAg
ICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6TmV4dCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6
OlNraXApOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZXNldCk6CisgICAgICAgIChXQ0Vu
dW1Gb3JtYXRFdGM6OkNsb25lKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6
UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6QWRkUmVmKToKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6OlJlbGVhc2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
RGF0YSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXREYXRhSGVyZSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
Q2Fub25pY2FsRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlNldERhdGEpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgIChEUlREYXRhT2Jq
ZWN0OjpFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRBZHZpc2UpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OkVudW1EQWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaDogQWRkZWQuCisgICAg
ICAgIChEUlREYXRhT2JqZWN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJv
cFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJj
ZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjp+RFJURHJvcFNvdXJjZSk6CisgICAgICAgIChE
UlREcm9wU291cmNlOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpB
ZGRSZWYpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6UmVsZWFzZSk6CisgICAgICAgIChEUlRE
cm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpRdWVy
eUNvbnRpbnVlRHJhZyk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2spOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmg6IEFkZGVkLgorICAg
ICAgICAoRFJURHJvcFNvdXJjZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5k
ZXIuY3BwOgorICAgICAgICAoYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2spOgorCiAyMDEyLTA1
LTI5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGEgbGlu
dGVyIGVycm9yIGZvciBwbmdzIHRoYXQgbGFjayBhbiBlbWJlZGRlZCBjaGVja3N1bQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAw
KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsMzg3IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgp
Cit7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Q0ZfSERST1AsIDAsIERWQVNQ
RUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsK
K30KKworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQg
Y2YgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMIkZpbGVOYW1lVyIpOworICAgIHN0YXRpYyBG
T1JNQVRFVEMgdXJsRm9ybWF0ID0ge2NmLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURf
SEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZVcmxX
Rm9ybWF0KCkKK3sKKyAgICBzdGF0aWMgVUlOVCBjZiA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0
KEwiVW5pZm9ybVJlc291cmNlTG9jYXRvclciKTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZv
cm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAg
IHJldHVybiAmdXJsRm9ybWF0OworfQorCitjbGFzcyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMg
SUVudW1GT1JNQVRFVEMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhj
b25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisKKyAgICAvLyBJVW5r
bm93biBtZW1iZXJzCisgICAgU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNlKShSRUZJSUQsIHZvaWQq
Kik7CisgICAgU1RETUVUSE9EXyhVTE9ORywgQWRkUmVmKSgpOworICAgIFNURE1FVEhPRF8oVUxP
TkcsIFJlbGVhc2UpKCk7CisKKyAgICAvLyBJRW51bUZPUk1BVEVUQyBtZW1iZXJzCisgICAgU1RE
TUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVUQywgVUxPTkcqKTsKKyAgICBTVERNRVRIT0Qo
U2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChSZXNldCkoKTsKKyAgICBTVERNRVRIT0QoQ2xv
bmUpKElFbnVtRk9STUFURVRDKiopOworCitwcml2YXRlOgorICAgIGxvbmcgbV9yZWY7CisgICAg
VmVjdG9yPEZPUk1BVEVUQz4gbV9mb3JtYXRzOworICAgIHNpemVfdCBtX2N1cnJlbnQ7Cit9Owor
CitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRD
PiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1f
Zm9ybWF0cyhmb3JtYXRzKQoreworfQorCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0
Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1hdHMpCisgICAgOiBtX3JlZigxKQorICAg
ICwgbV9jdXJyZW50KDApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKCpmb3JtYXRzW2ldKTsKK30KKwor
U1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQs
IHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1
YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRW51bUZP
Uk1BVEVUQykpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigp
OworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFD
RTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVtRm9ybWF0RXRjOjpBZGRSZWYoKQor
eworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRI
T0RJTVBfKFVMT05HKSBXQ0VudW1Gb3JtYXRFdGM6OlJlbGVhc2UoKQoreworICAgIGxvbmcgcmVm
Q291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQp
CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVU
SE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZPUk1BVEVUQyBscEZv
cm1hdEV0YywgVUxPTkcqIHBjZWx0RmV0Y2hlZCkKK3sKKyAgICBpZiAocGNlbHRGZXRjaGVkKQor
ICAgICAgICAqcGNlbHRGZXRjaGVkID0gMDsKKworICAgIFVMT05HIGNSZXR1cm4gPSBjZWx0Owor
CisgICAgaWYgKGNlbHQgPD0gMCB8fCAhbHBGb3JtYXRFdGMgfHwgbV9jdXJyZW50ID49IG1fZm9y
bWF0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFwY2VsdEZl
dGNoZWQgJiYgY2VsdCAhPSAxKSAvLyBwY2VsdEZldGNoZWQgY2FuIGJlIDAgb25seSBmb3IgMSBp
dGVtIHJlcXVlc3QKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICB3aGlsZSAobV9jdXJy
ZW50IDwgbV9mb3JtYXRzLnNpemUoKSAmJiBjUmV0dXJuID4gMCkgeworICAgICAgICAqbHBGb3Jt
YXRFdGMrKyA9IG1fZm9ybWF0c1ttX2N1cnJlbnQrK107CisgICAgICAgIC0tY1JldHVybjsKKyAg
ICB9CisgICAgaWYgKHBjZWx0RmV0Y2hlZCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQg
LSBjUmV0dXJuOworCisgICAgcmV0dXJuICFjUmV0dXJuID8gU19PSyA6IFNfRkFMU0U7Cit9CisK
K1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OlNraXAoVUxPTkcgY2VsdCkKK3sKKyAgICBp
ZiAoKG1fY3VycmVudCArIGNlbHQpID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAgICAgIHJldHVy
biBTX0ZBTFNFOworICAgIG1fY3VycmVudCArPSBjZWx0OworICAgIHJldHVybiBTX09LOworfQor
CitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpSZXNldCgpCit7CisgICAgbV9jdXJyZW50
ID0gMDsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0
Yzo6Q2xvbmUoSUVudW1GT1JNQVRFVEMqKiBwcENsb25lRW51bUZvcm1hdEV0YykKK3sKKyAgICBp
ZiAoIXBwQ2xvbmVFbnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgV0NFbnVtRm9ybWF0RXRjKiBuZXdFbnVtID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zvcm1h
dHMpOworICAgIGlmICghbmV3RW51bSkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisK
KyAgICBuZXdFbnVtLT5BZGRSZWYoKTsKKyAgICBuZXdFbnVtLT5tX2N1cnJlbnQgPSBtX2N1cnJl
bnQ7CisgICAgKnBwQ2xvbmVFbnVtRm9ybWF0RXRjID0gbmV3RW51bTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0hSRVNVTFQgRFJURGF0YU9iamVjdDo6Y3JlYXRl
SW5zdGFuY2UoRFJURGF0YU9iamVjdCoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERhdGFPYmplY3Qo
KTsKKyAgICByZXR1cm4gU19PSzsKK30KKworRFJURGF0YU9iamVjdDo6RFJURGF0YU9iamVjdCgp
CisgICAgOiBtX3JlZigxKQoreworfQorCitEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21lZGl1bS5zaXplKCk7ICsraSkgewor
ICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1fbWVkaXVtW2ldKTsKKyAgICAgICAgZGVsZXRlIG1f
bWVkaXVtW2ldOworICAgIH0KKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2Zvcm1hdHMpOwor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRGF0
YU9iamVjdCkpCisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworCisgICAgaWYgKCpwcHZPYmpl
Y3QpIHsKKyAgICAgICAgQWRkUmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAg
ICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0
YU9iamVjdDo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1f
cmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0YU9iamVjdDo6UmVsZWFzZSgp
Cit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7Cisg
ICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNv
dW50OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMq
IHBmb3JtYXRldGNJbiwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZiAoIXBmb3JtYXRl
dGNJbiB8fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBwbWVkaXVt
LT5oR2xvYmFsID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1h
dHNbaV0tPmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4tPmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+
ZHdBc3BlY3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9y
bWF0KSB7CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zv
cm1hdHNbaV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVj
dDo6R2V0RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVf
Tk9USU1QTDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShG
T1JNQVRFVEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmICghcGZvcm1hdGV0YykKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICghKERWQVNQRUNUX0NPTlRFTlQgJiBwZm9ybWF0
ZXRjLT5kd0FzcGVjdCkpCisgICAgICAgIHJldHVybiAoRFZfRV9EVkFTUEVDVCk7CisKKyAgICBI
UkVTVUxUIGhSZXN1bHQgPSBEVl9FX1RZTUVEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mb3JtYXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAm
IG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKKyAgICAgICAgICAgIGlmIChwZm9ybWF0ZXRjLT5jZkZv
cm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KSB7CisgICAgICAgICAgICAgICAgaFJlc3Vs
dCA9IFNfT0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaFJlc3VsdCA9IERWX0VfQ0xJUEZPUk1BVDsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBoUmVzdWx0ID0gRFZfRV9UWU1FRDsKKyAgICB9Cisg
ICAgcmV0dXJuIGhSZXN1bHQ7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpHZXRD
YW5vbmljYWxGb3JtYXRFdGMoRk9STUFURVRDKiwgRk9STUFURVRDKikKK3sgCisgICAgcmV0dXJu
IERBVEFfU19TQU1FRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6
U2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRldGMsIFNUR01FRElVTSogcG1lZGl1bSwgQk9PTCBm
UmVsZWFzZSkKK3sgCisgICAgaWYgKCFwZm9ybWF0ZXRjIHx8ICFwbWVkaXVtKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgRk9STUFURVRDKiBmb3JtYXRldGMgPSBuZXcgRk9STUFU
RVRDOworICAgIGlmICghZm9ybWF0ZXRjKQorICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsK
KworICAgIFNUR01FRElVTSogcFN0Z01lZCA9IG5ldyBTVEdNRURJVU07CisKKyAgICBpZiAoIXBT
dGdNZWQpIHsKKyAgICAgICAgZGVsZXRlIGZvcm1hdGV0YzsKKyAgICAgICAgcmV0dXJuIEVfT1VU
T0ZNRU1PUlk7CisgICAgfQorCisgICAgWmVyb01lbW9yeShmb3JtYXRldGMsIHNpemVvZihGT1JN
QVRFVEMpKTsKKyAgICBaZXJvTWVtb3J5KHBTdGdNZWQsIHNpemVvZihTVEdNRURJVU0pKTsKKwor
ICAgICpmb3JtYXRldGMgPSAqcGZvcm1hdGV0YzsKKyAgICBtX2Zvcm1hdHMuYXBwZW5kKGZvcm1h
dGV0Yyk7CisKKyAgICBpZiAoZlJlbGVhc2UpCisgICAgICAgICpwU3RnTWVkID0gKnBtZWRpdW07
CisgICAgZWxzZQorICAgICAgICBDb3B5TWVkaXVtKHBTdGdNZWQsIHBtZWRpdW0sIHBmb3JtYXRl
dGMpOworICAgIG1fbWVkaXVtLmFwcGVuZChwU3RnTWVkKTsKKworICAgIHJldHVybiBTX09LOwor
fQorCit2b2lkIERSVERhdGFPYmplY3Q6OkNvcHlNZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVzdCwg
U1RHTUVESVVNKiBwTWVkU3JjLCBGT1JNQVRFVEMqIHBGbXRTcmMpCit7CisgICAgc3dpdGNoIChw
TWVkU3JjLT50eW1lZCkgeworI2lmICFPUyhXSU5DRSkKKyAgICBjYXNlIFRZTUVEX0hHTE9CQUw6
CisgICAgICAgIHBNZWREZXN0LT5oR2xvYmFsID0gc3RhdGljX2Nhc3Q8SEdMT0JBTD4oT2xlRHVw
bGljYXRlRGF0YShwTWVkU3JjLT5oR2xvYmFsLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0dESToKKyAgICAgICAgcE1lZERlc3QtPmhCaXRt
YXAgPSBzdGF0aWNfY2FzdDxIQklUTUFQPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhCaXRt
YXAsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlN
RURfTUZQSUNUOgorICAgICAgICBwTWVkRGVzdC0+aE1ldGFGaWxlUGljdCA9IHN0YXRpY19jYXN0
PEhNRVRBRklMRVBJQ1Q+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aE1ldGFGaWxlUGljdCwg
cEZtdFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9F
TkhNRjoKKyAgICAgICAgcE1lZERlc3QtPmhFbmhNZXRhRmlsZSA9IHN0YXRpY19jYXN0PEhFTkhN
RVRBRklMRT4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oRW5oTWV0YUZpbGUsIHBGbXRTcmMt
PmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURfRklMRToKKyAg
ICAgICAgcE1lZFNyYy0+bHBzekZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8TFBPTEVTVFI+KE9sZUR1
cGxpY2F0ZURhdGEocE1lZFNyYy0+bHBzekZpbGVOYW1lLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkp
OworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgVFlNRURfSVNUUkVBTToKKyAgICAg
ICAgcE1lZERlc3QtPnBzdG0gPSBwTWVkU3JjLT5wc3RtOworICAgICAgICBwTWVkU3JjLT5wc3Rt
LT5BZGRSZWYoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9JU1RPUkFHRToKKyAg
ICAgICAgcE1lZERlc3QtPnBzdGcgPSBwTWVkU3JjLT5wc3RnOworICAgICAgICBwTWVkU3JjLT5w
c3RnLT5BZGRSZWYoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHBNZWREZXN0LT50eW1lZCA9IHBNZWRTcmMtPnR5bWVkOworICAgIHBN
ZWREZXN0LT5wVW5rRm9yUmVsZWFzZSA9IDA7CisgICAgaWYgKHBNZWRTcmMtPnBVbmtGb3JSZWxl
YXNlKSB7CisgICAgICAgIHBNZWREZXN0LT5wVW5rRm9yUmVsZWFzZSA9IHBNZWRTcmMtPnBVbmtG
b3JSZWxlYXNlOworICAgICAgICBwTWVkU3JjLT5wVW5rRm9yUmVsZWFzZS0+QWRkUmVmKCk7Cisg
ICAgfQorfQorU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkVudW1Gb3JtYXRFdGMoRFdPUkQg
ZHdEaXJlY3Rpb24sIElFbnVtRk9STUFURVRDKiogcHBlbnVtRm9ybWF0RXRjKQoreyAKKyAgICBp
ZiAoIXBwZW51bUZvcm1hdEV0YykKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgICpw
cGVudW1Gb3JtYXRFdGMgPSAwOworICAgIHN3aXRjaCAoZHdEaXJlY3Rpb24pIHsKKyAgICBjYXNl
IERBVEFESVJfR0VUOgorICAgICAgICAqcHBlbnVtRm9ybWF0RXRjID0gbmV3IFdDRW51bUZvcm1h
dEV0YyhtX2Zvcm1hdHMpOworICAgICAgICBpZiAoISgqcHBlbnVtRm9ybWF0RXRjKSkKKyAgICAg
ICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
REFUQURJUl9TRVQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElN
UCBEUlREYXRhT2JqZWN0OjpEQWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNlU2luayos
IERXT1JEKikKK3sgCisgICAgcmV0dXJuIE9MRV9FX0FEVklTRU5PVFNVUFBPUlRFRDsKK30KKwor
U1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkRVbmFkdmlzZShEV09SRCkKK3sKKyAgICByZXR1
cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERSVERhdGFPYmpl
Y3Q6OkVudW1EQWR2aXNlKElFbnVtU1RBVERBVEEqKikKK3sKKyAgICByZXR1cm4gT0xFX0VfQURW
SVNFTk9UU1VQUE9SVEVEOworfQorCit2b2lkIERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YShDTElQ
Rk9STUFUIGZvcm1hdCkKK3sKKyAgICBzaXplX3QgcG9zaXRpb24gPSAwOworICAgIHdoaWxlIChw
b3NpdGlvbiA8IG1fZm9ybWF0cy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG1fZm9ybWF0c1twb3Np
dGlvbl0tPmNmRm9ybWF0ID09IGZvcm1hdCkgeworICAgICAgICAgICAgRk9STUFURVRDKiBjdXJy
ZW50ID0gbV9mb3JtYXRzW3Bvc2l0aW9uXTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1twb3NpdGlv
bl0gPSBtX2Zvcm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdOworICAgICAgICAgICAgbV9mb3Jt
YXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXSA9IDA7CisgICAgICAgICAgICBtX2Zvcm1hdHMucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgZGVsZXRlIGN1cnJlbnQ7CisgICAgICAgICAgICBTVEdN
RURJVU0qIG1lZGl1bSA9IG1fbWVkaXVtW3Bvc2l0aW9uXTsKKyAgICAgICAgICAgIG1fbWVkaXVt
W3Bvc2l0aW9uXSA9IG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdOworICAgICAgICAgICAg
bV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV0gPSAwOworICAgICAgICAgICAgbV9tZWRpdW0u
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bShtZWRpdW0pOworICAg
ICAgICAgICAgZGVsZXRlIG1lZGl1bTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIHBvc2l0aW9uKys7CisgICAgfQorfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0RSVERhdGFPYmplY3QuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0RSVERhdGFPYmplY3QuaAkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNzEgQEAN
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBEUlREYXRhT2JqZWN0X2gKKyNkZWZpbmUgRFJURGF0YU9iamVj
dF9oCisKKyNpbmNsdWRlIDxTaGxPYmouaD4KKyNpbmNsdWRlIDxvYmppZGwuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgpOworCitGT1JNQVRF
VEMqIGNmRmlsZU5hbWVXRm9ybWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZVcmxXRm9ybWF0KCk7CisK
K2NsYXNzIERSVERhdGFPYmplY3QgOiBwdWJsaWMgSURhdGFPYmplY3QgeworcHVibGljOgorICAg
IHZvaWQgQ29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0qIHBNZWRTcmMs
IEZPUk1BVEVUQyogcEZtdFNyYyk7CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoq
IHBwdk9iamVjdCk7ICAgICAgICAKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBF
IEFkZFJlZigpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgp
OworCisgICAgLy8gSURhdGFPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgR2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXRJbiwgU1RHTUVESVVNKiBwbWVkaXVtKTsK
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RGF0YUhlcmUoRk9STUFU
RVRDKiBwZm9ybWF0LCBTVEdNRURJVU0qIHBtZWRpdW0pOworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBRdWVyeUdldERhdGEoRk9STUFURVRDKiBwZm9ybWF0KTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0Q2Fub25pY2FsRm9ybWF0RXRjKEZP
Uk1BVEVUQyogcGZvcm1hdGVjdEluLCBGT1JNQVRFVEMqIHBmb3JtYXRPdXQpOworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdCwg
U1RHTUVESVVNKnBtZWRpdW0sIEJPT0wgcmVsZWFzZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIEVudW1Gb3JtYXRFdGMoRFdPUkQgZHdEaXJlY3Rpb24sIElFbnVtRk9S
TUFURVRDKiogcHBlbnVtRm9ybWF0RXRjKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgREFkdmlzZShGT1JNQVRFVEMqLCBEV09SRCwgSUFkdmlzZVNpbmsqLCBEV09SRCop
OworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEVW5hZHZpc2UoRFdPUkQp
OworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFbnVtREFkdmlzZShJRW51
bVNUQVREQVRBKiopOworCisgICAgdm9pZCBjbGVhckRhdGEoQ0xJUEZPUk1BVCk7CisgICAgCisg
ICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlSW5zdGFuY2UoRFJURGF0YU9iamVjdCoqKTsKK3ByaXZh
dGU6CisgICAgRFJURGF0YU9iamVjdCgpOworICAgIH5EUlREYXRhT2JqZWN0KCk7CisgICAgbG9u
ZyBtX3JlZjsKKyAgICBWZWN0b3I8Rk9STUFURVRDKj4gbV9mb3JtYXRzOworICAgIFZlY3RvcjxT
VEdNRURJVU0qPiBtX21lZGl1bTsKK307CisKKyNlbmRpZiAvLyBEUlREYXRhT2JqZWN0X2gKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcAkocmV2aXNp
b24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5jcHAJKHJl
dmlzaW9uIDApDQpAQCAtMCwwICsxLDg2IEBADQorLyoKKyogQ29weXJpZ2h0IChDKSAyMDEyIEJh
aWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRFJURHJvcFNv
dXJjZS5oIgorCitEUlREcm9wU291cmNlOjpEUlREcm9wU291cmNlKCkKKyAgICA6IG1fcmVmKDEp
CisgICAgLCBtX2Ryb3BwZWQoZmFsc2UpCit7Cit9CisKK0RSVERyb3BTb3VyY2U6On5EUlREcm9w
U291cmNlKCkKK3sKK30KKworU1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OlF1ZXJ5SW50ZXJm
YWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAw
OworICAgIGlmIChJc0VxdWFsSUlEKHJpaWQsIElJRF9JVW5rbm93bikgfHwgSXNFcXVhbElJRChy
aWlkLCBJSURfSURyb3BTb3VyY2UpKSB7CisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworICAg
ICAgICBBZGRSZWYoKTsKKworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1
cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURHJvcFNvdXJj
ZTo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1fcmVmKTsK
K30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURHJvcFNvdXJjZTo6UmVsZWFzZSgpCit7Cisg
ICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7CisgICAgaWYg
KCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNvdW50Owor
fQorCitIUkVTVUxUIERSVERyb3BTb3VyY2U6OmNyZWF0ZUluc3RhbmNlKElEcm9wU291cmNlKiog
cmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJH
OworICAgICpyZXN1bHQgPSBuZXcgRFJURHJvcFNvdXJjZTsKKyAgICByZXR1cm4gU19PSzsKK30K
KworU1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OlF1ZXJ5Q29udGludWVEcmFnKEJPT0wgZkVz
Y2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0YXRlKQoreworICAgIGlmIChmRXNjYXBlUHJlc3Nl
ZCB8fCAhKGdyZktleVN0YXRlICYgKE1LX0xCVVRUT04gfCBNS19SQlVUVE9OKSkpIHsKKyAgICAg
ICAgbV9kcm9wcGVkID0gIWZFc2NhcGVQcmVzc2VkOworICAgICAgICByZXR1cm4gZkVzY2FwZVBy
ZXNzZWQgPyBEUkFHRFJPUF9TX0NBTkNFTCA6IERSQUdEUk9QX1NfRFJPUDsKKyAgICB9CisKKyAg
ICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERSVERyb3BTb3VyY2U6OkdpdmVGZWVk
YmFjayhEV09SRCBkd0VmZmVjdCkKK3sKKyAgICByZXR1cm4gRFJBR0RST1BfU19VU0VERUZBVUxU
Q1VSU09SUzsKK30KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNl
LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJj
ZS5oCShyZXZpc2lvbiAwKQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291
cmNlLmgJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDQ4IEBADQorLyoKKyogQ29weXJpZ2h0IChD
KSAyMDEyIEJhaWR1IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisqLworCisjaWZuZGVmIERSVERyb3BTb3VyY2VfaAorI2RlZmlu
ZSBEUlREcm9wU291cmNlX2gKKworI2luY2x1ZGUgPFNobE9iai5oPgorI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKworY2xhc3MgRFJURHJvcFNvdXJjZSA6IHB1YmxpYyBJRHJvcFNvdXJjZSB7CitwdWJs
aWM6CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNl
KFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsgICAgICAgIAorICAgIHZpcnR1YWwgVUxP
TkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBSZWxlYXNlKCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFF1ZXJ5Q29udGludWVEcmFnKEJPT0wgZkVzY2FwZVByZXNzZWQsIERXT1JEIGdyZktleVN0
YXRlKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2l2ZUZlZWRiYWNr
KERXT1JEIGR3RWZmZWN0KTsKKworICAgIHN0YXRpYyBIUkVTVUxUIGNyZWF0ZUluc3RhbmNlKElE
cm9wU291cmNlKiogcmVzdWx0KTsKK3ByaXZhdGU6CisgICAgRFJURHJvcFNvdXJjZSgpOworICAg
IH5EUlREcm9wU291cmNlKCk7CisgICAgbG9uZyBtX3JlZjsKKyAgICBib29sIG1fZHJvcHBlZDsK
K307CisKKyNlbmRpZiAvLyBEUlREcm9wU291cmNlX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCShyZXZpc2lvbiAxMTg4ODMpDQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQ0KQEAgLTQwMiw2ICs0MDIsMjIgQEANCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURGF0YU9iamVjdC5jcHAiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURGF0YU9iamVjdC5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERSVERyb3BTb3Vy
Y2UuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
XERSVERyb3BTb3VyY2UuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLlxFdmVudFNlbmRlci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50U2VuZGVyLmNwcA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJKHJldmlzaW9uIDExODg4MykN
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCSh3b3JraW5nIGNv
cHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlk
dSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjksMTYgKzMwLDE5IEBADQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2
ZW50U2VuZGVyLmgiCiAKKyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisjaW5jbHVkZSAiRFJU
RHJvcFNvdXJjZS5oIgogI2luY2x1ZGUgIkRyYWdnaW5nSW5mby5oIgogI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlLmgiCiAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dlYktpdC5o
PgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KLSNpbmNsdWRlIDxXZWJLaXQv
V2ViS2l0Lmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiAjZGVmaW5lIFdNX0RSVF9TRU5EX1FVRVVFRF9FVkVOVCAoV01fQVBQKzEpCiAK
QEAgLTY0Miw2ICs2NDYsODYgQEANCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBKU09iamVjdFJlZiBmaWxlc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgMCk7CisKKyAgICBpZiAoIWZpbGVzQXJyYXkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTU3RyaW5nUmVmIGxlbmd0aFByb3Bl
cnR5ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgIFZlY3Rv
cjxVQ2hhcj4gZmlsZXM7CisgICAgaW50IGZpbGVzQ291bnQgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBmaWxlc0FycmF5LCBsZW5ndGhQcm9w
ZXJ0eSwgMCksIDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXNDb3VudDsgKytpKSB7
CisgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChj
b250ZXh0LCBmaWxlc0FycmF5LCBpLCAwKTsKKyAgICAgICAgSlNTdHJpbmdSZWYgZmlsZSA9IEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApOworICAgICAgICBmaWxlcy5hcHBl
bmQoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKGZpbGUpLCBKU1N0cmluZ0dldExlbmd0aChmaWxl
KSk7CisgICAgICAgIGZpbGVzLmFwcGVuZCgwKTsKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKGZp
bGUpOworICAgIH0KKworICAgIGlmIChmaWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIC8vIFdlIHNob3VsZCBhcHBlbmQg
IjAiIGluIHRoZSBlbmQgb2YgfGZpbGVzfCBzbyB0aGF0IHxEcmFnUXVlcnlGaWxlV3wgcmV0cmll
dmVkIHRoZSBudW1iZXIgb2YgZmlsZXMgY29ycmVjdGx5IGZyb20gT2xlIENsaXBib2FyZC4KKyAg
ICBmaWxlcy5hcHBlbmQoMCk7CisKKyAgICBTVEdNRURJVU0gaERyb3BNZWRpdW0gPSB7MH07Cisg
ICAgaERyb3BNZWRpdW0udHltZWQgPSBUWU1FRF9IR0xPQkFMOworICAgIFNJWkVfVCBkcm9wRmls
ZXNTaXplID0gc2l6ZW9mKERST1BGSUxFUykgKyAoc2l6ZW9mKFdDSEFSKSAqIGZpbGVzLnNpemUo
KSk7CisgICAgaERyb3BNZWRpdW0uaEdsb2JhbCA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUg
fCBHTUVNX0RERVNIQVJFLCBkcm9wRmlsZXNTaXplKTsKKyAgICBEUk9QRklMRVMqIGRyb3BGaWxl
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RFJPUEZJTEVTKj4oR2xvYmFsTG9jayhoRHJvcE1lZGl1bS5o
R2xvYmFsKSk7CisgICAgbWVtc2V0KGRyb3BGaWxlcywgMCwgc2l6ZW9mKERST1BGSUxFUykpOwor
ICAgIGRyb3BGaWxlcy0+cEZpbGVzID0gc2l6ZW9mKERST1BGSUxFUyk7CisgICAgZHJvcEZpbGVz
LT5mV2lkZSA9IFRSVUU7CisKKyAgICBVQ2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNo
YXIqPihyZWludGVycHJldF9jYXN0PEJZVEUqPihkcm9wRmlsZXMpICsgc2l6ZW9mKERST1BGSUxF
UykpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGRhdGFbaV0gPSBmaWxlc1tpXTsKKyAgICBHbG9iYWxVbmxvY2soaERyb3BNZWRpdW0uaEds
b2JhbCk7IAorCisgICAgU1RHTUVESVVNIGhGaWxlTmFtZU1lZGl1bSA9IHswfTsKKyAgICBoRmls
ZU5hbWVNZWRpdW0udHltZWQgPSBUWU1FRF9IR0xPQkFMOworICAgIFNJWkVfVCBoRmlsZU5hbWVT
aXplID0gc2l6ZW9mKFdDSEFSKSAqIGZpbGVzLnNpemUoKTsKKyAgICBoRmlsZU5hbWVNZWRpdW0u
aEdsb2JhbCA9IEdsb2JhbEFsbG9jKEdNRU1fTU9WRUFCTEUgfCBHTUVNX0RERVNIQVJFLCBoRmls
ZU5hbWVTaXplKTsKKyAgICBXQ0hBUiogaEZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8V0NIQVIqPihH
bG9iYWxMb2NrKGhGaWxlTmFtZU1lZGl1bS5oR2xvYmFsKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykKKyAgICAgICAgaEZpbGVOYW1lW2ldID0gZmlsZXNb
aV07CisgICAgR2xvYmFsVW5sb2NrKGhGaWxlTmFtZU1lZGl1bS5oR2xvYmFsKTsKKworICAgIGlm
IChkcmFnZ2luZ0luZm8pIHsKKyAgICAgICAgZGVsZXRlIGRyYWdnaW5nSW5mbzsKKyAgICAgICAg
ZHJhZ2dpbmdJbmZvID0gMDsKKyAgICB9CisKKyAgICBDT01QdHI8RFJURGF0YU9iamVjdD4gZGF0
YU9iZWplY3Q7CisgICAgQ09NUHRyPElEcm9wU291cmNlPiBzb3VyY2U7CisgICAgaWYgKEZBSUxF
RChEUlREYXRhT2JqZWN0OjpjcmVhdGVJbnN0YW5jZSgmZGF0YU9iZWplY3QpKSkKKyAgICAgICAg
ZGF0YU9iZWplY3QgPSAwOworCisgICAgaWYgKEZBSUxFRChEUlREcm9wU291cmNlOjpjcmVhdGVJ
bnN0YW5jZSgmc291cmNlKSkpCisgICAgICAgIHNvdXJjZSA9IDA7CisKKyAgICBpZiAoZGF0YU9i
ZWplY3QgJiYgc291cmNlKSB7CisgICAgICAgIGRyYWdnaW5nSW5mbyA9IG5ldyBEcmFnZ2luZ0lu
Zm8oZGF0YU9iZWplY3QuZ2V0KCksIHNvdXJjZS5nZXQoKSk7CisgICAgICAgIGRyYWdnaW5nSW5m
by0+c2V0UGVyZm9ybWVkRHJvcEVmZmVjdChEUk9QRUZGRUNUX0NPUFkpOworICAgIH0KKworICAg
IGlmIChkcmFnZ2luZ0luZm8pIHsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCkt
PlNldERhdGEoY2ZIRHJvcEZvcm1hdCgpLCAmaERyb3BNZWRpdW0sIEZBTFNFKTsKKyAgICAgICAg
ZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCktPlNldERhdGEoY2ZGaWxlTmFtZVdGb3JtYXQoKSwg
JmhGaWxlTmFtZU1lZGl1bSwgRkFMU0UpOworICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmpl
Y3QoKS0+U2V0RGF0YShjZlVybFdGb3JtYXQoKSwgJmhGaWxlTmFtZU1lZGl1bSwgRkFMU0UpOwor
ICAgICAgICBPbGVTZXRDbGlwYm9hcmQoZHJhZ2dpbmdJbmZvLT5kYXRhT2JqZWN0KCkpOworICAg
ICAgICBkb3duID0gdHJ1ZTsKKyAgICB9CisKKyAgICBKU1N0cmluZ1JlbGVhc2UobGVuZ3RoUHJv
cGVydHkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwog
c3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CiAgICAgeyAiY29u
dGV4dENsaWNrIiwgY29udGV4dENsaWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJtb3VzZURv
d24iLCBtb3VzZURvd25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApAQCAtNjU0LDYgKzczOCw3IEBADQogICAg
IHsgInRleHRab29tT3V0IiwgdGV4dFpvb21PdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpv
b21QYWdlSW4iLCB6b29tUGFnZUluQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICB7ICJ6b29tUGFnZU91
dCIsIHpvb21QYWdlT3V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJiZWdpbkRyYWdXaXRoRmls
ZXMiLCBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgMCwgMCwgMCB9
CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144710</attachid>
            <date>2012-05-29 22:57:02 -0700</date>
            <delta_ts>2012-05-29 23:08:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles8.patch</filename>
            <type>text/plain</type>
            <size>31800</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTE4ODk0KQ0KKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxMiBAQA0KKzIwMTItMDUtMjkgIFh1ZXFpbmcgSHVh
bmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIFRoZSB0ZXN0cyBsaXN0ZWQg
aW4gd2luL1NraXBwZWQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGJ1dCBz
b21lIG9mIHRoZXNlIG5lZWQgdG8gcmViYXNlbGluZSBpbiBXaW5kb3dzLCB3ZSBkbyB0aGF0IGlu
IGJ1ZyM4NzYxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMi0wNS0yOSAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUZXN0IGV4cGVjdGF0aW9u
IHVwZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDExODg4
MykNCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQ0K
QEAgLTI0OCwyMSArMjQ4LDE2IEBADQogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtZmlsZS1zdmcu
aHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2ZpbGUtZHJhZy10by1lZGl0YWJsZS5odG1sCiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZmlsZS1pbnB1dC1maWxlcy1hY2Nlc3MuaHRtbAotZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93
LXBvc3RtZXNzYWdlLWNsb25lLWZyYW1lcy5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLWRhdGFUcmFu
c2Zlckl0ZW1MaXN0LWZpbGUtaGFuZGxpbmcuaHRtbAotZmFzdC9ldmVudHMvZHJhZy1maWxlLWNy
YXNoLmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctdG8tbmF2aWdhdGUuaHRtbAogZmFzdC9ldmVudHMv
ZHJvcC1oYW5kbGVyLXNob3VsZC1ub3Qtc3RvcC1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9k
cm9wLXdpdGgtZmlsZS1wYXRocy5odG1sCiBmYXN0L2V2ZW50cy9kcm9wem9uZS0wMDQuaHRtbAog
ZmFzdC9ldmVudHMvZmlsZS1pbnB1dC1oaWRkZW4taW4tb25kcm9wLmh0bWwKIGZhc3QvZXZlbnRz
L2lucHV0LWVsZW1lbnQtZGlzcGxheS1ub25lLWluLWRyYWdsZWF2ZS1jcmFzaC5odG1sCi1mYXN0
L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRtbAotZmFzdC9mb3Jtcy9maWxlL2Zp
bGUtaW5wdXQtY2hhbmdlLWV2ZW50Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLWlucHV0LXJl
c2V0Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLXJlc2V0LWluLWNoYW5nZS5odG1sCi1mYXN0
L2Zvcm1zL2ZpbGUvZ2V0LWZpbGUtdXBsb2FkLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1m
aWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUtcmUt
cmVuZGVyLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9yZWNvdmVyLWZpbGUtaW5wdXQtaW4tdW5wb3N0
ZWQtZm9ybS5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODg5NCkNCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsMTUgQEANCisy
MDEyLTA1LTI5ICBYdWVxaW5nIEh1YW5nICA8aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAg
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMgc2hvdWxkIGJlIGltcGxlbWVudGVk
IGluIFdpbmRvd3MsIHdoaWNoIGJsb2NrZWQgZHJhZyBhbmQgZHJvcCByZWxhdGVkIHRlc3RzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlz
IGNoYW5nZSB3YXMgcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxl
cywgdXBkYXRlIHdpbi9Ta2lwcGVkIGZpbGUgdG8gcmVtb3ZlIGRyYWcgYW5kIGRyb3AgcmVsYXRl
ZCB0ZXN0cyB3aWxsIHZhbGlhdGUgaXQuIAorCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdE
YXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpudW1iZXJPZkZpbGVzKToK
KwogMjAxMi0wNS0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Nocm9taXVtXSBNb3ZlIGZpbGVFeGlzdHMgdG8gUGxhdGZvcm0uaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJKHJldmlzaW9uIDEx
ODg4MykNCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3
b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExMSw3ICsxMTIsMjQgQEANCiAKIHVuc2lnbmVkIERyYWdEYXRhOjpu
dW1iZXJPZkZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZv
cm1EcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVEdNRURJVU0gbWVkaXVtOwor
ICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURyYWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQo
KSwgJm1lZGl1bSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhEUk9QIGhkcm9wID0gc3Rh
dGljX2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsKKworICAgIGlmICgh
aGRyb3ApCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVtRmlsZXMgPSBEcmFn
UXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CisKKyAgICBEcmFnRmluaXNoKGhk
cm9wKTsKKyAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOworCisgICAgcmV0dXJuIG51
bUZpbGVzOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYg
cmVzdWx0KSBjb25zdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg4OTQpDQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMSwzICsxLDU3IEBADQorMjAxMi0wNS0yOSAgWHVlcWluZyBIdWFuZyAg
PGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFn
V2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXaW5kb3dzLCB3aGljaCBibG9ja2Vk
IGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5j
cHA6IEFkZGVkLgorICAgICAgICAoY2ZIRHJvcEZvcm1hdCk6CisgICAgICAgIChjZkZpbGVOYW1l
V0Zvcm1hdCk6CisgICAgICAgIChjZlVybFdGb3JtYXQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0
RXRjKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAg
ICAgKFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoV0NFbnVtRm9y
bWF0RXRjOjpBZGRSZWYpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZWxlYXNlKToKKyAg
ICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6TmV4dCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6
OlNraXApOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZXNldCk6CisgICAgICAgIChXQ0Vu
dW1Gb3JtYXRFdGM6OkNsb25lKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6
UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6QWRkUmVmKToKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6OlJlbGVhc2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
RGF0YSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXREYXRhSGVyZSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
Q2Fub25pY2FsRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlNldERhdGEpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgIChEUlREYXRhT2Jq
ZWN0OjpFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRBZHZpc2UpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OkVudW1EQWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaDogQWRkZWQuCisgICAg
ICAgIChEUlREYXRhT2JqZWN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJv
cFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJj
ZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjp+RFJURHJvcFNvdXJjZSk6CisgICAgICAgIChE
UlREcm9wU291cmNlOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpB
ZGRSZWYpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6UmVsZWFzZSk6CisgICAgICAgIChEUlRE
cm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpRdWVy
eUNvbnRpbnVlRHJhZyk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2spOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmg6IEFkZGVkLgorICAg
ICAgICAoRFJURHJvcFNvdXJjZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5k
ZXIuY3BwOgorICAgICAgICAoYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2spOgorCiAyMDEyLTA1
LTI5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGEgbGlu
dGVyIGVycm9yIGZvciBwbmdzIHRoYXQgbGFjayBhbiBlbWJlZGRlZCBjaGVja3N1bQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAw
KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsMzg2IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgp
Cit7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Q0ZfSERST1AsIDAsIERWQVNQ
RUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsK
K30KKworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQg
Y2YgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMIkZpbGVOYW1lVyIpOworICAgIHN0YXRpYyBG
T1JNQVRFVEMgdXJsRm9ybWF0ID0ge2NmLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURf
SEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZVcmxX
Rm9ybWF0KCkKK3sKKyAgICBzdGF0aWMgVUlOVCBjZiA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0
KEwiVW5pZm9ybVJlc291cmNlTG9jYXRvclciKTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZv
cm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAg
IHJldHVybiAmdXJsRm9ybWF0OworfQorCitjbGFzcyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMg
SUVudW1GT1JNQVRFVEMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhj
b25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisKKyAgICAvLyBJVW5r
bm93biBtZW1iZXJzCisgICAgU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNlKShSRUZJSUQsIHZvaWQq
Kik7CisgICAgU1RETUVUSE9EXyhVTE9ORywgQWRkUmVmKSgpOworICAgIFNURE1FVEhPRF8oVUxP
TkcsIFJlbGVhc2UpKCk7CisKKyAgICAvLyBJRW51bUZPUk1BVEVUQyBtZW1iZXJzCisgICAgU1RE
TUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVUQywgVUxPTkcqKTsKKyAgICBTVERNRVRIT0Qo
U2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChSZXNldCkoKTsKKyAgICBTVERNRVRIT0QoQ2xv
bmUpKElFbnVtRk9STUFURVRDKiopOworCitwcml2YXRlOgorICAgIGxvbmcgbV9yZWY7CisgICAg
VmVjdG9yPEZPUk1BVEVUQz4gbV9mb3JtYXRzOworICAgIHNpemVfdCBtX2N1cnJlbnQ7Cit9Owor
CitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRD
PiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1f
Zm9ybWF0cyhmb3JtYXRzKQoreworfQorCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0
Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1hdHMpCisgICAgOiBtX3JlZigxKQorICAg
ICwgbV9jdXJyZW50KDApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKCpmb3JtYXRzW2ldKTsKK30KKwor
U1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQs
IHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1
YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRW51bUZP
Uk1BVEVUQykpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigp
OworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFD
RTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVtRm9ybWF0RXRjOjpBZGRSZWYoKQor
eworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRI
T0RJTVBfKFVMT05HKSBXQ0VudW1Gb3JtYXRFdGM6OlJlbGVhc2UoKQoreworICAgIGxvbmcgcmVm
Q291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQp
CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVU
SE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZPUk1BVEVUQyBscEZv
cm1hdEV0YywgVUxPTkcqIHBjZWx0RmV0Y2hlZCkKK3sKKyAgICBpZiAocGNlbHRGZXRjaGVkKQor
ICAgICAgICAqcGNlbHRGZXRjaGVkID0gMDsKKworICAgIFVMT05HIGNSZXR1cm4gPSBjZWx0Owor
CisgICAgaWYgKGNlbHQgPD0gMCB8fCAhbHBGb3JtYXRFdGMgfHwgbV9jdXJyZW50ID49IG1fZm9y
bWF0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFwY2VsdEZl
dGNoZWQgJiYgY2VsdCAhPSAxKSAvLyBwY2VsdEZldGNoZWQgY2FuIGJlIDAgb25seSBmb3IgMSBp
dGVtIHJlcXVlc3QKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICB3aGlsZSAobV9jdXJy
ZW50IDwgbV9mb3JtYXRzLnNpemUoKSAmJiBjUmV0dXJuID4gMCkgeworICAgICAgICAqbHBGb3Jt
YXRFdGMrKyA9IG1fZm9ybWF0c1ttX2N1cnJlbnQrK107CisgICAgICAgIC0tY1JldHVybjsKKyAg
ICB9CisgICAgaWYgKHBjZWx0RmV0Y2hlZCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQg
LSBjUmV0dXJuOworCisgICAgcmV0dXJuICFjUmV0dXJuID8gU19PSyA6IFNfRkFMU0U7Cit9CisK
K1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OlNraXAoVUxPTkcgY2VsdCkKK3sKKyAgICBp
ZiAoKG1fY3VycmVudCArIGNlbHQpID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAgICAgIHJldHVy
biBTX0ZBTFNFOworICAgIG1fY3VycmVudCArPSBjZWx0OworICAgIHJldHVybiBTX09LOworfQor
CitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpSZXNldCgpCit7CisgICAgbV9jdXJyZW50
ID0gMDsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0
Yzo6Q2xvbmUoSUVudW1GT1JNQVRFVEMqKiBwcENsb25lRW51bUZvcm1hdEV0YykKK3sKKyAgICBp
ZiAoIXBwQ2xvbmVFbnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgV0NFbnVtRm9ybWF0RXRjKiBuZXdFbnVtID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zvcm1h
dHMpOworICAgIGlmICghbmV3RW51bSkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisK
KyAgICBuZXdFbnVtLT5BZGRSZWYoKTsKKyAgICBuZXdFbnVtLT5tX2N1cnJlbnQgPSBtX2N1cnJl
bnQ7CisgICAgKnBwQ2xvbmVFbnVtRm9ybWF0RXRjID0gbmV3RW51bTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0hSRVNVTFQgRFJURGF0YU9iamVjdDo6Y3JlYXRl
SW5zdGFuY2UoRFJURGF0YU9iamVjdCoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERhdGFPYmplY3Qo
KTsKKyAgICByZXR1cm4gU19PSzsKK30KKworRFJURGF0YU9iamVjdDo6RFJURGF0YU9iamVjdCgp
CisgICAgOiBtX3JlZigxKQoreworfQorCitEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21lZGl1bS5zaXplKCk7ICsraSkgewor
ICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1fbWVkaXVtW2ldKTsKKyAgICAgICAgZGVsZXRlIG1f
bWVkaXVtW2ldOworICAgIH0KKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2Zvcm1hdHMpOwor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRGF0
YU9iamVjdCkpCisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworCisgICAgaWYgKCpwcHZPYmpl
Y3QpIHsKKyAgICAgICAgQWRkUmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAg
ICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0
YU9iamVjdDo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1f
cmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0YU9iamVjdDo6UmVsZWFzZSgp
Cit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7Cisg
ICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNv
dW50OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMq
IHBmb3JtYXRldGNJbiwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZiAoIXBmb3JtYXRl
dGNJbiB8fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBwbWVkaXVt
LT5oR2xvYmFsID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1h
dHNbaV0tPmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4tPmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+
ZHdBc3BlY3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9y
bWF0KSB7CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zv
cm1hdHNbaV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVj
dDo6R2V0RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVf
Tk9USU1QTDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShG
T1JNQVRFVEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmICghcGZvcm1hdGV0YykKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICghKERWQVNQRUNUX0NPTlRFTlQgJiBwZm9ybWF0
ZXRjLT5kd0FzcGVjdCkpCisgICAgICAgIHJldHVybiAoRFZfRV9EVkFTUEVDVCk7CisKKyAgICBI
UkVTVUxUIGhSZXN1bHQgPSBEVl9FX1RZTUVEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mb3JtYXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAm
IG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKKyAgICAgICAgICAgIGlmIChwZm9ybWF0ZXRjLT5jZkZv
cm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KSB7CisgICAgICAgICAgICAgICAgaFJlc3Vs
dCA9IFNfT0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBoUmVzdWx0ID0gRFZfRV9DTElQRk9STUFUOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGhSZXN1bHQgPSBEVl9FX1RZTUVEOworICAgIH0KKyAgICByZXR1cm4gaFJl
c3VsdDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkdldENhbm9uaWNhbEZvcm1h
dEV0YyhGT1JNQVRFVEMqLCBGT1JNQVRFVEMqKQoreyAKKyAgICByZXR1cm4gREFUQV9TX1NBTUVG
T1JNQVRFVEM7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpTZXREYXRhKEZPUk1B
VEVUQyogcGZvcm1hdGV0YywgU1RHTUVESVVNKiBwbWVkaXVtLCBCT09MIGZSZWxlYXNlKQoreyAK
KyAgICBpZiAoIXBmb3JtYXRldGMgfHwgIXBtZWRpdW0pCisgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisKKyAgICBGT1JNQVRFVEMqIGZvcm1hdGV0YyA9IG5ldyBGT1JNQVRFVEM7CisgICAgaWYg
KCFmb3JtYXRldGMpCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgU1RHTUVE
SVVNKiBwU3RnTWVkID0gbmV3IFNUR01FRElVTTsKKworICAgIGlmICghcFN0Z01lZCkgeworICAg
ICAgICBkZWxldGUgZm9ybWF0ZXRjOworICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAg
ICB9CisKKyAgICBaZXJvTWVtb3J5KGZvcm1hdGV0Yywgc2l6ZW9mKEZPUk1BVEVUQykpOworICAg
IFplcm9NZW1vcnkocFN0Z01lZCwgc2l6ZW9mKFNUR01FRElVTSkpOworCisgICAgKmZvcm1hdGV0
YyA9ICpwZm9ybWF0ZXRjOworICAgIG1fZm9ybWF0cy5hcHBlbmQoZm9ybWF0ZXRjKTsKKworICAg
IGlmIChmUmVsZWFzZSkKKyAgICAgICAgKnBTdGdNZWQgPSAqcG1lZGl1bTsKKyAgICBlbHNlCisg
ICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1lZGl1bSwgcGZvcm1hdGV0Yyk7CisgICAgbV9t
ZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3ZvaWQgRFJU
RGF0YU9iamVjdDo6Q29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0qIHBN
ZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYykKK3sKKyAgICBzd2l0Y2ggKHBNZWRTcmMtPnR5bWVk
KSB7CisjaWYgIU9TKFdJTkNFKQorICAgIGNhc2UgVFlNRURfSEdMT0JBTDoKKyAgICAgICAgcE1l
ZERlc3QtPmhHbG9iYWwgPSBzdGF0aWNfY2FzdDxIR0xPQkFMPihPbGVEdXBsaWNhdGVEYXRhKHBN
ZWRTcmMtPmhHbG9iYWwsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVFlNRURfR0RJOgorICAgICAgICBwTWVkRGVzdC0+aEJpdG1hcCA9IHN0YXRpY19j
YXN0PEhCSVRNQVA+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEJpdG1hcCwgcEZtdFNyYy0+
Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9NRlBJQ1Q6Cisg
ICAgICAgIHBNZWREZXN0LT5oTWV0YUZpbGVQaWN0ID0gc3RhdGljX2Nhc3Q8SE1FVEFGSUxFUElD
VD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oTWV0YUZpbGVQaWN0LCBwRm10U3JjLT5jZkZv
cm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0VOSE1GOgorICAgICAg
ICBwTWVkRGVzdC0+aEVuaE1ldGFGaWxlID0gc3RhdGljX2Nhc3Q8SEVOSE1FVEFGSUxFPihPbGVE
dXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhFbmhNZXRhRmlsZSwgcEZtdFNyYy0+Y2ZGb3JtYXQsIDAp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9GSUxFOgorICAgICAgICBwTWVkU3Jj
LT5scHN6RmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxMUE9MRVNUUj4oT2xlRHVwbGljYXRlRGF0YShw
TWVkU3JjLT5scHN6RmlsZU5hbWUsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJy
ZWFrOworI2VuZGlmCisgICAgY2FzZSBUWU1FRF9JU1RSRUFNOgorICAgICAgICBwTWVkRGVzdC0+
cHN0bSA9IHBNZWRTcmMtPnBzdG07CisgICAgICAgIHBNZWRTcmMtPnBzdG0tPkFkZFJlZigpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0lTVE9SQUdFOgorICAgICAgICBwTWVkRGVz
dC0+cHN0ZyA9IHBNZWRTcmMtPnBzdGc7CisgICAgICAgIHBNZWRTcmMtPnBzdGctPkFkZFJlZigp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcE1lZERlc3QtPnR5bWVkID0gcE1lZFNyYy0+dHltZWQ7CisgICAgcE1lZERlc3QtPnBVbmtG
b3JSZWxlYXNlID0gMDsKKyAgICBpZiAocE1lZFNyYy0+cFVua0ZvclJlbGVhc2UpIHsKKyAgICAg
ICAgcE1lZERlc3QtPnBVbmtGb3JSZWxlYXNlID0gcE1lZFNyYy0+cFVua0ZvclJlbGVhc2U7Cisg
ICAgICAgIHBNZWRTcmMtPnBVbmtGb3JSZWxlYXNlLT5BZGRSZWYoKTsKKyAgICB9Cit9CitTVERN
RVRIT0RJTVAgRFJURGF0YU9iamVjdDo6RW51bUZvcm1hdEV0YyhEV09SRCBkd0RpcmVjdGlvbiwg
SUVudW1GT1JNQVRFVEMqKiBwcGVudW1Gb3JtYXRFdGMpCit7IAorICAgIGlmICghcHBlbnVtRm9y
bWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnBwZW51bUZvcm1hdEV0
YyA9IDA7CisgICAgc3dpdGNoIChkd0RpcmVjdGlvbikgeworICAgIGNhc2UgREFUQURJUl9HRVQ6
CisgICAgICAgICpwcGVudW1Gb3JtYXRFdGMgPSBuZXcgV0NFbnVtRm9ybWF0RXRjKG1fZm9ybWF0
cyk7CisgICAgICAgIGlmICghKCpwcGVudW1Gb3JtYXRFdGMpKQorICAgICAgICAgICAgcmV0dXJu
IEVfT1VUT0ZNRU1PUlk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEQVRBRElSX1NFVDoK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmpl
Y3Q6OkRBZHZpc2UoRk9STUFURVRDKiwgRFdPUkQsIElBZHZpc2VTaW5rKiwgRFdPUkQqKQoreyAK
KyAgICByZXR1cm4gT0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEOworfQorCitTVERNRVRIT0RJTVAg
RFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKERXT1JEKQoreworICAgIHJldHVybiBFX05PVElNUEw7
Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGF0YU9iamVjdDo6RW51bURBZHZp
c2UoSUVudW1TVEFUREFUQSoqKQoreworICAgIHJldHVybiBPTEVfRV9BRFZJU0VOT1RTVVBQT1JU
RUQ7Cit9CisKK3ZvaWQgRFJURGF0YU9iamVjdDo6Y2xlYXJEYXRhKENMSVBGT1JNQVQgZm9ybWF0
KQoreworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgbV9m
b3JtYXRzLnNpemUoKSkgeworICAgICAgICBpZiAobV9mb3JtYXRzW3Bvc2l0aW9uXS0+Y2ZGb3Jt
YXQgPT0gZm9ybWF0KSB7CisgICAgICAgICAgICBGT1JNQVRFVEMqIGN1cnJlbnQgPSBtX2Zvcm1h
dHNbcG9zaXRpb25dOworICAgICAgICAgICAgbV9mb3JtYXRzW3Bvc2l0aW9uXSA9IG1fZm9ybWF0
c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV07CisgICAgICAgICAgICBtX2Zvcm1hdHNbbV9mb3JtYXRz
LnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAgICAgIG1fZm9ybWF0cy5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICBkZWxldGUgY3VycmVudDsKKyAgICAgICAgICAgIFNUR01FRElVTSogbWVkaXVt
ID0gbV9tZWRpdW1bcG9zaXRpb25dOworICAgICAgICAgICAgbV9tZWRpdW1bcG9zaXRpb25dID0g
bV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV07CisgICAgICAgICAgICBtX21lZGl1bVttX21l
ZGl1bS5zaXplKCkgLSAxXSA9IDA7CisgICAgICAgICAgICBtX21lZGl1bS5yZW1vdmVMYXN0KCk7
CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1bSk7CisgICAgICAgICAgICBkZWxl
dGUgbWVkaXVtOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcG9z
aXRpb24rKzsKKyAgICB9Cit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0
YU9iamVjdC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERh
dGFPYmplY3QuaAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJU
RGF0YU9iamVjdC5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw3MSBAQA0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERSVERhdGFPYmplY3RfaAorI2RlZmluZSBEUlREYXRhT2JqZWN0X2gKKworI2luY2x1
ZGUgPFNobE9iai5oPgorI2luY2x1ZGUgPG9iamlkbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworRk9STUFURVRDKiBjZkhEcm9wRm9ybWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZGaWxlTmFt
ZVdGb3JtYXQoKTsKKworRk9STUFURVRDKiBjZlVybFdGb3JtYXQoKTsKKworY2xhc3MgRFJURGF0
YU9iamVjdCA6IHB1YmxpYyBJRGF0YU9iamVjdCB7CitwdWJsaWM6CisgICAgdm9pZCBDb3B5TWVk
aXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBw
Rm10U3JjKTsKKworICAgIC8vIElVbmtub3duCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsg
ICAgICAgIAorICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7Cisg
ICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7CisKKyAgICAvLyBJ
RGF0YU9iamVjdAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREYXRh
KEZPUk1BVEVUQyogcGZvcm1hdEluLCBTVEdNRURJVU0qIHBtZWRpdW0pOworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREYXRhSGVyZShGT1JNQVRFVEMqIHBmb3JtYXQs
IFNUR01FRElVTSogcG1lZGl1bSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFF1ZXJ5R2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXQpOworICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDYW5vbmljYWxGb3JtYXRFdGMoRk9STUFURVRDKiBwZm9y
bWF0ZWN0SW4sIEZPUk1BVEVUQyogcGZvcm1hdE91dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0LCBTVEdNRURJVU0qcG1l
ZGl1bSwgQk9PTCByZWxlYXNlKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRW51bUZvcm1hdEV0YyhEV09SRCBkd0RpcmVjdGlvbiwgSUVudW1GT1JNQVRFVEMqKiBwcGVu
dW1Gb3JtYXRFdGMpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEQWR2
aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNlU2luayosIERXT1JEKik7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERVbmFkdmlzZShEV09SRCk7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVudW1EQWR2aXNlKElFbnVtU1RBVERBVEEqKik7
CisKKyAgICB2b2lkIGNsZWFyRGF0YShDTElQRk9STUFUKTsKKyAgICAKKyAgICBzdGF0aWMgSFJF
U1VMVCBjcmVhdGVJbnN0YW5jZShEUlREYXRhT2JqZWN0KiopOworcHJpdmF0ZToKKyAgICBEUlRE
YXRhT2JqZWN0KCk7CisgICAgfkRSVERhdGFPYmplY3QoKTsKKyAgICBsb25nIG1fcmVmOworICAg
IFZlY3RvcjxGT1JNQVRFVEMqPiBtX2Zvcm1hdHM7CisgICAgVmVjdG9yPFNUR01FRElVTSo+IG1f
bWVkaXVtOworfTsKKworI2VuZGlmIC8vIERSVERhdGFPYmplY3RfaApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQ0KKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcAkocmV2aXNpb24gMCkNCkBA
IC0wLDAgKzEsODYgQEANCisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6
CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEUlREcm9wU291cmNlLmgiCisKK0RS
VERyb3BTb3VyY2U6OkRSVERyb3BTb3VyY2UoKQorICAgIDogbV9yZWYoMSkKKyAgICAsIG1fZHJv
cHBlZChmYWxzZSkKK3sKK30KKworRFJURHJvcFNvdXJjZTo6fkRSVERyb3BTb3VyY2UoKQorewor
fQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRHJv
cFNvdXJjZSkpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigp
OworCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIHJldHVybiBFX05PSU5URVJG
QUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlREcm9wU291cmNlOjpBZGRSZWYoKQor
eworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRI
T0RJTVBfKFVMT05HKSBEUlREcm9wU291cmNlOjpSZWxlYXNlKCkKK3sKKyAgICBsb25nIHJlZkNv
dW50ID0gSW50ZXJsb2NrZWREZWNyZW1lbnQoJm1fcmVmKTsKKyAgICBpZiAoIXJlZkNvdW50KQor
ICAgICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hSRVNVTFQg
RFJURHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UoSURyb3BTb3VyY2UqKiByZXN1bHQpCit7Cisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgKnJlc3Vs
dCA9IG5ldyBEUlREcm9wU291cmNlOworICAgIHJldHVybiBTX09LOworfQorCitTVERNRVRIT0RJ
TVAgRFJURHJvcFNvdXJjZTo6UXVlcnlDb250aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJlc3NlZCwg
RFdPUkQgZ3JmS2V5U3RhdGUpCit7CisgICAgaWYgKGZFc2NhcGVQcmVzc2VkIHx8ICEoZ3JmS2V5
U3RhdGUgJiAoTUtfTEJVVFRPTiB8IE1LX1JCVVRUT04pKSkgeworICAgICAgICBtX2Ryb3BwZWQg
PSAhZkVzY2FwZVByZXNzZWQ7CisgICAgICAgIHJldHVybiBmRXNjYXBlUHJlc3NlZCA/IERSQUdE
Uk9QX1NfQ0FOQ0VMIDogRFJBR0RST1BfU19EUk9QOworICAgIH0KKworICAgIHJldHVybiBTX09L
OworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNrKERXT1JEIGR3
RWZmZWN0KQoreworICAgIHJldHVybiBEUkFHRFJPUF9TX1VTRURFRkFVTFRDVVJTT1JTOworfQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJldmlzaW9u
IDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsNDggQEANCisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyovCisKKyNpZm5kZWYgRFJURHJvcFNvdXJjZV9oCisjZGVmaW5lIERSVERyb3BTb3Vy
Y2VfaAorCisjaW5jbHVkZSA8U2hsT2JqLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCitjbGFz
cyBEUlREcm9wU291cmNlIDogcHVibGljIElEcm9wU291cmNlIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQs
IHZvaWQqKiBwcHZPYmplY3QpOyAgICAgICAgCisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RD
QUxMVFlQRSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJl
bGVhc2UoKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlDb250
aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJlc3NlZCwgRFdPUkQgZ3JmS2V5U3RhdGUpOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHaXZlRmVlZGJhY2soRFdPUkQgZHdFZmZl
Y3QpOworCisgICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlSW5zdGFuY2UoSURyb3BTb3VyY2UqKiBy
ZXN1bHQpOworcHJpdmF0ZToKKyAgICBEUlREcm9wU291cmNlKCk7CisgICAgfkRSVERyb3BTb3Vy
Y2UoKTsKKyAgICBsb25nIG1fcmVmOworICAgIGJvb2wgbV9kcm9wcGVkOworfTsKKworI2VuZGlm
IC8vIERSVERyb3BTb3VyY2VfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvag0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHJldmlzaW9uIDExODg4MykNCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCSh3b3JraW5nIGNvcHkpDQpAQCAt
NDAyLDYgKzQwMiwyMiBAQA0KIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURHJvcFNvdXJjZS5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURHJvcFNvdXJj
ZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuXEV2
ZW50U2VuZGVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0V2ZW50U2VuZGVyLmNwcAkocmV2aXNpb24gMTE4ODgzKQ0KKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJKHdvcmtpbmcgY29weSkNCkBAIC0xLDUg
KzEsNiBAQA0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxNiAr
MzAsMTkgQEANCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIK
IAorI2luY2x1ZGUgIkRSVERhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJEUlREcm9wU291cmNlLmgi
CiAjaW5jbHVkZSAiRHJhZ2dpbmdJbmZvLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIK
IAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9DT01QdHIuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CisjaW5jbHVkZSA8
d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KLSNp
bmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNk
ZWZpbmUgV01fRFJUX1NFTkRfUVVFVUVEX0VWRU5UIChXTV9BUFArMSkKIApAQCAtNjQyLDYgKzY0
Niw4NiBAQA0KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAK
K3N0YXRpYyBKU1ZhbHVlUmVmIGJlZ2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTT2JqZWN0UmVm
IGZpbGVzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCAwKTsK
KworICAgIGlmICghZmlsZXNBcnJheSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgSlNTdHJpbmdSZWYgbGVuZ3RoUHJvcGVydHkgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIik7CisgICAgVmVjdG9yPFVDaGFyPiBmaWxl
czsKKyAgICBpbnQgZmlsZXNDb3VudCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBKU09iamVj
dEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzQXJyYXksIGxlbmd0aFByb3BlcnR5LCAwKSwgMCk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlc0NvdW50OyArK2kpIHsKKyAgICAgICAgSlNW
YWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIGZpbGVz
QXJyYXksIGksIDApOworICAgICAgICBKU1N0cmluZ1JlZiBmaWxlID0gSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCB2YWx1ZSwgMCk7CisgICAgICAgIGZpbGVzLmFwcGVuZChKU1N0cmluZ0dl
dENoYXJhY3RlcnNQdHIoZmlsZSksIEpTU3RyaW5nR2V0TGVuZ3RoKGZpbGUpKTsKKyAgICAgICAg
ZmlsZXMuYXBwZW5kKDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2UoZmlsZSk7CisgICAgfQor
CisgICAgaWYgKGZpbGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgLy8gV2Ugc2hvdWxkIGFwcGVuZCAiMCIgaW4gdGhlIGVu
ZCBvZiB8ZmlsZXN8IHNvIHRoYXQgfERyYWdRdWVyeUZpbGVXfCByZXRyaWV2ZWQgdGhlIG51bWJl
ciBvZiBmaWxlcyBjb3JyZWN0bHkgZnJvbSBPbGUgQ2xpcGJvYXJkLgorICAgIGZpbGVzLmFwcGVu
ZCgwKTsKKworICAgIFNUR01FRElVTSBoRHJvcE1lZGl1bSA9IHswfTsKKyAgICBoRHJvcE1lZGl1
bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgU0laRV9UIGRyb3BGaWxlc1NpemUgPSBzaXpl
b2YoRFJPUEZJTEVTKSArIChzaXplb2YoV0NIQVIpICogZmlsZXMuc2l6ZSgpKTsKKyAgICBoRHJv
cE1lZGl1bS5oR2xvYmFsID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1fRERFU0hB
UkUsIGRyb3BGaWxlc1NpemUpOworICAgIERST1BGSUxFUyogZHJvcEZpbGVzID0gcmVpbnRlcnBy
ZXRfY2FzdDxEUk9QRklMRVMqPihHbG9iYWxMb2NrKGhEcm9wTWVkaXVtLmhHbG9iYWwpKTsKKyAg
ICBtZW1zZXQoZHJvcEZpbGVzLCAwLCBzaXplb2YoRFJPUEZJTEVTKSk7CisgICAgZHJvcEZpbGVz
LT5wRmlsZXMgPSBzaXplb2YoRFJPUEZJTEVTKTsKKyAgICBkcm9wRmlsZXMtPmZXaWRlID0gVFJV
RTsKKworICAgIFVDaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHJlaW50ZXJw
cmV0X2Nhc3Q8QllURSo+KGRyb3BGaWxlcykgKyBzaXplb2YoRFJPUEZJTEVTKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgZGF0YVtpXSA9
IGZpbGVzW2ldOworICAgIEdsb2JhbFVubG9jayhoRHJvcE1lZGl1bS5oR2xvYmFsKTsgCisKKyAg
ICBTVEdNRURJVU0gaEZpbGVOYW1lTWVkaXVtID0gezB9OworICAgIGhGaWxlTmFtZU1lZGl1bS50
eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgU0laRV9UIGhGaWxlTmFtZVNpemUgPSBzaXplb2Yo
V0NIQVIpICogZmlsZXMuc2l6ZSgpOworICAgIGhGaWxlTmFtZU1lZGl1bS5oR2xvYmFsID0gR2xv
YmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1fRERFU0hBUkUsIGhGaWxlTmFtZVNpemUpOwor
ICAgIFdDSEFSKiBoRmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxXQ0hBUio+KEdsb2JhbExvY2soaEZp
bGVOYW1lTWVkaXVtLmhHbG9iYWwpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVz
LnNpemUoKTsgaSsrKQorICAgICAgICBoRmlsZU5hbWVbaV0gPSBmaWxlc1tpXTsKKyAgICBHbG9i
YWxVbmxvY2soaEZpbGVOYW1lTWVkaXVtLmhHbG9iYWwpOworCisgICAgaWYgKGRyYWdnaW5nSW5m
bykgeworICAgICAgICBkZWxldGUgZHJhZ2dpbmdJbmZvOworICAgICAgICBkcmFnZ2luZ0luZm8g
PSAwOworICAgIH0KKworICAgIENPTVB0cjxEUlREYXRhT2JqZWN0PiBkYXRhT2JlamVjdDsKKyAg
ICBDT01QdHI8SURyb3BTb3VyY2U+IHNvdXJjZTsKKyAgICBpZiAoRkFJTEVEKERSVERhdGFPYmpl
Y3Q6OmNyZWF0ZUluc3RhbmNlKCZkYXRhT2JlamVjdCkpKQorICAgICAgICBkYXRhT2JlamVjdCA9
IDA7CisKKyAgICBpZiAoRkFJTEVEKERSVERyb3BTb3VyY2U6OmNyZWF0ZUluc3RhbmNlKCZzb3Vy
Y2UpKSkKKyAgICAgICAgc291cmNlID0gMDsKKworICAgIGlmIChkYXRhT2JlamVjdCAmJiBzb3Vy
Y2UpIHsKKyAgICAgICAgZHJhZ2dpbmdJbmZvID0gbmV3IERyYWdnaW5nSW5mbyhkYXRhT2JlamVj
dC5nZXQoKSwgc291cmNlLmdldCgpKTsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5zZXRQZXJmb3Jt
ZWREcm9wRWZmZWN0KERST1BFRkZFQ1RfQ09QWSk7CisgICAgfQorCisgICAgaWYgKGRyYWdnaW5n
SW5mbykgeworICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZkhE
cm9wRm9ybWF0KCksICZoRHJvcE1lZGl1bSwgRkFMU0UpOworICAgICAgICBkcmFnZ2luZ0luZm8t
PmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZkZpbGVOYW1lV0Zvcm1hdCgpLCAmaEZpbGVOYW1lTWVk
aXVtLCBGQUxTRSk7CisgICAgICAgIGRyYWdnaW5nSW5mby0+ZGF0YU9iamVjdCgpLT5TZXREYXRh
KGNmVXJsV0Zvcm1hdCgpLCAmaEZpbGVOYW1lTWVkaXVtLCBGQUxTRSk7CisgICAgICAgIE9sZVNl
dENsaXBib2FyZChkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKSk7CisgICAgICAgIGRvd24gPSB0
cnVlOworICAgIH0KKworICAgIEpTU3RyaW5nUmVsZWFzZShsZW5ndGhQcm9wZXJ0eSk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBzdGF0aWMgSlNTdGF0
aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICB7ICJjb250ZXh0Q2xpY2siLCBj
b250ZXh0Q2xpY2tDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgIm1vdXNlRG93biIsIG1vdXNlRG93
bkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCkBAIC02NTQsNiArNzM4LDcgQEANCiAgICAgeyAidGV4dFpvb21P
dXQiLCB0ZXh0Wm9vbU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAiem9vbVBhZ2VJbiIsIHpv
b21QYWdlSW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpvb21QYWdlT3V0Iiwgem9vbVBhZ2VP
dXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgImJlZ2luRHJhZ1dpdGhGaWxlcyIsIGJlZ2luRHJh
Z1dpdGhGaWxlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAwLCAwLCAwIH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144711</attachid>
            <date>2012-05-29 23:08:41 -0700</date>
            <delta_ts>2012-05-29 23:24:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles9.patch</filename>
            <type>text/plain</type>
            <size>31769</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTE4ODk0KQ0KKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxMiBAQA0KKzIwMTItMDUtMjkgIFh1ZXFpbmcgSHVh
bmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIFRoZSB0ZXN0cyBsaXN0ZWQg
aW4gd2luL1NraXBwZWQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGJ1dCBz
b21lIG9mIHRoZXNlIG5lZWQgdG8gcmViYXNlbGluZSBpbiBXaW5kb3dzLCB3ZSBkbyB0aGF0IGlu
IGJ1ZyM4NzYxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMi0wNS0yOSAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUZXN0IGV4cGVjdGF0aW9u
IHVwZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDExODg4
MykNCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQ0K
QEAgLTI0OCwyMSArMjQ4LDE2IEBADQogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtZmlsZS1zdmcu
aHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2ZpbGUtZHJhZy10by1lZGl0YWJsZS5odG1sCiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZmlsZS1pbnB1dC1maWxlcy1hY2Nlc3MuaHRtbAotZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93
LXBvc3RtZXNzYWdlLWNsb25lLWZyYW1lcy5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLWRhdGFUcmFu
c2Zlckl0ZW1MaXN0LWZpbGUtaGFuZGxpbmcuaHRtbAotZmFzdC9ldmVudHMvZHJhZy1maWxlLWNy
YXNoLmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctdG8tbmF2aWdhdGUuaHRtbAogZmFzdC9ldmVudHMv
ZHJvcC1oYW5kbGVyLXNob3VsZC1ub3Qtc3RvcC1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9k
cm9wLXdpdGgtZmlsZS1wYXRocy5odG1sCiBmYXN0L2V2ZW50cy9kcm9wem9uZS0wMDQuaHRtbAog
ZmFzdC9ldmVudHMvZmlsZS1pbnB1dC1oaWRkZW4taW4tb25kcm9wLmh0bWwKIGZhc3QvZXZlbnRz
L2lucHV0LWVsZW1lbnQtZGlzcGxheS1ub25lLWluLWRyYWdsZWF2ZS1jcmFzaC5odG1sCi1mYXN0
L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRtbAotZmFzdC9mb3Jtcy9maWxlL2Zp
bGUtaW5wdXQtY2hhbmdlLWV2ZW50Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLWlucHV0LXJl
c2V0Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLXJlc2V0LWluLWNoYW5nZS5odG1sCi1mYXN0
L2Zvcm1zL2ZpbGUvZ2V0LWZpbGUtdXBsb2FkLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1m
aWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUtcmUt
cmVuZGVyLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9yZWNvdmVyLWZpbGUtaW5wdXQtaW4tdW5wb3N0
ZWQtZm9ybS5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODg5NCkNCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsMTUgQEANCisy
MDEyLTA1LTI5ICBYdWVxaW5nIEh1YW5nICA8aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAg
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMgc2hvdWxkIGJlIGltcGxlbWVudGVk
IGluIFdpbmRvd3MsIHdoaWNoIGJsb2NrZWQgZHJhZyBhbmQgZHJvcCByZWxhdGVkIHRlc3RzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlz
IGNoYW5nZSB3YXMgcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxl
cywgdXBkYXRlIHdpbi9Ta2lwcGVkIGZpbGUgdG8gcmVtb3ZlIGRyYWcgYW5kIGRyb3AgcmVsYXRl
ZCB0ZXN0cyB3aWxsIHZhbGlhdGUgaXQuIAorCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdE
YXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpudW1iZXJPZkZpbGVzKToK
KwogMjAxMi0wNS0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Nocm9taXVtXSBNb3ZlIGZpbGVFeGlzdHMgdG8gUGxhdGZvcm0uaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJKHJldmlzaW9uIDEx
ODg4MykNCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3
b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExMSw3ICsxMTIsMjQgQEANCiAKIHVuc2lnbmVkIERyYWdEYXRhOjpu
dW1iZXJPZkZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZv
cm1EcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVEdNRURJVU0gbWVkaXVtOwor
ICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURyYWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQo
KSwgJm1lZGl1bSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhEUk9QIGhkcm9wID0gc3Rh
dGljX2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsKKworICAgIGlmICgh
aGRyb3ApCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVtRmlsZXMgPSBEcmFn
UXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CisKKyAgICBEcmFnRmluaXNoKGhk
cm9wKTsKKyAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOworCisgICAgcmV0dXJuIG51
bUZpbGVzOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYg
cmVzdWx0KSBjb25zdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg4OTQpDQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMSwzICsxLDU3IEBADQorMjAxMi0wNS0yOSAgWHVlcWluZyBIdWFuZyAg
PGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFn
V2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXaW5kb3dzLCB3aGljaCBibG9ja2Vk
IGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5j
cHA6IEFkZGVkLgorICAgICAgICAoY2ZIRHJvcEZvcm1hdCk6CisgICAgICAgIChjZkZpbGVOYW1l
V0Zvcm1hdCk6CisgICAgICAgIChjZlVybFdGb3JtYXQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0
RXRjKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAg
ICAgKFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoV0NFbnVtRm9y
bWF0RXRjOjpBZGRSZWYpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZWxlYXNlKToKKyAg
ICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6TmV4dCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6
OlNraXApOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZXNldCk6CisgICAgICAgIChXQ0Vu
dW1Gb3JtYXRFdGM6OkNsb25lKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6
UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6QWRkUmVmKToKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6OlJlbGVhc2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
RGF0YSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXREYXRhSGVyZSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
Q2Fub25pY2FsRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlNldERhdGEpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgIChEUlREYXRhT2Jq
ZWN0OjpFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRBZHZpc2UpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OkVudW1EQWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaDogQWRkZWQuCisgICAg
ICAgIChEUlREYXRhT2JqZWN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJv
cFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJj
ZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjp+RFJURHJvcFNvdXJjZSk6CisgICAgICAgIChE
UlREcm9wU291cmNlOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpB
ZGRSZWYpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6UmVsZWFzZSk6CisgICAgICAgIChEUlRE
cm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpRdWVy
eUNvbnRpbnVlRHJhZyk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2spOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmg6IEFkZGVkLgorICAg
ICAgICAoRFJURHJvcFNvdXJjZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5k
ZXIuY3BwOgorICAgICAgICAoYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2spOgorCiAyMDEyLTA1
LTI5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGEgbGlu
dGVyIGVycm9yIGZvciBwbmdzIHRoYXQgbGFjayBhbiBlbWJlZGRlZCBjaGVja3N1bQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAw
KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsMzg1IEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgp
Cit7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Q0ZfSERST1AsIDAsIERWQVNQ
RUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsK
K30KKworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQg
Y2YgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMIkZpbGVOYW1lVyIpOworICAgIHN0YXRpYyBG
T1JNQVRFVEMgdXJsRm9ybWF0ID0ge2NmLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURf
SEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZVcmxX
Rm9ybWF0KCkKK3sKKyAgICBzdGF0aWMgVUlOVCBjZiA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0
KEwiVW5pZm9ybVJlc291cmNlTG9jYXRvclciKTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZv
cm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAg
IHJldHVybiAmdXJsRm9ybWF0OworfQorCitjbGFzcyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMg
SUVudW1GT1JNQVRFVEMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhj
b25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisKKyAgICAvLyBJVW5r
bm93biBtZW1iZXJzCisgICAgU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNlKShSRUZJSUQsIHZvaWQq
Kik7CisgICAgU1RETUVUSE9EXyhVTE9ORywgQWRkUmVmKSgpOworICAgIFNURE1FVEhPRF8oVUxP
TkcsIFJlbGVhc2UpKCk7CisKKyAgICAvLyBJRW51bUZPUk1BVEVUQyBtZW1iZXJzCisgICAgU1RE
TUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVUQywgVUxPTkcqKTsKKyAgICBTVERNRVRIT0Qo
U2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChSZXNldCkoKTsKKyAgICBTVERNRVRIT0QoQ2xv
bmUpKElFbnVtRk9STUFURVRDKiopOworCitwcml2YXRlOgorICAgIGxvbmcgbV9yZWY7CisgICAg
VmVjdG9yPEZPUk1BVEVUQz4gbV9mb3JtYXRzOworICAgIHNpemVfdCBtX2N1cnJlbnQ7Cit9Owor
CitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRD
PiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1f
Zm9ybWF0cyhmb3JtYXRzKQoreworfQorCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0
Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1hdHMpCisgICAgOiBtX3JlZigxKQorICAg
ICwgbV9jdXJyZW50KDApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKCpmb3JtYXRzW2ldKTsKK30KKwor
U1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQs
IHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1
YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRW51bUZP
Uk1BVEVUQykpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigp
OworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFD
RTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVtRm9ybWF0RXRjOjpBZGRSZWYoKQor
eworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRI
T0RJTVBfKFVMT05HKSBXQ0VudW1Gb3JtYXRFdGM6OlJlbGVhc2UoKQoreworICAgIGxvbmcgcmVm
Q291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQp
CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVU
SE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZPUk1BVEVUQyBscEZv
cm1hdEV0YywgVUxPTkcqIHBjZWx0RmV0Y2hlZCkKK3sKKyAgICBpZiAocGNlbHRGZXRjaGVkKQor
ICAgICAgICAqcGNlbHRGZXRjaGVkID0gMDsKKworICAgIFVMT05HIGNSZXR1cm4gPSBjZWx0Owor
CisgICAgaWYgKGNlbHQgPD0gMCB8fCAhbHBGb3JtYXRFdGMgfHwgbV9jdXJyZW50ID49IG1fZm9y
bWF0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFwY2VsdEZl
dGNoZWQgJiYgY2VsdCAhPSAxKSAvLyBwY2VsdEZldGNoZWQgY2FuIGJlIDAgb25seSBmb3IgMSBp
dGVtIHJlcXVlc3QKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICB3aGlsZSAobV9jdXJy
ZW50IDwgbV9mb3JtYXRzLnNpemUoKSAmJiBjUmV0dXJuID4gMCkgeworICAgICAgICAqbHBGb3Jt
YXRFdGMrKyA9IG1fZm9ybWF0c1ttX2N1cnJlbnQrK107CisgICAgICAgIC0tY1JldHVybjsKKyAg
ICB9CisgICAgaWYgKHBjZWx0RmV0Y2hlZCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQg
LSBjUmV0dXJuOworCisgICAgcmV0dXJuICFjUmV0dXJuID8gU19PSyA6IFNfRkFMU0U7Cit9CisK
K1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OlNraXAoVUxPTkcgY2VsdCkKK3sKKyAgICBp
ZiAoKG1fY3VycmVudCArIGNlbHQpID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAgICAgIHJldHVy
biBTX0ZBTFNFOworICAgIG1fY3VycmVudCArPSBjZWx0OworICAgIHJldHVybiBTX09LOworfQor
CitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpSZXNldCgpCit7CisgICAgbV9jdXJyZW50
ID0gMDsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0
Yzo6Q2xvbmUoSUVudW1GT1JNQVRFVEMqKiBwcENsb25lRW51bUZvcm1hdEV0YykKK3sKKyAgICBp
ZiAoIXBwQ2xvbmVFbnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgV0NFbnVtRm9ybWF0RXRjKiBuZXdFbnVtID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zvcm1h
dHMpOworICAgIGlmICghbmV3RW51bSkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisK
KyAgICBuZXdFbnVtLT5BZGRSZWYoKTsKKyAgICBuZXdFbnVtLT5tX2N1cnJlbnQgPSBtX2N1cnJl
bnQ7CisgICAgKnBwQ2xvbmVFbnVtRm9ybWF0RXRjID0gbmV3RW51bTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0hSRVNVTFQgRFJURGF0YU9iamVjdDo6Y3JlYXRl
SW5zdGFuY2UoRFJURGF0YU9iamVjdCoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERhdGFPYmplY3Qo
KTsKKyAgICByZXR1cm4gU19PSzsKK30KKworRFJURGF0YU9iamVjdDo6RFJURGF0YU9iamVjdCgp
CisgICAgOiBtX3JlZigxKQoreworfQorCitEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21lZGl1bS5zaXplKCk7ICsraSkgewor
ICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1fbWVkaXVtW2ldKTsKKyAgICAgICAgZGVsZXRlIG1f
bWVkaXVtW2ldOworICAgIH0KKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2Zvcm1hdHMpOwor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRGF0
YU9iamVjdCkpCisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworCisgICAgaWYgKCpwcHZPYmpl
Y3QpIHsKKyAgICAgICAgQWRkUmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAg
ICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0
YU9iamVjdDo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1f
cmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0YU9iamVjdDo6UmVsZWFzZSgp
Cit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7Cisg
ICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNv
dW50OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMq
IHBmb3JtYXRldGNJbiwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZiAoIXBmb3JtYXRl
dGNJbiB8fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBwbWVkaXVt
LT5oR2xvYmFsID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1h
dHNbaV0tPmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4tPmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+
ZHdBc3BlY3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9y
bWF0KSB7CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zv
cm1hdHNbaV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVj
dDo6R2V0RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVf
Tk9USU1QTDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShG
T1JNQVRFVEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmICghcGZvcm1hdGV0YykKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICghKERWQVNQRUNUX0NPTlRFTlQgJiBwZm9ybWF0
ZXRjLT5kd0FzcGVjdCkpCisgICAgICAgIHJldHVybiAoRFZfRV9EVkFTUEVDVCk7CisKKyAgICBI
UkVTVUxUIGhSZXN1bHQgPSBEVl9FX1RZTUVEOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mb3JtYXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAm
IG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKKyAgICAgICAgICAgIGlmIChwZm9ybWF0ZXRjLT5jZkZv
cm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KQorICAgICAgICAgICAgICAgIHJldHVybiBT
X09LOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGhSZXN1bHQgPSBEVl9FX0NM
SVBGT1JNQVQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaFJlc3VsdCA9IERWX0VfVFlN
RUQ7CisgICAgfQorICAgIHJldHVybiBoUmVzdWx0OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0
YU9iamVjdDo6R2V0Q2Fub25pY2FsRm9ybWF0RXRjKEZPUk1BVEVUQyosIEZPUk1BVEVUQyopCit7
IAorICAgIHJldHVybiBEQVRBX1NfU0FNRUZPUk1BVEVUQzsKK30KKworU1RETUVUSE9ESU1QIERS
VERhdGFPYmplY3Q6OlNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0ZXRjLCBTVEdNRURJVU0qIHBt
ZWRpdW0sIEJPT0wgZlJlbGVhc2UpCit7IAorICAgIGlmICghcGZvcm1hdGV0YyB8fCAhcG1lZGl1
bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEZPUk1BVEVUQyogZm9ybWF0ZXRj
ID0gbmV3IEZPUk1BVEVUQzsKKyAgICBpZiAoIWZvcm1hdGV0YykKKyAgICAgICAgcmV0dXJuIEVf
T1VUT0ZNRU1PUlk7CisKKyAgICBTVEdNRURJVU0qIHBTdGdNZWQgPSBuZXcgU1RHTUVESVVNOwor
CisgICAgaWYgKCFwU3RnTWVkKSB7CisgICAgICAgIGRlbGV0ZSBmb3JtYXRldGM7CisgICAgICAg
IHJldHVybiBFX09VVE9GTUVNT1JZOworICAgIH0KKworICAgIFplcm9NZW1vcnkoZm9ybWF0ZXRj
LCBzaXplb2YoRk9STUFURVRDKSk7CisgICAgWmVyb01lbW9yeShwU3RnTWVkLCBzaXplb2YoU1RH
TUVESVVNKSk7CisKKyAgICAqZm9ybWF0ZXRjID0gKnBmb3JtYXRldGM7CisgICAgbV9mb3JtYXRz
LmFwcGVuZChmb3JtYXRldGMpOworCisgICAgaWYgKGZSZWxlYXNlKQorICAgICAgICAqcFN0Z01l
ZCA9ICpwbWVkaXVtOworICAgIGVsc2UKKyAgICAgICAgQ29weU1lZGl1bShwU3RnTWVkLCBwbWVk
aXVtLCBwZm9ybWF0ZXRjKTsKKyAgICBtX21lZGl1bS5hcHBlbmQocFN0Z01lZCk7CisKKyAgICBy
ZXR1cm4gU19PSzsKK30KKwordm9pZCBEUlREYXRhT2JqZWN0OjpDb3B5TWVkaXVtKFNUR01FRElV
TSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFURVRDKiBwRm10U3JjKQorewor
ICAgIHN3aXRjaCAocE1lZFNyYy0+dHltZWQpIHsKKyNpZiAhT1MoV0lOQ0UpCisgICAgY2FzZSBU
WU1FRF9IR0xPQkFMOgorICAgICAgICBwTWVkRGVzdC0+aEdsb2JhbCA9IHN0YXRpY19jYXN0PEhH
TE9CQUw+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEdsb2JhbCwgcEZtdFNyYy0+Y2ZGb3Jt
YXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9HREk6CisgICAgICAgIHBN
ZWREZXN0LT5oQml0bWFwID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oT2xlRHVwbGljYXRlRGF0YShw
TWVkU3JjLT5oQml0bWFwLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRZTUVEX01GUElDVDoKKyAgICAgICAgcE1lZERlc3QtPmhNZXRhRmlsZVBpY3Qg
PSBzdGF0aWNfY2FzdDxITUVUQUZJTEVQSUNUPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhN
ZXRhRmlsZVBpY3QsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVFlNRURfRU5ITUY6CisgICAgICAgIHBNZWREZXN0LT5oRW5oTWV0YUZpbGUgPSBzdGF0
aWNfY2FzdDxIRU5ITUVUQUZJTEU+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEVuaE1ldGFG
aWxlLCBwRm10U3JjLT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZ
TUVEX0ZJTEU6CisgICAgICAgIHBNZWRTcmMtPmxwc3pGaWxlTmFtZSA9IHN0YXRpY19jYXN0PExQ
T0xFU1RSPihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmxwc3pGaWxlTmFtZSwgcEZtdFNyYy0+
Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIFRZTUVEX0lT
VFJFQU06CisgICAgICAgIHBNZWREZXN0LT5wc3RtID0gcE1lZFNyYy0+cHN0bTsKKyAgICAgICAg
cE1lZFNyYy0+cHN0bS0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlNRURf
SVNUT1JBR0U6CisgICAgICAgIHBNZWREZXN0LT5wc3RnID0gcE1lZFNyYy0+cHN0ZzsKKyAgICAg
ICAgcE1lZFNyYy0+cHN0Zy0+QWRkUmVmKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwTWVkRGVzdC0+dHltZWQgPSBwTWVkU3JjLT50
eW1lZDsKKyAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSAwOworICAgIGlmIChwTWVkU3Jj
LT5wVW5rRm9yUmVsZWFzZSkgeworICAgICAgICBwTWVkRGVzdC0+cFVua0ZvclJlbGVhc2UgPSBw
TWVkU3JjLT5wVW5rRm9yUmVsZWFzZTsKKyAgICAgICAgcE1lZFNyYy0+cFVua0ZvclJlbGVhc2Ut
PkFkZFJlZigpOworICAgIH0KK30KK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpFbnVtRm9y
bWF0RXRjKERXT1JEIGR3RGlyZWN0aW9uLCBJRW51bUZPUk1BVEVUQyoqIHBwZW51bUZvcm1hdEV0
YykKK3sgCisgICAgaWYgKCFwcGVudW1Gb3JtYXRFdGMpCisgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisKKyAgICAqcHBlbnVtRm9ybWF0RXRjID0gMDsKKyAgICBzd2l0Y2ggKGR3RGlyZWN0aW9u
KSB7CisgICAgY2FzZSBEQVRBRElSX0dFVDoKKyAgICAgICAgKnBwZW51bUZvcm1hdEV0YyA9IG5l
dyBXQ0VudW1Gb3JtYXRFdGMobV9mb3JtYXRzKTsKKyAgICAgICAgaWYgKCEoKnBwZW51bUZvcm1h
dEV0YykpCisgICAgICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIERBVEFESVJfU0VUOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBF
X05PVElNUEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQor
CitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6REFkdmlzZShGT1JNQVRFVEMqLCBEV09SRCwg
SUFkdmlzZVNpbmsqLCBEV09SRCopCit7IAorICAgIHJldHVybiBPTEVfRV9BRFZJU0VOT1RTVVBQ
T1JURUQ7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpEVW5hZHZpc2UoRFdPUkQp
Cit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBEUlREYXRhT2JqZWN0OjpFbnVtREFkdmlzZShJRW51bVNUQVREQVRBKiopCit7CisgICAgcmV0
dXJuIE9MRV9FX0FEVklTRU5PVFNVUFBPUlRFRDsKK30KKwordm9pZCBEUlREYXRhT2JqZWN0Ojpj
bGVhckRhdGEoQ0xJUEZPUk1BVCBmb3JtYXQpCit7CisgICAgc2l6ZV90IHBvc2l0aW9uID0gMDsK
KyAgICB3aGlsZSAocG9zaXRpb24gPCBtX2Zvcm1hdHMuc2l6ZSgpKSB7CisgICAgICAgIGlmICht
X2Zvcm1hdHNbcG9zaXRpb25dLT5jZkZvcm1hdCA9PSBmb3JtYXQpIHsKKyAgICAgICAgICAgIEZP
Uk1BVEVUQyogY3VycmVudCA9IG1fZm9ybWF0c1twb3NpdGlvbl07CisgICAgICAgICAgICBtX2Zv
cm1hdHNbcG9zaXRpb25dID0gbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV0gPSAwOworICAgICAgICAgICAg
bV9mb3JtYXRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OworICAg
ICAgICAgICAgU1RHTUVESVVNKiBtZWRpdW0gPSBtX21lZGl1bVtwb3NpdGlvbl07CisgICAgICAg
ICAgICBtX21lZGl1bVtwb3NpdGlvbl0gPSBtX21lZGl1bVttX21lZGl1bS5zaXplKCkgLSAxXTsK
KyAgICAgICAgICAgIG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAg
ICAgIG1fbWVkaXVtLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0o
bWVkaXVtKTsKKyAgICAgICAgICAgIGRlbGV0ZSBtZWRpdW07CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBwb3NpdGlvbisrOworICAgIH0KK30KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCShyZXZpc2lvbiAwKQ0KKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmgJKHJldmlzaW9uIDApDQpAQCAt
MCwwICsxLDcxIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRFJURGF0YU9iamVjdF9oCisjZGVmaW5l
IERSVERhdGFPYmplY3RfaAorCisjaW5jbHVkZSA8U2hsT2JqLmg+CisjaW5jbHVkZSA8b2JqaWRs
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitGT1JNQVRFVEMqIGNmSERyb3BGb3JtYXQo
KTsKKworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpOworCitGT1JNQVRFVEMqIGNmVXJs
V0Zvcm1hdCgpOworCitjbGFzcyBEUlREYXRhT2JqZWN0IDogcHVibGljIElEYXRhT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB2b2lkIENvcHlNZWRpdW0oU1RHTUVESVVNKiBwTWVkRGVzdCwgU1RHTUVE
SVVNKiBwTWVkU3JjLCBGT1JNQVRFVEMqIHBGbXRTcmMpOworCisgICAgLy8gSVVua25vd24KKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlE
IHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOyAgICAgICAgCisgICAgdmlydHVhbCBVTE9ORyBTVERN
RVRIT0RDQUxMVFlQRSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExU
WVBFIFJlbGVhc2UoKTsKKworICAgIC8vIElEYXRhT2JqZWN0CisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIEdldERhdGEoRk9STUFURVRDKiBwZm9ybWF0SW4sIFNUR01FRElV
TSogcG1lZGl1bSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldERh
dGFIZXJlKEZPUk1BVEVUQyogcGZvcm1hdCwgU1RHTUVESVVNKiBwbWVkaXVtKTsKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlHZXREYXRhKEZPUk1BVEVUQyogcGZv
cm1hdCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldENhbm9uaWNh
bEZvcm1hdEV0YyhGT1JNQVRFVEMqIHBmb3JtYXRlY3RJbiwgRk9STUFURVRDKiBwZm9ybWF0T3V0
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0RGF0YShGT1JNQVRF
VEMqIHBmb3JtYXQsIFNUR01FRElVTSpwbWVkaXVtLCBCT09MIHJlbGVhc2UpOworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBFbnVtRm9ybWF0RXRjKERXT1JEIGR3RGlyZWN0
aW9uLCBJRW51bUZPUk1BVEVUQyoqIHBwZW51bUZvcm1hdEV0Yyk7CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERBZHZpc2UoRk9STUFURVRDKiwgRFdPUkQsIElBZHZpc2VT
aW5rKiwgRFdPUkQqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFVu
YWR2aXNlKERXT1JEKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRW51
bURBZHZpc2UoSUVudW1TVEFUREFUQSoqKTsKKworICAgIHZvaWQgY2xlYXJEYXRhKENMSVBGT1JN
QVQpOworICAgIAorICAgIHN0YXRpYyBIUkVTVUxUIGNyZWF0ZUluc3RhbmNlKERSVERhdGFPYmpl
Y3QqKik7Citwcml2YXRlOgorICAgIERSVERhdGFPYmplY3QoKTsKKyAgICB+RFJURGF0YU9iamVj
dCgpOworICAgIGxvbmcgbV9yZWY7CisgICAgVmVjdG9yPEZPUk1BVEVUQyo+IG1fZm9ybWF0czsK
KyAgICBWZWN0b3I8U1RHTUVESVVNKj4gbV9tZWRpdW07Cit9OworCisjZW5kaWYgLy8gRFJURGF0
YU9iamVjdF9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJjZS5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURHJvcFNvdXJj
ZS5jcHAJKHJldmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BT
b3VyY2UuY3BwCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw4NiBAQA0KKy8qCisqIENvcHlyaWdo
dCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRSVERyb3BTb3VyY2UuaCIKKworRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJjZSgpCisg
ICAgOiBtX3JlZigxKQorICAgICwgbV9kcm9wcGVkKGZhbHNlKQoreworfQorCitEUlREcm9wU291
cmNlOjp+RFJURHJvcFNvdXJjZSgpCit7Cit9CisKK1NURE1FVEhPRElNUCBEUlREcm9wU291cmNl
OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAq
cHB2T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbElJRChyaWlkLCBJSURfSVVua25vd24pIHx8
IElzRXF1YWxJSUQocmlpZCwgSUlEX0lEcm9wU291cmNlKSkgeworICAgICAgICAqcHB2T2JqZWN0
ID0gdGhpczsKKyAgICAgICAgQWRkUmVmKCk7CisKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAg
fQorCisgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcp
IERSVERyb3BTb3VyY2U6OkFkZFJlZigpCit7CisgICAgcmV0dXJuIEludGVybG9ja2VkSW5jcmVt
ZW50KCZtX3JlZik7Cit9CisKK1NURE1FVEhPRElNUF8oVUxPTkcpIERSVERyb3BTb3VyY2U6OlJl
bGVhc2UoKQoreworICAgIGxvbmcgcmVmQ291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9y
ZWYpOworICAgIGlmICghcmVmQ291bnQpCisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVy
biByZWZDb3VudDsKK30KKworSFJFU1VMVCBEUlREcm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZShJ
RHJvcFNvdXJjZSoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IEVfSU5WQUxJREFSRzsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERyb3BTb3VyY2U7CisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBEUlREcm9wU291cmNlOjpRdWVyeUNvbnRpbnVl
RHJhZyhCT09MIGZFc2NhcGVQcmVzc2VkLCBEV09SRCBncmZLZXlTdGF0ZSkKK3sKKyAgICBpZiAo
ZkVzY2FwZVByZXNzZWQgfHwgIShncmZLZXlTdGF0ZSAmIChNS19MQlVUVE9OIHwgTUtfUkJVVFRP
TikpKSB7CisgICAgICAgIG1fZHJvcHBlZCA9ICFmRXNjYXBlUHJlc3NlZDsKKyAgICAgICAgcmV0
dXJuIGZFc2NhcGVQcmVzc2VkID8gRFJBR0RST1BfU19DQU5DRUwgOiBEUkFHRFJPUF9TX0RST1A7
CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1NURE1FVEhPRElNUCBEUlREcm9wU291
cmNlOjpHaXZlRmVlZGJhY2soRFdPUkQgZHdFZmZlY3QpCit7CisgICAgcmV0dXJuIERSQUdEUk9Q
X1NfVVNFREVGQVVMVENVUlNPUlM7Cit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RFJURHJvcFNvdXJjZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0RSVERyb3BTb3VyY2UuaAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vRFJURHJvcFNvdXJjZS5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw0OCBAQA0KKy8qCisq
IENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKworI2lmbmRlZiBEUlREcm9wU291
cmNlX2gKKyNkZWZpbmUgRFJURHJvcFNvdXJjZV9oCisKKyNpbmNsdWRlIDxTaGxPYmouaD4KKyNp
bmNsdWRlIDx3aW5kb3dzLmg+CisKK2NsYXNzIERSVERyb3BTb3VyY2UgOiBwdWJsaWMgSURyb3BT
b3VyY2UgeworcHVibGljOgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBR
dWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7ICAgICAgICAKKyAg
ICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOworICAgIHZpcnR1YWwg
VUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBRdWVyeUNvbnRpbnVlRHJhZyhCT09MIGZFc2NhcGVQcmVzc2VkLCBE
V09SRCBncmZLZXlTdGF0ZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IEdpdmVGZWVkYmFjayhEV09SRCBkd0VmZmVjdCk7CisKKyAgICBzdGF0aWMgSFJFU1VMVCBjcmVh
dGVJbnN0YW5jZShJRHJvcFNvdXJjZSoqIHJlc3VsdCk7Citwcml2YXRlOgorICAgIERSVERyb3BT
b3VyY2UoKTsKKyAgICB+RFJURHJvcFNvdXJjZSgpOworICAgIGxvbmcgbV9yZWY7CisgICAgYm9v
bCBtX2Ryb3BwZWQ7Cit9OworCisjZW5kaWYgLy8gRFJURHJvcFNvdXJjZV9oCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagkocmV2aXNp
b24gMTE4ODgzKQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkNCkBAIC00MDIsNiArNDAyLDIyIEBADQogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERSVERhdGFPYmplY3QuY3BwIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXERSVERhdGFP
YmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
LlxEUlREcm9wU291cmNlLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLlxEUlREcm9wU291cmNlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cRXZlbnRTZW5kZXIuY3BwIgogCQkJCT4KIAkJCTwvRmls
ZT4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwCShyZXZp
c2lvbiAxMTg4ODMpDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0V2ZW50U2VuZGVyLmNw
cAkod29ya2luZyBjb3B5KQ0KQEAgLTEsNSArMSw2IEBADQogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE2ICszMCwxOSBAQA0KICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJFdmVudFNlbmRlci5oIgogCisjaW5jbHVkZSAiRFJURGF0YU9iamVjdC5oIgor
I2luY2x1ZGUgIkRSVERyb3BTb3VyY2UuaCIKICNpbmNsdWRlICJEcmFnZ2luZ0luZm8uaCIKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgorI2luY2x1ZGUgPFdl
YktpdC9XZWJLaXQuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJ
Q1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+Ci0jaW5j
bHVkZSA8V2ViS2l0L1dlYktpdC5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2RlZmluZSBXTV9EUlRfU0VORF9RVUVVRURfRVZFTlQg
KFdNX0FQUCsxKQogCkBAIC02NDIsNiArNjQ2LDg2IEBADQogICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgYmVnaW5EcmFnV2l0
aEZpbGVzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChh
cmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOworCisgICAgSlNPYmplY3RSZWYgZmlsZXNBcnJheSA9IEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBhcmd1bWVudHNbMF0sIDApOworCisgICAgaWYgKCFmaWxlc0FycmF5KQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1N0cmluZ1Jl
ZiBsZW5ndGhQcm9wZXJ0eSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgi
KTsKKyAgICBWZWN0b3I8VUNoYXI+IGZpbGVzOworICAgIGludCBmaWxlc0NvdW50ID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZmlsZXNBcnJh
eSwgbGVuZ3RoUHJvcGVydHksIDApLCAwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVz
Q291bnQ7ICsraSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9w
ZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXNBcnJheSwgaSwgMCk7CisgICAgICAgIEpTU3RyaW5n
UmVmIGZpbGUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKTsKKyAgICAg
ICAgZmlsZXMuYXBwZW5kKEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihmaWxlKSwgSlNTdHJpbmdH
ZXRMZW5ndGgoZmlsZSkpOworICAgICAgICBmaWxlcy5hcHBlbmQoMCk7CisgICAgICAgIEpTU3Ry
aW5nUmVsZWFzZShmaWxlKTsKKyAgICB9CisKKyAgICBpZiAoZmlsZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICAvLyBXZSBz
aG91bGQgYXBwZW5kICIwIiBpbiB0aGUgZW5kIG9mIHxmaWxlc3wgc28gdGhhdCB8RHJhZ1F1ZXJ5
RmlsZVd8IHJldHJpZXZlZCB0aGUgbnVtYmVyIG9mIGZpbGVzIGNvcnJlY3RseSBmcm9tIE9sZSBD
bGlwYm9hcmQuCisgICAgZmlsZXMuYXBwZW5kKDApOworCisgICAgU1RHTUVESVVNIGhEcm9wTWVk
aXVtID0gezB9OworICAgIGhEcm9wTWVkaXVtLnR5bWVkID0gVFlNRURfSEdMT0JBTDsKKyAgICBT
SVpFX1QgZHJvcEZpbGVzU2l6ZSA9IHNpemVvZihEUk9QRklMRVMpICsgKHNpemVvZihXQ0hBUikg
KiBmaWxlcy5zaXplKCkpOworICAgIGhEcm9wTWVkaXVtLmhHbG9iYWwgPSBHbG9iYWxBbGxvYyhH
TUVNX01PVkVBQkxFIHwgR01FTV9EREVTSEFSRSwgZHJvcEZpbGVzU2l6ZSk7CisgICAgRFJPUEZJ
TEVTKiBkcm9wRmlsZXMgPSByZWludGVycHJldF9jYXN0PERST1BGSUxFUyo+KEdsb2JhbExvY2so
aERyb3BNZWRpdW0uaEdsb2JhbCkpOworICAgIG1lbXNldChkcm9wRmlsZXMsIDAsIHNpemVvZihE
Uk9QRklMRVMpKTsKKyAgICBkcm9wRmlsZXMtPnBGaWxlcyA9IHNpemVvZihEUk9QRklMRVMpOwor
ICAgIGRyb3BGaWxlcy0+ZldpZGUgPSBUUlVFOworCisgICAgVUNoYXIqIGRhdGEgPSByZWludGVy
cHJldF9jYXN0PFVDaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxCWVRFKj4oZHJvcEZpbGVzKSArIHNp
emVvZihEUk9QRklMRVMpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUo
KTsgKytpKQorICAgICAgICBkYXRhW2ldID0gZmlsZXNbaV07CisgICAgR2xvYmFsVW5sb2NrKGhE
cm9wTWVkaXVtLmhHbG9iYWwpOyAKKworICAgIFNUR01FRElVTSBoRmlsZU5hbWVNZWRpdW0gPSB7
MH07CisgICAgaEZpbGVOYW1lTWVkaXVtLnR5bWVkID0gVFlNRURfSEdMT0JBTDsKKyAgICBTSVpF
X1QgaEZpbGVOYW1lU2l6ZSA9IHNpemVvZihXQ0hBUikgKiBmaWxlcy5zaXplKCk7CisgICAgaEZp
bGVOYW1lTWVkaXVtLmhHbG9iYWwgPSBHbG9iYWxBbGxvYyhHTUVNX01PVkVBQkxFIHwgR01FTV9E
REVTSEFSRSwgaEZpbGVOYW1lU2l6ZSk7CisgICAgV0NIQVIqIGhGaWxlTmFtZSA9IHN0YXRpY19j
YXN0PFdDSEFSKj4oR2xvYmFsTG9jayhoRmlsZU5hbWVNZWRpdW0uaEdsb2JhbCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspCisgICAgICAgIGhGaWxlTmFt
ZVtpXSA9IGZpbGVzW2ldOworICAgIEdsb2JhbFVubG9jayhoRmlsZU5hbWVNZWRpdW0uaEdsb2Jh
bCk7CisKKyAgICBpZiAoZHJhZ2dpbmdJbmZvKSB7CisgICAgICAgIGRlbGV0ZSBkcmFnZ2luZ0lu
Zm87CisgICAgICAgIGRyYWdnaW5nSW5mbyA9IDA7CisgICAgfQorCisgICAgQ09NUHRyPERSVERh
dGFPYmplY3Q+IGRhdGFPYmVqZWN0OworICAgIENPTVB0cjxJRHJvcFNvdXJjZT4gc291cmNlOwor
ICAgIGlmIChGQUlMRUQoRFJURGF0YU9iamVjdDo6Y3JlYXRlSW5zdGFuY2UoJmRhdGFPYmVqZWN0
KSkpCisgICAgICAgIGRhdGFPYmVqZWN0ID0gMDsKKworICAgIGlmIChGQUlMRUQoRFJURHJvcFNv
dXJjZTo6Y3JlYXRlSW5zdGFuY2UoJnNvdXJjZSkpKQorICAgICAgICBzb3VyY2UgPSAwOworCisg
ICAgaWYgKGRhdGFPYmVqZWN0ICYmIHNvdXJjZSkgeworICAgICAgICBkcmFnZ2luZ0luZm8gPSBu
ZXcgRHJhZ2dpbmdJbmZvKGRhdGFPYmVqZWN0LmdldCgpLCBzb3VyY2UuZ2V0KCkpOworICAgICAg
ICBkcmFnZ2luZ0luZm8tPnNldFBlcmZvcm1lZERyb3BFZmZlY3QoRFJPUEVGRkVDVF9DT1BZKTsK
KyAgICB9CisKKyAgICBpZiAoZHJhZ2dpbmdJbmZvKSB7CisgICAgICAgIGRyYWdnaW5nSW5mby0+
ZGF0YU9iamVjdCgpLT5TZXREYXRhKGNmSERyb3BGb3JtYXQoKSwgJmhEcm9wTWVkaXVtLCBGQUxT
RSk7CisgICAgICAgIGRyYWdnaW5nSW5mby0+ZGF0YU9iamVjdCgpLT5TZXREYXRhKGNmRmlsZU5h
bWVXRm9ybWF0KCksICZoRmlsZU5hbWVNZWRpdW0sIEZBTFNFKTsKKyAgICAgICAgZHJhZ2dpbmdJ
bmZvLT5kYXRhT2JqZWN0KCktPlNldERhdGEoY2ZVcmxXRm9ybWF0KCksICZoRmlsZU5hbWVNZWRp
dW0sIEZBTFNFKTsKKyAgICAgICAgT2xlU2V0Q2xpcGJvYXJkKGRyYWdnaW5nSW5mby0+ZGF0YU9i
amVjdCgpKTsKKyAgICAgICAgZG93biA9IHRydWU7CisgICAgfQorCisgICAgSlNTdHJpbmdSZWxl
YXNlKGxlbmd0aFByb3BlcnR5KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0g
ewogICAgIHsgImNvbnRleHRDbGljayIsIGNvbnRleHRDbGlja0NhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgeyAibW91c2VEb3duIiwgbW91c2VEb3duQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKQEAgLTY1NCw2ICs3
MzgsNyBAQA0KICAgICB7ICJ0ZXh0Wm9vbU91dCIsIHRleHRab29tT3V0Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICB7ICJ6b29tUGFnZUluIiwgem9vbVBhZ2VJbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
eyAiem9vbVBhZ2VPdXQiLCB6b29tUGFnZU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAiYmVn
aW5EcmFnV2l0aEZpbGVzIiwgYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICB7IDAsIDAsIDAgfQogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144716</attachid>
            <date>2012-05-29 23:24:49 -0700</date>
            <delta_ts>2012-05-30 11:10:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>beginDragWithFiles10.patch</filename>
            <type>text/plain</type>
            <size>31635</size>
            <attacher name="huangxueqing">huangxueqing</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTE4ODk0KQ0KKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSwxMiBAQA0KKzIwMTItMDUtMjkgIFh1ZXFpbmcgSHVh
bmcgIDxodWFuZ3h1ZXFpbmdAYmFpZHUuY29tPgorCisgICAgICAgIFRoZSB0ZXN0cyBsaXN0ZWQg
aW4gd2luL1NraXBwZWQgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGJ1dCBz
b21lIG9mIHRoZXNlIG5lZWQgdG8gcmViYXNlbGluZSBpbiBXaW5kb3dzLCB3ZSBkbyB0aGF0IGlu
IGJ1ZyM4NzYxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKKwogMjAxMi0wNS0yOSAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUZXN0IGV4cGVjdGF0aW9u
IHVwZGF0ZS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDExODg4
MykNCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBjb3B5KQ0K
QEAgLTI0OCwyMSArMjQ4LDE2IEBADQogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtZmlsZS1zdmcu
aHRtbAogZWRpdGluZy9wYXN0ZWJvYXJkL2ZpbGUtZHJhZy10by1lZGl0YWJsZS5odG1sCiBlZGl0
aW5nL3Bhc3RlYm9hcmQvZmlsZS1pbnB1dC1maWxlcy1hY2Nlc3MuaHRtbAotZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS5odG1sCiBmYXN0L2RvbS9XaW5kb3cvd2luZG93
LXBvc3RtZXNzYWdlLWNsb25lLWZyYW1lcy5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLWRhdGFUcmFu
c2Zlckl0ZW1MaXN0LWZpbGUtaGFuZGxpbmcuaHRtbAotZmFzdC9ldmVudHMvZHJhZy1maWxlLWNy
YXNoLmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctdG8tbmF2aWdhdGUuaHRtbAogZmFzdC9ldmVudHMv
ZHJvcC1oYW5kbGVyLXNob3VsZC1ub3Qtc3RvcC1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9k
cm9wLXdpdGgtZmlsZS1wYXRocy5odG1sCiBmYXN0L2V2ZW50cy9kcm9wem9uZS0wMDQuaHRtbAog
ZmFzdC9ldmVudHMvZmlsZS1pbnB1dC1oaWRkZW4taW4tb25kcm9wLmh0bWwKIGZhc3QvZXZlbnRz
L2lucHV0LWVsZW1lbnQtZGlzcGxheS1ub25lLWluLWRyYWdsZWF2ZS1jcmFzaC5odG1sCi1mYXN0
L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRtbAotZmFzdC9mb3Jtcy9maWxlL2Zp
bGUtaW5wdXQtY2hhbmdlLWV2ZW50Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLWlucHV0LXJl
c2V0Lmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9maWxlLXJlc2V0LWluLWNoYW5nZS5odG1sCi1mYXN0
L2Zvcm1zL2ZpbGUvZ2V0LWZpbGUtdXBsb2FkLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1m
aWxlLWRpcmVjdG9yeS11cGxvYWQuaHRtbAogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUtcmUt
cmVuZGVyLmh0bWwKIGZhc3QvZm9ybXMvZmlsZS9yZWNvdmVyLWZpbGUtaW5wdXQtaW4tdW5wb3N0
ZWQtZm9ybS5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODg5NCkNCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsMTUgQEANCisy
MDEyLTA1LTI5ICBYdWVxaW5nIEh1YW5nICA8aHVhbmd4dWVxaW5nQGJhaWR1LmNvbT4KKworICAg
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMgc2hvdWxkIGJlIGltcGxlbWVudGVk
IGluIFdpbmRvd3MsIHdoaWNoIGJsb2NrZWQgZHJhZyBhbmQgZHJvcCByZWxhdGVkIHRlc3RzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyOTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBUaGlz
IGNoYW5nZSB3YXMgcmVxdWlyZW1lbnQgZm9yIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxl
cywgdXBkYXRlIHdpbi9Ta2lwcGVkIGZpbGUgdG8gcmVtb3ZlIGRyYWcgYW5kIGRyb3AgcmVsYXRl
ZCB0ZXN0cyB3aWxsIHZhbGlhdGUgaXQuIAorCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdE
YXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpudW1iZXJPZkZpbGVzKToK
KwogMjAxMi0wNS0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW0Nocm9taXVtXSBNb3ZlIGZpbGVFeGlzdHMgdG8gUGxhdGZvcm0uaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5jcHAJKHJldmlzaW9uIDEx
ODg4MykNCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3
b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBCYWlkdSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExMSw3ICsxMTIsMjQgQEANCiAKIHVuc2lnbmVkIERyYWdEYXRhOjpu
dW1iZXJPZkZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGxhdGZv
cm1EcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVEdNRURJVU0gbWVkaXVtOwor
ICAgIGlmIChGQUlMRUQobV9wbGF0Zm9ybURyYWdEYXRhLT5HZXREYXRhKGNmSERyb3BGb3JtYXQo
KSwgJm1lZGl1bSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhEUk9QIGhkcm9wID0gc3Rh
dGljX2Nhc3Q8SERST1A+KEdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpKTsKKworICAgIGlmICgh
aGRyb3ApCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVtRmlsZXMgPSBEcmFn
UXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CisKKyAgICBEcmFnRmluaXNoKGhk
cm9wKTsKKyAgICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOworCisgICAgcmV0dXJuIG51
bUZpbGVzOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYg
cmVzdWx0KSBjb25zdApJbmRleDogVG9vbHMvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg4OTQpDQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtMSwzICsxLDU3IEBADQorMjAxMi0wNS0yOSAgWHVlcWluZyBIdWFuZyAg
PGh1YW5neHVlcWluZ0BiYWlkdS5jb20+CisKKyAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFn
V2l0aEZpbGVzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBXaW5kb3dzLCB3aGljaCBibG9ja2Vk
IGRyYWcgYW5kIGRyb3AgcmVsYXRlZCB0ZXN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg2Mjk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5j
cHA6IEFkZGVkLgorICAgICAgICAoY2ZIRHJvcEZvcm1hdCk6CisgICAgICAgIChjZkZpbGVOYW1l
V0Zvcm1hdCk6CisgICAgICAgIChjZlVybFdGb3JtYXQpOgorICAgICAgICAoV0NFbnVtRm9ybWF0
RXRjKToKKyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAg
ICAgKFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoV0NFbnVtRm9y
bWF0RXRjOjpBZGRSZWYpOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZWxlYXNlKToKKyAg
ICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6TmV4dCk6CisgICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6
OlNraXApOgorICAgICAgICAoV0NFbnVtRm9ybWF0RXRjOjpSZXNldCk6CisgICAgICAgIChXQ0Vu
dW1Gb3JtYXRFdGM6OkNsb25lKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNyZWF0ZUluc3Rh
bmNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QpOgorICAgICAgICAo
RFJURGF0YU9iamVjdDo6fkRSVERhdGFPYmplY3QpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6
UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6QWRkUmVmKToKKyAgICAg
ICAgKERSVERhdGFPYmplY3Q6OlJlbGVhc2UpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
RGF0YSk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXREYXRhSGVyZSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6R2V0
Q2Fub25pY2FsRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlNldERhdGEpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bSk6CisgICAgICAgIChEUlREYXRhT2Jq
ZWN0OjpFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkRBZHZpc2UpOgor
ICAgICAgICAoRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmpl
Y3Q6OkVudW1EQWR2aXNlKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaDogQWRkZWQuCisgICAg
ICAgIChEUlREYXRhT2JqZWN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURHJv
cFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6RFJURHJvcFNvdXJj
ZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjp+RFJURHJvcFNvdXJjZSk6CisgICAgICAgIChE
UlREcm9wU291cmNlOjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpB
ZGRSZWYpOgorICAgICAgICAoRFJURHJvcFNvdXJjZTo6UmVsZWFzZSk6CisgICAgICAgIChEUlRE
cm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpRdWVy
eUNvbnRpbnVlRHJhZyk6CisgICAgICAgIChEUlREcm9wU291cmNlOjpHaXZlRmVlZGJhY2spOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmg6IEFkZGVkLgorICAg
ICAgICAoRFJURHJvcFNvdXJjZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRXZlbnRTZW5k
ZXIuY3BwOgorICAgICAgICAoYmVnaW5EcmFnV2l0aEZpbGVzQ2FsbGJhY2spOgorCiAyMDEyLTA1
LTI5ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGEgbGlu
dGVyIGVycm9yIGZvciBwbmdzIHRoYXQgbGFjayBhbiBlbWJlZGRlZCBjaGVja3N1bQpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAw
KQ0KKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcAkocmV2aXNp
b24gMCkNCkBAIC0wLDAgKzEsMzgxIEBADQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEUlREYXRhT2JqZWN0LmgiCisKK0ZPUk1BVEVUQyogY2ZIRHJvcEZvcm1hdCgp
Cit7CisgICAgc3RhdGljIEZPUk1BVEVUQyB1cmxGb3JtYXQgPSB7Q0ZfSERST1AsIDAsIERWQVNQ
RUNUX0NPTlRFTlQsIC0xLCBUWU1FRF9IR0xPQkFMfTsKKyAgICByZXR1cm4gJnVybEZvcm1hdDsK
K30KKworRk9STUFURVRDKiBjZkZpbGVOYW1lV0Zvcm1hdCgpCit7CisgICAgc3RhdGljIFVJTlQg
Y2YgPSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdChMIkZpbGVOYW1lVyIpOworICAgIHN0YXRpYyBG
T1JNQVRFVEMgdXJsRm9ybWF0ID0ge2NmLCAwLCBEVkFTUEVDVF9DT05URU5ULCAtMSwgVFlNRURf
SEdMT0JBTH07CisgICAgcmV0dXJuICZ1cmxGb3JtYXQ7Cit9CisKK0ZPUk1BVEVUQyogY2ZVcmxX
Rm9ybWF0KCkKK3sKKyAgICBzdGF0aWMgVUlOVCBjZiA9IFJlZ2lzdGVyQ2xpcGJvYXJkRm9ybWF0
KEwiVW5pZm9ybVJlc291cmNlTG9jYXRvclciKTsKKyAgICBzdGF0aWMgRk9STUFURVRDIHVybEZv
cm1hdCA9IHtjZiwgMCwgRFZBU1BFQ1RfQ09OVEVOVCwgLTEsIFRZTUVEX0hHTE9CQUx9OworICAg
IHJldHVybiAmdXJsRm9ybWF0OworfQorCitjbGFzcyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMg
SUVudW1GT1JNQVRFVEMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhj
b25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisKKyAgICAvLyBJVW5r
bm93biBtZW1iZXJzCisgICAgU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNlKShSRUZJSUQsIHZvaWQq
Kik7CisgICAgU1RETUVUSE9EXyhVTE9ORywgQWRkUmVmKSgpOworICAgIFNURE1FVEhPRF8oVUxP
TkcsIFJlbGVhc2UpKCk7CisKKyAgICAvLyBJRW51bUZPUk1BVEVUQyBtZW1iZXJzCisgICAgU1RE
TUVUSE9EKE5leHQpKFVMT05HLCBMUEZPUk1BVEVUQywgVUxPTkcqKTsKKyAgICBTVERNRVRIT0Qo
U2tpcCkoVUxPTkcpOworICAgIFNURE1FVEhPRChSZXNldCkoKTsKKyAgICBTVERNRVRIT0QoQ2xv
bmUpKElFbnVtRk9STUFURVRDKiopOworCitwcml2YXRlOgorICAgIGxvbmcgbV9yZWY7CisgICAg
VmVjdG9yPEZPUk1BVEVUQz4gbV9mb3JtYXRzOworICAgIHNpemVfdCBtX2N1cnJlbnQ7Cit9Owor
CitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRD
PiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkKKyAgICAsIG1f
Zm9ybWF0cyhmb3JtYXRzKQoreworfQorCitXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0
Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1hdHMpCisgICAgOiBtX3JlZigxKQorICAg
ICwgbV9jdXJyZW50KDApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtYXRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKCpmb3JtYXRzW2ldKTsKK30KKwor
U1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQs
IHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1
YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRW51bUZP
Uk1BVEVUQykpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFkZFJlZigp
OworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICByZXR1cm4gRV9OT0lOVEVSRkFD
RTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgV0NFbnVtRm9ybWF0RXRjOjpBZGRSZWYoKQor
eworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitTVERNRVRI
T0RJTVBfKFVMT05HKSBXQ0VudW1Gb3JtYXRFdGM6OlJlbGVhc2UoKQoreworICAgIGxvbmcgcmVm
Q291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgmbV9yZWYpOworICAgIGlmICghcmVmQ291bnQp
CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZWZDb3VudDsKK30KKworU1RETUVU
SE9ESU1QIFdDRW51bUZvcm1hdEV0Yzo6TmV4dChVTE9ORyBjZWx0LCBMUEZPUk1BVEVUQyBscEZv
cm1hdEV0YywgVUxPTkcqIHBjZWx0RmV0Y2hlZCkKK3sKKyAgICBpZiAocGNlbHRGZXRjaGVkKQor
ICAgICAgICAqcGNlbHRGZXRjaGVkID0gMDsKKworICAgIFVMT05HIGNSZXR1cm4gPSBjZWx0Owor
CisgICAgaWYgKGNlbHQgPD0gMCB8fCAhbHBGb3JtYXRFdGMgfHwgbV9jdXJyZW50ID49IG1fZm9y
bWF0cy5zaXplKCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKCFwY2VsdEZl
dGNoZWQgJiYgY2VsdCAhPSAxKSAvLyBwY2VsdEZldGNoZWQgY2FuIGJlIDAgb25seSBmb3IgMSBp
dGVtIHJlcXVlc3QKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICB3aGlsZSAobV9jdXJy
ZW50IDwgbV9mb3JtYXRzLnNpemUoKSAmJiBjUmV0dXJuID4gMCkgeworICAgICAgICAqbHBGb3Jt
YXRFdGMrKyA9IG1fZm9ybWF0c1ttX2N1cnJlbnQrK107CisgICAgICAgIC0tY1JldHVybjsKKyAg
ICB9CisgICAgaWYgKHBjZWx0RmV0Y2hlZCkKKyAgICAgICAgKnBjZWx0RmV0Y2hlZCA9IGNlbHQg
LSBjUmV0dXJuOworCisgICAgcmV0dXJuICFjUmV0dXJuID8gU19PSyA6IFNfRkFMU0U7Cit9CisK
K1NURE1FVEhPRElNUCBXQ0VudW1Gb3JtYXRFdGM6OlNraXAoVUxPTkcgY2VsdCkKK3sKKyAgICBp
ZiAoKG1fY3VycmVudCArIGNlbHQpID49IG1fZm9ybWF0cy5zaXplKCkpCisgICAgICAgIHJldHVy
biBTX0ZBTFNFOworICAgIG1fY3VycmVudCArPSBjZWx0OworICAgIHJldHVybiBTX09LOworfQor
CitTVERNRVRIT0RJTVAgV0NFbnVtRm9ybWF0RXRjOjpSZXNldCgpCit7CisgICAgbV9jdXJyZW50
ID0gMDsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIFdDRW51bUZvcm1hdEV0
Yzo6Q2xvbmUoSUVudW1GT1JNQVRFVEMqKiBwcENsb25lRW51bUZvcm1hdEV0YykKK3sKKyAgICBp
ZiAoIXBwQ2xvbmVFbnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgV0NFbnVtRm9ybWF0RXRjKiBuZXdFbnVtID0gbmV3IFdDRW51bUZvcm1hdEV0YyhtX2Zvcm1h
dHMpOworICAgIGlmICghbmV3RW51bSkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisK
KyAgICBuZXdFbnVtLT5BZGRSZWYoKTsKKyAgICBuZXdFbnVtLT5tX2N1cnJlbnQgPSBtX2N1cnJl
bnQ7CisgICAgKnBwQ2xvbmVFbnVtRm9ybWF0RXRjID0gbmV3RW51bTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0hSRVNVTFQgRFJURGF0YU9iamVjdDo6Y3JlYXRl
SW5zdGFuY2UoRFJURGF0YU9iamVjdCoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcmVzdWx0ID0gbmV3IERSVERhdGFPYmplY3Qo
KTsKKyAgICByZXR1cm4gU19PSzsKK30KKworRFJURGF0YU9iamVjdDo6RFJURGF0YU9iamVjdCgp
CisgICAgOiBtX3JlZigxKQoreworfQorCitEUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21lZGl1bS5zaXplKCk7ICsraSkgewor
ICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1fbWVkaXVtW2ldKTsKKyAgICAgICAgZGVsZXRlIG1f
bWVkaXVtW2ldOworICAgIH0KKyAgICBXVEY6OmRlbGV0ZUFsbFZhbHVlcyhtX2Zvcm1hdHMpOwor
fQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJRF9JRGF0
YU9iamVjdCkpCisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworCisgICAgaWYgKCpwcHZPYmpl
Y3QpIHsKKyAgICAgICAgQWRkUmVmKCk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAg
ICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0
YU9iamVjdDo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1f
cmVmKTsKK30KKworU1RETUVUSE9ESU1QXyhVTE9ORykgRFJURGF0YU9iamVjdDo6UmVsZWFzZSgp
Cit7CisgICAgbG9uZyByZWZDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KCZtX3JlZik7Cisg
ICAgaWYgKCFyZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIHJlZkNv
dW50OworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQVRFVEMq
IHBmb3JtYXRldGNJbiwgU1RHTUVESVVNKiBwbWVkaXVtKQoreyAKKyAgICBpZiAoIXBmb3JtYXRl
dGNJbiB8fCAhcG1lZGl1bSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBwbWVkaXVt
LT5oR2xvYmFsID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1h
dHNbaV0tPmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4tPmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+
ZHdBc3BlY3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9y
bWF0KSB7CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zv
cm1hdHNbaV0pOworICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIERWX0VfRk9STUFURVRDOworfQorCitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVj
dDo6R2V0RGF0YUhlcmUoRk9STUFURVRDKiwgU1RHTUVESVVNKikKK3sgCisgICAgcmV0dXJuIEVf
Tk9USU1QTDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YShG
T1JNQVRFVEMqIHBmb3JtYXRldGMpCit7IAorICAgIGlmICghcGZvcm1hdGV0YykKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICghKERWQVNQRUNUX0NPTlRFTlQgJiBwZm9ybWF0
ZXRjLT5kd0FzcGVjdCkpCisgICAgICAgIHJldHVybiAoRFZfRV9EVkFTUEVDVCk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAocGZvcm1hdGV0Yy0+dHltZWQgJiBtX2Zvcm1hdHNbaV0tPnR5bWVkKSB7CisgICAgICAgICAg
ICBpZiAocGZvcm1hdGV0Yy0+Y2ZGb3JtYXQgPT0gbV9mb3JtYXRzW2ldLT5jZkZvcm1hdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gU19PSzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
RFZfRV9UWU1FRDsKK30KKworU1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OkdldENhbm9uaWNh
bEZvcm1hdEV0YyhGT1JNQVRFVEMqLCBGT1JNQVRFVEMqKQoreyAKKyAgICByZXR1cm4gREFUQV9T
X1NBTUVGT1JNQVRFVEM7Cit9CisKK1NURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpTZXREYXRh
KEZPUk1BVEVUQyogcGZvcm1hdGV0YywgU1RHTUVESVVNKiBwbWVkaXVtLCBCT09MIGZSZWxlYXNl
KQoreyAKKyAgICBpZiAoIXBmb3JtYXRldGMgfHwgIXBtZWRpdW0pCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisKKyAgICBGT1JNQVRFVEMqIGZvcm1hdGV0YyA9IG5ldyBGT1JNQVRFVEM7Cisg
ICAgaWYgKCFmb3JtYXRldGMpCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAg
U1RHTUVESVVNKiBwU3RnTWVkID0gbmV3IFNUR01FRElVTTsKKworICAgIGlmICghcFN0Z01lZCkg
eworICAgICAgICBkZWxldGUgZm9ybWF0ZXRjOworICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9S
WTsKKyAgICB9CisKKyAgICBaZXJvTWVtb3J5KGZvcm1hdGV0Yywgc2l6ZW9mKEZPUk1BVEVUQykp
OworICAgIFplcm9NZW1vcnkocFN0Z01lZCwgc2l6ZW9mKFNUR01FRElVTSkpOworCisgICAgKmZv
cm1hdGV0YyA9ICpwZm9ybWF0ZXRjOworICAgIG1fZm9ybWF0cy5hcHBlbmQoZm9ybWF0ZXRjKTsK
KworICAgIGlmIChmUmVsZWFzZSkKKyAgICAgICAgKnBTdGdNZWQgPSAqcG1lZGl1bTsKKyAgICBl
bHNlCisgICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1lZGl1bSwgcGZvcm1hdGV0Yyk7Cisg
ICAgbV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3Zv
aWQgRFJURGF0YU9iamVjdDo6Q29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJ
VU0qIHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYykKK3sKKyAgICBzd2l0Y2ggKHBNZWRTcmMt
PnR5bWVkKSB7CisjaWYgIU9TKFdJTkNFKQorICAgIGNhc2UgVFlNRURfSEdMT0JBTDoKKyAgICAg
ICAgcE1lZERlc3QtPmhHbG9iYWwgPSBzdGF0aWNfY2FzdDxIR0xPQkFMPihPbGVEdXBsaWNhdGVE
YXRhKHBNZWRTcmMtPmhHbG9iYWwsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVFlNRURfR0RJOgorICAgICAgICBwTWVkRGVzdC0+aEJpdG1hcCA9IHN0
YXRpY19jYXN0PEhCSVRNQVA+KE9sZUR1cGxpY2F0ZURhdGEocE1lZFNyYy0+aEJpdG1hcCwgcEZt
dFNyYy0+Y2ZGb3JtYXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9NRlBJ
Q1Q6CisgICAgICAgIHBNZWREZXN0LT5oTWV0YUZpbGVQaWN0ID0gc3RhdGljX2Nhc3Q8SE1FVEFG
SUxFUElDVD4oT2xlRHVwbGljYXRlRGF0YShwTWVkU3JjLT5oTWV0YUZpbGVQaWN0LCBwRm10U3Jj
LT5jZkZvcm1hdCwgMCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0VOSE1GOgor
ICAgICAgICBwTWVkRGVzdC0+aEVuaE1ldGFGaWxlID0gc3RhdGljX2Nhc3Q8SEVOSE1FVEFGSUxF
PihPbGVEdXBsaWNhdGVEYXRhKHBNZWRTcmMtPmhFbmhNZXRhRmlsZSwgcEZtdFNyYy0+Y2ZGb3Jt
YXQsIDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWU1FRF9GSUxFOgorICAgICAgICBw
TWVkU3JjLT5scHN6RmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxMUE9MRVNUUj4oT2xlRHVwbGljYXRl
RGF0YShwTWVkU3JjLT5scHN6RmlsZU5hbWUsIHBGbXRTcmMtPmNmRm9ybWF0LCAwKSk7CisgICAg
ICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBUWU1FRF9JU1RSRUFNOgorICAgICAgICBwTWVk
RGVzdC0+cHN0bSA9IHBNZWRTcmMtPnBzdG07CisgICAgICAgIHBNZWRTcmMtPnBzdG0tPkFkZFJl
ZigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZTUVEX0lTVE9SQUdFOgorICAgICAgICBw
TWVkRGVzdC0+cHN0ZyA9IHBNZWRTcmMtPnBzdGc7CisgICAgICAgIHBNZWRTcmMtPnBzdGctPkFk
ZFJlZigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcE1lZERlc3QtPnR5bWVkID0gcE1lZFNyYy0+dHltZWQ7CisgICAgcE1lZERlc3Qt
PnBVbmtGb3JSZWxlYXNlID0gMDsKKyAgICBpZiAocE1lZFNyYy0+cFVua0ZvclJlbGVhc2UpIHsK
KyAgICAgICAgcE1lZERlc3QtPnBVbmtGb3JSZWxlYXNlID0gcE1lZFNyYy0+cFVua0ZvclJlbGVh
c2U7CisgICAgICAgIHBNZWRTcmMtPnBVbmtGb3JSZWxlYXNlLT5BZGRSZWYoKTsKKyAgICB9Cit9
CitTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6RW51bUZvcm1hdEV0YyhEV09SRCBkd0RpcmVj
dGlvbiwgSUVudW1GT1JNQVRFVEMqKiBwcGVudW1Gb3JtYXRFdGMpCit7IAorICAgIGlmICghcHBl
bnVtRm9ybWF0RXRjKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnBwZW51bUZv
cm1hdEV0YyA9IDA7CisgICAgc3dpdGNoIChkd0RpcmVjdGlvbikgeworICAgIGNhc2UgREFUQURJ
Ul9HRVQ6CisgICAgICAgICpwcGVudW1Gb3JtYXRFdGMgPSBuZXcgV0NFbnVtRm9ybWF0RXRjKG1f
Zm9ybWF0cyk7CisgICAgICAgIGlmICghKCpwcGVudW1Gb3JtYXRFdGMpKQorICAgICAgICAgICAg
cmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEQVRBRElS
X1NFVDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworU1RETUVUSE9ESU1QIERSVERh
dGFPYmplY3Q6OkRBZHZpc2UoRk9STUFURVRDKiwgRFdPUkQsIElBZHZpc2VTaW5rKiwgRFdPUkQq
KQoreyAKKyAgICByZXR1cm4gT0xFX0VfQURWSVNFTk9UU1VQUE9SVEVEOworfQorCitTVERNRVRI
T0RJTVAgRFJURGF0YU9iamVjdDo6RFVuYWR2aXNlKERXT1JEKQoreworICAgIHJldHVybiBFX05P
VElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRFJURGF0YU9iamVjdDo6RW51
bURBZHZpc2UoSUVudW1TVEFUREFUQSoqKQoreworICAgIHJldHVybiBPTEVfRV9BRFZJU0VOT1RT
VVBQT1JURUQ7Cit9CisKK3ZvaWQgRFJURGF0YU9iamVjdDo6Y2xlYXJEYXRhKENMSVBGT1JNQVQg
Zm9ybWF0KQoreworICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CisgICAgd2hpbGUgKHBvc2l0aW9u
IDwgbV9mb3JtYXRzLnNpemUoKSkgeworICAgICAgICBpZiAobV9mb3JtYXRzW3Bvc2l0aW9uXS0+
Y2ZGb3JtYXQgPT0gZm9ybWF0KSB7CisgICAgICAgICAgICBGT1JNQVRFVEMqIGN1cnJlbnQgPSBt
X2Zvcm1hdHNbcG9zaXRpb25dOworICAgICAgICAgICAgbV9mb3JtYXRzW3Bvc2l0aW9uXSA9IG1f
Zm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV07CisgICAgICAgICAgICBtX2Zvcm1hdHNbbV9m
b3JtYXRzLnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAgICAgIG1fZm9ybWF0cy5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBkZWxldGUgY3VycmVudDsKKyAgICAgICAgICAgIFNUR01FRElVTSog
bWVkaXVtID0gbV9tZWRpdW1bcG9zaXRpb25dOworICAgICAgICAgICAgbV9tZWRpdW1bcG9zaXRp
b25dID0gbV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV07CisgICAgICAgICAgICBtX21lZGl1
bVttX21lZGl1bS5zaXplKCkgLSAxXSA9IDA7CisgICAgICAgICAgICBtX21lZGl1bS5yZW1vdmVM
YXN0KCk7CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1bSk7CisgICAgICAgICAg
ICBkZWxldGUgbWVkaXVtOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgcG9zaXRpb24rKzsKKyAgICB9Cit9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RFJURGF0YU9iamVjdC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0RSVERhdGFPYmplY3QuaAkocmV2aXNpb24gMCkNCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vRFJURGF0YU9iamVjdC5oCShyZXZpc2lvbiAwKQ0KQEAgLTAsMCArMSw3MSBAQA0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERSVERhdGFPYmplY3RfaAorI2RlZmluZSBEUlREYXRhT2JqZWN0X2gKKwor
I2luY2x1ZGUgPFNobE9iai5oPgorI2luY2x1ZGUgPG9iamlkbC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworRk9STUFURVRDKiBjZkhEcm9wRm9ybWF0KCk7CisKK0ZPUk1BVEVUQyogY2ZG
aWxlTmFtZVdGb3JtYXQoKTsKKworRk9STUFURVRDKiBjZlVybFdGb3JtYXQoKTsKKworY2xhc3Mg
RFJURGF0YU9iamVjdCA6IHB1YmxpYyBJRGF0YU9iamVjdCB7CitwdWJsaWM6CisgICAgdm9pZCBD
b3B5TWVkaXVtKFNUR01FRElVTSogcE1lZERlc3QsIFNUR01FRElVTSogcE1lZFNyYywgRk9STUFU
RVRDKiBwRm10U3JjKTsKKworICAgIC8vIElVbmtub3duCisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2Jq
ZWN0KTsgICAgICAgIAorICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVm
KCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7CisKKyAg
ICAvLyBJRGF0YU9iamVjdAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBH
ZXREYXRhKEZPUk1BVEVUQyogcGZvcm1hdEluLCBTVEdNRURJVU0qIHBtZWRpdW0pOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXREYXRhSGVyZShGT1JNQVRFVEMqIHBm
b3JtYXQsIFNUR01FRElVTSogcG1lZGl1bSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFF1ZXJ5R2V0RGF0YShGT1JNQVRFVEMqIHBmb3JtYXQpOworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRDYW5vbmljYWxGb3JtYXRFdGMoRk9STUFURVRD
KiBwZm9ybWF0ZWN0SW4sIEZPUk1BVEVUQyogcGZvcm1hdE91dCk7CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFNldERhdGEoRk9STUFURVRDKiBwZm9ybWF0LCBTVEdNRURJ
VU0qcG1lZGl1bSwgQk9PTCByZWxlYXNlKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRW51bUZvcm1hdEV0YyhEV09SRCBkd0RpcmVjdGlvbiwgSUVudW1GT1JNQVRFVEMq
KiBwcGVudW1Gb3JtYXRFdGMpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBEQWR2aXNlKEZPUk1BVEVUQyosIERXT1JELCBJQWR2aXNlU2luayosIERXT1JEKik7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERVbmFkdmlzZShEV09SRCk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEVudW1EQWR2aXNlKElFbnVtU1RBVERB
VEEqKik7CisKKyAgICB2b2lkIGNsZWFyRGF0YShDTElQRk9STUFUKTsKKyAgICAKKyAgICBzdGF0
aWMgSFJFU1VMVCBjcmVhdGVJbnN0YW5jZShEUlREYXRhT2JqZWN0KiopOworcHJpdmF0ZToKKyAg
ICBEUlREYXRhT2JqZWN0KCk7CisgICAgfkRSVERhdGFPYmplY3QoKTsKKyAgICBsb25nIG1fcmVm
OworICAgIFZlY3RvcjxGT1JNQVRFVEMqPiBtX2Zvcm1hdHM7CisgICAgVmVjdG9yPFNUR01FRElV
TSo+IG1fbWVkaXVtOworfTsKKworI2VuZGlmIC8vIERSVERhdGFPYmplY3RfaApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQ0K
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmNwcAkocmV2aXNpb24g
MCkNCkBAIC0wLDAgKzEsODYgQEANCisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFy
ZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEUlREcm9wU291cmNlLmgi
CisKK0RSVERyb3BTb3VyY2U6OkRSVERyb3BTb3VyY2UoKQorICAgIDogbV9yZWYoMSkKKyAgICAs
IG1fZHJvcHBlZChmYWxzZSkKK3sKK30KKworRFJURHJvcFNvdXJjZTo6fkRSVERyb3BTb3VyY2Uo
KQoreworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6UXVlcnlJbnRlcmZhY2UoUkVG
SUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAg
aWYgKElzRXF1YWxJSUQocmlpZCwgSUlEX0lVbmtub3duKSB8fCBJc0VxdWFsSUlEKHJpaWQsIElJ
RF9JRHJvcFNvdXJjZSkpIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgICAgIEFk
ZFJlZigpOworCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIHJldHVybiBFX05P
SU5URVJGQUNFOworfQorCitTVERNRVRIT0RJTVBfKFVMT05HKSBEUlREcm9wU291cmNlOjpBZGRS
ZWYoKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgmbV9yZWYpOworfQorCitT
VERNRVRIT0RJTVBfKFVMT05HKSBEUlREcm9wU291cmNlOjpSZWxlYXNlKCkKK3sKKyAgICBsb25n
IHJlZkNvdW50ID0gSW50ZXJsb2NrZWREZWNyZW1lbnQoJm1fcmVmKTsKKyAgICBpZiAoIXJlZkNv
dW50KQorICAgICAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmVmQ291bnQ7Cit9CisKK0hS
RVNVTFQgRFJURHJvcFNvdXJjZTo6Y3JlYXRlSW5zdGFuY2UoSURyb3BTb3VyY2UqKiByZXN1bHQp
Cit7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAg
KnJlc3VsdCA9IG5ldyBEUlREcm9wU291cmNlOworICAgIHJldHVybiBTX09LOworfQorCitTVERN
RVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6UXVlcnlDb250aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJl
c3NlZCwgRFdPUkQgZ3JmS2V5U3RhdGUpCit7CisgICAgaWYgKGZFc2NhcGVQcmVzc2VkIHx8ICEo
Z3JmS2V5U3RhdGUgJiAoTUtfTEJVVFRPTiB8IE1LX1JCVVRUT04pKSkgeworICAgICAgICBtX2Ry
b3BwZWQgPSAhZkVzY2FwZVByZXNzZWQ7CisgICAgICAgIHJldHVybiBmRXNjYXBlUHJlc3NlZCA/
IERSQUdEUk9QX1NfQ0FOQ0VMIDogRFJBR0RST1BfU19EUk9QOworICAgIH0KKworICAgIHJldHVy
biBTX09LOworfQorCitTVERNRVRIT0RJTVAgRFJURHJvcFNvdXJjZTo6R2l2ZUZlZWRiYWNrKERX
T1JEIGR3RWZmZWN0KQoreworICAgIHJldHVybiBEUkFHRFJPUF9TX1VTRURFRkFVTFRDVVJTT1JT
OworfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EUlREcm9wU291cmNlLmgJKHJl
dmlzaW9uIDApDQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERyb3BTb3VyY2UuaAko
cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNDggQEANCisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QmFpZHUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyovCisKKyNpZm5kZWYgRFJURHJvcFNvdXJjZV9oCisjZGVmaW5lIERSVERy
b3BTb3VyY2VfaAorCisjaW5jbHVkZSA8U2hsT2JqLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgor
CitjbGFzcyBEUlREcm9wU291cmNlIDogcHVibGljIElEcm9wU291cmNlIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlE
IHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOyAgICAgICAgCisgICAgdmlydHVhbCBVTE9ORyBTVERN
RVRIT0RDQUxMVFlQRSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExU
WVBFIFJlbGVhc2UoKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVl
cnlDb250aW51ZURyYWcoQk9PTCBmRXNjYXBlUHJlc3NlZCwgRFdPUkQgZ3JmS2V5U3RhdGUpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHaXZlRmVlZGJhY2soRFdPUkQg
ZHdFZmZlY3QpOworCisgICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlSW5zdGFuY2UoSURyb3BTb3Vy
Y2UqKiByZXN1bHQpOworcHJpdmF0ZToKKyAgICBEUlREcm9wU291cmNlKCk7CisgICAgfkRSVERy
b3BTb3VyY2UoKTsKKyAgICBsb25nIG1fcmVmOworICAgIGJvb2wgbV9kcm9wcGVkOworfTsKKwor
I2VuZGlmIC8vIERSVERyb3BTb3VyY2VfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLnZjcHJvag0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHJldmlzaW9uIDExODg4MykNCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCSh3b3JraW5nIGNvcHkp
DQpAQCAtNDAyLDYgKzQwMiwyMiBAQA0KIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLlxEUlREYXRhT2JqZWN0LmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURHJvcFNvdXJjZS5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRFJURHJv
cFNvdXJjZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRo
PSIuXEV2ZW50U2VuZGVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRXZlbnRTZW5kZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0V2ZW50U2VuZGVyLmNwcAkocmV2aXNpb24gMTE4ODgzKQ0KKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAJKHdvcmtpbmcgY29weSkNCkBA
IC0xLDUgKzEsNiBAQA0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEJhaWR1IEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OSwxNiArMzAsMTkgQEANCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5k
ZXIuaCIKIAorI2luY2x1ZGUgIkRSVERhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJEUlREcm9wU291
cmNlLmgiCiAjaW5jbHVkZSAiRHJhZ2dpbmdJbmZvLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWUuaCIKIAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CisjaW5j
bHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQu
aD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKICNkZWZpbmUgV01fRFJUX1NFTkRfUVVFVUVEX0VWRU5UIChXTV9BUFArMSkKIApAQCAtNjQy
LDYgKzY0Niw4NiBAQA0KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGJlZ2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTT2Jq
ZWN0UmVmIGZpbGVzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBd
LCAwKTsKKworICAgIGlmICghZmlsZXNBcnJheSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNTdHJpbmdSZWYgbGVuZ3RoUHJvcGVydHkgPSBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIik7CisgICAgVmVjdG9yPFVDaGFy
PiBmaWxlczsKKyAgICBpbnQgZmlsZXNDb3VudCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBK
U09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIGZpbGVzQXJyYXksIGxlbmd0aFByb3BlcnR5LCAw
KSwgMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlc0NvdW50OyArK2kpIHsKKyAgICAg
ICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IGZpbGVzQXJyYXksIGksIDApOworICAgICAgICBKU1N0cmluZ1JlZiBmaWxlID0gSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7CisgICAgICAgIGZpbGVzLmFwcGVuZChKU1N0
cmluZ0dldENoYXJhY3RlcnNQdHIoZmlsZSksIEpTU3RyaW5nR2V0TGVuZ3RoKGZpbGUpKTsKKyAg
ICAgICAgZmlsZXMuYXBwZW5kKDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2UoZmlsZSk7Cisg
ICAgfQorCisgICAgaWYgKGZpbGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgLy8gV2Ugc2hvdWxkIGFwcGVuZCAiMCIgaW4g
dGhlIGVuZCBvZiB8ZmlsZXN8IHNvIHRoYXQgfERyYWdRdWVyeUZpbGVXfCByZXRyaWV2ZWQgdGhl
IG51bWJlciBvZiBmaWxlcyBjb3JyZWN0bHkgZnJvbSBPbGUgQ2xpcGJvYXJkLgorICAgIGZpbGVz
LmFwcGVuZCgwKTsKKworICAgIFNUR01FRElVTSBoRHJvcE1lZGl1bSA9IHswfTsKKyAgICBoRHJv
cE1lZGl1bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgU0laRV9UIGRyb3BGaWxlc1NpemUg
PSBzaXplb2YoRFJPUEZJTEVTKSArIChzaXplb2YoV0NIQVIpICogZmlsZXMuc2l6ZSgpKTsKKyAg
ICBoRHJvcE1lZGl1bS5oR2xvYmFsID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1f
RERFU0hBUkUsIGRyb3BGaWxlc1NpemUpOworICAgIERST1BGSUxFUyogZHJvcEZpbGVzID0gcmVp
bnRlcnByZXRfY2FzdDxEUk9QRklMRVMqPihHbG9iYWxMb2NrKGhEcm9wTWVkaXVtLmhHbG9iYWwp
KTsKKyAgICBtZW1zZXQoZHJvcEZpbGVzLCAwLCBzaXplb2YoRFJPUEZJTEVTKSk7CisgICAgZHJv
cEZpbGVzLT5wRmlsZXMgPSBzaXplb2YoRFJPUEZJTEVTKTsKKyAgICBkcm9wRmlsZXMtPmZXaWRl
ID0gVFJVRTsKKworICAgIFVDaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHJl
aW50ZXJwcmV0X2Nhc3Q8QllURSo+KGRyb3BGaWxlcykgKyBzaXplb2YoRFJPUEZJTEVTKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgZGF0
YVtpXSA9IGZpbGVzW2ldOworICAgIEdsb2JhbFVubG9jayhoRHJvcE1lZGl1bS5oR2xvYmFsKTsg
CisKKyAgICBTVEdNRURJVU0gaEZpbGVOYW1lTWVkaXVtID0gezB9OworICAgIGhGaWxlTmFtZU1l
ZGl1bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CisgICAgU0laRV9UIGhGaWxlTmFtZVNpemUgPSBz
aXplb2YoV0NIQVIpICogZmlsZXMuc2l6ZSgpOworICAgIGhGaWxlTmFtZU1lZGl1bS5oR2xvYmFs
ID0gR2xvYmFsQWxsb2MoR01FTV9NT1ZFQUJMRSB8IEdNRU1fRERFU0hBUkUsIGhGaWxlTmFtZVNp
emUpOworICAgIFdDSEFSKiBoRmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxXQ0hBUio+KEdsb2JhbExv
Y2soaEZpbGVOYW1lTWVkaXVtLmhHbG9iYWwpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpbGVzLnNpemUoKTsgaSsrKQorICAgICAgICBoRmlsZU5hbWVbaV0gPSBmaWxlc1tpXTsKKyAg
ICBHbG9iYWxVbmxvY2soaEZpbGVOYW1lTWVkaXVtLmhHbG9iYWwpOworCisgICAgaWYgKGRyYWdn
aW5nSW5mbykgeworICAgICAgICBkZWxldGUgZHJhZ2dpbmdJbmZvOworICAgICAgICBkcmFnZ2lu
Z0luZm8gPSAwOworICAgIH0KKworICAgIENPTVB0cjxEUlREYXRhT2JqZWN0PiBkYXRhT2JlamVj
dDsKKyAgICBDT01QdHI8SURyb3BTb3VyY2U+IHNvdXJjZTsKKyAgICBpZiAoRkFJTEVEKERSVERh
dGFPYmplY3Q6OmNyZWF0ZUluc3RhbmNlKCZkYXRhT2JlamVjdCkpKQorICAgICAgICBkYXRhT2Jl
amVjdCA9IDA7CisKKyAgICBpZiAoRkFJTEVEKERSVERyb3BTb3VyY2U6OmNyZWF0ZUluc3RhbmNl
KCZzb3VyY2UpKSkKKyAgICAgICAgc291cmNlID0gMDsKKworICAgIGlmIChkYXRhT2JlamVjdCAm
JiBzb3VyY2UpIHsKKyAgICAgICAgZHJhZ2dpbmdJbmZvID0gbmV3IERyYWdnaW5nSW5mbyhkYXRh
T2JlamVjdC5nZXQoKSwgc291cmNlLmdldCgpKTsKKyAgICAgICAgZHJhZ2dpbmdJbmZvLT5zZXRQ
ZXJmb3JtZWREcm9wRWZmZWN0KERST1BFRkZFQ1RfQ09QWSk7CisgICAgfQorCisgICAgaWYgKGRy
YWdnaW5nSW5mbykgeworICAgICAgICBkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0
YShjZkhEcm9wRm9ybWF0KCksICZoRHJvcE1lZGl1bSwgRkFMU0UpOworICAgICAgICBkcmFnZ2lu
Z0luZm8tPmRhdGFPYmplY3QoKS0+U2V0RGF0YShjZkZpbGVOYW1lV0Zvcm1hdCgpLCAmaEZpbGVO
YW1lTWVkaXVtLCBGQUxTRSk7CisgICAgICAgIGRyYWdnaW5nSW5mby0+ZGF0YU9iamVjdCgpLT5T
ZXREYXRhKGNmVXJsV0Zvcm1hdCgpLCAmaEZpbGVOYW1lTWVkaXVtLCBGQUxTRSk7CisgICAgICAg
IE9sZVNldENsaXBib2FyZChkcmFnZ2luZ0luZm8tPmRhdGFPYmplY3QoKSk7CisgICAgICAgIGRv
d24gPSB0cnVlOworICAgIH0KKworICAgIEpTU3RyaW5nUmVsZWFzZShsZW5ndGhQcm9wZXJ0eSk7
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBzdGF0aWMg
SlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKICAgICB7ICJjb250ZXh0Q2xp
Y2siLCBjb250ZXh0Q2xpY2tDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgIm1vdXNlRG93biIsIG1v
dXNlRG93bkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkBAIC02NTQsNiArNzM4LDcgQEANCiAgICAgeyAidGV4
dFpvb21PdXQiLCB0ZXh0Wm9vbU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAiem9vbVBhZ2VJ
biIsIHpvb21QYWdlSW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgIHsgInpvb21QYWdlT3V0Iiwgem9v
bVBhZ2VPdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgImJlZ2luRHJhZ1dpdGhGaWxlcyIsIGJl
Z2luRHJhZ1dpdGhGaWxlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgeyAwLCAwLCAwIH0KIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>