<?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>119829</bug_id>
          
          <creation_ts>2013-08-14 17:54:52 -0700</creation_ts>
          <short_desc>IAccessibleText/2 implementation for AppleWindows port</short_desc>
          <delta_ts>2013-08-26 12:28:18 -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>Accessibility</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>120119</dependson>
    
    <dependson>120121</dependson>
    
    <dependson>120122</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Roger Fong">roger_fong</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jhoneycutt</cc>
    
    <cc>jonlee</cc>
    
    <cc>roger_fong</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>917372</commentid>
    <comment_count>0</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-14 17:54:52 -0700</bug_when>
    <thetext>Implement IAccessibleText and IAccessibleText2.

The first patch is a bit of a rough draft.
First patch implements some of the more obvious core methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917373</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-08-14 17:55:04 -0700</bug_when>
    <thetext>&lt;rdar://problem/14742559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917377</commentid>
    <comment_count>2</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-14 18:00:57 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; &lt;rdar://problem/14742559&gt;

Actually &lt;rdar://problem/8476150&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917802</commentid>
    <comment_count>3</comment_count>
      <attachid>208876</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-15 19:43:39 -0700</bug_when>
    <thetext>Created attachment 208876
Draft Patch

This is a preliminary patch.
I&apos;ve yet to test it using NVDA but most of it&apos;s straightforward.

This patch is fairly large, I will split it up into smaller patches once I
figure out a good way to divide things up (which will depend on the importance of the methods to NVDA)

If anyone is willing to brave taking a quick cursory glance of it just to point out any glaring mistakes that would be grand.
No pressure tho.

I&apos;ll upload some more tested, more split up patches tomorrow, but a preliminary review would definitely help expedite the process.
Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917809</commentid>
    <comment_count>4</comment_count>
      <attachid>208876</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-08-15 20:33:48 -0700</bug_when>
    <thetext>Comment on attachment 208876
Draft Patch

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

I think this looks great!  Sorry this turned into a larger project than I had originally envisioned. :(

&gt; Source/WebKit/win/AccessibleText.cpp:63
&gt; +HRESULT AccessibleText::attributes(long offset, long *startOffset, long *endOffset, BSTR *textAttributes)

The asterisk is part of the type! Please write long* startOffset, etc.

&gt; Source/WebKit/win/AccessibleText.cpp:73
&gt; +HRESULT AccessibleText::caretOffset(long *offset)

Ditto

&gt; Source/WebKit/win/AccessibleText.cpp:76
&gt; +        return E_FAIL;

We usually check that the pointer argument is non-null and return E_POINTER if we are called without a valid pointer. This applies to the other methods as well.

&gt; Source/WebKit/win/AccessibleText.cpp:205
&gt; +    int previous_pos = std::max(0, (int)(offset-1));

Need a C++ cast here...

&gt; Source/WebKit/win/AccessibleText.cpp:528
&gt; +    else

No need for this else case. Just return offset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917974</commentid>
    <comment_count>5</comment_count>
      <attachid>208876</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-08-16 09:07:27 -0700</bug_when>
    <thetext>Comment on attachment 208876
Draft Patch

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

&gt; Source/WebKit/win/AccessibleText.cpp:78
&gt; +    VisiblePosition caretPosition = m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;page()-&gt;dragCaretController()-&gt;caretPosition();

there&apos;s a document() method on axObject that you can call that will check if renderer() exists. you should probably verify that that document exists after retrieving

&gt; Source/WebKit/win/AccessibleText.cpp:123
&gt; +    if (m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection()-&gt;isNone())

ditto for document()

&gt; Source/WebKit/win/AccessibleText.cpp:135
&gt; +    Node* node = m_object-&gt;renderer()-&gt;node();

there&apos;s a node() method on axObject. you should prob. verify it exists after retrieving

&gt; Source/WebKit/win/AccessibleText.cpp:260
&gt; +    int textLength = m_object-&gt;text().length();

length() returns an unsigned here

&gt; Source/WebKit/win/AccessibleText.cpp:324
&gt; +    int textLength = m_object-&gt;text().length();

do you want to use m_object-&gt;textLength() here in case of password fields?

&gt; Source/WebKit/win/AccessibleText.cpp:384
&gt; +    m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection()-&gt;clear();

ditto about document()

&gt; Source/WebKit/win/AccessibleText.cpp:394
&gt; +    Node* node = m_object-&gt;renderer()-&gt;node();

ditto about node()

&gt; Source/WebKit/win/AccessibleText.cpp:413
&gt; +HRESULT AccessibleText::nCharacters(long *characters)

* in wrong place

&gt; Source/WebKit/win/AccessibleText.cpp:492
&gt; +HRESULT AccessibleText::newText(IA2TextSegment *newText)

* in wrong place

&gt; Source/WebKit/win/AccessibleText.cpp:500
&gt; +HRESULT AccessibleText::oldText(IA2TextSegment *oldText)

* ditto

&gt; Source/WebKit/win/AccessibleText.cpp:510
&gt; +HRESULT AccessibleText::attributeRange(long offset, BSTR filter, long *startOffset, long *endOffset, BSTR *attributeValues)

* ditto

&gt; Source/WebKit/win/AccessibleText.cpp:527
&gt; +        return m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection()-&gt;start().offsetInContainerNode();

ditto about document()

&gt; Source/WebKit/win/AccessibleText.cpp:537
&gt; +    Document* document = m_object-&gt;renderer()-&gt;document();

ditto about document()

&gt; Source/WebKit/win/AccessibleText.h:40
&gt; +	virtual HRESULT STDMETHODCALLTYPE attributes(long offset,	long *startOffset, long *endOffset,	BSTR *textAttributes);

tabs exist in this line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918154</commentid>
    <comment_count>6</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-16 17:42:34 -0700</bug_when>
    <thetext>I&apos;ve made the suggested changes.

Two things I&apos;m having issues with however.

1. When to create a new AccessibleText object.
This is controlled by the isTextControl() method is AccessibilityObject.cpp

Currently this returns true if the role is 
    case TextAreaRole:
    case TextFieldRole:
    case ComboBoxRole:
	case StaticTextRole:
	case ListItemRole:
(I&apos;ve added the last 2)

I&apos;m not sure that this is correct hwoever.

Another issue is that in the query interface method, I only ever seem to hit the IAccessibleText case. Never IAccessibleText2 or IAccessibleEditableText,

although the functionality of say copy paste using NVDA commands seems to work regardless.

This is a tad confusing because an IAccessibleText2 is an IAccessibleText.
The way things are organized right now, AccesibleBase implements IAccessibleText2 (which inherits from IAccessibleText) and from IAccessibleEditableText. Since NVDA supposedly uses IAccessible2 shouldn&apos;t it always be seeing the IAccessibleText2 uiid case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920471</commentid>
    <comment_count>7</comment_count>
      <attachid>209519</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 15:46:26 -0700</bug_when>
    <thetext>Created attachment 209519
patch

Not implemented methods are noted in ChangeLogs.
More implementations of API to come.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920476</commentid>
    <comment_count>8</comment_count>
      <attachid>209519</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 15:50:50 -0700</bug_when>
    <thetext>Comment on attachment 209519
patch

I will split up the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920477</commentid>
    <comment_count>9</comment_count>
      <attachid>209521</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 15:53:16 -0700</bug_when>
    <thetext>Created attachment 209521
HookUp Interfaces to WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920478</commentid>
    <comment_count>10</comment_count>
      <attachid>209521</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-08-23 15:56:29 -0700</bug_when>
    <thetext>Comment on attachment 209521
HookUp Interfaces to WebKit

do you need to add these files, or do they exist already?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920480</commentid>
    <comment_count>11</comment_count>
      <attachid>209522</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 15:56:59 -0700</bug_when>
    <thetext>Created attachment 209522
Add IAccessible(Editable)Text implementation

Depends on previous patch to build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920481</commentid>
    <comment_count>12</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 15:58:26 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 209521 [details])
&gt; do you need to add these files, or do they exist already?

My second patch adds those files...
Hmm I guess I&apos;ll need to commit both patches at the same time to minimize build breakage.
Or we can just go with the larger patch, which&apos;ll just do everything at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920482</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-23 15:58:50 -0700</bug_when>
    <thetext>Attachment 209522 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/win/AccessibleBase.cpp&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.cpp&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.h&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;]&quot; exit_code: 1
Source/WebKit/win/AccessibleTextImpl.h:45:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:46:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:47:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:49:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:52:  The parameter name &quot;scrollType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:53:  The parameter name &quot;coordinateType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:67:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:77:  AccessibleText::get_caretOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:91:  AccessibleText::get_characterExtents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:125:  AccessibleText::get_nSelections is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:137:  AccessibleText::get_offsetAtPoint is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:168:  AccessibleText::get_selection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:185:  AccessibleText::get_text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:201:  AccessibleText::get_textBeforeOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:209:  AccessibleText::get_textAfterOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:217:  AccessibleText::get_textAtOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:268:  AccessibleText::get_nCharacters is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:273:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebKit/win/AccessibleTextImpl.cpp:345:  AccessibleText::get_Text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:353:  AccessibleText::get_oldText is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:363:  AccessibleText::get_attributeRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:498:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 23 in 4 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>920485</commentid>
    <comment_count>14</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-08-23 15:59:53 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 209521 [details] [details])
&gt; &gt; do you need to add these files, or do they exist already?
&gt; 
&gt; My second patch adds those files...
&gt; Hmm I guess I&apos;ll need to commit both patches at the same time to minimize build breakage.
&gt; Or we can just go with the larger patch, which&apos;ll just do everything at once.

should probably do one patch here so it can be easily rolled out or rolled in as needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920486</commentid>
    <comment_count>15</comment_count>
      <attachid>209523</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 16:03:55 -0700</bug_when>
    <thetext>Created attachment 209523
Combined patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920488</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-23 16:05:59 -0700</bug_when>
    <thetext>Attachment 209523 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/WebKit.vcxproj/Interfaces/Interfaces.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/Interfaces/Interfaces.vcxproj.filters&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKit/WebKit.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKit/WebKit.vcxproj.filters&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKitGUID/WebKitGUID.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKitGUID/WebKitGUID.vcxproj.filters&apos;, u&apos;Source/WebKit/win/AccessibleBase.cpp&apos;, u&apos;Source/WebKit/win/AccessibleBase.h&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.cpp&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.h&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;]&quot; exit_code: 1
Source/WebKit/win/AccessibleTextImpl.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:67:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:77:  AccessibleText::get_caretOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:91:  AccessibleText::get_characterExtents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:125:  AccessibleText::get_nSelections is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:137:  AccessibleText::get_offsetAtPoint is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:168:  AccessibleText::get_selection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:185:  AccessibleText::get_text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:201:  AccessibleText::get_textBeforeOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:209:  AccessibleText::get_textAfterOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:217:  AccessibleText::get_textAtOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:268:  AccessibleText::get_nCharacters is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:273:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebKit/win/AccessibleTextImpl.cpp:345:  AccessibleText::get_Text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:353:  AccessibleText::get_oldText is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:363:  AccessibleText::get_attributeRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:498:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.h:45:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:46:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:47:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:49:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:52:  The parameter name &quot;scrollType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:53:  The parameter name &quot;coordinateType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 23 in 12 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>920489</commentid>
    <comment_count>17</comment_count>
      <attachid>209524</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 16:06:25 -0700</bug_when>
    <thetext>Created attachment 209524
Combined patch with style fixes

Ignoring some of the other style errors. I don&apos;t think they apply here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920490</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-23 16:08:51 -0700</bug_when>
    <thetext>Attachment 209524 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/WebKit.vcxproj/Interfaces/Interfaces.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/Interfaces/Interfaces.vcxproj.filters&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKit/WebKit.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKit/WebKit.vcxproj.filters&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKitGUID/WebKitGUID.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKitGUID/WebKitGUID.vcxproj.filters&apos;, u&apos;Source/WebKit/win/AccessibleBase.cpp&apos;, u&apos;Source/WebKit/win/AccessibleBase.h&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.cpp&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.h&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;]&quot; exit_code: 1
Source/WebKit/win/AccessibleTextImpl.cpp:67:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:77:  AccessibleText::get_caretOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:91:  AccessibleText::get_characterExtents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:125:  AccessibleText::get_nSelections is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:137:  AccessibleText::get_offsetAtPoint is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:168:  AccessibleText::get_selection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:185:  AccessibleText::get_text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:201:  AccessibleText::get_textBeforeOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:209:  AccessibleText::get_textAfterOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:217:  AccessibleText::get_textAtOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:268:  AccessibleText::get_nCharacters is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:345:  AccessibleText::get_Text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:353:  AccessibleText::get_oldText is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:363:  AccessibleText::get_attributeRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:498:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.h:45:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:46:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:47:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:49:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:52:  The parameter name &quot;scrollType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:53:  The parameter name &quot;coordinateType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 21 in 12 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>920492</commentid>
    <comment_count>19</comment_count>
      <attachid>209523</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-08-23 16:10:27 -0700</bug_when>
    <thetext>Comment on attachment 209523
Combined patch

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

&gt; Source/WebKit/win/AccessibleTextImpl.cpp:130
&gt; +    if (m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().isNone())

You should use m_object-&gt;document() and ensure existence of document()

&gt; Source/WebKit/win/AccessibleTextImpl.cpp:235
&gt; +    m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().clear();

ditto about document()

&gt; Source/WebKit/win/AccessibleTextImpl.cpp:548
&gt; +    ASSERT(m_object-&gt;renderer()-&gt;document()-&gt;frame());

why do you need to assert frame() here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920493</commentid>
    <comment_count>20</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 16:14:38 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 209523 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209523&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:130
&gt; &gt; +    if (m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().isNone())
&gt; 
&gt; You should use m_object-&gt;document() and ensure existence of document()
&gt; 
&gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:235
&gt; &gt; +    m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().clear();
&gt; 
&gt; ditto about document()

Is checking the existence of m_object-&gt;renderer()-&gt;document() not the same thing?
I do that in the initialCheck method.

&gt; 
&gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:548
&gt; &gt; +    ASSERT(m_object-&gt;renderer()-&gt;document()-&gt;frame());
&gt; 
&gt; why do you need to assert frame() here?

Oops I don&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920496</commentid>
    <comment_count>21</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-08-23 16:22:18 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (From update of attachment 209523 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209523&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:130
&gt; &gt; &gt; +    if (m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().isNone())
&gt; &gt; 
&gt; &gt; You should use m_object-&gt;document() and ensure existence of document()
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:235
&gt; &gt; &gt; +    m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().clear();
&gt; &gt; 
&gt; &gt; ditto about document()
&gt; 
&gt; Is checking the existence of m_object-&gt;renderer()-&gt;document() not the same thing?
&gt; I do that in the initialCheck method.

I think it&apos;s cleaner if we don&apos;t have to ask for the renderer() object. I think the platform implementations should try hard to work mainly through the WebCore AccessibilityObject interface rather than diving into objects it holds on to.

There&apos;s also a chance that renderer() disappears or doesn&apos;t exist for the object because maybe in a &lt;canvas&gt;

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:548
&gt; &gt; &gt; +    ASSERT(m_object-&gt;renderer()-&gt;document()-&gt;frame());
&gt; &gt; 
&gt; &gt; why do you need to assert frame() here?
&gt; 
&gt; Oops I don&apos;t.

(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (From update of attachment 209523 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209523&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:130
&gt; &gt; &gt; +    if (m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().isNone())
&gt; &gt; 
&gt; &gt; You should use m_object-&gt;document() and ensure existence of document()
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:235
&gt; &gt; &gt; +    m_object-&gt;renderer()-&gt;document()-&gt;frame()-&gt;selection().clear();
&gt; &gt; 
&gt; &gt; ditto about document()
&gt; 
&gt; Is checking the existence of m_object-&gt;renderer()-&gt;document() not the same thing?
&gt; I do that in the initialCheck method.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/win/AccessibleTextImpl.cpp:548
&gt; &gt; &gt; +    ASSERT(m_object-&gt;renderer()-&gt;document()-&gt;frame());
&gt; &gt; 
&gt; &gt; why do you need to assert frame() here?
&gt; 
&gt; Oops I don&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920499</commentid>
    <comment_count>22</comment_count>
      <attachid>209525</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-23 16:37:24 -0700</bug_when>
    <thetext>Created attachment 209525
patch

Ok I&apos;ve replaced all calls to renderer-&gt;document with jsut document, including in the initialcheck method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920500</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-23 16:39:47 -0700</bug_when>
    <thetext>Attachment 209525 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/WebKit.vcxproj/Interfaces/Interfaces.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/Interfaces/Interfaces.vcxproj.filters&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKit/WebKit.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKit/WebKit.vcxproj.filters&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKitGUID/WebKitGUID.vcxproj&apos;, u&apos;Source/WebKit/WebKit.vcxproj/WebKitGUID/WebKitGUID.vcxproj.filters&apos;, u&apos;Source/WebKit/win/AccessibleBase.cpp&apos;, u&apos;Source/WebKit/win/AccessibleBase.h&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.cpp&apos;, u&apos;Source/WebKit/win/AccessibleTextImpl.h&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;]&quot; exit_code: 1
Source/WebKit/win/AccessibleTextImpl.cpp:67:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:77:  AccessibleText::get_caretOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:91:  AccessibleText::get_characterExtents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:125:  AccessibleText::get_nSelections is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:137:  AccessibleText::get_offsetAtPoint is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:168:  AccessibleText::get_selection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:185:  AccessibleText::get_text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:201:  AccessibleText::get_textBeforeOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:209:  AccessibleText::get_textAfterOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:217:  AccessibleText::get_textAtOffset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:268:  AccessibleText::get_nCharacters is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:345:  AccessibleText::get_Text is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:353:  AccessibleText::get_oldText is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:363:  AccessibleText::get_attributeRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.cpp:498:  AccessibleText::get_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebKit/win/AccessibleTextImpl.h:45:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:46:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:47:  The parameter name &quot;boundaryType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:49:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:52:  The parameter name &quot;scrollType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/win/AccessibleTextImpl.h:53:  The parameter name &quot;coordinateType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 21 in 12 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>921095</commentid>
    <comment_count>24</comment_count>
      <attachid>209525</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-08-26 11:15:22 -0700</bug_when>
    <thetext>Comment on attachment 209525
patch

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921126</commentid>
    <comment_count>25</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-08-26 12:28:18 -0700</bug_when>
    <thetext>Committed http://trac.webkit.org/changeset/154627</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208876</attachid>
            <date>2013-08-15 19:43:39 -0700</date>
            <delta_ts>2013-08-23 15:46:26 -0700</delta_ts>
            <desc>Draft Patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>30953</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQxNTYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEzLTA4LTE1ICBSb2dlciBGb25n
ICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3RhcnQgaW1wbGVtZW50aW5nIElB
Y2Nlc3NpYmxlVGV4dCBpbnRlcmZhY2UgZm9yIEFwcGxlIFdpbmRvd3MgcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTgyOS4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZCBJQWNj
ZXNzaWJsZVRleHQgaW50ZXJmYWNlcyBhbmQgY29ycmVzcG9uZGluZyBpbXBsZW1lbnRhdGlvbiBm
aWxlcyB0byB0aGUgc29sdXRpb24uCisKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9JbnRlcmZh
Y2VzL0ludGVyZmFjZXMudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9JbnRlcmZh
Y2VzL0ludGVyZmFjZXMudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQv
V2ViS2l0LnZjeHByb2ouZmlsdGVyczoKKwogMjAxMy0wOC0xNSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gVW5yZXZpZXdlZCBidWlsZCBm
aXggYWZ0ZXIgcjE1NDEyNy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovSW50
ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvagkocmV2aXNpb24gMTU0
MTU2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFj
ZXMudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI4LDYgKzMyOCw4IEBACiAgICAgPE1pZGwg
SW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uLmlkbCIgLz4NCiAgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNc
QWNjZXNzaWJsZTJcQWNjZXNzaWJsZVJlbGF0aW9uLmlkbCIgLz4NCiAgICAgPE1pZGwgSW5jbHVk
ZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZVN0YXRlcy5pZGwi
IC8+DQorICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUy
XEFjY2Vzc2libGVUZXh0LmlkbCIgLz4NCisgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXElu
dGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZVRleHQyLmlkbCIgLz4NCiAgICAgPE1pZGwg
SW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZUNvbXBhcmFibGUuaWRsIj4N
CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPg0KICAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPg0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2ou
ZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0ludGVy
ZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1NDE1NikKKysrIFNv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2ou
ZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3NywxMiBAQAogICAgIDxNaWRsIElu
Y2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5pZGwiPg0K
ICAgICAgIDxGaWx0ZXI+SURMPC9GaWx0ZXI+DQogICAgIDwvTWlkbD4NCisgICAgPE1pZGwgSW5j
bHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZVRleHQuaWRs
Ij4NCisgICAgICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5MjwvRmlsdGVyPg0KKyAgICA8L01p
ZGw+DQorICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUy
XEFjY2Vzc2libGVUZXh0Mi5pZGwiPg0KKyAgICAgIDxGaWx0ZXI+SURMXEFjY2Vzc2liaWxpdHky
PC9GaWx0ZXI+DQorICAgIDwvTWlkbD4NCiAgIDwvSXRlbUdyb3VwPg0KICAgPEl0ZW1Hcm91cD4N
CiAgICAgPE5vbmUgSW5jbHVkZT0iSW50ZXJmYWNlc1Bvc3RCdWlsZC5jbWQiIC8+DQpJbmRleDog
U291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHBy
b2oJKHJldmlzaW9uIDE1NDE1NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2Vi
S2l0L1dlYktpdC52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNiArMjY5LDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVEb2N1bWVudC5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVJbWFnZS5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVUZXh0
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cQ0ZEaWN0aW9uYXJ5
UHJvcGVydHlCYWcuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxE
ZWZhdWx0RG93bmxvYWREZWxlZ2F0ZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cLi5cd2luXERlZmF1bHRQb2xpY3lEZWxlZ2F0ZS5jcHAiIC8+DQpAQCAtNDE2LDYgKzQxNyw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUJhc2UuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZURvY3VtZW50
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVJbWFn
ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlVGV4
dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rpb25hcnlQ
cm9wZXJ0eUJhZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxDb2Rl
QW5hbHlzaXNDb25maWcuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5c
Q09NRW51bVZhcmlhbnQuaCIgLz4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9u
IDE1NDE1NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52
Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsyNzUsOSBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cY2ZcV2ViQ29yZVN1cHBvcnRcV2ViSW5zcGVjdG9yQ2xp
ZW50Q0YuY3BwIj4NCiAgICAgICA8RmlsdGVyPldlYkNvcmVTdXBwb3J0PC9GaWx0ZXI+DQogICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3Np
YmxlVGV4dC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCiAgIDwvSXRlbUdyb3VwPg0KICAgPEl0ZW1Hcm91cD4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cV2ViQ29yZVN1cHBvcnRcRW1iZWRkZWRXaWRnZXQuaCI+DQpA
QCAtNTM2LDYgKzUzOSw5IEBACiAgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPg0K
ICAgICA8L0NsSW5jbHVkZT4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cV2Vi
S2l0UHJlZml4LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vz
c2libGVUZXh0LmgiPg0KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KICAgPC9JdGVtR3JvdXA+DQogICA8SXRlbUdyb3VwPg0KICAgICA8Tm9u
ZSBJbmNsdWRlPSJXZWJLaXRQb3N0QnVpbGQuY21kIiAvPg0KQEAgLTYyOCw0ICs2MzQsNCBAQAog
ICAgICAgPEZpbHRlcj5SZXNvdXJjZXM8L0ZpbHRlcj4NCiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+
DQogICA8L0l0ZW1Hcm91cD4NCi08L1Byb2plY3Q+DQorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlVGV4dC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRETEwu
aCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlVGV4dC5oIgorCisjaW5jbHVkZSAiV2ViVmlldy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Bvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUZXh0Q29udHJvbC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvVmlzaWJsZVNlbGVjdGlvbi5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQWNj
ZXNzaWJsZVRleHQ6OkFjY2Vzc2libGVUZXh0KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iaiwgSFdORCB3aW5kb3cpCisgICAgOiBBY2Nlc3NpYmxlQmFzZShvYmosIHdpbmRvdykKK3sK
KworfQorCisvLyBJQWNjZXNzaWJsZVRleHQKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmFkZFNl
bGVjdGlvbihsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCkKK3sKKyAgICBpZiAoaW5p
dGlhbENoZWNrKCkgPT0gRV9GQUlMKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgc3Rh
cnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zm
c2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5kT2Zmc2V0KTsKKworICAgIG1fb2JqZWN0LT5z
ZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0
LXN0YXJ0T2Zmc2V0KSk7CisgICAgCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNj
ZXNzaWJsZVRleHQ6OmF0dHJpYnV0ZXMobG9uZyBvZmZzZXQsIGxvbmcgKnN0YXJ0T2Zmc2V0LCBs
b25nICplbmRPZmZzZXQsIEJTVFIgKnRleHRBdHRyaWJ1dGVzKQoreworICAgIGlmIChpbml0aWFs
Q2hlY2soKSA9PSBFX0ZBSUwpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBvZmZzZXQg
PSBjb252ZXJ0U3BlY2lhbE9mZnNldChvZmZzZXQpOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsK
K30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Y2FyZXRPZmZzZXQobG9uZyAqb2Zmc2V0KQor
eworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX0ZBSUwpCisgICAgICAgIHJldHVybiBFX0ZB
SUw7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IG1fb2JqZWN0LT5yZW5k
ZXJlcigpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIo
KS0+Y2FyZXRQb3NpdGlvbigpOworCisgICAgaW50IGNhcmV0T2Zmc2V0ID0gbV9vYmplY3QtPmlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNhcmV0UG9zaXRpb24pOworICAgIGlmIChjYXJldE9mZnNl
dCA8IDApCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgKm9mZnNldCA9IGNhcmV0T2Zmc2V0
OworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpjaGFyYWN0ZXJFeHRlbnRzKGxvbmcgb2Zm
c2V0LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNvb3JkVHlwZSwgbG9uZyAqeCwgbG9uZyAqeSwg
bG9uZyAqd2lkdGgsIGxvbmcgKmhlaWdodCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0g
RV9GQUlMKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgb2Zmc2V0ID0gY29udmVydFNw
ZWNpYWxPZmZzZXQob2Zmc2V0KTsKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPnJlbmRlcmVy
KCktPm5vZGUoKTsKKworICAgIEludFJlY3QgYm91bmRpbmdSZWN0ID0gbV9vYmplY3QtPmJvdW5k
c0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IpKSwgVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCsxLCBQb3NpdGlv
bjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSkpKTsKKyAgICAqd2lkdGggPSBib3VuZGluZ1Jl
Y3Qud2lkdGgoKTsKKyAgICAqaGVpZ2h0ID0gYm91bmRpbmdSZWN0LmhlaWdodCgpOworICAgIHN3
aXRjaCAoY29vcmRUeXBlKQorICAgIHsKKyAgICBjYXNlIElBMl9DT09SRFRZUEVfU0NSRUVOX1JF
TEFUSVZFOgorICAgICAgICBQT0lOVCBwb2ludHNbMV07CisgICAgICAgIHBvaW50c1swXS54ID0g
Ym91bmRpbmdSZWN0LngoKTsKKyAgICAgICAgcG9pbnRzWzBdLnkgPSBib3VuZGluZ1JlY3QueSgp
OworICAgICAgICBNYXBXaW5kb3dQb2ludHMobV93aW5kb3csIE5VTEwsIHBvaW50cywgMSk7Cisg
ICAgICAgICp4ID0gcG9pbnRzWzBdLng7CisgICAgICAgICp5ID0gcG9pbnRzWzBdLnk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSUEyX0NPT1JEVFlQRV9QQVJFTlRfUkVMQVRJVkU6CisgICAg
ICAgICp4ID0gYm91bmRpbmdSZWN0LngoKTsKKyAgICAgICAgKnkgPSBib3VuZGluZ1JlY3QueSgp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVU
ZXh0OjpuU2VsZWN0aW9ucyhsb25nICpuU2VsZWN0aW9ucykKK3sKKyAgICBpZiAoaW5pdGlhbENo
ZWNrKCkgPT0gRV9GQUlMKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgaWYgKG1fb2Jq
ZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNOb25l
KCkpCisgICAgICAgICpuU2VsZWN0aW9ucyA9IDA7CisgICAgZWxzZQorICAgICAgICAqblNlbGVj
dGlvbnMgPSAxOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0
OjpvZmZzZXRBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNv
b3JkVHlwZSwgbG9uZyAqb2Zmc2V0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX0ZB
SUwpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3Qt
PnJlbmRlcmVyKCktPm5vZGUoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdnBvczsKKyAgICBzd2l0
Y2ggKGNvb3JkVHlwZSkKKyAgICB7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBFX1NDUkVFTl9SRUxB
VElWRToKKyAgICAgICAgUE9JTlQgcG9pbnRzWzFdOworICAgICAgICBwb2ludHNbMF0ueCA9IHg7
CisgICAgICAgIHBvaW50c1swXS55ID0geTsKKyAgICAgICAgTWFwV2luZG93UG9pbnRzKE5VTEws
IG1fd2luZG93LCBwb2ludHMsIDEpOworICAgICAgICB2cG9zID0gbV9vYmplY3QtPnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KEludFBvaW50KHBvaW50c1swXS54LCBwb2ludHNbMF0ueSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElBMl9DT09SRFRZUEVfUEFSRU5UX1JFTEFUSVZFOgorICAg
ICAgICB2cG9zID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KEludFBvaW50KHgs
IHkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfSU5W
QUxJREFSRzsKKyAgICB9CisKKyAgICBpbnQgY2FyZXRQb3NpdGlvbiA9IG1fb2JqZWN0LT5pbmRl
eEZvclZpc2libGVQb3NpdGlvbih2cG9zKTsKKyAgICBpZiAoY2FyZXRQb3NpdGlvbiA8IDAgfHwg
Y2FyZXRQb3NpdGlvbiA+IG1fb2JqZWN0LT50ZXh0KCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVy
biBTX0ZBTFNFOyAKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4
dDo6c2VsZWN0aW9uKGxvbmcgc2VsZWN0aW9uSW5kZXgsIGxvbmcgKnN0YXJ0T2Zmc2V0LCBsb25n
ICplbmRPZmZzZXQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfRkFJTCkKKyAgICAg
ICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGxvbmcgc2VsZWN0aW9uczsKKyAgICBuU2VsZWN0aW9u
cygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8fCBzZWxlY3Rpb25J
bmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAg
UGxhaW5UZXh0UmFuZ2Ugc2VsZWN0aW9uUmFuZ2UgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0UmFu
Z2UoKTsKKworICAgICpzdGFydE9mZnNldCA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0OworICAgICpl
bmRPZmZzZXQgPSBzZWxlY3Rpb25SYW5nZS5sZW5ndGg7CisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRP
ZmZzZXQsIEJTVFIgKnRleHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfRkFJTCkK
KyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIHN0YXJ0T2Zmc2V0ID0gY29udmVydFNwZWNp
YWxPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgIGVuZE9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zm
c2V0KGVuZE9mZnNldCk7CisgICAgV1RGOjpTdHJpbmcgc3ViX3RleHQgPSBtX29iamVjdC0+dGV4
dCgpLnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOworCisg
ICAgKnRleHQgPSBTeXNBbGxvY1N0cmluZ0xlbihzdWJfdGV4dC5jaGFyYWN0ZXJzKCksIHN1Yl90
ZXh0Lmxlbmd0aCgpKTsKKyAgICBpZiAoc3ViX3RleHQubGVuZ3RoKCkgJiYgISp0ZXh0KQorICAg
ICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVUZXh0Ojp0ZXh0QmVmb3JlT2Zmc2V0KGxvbmcgb2Zmc2V0LCBlbnVtIElB
MlRleHRCb3VuZGFyeVR5cGUgYm91bmRhcnlUeXBlLCBsb25nICpzdGFydE9mZnNldCwgbG9uZyAq
ZW5kT2Zmc2V0LCBCU1RSICp0ZXh0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX0ZB
SUwpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgCisgICAgb2Zmc2V0ID0gY29udmVydFNw
ZWNpYWxPZmZzZXQob2Zmc2V0KTsKKworICAgIGlmIChvZmZzZXQgPCAwICYmIG9mZnNldCA+IG1f
b2JqZWN0LT50ZXh0KCkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisK
KyAgICAvLyBPYnRhaW4gdGhlIGRlc2lyZWQgdGV4dCByYW5nZQorICAgIFZpc2libGVQb3NpdGlv
biBjdXJyZW50UG9zaXRpb24gPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgob2Zm
c2V0KTsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB0ZXh0UmFuZ2U7CisgICAgaW50IHByZXZp
b3VzX3BvcyA9IHN0ZDo6bWF4KDAsIChpbnQpKG9mZnNldC0xKSk7CisgICAgc3dpdGNoIChib3Vu
ZGFyeVR5cGUpCisgICAgeworICAgIGNhc2UgSUEyX1RFWFRfQk9VTkRBUllfQ0hBUjoKKyAgICAg
ICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxh
aW5UZXh0UmFuZ2UocHJldmlvdXNfcG9zLCAxKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SUEyX1RFWFRfQk9VTkRBUllfV09SRDoKKyAgICAgICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPnBv
c2l0aW9uT2ZMZWZ0V29yZChjdXJyZW50UG9zaXRpb24pOworICAgICAgICBpZiAoY3VycmVudFBv
c2l0aW9uID49IHRleHRSYW5nZS5zdGFydCAmJiBjdXJyZW50UG9zaXRpb24gPD0gdGV4dFJhbmdl
LmVuZCkKKyAgICAgICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5wb3NpdGlvbk9mTGVmdFdv
cmQodGV4dFJhbmdlLnN0YXJ0LnByZXZpb3VzKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IElBMl9URVhUX0JPVU5EQVJZX1NFTlRFTkNFOgorICAgICAgICB0ZXh0UmFuZ2Uuc3RhcnQgPSBt
X29iamVjdC0+cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY3VycmVudFBvc2l0aW9uKTsK
KyAgICAgICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPnNlbnRlbmNlRm9yUG9zaXRpb24odGV4dFJh
bmdlLnN0YXJ0KTsKKyAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA+PSB0ZXh0UmFuZ2Uuc3Rh
cnQgJiYgY3VycmVudFBvc2l0aW9uIDw9IHRleHRSYW5nZS5lbmQpCisgICAgICAgICAgICB0ZXh0
UmFuZ2UgPSBtX29iamVjdC0+c2VudGVuY2VGb3JQb3NpdGlvbihtX29iamVjdC0+cHJldmlvdXNT
ZW50ZW5jZVN0YXJ0UG9zaXRpb24odGV4dFJhbmdlLnN0YXJ0LnByZXZpb3VzKCkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJQTJfVEVYVF9CT1VOREFSWV9QQVJBR1JBUEg6CisgICAgICAg
IHRleHRSYW5nZS5zdGFydCA9IG1fb2JqZWN0LT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0UG9zaXRp
b24oY3VycmVudFBvc2l0aW9uKTsKKyAgICAgICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPnBhcmFn
cmFwaEZvclBvc2l0aW9uKHRleHRSYW5nZS5zdGFydCk7CisgICAgICAgIGlmIChjdXJyZW50UG9z
aXRpb24gPj0gdGV4dFJhbmdlLnN0YXJ0ICYmIGN1cnJlbnRQb3NpdGlvbiA8PSB0ZXh0UmFuZ2Uu
ZW5kKQorICAgICAgICAgICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPnBhcmFncmFwaEZvclBvc2l0
aW9uKG1fb2JqZWN0LT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0UG9zaXRpb24odGV4dFJhbmdlLnN0
YXJ0LnByZXZpb3VzKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfVEVYVF9CT1VO
REFSWV9MSU5FOgorICAgICAgICB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JMaW5lKG1fb2JqZWN0LT5saW5lRm9yUG9zaXRpb24oY3VycmVudFBvc2l0aW9uKSk7
CisgICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5sZWZ0TGluZVZpc2libGVQb3NpdGlvblJh
bmdlKHRleHRSYW5nZS5zdGFydC5wcmV2aW91cygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJQTJfVEVYVF9CT1VOREFSWV9BTEw6CisgICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52
aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKDAsIG9mZnNldCkpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJH
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBPYnRhaW4gc3RyaW5nIGFuZCBvZmZz
ZXRzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0IHJhbmdlCisgICAgKnN0YXJ0T2Zmc2V0ID0gbV9vYmpl
Y3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHRleHRSYW5nZS5zdGFydCk7CisgICAgKmVuZE9m
ZnNldCA9IG1fb2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbih0ZXh0UmFuZ2UuZW5kKTsK
KworICAgIGlmICgqc3RhcnRPZmZzZXQgPT0gKmVuZE9mZnNldCkKKyAgICAgICAgcmV0dXJuIFNf
RkFMU0U7CisKKyAgICBXVEY6OlN0cmluZyBzdWJfdGV4dCA9IG1fb2JqZWN0LT50ZXh0KCkuc3Vi
c3RyaW5nKCpzdGFydE9mZnNldCwgKmVuZE9mZnNldCAtICpzdGFydE9mZnNldCk7CisgICAgKnRl
eHQgPSBTeXNBbGxvY1N0cmluZ0xlbihzdWJfdGV4dC5jaGFyYWN0ZXJzKCksIHN1Yl90ZXh0Lmxl
bmd0aCgpKTsKKyAgICBpZiAoc3ViX3RleHQubGVuZ3RoKCkgJiYgISp0ZXh0KQorICAgICAgICBy
ZXR1cm4gRV9PVVRPRk1FTU9SWTsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFj
Y2Vzc2libGVUZXh0Ojp0ZXh0QWZ0ZXJPZmZzZXQobG9uZyBvZmZzZXQsIGVudW0gSUEyVGV4dEJv
dW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcgKnN0YXJ0T2Zmc2V0LCBsb25nICplbmRPZmZz
ZXQsIEJTVFIgKnRleHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfRkFJTCkKKyAg
ICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGludCB0ZXh0TGVuZ3RoID0gbV9vYmplY3QtPnRl
eHQoKS5sZW5ndGgoKTsKKyAgICBvZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChvZmZzZXQp
OworCisgICAgaWYgKG9mZnNldCA8IDAgJiYgb2Zmc2V0ID4gdGV4dExlbmd0aCkKKyAgICAgICAg
cmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRp
b24gPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgob2Zmc2V0KTsKKyAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSB0ZXh0UmFuZ2U7CisKKyAgICAvLyBPYnRhaW4gdGhlIGRlc2lyZWQg
dGV4dCByYW5nZQorICAgIHN3aXRjaCAoYm91bmRhcnlUeXBlKQorICAgIHsKKyAgICBjYXNlIElB
Ml9URVhUX0JPVU5EQVJZX0NIQVI6CisgICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52aXNp
YmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKG9mZnNldCArIDEsIG9mZnNl
dCArIDIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfVEVYVF9CT1VOREFSWV9XT1JE
OgorICAgICAgICB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+cG9zaXRpb25PZlJpZ2h0V29yZChjdXJy
ZW50UG9zaXRpb24pOworICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uID49IHRleHRSYW5nZS5z
dGFydCAmJiBjdXJyZW50UG9zaXRpb24gPD0gdGV4dFJhbmdlLmVuZCkKKyAgICAgICAgICAgIHRl
eHRSYW5nZSA9IG1fb2JqZWN0LT5wb3NpdGlvbk9mUmlnaHRXb3JkKHRleHRSYW5nZS5lbmQubmV4
dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfVEVYVF9CT1VOREFSWV9TRU5URU5D
RToKKyAgICAgICAgdGV4dFJhbmdlLmVuZCA9IG1fb2JqZWN0LT5uZXh0U2VudGVuY2VFbmRQb3Np
dGlvbihjdXJyZW50UG9zaXRpb24pOworICAgICAgICB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+c2Vu
dGVuY2VGb3JQb3NpdGlvbih0ZXh0UmFuZ2UuZW5kKTsKKyAgICAgICAgaWYgKGN1cnJlbnRQb3Np
dGlvbiA+PSB0ZXh0UmFuZ2Uuc3RhcnQgJiYgY3VycmVudFBvc2l0aW9uIDw9IHRleHRSYW5nZS5l
bmQpCisgICAgICAgICAgICB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+c2VudGVuY2VGb3JQb3NpdGlv
bihtX29iamVjdC0+bmV4dFNlbnRlbmNlRW5kUG9zaXRpb24odGV4dFJhbmdlLmVuZC5uZXh0KCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfVEVYVF9CT1VOREFSWV9QQVJBR1JBUEg6
CisgICAgICAgIHRleHRSYW5nZS5lbmQgPSBtX29iamVjdC0+bmV4dFBhcmFncmFwaEVuZFBvc2l0
aW9uKGN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT5wYXJh
Z3JhcGhGb3JQb3NpdGlvbih0ZXh0UmFuZ2UuZW5kKTsKKyAgICAgICAgaWYgKGN1cnJlbnRQb3Np
dGlvbiA+PSB0ZXh0UmFuZ2Uuc3RhcnQgJiYgY3VycmVudFBvc2l0aW9uIDw9IHRleHRSYW5nZS5l
bmQpCisgICAgICAgICAgICB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+cGFyYWdyYXBoRm9yUG9zaXRp
b24obV9vYmplY3QtPm5leHRQYXJhZ3JhcGhFbmRQb3NpdGlvbih0ZXh0UmFuZ2UuZW5kLm5leHQo
KSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9URVhUX0JPVU5EQVJZX0xJTkU6Cisg
ICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUo
bV9vYmplY3QtPmxpbmVGb3JQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pKTsKKyAgICAgICAgdGV4
dFJhbmdlID0gbV9vYmplY3QtPnJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKHRleHRSYW5n
ZS5lbmQubmV4dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfVEVYVF9CT1VOREFS
WV9BTEw6CisgICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5n
ZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKG9mZnNldCwgdGV4dExlbmd0aC1vZmZzZXQpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gT2J0YWluIHN0cmluZyBhbmQgb2Zmc2V0
cyBhc3NvY2lhdGVkIHdpdGggdGV4dCByYW5nZQorICAgICpzdGFydE9mZnNldCA9IG1fb2JqZWN0
LT5pbmRleEZvclZpc2libGVQb3NpdGlvbih0ZXh0UmFuZ2Uuc3RhcnQpOworICAgICplbmRPZmZz
ZXQgPSBtX29iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odGV4dFJhbmdlLmVuZCk7CisK
KyAgICBpZiAoKnN0YXJ0T2Zmc2V0ID09ICplbmRPZmZzZXQpCisgICAgICAgIHJldHVybiBTX0ZB
TFNFOworCisgICAgV1RGOjpTdHJpbmcgc3ViX3RleHQgPSBtX29iamVjdC0+dGV4dCgpLnN1YnN0
cmluZygqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQgLSAqc3RhcnRPZmZzZXQpOworICAgICp0ZXh0
ID0gU3lzQWxsb2NTdHJpbmdMZW4oc3ViX3RleHQuY2hhcmFjdGVycygpLCBzdWJfdGV4dC5sZW5n
dGgoKSk7CisgICAgaWYgKHN1Yl90ZXh0Lmxlbmd0aCgpICYmICEqdGV4dCkKKyAgICAgICAgcmV0
dXJuIEVfT1VUT0ZNRU1PUlk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nl
c3NpYmxlVGV4dDo6dGV4dEF0T2Zmc2V0KGxvbmcgb2Zmc2V0LCBlbnVtIElBMlRleHRCb3VuZGFy
eVR5cGUgYm91bmRhcnlUeXBlLCBsb25nICpzdGFydE9mZnNldCwgbG9uZyAqZW5kT2Zmc2V0LCBC
U1RSICp0ZXh0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX0ZBSUwpCisgICAgICAg
IHJldHVybiBFX0ZBSUw7CisgICAgCisgICAgaW50IHRleHRMZW5ndGggPSBtX29iamVjdC0+dGV4
dCgpLmxlbmd0aCgpOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQob2Zmc2V0
KTsKKworICAgIGlmIChvZmZzZXQgPCAwICYmIG9mZnNldCA+IHRleHRMZW5ndGgpCisgICAgICAg
IHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICAvLyBPYnRhaW4gdGhlIGRlc2lyZWQgdGV4dCBy
YW5nZQorICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UG9zaXRpb24gPSBtX29iamVjdC0+dmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXgob2Zmc2V0KTsKKyAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB0
ZXh0UmFuZ2U7CisgICAgc3dpdGNoIChib3VuZGFyeVR5cGUpCisgICAgeworICAgIGNhc2UgSUEy
X1RFWFRfQk9VTkRBUllfQ0hBUjoKKyAgICAgICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPnZpc2li
bGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uob2Zmc2V0LCAxKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSUEyX1RFWFRfQk9VTkRBUllfV09SRDoKKyAgICAgICAgdGV4
dFJhbmdlID0gbV9vYmplY3QtPnBvc2l0aW9uT2ZMZWZ0V29yZChjdXJyZW50UG9zaXRpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9URVhUX0JPVU5EQVJZX1NFTlRFTkNFOgorICAg
ICAgICB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+c2VudGVuY2VGb3JQb3NpdGlvbihjdXJyZW50UG9z
aXRpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9URVhUX0JPVU5EQVJZX1BBUkFH
UkFQSDoKKyAgICAgICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPnBhcmFncmFwaEZvclBvc2l0aW9u
KGN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUEyX1RFWFRfQk9V
TkRBUllfTElORToKKyAgICAgICAgdGV4dFJhbmdlID0gbV9vYmplY3QtPmxlZnRMaW5lVmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoY3VycmVudFBvc2l0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJQTJfVEVYVF9CT1VOREFSWV9BTEw6CisgICAgICAgIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52
aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKDAsIG1fb2JqZWN0LT50
ZXh0KCkubGVuZ3RoKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gT2J0
YWluIHN0cmluZyBhbmQgb2Zmc2V0cyBhc3NvY2lhdGVkIHdpdGggdGV4dCByYW5nZQorICAgICpz
dGFydE9mZnNldCA9IG1fb2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbih0ZXh0UmFuZ2Uu
c3RhcnQpOworICAgICplbmRPZmZzZXQgPSBtX29iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRp
b24odGV4dFJhbmdlLmVuZCk7CisKKyAgICBpZiAoKnN0YXJ0T2Zmc2V0ID09ICplbmRPZmZzZXQp
CisgICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgV1RGOjpTdHJpbmcgc3ViX3RleHQgPSBt
X29iamVjdC0+dGV4dCgpLnN1YnN0cmluZygqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQgLSAqc3Rh
cnRPZmZzZXQpOworICAgICp0ZXh0ID0gU3lzQWxsb2NTdHJpbmdMZW4oc3ViX3RleHQuY2hhcmFj
dGVycygpLCBzdWJfdGV4dC5sZW5ndGgoKSk7CisgICAgaWYgKHN1Yl90ZXh0Lmxlbmd0aCgpICYm
ICEqdGV4dCkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisKKyAgICByZXR1cm4gU19P
SzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6cmVtb3ZlU2VsZWN0aW9uKGxvbmcgc2Vs
ZWN0aW9uSW5kZXgpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfRkFJTCkKKyAgICAg
ICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGxvbmcgc2VsZWN0aW9uczsKKyAgICBuU2VsZWN0aW9u
cygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8fCBzZWxlY3Rpb25J
bmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAg
bV9vYmplY3QtPnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5j
bGVhcigpOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0Ojpz
ZXRDYXJldE9mZnNldChsb25nIG9mZnNldCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0g
RV9GQUlMKQorICAgICAgICByZXR1cm4gRV9GQUlMOworICAgICAgICAKKyAgICBvZmZzZXQgPSBj
b252ZXJ0U3BlY2lhbE9mZnNldChvZmZzZXQpOworICAgIE5vZGUqIG5vZGUgPSBtX29iamVjdC0+
cmVuZGVyZXIoKS0+bm9kZSgpOworICAgIG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKS0+c2V0Q2FyZXRQb3NpdGlv
bihWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKSkpOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFj
Y2Vzc2libGVUZXh0OjpzZXRTZWxlY3Rpb24obG9uZyBzZWxlY3Rpb25JbmRleCwgbG9uZyBzdGFy
dE9mZnNldCwgbG9uZyBlbmRPZmZzZXQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVf
RkFJTCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGxvbmcgc2VsZWN0aW9uczsKKyAg
ICBuU2VsZWN0aW9ucygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8
fCBzZWxlY3Rpb25JbmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworDQorICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5n
ZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpKTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6bkNoYXJhY3RlcnMobG9uZyAqY2hhcmFj
dGVycykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9GQUlMKQorICAgICAgICByZXR1
cm4gRV9GQUlMOworCisgICAgaW50IGxlbmd0aCA9IG1fb2JqZWN0LT50ZXh0TGVuZ3RoKCk7Cisg
ICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICAqY2hhcmFj
dGVycyA9IGxlbmd0aDsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxl
VGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG8obG9uZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4LCBl
bnVtIElBMlNjcm9sbFR5cGUgc2Nyb2xsVHlwZSkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkg
PT0gRV9GQUlMKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgc3RhcnRJbmRleCA9IGNv
bnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0SW5kZXgpOworICAgIGVuZEluZGV4ID0gY29udmVydFNw
ZWNpYWxPZmZzZXQoZW5kSW5kZXgpOworCisgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdGV4dFJh
bmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFu
Z2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgtc3RhcnRJbmRleCkpOworICAgIEludFJlY3QgYm91bmRp
bmdCb3ggPSBtYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UuZW5kKS0+Ym91bmRp
bmdCb3goKTsKKyAgICBzd2l0Y2ggKHNjcm9sbFR5cGUpCisgICAgeworICAgIGNhc2UgSUEyX1ND
Uk9MTF9UWVBFX1RPUF9MRUZUOgorICAgICAgICBtX29iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2lu
dChib3VuZGluZ0JveC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJQTJfU0NST0xMX1RZUEVfQk9UVE9NX1JJR0hUOgorICAgICAgICBtX29iamVjdC0+c2Nyb2xs
VG9HbG9iYWxQb2ludChib3VuZGluZ0JveC5tYXhYTWF4WUNvcm5lcigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfVE9QX0VER0U6CisgICAgICAgIG1fb2JqZWN0
LT5zY3JvbGxUb0dsb2JhbFBvaW50KEludFBvaW50KChib3VuZGluZ0JveC54KCkgKyBib3VuZGlu
Z0JveC5tYXhYKCkpLzIsIGJvdW5kaW5nQm94LnkoKSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElBMl9TQ1JPTExfVFlQRV9CT1RUT01fRURHRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9s
bFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoKGJvdW5kaW5nQm94LngoKSArIGJvdW5kaW5nQm94Lm1h
eFgoKSkvMiwgYm91bmRpbmdCb3gubWF4WSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SUEyX1NDUk9MTF9UWVBFX0xFRlRfRURHRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xv
YmFsUG9pbnQoSW50UG9pbnQoYm91bmRpbmdCb3gueCgpLCAoYm91bmRpbmdCb3gueSgpICsgYm91
bmRpbmdCb3gubWF4WSgpKS8yKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUEyX1NDUk9M
TF9UWVBFX1JJR0hUX0VER0U6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50
KEludFBvaW50KGJvdW5kaW5nQm94Lm1heFgoKSwgKGJvdW5kaW5nQm94LnkoKSArIGJvdW5kaW5n
Qm94Lm1heFkoKSkvMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9TQ1JPTExfVFlQ
RV9BTllXSEVSRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoYm91bmRp
bmdCb3guY2VudGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gRV9JTlZBTElEQVJHOworICAgIH0KKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBBY2Nlc3NpYmxlVGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG9Qb2ludChsb25nIHN0YXJ0SW5kZXgs
IGxvbmcgZW5kSW5kZXgsIGVudW0gSUEyQ29vcmRpbmF0ZVR5cGUgY29vcmRpbmF0ZVR5cGUsIGxv
bmcgeCwgbG9uZyB5KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX0ZBSUwpCisgICAg
ICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBzdGFydEluZGV4ID0gY29udmVydFNwZWNpYWxPZmZz
ZXQoc3RhcnRJbmRleCk7CisgICAgZW5kSW5kZXggPSBjb252ZXJ0U3BlY2lhbE9mZnNldChlbmRJ
bmRleCk7CisKKyAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUeXBlKQorICAgIHsKKyAgICBjYXNlIElB
Ml9DT09SRFRZUEVfU0NSRUVOX1JFTEFUSVZFOgorICAgICAgICBQT0lOVCBwb2ludHNbMV07Cisg
ICAgICAgIHBvaW50c1swXS54ID0geDsKKyAgICAgICAgcG9pbnRzWzBdLnkgPSB5OworICAgICAg
ICBNYXBXaW5kb3dQb2ludHMoTlVMTCwgbV93aW5kb3csIHBvaW50cywgMSk7CisgICAgICAgIG1f
b2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KEludFBvaW50KHBvaW50c1swXS54LCBwb2ludHNb
MF0ueSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9DT09SRFRZUEVfUEFSRU5UX1JF
TEFUSVZFOgorICAgICAgICBtX29iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludCh4
LCB5KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFX0lO
VkFMSURBUkc7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6Om5ld1RleHQoSUEyVGV4dFNlZ21lbnQgKm5ld1RleHQpCit7CisgICAgaWYgKGlu
aXRpYWxDaGVjaygpID09IEVfRkFJTCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAKKyAg
ICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpvbGRUZXh0
KElBMlRleHRTZWdtZW50ICpvbGRUZXh0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBF
X0ZBSUwpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICByZXR1cm4gRV9OT1RJTVBMOwor
fQorCisKKy8vIElBY2Nlc3NpYmxlVGV4dDIKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmF0dHJp
YnV0ZVJhbmdlKGxvbmcgb2Zmc2V0LCBCU1RSIGZpbHRlciwgbG9uZyAqc3RhcnRPZmZzZXQsIGxv
bmcgKmVuZE9mZnNldCwgQlNUUiAqYXR0cmlidXRlVmFsdWVzKQoreworICAgIGlmIChpbml0aWFs
Q2hlY2soKSA9PSBFX0ZBSUwpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICByZXR1cm4g
RV9OT1RJTVBMOworfQorCisKK2ludCBBY2Nlc3NpYmxlVGV4dDo6Y29udmVydFNwZWNpYWxPZmZz
ZXQoaW50IG9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9vYmplY3QpOworICAgIEFTU0VSVChtX29i
amVjdC0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgCisgICAgaWYgKG9m
ZnNldCA9PSBJQTJfVEVYVF9PRkZTRVRfTEVOR1RIKQorICAgICAgICByZXR1cm4gbV9vYmplY3Qt
PnRleHQoKS5sZW5ndGgoKTsKKyAgICBlbHNlIGlmIChvZmZzZXQgPT0gSUEyX1RFWFRfT0ZGU0VU
X0NBUkVUKQorICAgICAgICByZXR1cm4gbV9vYmplY3QtPnJlbmRlcmVyKCktPmRvY3VtZW50KCkt
PmZyYW1lKCktPnNlbGVjdGlvbigpLT5zdGFydCgpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG9mZnNldDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxl
VGV4dDo6aW5pdGlhbENoZWNrKCkKK3sKKyAgICBpZiAoIW1fb2JqZWN0KQorICAgICAgICByZXR1
cm4gRV9GQUlMOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9vYmplY3QtPnJlbmRlcmVy
KCktPmRvY3VtZW50KCk7DQorICAgIGlmICghZG9jdW1lbnQpDQorICAgICAgICByZXR1cm4gRV9G
QUlMOw0KKw0KKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsNCisgICAgaWYg
KCFmcmFtZSkNCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICByZXR1cm4gU19PSzsKK30K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViS2l0L3dpbi9BY2Nlc3NpYmxlVGV4dC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKIyMgLTAsMCArMSAjIworKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbi9BY2Nlc3NpYmxlVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBY2Nlc3NpYmxlSW1hZ2VfaAorI2RlZmluZSBBY2Nlc3NpYmxlSW1hZ2VfaAorCisjaW5jbHVk
ZSAiQWNjZXNzaWJsZUJhc2UuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKworY2xhc3MgQWNjZXNz
aWJsZVRleHQgOiBwdWJsaWMgQWNjZXNzaWJsZUJhc2UsIHB1YmxpYyBJQWNjZXNzaWJsZVRleHQy
Cit7CitwdWJsaWM6CisgICAgQWNjZXNzaWJsZVRleHQoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdCosIEhXTkQpOworICAgIHZpcnR1YWwgfkFjY2Vzc2libGVUZXh0KCkgeyB9CisKKwkvLyBJ
QWNjZXNzaWJsZVRleHQKKwl2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWRkU2Vs
ZWN0aW9uKGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KTsKKwl2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgYXR0cmlidXRlcyhsb25nIG9mZnNldCwJbG9uZyAqc3RhcnRP
ZmZzZXQsIGxvbmcgKmVuZE9mZnNldCwJQlNUUiAqdGV4dEF0dHJpYnV0ZXMpOworCXZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjYXJldE9mZnNldChsb25nICpvZmZzZXQpOworCXZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjaGFyYWN0ZXJFeHRlbnRzKGxvbmcgb2Zm
c2V0LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNvb3JkVHlwZSwgbG9uZyAqeCwgbG9uZyAqeSwg
bG9uZyAqd2lkdGgsIGxvbmcgKmhlaWdodCk7CisJdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIG5TZWxlY3Rpb25zKGxvbmcgKm5TZWxlY3Rpb25zKTsKKwl2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgb2Zmc2V0QXRQb2ludChsb25nIHgsIGxvbmcgeSwgZW51bSBJQTJD
b29yZGluYXRlVHlwZSBjb29yZFR5cGUsIGxvbmcgKm9mZnNldCk7CisJdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIHNlbGVjdGlvbihsb25nIHNlbGVjdGlvbkluZGV4LCBsb25nICpz
dGFydE9mZnNldCwgbG9uZyAqZW5kT2Zmc2V0KTsKKwl2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgdGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiAqdGV4
dCk7CisJdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHRleHRCZWZvcmVPZmZzZXQo
bG9uZyBvZmZzZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcg
KnN0YXJ0T2Zmc2V0LCBsb25nICplbmRPZmZzZXQsIEJTVFIgKnRleHQpOworCXZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSB0ZXh0QWZ0ZXJPZmZzZXQobG9uZyBvZmZzZXQsIGVudW0g
SUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcgKnN0YXJ0T2Zmc2V0LCBsb25n
ICplbmRPZmZzZXQsIEJTVFIgKnRleHQpOworCXZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSB0ZXh0QXRPZmZzZXQobG9uZyBvZmZzZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBi
b3VuZGFyeVR5cGUsIGxvbmcgKnN0YXJ0T2Zmc2V0LCBsb25nICplbmRPZmZzZXQsIEJTVFIgKnRl
eHQpOworCXZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSByZW1vdmVTZWxlY3Rpb24o
bG9uZyBzZWxlY3Rpb25JbmRleCk7CisJdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHNldENhcmV0T2Zmc2V0KGxvbmcgb2Zmc2V0KTsKKwl2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgc2V0U2VsZWN0aW9uKGxvbmcgc2VsZWN0aW9uSW5kZXgsIGxvbmcgc3RhcnRPZmZz
ZXQsIGxvbmcgZW5kT2Zmc2V0KTsKKwl2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
bkNoYXJhY3RlcnMobG9uZyAqY2hhcmFjdGVycyk7CisJdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHNjcm9sbFN1YnN0cmluZ1RvKGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRl
eCwgZW51bSBJQTJTY3JvbGxUeXBlIHNjcm9sbFR5cGUpOworCXZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBzY3JvbGxTdWJzdHJpbmdUb1BvaW50KGxvbmcgc3RhcnRJbmRleCwgbG9u
ZyBlbmRJbmRleCwgZW51bSBJQTJDb29yZGluYXRlVHlwZSBjb29yZGluYXRlVHlwZSwgbG9uZyB4
LCBsb25nIHkpOworCXZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBuZXdUZXh0KElB
MlRleHRTZWdtZW50ICpuZXdUZXh0KTsKKwl2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgb2xkVGV4dChJQTJUZXh0U2VnbWVudCAqb2xkVGV4dCk7CisJCisJLy8gSUFjY2Vzc2libGVU
ZXh0MgorCXZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhdHRyaWJ1dGVSYW5nZShs
b25nIG9mZnNldCwgQlNUUiBmaWx0ZXIsIGxvbmcgKnN0YXJ0T2Zmc2V0LCBsb25nICplbmRPZmZz
ZXQsIEJTVFIgKmF0dHJpYnV0ZVZhbHVlcyk7Citwcml2YXRlOgorCWludCBjb252ZXJ0U3BlY2lh
bE9mZnNldChpbnQgc3BlY2lhbE9mZnNldCk7CisJSFJFU1VMVCBpbml0aWFsQ2hlY2soKTsKK307
CisKKyNlbmRpZiAvLyBBY2Nlc3NpYmxlSW1hZ2VfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZVRleHQuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDE1NikKKysrIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEzLTA4LTE1
ICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3RhcnQgaW1w
bGVtZW50aW5nIElBY2Nlc3NpYmxlVGV4dCBpbnRlcmZhY2UgZm9yIEFwcGxlIFdpbmRvd3MgcG9y
dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTgy
OS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIEFjY2VzaWJsZVRleHQgaW1wbGVtZW50cyBJQWNjZXNzaWJsZVRleHQyIGFuZCBoZW5jZSBh
bHNvIElBY2Nlc3NpYmxlVGV4dC4KKworICAgICAgICAqIEFjY2Vzc2libGVUZXh0LmNwcDogQWRk
ZWQuCisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6QWNjZXNzaWJsZVRleHQpOgorICAgICAgICAo
QWNjZXNzaWJsZVRleHQ6OmFkZFNlbGVjdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6
YXR0cmlidXRlcyk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Y2FyZXRPZmZzZXQpOgorICAg
ICAgICAoQWNjZXNzaWJsZVRleHQ6OmNoYXJhY3RlckV4dGVudHMpOgorICAgICAgICAoQWNjZXNz
aWJsZVRleHQ6Om5TZWxlY3Rpb25zKToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpvZmZzZXRB
dFBvaW50KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpzZWxlY3Rpb24pOgorICAgICAgICAo
QWNjZXNzaWJsZVRleHQ6OnRleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnRleHRCZWZv
cmVPZmZzZXQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnRleHRBZnRlck9mZnNldCk6Cisg
ICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6dGV4dEF0T2Zmc2V0KToKKyAgICAgICAgKEFjY2Vzc2li
bGVUZXh0OjpyZW1vdmVTZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnNldENh
cmV0T2Zmc2V0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpzZXRTZWxlY3Rpb24pOgorICAg
ICAgICAoQWNjZXNzaWJsZVRleHQ6Om5DaGFyYWN0ZXJzKToKKyAgICAgICAgKEFjY2Vzc2libGVU
ZXh0OjpzY3JvbGxTdWJzdHJpbmdUbyk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6c2Nyb2xs
U3Vic3RyaW5nVG9Qb2ludCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6bmV3VGV4dCk6Cisg
ICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6b2xkVGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4
dDo6YXR0cmlidXRlUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmNvbnZlcnRTcGVj
aWFsT2Zmc2V0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0Ojppbml0aWFsQ2hlY2spOgorICAg
ICAgICAqIEFjY2Vzc2libGVUZXh0Lmg6IEFkZGVkLgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6
On5BY2Nlc3NpYmxlVGV4dCk6CisgICAgICAgICogSW50ZXJmYWNlcy9XZWJLaXQuaWRsOgorCiAy
MDEzLTA4LTE1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXaW5kb3dzXSBDb25zb2xpZGF0ZSBXZWJLaXQgQnVuZGxlIGhhbmRsaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL1dlYktpdC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vSW50ZXJmYWNlcy9XZWJLaXQuaWRsCShyZXZpc2lvbiAxNTQxNTYpCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL1dlYktpdC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDYgKzU5LDcgQEAKIAogI2luY2x1ZGUgIkFjY2Vzc2libGVDb21wYXJhYmxlLmlkbCIKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5RGVsZWdhdGUuaWRsIgorI2luY2x1ZGUgIkFjY2Vzc2libGVU
ZXh0Mi5pZGwiCiAjaW5jbHVkZSAiV2ViU2Nyb2xsYmFyVHlwZXMuaWRsIgogI2luY2x1ZGUgIkph
dmFTY3JpcHRDb3JlQVBJVHlwZXMuaWRsIgogI2luY2x1ZGUgIklXZWJTY3JpcHRPYmplY3QuaWRs
Igo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209519</attachid>
            <date>2013-08-23 15:46:26 -0700</date>
            <delta_ts>2013-08-23 15:53:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>1092</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDQ5
NikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA4
LTIyICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgVHJlYXQg
b2JqZWN0cyB3aXRoIGVkaXRhYmxlIHRleHQgcm9sZXMgYXMgdGV4dCBjb250cm9scy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDEyMi4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojppc1RleHRDb250cm9sKToKKwogMjAxMy0wOC0yMyAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
MTM4OTU+IFdlYmtpdCBleHBvc2VzIGFyaWEtZXhwYW5kZWQ9InVuZGVmaW5lZCIgYXMgYXJpYS1l
eHBhbmRlZD0iZmFsc2UiIChBWEV4cGFuZGVkID0gTk8pCkluZGV4OiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDE1NDQ5NikKKysrIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMsNyBAQAog
Ym9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1RleHRDb250cm9sKCkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHJvbGVWYWx1ZSgpKSB7CisgICAgY2FzZSBFZGl0YWJsZVRleHRSb2xlOgogICAgIGNh
c2UgVGV4dEFyZWFSb2xlOgogICAgIGNhc2UgVGV4dEZpZWxkUm9sZToKICAgICBjYXNlIENvbWJv
Qm94Um9sZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209521</attachid>
            <date>2013-08-23 15:53:16 -0700</date>
            <delta_ts>2013-08-23 16:03:55 -0700</delta_ts>
            <desc>HookUp Interfaces to WebKit</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>9575</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ1MjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA4LTIxICBSb2dlciBGb25n
ICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk4Mjk+IElBY2Nlc3NpYmxlVGV4dCBhbmQgSUFjY2Vzc2li
bGVFZGl0YWJsZVRleHQgaW1wbGVtZW50YXRpb24gZm9yIEFwcGxlV2luZG93cyBwb3J0LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBX
ZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVyczoKKwogMjAxMy0wOC0y
MyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmUtc2VwYXJhdGluZyBXaW4zMiBhbmQgV2luNjQgYnVpbGRzLgpJbmRleDogU291cmNlL1dlYktp
dC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0ludGVyZmFjZXMvSW50ZXJmYWNlcy52
Y3hwcm9qCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L0ludGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsOCAr
MzI2LDExIEBACiAgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNz
aWJsZTJcQWNjZXNzaWJsZTIuaWRsIiAvPg0KICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5c
SW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlMl8yLmlkbCIgLz4NCiAgICAgPE1pZGwg
SW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uLmlkbCIgLz4NCisgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNc
QWNjZXNzaWJsZTJcQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwiIC8+DQogICAgIDxNaWRsIElu
Y2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2libGVSZWxhdGlv
bi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vz
c2libGUyXEFjY2Vzc2libGVTdGF0ZXMuaWRsIiAvPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dC5pZGwiIC8+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVUZXh0Mi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVDb21wYXJhYmxlLmlkbCI+DQogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvai5maWx0
ZXJzCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw2ICsyNzcsMTUgQEAKICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5cSW50ZXJmYWNlc1xB
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUuaWRsIj4NCiAgICAgICA8RmlsdGVyPklETDwvRmlsdGVyPg0K
ICAgICA8L01pZGw+DQorICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFj
Y2Vzc2libGUyXEFjY2Vzc2libGVUZXh0LmlkbCI+DQorICAgICAgPEZpbHRlcj5JRExcQWNjZXNz
aWJpbGl0eTI8L0ZpbHRlcj4NCisgICAgPC9NaWRsPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dDIuaWRsIj4NCisgICAg
ICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5MjwvRmlsdGVyPg0KKyAgICA8L01pZGw+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHQuaWRsIj4NCisgICAgICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5Mjwv
RmlsdGVyPg0KKyAgICA8L01pZGw+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQog
ICAgIDxOb25lIEluY2x1ZGU9IkludGVyZmFjZXNQb3N0QnVpbGQuY21kIiAvPg0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9q
CShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUJhc2UuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlSW1hZ2UuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlVGV4dElt
cGwuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rpb25h
cnlQcm9wZXJ0eUJhZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2lu
XERlZmF1bHREb3dubG9hZERlbGVnYXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlx3aW5cRGVmYXVsdFBvbGljeURlbGVnYXRlLmNwcCIgLz4NCkBAIC00MTYsNiArNDE3
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1l
bnQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUlt
YWdlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVU
ZXh0SW1wbC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rp
b25hcnlQcm9wZXJ0eUJhZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxDb2RlQW5hbHlzaXNDb25maWcuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu
Llx3aW5cQ09NRW51bVZhcmlhbnQuaCIgLz4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMJKHJl
dmlzaW9uIDE1NDQ5NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dl
YktpdC52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsyNzUsOSBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cY2ZcV2ViQ29yZVN1cHBvcnRcV2ViSW5zcGVj
dG9yQ2xpZW50Q0YuY3BwIj4NCiAgICAgICA8RmlsdGVyPldlYkNvcmVTdXBwb3J0PC9GaWx0ZXI+
DQogICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxB
Y2Nlc3NpYmxlVGV4dEltcGwuY3BwIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0XEVtYmVkZGVkV2lk
Z2V0LmgiPg0KQEAgLTUzNiw2ICs1MzksOSBAQAogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cd2luXFdlYktpdFByZWZpeC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XHdpblxBY2Nlc3NpYmxlVGV4dEltcGwuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3Jv
dXA+DQogICAgIDxOb25lIEluY2x1ZGU9IldlYktpdFBvc3RCdWlsZC5jbWQiIC8+DQpAQCAtNjI4
LDQgKzYzNCw0IEBACiAgICAgICA8RmlsdGVyPlJlc291cmNlczwvRmlsdGVyPg0KICAgICA8L1Jl
c291cmNlQ29tcGlsZT4NCiAgIDwvSXRlbUdyb3VwPg0KLTwvUHJvamVjdD4NCis8L1Byb2plY3Q+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRHVUlEL1dlYktpdEdVSUQudmN4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdVSUQvV2ViS2l0R1VJRC52Y3hwcm9qCShy
ZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdV
SUQvV2ViS2l0R1VJRC52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDkgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJLaXRcSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMl8yX2kuYyIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2Jq
JChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uX2kuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNj
ZXNzaWJsZVJlbGF0aW9uX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRfaS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u
XC4uXFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqMzJcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZVRleHQyX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxXZWJL
aXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2libGVUZXh0X2ku
YyIgLz4NCiAgIDwvSXRlbUdyb3VwPg0KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh
dGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+DQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVy
cwkocmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw1
ICsxMCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZTJfMl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vz
c2libGVBcHBsaWNhdGlvbl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRl
cmZhY2VzXEFjY2Vzc2libGVSZWxhdGlvbl9pLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cLi5cLi5cV2ViS2l0QnVpbGRcUmVsZWFzZVxvYmozMlxXZWJLaXRcSW50ZXJmYWNl
c1xBY2Nlc3NpYmxlRWRpdGFibGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlwuLlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVUZXh0Ml9pLmMiIC8+DQogICA8L0l0ZW1Hcm91cD4NCiA8L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAko
cmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs5MSwxMCBAQAogICAgICAgICAmJiAhSXNFcXVhbEdV
SUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZTJfMikKICAgICAgICAgJiYgIUlzRXF1YWxH
VUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUyKQogICAgICAgICAmJiAhSXNFcXVhbEdV
SUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZUFwcGxpY2F0aW9uKQotICAgICAgICAmJiAh
SXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZSkpIHsKKyAgICAgICAgJiYg
IUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUpCisgICAgICAgICYmICFJ
c0VxdWFsR1VJRChndWlkU2VydmljZSwgSUlEX0lBY2Nlc3NpYmxlVGV4dCkKKyAgICAgICAgJiYg
IUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVUZXh0MikKKyAgICAgICAg
JiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVFZGl0YWJsZVRleHQp
KSB7CiAgICAgICAgICpwcHZPYmplY3QgPSAwOwogICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJH
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAkocmV2aXNpb24gMTU0
NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBBY2Nlc3NpYmxlQmFzZV9oCiAjZGVmaW5lIEFj
Y2Vzc2libGVCYXNlX2gKIAorI2luY2x1ZGUgIkFjY2Vzc2libGVFZGl0YWJsZVRleHQuaCIKKyNp
bmNsdWRlICJBY2Nlc3NpYmxlVGV4dC5oIgorI2luY2x1ZGUgIkFjY2Vzc2libGVUZXh0Mi5oIgog
I2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU9iamVj
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJXaW4uaD4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDUyNSkKKysrIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA4LTIz
ICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk4Mjk+IEFkZCBJQWNjZXNzaWJsZSwg
SUFjY2Vzc2libGUyIGFuZCBJQWNjZXNzaWJsZUVkaXRhYmxlIENPTSBpbnRlcmZhY2VzIHRvIEFw
cGxlV2luIFdlYktpdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEFjY2Vzc2libGVCYXNlLmNwcDoKKyAgICAgICAgKEFjY2Vzc2libGVCYXNlOjpR
dWVyeVNlcnZpY2UpOgorICAgICAgICAqIEFjY2Vzc2libGVCYXNlLmg6CisKIDIwMTMtMDgtMjMg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbmRvd3Nd
IFJlZmFjdG9yIFdlYkZyYW1lIHRvIGNvbXBvc2Ugd2l0aCBXZWJGcmFtZUxvYWRlckNsaWVudAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209522</attachid>
            <date>2013-08-23 15:56:59 -0700</date>
            <delta_ts>2013-08-23 16:03:55 -0700</delta_ts>
            <desc>Add IAccessible(Editable)Text implementation</desc>
            <filename>patch2.patch</filename>
            <type>text/plain</type>
            <size>26000</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlQmFzZS5jcHAJKHJldmlzaW9uIDE1NDQ5NikK
KysrIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2libGVCYXNlLmgiCiAKICNpbmNsdWRl
ICJBY2Nlc3NpYmxlSW1hZ2UuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlVGV4dEltcGwuaCIKICNp
bmNsdWRlICJXZWJWaWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5TGlzdEJv
eC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaD4KQEAg
LTc4LDYgKzc5LDggQEAKIAogICAgIGlmIChvYmotPmlzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJu
IG5ldyBBY2Nlc3NpYmxlSW1hZ2Uob2JqLCB3aW5kb3cpOworICAgIGVsc2UgaWYgKG9iai0+aXNT
dGF0aWNUZXh0KCkgfHwgb2JqLT5pc1RleHRDb250cm9sKCkgfHwgKG9iai0+bm9kZSgpICYmIG9i
ai0+bm9kZSgpLT5pc1RleHROb2RlKCkpKQorICAgICAgICByZXR1cm4gbmV3IEFjY2Vzc2libGVU
ZXh0KG9iaiwgd2luZG93KTsKIAogICAgIHJldHVybiBuZXcgQWNjZXNzaWJsZUJhc2Uob2JqLCB3
aW5kb3cpOwogfQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWNjZXNzaWJsZVRleHRJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJLaXRETEwuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FZGl0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvaHRtbGVkaXRpbmcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Ob2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGV4dENvbnRy
b2wuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVTZWxlY3Rpb24uaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0FjY2Vzc2libGVUZXh0OjpBY2Nlc3NpYmxlVGV4dChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmosIEhXTkQgd2luZG93KQorICAgIDogQWNjZXNzaWJs
ZUJhc2Uob2JqLCB3aW5kb3cpCit7CisgICAgQVNTRVJUX0FSRyhvYmosIG9iai0+aXNTdGF0aWNU
ZXh0KCkgfHwgb2JqLT5pc1RleHRDb250cm9sKCkgfHwgKG9iai0+bm9kZSgpICYmIG9iai0+bm9k
ZSgpLT5pc1RleHROb2RlKCkpKTsKKyAgICBBU1NFUlRfQVJHKG9iaiwgb2JqLT5pc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSk7Cit9CisKKy8vIElBY2Nlc3NpYmxlVGV4dAorSFJFU1VMVCBB
Y2Nlc3NpYmxlVGV4dDo6YWRkU2VsZWN0aW9uKGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zm
c2V0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFydE9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0
KHN0YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChlbmRP
ZmZzZXQpOworCisgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJh
bmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQtc3RhcnRPZmZzZXQpKTsKKyAgICAKKyAgICByZXR1
cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X2F0dHJpYnV0ZXMobG9u
ZyBvZmZzZXQsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHRB
dHRyaWJ1dGVzKQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBvZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNl
dChvZmZzZXQpOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3Np
YmxlVGV4dDo6Z2V0X2NhcmV0T2Zmc2V0KGxvbmcqIG9mZnNldCkKK3sKKyAgICBpZiAoaW5pdGlh
bENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAg
VmlzaWJsZVBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQobV9vYmplY3QtPnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVj
dGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMoKS5jZW50ZXIoKSk7CisKKyAgICBpbnQgY2FyZXRP
ZmZzZXQgPSBjYXJldFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJO
b2RlKCk7CisgICAgaWYgKGNhcmV0T2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsK
KyAgICAqb2Zmc2V0ID0gY2FyZXRPZmZzZXQ7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNV
TFQgQWNjZXNzaWJsZVRleHQ6OmdldF9jaGFyYWN0ZXJFeHRlbnRzKGxvbmcgb2Zmc2V0LCBlbnVt
IElBMkNvb3JkaW5hdGVUeXBlIGNvb3JkVHlwZSwgbG9uZyogeCwgbG9uZyogeSwgbG9uZyogd2lk
dGgsIGxvbmcqIGhlaWdodCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVS
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNp
YWxPZmZzZXQob2Zmc2V0KTsKKworICAgIE5vZGUqIG5vZGUgPSBtX29iamVjdC0+bm9kZSgpOwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEludFJlY3Qg
Ym91bmRpbmdSZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZp
c2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQs
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKSwgVmlzaWJsZVBvc2l0aW9uKFBv
c2l0aW9uKG5vZGUsIG9mZnNldCsxLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KSkpKTsKKyAgICAqd2lkdGggPSBib3VuZGluZ1JlY3Qud2lkdGgoKTsKKyAgICAqaGVpZ2h0ID0g
Ym91bmRpbmdSZWN0LmhlaWdodCgpOworICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7CisgICAgY2Fz
ZSBJQTJfQ09PUkRUWVBFX1NDUkVFTl9SRUxBVElWRToKKyAgICAgICAgUE9JTlQgcG9pbnRzWzFd
OworICAgICAgICBwb2ludHNbMF0ueCA9IGJvdW5kaW5nUmVjdC54KCk7CisgICAgICAgIHBvaW50
c1swXS55ID0gYm91bmRpbmdSZWN0LnkoKTsKKyAgICAgICAgTWFwV2luZG93UG9pbnRzKG1fd2lu
ZG93LCAwLCBwb2ludHMsIDEpOworICAgICAgICAqeCA9IHBvaW50c1swXS54OworICAgICAgICAq
eSA9IHBvaW50c1swXS55OworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9DT09SRFRZUEVf
UEFSRU5UX1JFTEFUSVZFOgorICAgICAgICAqeCA9IGJvdW5kaW5nUmVjdC54KCk7CisgICAgICAg
ICp5ID0gYm91bmRpbmdSZWN0LnkoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X25TZWxlY3Rpb25zKGxvbmcqIG5TZWxlY3Rp
b25zKQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICBpZiAobV9vYmplY3QtPnJlbmRlcmVyKCktPmRvY3VtZW50
KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgICAgICAqblNlbGVjdGlvbnMg
PSAwOworICAgIGVsc2UKKyAgICAgICAgKm5TZWxlY3Rpb25zID0gMTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X29mZnNldEF0UG9pbnQobG9uZyB4
LCBsb25nIHksIGVudW0gSUEyQ29vcmRpbmF0ZVR5cGUgY29vcmRUeXBlLCBsb25nKiBvZmZzZXQp
Cit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIE5vZGUqIG5vZGUgPSBtX29iamVjdC0+bm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIFZpc2libGVQb3NpdGlv
biB2cG9zOworICAgIHN3aXRjaCAoY29vcmRUeXBlKSB7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBF
X1NDUkVFTl9SRUxBVElWRToKKyAgICAgICAgUE9JTlQgcG9pbnRzWzFdOworICAgICAgICBwb2lu
dHNbMF0ueCA9IHg7CisgICAgICAgIHBvaW50c1swXS55ID0geTsKKyAgICAgICAgTWFwV2luZG93
UG9pbnRzKDAsIG1fd2luZG93LCBwb2ludHMsIDEpOworICAgICAgICB2cG9zID0gbV9vYmplY3Qt
PnZpc2libGVQb3NpdGlvbkZvclBvaW50KEludFBvaW50KHBvaW50c1swXS54LCBwb2ludHNbMF0u
eSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9DT09SRFRZUEVfUEFSRU5UX1JFTEFU
SVZFOgorICAgICAgICB2cG9zID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KElu
dFBvaW50KHgsIHkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICBpbnQgY2FyZXRQb3NpdGlvbiA9IHZwb3Mu
ZGVlcEVxdWl2YWxlbnQoKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAoY2FyZXRQ
b3NpdGlvbiA8IDAgfHwgY2FyZXRQb3NpdGlvbiA+IG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpLmxl
bmd0aCgpKQorICAgICAgICByZXR1cm4gU19GQUxTRTsgCisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9zZWxlY3Rpb24obG9uZyBzZWxlY3Rpb25JbmRl
eCwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcqIGVuZE9mZnNldCkKK3sKKyAgICBpZiAoaW5pdGlh
bENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAg
bG9uZyBzZWxlY3Rpb25zOworICAgIGdldF9uU2VsZWN0aW9ucygmc2VsZWN0aW9ucyk7CisgICAg
aWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8fCBzZWxlY3Rpb25JbmRleCA+PSBzZWxlY3Rpb25zKQor
ICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgUGxhaW5UZXh0UmFuZ2Ugc2VsZWN0
aW9uUmFuZ2UgPSBtX29iamVjdC0+c2VsZWN0ZWRUZXh0UmFuZ2UoKTsKKworICAgICpzdGFydE9m
ZnNldCA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0OworICAgICplbmRPZmZzZXQgPSBzZWxlY3Rpb25S
YW5nZS5sZW5ndGg7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRl
eHQ6OmdldF90ZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0
KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBzdGFydE9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0
YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChlbmRPZmZz
ZXQpOworICAgIFdURjo6U3RyaW5nIHN1YnN0cmluZ1RleHQgPSBtX29iamVjdC0+c3RyaW5nVmFs
dWUoKS5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKKwor
ICAgICp0ZXh0ID0gU3lzQWxsb2NTdHJpbmdMZW4oc3Vic3RyaW5nVGV4dC5jaGFyYWN0ZXJzKCks
IHN1YnN0cmluZ1RleHQubGVuZ3RoKCkpOworICAgIGlmIChzdWJzdHJpbmdUZXh0Lmxlbmd0aCgp
ICYmICEqdGV4dCkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X3RleHRCZWZvcmVPZmZzZXQo
bG9uZyBvZmZzZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcq
IHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHQpCit7CisgICAgaWYgKGlu
aXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAg
ICAKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0Ojpn
ZXRfdGV4dEFmdGVyT2Zmc2V0KGxvbmcgb2Zmc2V0LCBlbnVtIElBMlRleHRCb3VuZGFyeVR5cGUg
Ym91bmRhcnlUeXBlLCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0
ZXh0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisgICAgCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VM
VCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X3RleHRBdE9mZnNldChsb25nIG9mZnNldCwgZW51bSBJQTJU
ZXh0Qm91bmRhcnlUeXBlIGJvdW5kYXJ5VHlwZSwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcqIGVu
ZE9mZnNldCwgQlNUUiogdGV4dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lO
VEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgIAorICAgIHJldHVybiBFX05PVElN
UEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnJlbW92ZVNlbGVjdGlvbihsb25nIHNl
bGVjdGlvbkluZGV4KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBsb25nIHNlbGVjdGlvbnM7CisgICAgZ2V0
X25TZWxlY3Rpb25zKCZzZWxlY3Rpb25zKTsKKyAgICBpZiAoc2VsZWN0aW9uSW5kZXggPCAwIHx8
IHNlbGVjdGlvbkluZGV4ID49IHNlbGVjdGlvbnMpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURB
Ukc7CisKKyAgICBtX29iamVjdC0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3Np
YmxlVGV4dDo6c2V0Q2FyZXRPZmZzZXQobG9uZyBvZmZzZXQpCit7CisgICAgaWYgKGluaXRpYWxD
aGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAgICAg
CisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQob2Zmc2V0KTsKKworICAgIE5vZGUq
IG5vZGUgPSBtX29iamVjdC0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24obm9kZSwgb2Zmc2V0LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSkpKTsK
KyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6c2V0U2VsZWN0
aW9uKGxvbmcgc2VsZWN0aW9uSW5kZXgsIGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0
KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBsb25nIHNlbGVjdGlvbnM7CisgICAgZ2V0X25TZWxlY3Rpb25z
KCZzZWxlY3Rpb25zKTsKKyAgICBpZiAoc2VsZWN0aW9uSW5kZXggPCAwIHx8IHNlbGVjdGlvbklu
ZGV4ID49IHNlbGVjdGlvbnMpCisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisKKyAgICBt
X29iamVjdC0+c2V0U2VsZWN0ZWRUZXh0UmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KSk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNV
TFQgQWNjZXNzaWJsZVRleHQ6OmdldF9uQ2hhcmFjdGVycyhsb25nKiBjaGFyYWN0ZXJzKQorewor
ICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisKKwlpbnQgbGVuZ3RoID0gbV9vYmplY3QtPnN0cmluZ1ZhbHVlKCkubGVuZ3RoKCk7
CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICAqY2hh
cmFjdGVycyA9IGxlbmd0aDsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3Np
YmxlVGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG8obG9uZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4
LCBlbnVtIElBMlNjcm9sbFR5cGUgc2Nyb2xsVHlwZSkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNr
KCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRJ
bmRleCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0SW5kZXgpOworICAgIGVuZEluZGV4ID0g
Y29udmVydFNwZWNpYWxPZmZzZXQoZW5kSW5kZXgpOworCisgICAgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoUGxh
aW5UZXh0UmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgtc3RhcnRJbmRleCkpOworICAgIEludFJl
Y3QgYm91bmRpbmdCb3ggPSBtYWtlUmFuZ2UodGV4dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UuZW5k
KS0+Ym91bmRpbmdCb3goKTsKKyAgICBzd2l0Y2ggKHNjcm9sbFR5cGUpIHsKKyAgICBjYXNlIElB
Ml9TQ1JPTExfVFlQRV9UT1BfTEVGVDoKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFs
UG9pbnQoYm91bmRpbmdCb3gubWluWE1pbllDb3JuZXIoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSUEyX1NDUk9MTF9UWVBFX0JPVFRPTV9SSUdIVDoKKyAgICAgICAgbV9vYmplY3QtPnNj
cm9sbFRvR2xvYmFsUG9pbnQoYm91bmRpbmdCb3gubWF4WE1heFlDb3JuZXIoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSUEyX1NDUk9MTF9UWVBFX1RPUF9FREdFOgorICAgICAgICBtX29i
amVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludCgoYm91bmRpbmdCb3gueCgpICsgYm91
bmRpbmdCb3gubWF4WCgpKSAvIDIsIGJvdW5kaW5nQm94LnkoKSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIElBMl9TQ1JPTExfVFlQRV9CT1RUT01fRURHRToKKyAgICAgICAgbV9vYmplY3Qt
PnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoKGJvdW5kaW5nQm94LngoKSArIGJvdW5kaW5n
Qm94Lm1heFgoKSkgLyAyLCBib3VuZGluZ0JveC5tYXhZKCkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfTEVGVF9FREdFOgorICAgICAgICBtX29iamVjdC0+c2Ny
b2xsVG9HbG9iYWxQb2ludChJbnRQb2ludChib3VuZGluZ0JveC54KCksIChib3VuZGluZ0JveC55
KCkgKyBib3VuZGluZ0JveC5tYXhZKCkpIC8gMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IElBMl9TQ1JPTExfVFlQRV9SSUdIVF9FREdFOgorICAgICAgICBtX29iamVjdC0+c2Nyb2xsVG9H
bG9iYWxQb2ludChJbnRQb2ludChib3VuZGluZ0JveC5tYXhYKCksIChib3VuZGluZ0JveC55KCkg
KyBib3VuZGluZ0JveC5tYXhZKCkpIC8gMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElB
Ml9TQ1JPTExfVFlQRV9BTllXSEVSRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFs
UG9pbnQoYm91bmRpbmdCb3guY2VudGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworICAgIH0KKyAgICByZXR1cm4gU19PSzsK
K30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG9Qb2ludChsb25n
IHN0YXJ0SW5kZXgsIGxvbmcgZW5kSW5kZXgsIGVudW0gSUEyQ29vcmRpbmF0ZVR5cGUgY29vcmRp
bmF0ZVR5cGUsIGxvbmcgeCwgbG9uZyB5KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBF
X1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFydEluZGV4ID0g
Y29udmVydFNwZWNpYWxPZmZzZXQoc3RhcnRJbmRleCk7CisgICAgZW5kSW5kZXggPSBjb252ZXJ0
U3BlY2lhbE9mZnNldChlbmRJbmRleCk7CisKKyAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUeXBlKSB7
CisgICAgY2FzZSBJQTJfQ09PUkRUWVBFX1NDUkVFTl9SRUxBVElWRToKKyAgICAgICAgUE9JTlQg
cG9pbnRzWzFdOworICAgICAgICBwb2ludHNbMF0ueCA9IHg7CisgICAgICAgIHBvaW50c1swXS55
ID0geTsKKyAgICAgICAgTWFwV2luZG93UG9pbnRzKDAsIG1fd2luZG93LCBwb2ludHMsIDEpOwor
ICAgICAgICBtX29iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludChwb2ludHNbMF0u
eCwgcG9pbnRzWzBdLnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBF
X1BBUkVOVF9SRUxBVElWRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQo
SW50UG9pbnQoeCwgeSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gRV9JTlZBTElEQVJHOworICAgIH0KKworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfbmV3VGV4dChJQTJUZXh0U2VnbWVudCogbmV3VGV4dCkK
K3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOworICAgIAorICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNj
ZXNzaWJsZVRleHQ6OmdldF9vbGRUZXh0KElBMlRleHRTZWdtZW50KiBvbGRUZXh0KQoreworICAg
IGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCisKKy8vIElBY2Nlc3NpYmxlVGV4dDIK
K0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVSYW5nZShsb25nIG9mZnNldCwg
QlNUUiBmaWx0ZXIsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIGF0
dHJpYnV0ZVZhbHVlcykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQor
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKwor
SFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Y29weVRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBl
bmRPZmZzZXQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIHN0YXJ0T2Zmc2V0ID0gY29udmVydFNwZWNpYWxP
ZmZzZXQoc3RhcnRPZmZzZXQpOworICAgIGVuZE9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0
KGVuZE9mZnNldCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBtX29iamVjdC0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisg
ICAgYWRkU2VsZWN0aW9uKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgZnJhbWUtPmVk
aXRvcigpLmNvcHkoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxl
VGV4dDo6ZGVsZXRlVGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCkKK3sKKyAg
ICBpZiAobV9vYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisK
KyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3QtPmRvY3VtZW50KCktPmZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGFk
ZFNlbGVjdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGZyYW1lLT5lZGl0b3Io
KS5kZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoZmFsc2UpOworICAgIHJldHVybiBTX09L
OworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjppbnNlcnRUZXh0KGxvbmcgb2Zmc2V0LCBC
U1RSKiB0ZXh0KQoreworICAgIGlmIChtX29iamVjdC0+aXNSZWFkT25seSgpKQorICAgICAgICBy
ZXR1cm4gU19GQUxTRTsKKworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBvZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9m
ZnNldChvZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3QtPmRvY3VtZW50KCkt
PmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAg
ICAKKyAgICBhZGRTZWxlY3Rpb24ob2Zmc2V0LCBvZmZzZXQpOworCisgICAgZnJhbWUtPmVkaXRv
cigpLmluc2VydFRleHQoKnRleHQsIDApOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxU
IEFjY2Vzc2libGVUZXh0OjpjdXRUZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0
KQoreworICAgIGlmIChtX29iamVjdC0+aXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm4gU19G
QUxTRTsKKworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFydE9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0
KHN0YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChlbmRP
ZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3QtPmRvY3VtZW50KCktPmZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGFk
ZFNlbGVjdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGZyYW1lLT5lZGl0b3Io
KS5jdXQoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6
cGFzdGVUZXh0KGxvbmcgb2Zmc2V0KQoreworICAgIGlmIChtX29iamVjdC0+aXNSZWFkT25seSgp
KQorICAgICAgICByZXR1cm4gU19GQUxTRTsKKworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBF
X1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBvZmZzZXQgPSBjb252
ZXJ0U3BlY2lhbE9mZnNldChvZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3Qt
PmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKworICAgIGFkZFNlbGVjdGlvbihvZmZzZXQsIG9mZnNldCk7CisKKyAgICBmcmFt
ZS0+ZWRpdG9yKCkucGFzdGUoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nl
c3NpYmxlVGV4dDo6cmVwbGFjZVRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQs
IEJTVFIqIHRleHQpCit7CisgICAgaWYgKG1fb2JqZWN0LT5pc1JlYWRPbmx5KCkpCisgICAgICAg
IHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIHN0YXJ0T2Zmc2V0ID0gY29udmVydFNw
ZWNpYWxPZmZzZXQoc3RhcnRPZmZzZXQpOworICAgIGVuZE9mZnNldCA9IGNvbnZlcnRTcGVjaWFs
T2Zmc2V0KGVuZE9mZnNldCk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBtX29iamVjdC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OworCisgICAgYWRkU2VsZWN0aW9uKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworCisgICAgZnJh
bWUtPmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dCgqdGV4dCwgdHJ1ZSwgZmFsc2Up
OworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpzZXRBdHRy
aWJ1dGVzKGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiBhdHRyaWJ1dGVz
KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCisvLyBJQWNjZXNzaWJs
ZTIKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVzKEJTVFIqIGF0dHJpYnV0
ZXMpCit7CisgICAgV1RGOjpTdHJpbmcgdGV4dCgidGV4dC1tb2RlbDphMSIpOworICAgICphdHRy
aWJ1dGVzID0gU3lzQWxsb2NTdHJpbmdMZW4odGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3Ro
KCkpOworICAgIHJldHVybiBTX09LOworfQorCisvLyBJVW5rbm93bgorSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBBY2Nlc3NpYmxlVGV4dDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZv
aWQqKiBwcHZPYmplY3QpCit7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElB
Y2Nlc3NpYmxlVGV4dCkpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vz
c2libGVUZXh0Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlk
b2YoSUFjY2Vzc2libGVFZGl0YWJsZVRleHQpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRp
Y19jYXN0PElBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNF
cXVhbEdVSUQocmlpZCwgX191dWlkb2YoSUFjY2Vzc2libGUpKSkKKyAgICAgICAgKnBwdk9iamVj
dCA9IHN0YXRpY19jYXN0PElBY2Nlc3NpYmxlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVh
bEdVSUQocmlpZCwgX191dWlkb2YoSURpc3BhdGNoKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBz
dGF0aWNfY2FzdDxJQWNjZXNzaWJsZSo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlE
KHJpaWQsIF9fdXVpZG9mKElVbmtub3duKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNf
Y2FzdDxJQWNjZXNzaWJsZSo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQs
IF9fdXVpZG9mKElBY2Nlc3NpYmxlMl8yKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNf
Y2FzdDxJQWNjZXNzaWJsZTJfMio+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJp
aWQsIF9fdXVpZG9mKElBY2Nlc3NpYmxlMikpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SUFjY2Vzc2libGUyKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlp
ZCwgX191dWlkb2YoSUFjY2Vzc2libGVDb21wYXJhYmxlKSkpCisgICAgICAgICpwcHZPYmplY3Qg
PSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJsZUNvbXBhcmFibGUqPih0aGlzKTsKKyAgICBlbHNlIGlm
IChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJU2VydmljZVByb3ZpZGVyKSkpCisgICAgICAg
ICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJU2VydmljZVByb3ZpZGVyKj4odGhpcyk7CisgICAg
ZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoQWNjZXNzaWJsZUJhc2UpKSkKKyAg
ICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PEFjY2Vzc2libGVCYXNlKj4odGhpcyk7Cisg
ICAgZWxzZSB7CisgICAgICAgICpwcHZPYmplY3QgPSAwOworICAgICAgICByZXR1cm4gRV9OT0lO
VEVSRkFDRTsKKyAgICB9CisgICAgQWRkUmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VM
T05HIFNURE1FVEhPRENBTExUWVBFIEFjY2Vzc2libGVUZXh0OjpSZWxlYXNlKHZvaWQpCit7Cisg
ICAgQVNTRVJUKG1fcmVmQ291bnQgPiAwKTsKKyAgICBpZiAoLS1tX3JlZkNvdW50KQorICAgICAg
ICByZXR1cm4gbV9yZWZDb3VudDsKKyAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gMDsKK30K
KworaW50IEFjY2Vzc2libGVUZXh0Ojpjb252ZXJ0U3BlY2lhbE9mZnNldChpbnQgb2Zmc2V0KQor
eworICAgIEFTU0VSVChtX29iamVjdCk7CisgICAgQVNTRVJUKG1fb2JqZWN0LT5yZW5kZXJlcigp
LT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICAKKyAgICBpZiAob2Zmc2V0ID09IElBMl9URVhU
X09GRlNFVF9MRU5HVEgpIAorICAgICAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ1ZhbHVlKCku
bGVuZ3RoKCk7CisgICAgaWYgKG9mZnNldCA9PSBJQTJfVEVYVF9PRkZTRVRfQ0FSRVQpIHsKKyAg
ICAgICAgbG9uZyBjYXJldE9mZnNldDsKKyAgICAgICAgZ2V0X2NhcmV0T2Zmc2V0KCZjYXJldE9m
ZnNldCk7CisgICAgICAgIHJldHVybiBjYXJldE9mZnNldDsKKyAgICB9CisgICAgcmV0dXJuIG9m
ZnNldDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6aW5pdGlhbENoZWNrKCkKK3sKKyAg
ICBpZiAoIW1fb2JqZWN0KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbV9vYmplY3QtPnJlbmRlcmVyKCktPmRvY3VtZW50KCk7CisgICAgaWYgKCFk
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBFX0ZBSUw7
CisKKyAgICByZXR1cm4gU19PSzsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2li
bGVUZXh0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVU
ZXh0SW1wbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZVRl
eHRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFjY2Vzc2libGVUZXh0SW1w
bF9oCisjZGVmaW5lIEFjY2Vzc2libGVUZXh0SW1wbF9oCisKKyNpbmNsdWRlICJBY2Nlc3NpYmxl
QmFzZS5oIgorCitjbGFzcyBBY2Nlc3NpYmxlVGV4dCA6IHB1YmxpYyBBY2Nlc3NpYmxlQmFzZSwg
cHVibGljIElBY2Nlc3NpYmxlVGV4dDIsIHB1YmxpYyBJQWNjZXNzaWJsZUVkaXRhYmxlVGV4dCB7
CitwdWJsaWM6CisgICAgQWNjZXNzaWJsZVRleHQoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dCosIEhXTkQpOworICAgIHZpcnR1YWwgfkFjY2Vzc2libGVUZXh0KCkgeyB9CisKKyAgICAvLyBJ
QWNjZXNzaWJsZVRleHQKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWRk
U2VsZWN0aW9uKGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KTsKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2F0dHJpYnV0ZXMobG9uZyBvZmZzZXQsIGxv
bmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHRBdHRyaWJ1dGVzKTsK
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2NhcmV0T2Zmc2V0KGxv
bmcqIG9mZnNldCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9j
aGFyYWN0ZXJFeHRlbnRzKGxvbmcgb2Zmc2V0LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNvb3Jk
VHlwZSwgbG9uZyogeCwgbG9uZyogeSwgbG9uZyogd2lkdGgsIGxvbmcqIGhlaWdodCk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9uU2VsZWN0aW9ucyhsb25nKiBu
U2VsZWN0aW9ucyk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9v
ZmZzZXRBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNvb3Jk
VHlwZSwgbG9uZyogb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgZ2V0X3NlbGVjdGlvbihsb25nIHNlbGVjdGlvbkluZGV4LCBsb25nKiBzdGFydE9mZnNldCwg
bG9uZyogZW5kT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
Z2V0X3RleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQsIEJTVFIqIHRleHQpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfdGV4dEJlZm9yZU9mZnNl
dChsb25nIG9mZnNldCwgZW51bSBJQTJUZXh0Qm91bmRhcnlUeXBlIGJvdW5kYXJ5VHlwZSwgbG9u
Zyogc3RhcnRPZmZzZXQsIGxvbmcqIGVuZE9mZnNldCwgQlNUUiogdGV4dCk7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF90ZXh0QWZ0ZXJPZmZzZXQobG9uZyBvZmZz
ZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcqIHN0YXJ0T2Zm
c2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBnZXRfdGV4dEF0T2Zmc2V0KGxvbmcgb2Zmc2V0LCBlbnVtIElBMlRl
eHRCb3VuZGFyeVR5cGUgYm91bmRhcnlUeXBlLCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5k
T2Zmc2V0LCBCU1RSKiB0ZXh0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgcmVtb3ZlU2VsZWN0aW9uKGxvbmcgc2VsZWN0aW9uSW5kZXgpOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRDYXJldE9mZnNldChsb25nIG9mZnNldCk7CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFNlbGVjdGlvbihsb25nIHNlbGVj
dGlvbkluZGV4LCBsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCk7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9uQ2hhcmFjdGVycyhsb25nKiBjaGFyYWN0
ZXJzKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2Nyb2xsU3Vic3Ry
aW5nVG8obG9uZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4LCBlbnVtIElBMlNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNjcm9s
bFN1YnN0cmluZ1RvUG9pbnQobG9uZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4LCBlbnVtIElB
MkNvb3JkaW5hdGVUeXBlIGNvb3JkaW5hdGVUeXBlLCBsb25nIHgsIGxvbmcgeSk7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9uZXdUZXh0KElBMlRleHRTZWdtZW50
KiBuZXdUZXh0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X29s
ZFRleHQoSUEyVGV4dFNlZ21lbnQqIG9sZFRleHQpOworICAgIAorICAgIC8vIElBY2Nlc3NpYmxl
VGV4dDIKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2F0dHJpYnV0
ZVJhbmdlKGxvbmcgb2Zmc2V0LCBCU1RSIGZpbHRlciwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcq
IGVuZE9mZnNldCwgQlNUUiogYXR0cmlidXRlVmFsdWVzKTsKKworICAgIC8vIElBY2Nlc3NpYmxl
RWRpdGFibGVUZXh0CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNvcHlU
ZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZGVsZXRlVGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVu
ZE9mZnNldCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGluc2VydFRl
eHQobG9uZyBvZmZzZXQsIEJTVFIqIHRleHQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBjdXRUZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KTsKKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcGFzdGVUZXh0KGxvbmcgb2Zmc2V0
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVwbGFjZVRleHQobG9u
ZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQsIEJTVFIqIHRleHQpOworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRBdHRyaWJ1dGVzKGxvbmcgc3RhcnRPZmZzZXQs
IGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiBhdHRyaWJ1dGVzKTsKKworICAgIC8vIElVbmtub3duCisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJ
RCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENB
TExUWVBFIEFkZFJlZih2b2lkKSB7IHJldHVybiArK21fcmVmQ291bnQ7IH0KKyAgICB2aXJ0dWFs
IFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7CisKKyAgICAvLyBJQWNjZXNz
aWJsZUJhc2UKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X2F0dHJp
YnV0ZXMoQlNUUiogYXR0cmlidXRlcyk7CisKK3ByaXZhdGU6CisgICAgaW50IGNvbnZlcnRTcGVj
aWFsT2Zmc2V0KGludCBzcGVjaWFsT2Zmc2V0KTsKKyAgICBIUkVTVUxUIGluaXRpYWxDaGVjaygp
OworfTsKKworI2VuZGlmIC8vIEFjY2Vzc2libGVUZXh0X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE1NDUyNSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTA4LTIzICBSb2dlciBGb25nICA8cm9nZXJf
Zm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTk4Mjk+IEFkZCBJQWNjZXNzaWJsZVRleHQgYW5kIElBY2Nlc3NpYmxlRWRp
dGFibGVUZXh0IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogQWNjZXNzaWJsZUJhc2UuY3BwOgorICAgICAgICAoQWNjZXNz
aWJsZUJhc2U6OmNyZWF0ZUluc3RhbmNlKTogQ3JlYXRlIGFuIEFjY2Vzc2libGVUZXh0IGluc3Rh
bmNlIHdoZW4gbmVjZXNzYXJ5LgorICAgICAgICAqIEFjY2Vzc2libGVCYXNlLmg6CisgICAgICAg
ICogQWNjZXNzaWJsZVRleHRJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChBY2Nlc3NpYmxlVGV4
dDo6QWNjZXNzaWJsZVRleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmFkZFNlbGVjdGlv
bik6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0X2F0dHJpYnV0ZXMpOiBOb3QgSW1wbGVt
ZW50ZWQKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfY2FyZXRPZmZzZXQpOgorICAgICAg
ICAoQWNjZXNzaWJsZVRleHQ6OmdldF9jaGFyYWN0ZXJFeHRlbnRzKToKKyAgICAgICAgKEFjY2Vz
c2libGVUZXh0OjpnZXRfblNlbGVjdGlvbnMpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6Omdl
dF9vZmZzZXRBdFBvaW50KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfc2VsZWN0aW9u
KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfdGV4dCk6CisgICAgICAgIChBY2Nlc3Np
YmxlVGV4dDo6Z2V0X3RleHRCZWZvcmVPZmZzZXQpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAg
KEFjY2Vzc2libGVUZXh0OjpnZXRfdGV4dEFmdGVyT2Zmc2V0KTogTm90IEltcGxlbWVudGVkCisg
ICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0X3RleHRBdE9mZnNldCk6IE5vdCBJbXBsZW1lbnRl
ZAorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnJlbW92ZVNlbGVjdGlvbik6CisgICAgICAgIChB
Y2Nlc3NpYmxlVGV4dDo6c2V0Q2FyZXRPZmZzZXQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6
OnNldFNlbGVjdGlvbik6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0X25DaGFyYWN0ZXJz
KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpzY3JvbGxTdWJzdHJpbmdUbyk6CisgICAgICAg
IChBY2Nlc3NpYmxlVGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG9Qb2ludCk6CisgICAgICAgIChBY2Nl
c3NpYmxlVGV4dDo6Z2V0X25ld1RleHQpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAgKEFjY2Vz
c2libGVUZXh0OjpnZXRfb2xkVGV4dCk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAoQWNjZXNz
aWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVSYW5nZSk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAo
QWNjZXNzaWJsZVRleHQ6OmNvcHlUZXh0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpkZWxl
dGVUZXh0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjppbnNlcnRUZXh0KToKKyAgICAgICAg
KEFjY2Vzc2libGVUZXh0OjpjdXRUZXh0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpwYXN0
ZVRleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnJlcGxhY2VUZXh0KToKKyAgICAgICAg
KEFjY2Vzc2libGVUZXh0OjpzZXRBdHRyaWJ1dGVzKTogTm90IEltcGxlbWVudGVkCisgICAgICAg
IChBY2Nlc3NpYmxlVGV4dDo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAoQWNjZXNzaWJsZVRl
eHQ6OlJlbGVhc2UpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmNvbnZlcnRTcGVjaWFsT2Zm
c2V0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0Ojppbml0aWFsQ2hlY2spOgorICAgICAgICAq
IEFjY2Vzc2libGVUZXh0SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKEFjY2Vzc2libGVUZXh0Ojp+
QWNjZXNzaWJsZVRleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OkFkZFJlZik6CisKIDIw
MTMtMDgtMjMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
W1dpbmRvd3NdIFJlZmFjdG9yIFdlYkZyYW1lIHRvIGNvbXBvc2Ugd2l0aCBXZWJGcmFtZUxvYWRl
ckNsaWVudAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209523</attachid>
            <date>2013-08-23 16:03:55 -0700</date>
            <delta_ts>2013-08-23 16:10:27 -0700</delta_ts>
            <desc>Combined patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>34821</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ1MjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA4LTIxICBSb2dlciBGb25n
ICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk4Mjk+IElBY2Nlc3NpYmxlVGV4dCBhbmQgSUFjY2Vzc2li
bGVFZGl0YWJsZVRleHQgaW1wbGVtZW50YXRpb24gZm9yIEFwcGxlV2luZG93cyBwb3J0LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBX
ZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVyczoKKwogMjAxMy0wOC0y
MyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmUtc2VwYXJhdGluZyBXaW4zMiBhbmQgV2luNjQgYnVpbGRzLgpJbmRleDogU291cmNlL1dlYktp
dC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0ludGVyZmFjZXMvSW50ZXJmYWNlcy52
Y3hwcm9qCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L0ludGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsOCAr
MzI2LDExIEBACiAgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNz
aWJsZTJcQWNjZXNzaWJsZTIuaWRsIiAvPg0KICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5c
SW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlMl8yLmlkbCIgLz4NCiAgICAgPE1pZGwg
SW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uLmlkbCIgLz4NCisgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNc
QWNjZXNzaWJsZTJcQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwiIC8+DQogICAgIDxNaWRsIElu
Y2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2libGVSZWxhdGlv
bi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vz
c2libGUyXEFjY2Vzc2libGVTdGF0ZXMuaWRsIiAvPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dC5pZGwiIC8+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVUZXh0Mi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVDb21wYXJhYmxlLmlkbCI+DQogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvai5maWx0
ZXJzCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw2ICsyNzcsMTUgQEAKICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5cSW50ZXJmYWNlc1xB
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUuaWRsIj4NCiAgICAgICA8RmlsdGVyPklETDwvRmlsdGVyPg0K
ICAgICA8L01pZGw+DQorICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFj
Y2Vzc2libGUyXEFjY2Vzc2libGVUZXh0LmlkbCI+DQorICAgICAgPEZpbHRlcj5JRExcQWNjZXNz
aWJpbGl0eTI8L0ZpbHRlcj4NCisgICAgPC9NaWRsPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dDIuaWRsIj4NCisgICAg
ICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5MjwvRmlsdGVyPg0KKyAgICA8L01pZGw+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHQuaWRsIj4NCisgICAgICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5Mjwv
RmlsdGVyPg0KKyAgICA8L01pZGw+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQog
ICAgIDxOb25lIEluY2x1ZGU9IkludGVyZmFjZXNQb3N0QnVpbGQuY21kIiAvPg0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9q
CShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUJhc2UuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlSW1hZ2UuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlVGV4dElt
cGwuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rpb25h
cnlQcm9wZXJ0eUJhZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2lu
XERlZmF1bHREb3dubG9hZERlbGVnYXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlx3aW5cRGVmYXVsdFBvbGljeURlbGVnYXRlLmNwcCIgLz4NCkBAIC00MTYsNiArNDE3
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1l
bnQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUlt
YWdlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVU
ZXh0SW1wbC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rp
b25hcnlQcm9wZXJ0eUJhZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxDb2RlQW5hbHlzaXNDb25maWcuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu
Llx3aW5cQ09NRW51bVZhcmlhbnQuaCIgLz4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMJKHJl
dmlzaW9uIDE1NDQ5NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dl
YktpdC52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsyNzUsOSBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cY2ZcV2ViQ29yZVN1cHBvcnRcV2ViSW5zcGVj
dG9yQ2xpZW50Q0YuY3BwIj4NCiAgICAgICA8RmlsdGVyPldlYkNvcmVTdXBwb3J0PC9GaWx0ZXI+
DQogICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxB
Y2Nlc3NpYmxlVGV4dEltcGwuY3BwIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0XEVtYmVkZGVkV2lk
Z2V0LmgiPg0KQEAgLTUzNiw2ICs1MzksOSBAQAogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cd2luXFdlYktpdFByZWZpeC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XHdpblxBY2Nlc3NpYmxlVGV4dEltcGwuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3Jv
dXA+DQogICAgIDxOb25lIEluY2x1ZGU9IldlYktpdFBvc3RCdWlsZC5jbWQiIC8+DQpAQCAtNjI4
LDQgKzYzNCw0IEBACiAgICAgICA8RmlsdGVyPlJlc291cmNlczwvRmlsdGVyPg0KICAgICA8L1Jl
c291cmNlQ29tcGlsZT4NCiAgIDwvSXRlbUdyb3VwPg0KLTwvUHJvamVjdD4NCis8L1Byb2plY3Q+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRHVUlEL1dlYktpdEdVSUQudmN4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdVSUQvV2ViS2l0R1VJRC52Y3hwcm9qCShy
ZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdV
SUQvV2ViS2l0R1VJRC52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDkgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJLaXRcSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMl8yX2kuYyIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2Jq
JChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uX2kuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNj
ZXNzaWJsZVJlbGF0aW9uX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRfaS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u
XC4uXFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqMzJcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZVRleHQyX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxXZWJL
aXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2libGVUZXh0X2ku
YyIgLz4NCiAgIDwvSXRlbUdyb3VwPg0KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh
dGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+DQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVy
cwkocmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw1
ICsxMCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZTJfMl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vz
c2libGVBcHBsaWNhdGlvbl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRl
cmZhY2VzXEFjY2Vzc2libGVSZWxhdGlvbl9pLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cLi5cLi5cV2ViS2l0QnVpbGRcUmVsZWFzZVxvYmozMlxXZWJLaXRcSW50ZXJmYWNl
c1xBY2Nlc3NpYmxlRWRpdGFibGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlwuLlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVUZXh0Ml9pLmMiIC8+DQogICA8L0l0ZW1Hcm91cD4NCiA8L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAko
cmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJsZUJh
c2UuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2libGVJbWFnZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
bGVUZXh0SW1wbC5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fj
Y2Vzc2liaWxpdHlMaXN0Qm94Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RQb3B1cC5oPgpAQCAtNzgsNiArNzksOCBAQAogCiAgICAgaWYgKG9iai0+aXNJbWFnZSgp
KQogICAgICAgICByZXR1cm4gbmV3IEFjY2Vzc2libGVJbWFnZShvYmosIHdpbmRvdyk7CisgICAg
ZWxzZSBpZiAob2JqLT5pc1N0YXRpY1RleHQoKSB8fCBvYmotPmlzVGV4dENvbnRyb2woKSB8fCAo
b2JqLT5ub2RlKCkgJiYgb2JqLT5ub2RlKCktPmlzVGV4dE5vZGUoKSkpCisgICAgICAgIHJldHVy
biBuZXcgQWNjZXNzaWJsZVRleHQob2JqLCB3aW5kb3cpOwogCiAgICAgcmV0dXJuIG5ldyBBY2Nl
c3NpYmxlQmFzZShvYmosIHdpbmRvdyk7CiB9CkBAIC04OCw3ICs5MSwxMCBAQAogICAgICAgICAm
JiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZTJfMikKICAgICAgICAg
JiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUyKQogICAgICAgICAm
JiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZUFwcGxpY2F0aW9uKQot
ICAgICAgICAmJiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZSkpIHsK
KyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUpCisg
ICAgICAgICYmICFJc0VxdWFsR1VJRChndWlkU2VydmljZSwgSUlEX0lBY2Nlc3NpYmxlVGV4dCkK
KyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVUZXh0
MikKKyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVF
ZGl0YWJsZVRleHQpKSB7CiAgICAgICAgICpwcHZPYmplY3QgPSAwOwogICAgICAgICByZXR1cm4g
RV9JTlZBTElEQVJHOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAko
cmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBBY2Nlc3NpYmxlQmFzZV9o
CiAjZGVmaW5lIEFjY2Vzc2libGVCYXNlX2gKIAorI2luY2x1ZGUgIkFjY2Vzc2libGVFZGl0YWJs
ZVRleHQuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlVGV4dC5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
bGVUZXh0Mi5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNz
aWJpbGl0eU9iamVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJXaW4uaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTIExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFjY2Vzc2libGVUZXh0SW1wbC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RExMLmgiCisjaW5jbHVk
ZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRWRpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL2h0bWxlZGl0aW5n
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTm9kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUG9zaXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRleHRDb250
cm9sLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlU2VsZWN0aW9uLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitBY2Nlc3NpYmxlVGV4dDo6QWNjZXNzaWJsZVRleHQoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqLCBIV05EIHdpbmRvdykKKyAgICA6IEFjY2Vzc2li
bGVCYXNlKG9iaiwgd2luZG93KQoreworICAgIEFTU0VSVF9BUkcob2JqLCBvYmotPmlzU3RhdGlj
VGV4dCgpIHx8IG9iai0+aXNUZXh0Q29udHJvbCgpIHx8IChvYmotPm5vZGUoKSAmJiBvYmotPm5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKSk7CisgICAgQVNTRVJUX0FSRyhvYmosIG9iai0+aXNBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KCkpOworfQorCisvLyBJQWNjZXNzaWJsZVRleHQKK0hSRVNVTFQg
QWNjZXNzaWJsZVRleHQ6OmFkZFNlbGVjdGlvbihsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9m
ZnNldCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNl
dChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5k
T2Zmc2V0KTsKKworICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRS
YW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0LXN0YXJ0T2Zmc2V0KSk7CisgICAgCisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVzKGxv
bmcgb2Zmc2V0LCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0
QXR0cmlidXRlcykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZz
ZXQob2Zmc2V0KTsKKworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OmdldF9jYXJldE9mZnNldChsb25nKiBvZmZzZXQpCit7CisgICAgaWYgKGluaXRp
YWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkuY2VudGVyKCkpOworCisgICAgaW50IGNhcmV0
T2Zmc2V0ID0gY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpOworICAgIGlmIChjYXJldE9mZnNldCA8IDApCisgICAgICAgIHJldHVybiBFX0ZBSUw7
CisgICAgKm9mZnNldCA9IGNhcmV0T2Zmc2V0OworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfY2hhcmFjdGVyRXh0ZW50cyhsb25nIG9mZnNldCwgZW51
bSBJQTJDb29yZGluYXRlVHlwZSBjb29yZFR5cGUsIGxvbmcqIHgsIGxvbmcqIHksIGxvbmcqIHdp
ZHRoLCBsb25nKiBoZWlnaHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRF
UikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIG9mZnNldCA9IGNvbnZlcnRTcGVj
aWFsT2Zmc2V0KG9mZnNldCk7CisKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBJbnRSZWN0
IGJvdW5kaW5nUmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShW
aXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSksIFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihub2RlLCBvZmZzZXQrMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cikpKSk7CisgICAgKndpZHRoID0gYm91bmRpbmdSZWN0LndpZHRoKCk7CisgICAgKmhlaWdodCA9
IGJvdW5kaW5nUmVjdC5oZWlnaHQoKTsKKyAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgIGNh
c2UgSUEyX0NPT1JEVFlQRV9TQ1JFRU5fUkVMQVRJVkU6CisgICAgICAgIFBPSU5UIHBvaW50c1sx
XTsKKyAgICAgICAgcG9pbnRzWzBdLnggPSBib3VuZGluZ1JlY3QueCgpOworICAgICAgICBwb2lu
dHNbMF0ueSA9IGJvdW5kaW5nUmVjdC55KCk7CisgICAgICAgIE1hcFdpbmRvd1BvaW50cyhtX3dp
bmRvdywgMCwgcG9pbnRzLCAxKTsKKyAgICAgICAgKnggPSBwb2ludHNbMF0ueDsKKyAgICAgICAg
KnkgPSBwb2ludHNbMF0ueTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBF
X1BBUkVOVF9SRUxBVElWRToKKyAgICAgICAgKnggPSBib3VuZGluZ1JlY3QueCgpOworICAgICAg
ICAqeSA9IGJvdW5kaW5nUmVjdC55KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9uU2VsZWN0aW9ucyhsb25nKiBuU2VsZWN0
aW9ucykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVu
dCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICAgICAgKm5TZWxlY3Rpb25z
ID0gMDsKKyAgICBlbHNlCisgICAgICAgICpuU2VsZWN0aW9ucyA9IDE7CisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9vZmZzZXRBdFBvaW50KGxvbmcg
eCwgbG9uZyB5LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNvb3JkVHlwZSwgbG9uZyogb2Zmc2V0
KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBWaXNpYmxlUG9zaXRp
b24gdnBvczsKKyAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgIGNhc2UgSUEyX0NPT1JEVFlQ
RV9TQ1JFRU5fUkVMQVRJVkU6CisgICAgICAgIFBPSU5UIHBvaW50c1sxXTsKKyAgICAgICAgcG9p
bnRzWzBdLnggPSB4OworICAgICAgICBwb2ludHNbMF0ueSA9IHk7CisgICAgICAgIE1hcFdpbmRv
d1BvaW50cygwLCBtX3dpbmRvdywgcG9pbnRzLCAxKTsKKyAgICAgICAgdnBvcyA9IG1fb2JqZWN0
LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludHNbMF0ueCwgcG9pbnRzWzBd
LnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBFX1BBUkVOVF9SRUxB
VElWRToKKyAgICAgICAgdnBvcyA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJ
bnRQb2ludCh4LCB5KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBFX0lOVkFMSURBUkc7CisgICAgfQorCisgICAgaW50IGNhcmV0UG9zaXRpb24gPSB2cG9z
LmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgaWYgKGNhcmV0
UG9zaXRpb24gPCAwIHx8IGNhcmV0UG9zaXRpb24gPiBtX29iamVjdC0+c3RyaW5nVmFsdWUoKS5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7IAorICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfc2VsZWN0aW9uKGxvbmcgc2VsZWN0aW9uSW5k
ZXgsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQpCit7CisgICAgaWYgKGluaXRp
YWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IGxvbmcgc2VsZWN0aW9uczsKKyAgICBnZXRfblNlbGVjdGlvbnMoJnNlbGVjdGlvbnMpOworICAg
IGlmIChzZWxlY3Rpb25JbmRleCA8IDAgfHwgc2VsZWN0aW9uSW5kZXggPj0gc2VsZWN0aW9ucykK
KyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAgIFBsYWluVGV4dFJhbmdlIHNlbGVj
dGlvblJhbmdlID0gbV9vYmplY3QtPnNlbGVjdGVkVGV4dFJhbmdlKCk7CisKKyAgICAqc3RhcnRP
ZmZzZXQgPSBzZWxlY3Rpb25SYW5nZS5zdGFydDsKKyAgICAqZW5kT2Zmc2V0ID0gc2VsZWN0aW9u
UmFuZ2UubGVuZ3RoOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVU
ZXh0OjpnZXRfdGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiogdGV4
dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChz
dGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5kT2Zm
c2V0KTsKKyAgICBXVEY6OlN0cmluZyBzdWJzdHJpbmdUZXh0ID0gbV9vYmplY3QtPnN0cmluZ1Zh
bHVlKCkuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisK
KyAgICAqdGV4dCA9IFN5c0FsbG9jU3RyaW5nTGVuKHN1YnN0cmluZ1RleHQuY2hhcmFjdGVycygp
LCBzdWJzdHJpbmdUZXh0Lmxlbmd0aCgpKTsKKyAgICBpZiAoc3Vic3RyaW5nVGV4dC5sZW5ndGgo
KSAmJiAhKnRleHQpCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF90ZXh0QmVmb3JlT2Zmc2V0
KGxvbmcgb2Zmc2V0LCBlbnVtIElBMlRleHRCb3VuZGFyeVR5cGUgYm91bmRhcnlUeXBlLCBsb25n
KiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KQoreworICAgIGlmIChp
bml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7Cisg
ICAgCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6
Z2V0X3RleHRBZnRlck9mZnNldChsb25nIG9mZnNldCwgZW51bSBJQTJUZXh0Qm91bmRhcnlUeXBl
IGJvdW5kYXJ5VHlwZSwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcqIGVuZE9mZnNldCwgQlNUUiog
dGV4dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworICAgIAorICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNV
TFQgQWNjZXNzaWJsZVRleHQ6OmdldF90ZXh0QXRPZmZzZXQobG9uZyBvZmZzZXQsIGVudW0gSUEy
VGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBl
bmRPZmZzZXQsIEJTVFIqIHRleHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9J
TlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpyZW1vdmVTZWxlY3Rpb24obG9uZyBz
ZWxlY3Rpb25JbmRleCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQor
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgbG9uZyBzZWxlY3Rpb25zOworICAgIGdl
dF9uU2VsZWN0aW9ucygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8
fCBzZWxlY3Rpb25JbmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworCisgICAgbV9vYmplY3QtPnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmZyYW1lKCktPnNl
bGVjdGlvbigpLmNsZWFyKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OnNldENhcmV0T2Zmc2V0KGxvbmcgb2Zmc2V0KQoreworICAgIGlmIChpbml0aWFs
Q2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAg
IAorICAgIG9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KG9mZnNldCk7CisKKyAgICBOb2Rl
KiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBtX29iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKG5vZGUsIG9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpKSk7
CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNldFNlbGVj
dGlvbihsb25nIHNlbGVjdGlvbkluZGV4LCBsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNl
dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgbG9uZyBzZWxlY3Rpb25zOworICAgIGdldF9uU2VsZWN0aW9u
cygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8fCBzZWxlY3Rpb25J
bmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAg
bV9vYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCkpOworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfbkNoYXJhY3RlcnMobG9uZyogY2hhcmFjdGVycykKK3sK
KyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworCisJaW50IGxlbmd0aCA9IG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpLmxlbmd0aCgp
OworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgKmNo
YXJhY3RlcnMgPSBsZW5ndGg7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvKGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRl
eCwgZW51bSBJQTJTY3JvbGxUeXBlIHNjcm9sbFR5cGUpCit7CisgICAgaWYgKGluaXRpYWxDaGVj
aygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIHN0YXJ0
SW5kZXggPSBjb252ZXJ0U3BlY2lhbE9mZnNldChzdGFydEluZGV4KTsKKyAgICBlbmRJbmRleCA9
IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KGVuZEluZGV4KTsKKworICAgIFZpc2libGVQb3NpdGlvblJh
bmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBs
YWluVGV4dFJhbmdlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LXN0YXJ0SW5kZXgpKTsKKyAgICBJbnRS
ZWN0IGJvdW5kaW5nQm94ID0gbWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdlLmVu
ZCktPmJvdW5kaW5nQm94KCk7CisgICAgc3dpdGNoIChzY3JvbGxUeXBlKSB7CisgICAgY2FzZSBJ
QTJfU0NST0xMX1RZUEVfVE9QX0xFRlQ6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0dsb2Jh
bFBvaW50KGJvdW5kaW5nQm94Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIElBMl9TQ1JPTExfVFlQRV9CT1RUT01fUklHSFQ6CisgICAgICAgIG1fb2JqZWN0LT5z
Y3JvbGxUb0dsb2JhbFBvaW50KGJvdW5kaW5nQm94Lm1heFhNYXhZQ29ybmVyKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIElBMl9TQ1JPTExfVFlQRV9UT1BfRURHRToKKyAgICAgICAgbV9v
YmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoKGJvdW5kaW5nQm94LngoKSArIGJv
dW5kaW5nQm94Lm1heFgoKSkgLyAyLCBib3VuZGluZ0JveC55KCkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfQk9UVE9NX0VER0U6CisgICAgICAgIG1fb2JqZWN0
LT5zY3JvbGxUb0dsb2JhbFBvaW50KEludFBvaW50KChib3VuZGluZ0JveC54KCkgKyBib3VuZGlu
Z0JveC5tYXhYKCkpIC8gMiwgYm91bmRpbmdCb3gubWF4WSgpKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSUEyX1NDUk9MTF9UWVBFX0xFRlRfRURHRToKKyAgICAgICAgbV9vYmplY3QtPnNj
cm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoYm91bmRpbmdCb3gueCgpLCAoYm91bmRpbmdCb3gu
eSgpICsgYm91bmRpbmdCb3gubWF4WSgpKSAvIDIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJQTJfU0NST0xMX1RZUEVfUklHSFRfRURHRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRv
R2xvYmFsUG9pbnQoSW50UG9pbnQoYm91bmRpbmdCb3gubWF4WCgpLCAoYm91bmRpbmdCb3gueSgp
ICsgYm91bmRpbmdCb3gubWF4WSgpKSAvIDIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
QTJfU0NST0xMX1RZUEVfQU5ZV0hFUkU6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0dsb2Jh
bFBvaW50KGJvdW5kaW5nQm94LmNlbnRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvUG9pbnQobG9u
ZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNvb3Jk
aW5hdGVUeXBlLCBsb25nIHgsIGxvbmcgeSkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0g
RV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRJbmRleCA9
IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0SW5kZXgpOworICAgIGVuZEluZGV4ID0gY29udmVy
dFNwZWNpYWxPZmZzZXQoZW5kSW5kZXgpOworCisgICAgc3dpdGNoIChjb29yZGluYXRlVHlwZSkg
eworICAgIGNhc2UgSUEyX0NPT1JEVFlQRV9TQ1JFRU5fUkVMQVRJVkU6CisgICAgICAgIFBPSU5U
IHBvaW50c1sxXTsKKyAgICAgICAgcG9pbnRzWzBdLnggPSB4OworICAgICAgICBwb2ludHNbMF0u
eSA9IHk7CisgICAgICAgIE1hcFdpbmRvd1BvaW50cygwLCBtX3dpbmRvdywgcG9pbnRzLCAxKTsK
KyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQocG9pbnRzWzBd
LngsIHBvaW50c1swXS55KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUEyX0NPT1JEVFlQ
RV9QQVJFTlRfUkVMQVRJVkU6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50
KEludFBvaW50KHgsIHkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X25ld1RleHQoSUEyVGV4dFNlZ21lbnQqIG5ld1RleHQp
Cit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKyAgICAKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFj
Y2Vzc2libGVUZXh0OjpnZXRfb2xkVGV4dChJQTJUZXh0U2VnbWVudCogb2xkVGV4dCkKK3sKKyAg
ICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworCisvLyBJQWNjZXNzaWJsZVRleHQy
CitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfYXR0cmlidXRlUmFuZ2UobG9uZyBvZmZzZXQs
IEJTVFIgZmlsdGVyLCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiBh
dHRyaWJ1dGVWYWx1ZXMpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisK
K0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmNvcHlUZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcg
ZW5kT2Zmc2V0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFydE9mZnNldCA9IGNvbnZlcnRTcGVjaWFs
T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNl
dChlbmRPZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3QtPmRvY3VtZW50KCkt
PmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKwor
ICAgIGFkZFNlbGVjdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGZyYW1lLT5l
ZGl0b3IoKS5jb3B5KCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJs
ZVRleHQ6OmRlbGV0ZVRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQpCit7Cisg
ICAgaWYgKG1fb2JqZWN0LT5pc1JlYWRPbmx5KCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNFOwor
CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBh
ZGRTZWxlY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBmcmFtZS0+ZWRpdG9y
KCkuZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6aW5zZXJ0VGV4dChsb25nIG9mZnNldCwg
QlNUUiogdGV4dCkKK3sKKyAgICBpZiAobV9vYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAgICAg
cmV0dXJuIFNfRkFMU0U7CisKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQor
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNpYWxP
ZmZzZXQob2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0LT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7Cisg
ICAgCisgICAgYWRkU2VsZWN0aW9uKG9mZnNldCwgb2Zmc2V0KTsKKworICAgIGZyYW1lLT5lZGl0
b3IoKS5pbnNlcnRUZXh0KCp0ZXh0LCAwKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBBY2Nlc3NpYmxlVGV4dDo6Y3V0VGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNl
dCkKK3sKKyAgICBpZiAobV9vYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuIFNf
RkFMU0U7CisKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNl
dChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5k
T2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBh
ZGRTZWxlY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBmcmFtZS0+ZWRpdG9y
KCkuY3V0KCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6
OnBhc3RlVGV4dChsb25nIG9mZnNldCkKK3sKKyAgICBpZiAobV9vYmplY3QtPmlzUmVhZE9ubHko
KSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0g
RV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0gY29u
dmVydFNwZWNpYWxPZmZzZXQob2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0
LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisKKyAgICBhZGRTZWxlY3Rpb24ob2Zmc2V0LCBvZmZzZXQpOworCisgICAgZnJh
bWUtPmVkaXRvcigpLnBhc3RlKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNj
ZXNzaWJsZVRleHQ6OnJlcGxhY2VUZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0
LCBCU1RSKiB0ZXh0KQoreworICAgIGlmIChtX29iamVjdC0+aXNSZWFkT25seSgpKQorICAgICAg
ICByZXR1cm4gU19GQUxTRTsKKworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIp
CisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFydE9mZnNldCA9IGNvbnZlcnRT
cGVjaWFsT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZzZXQgPSBjb252ZXJ0U3BlY2lh
bE9mZnNldChlbmRPZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3QtPmRvY3Vt
ZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKKworICAgIGFkZFNlbGVjdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGZy
YW1lLT5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoKnRleHQsIHRydWUsIGZhbHNl
KTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6c2V0QXR0
cmlidXRlcyhsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiogYXR0cmlidXRl
cykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworLy8gSUFjY2Vzc2li
bGUyCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfYXR0cmlidXRlcyhCU1RSKiBhdHRyaWJ1
dGVzKQoreworICAgIFdURjo6U3RyaW5nIHRleHQoInRleHQtbW9kZWw6YTEiKTsKKyAgICAqYXR0
cmlidXRlcyA9IFN5c0FsbG9jU3RyaW5nTGVuKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8gSVVua25vd24KK0hSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgQWNjZXNzaWJsZVRleHQ6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJ
QWNjZXNzaWJsZVRleHQpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElBY2Nl
c3NpYmxlVGV4dCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVp
ZG9mKElBY2Nlc3NpYmxlRWRpdGFibGVUZXh0KSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0
aWNfY2FzdDxJQWNjZXNzaWJsZUVkaXRhYmxlVGV4dCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElz
RXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElBY2Nlc3NpYmxlKSkpCisgICAgICAgICpwcHZPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJsZSo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1
YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElEaXNwYXRjaCkpKQorICAgICAgICAqcHB2T2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SUFjY2Vzc2libGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBfX3V1aWRvZihJVW5rbm93bikpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SUFjY2Vzc2libGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlk
LCBfX3V1aWRvZihJQWNjZXNzaWJsZTJfMikpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SUFjY2Vzc2libGUyXzIqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChy
aWlkLCBfX3V1aWRvZihJQWNjZXNzaWJsZTIpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRp
Y19jYXN0PElBY2Nlc3NpYmxlMio+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJp
aWQsIF9fdXVpZG9mKElBY2Nlc3NpYmxlQ29tcGFyYWJsZSkpKQorICAgICAgICAqcHB2T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGVDb21wYXJhYmxlKj4odGhpcyk7CisgICAgZWxzZSBp
ZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSVNlcnZpY2VQcm92aWRlcikpKQorICAgICAg
ICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVNlcnZpY2VQcm92aWRlcio+KHRoaXMpOworICAg
IGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKEFjY2Vzc2libGVCYXNlKSkpCisg
ICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmxlQmFzZSo+KHRoaXMpOwor
ICAgIGVsc2UgeworICAgICAgICAqcHB2T2JqZWN0ID0gMDsKKyAgICAgICAgcmV0dXJuIEVfTk9J
TlRFUkZBQ0U7CisgICAgfQorICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitV
TE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBY2Nlc3NpYmxlVGV4dDo6UmVsZWFzZSh2b2lkKQorewor
ICAgIEFTU0VSVChtX3JlZkNvdW50ID4gMCk7CisgICAgaWYgKC0tbV9yZWZDb3VudCkKKyAgICAg
ICAgcmV0dXJuIG1fcmVmQ291bnQ7CisgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIDA7Cit9
CisKK2ludCBBY2Nlc3NpYmxlVGV4dDo6Y29udmVydFNwZWNpYWxPZmZzZXQoaW50IG9mZnNldCkK
K3sKKyAgICBBU1NFUlQobV9vYmplY3QpOworICAgIEFTU0VSVChtX29iamVjdC0+cmVuZGVyZXIo
KS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgCisgICAgaWYgKG9mZnNldCA9PSBJQTJfVEVY
VF9PRkZTRVRfTEVOR1RIKSAKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgp
Lmxlbmd0aCgpOworICAgIGlmIChvZmZzZXQgPT0gSUEyX1RFWFRfT0ZGU0VUX0NBUkVUKSB7Cisg
ICAgICAgIGxvbmcgY2FyZXRPZmZzZXQ7CisgICAgICAgIGdldF9jYXJldE9mZnNldCgmY2FyZXRP
ZmZzZXQpOworICAgICAgICByZXR1cm4gY2FyZXRPZmZzZXQ7CisgICAgfQorICAgIHJldHVybiBv
ZmZzZXQ7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmluaXRpYWxDaGVjaygpCit7Cisg
ICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgIGlmICgh
ZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gRV9GQUlM
OworCisgICAgcmV0dXJuIFNfT0s7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3Np
YmxlVGV4dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3NpYmxl
VGV4dEltcGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVU
ZXh0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmxlVGV4dElt
cGxfaAorI2RlZmluZSBBY2Nlc3NpYmxlVGV4dEltcGxfaAorCisjaW5jbHVkZSAiQWNjZXNzaWJs
ZUJhc2UuaCIKKworY2xhc3MgQWNjZXNzaWJsZVRleHQgOiBwdWJsaWMgQWNjZXNzaWJsZUJhc2Us
IHB1YmxpYyBJQWNjZXNzaWJsZVRleHQyLCBwdWJsaWMgSUFjY2Vzc2libGVFZGl0YWJsZVRleHQg
eworcHVibGljOgorICAgIEFjY2Vzc2libGVUZXh0KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3QqLCBIV05EKTsKKyAgICB2aXJ0dWFsIH5BY2Nlc3NpYmxlVGV4dCgpIHsgfQorCisgICAgLy8g
SUFjY2Vzc2libGVUZXh0CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGFk
ZFNlbGVjdGlvbihsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCk7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hdHRyaWJ1dGVzKGxvbmcgb2Zmc2V0LCBs
b25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0QXR0cmlidXRlcyk7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9jYXJldE9mZnNldChs
b25nKiBvZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRf
Y2hhcmFjdGVyRXh0ZW50cyhsb25nIG9mZnNldCwgZW51bSBJQTJDb29yZGluYXRlVHlwZSBjb29y
ZFR5cGUsIGxvbmcqIHgsIGxvbmcqIHksIGxvbmcqIHdpZHRoLCBsb25nKiBoZWlnaHQpOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfblNlbGVjdGlvbnMobG9uZyog
blNlbGVjdGlvbnMpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRf
b2Zmc2V0QXRQb2ludChsb25nIHgsIGxvbmcgeSwgZW51bSBJQTJDb29yZGluYXRlVHlwZSBjb29y
ZFR5cGUsIGxvbmcqIG9mZnNldCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIGdldF9zZWxlY3Rpb24obG9uZyBzZWxlY3Rpb25JbmRleCwgbG9uZyogc3RhcnRPZmZzZXQs
IGxvbmcqIGVuZE9mZnNldCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGdldF90ZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KTsK
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X3RleHRCZWZvcmVPZmZz
ZXQobG9uZyBvZmZzZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxv
bmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHQpOworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfdGV4dEFmdGVyT2Zmc2V0KGxvbmcgb2Zm
c2V0LCBlbnVtIElBMlRleHRCb3VuZGFyeVR5cGUgYm91bmRhcnlUeXBlLCBsb25nKiBzdGFydE9m
ZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZ2V0X3RleHRBdE9mZnNldChsb25nIG9mZnNldCwgZW51bSBJQTJU
ZXh0Qm91bmRhcnlUeXBlIGJvdW5kYXJ5VHlwZSwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcqIGVu
ZE9mZnNldCwgQlNUUiogdGV4dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHJlbW92ZVNlbGVjdGlvbihsb25nIHNlbGVjdGlvbkluZGV4KTsKKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0Q2FyZXRPZmZzZXQobG9uZyBvZmZzZXQpOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRTZWxlY3Rpb24obG9uZyBzZWxl
Y3Rpb25JbmRleCwgbG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQpOworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfbkNoYXJhY3RlcnMobG9uZyogY2hhcmFj
dGVycyk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNjcm9sbFN1YnN0
cmluZ1RvKGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRleCwgZW51bSBJQTJTY3JvbGxUeXBl
IHNjcm9sbFR5cGUpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzY3Jv
bGxTdWJzdHJpbmdUb1BvaW50KGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRleCwgZW51bSBJ
QTJDb29yZGluYXRlVHlwZSBjb29yZGluYXRlVHlwZSwgbG9uZyB4LCBsb25nIHkpOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfbmV3VGV4dChJQTJUZXh0U2VnbWVu
dCogbmV3VGV4dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9v
bGRUZXh0KElBMlRleHRTZWdtZW50KiBvbGRUZXh0KTsKKyAgICAKKyAgICAvLyBJQWNjZXNzaWJs
ZVRleHQyCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hdHRyaWJ1
dGVSYW5nZShsb25nIG9mZnNldCwgQlNUUiBmaWx0ZXIsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25n
KiBlbmRPZmZzZXQsIEJTVFIqIGF0dHJpYnV0ZVZhbHVlcyk7CisKKyAgICAvLyBJQWNjZXNzaWJs
ZUVkaXRhYmxlVGV4dAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjb3B5
VGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCk7CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGRlbGV0ZVRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBl
bmRPZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBpbnNlcnRU
ZXh0KGxvbmcgb2Zmc2V0LCBCU1RSKiB0ZXh0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgY3V0VGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCk7Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHBhc3RlVGV4dChsb25nIG9mZnNl
dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJlcGxhY2VUZXh0KGxv
bmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KTsKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0QXR0cmlidXRlcyhsb25nIHN0YXJ0T2Zmc2V0
LCBsb25nIGVuZE9mZnNldCwgQlNUUiogYXR0cmlidXRlcyk7CisKKyAgICAvLyBJVW5rbm93bgor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJ
SUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RD
QUxMVFlQRSBBZGRSZWYodm9pZCkgeyByZXR1cm4gKyttX3JlZkNvdW50OyB9CisgICAgdmlydHVh
bCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZvaWQpOworCisgICAgLy8gSUFjY2Vz
c2libGVCYXNlCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hdHRy
aWJ1dGVzKEJTVFIqIGF0dHJpYnV0ZXMpOworCitwcml2YXRlOgorICAgIGludCBjb252ZXJ0U3Bl
Y2lhbE9mZnNldChpbnQgc3BlY2lhbE9mZnNldCk7CisgICAgSFJFU1VMVCBpbml0aWFsQ2hlY2so
KTsKK307CisKKyNlbmRpZiAvLyBBY2Nlc3NpYmxlVGV4dF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNTQ1MjUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw1MiBAQAorMjAxMy0wOC0yMyAgUm9nZXIgRm9uZyAgPHJvZ2Vy
X2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE5ODI5PiBBZGQgSUFjY2Vzc2libGVUZXh0IGFuZCBJQWNjZXNzaWJsZUVk
aXRhYmxlVGV4dCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZCBJQWNjZXNzaWJsZVRleHQgYW5kIElBY2Nl
c3NpYmxlRWRpdGFibGVUZXh0IGludGVyZmFjZXMgYW5kIGltcGxlbWVudGF0aW9uIHRvIEFwcGxl
V2luIHBvcnQuCisKKyAgICAgICAgKiBBY2Nlc3NpYmxlQmFzZS5jcHA6CisgICAgICAgIChBY2Nl
c3NpYmxlQmFzZTo6Y3JlYXRlSW5zdGFuY2UpOiBDcmVhdGUgYW4gQWNjZXNzaWJsZVRleHQgaW5z
dGFuY2Ugd2hlbiBuZWNlc3NhcnkuCisgICAgICAgIChBY2Nlc3NpYmxlQmFzZTo6UXVlcnlTZXJ2
aWNlKToKKyAgICAgICAgKiBBY2Nlc3NpYmxlQmFzZS5oOgorICAgICAgICAqIEFjY2Vzc2libGVU
ZXh0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OkFjY2Vzc2libGVU
ZXh0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjphZGRTZWxlY3Rpb24pOgorICAgICAgICAo
QWNjZXNzaWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVzKTogTm90IEltcGxlbWVudGVkCisgICAgICAg
IChBY2Nlc3NpYmxlVGV4dDo6Z2V0X2NhcmV0T2Zmc2V0KToKKyAgICAgICAgKEFjY2Vzc2libGVU
ZXh0OjpnZXRfY2hhcmFjdGVyRXh0ZW50cyk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0
X25TZWxlY3Rpb25zKToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfb2Zmc2V0QXRQb2lu
dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0X3NlbGVjdGlvbik6CisgICAgICAgIChB
Y2Nlc3NpYmxlVGV4dDo6Z2V0X3RleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmdldF90
ZXh0QmVmb3JlT2Zmc2V0KTogTm90IEltcGxlbWVudGVkCisgICAgICAgIChBY2Nlc3NpYmxlVGV4
dDo6Z2V0X3RleHRBZnRlck9mZnNldCk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAoQWNjZXNz
aWJsZVRleHQ6OmdldF90ZXh0QXRPZmZzZXQpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAgKEFj
Y2Vzc2libGVUZXh0OjpyZW1vdmVTZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6
OnNldENhcmV0T2Zmc2V0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpzZXRTZWxlY3Rpb24p
OgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmdldF9uQ2hhcmFjdGVycyk6CisgICAgICAgIChB
Y2Nlc3NpYmxlVGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG8pOgorICAgICAgICAoQWNjZXNzaWJsZVRl
eHQ6OnNjcm9sbFN1YnN0cmluZ1RvUG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6Omdl
dF9uZXdUZXh0KTogTm90IEltcGxlbWVudGVkCisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0
X29sZFRleHQpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRf
YXR0cmlidXRlUmFuZ2UpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0
Ojpjb3B5VGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6ZGVsZXRlVGV4dCk6CisgICAg
ICAgIChBY2Nlc3NpYmxlVGV4dDo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4
dDo6Y3V0VGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6cGFzdGVUZXh0KToKKyAgICAg
ICAgKEFjY2Vzc2libGVUZXh0OjpyZXBsYWNlVGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4
dDo6c2V0QXR0cmlidXRlcyk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAoQWNjZXNzaWJsZVRl
eHQ6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpSZWxlYXNlKToK
KyAgICAgICAgKEFjY2Vzc2libGVUZXh0Ojpjb252ZXJ0U3BlY2lhbE9mZnNldCk6CisgICAgICAg
IChBY2Nlc3NpYmxlVGV4dDo6aW5pdGlhbENoZWNrKToKKyAgICAgICAgKiBBY2Nlc3NpYmxlVGV4
dEltcGwuaDogQWRkZWQuCisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6fkFjY2Vzc2libGVUZXh0
KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpBZGRSZWYpOgorCiAyMDEzLTA4LTIzICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5kb3dzXSBSZWZh
Y3RvciBXZWJGcmFtZSB0byBjb21wb3NlIHdpdGggV2ViRnJhbWVMb2FkZXJDbGllbnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209524</attachid>
            <date>2013-08-23 16:06:25 -0700</date>
            <delta_ts>2013-08-23 16:37:24 -0700</delta_ts>
            <desc>Combined patch with style fixes</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>34824</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ1MjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA4LTIxICBSb2dlciBGb25n
ICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk4Mjk+IElBY2Nlc3NpYmxlVGV4dCBhbmQgSUFjY2Vzc2li
bGVFZGl0YWJsZVRleHQgaW1wbGVtZW50YXRpb24gZm9yIEFwcGxlV2luZG93cyBwb3J0LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBX
ZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVyczoKKwogMjAxMy0wOC0y
MyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmUtc2VwYXJhdGluZyBXaW4zMiBhbmQgV2luNjQgYnVpbGRzLgpJbmRleDogU291cmNlL1dlYktp
dC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0ludGVyZmFjZXMvSW50ZXJmYWNlcy52
Y3hwcm9qCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L0ludGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsOCAr
MzI2LDExIEBACiAgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNz
aWJsZTJcQWNjZXNzaWJsZTIuaWRsIiAvPg0KICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5c
SW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlMl8yLmlkbCIgLz4NCiAgICAgPE1pZGwg
SW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uLmlkbCIgLz4NCisgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNc
QWNjZXNzaWJsZTJcQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwiIC8+DQogICAgIDxNaWRsIElu
Y2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2libGVSZWxhdGlv
bi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vz
c2libGUyXEFjY2Vzc2libGVTdGF0ZXMuaWRsIiAvPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dC5pZGwiIC8+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVUZXh0Mi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVDb21wYXJhYmxlLmlkbCI+DQogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvai5maWx0
ZXJzCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw2ICsyNzcsMTUgQEAKICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5cSW50ZXJmYWNlc1xB
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUuaWRsIj4NCiAgICAgICA8RmlsdGVyPklETDwvRmlsdGVyPg0K
ICAgICA8L01pZGw+DQorICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFj
Y2Vzc2libGUyXEFjY2Vzc2libGVUZXh0LmlkbCI+DQorICAgICAgPEZpbHRlcj5JRExcQWNjZXNz
aWJpbGl0eTI8L0ZpbHRlcj4NCisgICAgPC9NaWRsPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dDIuaWRsIj4NCisgICAg
ICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5MjwvRmlsdGVyPg0KKyAgICA8L01pZGw+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHQuaWRsIj4NCisgICAgICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5Mjwv
RmlsdGVyPg0KKyAgICA8L01pZGw+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQog
ICAgIDxOb25lIEluY2x1ZGU9IkludGVyZmFjZXNQb3N0QnVpbGQuY21kIiAvPg0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9q
CShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUJhc2UuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlSW1hZ2UuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlVGV4dElt
cGwuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rpb25h
cnlQcm9wZXJ0eUJhZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2lu
XERlZmF1bHREb3dubG9hZERlbGVnYXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlx3aW5cRGVmYXVsdFBvbGljeURlbGVnYXRlLmNwcCIgLz4NCkBAIC00MTYsNiArNDE3
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1l
bnQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUlt
YWdlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVU
ZXh0SW1wbC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rp
b25hcnlQcm9wZXJ0eUJhZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxDb2RlQW5hbHlzaXNDb25maWcuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu
Llx3aW5cQ09NRW51bVZhcmlhbnQuaCIgLz4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMJKHJl
dmlzaW9uIDE1NDQ5NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dl
YktpdC52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsyNzUsOSBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cY2ZcV2ViQ29yZVN1cHBvcnRcV2ViSW5zcGVj
dG9yQ2xpZW50Q0YuY3BwIj4NCiAgICAgICA8RmlsdGVyPldlYkNvcmVTdXBwb3J0PC9GaWx0ZXI+
DQogICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxB
Y2Nlc3NpYmxlVGV4dEltcGwuY3BwIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0XEVtYmVkZGVkV2lk
Z2V0LmgiPg0KQEAgLTUzNiw2ICs1MzksOSBAQAogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cd2luXFdlYktpdFByZWZpeC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XHdpblxBY2Nlc3NpYmxlVGV4dEltcGwuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3Jv
dXA+DQogICAgIDxOb25lIEluY2x1ZGU9IldlYktpdFBvc3RCdWlsZC5jbWQiIC8+DQpAQCAtNjI4
LDQgKzYzNCw0IEBACiAgICAgICA8RmlsdGVyPlJlc291cmNlczwvRmlsdGVyPg0KICAgICA8L1Jl
c291cmNlQ29tcGlsZT4NCiAgIDwvSXRlbUdyb3VwPg0KLTwvUHJvamVjdD4NCis8L1Byb2plY3Q+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRHVUlEL1dlYktpdEdVSUQudmN4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdVSUQvV2ViS2l0R1VJRC52Y3hwcm9qCShy
ZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdV
SUQvV2ViS2l0R1VJRC52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDkgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJLaXRcSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMl8yX2kuYyIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2Jq
JChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uX2kuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNj
ZXNzaWJsZVJlbGF0aW9uX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRfaS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u
XC4uXFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqMzJcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZVRleHQyX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxXZWJL
aXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2libGVUZXh0X2ku
YyIgLz4NCiAgIDwvSXRlbUdyb3VwPg0KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh
dGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+DQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVy
cwkocmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw1
ICsxMCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZTJfMl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vz
c2libGVBcHBsaWNhdGlvbl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRl
cmZhY2VzXEFjY2Vzc2libGVSZWxhdGlvbl9pLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cLi5cLi5cV2ViS2l0QnVpbGRcUmVsZWFzZVxvYmozMlxXZWJLaXRcSW50ZXJmYWNl
c1xBY2Nlc3NpYmxlRWRpdGFibGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlwuLlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVUZXh0Ml9pLmMiIC8+DQogICA8L0l0ZW1Hcm91cD4NCiA8L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAko
cmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJsZUJh
c2UuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2libGVJbWFnZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
bGVUZXh0SW1wbC5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fj
Y2Vzc2liaWxpdHlMaXN0Qm94Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RQb3B1cC5oPgpAQCAtNzgsNiArNzksOCBAQAogCiAgICAgaWYgKG9iai0+aXNJbWFnZSgp
KQogICAgICAgICByZXR1cm4gbmV3IEFjY2Vzc2libGVJbWFnZShvYmosIHdpbmRvdyk7CisgICAg
ZWxzZSBpZiAob2JqLT5pc1N0YXRpY1RleHQoKSB8fCBvYmotPmlzVGV4dENvbnRyb2woKSB8fCAo
b2JqLT5ub2RlKCkgJiYgb2JqLT5ub2RlKCktPmlzVGV4dE5vZGUoKSkpCisgICAgICAgIHJldHVy
biBuZXcgQWNjZXNzaWJsZVRleHQob2JqLCB3aW5kb3cpOwogCiAgICAgcmV0dXJuIG5ldyBBY2Nl
c3NpYmxlQmFzZShvYmosIHdpbmRvdyk7CiB9CkBAIC04OCw3ICs5MSwxMCBAQAogICAgICAgICAm
JiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZTJfMikKICAgICAgICAg
JiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUyKQogICAgICAgICAm
JiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZUFwcGxpY2F0aW9uKQot
ICAgICAgICAmJiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZSkpIHsK
KyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUpCisg
ICAgICAgICYmICFJc0VxdWFsR1VJRChndWlkU2VydmljZSwgSUlEX0lBY2Nlc3NpYmxlVGV4dCkK
KyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVUZXh0
MikKKyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVF
ZGl0YWJsZVRleHQpKSB7CiAgICAgICAgICpwcHZPYmplY3QgPSAwOwogICAgICAgICByZXR1cm4g
RV9JTlZBTElEQVJHOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAko
cmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBBY2Nlc3NpYmxlQmFzZV9o
CiAjZGVmaW5lIEFjY2Vzc2libGVCYXNlX2gKIAorI2luY2x1ZGUgIkFjY2Vzc2libGVFZGl0YWJs
ZVRleHQuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlVGV4dC5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
bGVUZXh0Mi5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNz
aWJpbGl0eU9iamVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJXaW4uaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTIExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFjY2Vzc2libGVUZXh0SW1wbC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RExMLmgiCisjaW5jbHVk
ZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRWRpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyVGV4dENvbnRyb2wuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVT
ZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitBY2Nlc3NpYmxlVGV4dDo6QWNjZXNzaWJsZVRleHQoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqLCBIV05EIHdpbmRvdykKKyAgICA6IEFjY2Vzc2li
bGVCYXNlKG9iaiwgd2luZG93KQoreworICAgIEFTU0VSVF9BUkcob2JqLCBvYmotPmlzU3RhdGlj
VGV4dCgpIHx8IG9iai0+aXNUZXh0Q29udHJvbCgpIHx8IChvYmotPm5vZGUoKSAmJiBvYmotPm5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKSk7CisgICAgQVNTRVJUX0FSRyhvYmosIG9iai0+aXNBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KCkpOworfQorCisvLyBJQWNjZXNzaWJsZVRleHQKK0hSRVNVTFQg
QWNjZXNzaWJsZVRleHQ6OmFkZFNlbGVjdGlvbihsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9m
ZnNldCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNl
dChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5k
T2Zmc2V0KTsKKworICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRS
YW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0LXN0YXJ0T2Zmc2V0KSk7CisgICAgCisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVzKGxv
bmcgb2Zmc2V0LCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0
QXR0cmlidXRlcykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZz
ZXQob2Zmc2V0KTsKKworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OmdldF9jYXJldE9mZnNldChsb25nKiBvZmZzZXQpCit7CisgICAgaWYgKGluaXRp
YWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkuY2VudGVyKCkpOworCisgICAgaW50IGNhcmV0
T2Zmc2V0ID0gY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpOworICAgIGlmIChjYXJldE9mZnNldCA8IDApCisgICAgICAgIHJldHVybiBFX0ZBSUw7
CisgICAgKm9mZnNldCA9IGNhcmV0T2Zmc2V0OworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfY2hhcmFjdGVyRXh0ZW50cyhsb25nIG9mZnNldCwgZW51
bSBJQTJDb29yZGluYXRlVHlwZSBjb29yZFR5cGUsIGxvbmcqIHgsIGxvbmcqIHksIGxvbmcqIHdp
ZHRoLCBsb25nKiBoZWlnaHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRF
UikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIG9mZnNldCA9IGNvbnZlcnRTcGVj
aWFsT2Zmc2V0KG9mZnNldCk7CisKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBJbnRSZWN0
IGJvdW5kaW5nUmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShW
aXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0
LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSksIFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihub2RlLCBvZmZzZXQrMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cikpKSk7CisgICAgKndpZHRoID0gYm91bmRpbmdSZWN0LndpZHRoKCk7CisgICAgKmhlaWdodCA9
IGJvdW5kaW5nUmVjdC5oZWlnaHQoKTsKKyAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgIGNh
c2UgSUEyX0NPT1JEVFlQRV9TQ1JFRU5fUkVMQVRJVkU6CisgICAgICAgIFBPSU5UIHBvaW50c1sx
XTsKKyAgICAgICAgcG9pbnRzWzBdLnggPSBib3VuZGluZ1JlY3QueCgpOworICAgICAgICBwb2lu
dHNbMF0ueSA9IGJvdW5kaW5nUmVjdC55KCk7CisgICAgICAgIE1hcFdpbmRvd1BvaW50cyhtX3dp
bmRvdywgMCwgcG9pbnRzLCAxKTsKKyAgICAgICAgKnggPSBwb2ludHNbMF0ueDsKKyAgICAgICAg
KnkgPSBwb2ludHNbMF0ueTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBF
X1BBUkVOVF9SRUxBVElWRToKKyAgICAgICAgKnggPSBib3VuZGluZ1JlY3QueCgpOworICAgICAg
ICAqeSA9IGJvdW5kaW5nUmVjdC55KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9uU2VsZWN0aW9ucyhsb25nKiBuU2VsZWN0
aW9ucykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVu
dCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc05vbmUoKSkKKyAgICAgICAgKm5TZWxlY3Rpb25z
ID0gMDsKKyAgICBlbHNlCisgICAgICAgICpuU2VsZWN0aW9ucyA9IDE7CisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9vZmZzZXRBdFBvaW50KGxvbmcg
eCwgbG9uZyB5LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNvb3JkVHlwZSwgbG9uZyogb2Zmc2V0
KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBWaXNpYmxlUG9zaXRp
b24gdnBvczsKKyAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgIGNhc2UgSUEyX0NPT1JEVFlQ
RV9TQ1JFRU5fUkVMQVRJVkU6CisgICAgICAgIFBPSU5UIHBvaW50c1sxXTsKKyAgICAgICAgcG9p
bnRzWzBdLnggPSB4OworICAgICAgICBwb2ludHNbMF0ueSA9IHk7CisgICAgICAgIE1hcFdpbmRv
d1BvaW50cygwLCBtX3dpbmRvdywgcG9pbnRzLCAxKTsKKyAgICAgICAgdnBvcyA9IG1fb2JqZWN0
LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludHNbMF0ueCwgcG9pbnRzWzBd
LnkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBFX1BBUkVOVF9SRUxB
VElWRToKKyAgICAgICAgdnBvcyA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJ
bnRQb2ludCh4LCB5KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBFX0lOVkFMSURBUkc7CisgICAgfQorCisgICAgaW50IGNhcmV0UG9zaXRpb24gPSB2cG9z
LmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgaWYgKGNhcmV0
UG9zaXRpb24gPCAwIHx8IGNhcmV0UG9zaXRpb24gPiBtX29iamVjdC0+c3RyaW5nVmFsdWUoKS5s
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7IAorICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfc2VsZWN0aW9uKGxvbmcgc2VsZWN0aW9uSW5k
ZXgsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQpCit7CisgICAgaWYgKGluaXRp
YWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IGxvbmcgc2VsZWN0aW9uczsKKyAgICBnZXRfblNlbGVjdGlvbnMoJnNlbGVjdGlvbnMpOworICAg
IGlmIChzZWxlY3Rpb25JbmRleCA8IDAgfHwgc2VsZWN0aW9uSW5kZXggPj0gc2VsZWN0aW9ucykK
KyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAgIFBsYWluVGV4dFJhbmdlIHNlbGVj
dGlvblJhbmdlID0gbV9vYmplY3QtPnNlbGVjdGVkVGV4dFJhbmdlKCk7CisKKyAgICAqc3RhcnRP
ZmZzZXQgPSBzZWxlY3Rpb25SYW5nZS5zdGFydDsKKyAgICAqZW5kT2Zmc2V0ID0gc2VsZWN0aW9u
UmFuZ2UubGVuZ3RoOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVU
ZXh0OjpnZXRfdGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiogdGV4
dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChz
dGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5kT2Zm
c2V0KTsKKyAgICBXVEY6OlN0cmluZyBzdWJzdHJpbmdUZXh0ID0gbV9vYmplY3QtPnN0cmluZ1Zh
bHVlKCkuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisK
KyAgICAqdGV4dCA9IFN5c0FsbG9jU3RyaW5nTGVuKHN1YnN0cmluZ1RleHQuY2hhcmFjdGVycygp
LCBzdWJzdHJpbmdUZXh0Lmxlbmd0aCgpKTsKKyAgICBpZiAoc3Vic3RyaW5nVGV4dC5sZW5ndGgo
KSAmJiAhKnRleHQpCisgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworCisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF90ZXh0QmVmb3JlT2Zmc2V0
KGxvbmcgb2Zmc2V0LCBlbnVtIElBMlRleHRCb3VuZGFyeVR5cGUgYm91bmRhcnlUeXBlLCBsb25n
KiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KQoreworICAgIGlmIChp
bml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7Cisg
ICAgCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6
Z2V0X3RleHRBZnRlck9mZnNldChsb25nIG9mZnNldCwgZW51bSBJQTJUZXh0Qm91bmRhcnlUeXBl
IGJvdW5kYXJ5VHlwZSwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcqIGVuZE9mZnNldCwgQlNUUiog
dGV4dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworICAgIAorICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNV
TFQgQWNjZXNzaWJsZVRleHQ6OmdldF90ZXh0QXRPZmZzZXQobG9uZyBvZmZzZXQsIGVudW0gSUEy
VGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBl
bmRPZmZzZXQsIEJTVFIqIHRleHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9J
TlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpyZW1vdmVTZWxlY3Rpb24obG9uZyBz
ZWxlY3Rpb25JbmRleCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQor
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgbG9uZyBzZWxlY3Rpb25zOworICAgIGdl
dF9uU2VsZWN0aW9ucygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8
fCBzZWxlY3Rpb25JbmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworCisgICAgbV9vYmplY3QtPnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmZyYW1lKCktPnNl
bGVjdGlvbigpLmNsZWFyKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OnNldENhcmV0T2Zmc2V0KGxvbmcgb2Zmc2V0KQoreworICAgIGlmIChpbml0aWFs
Q2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgICAg
IAorICAgIG9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KG9mZnNldCk7CisKKyAgICBOb2Rl
KiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBtX29iamVjdC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKG5vZGUsIG9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpKSk7
CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNldFNlbGVj
dGlvbihsb25nIHNlbGVjdGlvbkluZGV4LCBsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNl
dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworCisgICAgbG9uZyBzZWxlY3Rpb25zOworICAgIGdldF9uU2VsZWN0aW9u
cygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8fCBzZWxlY3Rpb25J
bmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAg
bV9vYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCkpOworICAgIHJldHVybiBTX09LOworfQorCitIUkVT
VUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfbkNoYXJhY3RlcnMobG9uZyogY2hhcmFjdGVycykKK3sK
KyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworCisgICAgaW50IGxlbmd0aCA9IG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpLmxlbmd0
aCgpOworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAg
KmNoYXJhY3RlcnMgPSBsZW5ndGg7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNj
ZXNzaWJsZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvKGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJ
bmRleCwgZW51bSBJQTJTY3JvbGxUeXBlIHNjcm9sbFR5cGUpCit7CisgICAgaWYgKGluaXRpYWxD
aGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIHN0
YXJ0SW5kZXggPSBjb252ZXJ0U3BlY2lhbE9mZnNldChzdGFydEluZGV4KTsKKyAgICBlbmRJbmRl
eCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KGVuZEluZGV4KTsKKworICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
KFBsYWluVGV4dFJhbmdlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LXN0YXJ0SW5kZXgpKTsKKyAgICBJ
bnRSZWN0IGJvdW5kaW5nQm94ID0gbWFrZVJhbmdlKHRleHRSYW5nZS5zdGFydCwgdGV4dFJhbmdl
LmVuZCktPmJvdW5kaW5nQm94KCk7CisgICAgc3dpdGNoIChzY3JvbGxUeXBlKSB7CisgICAgY2Fz
ZSBJQTJfU0NST0xMX1RZUEVfVE9QX0xFRlQ6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0ds
b2JhbFBvaW50KGJvdW5kaW5nQm94Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIElBMl9TQ1JPTExfVFlQRV9CT1RUT01fUklHSFQ6CisgICAgICAgIG1fb2JqZWN0
LT5zY3JvbGxUb0dsb2JhbFBvaW50KGJvdW5kaW5nQm94Lm1heFhNYXhZQ29ybmVyKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElBMl9TQ1JPTExfVFlQRV9UT1BfRURHRToKKyAgICAgICAg
bV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoKGJvdW5kaW5nQm94LngoKSAr
IGJvdW5kaW5nQm94Lm1heFgoKSkgLyAyLCBib3VuZGluZ0JveC55KCkpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfQk9UVE9NX0VER0U6CisgICAgICAgIG1fb2Jq
ZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KEludFBvaW50KChib3VuZGluZ0JveC54KCkgKyBib3Vu
ZGluZ0JveC5tYXhYKCkpIC8gMiwgYm91bmRpbmdCb3gubWF4WSgpKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSUEyX1NDUk9MTF9UWVBFX0xFRlRfRURHRToKKyAgICAgICAgbV9vYmplY3Qt
PnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoYm91bmRpbmdCb3gueCgpLCAoYm91bmRpbmdC
b3gueSgpICsgYm91bmRpbmdCb3gubWF4WSgpKSAvIDIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJQTJfU0NST0xMX1RZUEVfUklHSFRfRURHRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9s
bFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoYm91bmRpbmdCb3gubWF4WCgpLCAoYm91bmRpbmdCb3gu
eSgpICsgYm91bmRpbmdCb3gubWF4WSgpKSAvIDIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJQTJfU0NST0xMX1RZUEVfQU5ZV0hFUkU6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0ds
b2JhbFBvaW50KGJvdW5kaW5nQm94LmNlbnRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvUG9pbnQo
bG9uZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBlIGNv
b3JkaW5hdGVUeXBlLCBsb25nIHgsIGxvbmcgeSkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkg
PT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRJbmRl
eCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0SW5kZXgpOworICAgIGVuZEluZGV4ID0gY29u
dmVydFNwZWNpYWxPZmZzZXQoZW5kSW5kZXgpOworCisgICAgc3dpdGNoIChjb29yZGluYXRlVHlw
ZSkgeworICAgIGNhc2UgSUEyX0NPT1JEVFlQRV9TQ1JFRU5fUkVMQVRJVkU6CisgICAgICAgIFBP
SU5UIHBvaW50c1sxXTsKKyAgICAgICAgcG9pbnRzWzBdLnggPSB4OworICAgICAgICBwb2ludHNb
MF0ueSA9IHk7CisgICAgICAgIE1hcFdpbmRvd1BvaW50cygwLCBtX3dpbmRvdywgcG9pbnRzLCAx
KTsKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQocG9pbnRz
WzBdLngsIHBvaW50c1swXS55KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUEyX0NPT1JE
VFlQRV9QQVJFTlRfUkVMQVRJVkU6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBv
aW50KEludFBvaW50KHgsIHkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAgICByZXR1cm4gU19PSzsKK30KKwor
SFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X25ld1RleHQoSUEyVGV4dFNlZ21lbnQqIG5ld1Rl
eHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKKyAgICAKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxU
IEFjY2Vzc2libGVUZXh0OjpnZXRfb2xkVGV4dChJQTJUZXh0U2VnbWVudCogb2xkVGV4dCkKK3sK
KyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworCisvLyBJQWNjZXNzaWJsZVRl
eHQyCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfYXR0cmlidXRlUmFuZ2UobG9uZyBvZmZz
ZXQsIEJTVFIgZmlsdGVyLCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RS
KiBhdHRyaWJ1dGVWYWx1ZXMpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRF
UikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIHJldHVybiBFX05PVElNUEw7Cit9
CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmNvcHlUZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxv
bmcgZW5kT2Zmc2V0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFydE9mZnNldCA9IGNvbnZlcnRTcGVj
aWFsT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9m
ZnNldChlbmRPZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3QtPmRvY3VtZW50
KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsK
KworICAgIGFkZFNlbGVjdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAgIGZyYW1l
LT5lZGl0b3IoKS5jb3B5KCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OmRlbGV0ZVRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQpCit7
CisgICAgaWYgKG1fb2JqZWN0LT5pc1JlYWRPbmx5KCkpCisgICAgICAgIHJldHVybiBTX0ZBTFNF
OworCisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAg
ICBhZGRTZWxlY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBmcmFtZS0+ZWRp
dG9yKCkuZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6aW5zZXJ0VGV4dChsb25nIG9mZnNl
dCwgQlNUUiogdGV4dCkKK3sKKyAgICBpZiAobV9vYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAg
ICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVS
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNp
YWxPZmZzZXQob2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0LT5kb2N1bWVu
dCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7
CisgICAgCisgICAgYWRkU2VsZWN0aW9uKG9mZnNldCwgb2Zmc2V0KTsKKworICAgIGZyYW1lLT5l
ZGl0b3IoKS5pbnNlcnRUZXh0KCp0ZXh0LCAwKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBBY2Nlc3NpYmxlVGV4dDo6Y3V0VGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9m
ZnNldCkKK3sKKyAgICBpZiAobV9vYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJu
IFNfRkFMU0U7CisKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9m
ZnNldChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQo
ZW5kT2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAg
ICBhZGRTZWxlY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisKKyAgICBmcmFtZS0+ZWRp
dG9yKCkuY3V0KCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRl
eHQ6OnBhc3RlVGV4dChsb25nIG9mZnNldCkKK3sKKyAgICBpZiAobV9vYmplY3QtPmlzUmVhZE9u
bHkoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkg
PT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0g
Y29udmVydFNwZWNpYWxPZmZzZXQob2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1fb2Jq
ZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBhZGRTZWxlY3Rpb24ob2Zmc2V0LCBvZmZzZXQpOworCisgICAg
ZnJhbWUtPmVkaXRvcigpLnBhc3RlKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQg
QWNjZXNzaWJsZVRleHQ6OnJlcGxhY2VUZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zm
c2V0LCBCU1RSKiB0ZXh0KQoreworICAgIGlmIChtX29iamVjdC0+aXNSZWFkT25seSgpKQorICAg
ICAgICByZXR1cm4gU19GQUxTRTsKKworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5U
RVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFydE9mZnNldCA9IGNvbnZl
cnRTcGVjaWFsT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZzZXQgPSBjb252ZXJ0U3Bl
Y2lhbE9mZnNldChlbmRPZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1lID0gbV9vYmplY3QtPmRv
Y3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKKworICAgIGFkZFNlbGVjdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKworICAg
IGZyYW1lLT5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoKnRleHQsIHRydWUsIGZh
bHNlKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6c2V0
QXR0cmlidXRlcyhsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiogYXR0cmli
dXRlcykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworLy8gSUFjY2Vz
c2libGUyCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfYXR0cmlidXRlcyhCU1RSKiBhdHRy
aWJ1dGVzKQoreworICAgIFdURjo6U3RyaW5nIHRleHQoInRleHQtbW9kZWw6YTEiKTsKKyAgICAq
YXR0cmlidXRlcyA9IFN5c0FsbG9jU3RyaW5nTGVuKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxl
bmd0aCgpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8gSVVua25vd24KK0hSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgQWNjZXNzaWJsZVRleHQ6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlk
LCB2b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRv
ZihJQWNjZXNzaWJsZVRleHQpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElB
Y2Nlc3NpYmxlVGV4dCo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9f
dXVpZG9mKElBY2Nlc3NpYmxlRWRpdGFibGVUZXh0KSkpCisgICAgICAgICpwcHZPYmplY3QgPSBz
dGF0aWNfY2FzdDxJQWNjZXNzaWJsZUVkaXRhYmxlVGV4dCo+KHRoaXMpOworICAgIGVsc2UgaWYg
KElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElBY2Nlc3NpYmxlKSkpCisgICAgICAgICpwcHZP
YmplY3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJsZSo+KHRoaXMpOworICAgIGVsc2UgaWYgKElz
RXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElEaXNwYXRjaCkpKQorICAgICAgICAqcHB2T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFs
R1VJRChyaWlkLCBfX3V1aWRvZihJVW5rbm93bikpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SUFjY2Vzc2libGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChy
aWlkLCBfX3V1aWRvZihJQWNjZXNzaWJsZTJfMikpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SUFjY2Vzc2libGUyXzIqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBfX3V1aWRvZihJQWNjZXNzaWJsZTIpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0
YXRpY19jYXN0PElBY2Nlc3NpYmxlMio+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlE
KHJpaWQsIF9fdXVpZG9mKElBY2Nlc3NpYmxlQ29tcGFyYWJsZSkpKQorICAgICAgICAqcHB2T2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGVDb21wYXJhYmxlKj4odGhpcyk7CisgICAgZWxz
ZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSVNlcnZpY2VQcm92aWRlcikpKQorICAg
ICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVNlcnZpY2VQcm92aWRlcio+KHRoaXMpOwor
ICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKEFjY2Vzc2libGVCYXNlKSkp
CisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmxlQmFzZSo+KHRoaXMp
OworICAgIGVsc2UgeworICAgICAgICAqcHB2T2JqZWN0ID0gMDsKKyAgICAgICAgcmV0dXJuIEVf
Tk9JTlRFUkZBQ0U7CisgICAgfQorICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQor
CitVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBY2Nlc3NpYmxlVGV4dDo6UmVsZWFzZSh2b2lkKQor
eworICAgIEFTU0VSVChtX3JlZkNvdW50ID4gMCk7CisgICAgaWYgKC0tbV9yZWZDb3VudCkKKyAg
ICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CisgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIDA7
Cit9CisKK2ludCBBY2Nlc3NpYmxlVGV4dDo6Y29udmVydFNwZWNpYWxPZmZzZXQoaW50IG9mZnNl
dCkKK3sKKyAgICBBU1NFUlQobV9vYmplY3QpOworICAgIEFTU0VSVChtX29iamVjdC0+cmVuZGVy
ZXIoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgCisgICAgaWYgKG9mZnNldCA9PSBJQTJf
VEVYVF9PRkZTRVRfTEVOR1RIKSAKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdWYWx1
ZSgpLmxlbmd0aCgpOworICAgIGlmIChvZmZzZXQgPT0gSUEyX1RFWFRfT0ZGU0VUX0NBUkVUKSB7
CisgICAgICAgIGxvbmcgY2FyZXRPZmZzZXQ7CisgICAgICAgIGdldF9jYXJldE9mZnNldCgmY2Fy
ZXRPZmZzZXQpOworICAgICAgICByZXR1cm4gY2FyZXRPZmZzZXQ7CisgICAgfQorICAgIHJldHVy
biBvZmZzZXQ7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmluaXRpYWxDaGVjaygpCit7
CisgICAgaWYgKCFtX29iamVjdCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5yZW5kZXJlcigpLT5kb2N1bWVudCgpOworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBGcmFtZSogZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gRV9G
QUlMOworCisgICAgcmV0dXJuIFNfT0s7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nl
c3NpYmxlVGV4dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9BY2Nlc3Np
YmxlVGV4dEltcGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2li
bGVUZXh0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmxlVGV4
dEltcGxfaAorI2RlZmluZSBBY2Nlc3NpYmxlVGV4dEltcGxfaAorCisjaW5jbHVkZSAiQWNjZXNz
aWJsZUJhc2UuaCIKKworY2xhc3MgQWNjZXNzaWJsZVRleHQgOiBwdWJsaWMgQWNjZXNzaWJsZUJh
c2UsIHB1YmxpYyBJQWNjZXNzaWJsZVRleHQyLCBwdWJsaWMgSUFjY2Vzc2libGVFZGl0YWJsZVRl
eHQgeworcHVibGljOgorICAgIEFjY2Vzc2libGVUZXh0KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3QqLCBIV05EKTsKKyAgICB2aXJ0dWFsIH5BY2Nlc3NpYmxlVGV4dCgpIHsgfQorCisgICAg
Ly8gSUFjY2Vzc2libGVUZXh0CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGFkZFNlbGVjdGlvbihsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCk7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hdHRyaWJ1dGVzKGxvbmcgb2Zmc2V0
LCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0QXR0cmlidXRl
cyk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9jYXJldE9mZnNl
dChsb25nKiBvZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBn
ZXRfY2hhcmFjdGVyRXh0ZW50cyhsb25nIG9mZnNldCwgZW51bSBJQTJDb29yZGluYXRlVHlwZSBj
b29yZFR5cGUsIGxvbmcqIHgsIGxvbmcqIHksIGxvbmcqIHdpZHRoLCBsb25nKiBoZWlnaHQpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfblNlbGVjdGlvbnMobG9u
ZyogblNlbGVjdGlvbnMpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBn
ZXRfb2Zmc2V0QXRQb2ludChsb25nIHgsIGxvbmcgeSwgZW51bSBJQTJDb29yZGluYXRlVHlwZSBj
b29yZFR5cGUsIGxvbmcqIG9mZnNldCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGdldF9zZWxlY3Rpb24obG9uZyBzZWxlY3Rpb25JbmRleCwgbG9uZyogc3RhcnRPZmZz
ZXQsIGxvbmcqIGVuZE9mZnNldCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIGdldF90ZXh0KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X3RleHRCZWZvcmVP
ZmZzZXQobG9uZyBvZmZzZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUs
IGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHQpOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfdGV4dEFmdGVyT2Zmc2V0KGxvbmcg
b2Zmc2V0LCBlbnVtIElBMlRleHRCb3VuZGFyeVR5cGUgYm91bmRhcnlUeXBlLCBsb25nKiBzdGFy
dE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X3RleHRBdE9mZnNldChsb25nIG9mZnNldCwgZW51bSBJ
QTJUZXh0Qm91bmRhcnlUeXBlIGJvdW5kYXJ5VHlwZSwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcq
IGVuZE9mZnNldCwgQlNUUiogdGV4dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIHJlbW92ZVNlbGVjdGlvbihsb25nIHNlbGVjdGlvbkluZGV4KTsKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0Q2FyZXRPZmZzZXQobG9uZyBvZmZzZXQpOwor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRTZWxlY3Rpb24obG9uZyBz
ZWxlY3Rpb25JbmRleCwgbG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQpOworICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfbkNoYXJhY3RlcnMobG9uZyogY2hh
cmFjdGVycyk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNjcm9sbFN1
YnN0cmluZ1RvKGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRleCwgZW51bSBJQTJTY3JvbGxU
eXBlIHNjcm9sbFR5cGUpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBz
Y3JvbGxTdWJzdHJpbmdUb1BvaW50KGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRleCwgZW51
bSBJQTJDb29yZGluYXRlVHlwZSBjb29yZGluYXRlVHlwZSwgbG9uZyB4LCBsb25nIHkpOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfbmV3VGV4dChJQTJUZXh0U2Vn
bWVudCogbmV3VGV4dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdl
dF9vbGRUZXh0KElBMlRleHRTZWdtZW50KiBvbGRUZXh0KTsKKyAgICAKKyAgICAvLyBJQWNjZXNz
aWJsZVRleHQyCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9hdHRy
aWJ1dGVSYW5nZShsb25nIG9mZnNldCwgQlNUUiBmaWx0ZXIsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBs
b25nKiBlbmRPZmZzZXQsIEJTVFIqIGF0dHJpYnV0ZVZhbHVlcyk7CisKKyAgICAvLyBJQWNjZXNz
aWJsZUVkaXRhYmxlVGV4dAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBj
b3B5VGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCk7CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRlbGV0ZVRleHQobG9uZyBzdGFydE9mZnNldCwgbG9u
ZyBlbmRPZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBpbnNl
cnRUZXh0KGxvbmcgb2Zmc2V0LCBCU1RSKiB0ZXh0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgY3V0VGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCk7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHBhc3RlVGV4dChsb25nIG9m
ZnNldCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJlcGxhY2VUZXh0
KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KTsKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0QXR0cmlidXRlcyhsb25nIHN0YXJ0T2Zm
c2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiogYXR0cmlidXRlcyk7CisKKyAgICAvLyBJVW5rbm93
bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShS
RUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBBZGRSZWYodm9pZCkgeyByZXR1cm4gKyttX3JlZkNvdW50OyB9CisgICAgdmly
dHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZvaWQpOworCisgICAgLy8gSUFj
Y2Vzc2libGVCYXNlCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF9h
dHRyaWJ1dGVzKEJTVFIqIGF0dHJpYnV0ZXMpOworCitwcml2YXRlOgorICAgIGludCBjb252ZXJ0
U3BlY2lhbE9mZnNldChpbnQgc3BlY2lhbE9mZnNldCk7CisgICAgSFJFU1VMVCBpbml0aWFsQ2hl
Y2soKTsKK307CisKKyNlbmRpZiAvLyBBY2Nlc3NpYmxlVGV4dF9oCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNTQ1MjUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw1MiBAQAorMjAxMy0wOC0yMyAgUm9nZXIgRm9uZyAgPHJv
Z2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE5ODI5PiBBZGQgSUFjY2Vzc2libGVUZXh0IGFuZCBJQWNjZXNzaWJs
ZUVkaXRhYmxlVGV4dCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZCBJQWNjZXNzaWJsZVRleHQgYW5kIElB
Y2Nlc3NpYmxlRWRpdGFibGVUZXh0IGludGVyZmFjZXMgYW5kIGltcGxlbWVudGF0aW9uIHRvIEFw
cGxlV2luIHBvcnQuCisKKyAgICAgICAgKiBBY2Nlc3NpYmxlQmFzZS5jcHA6CisgICAgICAgIChB
Y2Nlc3NpYmxlQmFzZTo6Y3JlYXRlSW5zdGFuY2UpOiBDcmVhdGUgYW4gQWNjZXNzaWJsZVRleHQg
aW5zdGFuY2Ugd2hlbiBuZWNlc3NhcnkuCisgICAgICAgIChBY2Nlc3NpYmxlQmFzZTo6UXVlcnlT
ZXJ2aWNlKToKKyAgICAgICAgKiBBY2Nlc3NpYmxlQmFzZS5oOgorICAgICAgICAqIEFjY2Vzc2li
bGVUZXh0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OkFjY2Vzc2li
bGVUZXh0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjphZGRTZWxlY3Rpb24pOgorICAgICAg
ICAoQWNjZXNzaWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVzKTogTm90IEltcGxlbWVudGVkCisgICAg
ICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0X2NhcmV0T2Zmc2V0KToKKyAgICAgICAgKEFjY2Vzc2li
bGVUZXh0OjpnZXRfY2hhcmFjdGVyRXh0ZW50cyk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6
Z2V0X25TZWxlY3Rpb25zKToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfb2Zmc2V0QXRQ
b2ludCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0X3NlbGVjdGlvbik6CisgICAgICAg
IChBY2Nlc3NpYmxlVGV4dDo6Z2V0X3RleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6Omdl
dF90ZXh0QmVmb3JlT2Zmc2V0KTogTm90IEltcGxlbWVudGVkCisgICAgICAgIChBY2Nlc3NpYmxl
VGV4dDo6Z2V0X3RleHRBZnRlck9mZnNldCk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAoQWNj
ZXNzaWJsZVRleHQ6OmdldF90ZXh0QXRPZmZzZXQpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAg
KEFjY2Vzc2libGVUZXh0OjpyZW1vdmVTZWxlY3Rpb24pOgorICAgICAgICAoQWNjZXNzaWJsZVRl
eHQ6OnNldENhcmV0T2Zmc2V0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpzZXRTZWxlY3Rp
b24pOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmdldF9uQ2hhcmFjdGVycyk6CisgICAgICAg
IChBY2Nlc3NpYmxlVGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG8pOgorICAgICAgICAoQWNjZXNzaWJs
ZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvUG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6
OmdldF9uZXdUZXh0KTogTm90IEltcGxlbWVudGVkCisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6
Z2V0X29sZFRleHQpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0Ojpn
ZXRfYXR0cmlidXRlUmFuZ2UpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAgKEFjY2Vzc2libGVU
ZXh0Ojpjb3B5VGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6ZGVsZXRlVGV4dCk6Cisg
ICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxl
VGV4dDo6Y3V0VGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6cGFzdGVUZXh0KToKKyAg
ICAgICAgKEFjY2Vzc2libGVUZXh0OjpyZXBsYWNlVGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxl
VGV4dDo6c2V0QXR0cmlidXRlcyk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAoQWNjZXNzaWJs
ZVRleHQ6OlF1ZXJ5SW50ZXJmYWNlKToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpSZWxlYXNl
KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0Ojpjb252ZXJ0U3BlY2lhbE9mZnNldCk6CisgICAg
ICAgIChBY2Nlc3NpYmxlVGV4dDo6aW5pdGlhbENoZWNrKToKKyAgICAgICAgKiBBY2Nlc3NpYmxl
VGV4dEltcGwuaDogQWRkZWQuCisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6fkFjY2Vzc2libGVU
ZXh0KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpBZGRSZWYpOgorCiAyMDEzLTA4LTIzICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5kb3dzXSBS
ZWZhY3RvciBXZWJGcmFtZSB0byBjb21wb3NlIHdpdGggV2ViRnJhbWVMb2FkZXJDbGllbnQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209525</attachid>
            <date>2013-08-23 16:37:24 -0700</date>
            <delta_ts>2013-08-26 11:15:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>34720</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ1MjUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA4LTIxICBSb2dlciBGb25n
ICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk4Mjk+IElBY2Nlc3NpYmxlVGV4dCBhbmQgSUFjY2Vzc2li
bGVFZGl0YWJsZVRleHQgaW1wbGVtZW50YXRpb24gZm9yIEFwcGxlV2luZG93cyBwb3J0LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovSW50ZXJmYWNlcy9JbnRlcmZhY2VzLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBX
ZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2o6CisgICAgICAgICogV2ViS2l0LnZj
eHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVyczoKKwogMjAxMy0wOC0y
MyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmUtc2VwYXJhdGluZyBXaW4zMiBhbmQgV2luNjQgYnVpbGRzLgpJbmRleDogU291cmNlL1dlYktp
dC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0ludGVyZmFjZXMvSW50ZXJmYWNlcy52
Y3hwcm9qCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L0ludGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsOCAr
MzI2LDExIEBACiAgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNz
aWJsZTJcQWNjZXNzaWJsZTIuaWRsIiAvPg0KICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5c
SW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlMl8yLmlkbCIgLz4NCiAgICAgPE1pZGwg
SW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNcQWNjZXNzaWJsZTJcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uLmlkbCIgLz4NCisgICAgPE1pZGwgSW5jbHVkZT0iLi5cLi5cd2luXEludGVyZmFjZXNc
QWNjZXNzaWJsZTJcQWNjZXNzaWJsZUVkaXRhYmxlVGV4dC5pZGwiIC8+DQogICAgIDxNaWRsIElu
Y2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2libGVSZWxhdGlv
bi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vz
c2libGUyXEFjY2Vzc2libGVTdGF0ZXMuaWRsIiAvPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dC5pZGwiIC8+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVUZXh0Mi5pZGwiIC8+DQogICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVDb21wYXJhYmxlLmlkbCI+DQogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4NCiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9JbnRlcmZhY2VzL0ludGVyZmFjZXMudmN4cHJvai5maWx0
ZXJzCShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL0lu
dGVyZmFjZXMvSW50ZXJmYWNlcy52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw2ICsyNzcsMTUgQEAKICAgICA8TWlkbCBJbmNsdWRlPSIuLlwuLlx3aW5cSW50ZXJmYWNlc1xB
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUuaWRsIj4NCiAgICAgICA8RmlsdGVyPklETDwvRmlsdGVyPg0K
ICAgICA8L01pZGw+DQorICAgIDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFj
Y2Vzc2libGUyXEFjY2Vzc2libGVUZXh0LmlkbCI+DQorICAgICAgPEZpbHRlcj5JRExcQWNjZXNz
aWJpbGl0eTI8L0ZpbHRlcj4NCisgICAgPC9NaWRsPg0KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlwu
Llx3aW5cSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMlxBY2Nlc3NpYmxlVGV4dDIuaWRsIj4NCisgICAg
ICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5MjwvRmlsdGVyPg0KKyAgICA8L01pZGw+DQorICAg
IDxNaWRsIEluY2x1ZGU9Ii4uXC4uXHdpblxJbnRlcmZhY2VzXEFjY2Vzc2libGUyXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHQuaWRsIj4NCisgICAgICA8RmlsdGVyPklETFxBY2Nlc3NpYmlsaXR5Mjwv
RmlsdGVyPg0KKyAgICA8L01pZGw+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQog
ICAgIDxOb25lIEluY2x1ZGU9IkludGVyZmFjZXNQb3N0QnVpbGQuY21kIiAvPg0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9q
CShyZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUJhc2UuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlSW1hZ2UuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlVGV4dElt
cGwuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rpb25h
cnlQcm9wZXJ0eUJhZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2lu
XERlZmF1bHREb3dubG9hZERlbGVnYXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlx3aW5cRGVmYXVsdFBvbGljeURlbGVnYXRlLmNwcCIgLz4NCkBAIC00MTYsNiArNDE3
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5o
IiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1l
bnQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUlt
YWdlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVU
ZXh0SW1wbC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxDRkRpY3Rp
b25hcnlQcm9wZXJ0eUJhZy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxDb2RlQW5hbHlzaXNDb25maWcuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu
Llx3aW5cQ09NRW51bVZhcmlhbnQuaCIgLz4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMJKHJl
dmlzaW9uIDE1NDQ5NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dl
YktpdC52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsyNzUsOSBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cY2ZcV2ViQ29yZVN1cHBvcnRcV2ViSW5zcGVj
dG9yQ2xpZW50Q0YuY3BwIj4NCiAgICAgICA8RmlsdGVyPldlYkNvcmVTdXBwb3J0PC9GaWx0ZXI+
DQogICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxB
Y2Nlc3NpYmxlVGV4dEltcGwuY3BwIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0XEVtYmVkZGVkV2lk
Z2V0LmgiPg0KQEAgLTUzNiw2ICs1MzksOSBAQAogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cd2luXFdlYktpdFByZWZpeC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XHdpblxBY2Nlc3NpYmxlVGV4dEltcGwuaCI+DQorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJdGVtR3Jv
dXA+DQogICAgIDxOb25lIEluY2x1ZGU9IldlYktpdFBvc3RCdWlsZC5jbWQiIC8+DQpAQCAtNjI4
LDQgKzYzNCw0IEBACiAgICAgICA8RmlsdGVyPlJlc291cmNlczwvRmlsdGVyPg0KICAgICA8L1Jl
c291cmNlQ29tcGlsZT4NCiAgIDwvSXRlbUdyb3VwPg0KLTwvUHJvamVjdD4NCis8L1Byb2plY3Q+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXRHVUlEL1dlYktpdEdVSUQudmN4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdVSUQvV2ViS2l0R1VJRC52Y3hwcm9qCShy
ZXZpc2lvbiAxNTQ0OTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdEdV
SUQvV2ViS2l0R1VJRC52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNiArMjY4LDkgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJLaXRcSW50ZXJmYWNlc1xBY2Nlc3NpYmxlMl8yX2kuYyIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2Jq
JChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJsZUFwcGxp
Y2F0aW9uX2kuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNj
ZXNzaWJsZVJlbGF0aW9uX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRfaS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u
XC4uXFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqMzJcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZVRleHQyX2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxXZWJL
aXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2libGVUZXh0X2ku
YyIgLz4NCiAgIDwvSXRlbUdyb3VwPg0KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh
dGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+DQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0R1VJRC9XZWJLaXRHVUlELnZjeHByb2ouZmlsdGVy
cwkocmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJL
aXRHVUlEL1dlYktpdEdVSUQudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw1
ICsxMCw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViS2l0XEludGVyZmFjZXNcQWNjZXNzaWJs
ZTJfMl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vz
c2libGVBcHBsaWNhdGlvbl9pLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxJbnRl
cmZhY2VzXEFjY2Vzc2libGVSZWxhdGlvbl9pLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cLi5cLi5cV2ViS2l0QnVpbGRcUmVsZWFzZVxvYmozMlxXZWJLaXRcSW50ZXJmYWNl
c1xBY2Nlc3NpYmxlRWRpdGFibGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlwuLlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2Vz
XEFjY2Vzc2libGVUZXh0X2kuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu
LlwuLlxXZWJLaXRCdWlsZFxSZWxlYXNlXG9iajMyXFdlYktpdFxJbnRlcmZhY2VzXEFjY2Vzc2li
bGVUZXh0Ml9pLmMiIC8+DQogICA8L0l0ZW1Hcm91cD4NCiA8L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVCYXNlLmNwcAko
cmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJsZUJh
c2UuaCIKIAogI2luY2x1ZGUgIkFjY2Vzc2libGVJbWFnZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
bGVUZXh0SW1wbC5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fj
Y2Vzc2liaWxpdHlMaXN0Qm94Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3RQb3B1cC5oPgpAQCAtNzgsNiArNzksOCBAQAogCiAgICAgaWYgKG9iai0+aXNJbWFnZSgp
KQogICAgICAgICByZXR1cm4gbmV3IEFjY2Vzc2libGVJbWFnZShvYmosIHdpbmRvdyk7CisgICAg
ZWxzZSBpZiAob2JqLT5pc1N0YXRpY1RleHQoKSB8fCBvYmotPmlzVGV4dENvbnRyb2woKSB8fCAo
b2JqLT5ub2RlKCkgJiYgb2JqLT5ub2RlKCktPmlzVGV4dE5vZGUoKSkpCisgICAgICAgIHJldHVy
biBuZXcgQWNjZXNzaWJsZVRleHQob2JqLCB3aW5kb3cpOwogCiAgICAgcmV0dXJuIG5ldyBBY2Nl
c3NpYmxlQmFzZShvYmosIHdpbmRvdyk7CiB9CkBAIC04OCw3ICs5MSwxMCBAQAogICAgICAgICAm
JiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZTJfMikKICAgICAgICAg
JiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUyKQogICAgICAgICAm
JiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZUFwcGxpY2F0aW9uKQot
ICAgICAgICAmJiAhSXNFcXVhbEdVSUQoZ3VpZFNlcnZpY2UsIElJRF9JQWNjZXNzaWJsZSkpIHsK
KyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGUpCisg
ICAgICAgICYmICFJc0VxdWFsR1VJRChndWlkU2VydmljZSwgSUlEX0lBY2Nlc3NpYmxlVGV4dCkK
KyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVUZXh0
MikKKyAgICAgICAgJiYgIUlzRXF1YWxHVUlEKGd1aWRTZXJ2aWNlLCBJSURfSUFjY2Vzc2libGVF
ZGl0YWJsZVRleHQpKSB7CiAgICAgICAgICpwcHZPYmplY3QgPSAwOwogICAgICAgICByZXR1cm4g
RV9JTlZBTElEQVJHOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAko
cmV2aXNpb24gMTU0NDk2KQorKysgU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZUJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2lmbmRlZiBBY2Nlc3NpYmxlQmFzZV9o
CiAjZGVmaW5lIEFjY2Vzc2libGVCYXNlX2gKIAorI2luY2x1ZGUgIkFjY2Vzc2libGVFZGl0YWJs
ZVRleHQuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlVGV4dC5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
bGVUZXh0Mi5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNz
aWJpbGl0eU9iamVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJXaW4uaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTIExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFjY2Vzc2libGVUZXh0SW1wbC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RExMLmgiCisjaW5jbHVk
ZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRWRpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyVGV4dENvbnRyb2wuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVT
ZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitBY2Nlc3NpYmxlVGV4dDo6QWNjZXNzaWJsZVRleHQoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqLCBIV05EIHdpbmRvdykKKyAgICA6IEFjY2Vzc2li
bGVCYXNlKG9iaiwgd2luZG93KQoreworICAgIEFTU0VSVF9BUkcob2JqLCBvYmotPmlzU3RhdGlj
VGV4dCgpIHx8IG9iai0+aXNUZXh0Q29udHJvbCgpIHx8IChvYmotPm5vZGUoKSAmJiBvYmotPm5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKSk7CisgICAgQVNTRVJUX0FSRyhvYmosIG9iai0+aXNBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0KCkpOworfQorCisvLyBJQWNjZXNzaWJsZVRleHQKK0hSRVNVTFQg
QWNjZXNzaWJsZVRleHQ6OmFkZFNlbGVjdGlvbihsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9m
ZnNldCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNl
dChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5k
T2Zmc2V0KTsKKworICAgIG1fb2JqZWN0LT5zZXRTZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRS
YW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0LXN0YXJ0T2Zmc2V0KSk7CisgICAgCisgICAgcmV0
dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF9hdHRyaWJ1dGVzKGxv
bmcgb2Zmc2V0LCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0
QXR0cmlidXRlcykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZz
ZXQob2Zmc2V0KTsKKworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OmdldF9jYXJldE9mZnNldChsb25nKiBvZmZzZXQpCit7CisgICAgaWYgKGluaXRp
YWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IFZpc2libGVQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5hYnNv
bHV0ZUNhcmV0Qm91bmRzKCkuY2VudGVyKCkpOworCisgICAgaW50IGNhcmV0T2Zmc2V0ID0gY2Fy
ZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAg
IGlmIChjYXJldE9mZnNldCA8IDApCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgKm9mZnNl
dCA9IGNhcmV0T2Zmc2V0OworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2li
bGVUZXh0OjpnZXRfY2hhcmFjdGVyRXh0ZW50cyhsb25nIG9mZnNldCwgZW51bSBJQTJDb29yZGlu
YXRlVHlwZSBjb29yZFR5cGUsIGxvbmcqIHgsIGxvbmcqIHksIGxvbmcqIHdpZHRoLCBsb25nKiBo
ZWlnaHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKworICAgIG9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KG9m
ZnNldCk7CisKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIW5v
ZGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBJbnRSZWN0IGJvdW5kaW5nUmVj
dCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRp
b25SYW5nZShWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSksIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2Rl
LCBvZmZzZXQrMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpKSk7CisgICAg
KndpZHRoID0gYm91bmRpbmdSZWN0LndpZHRoKCk7CisgICAgKmhlaWdodCA9IGJvdW5kaW5nUmVj
dC5oZWlnaHQoKTsKKyAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgeworICAgIGNhc2UgSUEyX0NPT1JE
VFlQRV9TQ1JFRU5fUkVMQVRJVkU6CisgICAgICAgIFBPSU5UIHBvaW50c1sxXTsKKyAgICAgICAg
cG9pbnRzWzBdLnggPSBib3VuZGluZ1JlY3QueCgpOworICAgICAgICBwb2ludHNbMF0ueSA9IGJv
dW5kaW5nUmVjdC55KCk7CisgICAgICAgIE1hcFdpbmRvd1BvaW50cyhtX3dpbmRvdywgMCwgcG9p
bnRzLCAxKTsKKyAgICAgICAgKnggPSBwb2ludHNbMF0ueDsKKyAgICAgICAgKnkgPSBwb2ludHNb
MF0ueTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfQ09PUkRUWVBFX1BBUkVOVF9SRUxB
VElWRToKKyAgICAgICAgKnggPSBib3VuZGluZ1JlY3QueCgpOworICAgICAgICAqeSA9IGJvdW5k
aW5nUmVjdC55KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBFX0lOVkFMSURBUkc7CisgICAgfQorCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQg
QWNjZXNzaWJsZVRleHQ6OmdldF9uU2VsZWN0aW9ucyhsb25nKiBuU2VsZWN0aW9ucykKK3sKKyAg
ICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworCisgICAgaWYgKG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24o
KS5pc05vbmUoKSkKKyAgICAgICAgKm5TZWxlY3Rpb25zID0gMDsKKyAgICBlbHNlCisgICAgICAg
ICpuU2VsZWN0aW9ucyA9IDE7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNz
aWJsZVRleHQ6OmdldF9vZmZzZXRBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBlbnVtIElBMkNvb3Jk
aW5hdGVUeXBlIGNvb3JkVHlwZSwgbG9uZyogb2Zmc2V0KQoreworICAgIGlmIChpbml0aWFsQ2hl
Y2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBOb2Rl
KiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gdnBvczsKKyAgICBzd2l0Y2ggKGNv
b3JkVHlwZSkgeworICAgIGNhc2UgSUEyX0NPT1JEVFlQRV9TQ1JFRU5fUkVMQVRJVkU6CisgICAg
ICAgIFBPSU5UIHBvaW50c1sxXTsKKyAgICAgICAgcG9pbnRzWzBdLnggPSB4OworICAgICAgICBw
b2ludHNbMF0ueSA9IHk7CisgICAgICAgIE1hcFdpbmRvd1BvaW50cygwLCBtX3dpbmRvdywgcG9p
bnRzLCAxKTsKKyAgICAgICAgdnBvcyA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dChJbnRQb2ludChwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJQTJfQ09PUkRUWVBFX1BBUkVOVF9SRUxBVElWRToKKyAgICAgICAgdnBvcyA9IG1f
b2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJbnRQb2ludCh4LCB5KSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAg
fQorCisgICAgaW50IGNhcmV0UG9zaXRpb24gPSB2cG9zLmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0
SW5Db250YWluZXJOb2RlKCk7CisgICAgaWYgKGNhcmV0UG9zaXRpb24gPCAwIHx8IGNhcmV0UG9z
aXRpb24gPiBtX29iamVjdC0+c3RyaW5nVmFsdWUoKS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IFNfRkFMU0U7IAorICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0
OjpnZXRfc2VsZWN0aW9uKGxvbmcgc2VsZWN0aW9uSW5kZXgsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBs
b25nKiBlbmRPZmZzZXQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGxvbmcgc2VsZWN0aW9uczsKKyAgICBn
ZXRfblNlbGVjdGlvbnMoJnNlbGVjdGlvbnMpOworICAgIGlmIChzZWxlY3Rpb25JbmRleCA8IDAg
fHwgc2VsZWN0aW9uSW5kZXggPj0gc2VsZWN0aW9ucykKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJ
REFSRzsKKworICAgIFBsYWluVGV4dFJhbmdlIHNlbGVjdGlvblJhbmdlID0gbV9vYmplY3QtPnNl
bGVjdGVkVGV4dFJhbmdlKCk7CisKKyAgICAqc3RhcnRPZmZzZXQgPSBzZWxlY3Rpb25SYW5nZS5z
dGFydDsKKyAgICAqZW5kT2Zmc2V0ID0gc2VsZWN0aW9uUmFuZ2UubGVuZ3RoOworICAgIHJldHVy
biBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfdGV4dChsb25nIHN0YXJ0
T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiogdGV4dCkKK3sKKyAgICBpZiAoaW5pdGlhbENo
ZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3Rh
cnRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zm
c2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5kT2Zmc2V0KTsKKyAgICBXVEY6OlN0cmluZyBz
dWJzdHJpbmdUZXh0ID0gbV9vYmplY3QtPnN0cmluZ1ZhbHVlKCkuc3Vic3RyaW5nKHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisKKyAgICAqdGV4dCA9IFN5c0FsbG9jU3Ry
aW5nTGVuKHN1YnN0cmluZ1RleHQuY2hhcmFjdGVycygpLCBzdWJzdHJpbmdUZXh0Lmxlbmd0aCgp
KTsKKyAgICBpZiAoc3Vic3RyaW5nVGV4dC5sZW5ndGgoKSAmJiAhKnRleHQpCisgICAgICAgIHJl
dHVybiBFX09VVE9GTUVNT1JZOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNj
ZXNzaWJsZVRleHQ6OmdldF90ZXh0QmVmb3JlT2Zmc2V0KGxvbmcgb2Zmc2V0LCBlbnVtIElBMlRl
eHRCb3VuZGFyeVR5cGUgYm91bmRhcnlUeXBlLCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5k
T2Zmc2V0LCBCU1RSKiB0ZXh0KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5U
RVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgCisgICAgcmV0dXJuIEVfTk9USU1Q
TDsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X3RleHRBZnRlck9mZnNldChsb25n
IG9mZnNldCwgZW51bSBJQTJUZXh0Qm91bmRhcnlUeXBlIGJvdW5kYXJ5VHlwZSwgbG9uZyogc3Rh
cnRPZmZzZXQsIGxvbmcqIGVuZE9mZnNldCwgQlNUUiogdGV4dCkKK3sKKyAgICBpZiAoaW5pdGlh
bENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgIAor
ICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmdldF90
ZXh0QXRPZmZzZXQobG9uZyBvZmZzZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFy
eVR5cGUsIGxvbmcqIHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHQpCit7
CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKyAgICAKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vz
c2libGVUZXh0OjpyZW1vdmVTZWxlY3Rpb24obG9uZyBzZWxlY3Rpb25JbmRleCkKK3sKKyAgICBp
ZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OworCisgICAgbG9uZyBzZWxlY3Rpb25zOworICAgIGdldF9uU2VsZWN0aW9ucygmc2VsZWN0aW9u
cyk7CisgICAgaWYgKHNlbGVjdGlvbkluZGV4IDwgMCB8fCBzZWxlY3Rpb25JbmRleCA+PSBzZWxl
Y3Rpb25zKQorICAgICAgICByZXR1cm4gRV9JTlZBTElEQVJHOworCisgICAgbV9vYmplY3QtPmRv
Y3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNldENhcmV0T2Zmc2V0KGxvbmcgb2Zmc2V0
KQoreworICAgIGlmIChpbml0aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisgICAgICAgIAorICAgIG9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0
KG9mZnNldCk7CisKKyAgICBOb2RlKiBub2RlID0gbV9vYmplY3QtPm5vZGUoKTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBtX29iamVjdC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
VmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvcikpKSk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNj
ZXNzaWJsZVRleHQ6OnNldFNlbGVjdGlvbihsb25nIHNlbGVjdGlvbkluZGV4LCBsb25nIHN0YXJ0
T2Zmc2V0LCBsb25nIGVuZE9mZnNldCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9Q
T0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgbG9uZyBzZWxlY3Rpb25z
OworICAgIGdldF9uU2VsZWN0aW9ucygmc2VsZWN0aW9ucyk7CisgICAgaWYgKHNlbGVjdGlvbklu
ZGV4IDwgMCB8fCBzZWxlY3Rpb25JbmRleCA+PSBzZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4g
RV9JTlZBTElEQVJHOworCisgICAgbV9vYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdlKFBsYWlu
VGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCkpOworICAgIHJl
dHVybiBTX09LOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfbkNoYXJhY3RlcnMo
bG9uZyogY2hhcmFjdGVycykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVS
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgaW50IGxlbmd0aCA9IG1fb2JqZWN0
LT5zdHJpbmdWYWx1ZSgpLmxlbmd0aCgpOworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICBy
ZXR1cm4gRV9GQUlMOworCisgICAgKmNoYXJhY3RlcnMgPSBsZW5ndGg7CisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvKGxvbmcg
c3RhcnRJbmRleCwgbG9uZyBlbmRJbmRleCwgZW51bSBJQTJTY3JvbGxUeXBlIHNjcm9sbFR5cGUp
Cit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIHN0YXJ0SW5kZXggPSBjb252ZXJ0U3BlY2lhbE9mZnNldChzdGFy
dEluZGV4KTsKKyAgICBlbmRJbmRleCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KGVuZEluZGV4KTsK
KworICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHRleHRSYW5nZSA9IG1fb2JqZWN0LT52aXNpYmxl
UG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0SW5kZXgsIGVuZEluZGV4
LXN0YXJ0SW5kZXgpKTsKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gbWFrZVJhbmdlKHRleHRS
YW5nZS5zdGFydCwgdGV4dFJhbmdlLmVuZCktPmJvdW5kaW5nQm94KCk7CisgICAgc3dpdGNoIChz
Y3JvbGxUeXBlKSB7CisgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfVE9QX0xFRlQ6CisgICAgICAg
IG1fb2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KGJvdW5kaW5nQm94Lm1pblhNaW5ZQ29ybmVy
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9TQ1JPTExfVFlQRV9CT1RUT01fUklH
SFQ6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KGJvdW5kaW5nQm94Lm1h
eFhNYXhZQ29ybmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElBMl9TQ1JPTExfVFlQ
RV9UT1BfRURHRToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9p
bnQoKGJvdW5kaW5nQm94LngoKSArIGJvdW5kaW5nQm94Lm1heFgoKSkgLyAyLCBib3VuZGluZ0Jv
eC55KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfQk9UVE9N
X0VER0U6CisgICAgICAgIG1fb2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KEludFBvaW50KChi
b3VuZGluZ0JveC54KCkgKyBib3VuZGluZ0JveC5tYXhYKCkpIC8gMiwgYm91bmRpbmdCb3gubWF4
WSgpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSUEyX1NDUk9MTF9UWVBFX0xFRlRfRURH
RToKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoYm91bmRp
bmdCb3gueCgpLCAoYm91bmRpbmdCb3gueSgpICsgYm91bmRpbmdCb3gubWF4WSgpKSAvIDIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfUklHSFRfRURHRToKKyAg
ICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFsUG9pbnQoSW50UG9pbnQoYm91bmRpbmdCb3gu
bWF4WCgpLCAoYm91bmRpbmdCb3gueSgpICsgYm91bmRpbmdCb3gubWF4WSgpKSAvIDIpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfQU5ZV0hFUkU6CisgICAgICAg
IG1fb2JqZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KGJvdW5kaW5nQm94LmNlbnRlcigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsK
KyAgICB9CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNj
cm9sbFN1YnN0cmluZ1RvUG9pbnQobG9uZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4LCBlbnVt
IElBMkNvb3JkaW5hdGVUeXBlIGNvb3JkaW5hdGVUeXBlLCBsb25nIHgsIGxvbmcgeSkKK3sKKyAg
ICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworCisgICAgc3RhcnRJbmRleCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0SW5kZXgp
OworICAgIGVuZEluZGV4ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5kSW5kZXgpOworCisgICAg
c3dpdGNoIChjb29yZGluYXRlVHlwZSkgeworICAgIGNhc2UgSUEyX0NPT1JEVFlQRV9TQ1JFRU5f
UkVMQVRJVkU6CisgICAgICAgIFBPSU5UIHBvaW50c1sxXTsKKyAgICAgICAgcG9pbnRzWzBdLngg
PSB4OworICAgICAgICBwb2ludHNbMF0ueSA9IHk7CisgICAgICAgIE1hcFdpbmRvd1BvaW50cygw
LCBtX3dpbmRvdywgcG9pbnRzLCAxKTsKKyAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFs
UG9pbnQoSW50UG9pbnQocG9pbnRzWzBdLngsIHBvaW50c1swXS55KSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSUEyX0NPT1JEVFlQRV9QQVJFTlRfUkVMQVRJVkU6CisgICAgICAgIG1fb2Jq
ZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KEludFBvaW50KHgsIHkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKyAgICB9CisKKyAg
ICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Z2V0X25ld1RleHQo
SUEyVGV4dFNlZ21lbnQqIG5ld1RleHQpCit7CisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVf
UE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAKKyAgICByZXR1cm4gRV9O
T1RJTVBMOworfQorCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfb2xkVGV4dChJQTJUZXh0
U2VnbWVudCogb2xkVGV4dCkKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVS
KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30K
KworCisvLyBJQWNjZXNzaWJsZVRleHQyCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRfYXR0
cmlidXRlUmFuZ2UobG9uZyBvZmZzZXQsIEJTVFIgZmlsdGVyLCBsb25nKiBzdGFydE9mZnNldCwg
bG9uZyogZW5kT2Zmc2V0LCBCU1RSKiBhdHRyaWJ1dGVWYWx1ZXMpCit7CisgICAgaWYgKGluaXRp
YWxDaGVjaygpID09IEVfUE9JTlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAg
IHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmNvcHlUZXh0
KGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KQoreworICAgIGlmIChpbml0aWFsQ2hl
Y2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBzdGFy
dE9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICBlbmRPZmZz
ZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChlbmRPZmZzZXQpOworCisgICAgRnJhbWUqIGZyYW1l
ID0gbV9vYmplY3QtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGFkZFNlbGVjdGlvbihzdGFydE9mZnNldCwgZW5k
T2Zmc2V0KTsKKworICAgIGZyYW1lLT5lZGl0b3IoKS5jb3B5KCk7CisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OmRlbGV0ZVRleHQobG9uZyBzdGFydE9mZnNl
dCwgbG9uZyBlbmRPZmZzZXQpCit7CisgICAgaWYgKG1fb2JqZWN0LT5pc1JlYWRPbmx5KCkpCisg
ICAgICAgIHJldHVybiBTX0ZBTFNFOworCisgICAgaWYgKGluaXRpYWxDaGVjaygpID09IEVfUE9J
TlRFUikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1f
b2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICBhZGRTZWxlY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CisKKyAgICBmcmFtZS0+ZWRpdG9yKCkuZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRl
KGZhbHNlKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6
aW5zZXJ0VGV4dChsb25nIG9mZnNldCwgQlNUUiogdGV4dCkKK3sKKyAgICBpZiAobV9vYmplY3Qt
PmlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICBpZiAoaW5pdGlh
bENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAg
b2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQob2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFt
ZSA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgCisgICAgYWRkU2VsZWN0aW9uKG9mZnNldCwgb2Zm
c2V0KTsKKworICAgIGZyYW1lLT5lZGl0b3IoKS5pbnNlcnRUZXh0KCp0ZXh0LCAwKTsKKyAgICBy
ZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6Y3V0VGV4dChsb25nIHN0
YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCkKK3sKKyAgICBpZiAobV9vYmplY3QtPmlzUmVhZE9u
bHkoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkg
PT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgc3RhcnRPZmZz
ZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChzdGFydE9mZnNldCk7CisgICAgZW5kT2Zmc2V0ID0g
Y29udmVydFNwZWNpYWxPZmZzZXQoZW5kT2Zmc2V0KTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG1f
b2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisKKyAgICBhZGRTZWxlY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CisKKyAgICBmcmFtZS0+ZWRpdG9yKCkuY3V0KCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnBhc3RlVGV4dChsb25nIG9mZnNldCkKK3sKKyAgICBp
ZiAobV9vYmplY3QtPmlzUmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisKKyAg
ICBpZiAoaW5pdGlhbENoZWNrKCkgPT0gRV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworCisgICAgb2Zmc2V0ID0gY29udmVydFNwZWNpYWxPZmZzZXQob2Zmc2V0KTsKKworICAg
IEZyYW1lKiBmcmFtZSA9IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBhZGRTZWxlY3Rpb24ob2Zm
c2V0LCBvZmZzZXQpOworCisgICAgZnJhbWUtPmVkaXRvcigpLnBhc3RlKCk7CisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0hSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnJlcGxhY2VUZXh0KGxvbmcgc3Rh
cnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0KQoreworICAgIGlmIChtX29iamVj
dC0+aXNSZWFkT25seSgpKQorICAgICAgICByZXR1cm4gU19GQUxTRTsKKworICAgIGlmIChpbml0
aWFsQ2hlY2soKSA9PSBFX1BPSU5URVIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAg
ICBzdGFydE9mZnNldCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICBl
bmRPZmZzZXQgPSBjb252ZXJ0U3BlY2lhbE9mZnNldChlbmRPZmZzZXQpOworCisgICAgRnJhbWUq
IGZyYW1lID0gbV9vYmplY3QtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGFkZFNlbGVjdGlvbihzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0KTsKKworICAgIGZyYW1lLT5lZGl0b3IoKS5yZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoKnRleHQsIHRydWUsIGZhbHNlKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBBY2Nlc3NpYmxlVGV4dDo6c2V0QXR0cmlidXRlcyhsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVu
ZE9mZnNldCwgQlNUUiogYXR0cmlidXRlcykKK3sKKyAgICBpZiAoaW5pdGlhbENoZWNrKCkgPT0g
RV9QT0lOVEVSKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgcmV0dXJuIEVfTk9U
SU1QTDsKK30KKworLy8gSUFjY2Vzc2libGUyCitIUkVTVUxUIEFjY2Vzc2libGVUZXh0OjpnZXRf
YXR0cmlidXRlcyhCU1RSKiBhdHRyaWJ1dGVzKQoreworICAgIFdURjo6U3RyaW5nIHRleHQoInRl
eHQtbW9kZWw6YTEiKTsKKyAgICAqYXR0cmlidXRlcyA9IFN5c0FsbG9jU3RyaW5nTGVuKHRleHQu
Y2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8g
SVVua25vd24KK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQWNjZXNzaWJsZVRleHQ6OlF1ZXJ5
SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmIChJc0Vx
dWFsR1VJRChyaWlkLCBfX3V1aWRvZihJQWNjZXNzaWJsZVRleHQpKSkKKyAgICAgICAgKnBwdk9i
amVjdCA9IHN0YXRpY19jYXN0PElBY2Nlc3NpYmxlVGV4dCo+KHRoaXMpOworICAgIGVsc2UgaWYg
KElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElBY2Nlc3NpYmxlRWRpdGFibGVUZXh0KSkpCisg
ICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJsZUVkaXRhYmxlVGV4dCo+
KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElBY2Nlc3Np
YmxlKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJQWNjZXNzaWJsZSo+KHRo
aXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElEaXNwYXRjaCkp
KQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGUqPih0aGlzKTsK
KyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJVW5rbm93bikpKQorICAg
ICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGUqPih0aGlzKTsKKyAgICBl
bHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJQWNjZXNzaWJsZTJfMikpKQorICAg
ICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGUyXzIqPih0aGlzKTsKKyAg
ICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJQWNjZXNzaWJsZTIpKSkKKyAg
ICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElBY2Nlc3NpYmxlMio+KHRoaXMpOworICAg
IGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElBY2Nlc3NpYmxlQ29tcGFyYWJs
ZSkpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SUFjY2Vzc2libGVDb21wYXJh
YmxlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSVNl
cnZpY2VQcm92aWRlcikpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVNlcnZp
Y2VQcm92aWRlcio+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVp
ZG9mKEFjY2Vzc2libGVCYXNlKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmxlQmFzZSo+KHRoaXMpOworICAgIGVsc2UgeworICAgICAgICAqcHB2T2JqZWN0ID0g
MDsKKyAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisgICAgfQorICAgIEFkZFJlZigpOwor
ICAgIHJldHVybiBTX09LOworfQorCitVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBY2Nlc3NpYmxl
VGV4dDo6UmVsZWFzZSh2b2lkKQoreworICAgIEFTU0VSVChtX3JlZkNvdW50ID4gMCk7CisgICAg
aWYgKC0tbV9yZWZDb3VudCkKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CisgICAgZGVsZXRl
IHRoaXM7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBBY2Nlc3NpYmxlVGV4dDo6Y29udmVydFNw
ZWNpYWxPZmZzZXQoaW50IG9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9vYmplY3QpOworICAgIAor
ICAgIGlmIChvZmZzZXQgPT0gSUEyX1RFWFRfT0ZGU0VUX0xFTkdUSCkgCisgICAgICAgIHJldHVy
biBtX29iamVjdC0+c3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKKyAgICBpZiAob2Zmc2V0ID09IElB
Ml9URVhUX09GRlNFVF9DQVJFVCkgeworICAgICAgICBsb25nIGNhcmV0T2Zmc2V0OworICAgICAg
ICBnZXRfY2FyZXRPZmZzZXQoJmNhcmV0T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGNhcmV0T2Zm
c2V0OworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorCitIUkVTVUxUIEFjY2Vzc2libGVU
ZXh0Ojppbml0aWFsQ2hlY2soKQoreworICAgIGlmICghbV9vYmplY3QpCisgICAgICAgIHJldHVy
biBFX0ZBSUw7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIEVfRkFJTDsKKworICAgIHJldHVybiBTX09LOworfQpJbmRleDogU291cmNlL1dlYktp
dC93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93
aW4vQWNjZXNzaWJsZVRleHRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9BY2Nlc3NpYmxlVGV4dEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWNj
ZXNzaWJsZVRleHRJbXBsX2gKKyNkZWZpbmUgQWNjZXNzaWJsZVRleHRJbXBsX2gKKworI2luY2x1
ZGUgIkFjY2Vzc2libGVCYXNlLmgiCisKK2NsYXNzIEFjY2Vzc2libGVUZXh0IDogcHVibGljIEFj
Y2Vzc2libGVCYXNlLCBwdWJsaWMgSUFjY2Vzc2libGVUZXh0MiwgcHVibGljIElBY2Nlc3NpYmxl
RWRpdGFibGVUZXh0IHsKK3B1YmxpYzoKKyAgICBBY2Nlc3NpYmxlVGV4dChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0KiwgSFdORCk7CisgICAgdmlydHVhbCB+QWNjZXNzaWJsZVRleHQoKSB7
IH0KKworICAgIC8vIElBY2Nlc3NpYmxlVGV4dAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBhZGRTZWxlY3Rpb24obG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQp
OworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRfYXR0cmlidXRlcyhs
b25nIG9mZnNldCwgbG9uZyogc3RhcnRPZmZzZXQsIGxvbmcqIGVuZE9mZnNldCwgQlNUUiogdGV4
dEF0dHJpYnV0ZXMpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRf
Y2FyZXRPZmZzZXQobG9uZyogb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgZ2V0X2NoYXJhY3RlckV4dGVudHMobG9uZyBvZmZzZXQsIGVudW0gSUEyQ29vcmRp
bmF0ZVR5cGUgY29vcmRUeXBlLCBsb25nKiB4LCBsb25nKiB5LCBsb25nKiB3aWR0aCwgbG9uZyog
aGVpZ2h0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X25TZWxl
Y3Rpb25zKGxvbmcqIG5TZWxlY3Rpb25zKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgZ2V0X29mZnNldEF0UG9pbnQobG9uZyB4LCBsb25nIHksIGVudW0gSUEyQ29vcmRp
bmF0ZVR5cGUgY29vcmRUeXBlLCBsb25nKiBvZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBnZXRfc2VsZWN0aW9uKGxvbmcgc2VsZWN0aW9uSW5kZXgsIGxvbmcq
IHN0YXJ0T2Zmc2V0LCBsb25nKiBlbmRPZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBnZXRfdGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwg
QlNUUiogdGV4dCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF90
ZXh0QmVmb3JlT2Zmc2V0KGxvbmcgb2Zmc2V0LCBlbnVtIElBMlRleHRCb3VuZGFyeVR5cGUgYm91
bmRhcnlUeXBlLCBsb25nKiBzdGFydE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiB0ZXh0
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X3RleHRBZnRlck9m
ZnNldChsb25nIG9mZnNldCwgZW51bSBJQTJUZXh0Qm91bmRhcnlUeXBlIGJvdW5kYXJ5VHlwZSwg
bG9uZyogc3RhcnRPZmZzZXQsIGxvbmcqIGVuZE9mZnNldCwgQlNUUiogdGV4dCk7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldF90ZXh0QXRPZmZzZXQobG9uZyBvZmZz
ZXQsIGVudW0gSUEyVGV4dEJvdW5kYXJ5VHlwZSBib3VuZGFyeVR5cGUsIGxvbmcqIHN0YXJ0T2Zm
c2V0LCBsb25nKiBlbmRPZmZzZXQsIEJTVFIqIHRleHQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSByZW1vdmVTZWxlY3Rpb24obG9uZyBzZWxlY3Rpb25JbmRleCk7Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldENhcmV0T2Zmc2V0KGxvbmcg
b2Zmc2V0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0U2VsZWN0
aW9uKGxvbmcgc2VsZWN0aW9uSW5kZXgsIGxvbmcgc3RhcnRPZmZzZXQsIGxvbmcgZW5kT2Zmc2V0
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X25DaGFyYWN0ZXJz
KGxvbmcqIGNoYXJhY3RlcnMpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBzY3JvbGxTdWJzdHJpbmdUbyhsb25nIHN0YXJ0SW5kZXgsIGxvbmcgZW5kSW5kZXgsIGVudW0g
SUEyU2Nyb2xsVHlwZSBzY3JvbGxUeXBlKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgc2Nyb2xsU3Vic3RyaW5nVG9Qb2ludChsb25nIHN0YXJ0SW5kZXgsIGxvbmcgZW5k
SW5kZXgsIGVudW0gSUEyQ29vcmRpbmF0ZVR5cGUgY29vcmRpbmF0ZVR5cGUsIGxvbmcgeCwgbG9u
ZyB5KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZ2V0X25ld1RleHQo
SUEyVGV4dFNlZ21lbnQqIG5ld1RleHQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBnZXRfb2xkVGV4dChJQTJUZXh0U2VnbWVudCogb2xkVGV4dCk7CisgICAgCisgICAg
Ly8gSUFjY2Vzc2libGVUZXh0MgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBnZXRfYXR0cmlidXRlUmFuZ2UobG9uZyBvZmZzZXQsIEJTVFIgZmlsdGVyLCBsb25nKiBzdGFy
dE9mZnNldCwgbG9uZyogZW5kT2Zmc2V0LCBCU1RSKiBhdHRyaWJ1dGVWYWx1ZXMpOworCisgICAg
Ly8gSUFjY2Vzc2libGVFZGl0YWJsZVRleHQKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgY29weVRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQpOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkZWxldGVUZXh0KGxvbmcgc3RhcnRP
ZmZzZXQsIGxvbmcgZW5kT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgaW5zZXJ0VGV4dChsb25nIG9mZnNldCwgQlNUUiogdGV4dCk7CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGN1dFRleHQobG9uZyBzdGFydE9mZnNldCwgbG9uZyBl
bmRPZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwYXN0ZVRl
eHQobG9uZyBvZmZzZXQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBy
ZXBsYWNlVGV4dChsb25nIHN0YXJ0T2Zmc2V0LCBsb25nIGVuZE9mZnNldCwgQlNUUiogdGV4dCk7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldEF0dHJpYnV0ZXMobG9u
ZyBzdGFydE9mZnNldCwgbG9uZyBlbmRPZmZzZXQsIEJTVFIqIGF0dHJpYnV0ZXMpOworCisgICAg
Ly8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJ
bnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOworICAgIHZpcnR1YWwgVUxP
TkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpIHsgcmV0dXJuICsrbV9yZWZDb3VudDsg
fQorICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsKKwor
ICAgIC8vIElBY2Nlc3NpYmxlQmFzZQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBnZXRfYXR0cmlidXRlcyhCU1RSKiBhdHRyaWJ1dGVzKTsKKworcHJpdmF0ZToKKyAgICBp
bnQgY29udmVydFNwZWNpYWxPZmZzZXQoaW50IHNwZWNpYWxPZmZzZXQpOworICAgIEhSRVNVTFQg
aW5pdGlhbENoZWNrKCk7Cit9OworCisjZW5kaWYgLy8gQWNjZXNzaWJsZVRleHRfaApJbmRleDog
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0NTI1KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTMtMDgtMjMgIFJvZ2Vy
IEZvbmcgIDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KKworICAgICAgICA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTgyOT4gQWRkIElBY2Nlc3NpYmxlVGV4dCBhbmQg
SUFjY2Vzc2libGVFZGl0YWJsZVRleHQgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgSUFjY2Vzc2libGVU
ZXh0IGFuZCBJQWNjZXNzaWJsZUVkaXRhYmxlVGV4dCBpbnRlcmZhY2VzIGFuZCBpbXBsZW1lbnRh
dGlvbiB0byBBcHBsZVdpbiBwb3J0LgorCisgICAgICAgICogQWNjZXNzaWJsZUJhc2UuY3BwOgor
ICAgICAgICAoQWNjZXNzaWJsZUJhc2U6OmNyZWF0ZUluc3RhbmNlKTogQ3JlYXRlIGFuIEFjY2Vz
c2libGVUZXh0IGluc3RhbmNlIHdoZW4gbmVjZXNzYXJ5LgorICAgICAgICAoQWNjZXNzaWJsZUJh
c2U6OlF1ZXJ5U2VydmljZSk6CisgICAgICAgICogQWNjZXNzaWJsZUJhc2UuaDoKKyAgICAgICAg
KiBBY2Nlc3NpYmxlVGV4dEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEFjY2Vzc2libGVUZXh0
OjpBY2Nlc3NpYmxlVGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6YWRkU2VsZWN0aW9u
KToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfYXR0cmlidXRlcyk6IE5vdCBJbXBsZW1l
bnRlZAorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmdldF9jYXJldE9mZnNldCk6CisgICAgICAg
IChBY2Nlc3NpYmxlVGV4dDo6Z2V0X2NoYXJhY3RlckV4dGVudHMpOgorICAgICAgICAoQWNjZXNz
aWJsZVRleHQ6OmdldF9uU2VsZWN0aW9ucyk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Z2V0
X29mZnNldEF0UG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmdldF9zZWxlY3Rpb24p
OgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmdldF90ZXh0KToKKyAgICAgICAgKEFjY2Vzc2li
bGVUZXh0OjpnZXRfdGV4dEJlZm9yZU9mZnNldCk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAo
QWNjZXNzaWJsZVRleHQ6OmdldF90ZXh0QWZ0ZXJPZmZzZXQpOiBOb3QgSW1wbGVtZW50ZWQKKyAg
ICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfdGV4dEF0T2Zmc2V0KTogTm90IEltcGxlbWVudGVk
CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6cmVtb3ZlU2VsZWN0aW9uKToKKyAgICAgICAgKEFj
Y2Vzc2libGVUZXh0OjpzZXRDYXJldE9mZnNldCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6
c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpnZXRfbkNoYXJhY3RlcnMp
OgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvKToKKyAgICAgICAg
KEFjY2Vzc2libGVUZXh0OjpzY3JvbGxTdWJzdHJpbmdUb1BvaW50KToKKyAgICAgICAgKEFjY2Vz
c2libGVUZXh0OjpnZXRfbmV3VGV4dCk6IE5vdCBJbXBsZW1lbnRlZAorICAgICAgICAoQWNjZXNz
aWJsZVRleHQ6OmdldF9vbGRUZXh0KTogTm90IEltcGxlbWVudGVkCisgICAgICAgIChBY2Nlc3Np
YmxlVGV4dDo6Z2V0X2F0dHJpYnV0ZVJhbmdlKTogTm90IEltcGxlbWVudGVkCisgICAgICAgIChB
Y2Nlc3NpYmxlVGV4dDo6Y29weVRleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmRlbGV0
ZVRleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6Omluc2VydFRleHQpOgorICAgICAgICAo
QWNjZXNzaWJsZVRleHQ6OmN1dFRleHQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnBhc3Rl
VGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6cmVwbGFjZVRleHQpOgorICAgICAgICAo
QWNjZXNzaWJsZVRleHQ6OnNldEF0dHJpYnV0ZXMpOiBOb3QgSW1wbGVtZW50ZWQKKyAgICAgICAg
KEFjY2Vzc2libGVUZXh0OjpRdWVyeUludGVyZmFjZSk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4
dDo6UmVsZWFzZSk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6Y29udmVydFNwZWNpYWxPZmZz
ZXQpOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmluaXRpYWxDaGVjayk6CisgICAgICAgICog
QWNjZXNzaWJsZVRleHRJbXBsLmg6IEFkZGVkLgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6On5B
Y2Nlc3NpYmxlVGV4dCk6CisgICAgICAgIChBY2Nlc3NpYmxlVGV4dDo6QWRkUmVmKToKKwogMjAx
My0wOC0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2luZG93c10gUmVmYWN0b3IgV2ViRnJhbWUgdG8gY29tcG9zZSB3aXRoIFdlYkZyYW1lTG9hZGVy
Q2xpZW50Cg==
</data>
<flag name="review"
          id="231554"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>