<?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>44778</bug_id>
          
          <creation_ts>2010-08-27 10:09:04 -0700</creation_ts>
          <short_desc>AX: Support AccessibilityTextMarkers in DRT</short_desc>
          <delta_ts>2010-09-09 12:50:46 -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>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45485</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270569</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-27 10:09:04 -0700</bug_when>
    <thetext>In order to effectively make changes in the text marker system that AX exposes, we need support in DRT to access and manipulate text markers.

This bug is about adding basic coverage to DRT to do some of the common text marker operations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270574</commentid>
    <comment_count>1</comment_count>
      <attachid>65728</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-27 10:23:47 -0700</bug_when>
    <thetext>Created attachment 65728
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270576</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 10:29:30 -0700</bug_when>
    <thetext>Attachment 65728 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/DumpRenderTree/AccessibilityTextMarker.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/DumpRenderTree/AccessibilityTextMarker.h:97:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
WebKitTools/DumpRenderTree/AccessibilityUIElement.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 16 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>270582</commentid>
    <comment_count>3</comment_count>
      <attachid>65731</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-27 10:39:27 -0700</bug_when>
    <thetext>Created attachment 65731
patch

fix style warnings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270668</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 12:38:20 -0700</bug_when>
    <thetext>Attachment 65731 did not build on gtk:
Build output: http://queues.webkit.org/results/3831027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270780</commentid>
    <comment_count>5</comment_count>
      <attachid>65774</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-27 15:25:25 -0700</bug_when>
    <thetext>Created attachment 65774
patch

attempt to fix gtk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270847</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 17:37:48 -0700</bug_when>
    <thetext>Attachment 65774 did not build on gtk:
Build output: http://queues.webkit.org/results/3824036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270850</commentid>
    <comment_count>7</comment_count>
      <attachid>65796</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-27 17:44:40 -0700</bug_when>
    <thetext>Created attachment 65796
patch

fix build on gtk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270932</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-27 23:07:18 -0700</bug_when>
    <thetext>Attachment 65796 did not build on gtk:
Build output: http://queues.webkit.org/results/3888046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271168</commentid>
    <comment_count>9</comment_count>
      <attachid>65796</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-29 11:36:30 -0700</bug_when>
    <thetext>Comment on attachment 65796
patch

Build is still broken on GTK. Clearing review flag so you can fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271472</commentid>
    <comment_count>10</comment_count>
      <attachid>65926</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-30 09:48:53 -0700</bug_when>
    <thetext>Created attachment 65926
patch

try to fix GTK build failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275288</commentid>
    <comment_count>11</comment_count>
      <attachid>65926</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-09-07 14:20:56 -0700</bug_when>
    <thetext>Comment on attachment 65926
patch

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

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:2527
&gt; +    // Used only by DumpRenderTree (so far)
Nit: Need period at the end of the sentence.

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:2528
&gt; +    if ([attribute isEqualToString: @&quot;AXStartTextMarkerForTextMarkerRange&quot;]) {
Nit: No space after &quot;isEqualToString:&quot; and its argument.  (I guess this is the prevailing style in this file, but it should eventually be fixed.)

&gt; WebCore/accessibility/mac/AccessibilityObjectWrapper.mm:2533
&gt; +    if ([attribute isEqualToString: @&quot;AXEndTextMarkerForTextMarkerRange&quot;]) {
Ditto.

&gt; WebKitTools/DumpRenderTree/AccessibilityTextMarker.cpp:49
&gt; +    return JSValueMakeBoolean(context, toTextMarker(thisObject)-&gt;isEqual(toTextMarker(otherMarker)));
This method might read better as:

{
    if (argumentCount != 1)
        return JSValueMakeBoolean(context, false);

    JSObjectRef otherMarker = JSValueToObject(context, arguments[0], exception);
    return JSValueMakeBoolean(context, toTextMarker(thisObject)-&gt;isEqual(toTextMarker(otherMarker)));
}

&gt; WebKitTools/DumpRenderTree/AccessibilityTextMarker.cpp:103
&gt; +    return JSValueMakeBoolean(context, toTextMarkerRange(thisObject)-&gt;isEqual(toTextMarkerRange(otherMarker)));
Same comment as isMarkerEqualCallback().

&gt; WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp:727
&gt; +    return 0;
Would it be clearer to say this instead:

    return AccessibilityTextMarkerRange(0);

Maybe the implicit constructor is okay, though.

&gt; WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp:750
&gt; +AccessibilityUIElement AccessibilityUIElement::accessibilityElementForTextMarker(AccessibilityTextMarker*)
Should this return a pointer instead of an object?  I guess there is at least one other method that returns a AccessibilityUIElement object.

&gt; WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:690
&gt; +			developmentRegion = English;
This change should not be checked in.

&gt; WebKitTools/DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:692
&gt; +			knownRegions = (
This change should not be checked in.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:28
&gt; +#import &quot;AccessibilityTextMarker.h&quot;
Nit: Alphabetize the #Import statements here.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:32
&gt; +#if SUPPORTS_AX_TEXTMARKERS
Not sure if this is needed since it&apos;s always defined as 1 for PLATFORM(MAC), but it&apos;s fine as-is.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:38
&gt; +        CFRetain(m_textMarker);
It would be nice to use a RetainPtr&lt;&gt;() in AccessibilityTextMarker instead of having to manually retain/release the object in the implementation.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:45
&gt; +        CFRetain(m_textMarker);
Ditto.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:51
&gt; +        CFRelease(m_textMarker);
Ditto.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:66
&gt; +        CFRetain(m_textMarkerRange);
It would be nice to use a RetainPtr&lt;&gt;() in AccessibilityTextMarkerRange instead of having to manually retain/release the object in the implementation.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:73
&gt; +        CFRetain(m_textMarkerRange);
Ditto.

&gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:79
&gt; +        CFRelease(m_textMarkerRange);
Ditto.

&gt; LayoutTests/platform/mac/accessibility/element-for-text-marker.html:13
&gt; +&lt;div id=&quot;text1&quot; tabindex=0&gt;text block&lt;/div&gt;
Nit:  tabindex=&quot;0&quot;

&gt; LayoutTests/platform/mac/accessibility/element-for-text-marker.html:21
&gt; +    description(&quot;This tests the text marker system will return the right element when given a text marker&quot;);
Nit:  Change &quot;right element&quot; to &quot;correct element&quot;.
Nit:  Add a period to the end of the sentence.

&gt; LayoutTests/platform/mac/accessibility/text-marker-length.html:12
&gt; +&lt;div id=&quot;text&quot; tabindex=0&gt;text block&lt;/div&gt;
Nit:  tabindex=&quot;0&quot;

r=me but consider the comments above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276210</commentid>
    <comment_count>12</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-08 17:34:14 -0700</bug_when>
    <thetext>Will make all changes possible

&gt; &gt; WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp:727
&gt; &gt; +    return 0;
&gt; Would it be clearer to say this instead:
&gt; 
&gt;     return AccessibilityTextMarkerRange(0);
&gt; 
&gt; Maybe the implicit constructor is okay, though.
&gt;

leaving as is, since the rest of the file follows that format.
 
&gt; &gt; WebKitTools/DumpRenderTree/AccessibilityUIElement.cpp:750
&gt; &gt; +AccessibilityUIElement AccessibilityUIElement::accessibilityElementForTextMarker(AccessibilityTextMarker*)
&gt; Should this return a pointer instead of an object?  I guess there is at least one other method that returns a AccessibilityUIElement object.
&gt; 

The rest of the file does not return pointers, so leaving as is. will consider changing that in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276231</commentid>
    <comment_count>13</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-08 18:06:38 -0700</bug_when>
    <thetext>
&gt; &gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:38
&gt; &gt; +        CFRetain(m_textMarker);
&gt; It would be nice to use a RetainPtr&lt;&gt;() in AccessibilityTextMarker instead of having to manually retain/release the object in the implementation.
&gt; 

Since m_textMarker is an id, RetainPtr is not working. were you thinking of something besides

RetainPtr&lt;PlatformTextMarkerRange&gt; m_textMarkerRange;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276545</commentid>
    <comment_count>14</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-09 10:11:05 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; &gt; WebKitTools/DumpRenderTree/mac/AccessibilityTextMarkerMac.mm:38
&gt; &gt; &gt; +        CFRetain(m_textMarker);
&gt; &gt; It would be nice to use a RetainPtr&lt;&gt;() in AccessibilityTextMarker instead of having to manually retain/release the object in the implementation.
&gt; &gt; 
&gt; 
&gt; Since m_textMarker is an id, RetainPtr is not working. were you thinking of something besides
&gt; 
&gt; RetainPtr&lt;PlatformTextMarkerRange&gt; m_textMarkerRange;

Figured out the RetainPtr stuff now. should be good to go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276559</commentid>
    <comment_count>15</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-09 10:32:47 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276685</commentid>
    <comment_count>16</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-09-09 12:50:46 -0700</bug_when>
    <thetext>fix GTK and win
http://trac.webkit.org/changeset/67105</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65728</attachid>
            <date>2010-08-27 10:23:47 -0700</date>
            <delta_ts>2010-08-27 10:39:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>41711</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjIzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMjcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcnMgaW4gRFJUCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDc3OAorCisgICAgICAgIFBy
b3ZpZGUgc3VwcG9ydCBpbiBEUlQgZm9yIGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSB0
ZXh0IG1hcmtlciBzeXN0ZW0gdGhhdCBBWCBleHBvc2VzLgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgZnV0dXJlIGJ1ZyBmaXhlcyBpbiB0aGUgdGV4dCBtYXJrZXIgc3lzdGVtIHRvIGJlIGFkZXF1
YXRlbHkgdGVzdGVkLgorCisgICAgICAgIFRlc3RzOiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci5odG1sCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgt
W0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpm
b3JQYXJhbWV0ZXI6XSk6CisKIDIwMTAtMDgtMjcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5k
ZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTI0LDYgKzI1MjQsMTcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0
cgogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVuZ3RoXTsKICAgICB9
CiAKKyAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhcikKKyAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2UiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFu
Z2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFy
a2VyUmFuZ2VdOworICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2
aXNpYmxlUG9zUmFuZ2Uuc3RhcnQpOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzogQCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAg
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAg
ICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2UuZW5k
KTsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDZWxsRm9y
Q29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlmIChh
cnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50XSAhPSAyKQpJbmRleDogV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjYy
MzEpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2
OSBAQAorMjAxMC0wOC0yNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFYOiBTdXBw
b3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VycyBpbiBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzc4CisKKyAgICAgICAgQWRkIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIGFuZCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHdoaWNoIGVu
Y2Fwc3VsYXRlIHRoZSBBWFRleHRNYXJrZXJzIAorICAgICAgICB0aGF0IFdlYkNvcmUgdXNlcyB3
aGVuIHZlbmRpbmcgaW5mb3JtYXRpb24gYWJvdXQgaXRzIFZpc2libGVQb3NpdGlvbnMgdGhyb3Vn
aCBBWC4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgbmV3IG1ldGhvZHMgaW4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCB0byByZXRyaWV2ZSBhbmQgdXNlIHRleHQgbWFya2VycywgYW5kIHNvbWUg
YmFzaWMKKyAgICAgICAgbWV0aG9kcyBmb3IgZW5jYXBzdWxhdGluZyBhbmQgY2hlY2tpbmcgZXF1
YWxpdHkuCisKKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IGZ1dHVyZSBidWcgZml4ZXMgaW4gdGhl
IHRleHQgbWFya2VyIHN5c3RlbSB0byBiZSBhZGVxdWF0ZWx5IHRlc3RlZC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcDogQWRkZWQuCisgICAg
ICAgICh0b1RleHRNYXJrZXIpOgorICAgICAgICAoaXNNYXJrZXJFcXVhbENhbGxiYWNrKToKKyAg
ICAgICAgKG1hcmtlckZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
OjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcyk6CisgICAgICAgICh0b1RleHRNYXJrZXJSYW5nZSk6Cisg
ICAgICAgIChpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjayk6CisgICAgICAgIChtYXJrZXJSYW5n
ZUZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6Om1ha2VK
U0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIuaDogQWRkZWQuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlcjo6cGxhdGZvcm1UZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6Cisg
ICAgICAgICh0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2spOgorICAgICAgICAodGV4
dE1hcmtlclJhbmdlTGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAodGV4dE1hcmtlclJhbmdlRm9y
TWFya2Vyc0NhbGxiYWNrKToKKyAgICAgICAgKHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZUNhbGxiYWNrKToKKyAgICAgICAgKGVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VD
YWxsYmFjayk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXJDYWxs
YmFjayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VG
b3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJS
YW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tOiBBZGRlZC4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
cik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZTo6aXNFcXVhbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9y
VGV4dE1hcmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LnZjcHJvajoKKwogMjAxMC0wOC0yNyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxh
aW5Abm9raWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZCBteXNlbGYgdG8gdGhlIGNv
bW1pdHRlcnMgbGlzdC4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4K
KyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgiCisKKyNwcmFnbWEgbWFyayBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcgorCisvLyBDYWxsYmFjayBtZXRob2RzCisKK0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyKiB0b1RleHRNYXJrZXIoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaXNNYXJrZXJFcXVhbENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU09iamVjdFJlZiBvdGhl
ck1hcmtlciA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgb3RoZXJN
YXJrZXIgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBm
YWxzZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b1Rl
eHRNYXJrZXIodGhpc09iamVjdCktPmlzRXF1YWwodG9UZXh0TWFya2VyKG90aGVyTWFya2VyKSkp
OworfQorCisvLyBEZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJGaW5hbGl6ZShKU09i
amVjdFJlZiB0aGlzT2JqZWN0KQoreworICAgIGRlbGV0ZSB0b1RleHRNYXJrZXIodGhpc09iamVj
dCk7Cit9CisKKy8vIE9iamVjdCBDcmVhdGlvbgorCitKU09iamVjdFJlZiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyJiBlbGVtZW50KQoreworICAgIHJl
dHVybiBKU09iamVjdE1ha2UoY29udGV4dCwgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OmdldEpT
Q2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGVsZW1lbnQpKTsKK30KKworSlND
bGFzc1JlZiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcygpCit7CisgICAgc3Rh
dGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgICAgIHsgMCwgMCwgMCwg
MCB9CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5j
dGlvbnNbXSA9IHsKKyAgICAgICAgeyAiaXNFcXVhbCIsIGlzTWFya2VyRXF1YWxDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpT
Q2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NB
dHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIiLCAwLCBzdGF0aWNWYWx1ZXMs
IHN0YXRpY0Z1bmN0aW9ucywKKyAgICAgICAgMCwgbWFya2VyRmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBKU0NsYXNzUmVmIGFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24p
OworICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckNsYXNzOworfQorCisjcHJhZ21h
IG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZQorCisvLyBDYWxsYmFjayBtZXRob2Rz
CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHRvVGV4dE1hcmtlclJhbmdlKEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgaXNNYXJrZXJSYW5nZUVxdWFsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIEpTT2JqZWN0UmVmIG90aGVyTWFya2VyID0gMDsKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBvdGhlck1hcmtlciA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGZhbHNlKTsKKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmpl
Y3QpLT5pc0VxdWFsKHRvVGV4dE1hcmtlclJhbmdlKG90aGVyTWFya2VyKSkpOworfQorCisvLyBE
ZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJSYW5nZUZpbmFsaXplKEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QpCit7CisgICAgZGVsZXRlIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmplY3Qp
OworfQorCisvLyBPYmplY3QgQ3JlYXRpb24KKworSlNPYmplY3RSZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYgZWxlbWVu
dCkKK3sKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGNvbnRleHQsIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OmdldEpTQ2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UoZWxlbWVudCkpOworfQorCitKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U6OmdldEpTQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVl
c1tdID0geworICAgICAgICB7IDAsIDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGlj
IEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgImlzRXF1
YWwiLCBpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAs
IDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVm
aW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAor
ICAgICAgICAwLCBtYXJrZXJSYW5nZUZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBhY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJl
dHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlQ2xhc3M7Cit9CkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcl9oCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2Rl
ZmluZSBJTVBMRU1FTlRTX0FYX1RFWFRNQVJLRVJTIDEKKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
TUFDKQorI2lmZGVmIF9fT0JKQ19fCit0eXBlZGVmIGlkIFBsYXRmb3JtVGV4dE1hcmtlcjsKK3R5
cGVkZWYgaWQgUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2U7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3Qg
b2JqY19vYmplY3QqIFBsYXRmb3JtVGV4dE1hcmtlcjsKK3R5cGVkZWYgc3RydWN0IG9iamNfb2Jq
ZWN0KiBQbGF0Zm9ybVRleHRNYXJrZXJSYW5nZTsKKyNlbmRpZgorI2Vsc2UKK3R5cGVkZWYgdm9p
ZCogUGxhdGZvcm1UZXh0TWFya2VyOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVRleHRNYXJrZXJS
YW5nZTsKKyNlbmRpZgorCitjbGFzcyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OworCitjbGFzcyBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB7CitwdWJsaWM6CisgICAgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIoUGxhdGZvcm1UZXh0TWFya2VyKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihj
b25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciYpOworICAgIH5BY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlcigpOworICAgIAorICAgIFBsYXRmb3JtVGV4dE1hcmtlciBwbGF0Zm9ybVRleHRNYXJrZXIo
KSBjb25zdCB7IHJldHVybiBtX3RleHRNYXJrZXI7IH0KKyAgICAKKyAgICBzdGF0aWMgSlNPYmpl
Y3RSZWYgbWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoSlNDb250ZXh0UmVmLCBjb25zdCBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciYpOworICAgIGJvb2wgaXNFcXVhbChBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciopOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRK
U0NsYXNzKCk7CisgICAgUGxhdGZvcm1UZXh0TWFya2VyIG1fdGV4dE1hcmtlcjsKK307CisKK2Ns
YXNzIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgeworcHVibGljOgorICAgIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UoUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UpOworICAgIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZSYpOworICAgIH5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKCk7CisgICAgCisgICAgUGxh
dGZvcm1UZXh0TWFya2VyUmFuZ2UgcGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3RleHRNYXJrZXJSYW5nZTsgfQorICAgIAorICAgIHN0YXRpYyBKU09iamVjdFJlZiBt
YWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKEpTQ29udGV4dFJlZiwgY29uc3QgQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYpOworICAgIGJvb2wgaXNFcXVhbChBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlKik7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBKU0NsYXNz
UmVmIGdldEpTQ2xhc3MoKTsKKyAgICBQbGF0Zm9ybVRleHRNYXJrZXIgbV90ZXh0TWFya2VyUmFu
Z2U7ICAgIAorfTsKKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRvVGV4dE1hcmtlcihKU09i
amVjdFJlZiBvYmplY3QpOworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogdG9UZXh0TWFy
a2VyUmFuZ2UoSlNPYmplY3RSZWYgb2JqZWN0KTsKKworI2lmICFJTVBMRU1FTlRTX0FYX1RFWFRN
QVJLRVJTCitpbmxpbmUgdm9pZCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIoUGxhdGZvcm1UZXh0TWFya2VyKSB7IH0KK2lubGluZSB2b2lkIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb25zdCBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciYpIHsgfQoraW5saW5lIHZvaWQgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6
On5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcigpIHsgfQoraW5saW5lIGJvb2wgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXI6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKSB7IH0KKworaW5s
aW5lIHZvaWQgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6QWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZShQbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSkgeyB9CitpbmxpbmUgdm9pZCBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNv
bnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UmKSB7IH0KK2lubGluZSB2b2lkIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6On5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKCkg
eyB9CitpbmxpbmUgYm9vbCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjppc0VxdWFsKEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKSB7IH0KKyNlbmRpZgorCisjZW5kaWYgLy8gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudF9oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5jcHAJKHJldmlzaW9uIDY2MjI4KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNiw2ICs0MDYs
NjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlU2VsZWN0aW9uQ2FsbGJhYwogICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYg
dGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiB1aUVsZW1lbnQgPSAwOworICAg
IGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAgICAgIHVpRWxlbWVudCA9IHRvQVhFbGVtZW50
KEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAg
IAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjptYWtlSlNBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnRleHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT50
ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHVpRWxlbWVudCkpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiB0ZXh0TWFya2VyUmFuZ2VMZW5ndGhDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2UgPSAwOwor
ICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAgICAgIHJhbmdlID0gdG9UZXh0TWFya2Vy
UmFuZ2UoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIChpbnQpdG9BWEVs
ZW1lbnQodGhpc09iamVjdCktPnRleHRNYXJrZXJSYW5nZUxlbmd0aChyYW5nZSkpOworfQorCitz
dGF0aWMgSlNWYWx1ZVJlZiB0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBz
dGFydE1hcmtlciA9IDA7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9
IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMikgeworICAgICAgICBzdGFydE1hcmtlciA9
IHRvVGV4dE1hcmtlcihKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pKTsKKyAgICAgICAgZW5kTWFya2VyID0gdG9UZXh0TWFya2VyKEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZShjb250ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+dGV4dE1hcmtl
clJhbmdlRm9yTWFya2VycyhzdGFydE1hcmtlciwgZW5kTWFya2VyKSk7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZUNhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlKiBtYXJrZXJSYW5nZSA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAg
ICAgbWFya2VyUmFuZ2UgPSB0b1RleHRNYXJrZXJSYW5nZShKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXI6Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGNvbnRleHQsIHRv
QVhFbGVtZW50KHRoaXNPYmplY3QpLT5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2Uo
bWFya2VyUmFuZ2UpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZW5kVGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiBtYXJrZXJSYW5nZSA9IDA7CisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgbWFya2VyUmFuZ2UgPSB0b1RleHRNYXJrZXJS
YW5nZShKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsK
KyAgICAKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6Om1ha2VKU0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyKGNvbnRleHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5lbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKSk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlUmVmIGFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlckNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogbWFy
a2VyID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBtYXJrZXIgPSB0
b1RleHRNYXJrZXIoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1ha2VKU0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPmFj
Y2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihtYXJrZXIpKTsKK30KIAogLy8gU3RhdGlj
IFZhbHVlIEdldHRlcnMKIApAQCAtNjYyLDYgKzcxOCw0MiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBy
ZW1vdmVOb3RpZmljYXRpb25MaXN0CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogfQogCisvLyBJbXBsZW1lbnRhdGlvbgorCisjaWYgIUlNUExFTUVOVFNfQVhfVEVY
VE1BUktFUlMKKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
KQoreworICAgIHJldHVybiAwOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4
dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKQoreworICAg
IHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIqLCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopOworeworICAgIHJldHVybiAwOworfQor
CitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSop
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSopCit7CisgICAgcmV0dXJuIDA7ICAgCit9CisKK0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eUVsZW1l
bnRGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikKK3sKKyAgICByZXR1cm4g
MDsKK30KKworI2VuZGlmCisKIC8vIERlc3RydWN0aW9uCiAKIHN0YXRpYyB2b2lkIGZpbmFsaXpl
KEpTT2JqZWN0UmVmIHRoaXNPYmplY3QpCkBAIC03NzQsNiArODY2LDEyIEBAIEpTQ2xhc3NSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlMKICAgICAgICAgeyAidGFrZVNlbGVjdGlvbiIs
IHRha2VTZWxlY3Rpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJhZGRTZWxlY3Rpb24i
LCBhZGRTZWxlY3Rpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJyZW1vdmVTZWxlY3Rp
b24iLCByZW1vdmVTZWxlY3Rpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJ0ZXh0TWFy
a2VyUmFuZ2VGb3JFbGVtZW50IiwgdGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgInRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMiLCB0ZXh0TWFya2Vy
UmFuZ2VGb3JNYXJrZXJzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlclJhbmdlIiwgc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdl
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZSIsIGVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAor
ICAgICAgICB7ICJhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIiLCBhY2Nlc3NpYmls
aXR5RWxlbWVudEZvclRleHRNYXJrZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJ0ZXh0
TWFya2VyUmFuZ2VMZW5ndGgiLCB0ZXh0TWFya2VyUmFuZ2VMZW5ndGhDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7IDAsIDAsIDAgfQogICAgIH07CiAKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHJldmlzaW9uIDY2
MjI4KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCIKIAog
I2lmIFBMQVRGT1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwpAQCAtMTgzLDYgKzE4NCwxNCBAQCBw
dWJsaWM6CiAgICAgLy8gVGFibGUtc3BlY2lmaWMKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IGNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNpZ25lZCByb3cpOwogCisg
ICAgLy8gVGV4dCBtYXJrZXJzLgorICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4
dE1hcmtlclJhbmdlRm9yRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Kik7ICAgIAorICAg
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIsIEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyKiBlbmRNYXJrZXIpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0VGV4dE1h
cmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7Cisg
ICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CisgICAgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIqKTsKKyAgICBpbnQgdGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UqKTsKKyAgICAKICAgICAvLyBOb3RpZmljYXRpb25zCiAgICAgLy8gRnVuY3Rp
b24gY2FsbGJhY2sgc2hvdWxkIHRha2Ugb25lIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgbm90
aWZpY2F0aW9uLgogICAgIGJvb2wgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYg
ZnVuY3Rpb25DYWxsYmFjayk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDY2MjI4KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsOSBAQAogCQkxQUM3N0RDRjEyMDYwNUI2MDA1QzE5RUYgLyogTlBSdW50aW1lUmVt
b3ZlUHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFDNzdEQ0UxMjA2MDVCNjAwNUMxOUVGIC8qIE5QUnVudGltZVJlbW92ZVByb3BlcnR5
LmNwcCAqLzsgfTsKIAkJMUFEOUQyRkUxMjAyODQwOTAwMUE3MEQxIC8qIFBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFEOUQyRkQxMjAyODQwOTAwMUE3MEQxIC8qIFBsdWdpblNjcmlw
dGFibGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwICovOyB9OwogCQkyM0JDQjg5MDBFQTU3NjIz
MDAzQzYyODkgLyogT3BlbkdMLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIzQkNCODhGMEVBNTc2MjMwMDNDNjI4OSAvKiBPcGVuR0wu
ZnJhbWV3b3JrICovOyB9OworCQkyOUNGQkExMDEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI5Q0ZCQTBFMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ci5oICovOyB9OworCQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjlDRkJBMEYxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNw
cCAqLzsgfTsKKwkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjlDRkJBMkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFj
Lm1tICovOyB9OwogCQkzNzEzRURFMjExNUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5n
IGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
NzEzRURERjExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5nICovOyB9OwogCQkzNzEz
RURFMzExNUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VERTAxMTVCRTE2RjAwNzA1
NzIwIC8qIENvbG9yQml0cy50dGYgKi87IH07CiAJCTUxODVGNkIyMTA3MTRFMDcwMDdBQTM5MyAv
KiBIaXN0b3J5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTg1RjY5RjEwNzE0QTU3MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLm1t
ICovOyB9OwpAQCAtMjAyLDYgKzIwNSw5IEBACiAJCTFBQzc3RENFMTIwNjA1QjYwMDVDMTlFRiAv
KiBOUFJ1bnRpbWVSZW1vdmVQcm9wZXJ0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOUFJ1bnRpbWVSZW1vdmVQcm9wZXJ0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBRDlEMkZEMTIwMjg0MDkwMDFBNzBEMSAvKiBQbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3RJbnZva2VEZWZhdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBsdWdpblNjcmlwdGFibGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyM0JDQjg4RjBFQTU3NjIzMDAzQzYyODkgLyogT3BlbkdM
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gT3BlbkdMLmZyYW1ld29yazsgcGF0aCA9IC9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAi
PGFic29sdXRlPiI7IH07CisJCTI5Q0ZCQTBFMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUNGQkEw
RjEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUNGQkEyRDEyMjczQTEwMDBCQzMwQzAg
LyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbTsgcGF0aCA9IG1h
Yy9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlUHJlZml4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MTNFRERGMTE1QkUxNkYwMDcwNTcyMCAv
KiBDb2xvckJpdHMtQS5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBpbWFnZS5wbmc7IG5hbWUgPSAiQ29sb3JCaXRzLUEucG5nIjsgcGF0aCA9ICJm
b250cy9Db2xvckJpdHMtQS5wbmciOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzEz
RURFMDExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBDb2xvckJpdHMudHRm
OyBwYXRoID0gZm9udHMvQ29sb3JCaXRzLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTM4OSw2ICszOTUsOSBAQAogCQkJCUJDRDA4QjM5MEUxMDU3RUYwMEE3RDBDMSAvKiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJQkNEMDhBNTgwRTEwNDk2QjAwQTdEMEMx
IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggKi8sCiAJCQkJQkNEMDhCNzAwRTEwNTlEMjAw
QTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovLAorCQkJCTI5Q0ZCQTBG
MTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAgKi8sCisJCQkJ
MjlDRkJBMEUxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggKi8s
CisJCQkJMjlDRkJBMkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
TWFjLm1tICovLAogCQkJCUJDMEUyNERGMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCAqLywKIAkJCQlCQzBFMjRERTBFMkQ5NDUxMDAxQjZCQzIgLyogQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5oICovLAogCQkJCUJDMEUyNjE0MEUyREE0QzYwMDFCNkJDMiAvKiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICovLApAQCAtNTg1LDYgKzU5NCw3IEBACiAJCQkJ
QkM5RDkwMjYwQzk3NDcyRTAwOTlBNEEzIC8qIFdvcmtRdWV1ZUl0ZW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxODVGNkIzMTA3MTRFMTIwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxQjc4MTY3MTFBRjMxQzMwMDdFMUJDMiAvKiBNb2NrR2VvbG9jYXRp
b25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjlDRkJBMTAxMjI3MzZFNjAwQkMzMEMw
IC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTY3Nyw3ICs2
ODcsMTQgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMTQ5QzI5QzMwODkwMkM2RDAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYUHJvamVjdCAiRHVtcFJlbmRlclRyZWUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNp
b24gPSAiWGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCUVuZ2xp
c2gsCisJCQkJSmFwYW5lc2UsCisJCQkJRnJlbmNoLAorCQkJCUdlcm1hbiwKKwkJCSk7CiAJCQlt
YWluR3JvdXAgPSAwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogRHVtcFJlbmRlclRyZWUgKi87
CiAJCQlwcm9kdWN0UmVmR3JvdXAgPSA5MzQwOTk1NTA4NTQwQ0FGMDA3RjNCQzggLyogUHJvZHVj
dHMgKi87CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwpAQCAtNzU4LDYgKzc3NSw4IEBACiAJCQkJ
QkNBMThCMjYwQzlCMDE1QzAwMTE0MzY5IC8qIFdvcmtRdWV1ZUl0ZW1NYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MTg1RjZCMjEwNzE0RTA3MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCNzgxNjUxMUFGMzFCNzAwN0UxQkMyIC8qIE1vY2tHZW9s
b2NhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMjlDRkJBMTExMjI3MzZFNjAw
QkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0Fj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbQkocmV2aXNpb24g
MCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlck1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5o
IgorCisjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIKKworQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXI6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKFBsYXRmb3JtVGV4dE1hcmtlciBt
YXJrZXIpCisgICAgOiBtX3RleHRNYXJrZXIobWFya2VyKQoreworICAgIGlmIChtX3RleHRNYXJr
ZXIpCisgICAgICAgIENGUmV0YWluKG1fdGV4dE1hcmtlcik7Cit9CisKK0FjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb25zdCBBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciYgbWFya2VyKQorICAgIDogbV90ZXh0TWFya2VyKG1hcmtlci5wbGF0Zm9ybVRleHRN
YXJrZXIoKSkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAgICBDRlJldGFpbihtX3Rl
eHRNYXJrZXIpOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKCkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAgICBDRlJlbGVhc2Uo
bV90ZXh0TWFya2VyKTsKKyAgICBtX3RleHRNYXJrZXIgPSBuaWw7Cit9CisKK2Jvb2wgQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXI6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIG90aGVy
KQoreworICAgIHJldHVybiBbcGxhdGZvcm1UZXh0TWFya2VyKCkgaXNFcXVhbDpvdGhlci0+cGxh
dGZvcm1UZXh0TWFya2VyKCldOworfQorCisjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlclJhbmdlKFBsYXRmb3JtVGV4dE1hcmtlclJhbmdlIG1hcmtlclJhbmdlKQorICAg
IDogbV90ZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpCit7CisgICAgaWYgKG1fdGV4dE1hcmtl
clJhbmdlKQorICAgICAgICBDRlJldGFpbihtX3RleHRNYXJrZXJSYW5nZSk7Cit9CisKK0FjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29u
c3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYgbWFya2VyUmFuZ2UpCisgICAgOiBtX3Rl
eHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZS5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpKQorewor
ICAgIGlmIChtX3RleHRNYXJrZXJSYW5nZSkKKyAgICAgICAgQ0ZSZXRhaW4obV90ZXh0TWFya2Vy
UmFuZ2UpOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjp+QWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJSYW5nZSgpCit7CisgICAgaWYgKG1fdGV4dE1hcmtlclJhbmdlKQorICAgICAg
ICBDRlJlbGVhc2UobV90ZXh0TWFya2VyUmFuZ2UpOworICAgIG1fdGV4dE1hcmtlclJhbmdlID0g
bmlsOworfQorCitib29sIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OmlzRXF1YWwoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogb3RoZXIpCit7CisgICAgcmV0dXJuIFtwbGF0Zm9y
bVRleHRNYXJrZXJSYW5nZSgpIGlzRXF1YWw6b3RoZXItPnBsYXRmb3JtVGV4dE1hcmtlclJhbmdl
KCldOworfQorCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNpb24gNjYyMjgpCisr
KyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE5MCwzICsxMTkwLDY3IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWMKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9
CisKKy8vIFRleHQgbWFya2VycworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAg
aWQgdGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCIgZm9yUGFyYW1ldGVyOmVsZW1lbnQt
PnBsYXRmb3JtVUlFbGVtZW50KCldOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAg
IAorICAgIHJldHVybiAwOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1h
cmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQorewor
ICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIE5TTnVtYmVyKiBsZW5ndGhWYWx1ZSA9
IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhMZW5ndGhGb3JUZXh0
TWFya2VyUmFuZ2UiIGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2Uo
KV07CisgICAgcmV0dXJuIFtsZW5ndGhWYWx1ZSBpbnRWYWx1ZV07CisgICAgRU5EX0FYX09CSkNf
RVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiAwOworfQorCisKK0FjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yTWFy
a2VycyhBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIsIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKiBlbmRNYXJrZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisg
ICAgTlNBcnJheSogdGV4dE1hcmtlcnMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOnN0YXJ0
TWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKSwgZW5kTWFya2VyLT5wbGF0Zm9ybVRleHRNYXJr
ZXIoKSwgbmlsXTsKKyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBbbV9lbGVtZW50IGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVW5vcmRlcmVkVGV4dE1h
cmtlcnMiIGZvclBhcmFtZXRlcjp0ZXh0TWFya2Vyc107CisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBFTkRfQVhfT0JKQ19FWENF
UFRJT05TCisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkKK3sKKyAgICBCRUdJTl9BWF9P
QkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSIg
Zm9yUGFyYW1ldGVyOnJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpXTsKKyAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgRU5EX0FYX09CSkNf
RVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiAwOyAgICAKK30KKworQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkKK3sKKyAgICBCRUdJ
Tl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21fZWxlbWVudCBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFu
Z2UiIGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKV07CisgICAg
cmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gMDsgICAgCit9CisKK0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eUVsZW1lbnRG
b3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIpCit7CisgICAgQkVH
SU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgdWlFbGVtZW50ID0gW21fZWxlbWVudCBhY2Nl
c3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFVJRWxlbWVudEZvclRleHRNYXJrZXIiIGZvclBh
cmFtZXRlcjptYXJrZXItPnBsYXRmb3JtVGV4dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCh1aUVsZW1lbnQpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMK
KyAgICAKKyAgICByZXR1cm4gMDsgIAorfQorCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHJldmlzaW9uIDY2MjI4
KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtNTc4LDYgKzU3OCwxNCBAQAogCQkJPg0KIAkJPC9GaWxlPg0K
IAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNw
cCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIuaCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJ
CVJlbGF0aXZlUGF0aD0iLlxEcmFnZ2luZ0luZm8uaCINCiAJCQk+DQogCQk8L0ZpbGU+DQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjYyMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0wOC0yNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxl
aXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFYOiBTdXBwb3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VycyBpbiBEUlQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzc4CisKKyAg
ICAgICAgQWRkIGJhc2ljIHRleHQgbWFya2VyIHRlc3RzIHRvIHZhbGlkYXRlIGZ1bmN0aW9ucyBh
cmUgd29ya2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1l
bnQtZm9yLXRleHQtbWFya2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXIuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3Ro
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvdGV4dC1tYXJrZXItbGVuZ3RoLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA4LTI3ICBUb255IENo
YW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gIEFkZCBjaHJv
bWl1bS1tYWMgcmVzdWx0cyBmb3Igc3ZnL2N1c3RvbS9nZXRzY3JlZW5jdG0taW4tc2Nyb2xsYWJs
ZS1kaXYtYXJlYS54aHRtbC4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0
LW1hcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKK3RleHQgaGVyZQordGV4dCBibG9jawordGV4
dCBoZXJlCitUaGlzIHRlc3RzIHRoZSB0ZXh0IG1hcmtlciBzeXN0ZW0gd2lsbCByZXR1cm4gdGhl
IHJpZ2h0IGVsZW1lbnQgd2hlbiBnaXZlbiBhIHRleHQgbWFya2VyCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKHRleHRNYXJr
ZXJSYW5nZTEpIGlzIDEwCitQQVNTIHRleHQuYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFy
a2VyKHN0YXJ0TWFya2VyKS5pc0VxdWFsKHRleHQpIGlzIHRydWUKK1BBU1MgdGV4dC5hY2Nlc3Np
YmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoZW5kTWFya2VyKS5pc0VxdWFsKHRleHQpIGlzIHRy
dWUKK1BBU1MgdGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgobmV3TWFya2VyUmFuZ2UpIGlzIDEw
CitQQVNTIG5ld01hcmtlclJhbmdlLmlzRXF1YWwodGV4dE1hcmtlclJhbmdlMSkgaXMgdHJ1ZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQt
bWFya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vz
c2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFy
a2VyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKK3RleHQgaGVyZQor
PGRpdiBpZD0idGV4dDEiIHRhYmluZGV4PTA+dGV4dCBibG9jazwvZGl2PgordGV4dCBoZXJlCisK
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxz
Y3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgdGV4dCBtYXJrZXIgc3lz
dGVtIHdpbGwgcmV0dXJuIHRoZSByaWdodCBlbGVtZW50IHdoZW4gZ2l2ZW4gYSB0ZXh0IG1hcmtl
ciIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworCisgICAg
ICAgICAgLy8gYXJpYS1zdGF0ZT10cnVlCisgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRleHQxIikuZm9jdXMoKTsKKyAgICAgICAgICB2YXIgdGV4dCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwg
dGV4dCBub2RlLgorICAgICAgICAgIHRleHQgPSB0ZXh0LmNoaWxkQXRJbmRleCgwKTsKKworICAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIGdldCB0aGUgc3RhcnQgbWFya2VyIGZvciB0aGlz
IHJhbmdlLgorICAgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UxID0gdGV4dC50ZXh0TWFya2Vy
UmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnRleHRNYXJr
ZXJSYW5nZUxlbmd0aCh0ZXh0TWFya2VyUmFuZ2UxKSIsICIxMCIpOworICAgICAgICAgIHZhciBz
dGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRN
YXJrZXJSYW5nZTEpOworCisgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc3RhcnQgbWFya2Vy
IHdpbGwgZ2l2ZSB1cyB0aGUgc2FtZSBlbGVtZW50IHRoYXQgd2Ugc3RhcnRlZCB3aXRoLgorICAg
ICAgICAgIHNob3VsZEJlVHJ1ZSgidGV4dC5hY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJr
ZXIoc3RhcnRNYXJrZXIpLmlzRXF1YWwodGV4dCkiKTsKKworICAgICAgICAgIC8vIEdldCB0aGUg
ZW5kIG1hcmtlciBhbmQgY2hlY2sgdGhhdCBpdCBnaXZlcyB1cyB0aGUgc2FtZSBlbGVtZW50Lgor
ICAgICAgICAgIHZhciBlbmRNYXJrZXIgPSB0ZXh0LmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dE1hcmtlclJhbmdlMSk7CisgICAgICAgICAgc2hvdWxkQmVUcnVlKCJ0ZXh0LmFj
Y2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihlbmRNYXJrZXIpLmlzRXF1YWwodGV4dCki
KTsKKworICAgICAgICAgIC8vIE1ha2UgYSBtYXJrZXIgcmFuZ2Ugb3V0IG9mIHRoZSBzdGFydCBh
bmQgZW5kIG1hcmtlcnMgYW5kIGNoZWNrIHRoZSBsZW5ndGgKKyAgICAgICAgICB2YXIgbmV3TWFy
a2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoc3RhcnRNYXJrZXIsIGVu
ZE1hcmtlcik7CisgICAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3Ro
KG5ld01hcmtlclJhbmdlKSIsICIxMCIpOworCisgICAgICAgICAgLy8gQW5kIG1ha2Ugc3VyZSBp
dCBlcXVhbHMgdGhlIHNhbWUgbWFya2VyIHJhbmdlIHdlIHN0YXJ0ZWQgd2l0aAorICAgICAgICAg
IHNob3VsZEJlVHJ1ZSgibmV3TWFya2VyUmFuZ2UuaXNFcXVhbCh0ZXh0TWFya2VyUmFuZ2UxKSIp
OworICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKwor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2Vy
LWxlbmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExIEBACit0ZXh0IGJsb2NrCitUaGlzIHRlc3RzIHRoZSB0ZXh0
IG1hcmtlciBpbXBsZW1lbnRpb24gb2YgRFJUIGlzIHdvcmtpbmcgYnkgcmV0dXJuaW5nIGEgbWFy
a2VyIHJhbmdlIGFuZCBieSByZXR1cm5pbmcgaXRzIGNvcnJlY3QgbGVuZ3RoLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aCh0
ZXh0TWFya2VyUmFuZ2UpIGlzIDEwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1h
cmtlci1sZW5ndGguaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGRp
diBpZD0idGV4dCIgdGFiaW5kZXg9MD50ZXh0IGJsb2NrPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgdGV4dCBtYXJrZXIgaW1wbGVtZW50aW9uIG9mIERS
VCBpcyB3b3JraW5nIGJ5IHJldHVybmluZyBhIG1hcmtlciByYW5nZSBhbmQgYnkgcmV0dXJuaW5n
IGl0cyBjb3JyZWN0IGxlbmd0aC4iKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIpIHsKKworICAgICAgICAgIC8vIGFyaWEtc3RhdGU9dHJ1ZQorICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0IikuZm9jdXMoKTsKKyAgICAgICAgICB2YXIgdGV4
dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAgICAgIHZh
ciB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7
CisgICAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKHRleHRNYXJr
ZXJSYW5nZSkiLCAiMTAiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65731</attachid>
            <date>2010-08-27 10:39:27 -0700</date>
            <delta_ts>2010-08-27 15:25:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>42008</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjIzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMjcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcnMgaW4gRFJUCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDc3OAorCisgICAgICAgIFBy
b3ZpZGUgc3VwcG9ydCBpbiBEUlQgZm9yIGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSB0
ZXh0IG1hcmtlciBzeXN0ZW0gdGhhdCBBWCBleHBvc2VzLgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgZnV0dXJlIGJ1ZyBmaXhlcyBpbiB0aGUgdGV4dCBtYXJrZXIgc3lzdGVtIHRvIGJlIGFkZXF1
YXRlbHkgdGVzdGVkLgorCisgICAgICAgIFRlc3RzOiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci5odG1sCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgt
W0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpm
b3JQYXJhbWV0ZXI6XSk6CisKIDIwMTAtMDgtMjcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5k
ZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTI0LDYgKzI1MjQsMTcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0
cgogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVuZ3RoXTsKICAgICB9
CiAKKyAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhcikKKyAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2UiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFu
Z2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFy
a2VyUmFuZ2VdOworICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2
aXNpYmxlUG9zUmFuZ2Uuc3RhcnQpOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzogQCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAg
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAg
ICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2UuZW5k
KTsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDZWxsRm9y
Q29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlmIChh
cnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50XSAhPSAyKQpJbmRleDogV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjYy
MzEpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2
OSBAQAorMjAxMC0wOC0yNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFYOiBTdXBw
b3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VycyBpbiBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzc4CisKKyAgICAgICAgQWRkIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIGFuZCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHdoaWNoIGVu
Y2Fwc3VsYXRlIHRoZSBBWFRleHRNYXJrZXJzIAorICAgICAgICB0aGF0IFdlYkNvcmUgdXNlcyB3
aGVuIHZlbmRpbmcgaW5mb3JtYXRpb24gYWJvdXQgaXRzIFZpc2libGVQb3NpdGlvbnMgdGhyb3Vn
aCBBWC4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgbmV3IG1ldGhvZHMgaW4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCB0byByZXRyaWV2ZSBhbmQgdXNlIHRleHQgbWFya2VycywgYW5kIHNvbWUg
YmFzaWMKKyAgICAgICAgbWV0aG9kcyBmb3IgZW5jYXBzdWxhdGluZyBhbmQgY2hlY2tpbmcgZXF1
YWxpdHkuCisKKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IGZ1dHVyZSBidWcgZml4ZXMgaW4gdGhl
IHRleHQgbWFya2VyIHN5c3RlbSB0byBiZSBhZGVxdWF0ZWx5IHRlc3RlZC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcDogQWRkZWQuCisgICAg
ICAgICh0b1RleHRNYXJrZXIpOgorICAgICAgICAoaXNNYXJrZXJFcXVhbENhbGxiYWNrKToKKyAg
ICAgICAgKG1hcmtlckZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
OjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcyk6CisgICAgICAgICh0b1RleHRNYXJrZXJSYW5nZSk6Cisg
ICAgICAgIChpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjayk6CisgICAgICAgIChtYXJrZXJSYW5n
ZUZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6Om1ha2VK
U0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIuaDogQWRkZWQuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlcjo6cGxhdGZvcm1UZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6Cisg
ICAgICAgICh0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2spOgorICAgICAgICAodGV4
dE1hcmtlclJhbmdlTGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAodGV4dE1hcmtlclJhbmdlRm9y
TWFya2Vyc0NhbGxiYWNrKToKKyAgICAgICAgKHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZUNhbGxiYWNrKToKKyAgICAgICAgKGVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VD
YWxsYmFjayk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXJDYWxs
YmFjayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VG
b3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJS
YW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tOiBBZGRlZC4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
cik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZTo6aXNFcXVhbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9y
VGV4dE1hcmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LnZjcHJvajoKKwogMjAxMC0wOC0yNyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxh
aW5Abm9raWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZCBteXNlbGYgdG8gdGhlIGNv
bW1pdHRlcnMgbGlzdC4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisKKyNwcmFnbWEgbWFyayBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcgorCisvLyBDYWxsYmFjayBtZXRob2RzCisKK0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyKiB0b1RleHRNYXJrZXIoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaXNNYXJrZXJFcXVhbENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU09iamVjdFJlZiBvdGhl
ck1hcmtlciA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgb3RoZXJN
YXJrZXIgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBm
YWxzZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b1Rl
eHRNYXJrZXIodGhpc09iamVjdCktPmlzRXF1YWwodG9UZXh0TWFya2VyKG90aGVyTWFya2VyKSkp
OworfQorCisvLyBEZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJGaW5hbGl6ZShKU09i
amVjdFJlZiB0aGlzT2JqZWN0KQoreworICAgIGRlbGV0ZSB0b1RleHRNYXJrZXIodGhpc09iamVj
dCk7Cit9CisKKy8vIE9iamVjdCBDcmVhdGlvbgorCitKU09iamVjdFJlZiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyJiBlbGVtZW50KQoreworICAgIHJl
dHVybiBKU09iamVjdE1ha2UoY29udGV4dCwgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OmdldEpT
Q2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGVsZW1lbnQpKTsKK30KKworSlND
bGFzc1JlZiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcygpCit7CisgICAgc3Rh
dGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgICAgIHsgMCwgMCwgMCwg
MCB9CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5j
dGlvbnNbXSA9IHsKKyAgICAgICAgeyAiaXNFcXVhbCIsIGlzTWFya2VyRXF1YWxDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpT
Q2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NB
dHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIiLCAwLCBzdGF0aWNWYWx1ZXMs
IHN0YXRpY0Z1bmN0aW9ucywKKyAgICAgICAgMCwgbWFya2VyRmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBKU0NsYXNzUmVmIGFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24p
OworICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckNsYXNzOworfQorCisjcHJhZ21h
IG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZQorCisvLyBDYWxsYmFjayBtZXRob2Rz
CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHRvVGV4dE1hcmtlclJhbmdlKEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgaXNNYXJrZXJSYW5nZUVxdWFsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIEpTT2JqZWN0UmVmIG90aGVyTWFya2VyID0gMDsKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBvdGhlck1hcmtlciA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGZhbHNlKTsKKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmpl
Y3QpLT5pc0VxdWFsKHRvVGV4dE1hcmtlclJhbmdlKG90aGVyTWFya2VyKSkpOworfQorCisvLyBE
ZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJSYW5nZUZpbmFsaXplKEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QpCit7CisgICAgZGVsZXRlIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmplY3Qp
OworfQorCisvLyBPYmplY3QgQ3JlYXRpb24KKworSlNPYmplY3RSZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYgZWxlbWVu
dCkKK3sKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGNvbnRleHQsIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OmdldEpTQ2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UoZWxlbWVudCkpOworfQorCitKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U6OmdldEpTQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVl
c1tdID0geworICAgICAgICB7IDAsIDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGlj
IEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgImlzRXF1
YWwiLCBpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAs
IDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVm
aW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAor
ICAgICAgICAwLCBtYXJrZXJSYW5nZUZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBhY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJl
dHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlQ2xhc3M7Cit9CkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcl9oCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2Rl
ZmluZSBJTVBMRU1FTlRTX0FYX1RFWFRNQVJLRVJTIDEKKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
TUFDKQorI2lmZGVmIF9fT0JKQ19fCit0eXBlZGVmIGlkIFBsYXRmb3JtVGV4dE1hcmtlcjsKK3R5
cGVkZWYgaWQgUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2U7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3Qg
b2JqY19vYmplY3QqIFBsYXRmb3JtVGV4dE1hcmtlcjsKK3R5cGVkZWYgc3RydWN0IG9iamNfb2Jq
ZWN0KiBQbGF0Zm9ybVRleHRNYXJrZXJSYW5nZTsKKyNlbmRpZgorI2Vsc2UKK3R5cGVkZWYgdm9p
ZCogUGxhdGZvcm1UZXh0TWFya2VyOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVRleHRNYXJrZXJS
YW5nZTsKKyNlbmRpZgorCitjbGFzcyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OworCitjbGFzcyBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB7CitwdWJsaWM6CisgICAgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIoUGxhdGZvcm1UZXh0TWFya2VyKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihj
b25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciYpOworICAgIH5BY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlcigpOworICAgIAorICAgIFBsYXRmb3JtVGV4dE1hcmtlciBwbGF0Zm9ybVRleHRNYXJrZXIo
KSBjb25zdCB7IHJldHVybiBtX3RleHRNYXJrZXI7IH0KKyAgICAKKyAgICBzdGF0aWMgSlNPYmpl
Y3RSZWYgbWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoSlNDb250ZXh0UmVmLCBjb25zdCBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciYpOworICAgIGJvb2wgaXNFcXVhbChBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciopOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRK
U0NsYXNzKCk7CisgICAgUGxhdGZvcm1UZXh0TWFya2VyIG1fdGV4dE1hcmtlcjsKK307CisKK2Ns
YXNzIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgeworcHVibGljOgorICAgIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UoUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UpOworICAgIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZSYpOworICAgIH5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKCk7CisgICAgCisgICAgUGxh
dGZvcm1UZXh0TWFya2VyUmFuZ2UgcGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3RleHRNYXJrZXJSYW5nZTsgfQorICAgIAorICAgIHN0YXRpYyBKU09iamVjdFJlZiBt
YWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKEpTQ29udGV4dFJlZiwgY29uc3QgQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYpOworICAgIGJvb2wgaXNFcXVhbChBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlKik7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBKU0NsYXNz
UmVmIGdldEpTQ2xhc3MoKTsKKyAgICBQbGF0Zm9ybVRleHRNYXJrZXIgbV90ZXh0TWFya2VyUmFu
Z2U7ICAgIAorfTsKKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRvVGV4dE1hcmtlcihKU09i
amVjdFJlZiBvYmplY3QpOworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogdG9UZXh0TWFy
a2VyUmFuZ2UoSlNPYmplY3RSZWYgb2JqZWN0KTsKKworI2lmICFJTVBMRU1FTlRTX0FYX1RFWFRN
QVJLRVJTCitpbmxpbmUgdm9pZCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIoUGxhdGZvcm1UZXh0TWFya2VyKSB7IH0KK2lubGluZSB2b2lkIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb25zdCBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciYpIHsgfQoraW5saW5lIHZvaWQgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6
On5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcigpIHsgfQoraW5saW5lIGJvb2wgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXI6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKSB7IH0KKworaW5s
aW5lIHZvaWQgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6QWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZShQbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSkgeyB9CitpbmxpbmUgdm9pZCBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNv
bnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UmKSB7IH0KK2lubGluZSB2b2lkIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6On5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKCkg
eyB9CitpbmxpbmUgYm9vbCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjppc0VxdWFsKEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKSB7IH0KKyNlbmRpZgorCisjZW5kaWYgLy8gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudF9oCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24gNjYyMjgpCisr
KyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA2LDYgKzQwNiw2MiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiByZW1v
dmVTZWxlY3Rpb25DYWxsYmFjCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiB0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIHVpRWxlbWVudCA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAg
ICAgICAgdWlFbGVtZW50ID0gdG9BWEVsZW1lbnQoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2U6Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29udGV4
dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodWlF
bGVtZW50KSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRNYXJrZXJSYW5nZUxlbmd0aENh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlclJhbmdlKiByYW5nZSA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkK
KyAgICAgICAgcmFuZ2UgPSB0b1RleHRNYXJrZXJSYW5nZShKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VOdW1iZXIoY29udGV4dCwgKGludCl0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+dGV4dE1hcmtl
clJhbmdlTGVuZ3RoKHJhbmdlKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRNYXJrZXJS
YW5nZUZvck1hcmtlcnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gMDsKKyAgICBBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2VyID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9
PSAyKSB7CisgICAgICAgIHN0YXJ0TWFya2VyID0gdG9UZXh0TWFya2VyKEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgICAgICBlbmRNYXJrZXIg
PSB0b1RleHRNYXJrZXIoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhj
ZXB0aW9uKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlOjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnRleHQsIHRvQVhF
bGVtZW50KHRoaXNPYmplY3QpLT50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0YXJ0TWFya2Vy
LCBlbmRNYXJrZXIpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc3RhcnRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlclJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIG1hcmtlclJhbmdlID0gMDsKKyAgICBp
ZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBtYXJrZXJSYW5nZSA9IHRvVGV4dE1hcmtl
clJhbmdlKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikp
OworICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBlbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UqIG1hcmtlclJhbmdlID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAg
ICBtYXJrZXJSYW5nZSA9IHRvVGV4dE1hcmtlclJhbmdlKEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoY29udGV4dCwgdG9B
WEVsZW1lbnQodGhpc09iamVjdCktPmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UobWFy
a2VyUmFuZ2UpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUVsZW1lbnRG
b3JUZXh0TWFya2VyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIgPSAwOworICAgIGlmIChhcmd1bWVudENv
dW50ID09IDEpCisgICAgICAgIG1hcmtlciA9IHRvVGV4dE1hcmtlcihKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb250ZXh0
LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+YWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFy
a2VyKG1hcmtlcikpOworfQogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBAIC02NjIsNiAr
NzE4LDQyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3QKICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKKy8vIEltcGxlbWVudGF0
aW9uCisKKyNpZiAhSU1QTEVNRU5UU19BWF9URVhUTUFSS0VSUworCitBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
dCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdl
Rm9yTWFya2VycyhBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciosIEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyKik7Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtl
ckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKikKK3sKKyAg
ICByZXR1cm4gMDsgICAKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIqKQoreworICAgIHJldHVybiAwOworfQorCisjZW5kaWYKKwogLy8gRGVzdHJ1
Y3Rpb24KIAogc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYgdGhpc09iamVjdCkKQEAg
LTc3NCw2ICs4NjYsMTIgQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRK
UwogICAgICAgICB7ICJ0YWtlU2VsZWN0aW9uIiwgdGFrZVNlbGVjdGlvbkNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgImFkZFNlbGVjdGlvbiIsIGFkZFNlbGVjdGlvbkNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgInJlbW92ZVNlbGVjdGlvbiIsIHJlbW92ZVNlbGVjdGlvbkNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQiLCB0ZXh0TWFy
a2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAidGV4dE1hcmtl
clJhbmdlRm9yTWFya2VycyIsIHRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnNDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgICAgICB7ICJzdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiLCBzdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJlbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIiwgZW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImFjY2Vzc2liaWxpdHlFbGVt
ZW50Rm9yVGV4dE1hcmtlciIsIGFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlckNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCisgICAgICAgIHsgInRleHRNYXJrZXJSYW5nZUxlbmd0aCIsIHRleHRNYXJr
ZXJSYW5nZUxlbmd0aENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAg
fTsKIApJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaAkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudF9oCiAjZGVmaW5lIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnRfaAogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQwLDggKzQxLDggQEAg
dHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIFBsYXRmb3JtVUlFbAogI3VuZGVmIF9XSU5TT0NL
QVBJXwogI2RlZmluZSBfV0lOU09DS0FQSV8gLy8gUHJldmVudCBpbmNsdXNpb24gb2Ygd2luc29j
ay5oIGluIHdpbmRvd3MuaAogCi0jaW5jbHVkZSA8b2xlYWNjLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9DT01QdHIuaD4KKyNpbmNsdWRlIDxvbGVhY2MuaD4KIAogdHlwZWRlZiBDT01QdHI8SUFjY2Vz
c2libGU+IFBsYXRmb3JtVUlFbGVtZW50OwogI2VsaWYgUExBVEZPUk0oR1RLKQpAQCAtMTgzLDYg
KzE4NCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gVGFibGUtc3BlY2lmaWMKICAgICBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50IGNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNpZ25l
ZCByb3cpOwogCisgICAgLy8gVGV4dCBtYXJrZXJzLgorICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UgdGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Kik7ICAgIAorICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4dE1hcmtlclJhbmdl
Rm9yTWFya2VycyhBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIsIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
IHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlKik7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgZW5kVGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CisgICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCBhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIqKTsKKyAgICBpbnQgdGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKKyAgICAKICAgICAvLyBOb3RpZmljYXRpb25zCiAg
ICAgLy8gRnVuY3Rpb24gY2FsbGJhY2sgc2hvdWxkIHRha2Ugb25lIGFyZ3VtZW50LCB0aGUgbmFt
ZSBvZiB0aGUgbm90aWZpY2F0aW9uLgogICAgIGJvb2wgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIo
SlNPYmplY3RSZWYgZnVuY3Rpb25DYWxsYmFjayk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY2MjI4KQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQAogCQkxQUM3N0RDRjEyMDYwNUI2MDA1QzE5RUYgLyog
TlBSdW50aW1lUmVtb3ZlUHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFDNzdEQ0UxMjA2MDVCNjAwNUMxOUVGIC8qIE5QUnVudGltZVJl
bW92ZVByb3BlcnR5LmNwcCAqLzsgfTsKIAkJMUFEOUQyRkUxMjAyODQwOTAwMUE3MEQxIC8qIFBs
dWdpblNjcmlwdGFibGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFEOUQyRkQxMjAyODQwOTAwMUE3MEQxIC8q
IFBsdWdpblNjcmlwdGFibGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwICovOyB9OwogCQkyM0JD
Qjg5MDBFQTU3NjIzMDAzQzYyODkgLyogT3BlbkdMLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIzQkNCODhGMEVBNTc2MjMwMDNDNjI4
OSAvKiBPcGVuR0wuZnJhbWV3b3JrICovOyB9OworCQkyOUNGQkExMDEyMjczNkU2MDBCQzMwQzAg
LyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0ZCQTBFMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlci5oICovOyB9OworCQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjlDRkJBMEYxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyLmNwcCAqLzsgfTsKKwkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjlDRkJBMkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyTWFjLm1tICovOyB9OwogCQkzNzEzRURFMjExNUJFMTkzMDA3MDU3MjAgLyogQ29s
b3JCaXRzLUEucG5nIGluIENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzEzRURERjExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5nICov
OyB9OwogCQkzNzEzRURFMzExNUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiBpbiBDb3B5
IEZvbnQgRmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VERTAx
MTVCRTE2RjAwNzA1NzIwIC8qIENvbG9yQml0cy50dGYgKi87IH07CiAJCTUxODVGNkIyMTA3MTRF
MDcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1RjY5RjEwNzE0QTU3MDA3QUEzOTMgLyogSGlzdG9y
eURlbGVnYXRlLm1tICovOyB9OwpAQCAtMjAyLDYgKzIwNSw5IEBACiAJCTFBQzc3RENFMTIwNjA1
QjYwMDVDMTlFRiAvKiBOUFJ1bnRpbWVSZW1vdmVQcm9wZXJ0eS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOUFJ1bnRpbWVSZW1vdmVQcm9wZXJ0eS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRDlEMkZEMTIwMjg0MDkwMDFBNzBEMSAvKiBQbHVn
aW5TY3JpcHRhYmxlTlBPYmplY3RJbnZva2VEZWZhdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpblNjcmlwdGFibGVOUE9iamVjdEludm9rZURlZmF1bHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyM0JDQjg4RjBFQTU3NjIzMDAzQzYy
ODkgLyogT3BlbkdMLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gT3BlbkdMLmZyYW1ld29y
azsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcms7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCTI5Q0ZCQTBFMTIyNzM2RTYwMEJDMzBDMCAv
KiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyOUNGQkEwRjEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUNGQkEyRDEyMjcz
QTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5t
bTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJU
cmVlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJU
cmVlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MTNFRERGMTE1QkUx
NkYwMDcwNTcyMCAvKiBDb2xvckJpdHMtQS5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IG5hbWUgPSAiQ29sb3JCaXRzLUEucG5n
IjsgcGF0aCA9ICJmb250cy9Db2xvckJpdHMtQS5wbmciOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzEzRURFMDExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBD
b2xvckJpdHMudHRmOyBwYXRoID0gZm9udHMvQ29sb3JCaXRzLnR0Zjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM4OSw2ICszOTUsOSBAQAogCQkJCUJDRDA4QjM5MEUxMDU3RUYwMEE3
RDBDMSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJQkNEMDhBNTgwRTEw
NDk2QjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggKi8sCiAJCQkJQkNEMDhC
NzAwRTEwNTlEMjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovLAor
CQkJCTI5Q0ZCQTBGMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5j
cHAgKi8sCisJCQkJMjlDRkJBMEUxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyLmggKi8sCisJCQkJMjlDRkJBMkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyTWFjLm1tICovLAogCQkJCUJDMEUyNERGMEUyRDk0NTEwMDFCNkJDMiAvKiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcCAqLywKIAkJCQlCQzBFMjRERTBFMkQ5NDUxMDAxQjZC
QzIgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oICovLAogCQkJCUJDMEUyNjE0MEUyREE0QzYw
MDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICovLApAQCAtNTg1LDYgKzU5
NCw3IEBACiAJCQkJQkM5RDkwMjYwQzk3NDcyRTAwOTlBNEEzIC8qIFdvcmtRdWV1ZUl0ZW0uaCBp
biBIZWFkZXJzICovLAogCQkJCTUxODVGNkIzMTA3MTRFMTIwMDdBQTM5MyAvKiBIaXN0b3J5RGVs
ZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQjc4MTY3MTFBRjMxQzMwMDdFMUJDMiAvKiBN
b2NrR2VvbG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjlDRkJBMTAxMjI3
MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTY3Nyw3ICs2ODcsMTQgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMTQ5QzI5QzMwODkwMkM2RDAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiRHVtcFJlbmRlclRyZWUiICovOwogCQkJY29tcGF0
aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5n
bGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0g
KAorCQkJCUVuZ2xpc2gsCisJCQkJSmFwYW5lc2UsCisJCQkJRnJlbmNoLAorCQkJCUdlcm1hbiwK
KwkJCSk7CiAJCQltYWluR3JvdXAgPSAwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogRHVtcFJl
bmRlclRyZWUgKi87CiAJCQlwcm9kdWN0UmVmR3JvdXAgPSA5MzQwOTk1NTA4NTQwQ0FGMDA3RjNC
QzggLyogUHJvZHVjdHMgKi87CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwpAQCAtNzU4LDYgKzc3
NSw4IEBACiAJCQkJQkNBMThCMjYwQzlCMDE1QzAwMTE0MzY5IC8qIFdvcmtRdWV1ZUl0ZW1NYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RjZCMjEwNzE0RTA3MDA3QUEzOTMgLyogSGlzdG9y
eURlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCNzgxNjUxMUFGMzFCNzAwN0UxQkMy
IC8qIE1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMjlDRkJB
MTExMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5t
bQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlck1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oIgorCisjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIKKwor
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKFBsYXRmb3Jt
VGV4dE1hcmtlciBtYXJrZXIpCisgICAgOiBtX3RleHRNYXJrZXIobWFya2VyKQoreworICAgIGlm
IChtX3RleHRNYXJrZXIpCisgICAgICAgIENGUmV0YWluKG1fdGV4dE1hcmtlcik7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb25zdCBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciYgbWFya2VyKQorICAgIDogbV90ZXh0TWFya2VyKG1hcmtlci5w
bGF0Zm9ybVRleHRNYXJrZXIoKSkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAgICBD
RlJldGFpbihtX3RleHRNYXJrZXIpOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyKCkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAg
ICBDRlJlbGVhc2UobV90ZXh0TWFya2VyKTsKKyAgICBtX3RleHRNYXJrZXIgPSBuaWw7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIqIG90aGVyKQoreworICAgIHJldHVybiBbcGxhdGZvcm1UZXh0TWFya2VyKCkgaXNFcXVh
bDpvdGhlci0+cGxhdGZvcm1UZXh0TWFya2VyKCldOworfQorCisjcHJhZ21hIG1hcmsgQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjpB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKFBsYXRmb3JtVGV4dE1hcmtlclJhbmdlIG1hcmtl
clJhbmdlKQorICAgIDogbV90ZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpCit7CisgICAgaWYg
KG1fdGV4dE1hcmtlclJhbmdlKQorICAgICAgICBDRlJldGFpbihtX3RleHRNYXJrZXJSYW5nZSk7
Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UoY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYgbWFya2VyUmFuZ2Up
CisgICAgOiBtX3RleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZS5wbGF0Zm9ybVRleHRNYXJrZXJS
YW5nZSgpKQoreworICAgIGlmIChtX3RleHRNYXJrZXJSYW5nZSkKKyAgICAgICAgQ0ZSZXRhaW4o
bV90ZXh0TWFya2VyUmFuZ2UpOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjp+
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSgpCit7CisgICAgaWYgKG1fdGV4dE1hcmtlclJh
bmdlKQorICAgICAgICBDRlJlbGVhc2UobV90ZXh0TWFya2VyUmFuZ2UpOworICAgIG1fdGV4dE1h
cmtlclJhbmdlID0gbmlsOworfQorCitib29sIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6
OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogb3RoZXIpCit7CisgICAgcmV0
dXJuIFtwbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpIGlzRXF1YWw6b3RoZXItPnBsYXRmb3JtVGV4
dE1hcmtlclJhbmdlKCldOworfQorCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNp
b24gNjYyMjgpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE5MCwzICsxMTkwLDY3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWMKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiB9CisKKy8vIFRleHQgbWFya2VycworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENF
UFRJT05TCisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCIgZm9yUGFyYW1l
dGVyOmVsZW1lbnQtPnBsYXRmb3JtVUlFbGVtZW50KCldOworICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5EX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIAorICAgIHJldHVybiAwOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2Uq
IHJhbmdlKQoreworICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIE5TTnVtYmVyKiBs
ZW5ndGhWYWx1ZSA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhM
ZW5ndGhGb3JUZXh0TWFya2VyUmFuZ2UiIGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0
TWFya2VyUmFuZ2UoKV07CisgICAgcmV0dXJuIFtsZW5ndGhWYWx1ZSBpbnRWYWx1ZV07CisgICAg
RU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiAwOworfQorCisKK0FjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtl
clJhbmdlRm9yTWFya2VycyhBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIsIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19F
WENFUFRJT05TCisgICAgTlNBcnJheSogdGV4dE1hcmtlcnMgPSBbTlNBcnJheSBhcnJheVdpdGhP
YmplY3RzOnN0YXJ0TWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKSwgZW5kTWFya2VyLT5wbGF0
Zm9ybVRleHRNYXJrZXIoKSwgbmlsXTsKKyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBbbV9lbGVt
ZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVW5v
cmRlcmVkVGV4dE1hcmtlcnMiIGZvclBhcmFtZXRlcjp0ZXh0TWFya2Vyc107CisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBFTkRf
QVhfT0JKQ19FWENFUFRJT05TCisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkKK3sKKyAg
ICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21fZWxlbWVu
dCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRN
YXJrZXJSYW5nZSIgZm9yUGFyYW1ldGVyOnJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgp
XTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAg
RU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiAwOyAgICAKK30KKworQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtl
ckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkK
K3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21f
ZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWEVuZFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyUmFuZ2UiIGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFu
Z2UoKV07CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKHRleHRNYXJrZXIpOwor
ICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gMDsgICAgCit9CisK
K0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJp
bGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIp
Cit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgdWlFbGVtZW50ID0gW21f
ZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFVJRWxlbWVudEZvclRleHRN
YXJrZXIiIGZvclBhcmFtZXRlcjptYXJrZXItPnBsYXRmb3JtVGV4dE1hcmtlcigpXTsKKyAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCh1aUVsZW1lbnQpOworICAgIEVORF9BWF9PQkpD
X0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gMDsgIAorfQorCkluZGV4OiBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHJl
dmlzaW9uIDY2MjI4KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5k
ZXJUcmVlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTc4LDYgKzU3OCwxNCBAQAogCQkJPg0K
IAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyLmNwcCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZl
UGF0aD0iLi5cQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCINCisJCQk+DQorCQk8L0ZpbGU+DQor
CQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLlxEcmFnZ2luZ0luZm8uaCINCiAJCQk+DQogCQk8
L0ZpbGU+DQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjYyMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0wOC0yNyAgQ2hyaXMgRmxl
aXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFYOiBTdXBwb3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
cyBpbiBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0Nzc4CisKKyAgICAgICAgQWRkIGJhc2ljIHRleHQgbWFya2VyIHRlc3RzIHRvIHZhbGlkYXRl
IGZ1bmN0aW9ucyBhcmUgd29ya2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFya2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXIu
aHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1t
YXJrZXItbGVuZ3RoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA4
LTI3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZC4gIEFkZCBjaHJvbWl1bS1tYWMgcmVzdWx0cyBmb3Igc3ZnL2N1c3RvbS9nZXRzY3JlZW5jdG0t
aW4tc2Nyb2xsYWJsZS1kaXYtYXJlYS54aHRtbC4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFya2VyLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVt
ZW50LWZvci10ZXh0LW1hcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKK3RleHQgaGVyZQordGV4
dCBibG9jawordGV4dCBoZXJlCitUaGlzIHRlc3RzIHRoZSB0ZXh0IG1hcmtlciBzeXN0ZW0gd2ls
bCByZXR1cm4gdGhlIHJpZ2h0IGVsZW1lbnQgd2hlbiBnaXZlbiBhIHRleHQgbWFya2VyCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRleHQudGV4dE1hcmtlclJhbmdlTGVu
Z3RoKHRleHRNYXJrZXJSYW5nZTEpIGlzIDEwCitQQVNTIHRleHQuYWNjZXNzaWJpbGl0eUVsZW1l
bnRGb3JUZXh0TWFya2VyKHN0YXJ0TWFya2VyKS5pc0VxdWFsKHRleHQpIGlzIHRydWUKK1BBU1Mg
dGV4dC5hY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoZW5kTWFya2VyKS5pc0VxdWFs
KHRleHQpIGlzIHRydWUKK1BBU1MgdGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgobmV3TWFya2Vy
UmFuZ2UpIGlzIDEwCitQQVNTIG5ld01hcmtlclJhbmdlLmlzRXF1YWwodGV4dE1hcmtlclJhbmdl
MSkgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1l
bnQtZm9yLXRleHQtbWFya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXIuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQt
Zm9yLXRleHQtbWFya2VyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
ZmFsc2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisK
K3RleHQgaGVyZQorPGRpdiBpZD0idGV4dDEiIHRhYmluZGV4PTA+dGV4dCBibG9jazwvZGl2Pgor
dGV4dCBoZXJlCisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgdGV4
dCBtYXJrZXIgc3lzdGVtIHdpbGwgcmV0dXJuIHRoZSByaWdodCBlbGVtZW50IHdoZW4gZ2l2ZW4g
YSB0ZXh0IG1hcmtlciIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cikgeworCisgICAgICAgICAgLy8gYXJpYS1zdGF0ZT10cnVlCisgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInRleHQxIikuZm9jdXMoKTsKKyAgICAgICAgICB2YXIgdGV4dCA9IGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgICAgICAgLy8gR2V0
IHRoZSBhY3R1YWwgdGV4dCBub2RlLgorICAgICAgICAgIHRleHQgPSB0ZXh0LmNoaWxkQXRJbmRl
eCgwKTsKKworICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIGdldCB0aGUgc3RhcnQgbWFy
a2VyIGZvciB0aGlzIHJhbmdlLgorICAgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UxID0gdGV4
dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAgICAgIHNob3VsZEJlKCJ0
ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aCh0ZXh0TWFya2VyUmFuZ2UxKSIsICIxMCIpOworICAg
ICAgICAgIHZhciBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
clJhbmdlKHRleHRNYXJrZXJSYW5nZTEpOworCisgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
c3RhcnQgbWFya2VyIHdpbGwgZ2l2ZSB1cyB0aGUgc2FtZSBlbGVtZW50IHRoYXQgd2Ugc3RhcnRl
ZCB3aXRoLgorICAgICAgICAgIHNob3VsZEJlVHJ1ZSgidGV4dC5hY2Nlc3NpYmlsaXR5RWxlbWVu
dEZvclRleHRNYXJrZXIoc3RhcnRNYXJrZXIpLmlzRXF1YWwodGV4dCkiKTsKKworICAgICAgICAg
IC8vIEdldCB0aGUgZW5kIG1hcmtlciBhbmQgY2hlY2sgdGhhdCBpdCBnaXZlcyB1cyB0aGUgc2Ft
ZSBlbGVtZW50LgorICAgICAgICAgIHZhciBlbmRNYXJrZXIgPSB0ZXh0LmVuZFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlMSk7CisgICAgICAgICAgc2hvdWxkQmVU
cnVlKCJ0ZXh0LmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihlbmRNYXJrZXIpLmlz
RXF1YWwodGV4dCkiKTsKKworICAgICAgICAgIC8vIE1ha2UgYSBtYXJrZXIgcmFuZ2Ugb3V0IG9m
IHRoZSBzdGFydCBhbmQgZW5kIG1hcmtlcnMgYW5kIGNoZWNrIHRoZSBsZW5ndGgKKyAgICAgICAg
ICB2YXIgbmV3TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoc3Rh
cnRNYXJrZXIsIGVuZE1hcmtlcik7CisgICAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtl
clJhbmdlTGVuZ3RoKG5ld01hcmtlclJhbmdlKSIsICIxMCIpOworCisgICAgICAgICAgLy8gQW5k
IG1ha2Ugc3VyZSBpdCBlcXVhbHMgdGhlIHNhbWUgbWFya2VyIHJhbmdlIHdlIHN0YXJ0ZWQgd2l0
aAorICAgICAgICAgIHNob3VsZEJlVHJ1ZSgibmV3TWFya2VyUmFuZ2UuaXNFcXVhbCh0ZXh0TWFy
a2VyUmFuZ2UxKSIpOworICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8
L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L3RleHQtbWFya2VyLWxlbmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACit0ZXh0IGJsb2NrCitUaGlzIHRl
c3RzIHRoZSB0ZXh0IG1hcmtlciBpbXBsZW1lbnRpb24gb2YgRFJUIGlzIHdvcmtpbmcgYnkgcmV0
dXJuaW5nIGEgbWFya2VyIHJhbmdlIGFuZCBieSByZXR1cm5pbmcgaXRzIGNvcnJlY3QgbGVuZ3Ro
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0ZXh0LnRleHRNYXJrZXJS
YW5nZUxlbmd0aCh0ZXh0TWFya2VyUmFuZ2UpIGlzIDEwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3Ro
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJi
b2R5Ij4KKworPGRpdiBpZD0idGV4dCIgdGFiaW5kZXg9MD50ZXh0IGJsb2NrPC9kaXY+CisKKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3Jp
cHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgdGV4dCBtYXJrZXIgaW1wbGVt
ZW50aW9uIG9mIERSVCBpcyB3b3JraW5nIGJ5IHJldHVybmluZyBhIG1hcmtlciByYW5nZSBhbmQg
YnkgcmV0dXJuaW5nIGl0cyBjb3JyZWN0IGxlbmd0aC4iKTsKKworICAgIGlmICh3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKworICAgICAgICAgIC8vIGFyaWEtc3RhdGU9dHJ1ZQor
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0IikuZm9jdXMoKTsKKyAgICAg
ICAgICB2YXIgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50Owor
ICAgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQodGV4dCk7CisgICAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtlclJhbmdlTGVu
Z3RoKHRleHRNYXJrZXJSYW5nZSkiLCAiMTAiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65774</attachid>
            <date>2010-08-27 15:25:25 -0700</date>
            <delta_ts>2010-08-27 17:44:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>42050</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjIzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMjcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcnMgaW4gRFJUCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDc3OAorCisgICAgICAgIFBy
b3ZpZGUgc3VwcG9ydCBpbiBEUlQgZm9yIGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSB0
ZXh0IG1hcmtlciBzeXN0ZW0gdGhhdCBBWCBleHBvc2VzLgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgZnV0dXJlIGJ1ZyBmaXhlcyBpbiB0aGUgdGV4dCBtYXJrZXIgc3lzdGVtIHRvIGJlIGFkZXF1
YXRlbHkgdGVzdGVkLgorCisgICAgICAgIFRlc3RzOiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci5odG1sCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgt
W0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpm
b3JQYXJhbWV0ZXI6XSk6CisKIDIwMTAtMDgtMjcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5k
ZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTI0LDYgKzI1MjQsMTcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0
cgogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVuZ3RoXTsKICAgICB9
CiAKKyAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhcikKKyAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2UiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFu
Z2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFy
a2VyUmFuZ2VdOworICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2
aXNpYmxlUG9zUmFuZ2Uuc3RhcnQpOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzogQCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAg
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAg
ICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2UuZW5k
KTsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDZWxsRm9y
Q29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlmIChh
cnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50XSAhPSAyKQpJbmRleDogV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjYy
MzEpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2
OSBAQAorMjAxMC0wOC0yNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFYOiBTdXBw
b3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VycyBpbiBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzc4CisKKyAgICAgICAgQWRkIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIGFuZCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHdoaWNoIGVu
Y2Fwc3VsYXRlIHRoZSBBWFRleHRNYXJrZXJzIAorICAgICAgICB0aGF0IFdlYkNvcmUgdXNlcyB3
aGVuIHZlbmRpbmcgaW5mb3JtYXRpb24gYWJvdXQgaXRzIFZpc2libGVQb3NpdGlvbnMgdGhyb3Vn
aCBBWC4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgbmV3IG1ldGhvZHMgaW4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCB0byByZXRyaWV2ZSBhbmQgdXNlIHRleHQgbWFya2VycywgYW5kIHNvbWUg
YmFzaWMKKyAgICAgICAgbWV0aG9kcyBmb3IgZW5jYXBzdWxhdGluZyBhbmQgY2hlY2tpbmcgZXF1
YWxpdHkuCisKKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IGZ1dHVyZSBidWcgZml4ZXMgaW4gdGhl
IHRleHQgbWFya2VyIHN5c3RlbSB0byBiZSBhZGVxdWF0ZWx5IHRlc3RlZC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcDogQWRkZWQuCisgICAg
ICAgICh0b1RleHRNYXJrZXIpOgorICAgICAgICAoaXNNYXJrZXJFcXVhbENhbGxiYWNrKToKKyAg
ICAgICAgKG1hcmtlckZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
OjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcyk6CisgICAgICAgICh0b1RleHRNYXJrZXJSYW5nZSk6Cisg
ICAgICAgIChpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjayk6CisgICAgICAgIChtYXJrZXJSYW5n
ZUZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6Om1ha2VK
U0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIuaDogQWRkZWQuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlcjo6cGxhdGZvcm1UZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6Cisg
ICAgICAgICh0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2spOgorICAgICAgICAodGV4
dE1hcmtlclJhbmdlTGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAodGV4dE1hcmtlclJhbmdlRm9y
TWFya2Vyc0NhbGxiYWNrKToKKyAgICAgICAgKHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZUNhbGxiYWNrKToKKyAgICAgICAgKGVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VD
YWxsYmFjayk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXJDYWxs
YmFjayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VG
b3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJS
YW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tOiBBZGRlZC4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
cik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZTo6aXNFcXVhbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9y
VGV4dE1hcmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LnZjcHJvajoKKwogMjAxMC0wOC0yNyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxh
aW5Abm9raWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZCBteXNlbGYgdG8gdGhlIGNv
bW1pdHRlcnMgbGlzdC4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisKKyNwcmFnbWEgbWFyayBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcgorCisvLyBDYWxsYmFjayBtZXRob2RzCisKK0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyKiB0b1RleHRNYXJrZXIoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaXNNYXJrZXJFcXVhbENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU09iamVjdFJlZiBvdGhl
ck1hcmtlciA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgb3RoZXJN
YXJrZXIgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBm
YWxzZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b1Rl
eHRNYXJrZXIodGhpc09iamVjdCktPmlzRXF1YWwodG9UZXh0TWFya2VyKG90aGVyTWFya2VyKSkp
OworfQorCisvLyBEZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJGaW5hbGl6ZShKU09i
amVjdFJlZiB0aGlzT2JqZWN0KQoreworICAgIGRlbGV0ZSB0b1RleHRNYXJrZXIodGhpc09iamVj
dCk7Cit9CisKKy8vIE9iamVjdCBDcmVhdGlvbgorCitKU09iamVjdFJlZiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyJiBlbGVtZW50KQoreworICAgIHJl
dHVybiBKU09iamVjdE1ha2UoY29udGV4dCwgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OmdldEpT
Q2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGVsZW1lbnQpKTsKK30KKworSlND
bGFzc1JlZiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcygpCit7CisgICAgc3Rh
dGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgICAgIHsgMCwgMCwgMCwg
MCB9CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5j
dGlvbnNbXSA9IHsKKyAgICAgICAgeyAiaXNFcXVhbCIsIGlzTWFya2VyRXF1YWxDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpT
Q2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NB
dHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIiLCAwLCBzdGF0aWNWYWx1ZXMs
IHN0YXRpY0Z1bmN0aW9ucywKKyAgICAgICAgMCwgbWFya2VyRmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBKU0NsYXNzUmVmIGFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24p
OworICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckNsYXNzOworfQorCisjcHJhZ21h
IG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZQorCisvLyBDYWxsYmFjayBtZXRob2Rz
CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHRvVGV4dE1hcmtlclJhbmdlKEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgaXNNYXJrZXJSYW5nZUVxdWFsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIEpTT2JqZWN0UmVmIG90aGVyTWFya2VyID0gMDsKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBvdGhlck1hcmtlciA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGZhbHNlKTsKKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmpl
Y3QpLT5pc0VxdWFsKHRvVGV4dE1hcmtlclJhbmdlKG90aGVyTWFya2VyKSkpOworfQorCisvLyBE
ZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJSYW5nZUZpbmFsaXplKEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QpCit7CisgICAgZGVsZXRlIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmplY3Qp
OworfQorCisvLyBPYmplY3QgQ3JlYXRpb24KKworSlNPYmplY3RSZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYgZWxlbWVu
dCkKK3sKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGNvbnRleHQsIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OmdldEpTQ2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UoZWxlbWVudCkpOworfQorCitKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U6OmdldEpTQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVl
c1tdID0geworICAgICAgICB7IDAsIDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGlj
IEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgImlzRXF1
YWwiLCBpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAs
IDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVm
aW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAor
ICAgICAgICAwLCBtYXJrZXJSYW5nZUZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBhY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJl
dHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlQ2xhc3M7Cit9CkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcl9oCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2Rl
ZmluZSBJTVBMRU1FTlRTX0FYX1RFWFRNQVJLRVJTIDEKKyNlbHNlCisjZGVmaW5lIElNUExFTUVO
VFNfQVhfVEVYVE1BUktFUlMgMAorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisjaWZkZWYg
X19PQkpDX18KK3R5cGVkZWYgaWQgUGxhdGZvcm1UZXh0TWFya2VyOwordHlwZWRlZiBpZCBQbGF0
Zm9ybVRleHRNYXJrZXJSYW5nZTsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCog
UGxhdGZvcm1UZXh0TWFya2VyOwordHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIFBsYXRmb3Jt
VGV4dE1hcmtlclJhbmdlOworI2VuZGlmCisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVRl
eHRNYXJrZXI7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtVGV4dE1hcmtlclJhbmdlOworI2VuZGlm
CisKK2NsYXNzIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ7CisKK2NsYXNzIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyIHsKK3B1YmxpYzoKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihQbGF0Zm9y
bVRleHRNYXJrZXIpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGNvbnN0IEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyJik7CisgICAgfkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKCk7CisgICAg
CisgICAgUGxhdGZvcm1UZXh0TWFya2VyIHBsYXRmb3JtVGV4dE1hcmtlcigpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dE1hcmtlcjsgfQorICAgIAorICAgIHN0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihKU0NvbnRleHRSZWYsIGNvbnN0IEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyJik7CisgICAgYm9vbCBpc0VxdWFsKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7
CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAg
ICBQbGF0Zm9ybVRleHRNYXJrZXIgbV90ZXh0TWFya2VyOworfTsKKworY2xhc3MgQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSB7CitwdWJsaWM6CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZShQbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSk7CisgICAgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZShjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlJik7CisgICAgfkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoKTsKKyAgICAKKyAgICBQbGF0Zm9ybVRleHRNYXJr
ZXJSYW5nZSBwbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dE1h
cmtlclJhbmdlOyB9CisgICAgCisgICAgc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UoSlNDb250ZXh0UmVmLCBjb25zdCBBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlJik7CisgICAgYm9vbCBpc0VxdWFsKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFz
cygpOworICAgIFBsYXRmb3JtVGV4dE1hcmtlciBtX3RleHRNYXJrZXJSYW5nZTsgICAgCit9Owor
CitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdG9UZXh0TWFya2VyKEpTT2JqZWN0UmVmIG9iamVj
dCk7CitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiB0b1RleHRNYXJrZXJSYW5nZShKU09i
amVjdFJlZiBvYmplY3QpOworCisjaWYgIUlNUExFTUVOVFNfQVhfVEVYVE1BUktFUlMKK2lubGlu
ZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoUGxhdGZv
cm1UZXh0TWFya2VyKSB7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIoY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXImKSB7IH0KK2lu
bGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKCkg
eyB9CitpbmxpbmUgYm9vbCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6aXNFcXVhbChBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciopIHsgcmV0dXJuIGZhbHNlOyB9CisKK2lubGluZSBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKFBsYXRmb3Jt
VGV4dE1hcmtlclJhbmdlKSB7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
OjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UmKSB7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjp+QWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSgpIHsgfQoraW5saW5lIGJvb2wgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKikg
eyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudF9oCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2LDYgKzQwNiw2MiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiByZW1vdmVTZWxlY3Rpb25DYWxs
YmFjCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0
aWMgSlNWYWx1ZVJlZiB0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHVpRWxl
bWVudCA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgdWlFbGVtZW50
ID0gdG9BWEVsZW1lbnQoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6
Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29udGV4dCwgdG9BWEVsZW1lbnQo
dGhpc09iamVjdCktPnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodWlFbGVtZW50KSk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRNYXJrZXJSYW5nZUxlbmd0aENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
KiByYW5nZSA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgcmFuZ2Ug
PSB0b1RleHRNYXJrZXJSYW5nZShKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4
dCwgKGludCl0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+dGV4dE1hcmtlclJhbmdlTGVuZ3RoKHJh
bmdlKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnND
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gMDsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciogZW5kTWFya2VyID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAyKSB7CisgICAgICAg
IHN0YXJ0TWFya2VyID0gdG9UZXh0TWFya2VyKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgICAgICBlbmRNYXJrZXIgPSB0b1RleHRNYXJrZXIo
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjptYWtlSlNB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnRleHQsIHRvQVhFbGVtZW50KHRoaXNPYmpl
Y3QpLT50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0YXJ0TWFya2VyLCBlbmRNYXJrZXIpKTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdl
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UqIG1hcmtlclJhbmdlID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA9PSAxKQorICAgICAgICBtYXJrZXJSYW5nZSA9IHRvVGV4dE1hcmtlclJhbmdlKEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIAorICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnN0YXJ0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBlbmRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIG1hcmtlclJhbmdl
ID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBtYXJrZXJSYW5nZSA9
IHRvVGV4dE1hcmtlclJhbmdlKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOworICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6
bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09i
amVjdCktPmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpKTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKiBtYXJrZXIgPSAwOworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAg
ICAgIG1hcmtlciA9IHRvVGV4dE1hcmtlcihKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb250ZXh0LCB0b0FYRWxlbWVudCh0
aGlzT2JqZWN0KS0+YWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyKG1hcmtlcikpOwor
fQogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBAIC02NjIsNiArNzE4LDQyIEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3QKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKKy8vIEltcGxlbWVudGF0aW9uCisKKyNpZiAhSU1Q
TEVNRU5UU19BWF9URVhUTUFSS0VSUworCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciosIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKikKK3sKKyAgICByZXR1cm4gMDsgICAK
K30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nl
c3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKQor
eworICAgIHJldHVybiAwOworfQorCisjZW5kaWYKKwogLy8gRGVzdHJ1Y3Rpb24KIAogc3RhdGlj
IHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYgdGhpc09iamVjdCkKQEAgLTc3NCw2ICs4NjYsMTIg
QEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRKUwogICAgICAgICB7ICJ0
YWtlU2VsZWN0aW9uIiwgdGFrZVNlbGVjdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
ImFkZFNlbGVjdGlvbiIsIGFkZFNlbGVjdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
InJlbW92ZVNlbGVjdGlvbiIsIHJlbW92ZVNlbGVjdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAg
ICAgIHsgInRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQiLCB0ZXh0TWFya2VyUmFuZ2VGb3JFbGVt
ZW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAidGV4dE1hcmtlclJhbmdlRm9yTWFya2Vy
cyIsIHRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJzdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiLCBzdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJlbmRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlclJhbmdlIiwgZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCisgICAgICAgIHsgImFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtl
ciIsIGFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgInRleHRNYXJrZXJSYW5nZUxlbmd0aCIsIHRleHRNYXJrZXJSYW5nZUxlbmd0aENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwgMCB9CiAgICAgfTsKIApJbmRleDogV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aAkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudF9oCiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnRfaAogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQwLDggKzQxLDggQEAgdHlwZWRlZiBzdHJ1Y3Qg
b2JqY19vYmplY3QqIFBsYXRmb3JtVUlFbAogI3VuZGVmIF9XSU5TT0NLQVBJXwogI2RlZmluZSBf
V0lOU09DS0FQSV8gLy8gUHJldmVudCBpbmNsdXNpb24gb2Ygd2luc29jay5oIGluIHdpbmRvd3Mu
aAogCi0jaW5jbHVkZSA8b2xlYWNjLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KKyNp
bmNsdWRlIDxvbGVhY2MuaD4KIAogdHlwZWRlZiBDT01QdHI8SUFjY2Vzc2libGU+IFBsYXRmb3Jt
VUlFbGVtZW50OwogI2VsaWYgUExBVEZPUk0oR1RLKQpAQCAtMTgzLDYgKzE4NCwxNCBAQCBwdWJs
aWM6CiAgICAgLy8gVGFibGUtc3BlY2lmaWMKICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IGNl
bGxGb3JDb2x1bW5BbmRSb3codW5zaWduZWQgY29sdW1uLCB1bnNpZ25lZCByb3cpOwogCisgICAg
Ly8gVGV4dCBtYXJrZXJzLgorICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4dE1h
cmtlclJhbmdlRm9yRWxlbWVudChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Kik7ICAgIAorICAgIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgdGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIsIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
KiBlbmRNYXJrZXIpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0VGV4dE1hcmtl
ckZvclRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CisgICAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCBhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIqKTsKKyAgICBpbnQgdGV4dE1hcmtlclJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UqKTsKKyAgICAKICAgICAvLyBOb3RpZmljYXRpb25zCiAgICAgLy8gRnVuY3Rpb24g
Y2FsbGJhY2sgc2hvdWxkIHRha2Ugb25lIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgbm90aWZp
Y2F0aW9uLgogICAgIGJvb2wgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNPYmplY3RSZWYgZnVu
Y3Rpb25DYWxsYmFjayk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDY2MjI4KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsOSBAQAogCQkxQUM3N0RDRjEyMDYwNUI2MDA1QzE5RUYgLyogTlBSdW50aW1lUmVtb3Zl
UHJvcGVydHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFDNzdEQ0UxMjA2MDVCNjAwNUMxOUVGIC8qIE5QUnVudGltZVJlbW92ZVByb3BlcnR5LmNw
cCAqLzsgfTsKIAkJMUFEOUQyRkUxMjAyODQwOTAwMUE3MEQxIC8qIFBsdWdpblNjcmlwdGFibGVO
UE9iamVjdEludm9rZURlZmF1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFEOUQyRkQxMjAyODQwOTAwMUE3MEQxIC8qIFBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwICovOyB9OwogCQkyM0JDQjg5MDBFQTU3NjIzMDAz
QzYyODkgLyogT3BlbkdMLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDIzQkNCODhGMEVBNTc2MjMwMDNDNjI4OSAvKiBPcGVuR0wuZnJh
bWV3b3JrICovOyB9OworCQkyOUNGQkExMDEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI5Q0ZCQTBFMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5o
ICovOyB9OworCQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjlDRkJBMEYxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCAq
LzsgfTsKKwkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjlDRkJBMkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1t
ICovOyB9OwogCQkzNzEzRURFMjExNUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5nIGlu
IENvcHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzEz
RURERjExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLUEucG5nICovOyB9OwogCQkzNzEzRURF
MzExNUJFMTkzMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiBpbiBDb3B5IEZvbnQgRmlsZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxM0VERTAxMTVCRTE2RjAwNzA1NzIw
IC8qIENvbG9yQml0cy50dGYgKi87IH07CiAJCTUxODVGNkIyMTA3MTRFMDcwMDdBQTM5MyAvKiBI
aXN0b3J5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTg1RjY5RjEwNzE0QTU3MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLm1tICov
OyB9OwpAQCAtMjAyLDYgKzIwNSw5IEBACiAJCTFBQzc3RENFMTIwNjA1QjYwMDVDMTlFRiAvKiBO
UFJ1bnRpbWVSZW1vdmVQcm9wZXJ0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOUFJ1bnRpbWVSZW1vdmVQcm9wZXJ0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBRDlEMkZEMTIwMjg0MDkwMDFBNzBEMSAvKiBQbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3RJbnZva2VEZWZhdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBsdWdpblNjcmlwdGFibGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyM0JDQjg4RjBFQTU3NjIzMDAzQzYyODkgLyogT3BlbkdMLmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gT3BlbkdMLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFi
c29sdXRlPiI7IH07CisJCTI5Q0ZCQTBFMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUNGQkEwRjEy
MjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUNGQkEyRDEyMjczQTEwMDBCQzMwQzAgLyog
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbTsgcGF0aCA9IG1hYy9B
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlUHJlZml4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MTNFRERGMTE1QkUxNkYwMDcwNTcyMCAvKiBD
b2xvckJpdHMtQS5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBpbWFnZS5wbmc7IG5hbWUgPSAiQ29sb3JCaXRzLUEucG5nIjsgcGF0aCA9ICJmb250
cy9Db2xvckJpdHMtQS5wbmciOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzEzRURF
MDExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBDb2xvckJpdHMudHRmOyBw
YXRoID0gZm9udHMvQ29sb3JCaXRzLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM4OSw2ICszOTUsOSBAQAogCQkJCUJDRDA4QjM5MEUxMDU3RUYwMEE3RDBDMSAvKiBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJQkNEMDhBNTgwRTEwNDk2QjAwQTdEMEMxIC8q
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggKi8sCiAJCQkJQkNEMDhCNzAwRTEwNTlEMjAwQTdE
MEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovLAorCQkJCTI5Q0ZCQTBGMTIy
NzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAgKi8sCisJCQkJMjlD
RkJBMEUxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggKi8sCisJ
CQkJMjlDRkJBMkQxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFj
Lm1tICovLAogCQkJCUJDMEUyNERGMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmNwcCAqLywKIAkJCQlCQzBFMjRERTBFMkQ5NDUxMDAxQjZCQzIgLyogQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oICovLAogCQkJCUJDMEUyNjE0MEUyREE0QzYwMDFCNkJDMiAvKiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tICovLApAQCAtNTg1LDYgKzU5NCw3IEBACiAJCQkJQkM5
RDkwMjYwQzk3NDcyRTAwOTlBNEEzIC8qIFdvcmtRdWV1ZUl0ZW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxODVGNkIzMTA3MTRFMTIwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxQjc4MTY3MTFBRjMxQzMwMDdFMUJDMiAvKiBNb2NrR2VvbG9jYXRpb25Q
cm92aWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjlDRkJBMTAxMjI3MzZFNjAwQkMzMEMwIC8q
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTY3Nyw3ICs2ODcs
MTQgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
MTQ5QzI5QzMwODkwMkM2RDAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYUHJvamVjdCAiRHVtcFJlbmRlclRyZWUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24g
PSAiWGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1Nj
YW5uZWRGb3JFbmNvZGluZ3MgPSAxOworCQkJa25vd25SZWdpb25zID0gKAorCQkJCUVuZ2xpc2gs
CisJCQkJSmFwYW5lc2UsCisJCQkJRnJlbmNoLAorCQkJCUdlcm1hbiwKKwkJCSk7CiAJCQltYWlu
R3JvdXAgPSAwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogRHVtcFJlbmRlclRyZWUgKi87CiAJ
CQlwcm9kdWN0UmVmR3JvdXAgPSA5MzQwOTk1NTA4NTQwQ0FGMDA3RjNCQzggLyogUHJvZHVjdHMg
Ki87CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwpAQCAtNzU4LDYgKzc3NSw4IEBACiAJCQkJQkNB
MThCMjYwQzlCMDE1QzAwMTE0MzY5IC8qIFdvcmtRdWV1ZUl0ZW1NYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1MTg1RjZCMjEwNzE0RTA3MDA3QUEzOTMgLyogSGlzdG9yeURlbGVnYXRlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFCNzgxNjUxMUFGMzFCNzAwN0UxQkMyIC8qIE1vY2tHZW9sb2Nh
dGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMjlDRkJBMTExMjI3MzZFNjAwQkMz
MEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI5
Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlUZXh0TWFya2VyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbQkocmV2aXNpb24gMCkK
KysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ck1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIgor
CisjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIKKworQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXI6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKFBsYXRmb3JtVGV4dE1hcmtlciBtYXJr
ZXIpCisgICAgOiBtX3RleHRNYXJrZXIobWFya2VyKQoreworICAgIGlmIChtX3RleHRNYXJrZXIp
CisgICAgICAgIENGUmV0YWluKG1fdGV4dE1hcmtlcik7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0
TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciYgbWFya2VyKQorICAgIDogbV90ZXh0TWFya2VyKG1hcmtlci5wbGF0Zm9ybVRleHRNYXJr
ZXIoKSkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAgICBDRlJldGFpbihtX3RleHRN
YXJrZXIpOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKCkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAgICBDRlJlbGVhc2UobV90
ZXh0TWFya2VyKTsKKyAgICBtX3RleHRNYXJrZXIgPSBuaWw7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXI6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIG90aGVyKQor
eworICAgIHJldHVybiBbcGxhdGZvcm1UZXh0TWFya2VyKCkgaXNFcXVhbDpvdGhlci0+cGxhdGZv
cm1UZXh0TWFya2VyKCldOworfQorCisjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlKFBsYXRmb3JtVGV4dE1hcmtlclJhbmdlIG1hcmtlclJhbmdlKQorICAgIDog
bV90ZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpCit7CisgICAgaWYgKG1fdGV4dE1hcmtlclJh
bmdlKQorICAgICAgICBDRlJldGFpbihtX3RleHRNYXJrZXJSYW5nZSk7Cit9CisKK0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29uc3Qg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYgbWFya2VyUmFuZ2UpCisgICAgOiBtX3RleHRN
YXJrZXJSYW5nZShtYXJrZXJSYW5nZS5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpKQoreworICAg
IGlmIChtX3RleHRNYXJrZXJSYW5nZSkKKyAgICAgICAgQ0ZSZXRhaW4obV90ZXh0TWFya2VyUmFu
Z2UpOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjp+QWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSgpCit7CisgICAgaWYgKG1fdGV4dE1hcmtlclJhbmdlKQorICAgICAgICBD
RlJlbGVhc2UobV90ZXh0TWFya2VyUmFuZ2UpOworICAgIG1fdGV4dE1hcmtlclJhbmdlID0gbmls
OworfQorCitib29sIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OmlzRXF1YWwoQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZSogb3RoZXIpCit7CisgICAgcmV0dXJuIFtwbGF0Zm9ybVRl
eHRNYXJrZXJSYW5nZSgpIGlzRXF1YWw6b3RoZXItPnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKCld
OworfQorCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNpb24gNjYyMjgpCisrKyBX
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTE5MCwzICsxMTkwLDY3IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWMKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CisK
Ky8vIFRleHQgbWFya2VycworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQg
dGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCIgZm9yUGFyYW1ldGVyOmVsZW1lbnQtPnBs
YXRmb3JtVUlFbGVtZW50KCldOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAgIAor
ICAgIHJldHVybiAwOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtl
clJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQoreworICAg
IEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIE5TTnVtYmVyKiBsZW5ndGhWYWx1ZSA9IFtt
X2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhMZW5ndGhGb3JUZXh0TWFy
a2VyUmFuZ2UiIGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKV07
CisgICAgcmV0dXJuIFtsZW5ndGhWYWx1ZSBpbnRWYWx1ZV07CisgICAgRU5EX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIAorICAgIHJldHVybiAwOworfQorCisKK0FjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yTWFya2Vy
cyhBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIsIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKiBlbmRNYXJrZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAg
TlNBcnJheSogdGV4dE1hcmtlcnMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOnN0YXJ0TWFy
a2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKSwgZW5kTWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIo
KSwgbmlsXTsKKyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVW5vcmRlcmVkVGV4dE1hcmtl
cnMiIGZvclBhcmFtZXRlcjp0ZXh0TWFya2Vyc107CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJ
T05TCisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkKK3sKKyAgICBCRUdJTl9BWF9PQkpD
X0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSIgZm9y
UGFyYW1ldGVyOnJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpXTsKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgRU5EX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIAorICAgIHJldHVybiAwOyAgICAKK30KKworQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkKK3sKKyAgICBCRUdJTl9B
WF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2Ui
IGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKV07CisgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgIEVORF9BWF9PQkpD
X0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gMDsgICAgCit9CisKK0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JU
ZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIpCit7CisgICAgQkVHSU5f
QVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgdWlFbGVtZW50ID0gW21fZWxlbWVudCBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFVJRWxlbWVudEZvclRleHRNYXJrZXIiIGZvclBhcmFt
ZXRlcjptYXJrZXItPnBsYXRmb3JtVGV4dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCh1aUVsZW1lbnQpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAg
ICAKKyAgICByZXR1cm4gMDsgIAorfQorCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oJKHJldmlzaW9uIDY2MjI4KQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTc4LDYgKzU3OCwxNCBAQAogCQkJPg0KIAkJPC9GaWxlPg0KIAkJ
PEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCIN
CisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIuaCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJl
bGF0aXZlUGF0aD0iLlxEcmFnZ2luZ0luZm8uaCINCiAJCQk+DQogCQk8L0ZpbGU+DQpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjYyMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0wOC0yNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXph
Y2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFYOiBTdXBwb3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VycyBpbiBEUlQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzc4CisKKyAgICAg
ICAgQWRkIGJhc2ljIHRleHQgbWFya2VyIHRlc3RzIHRvIHZhbGlkYXRlIGZ1bmN0aW9ucyBhcmUg
d29ya2luZy4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQt
Zm9yLXRleHQtbWFya2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXIuaHRtbDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkv
dGV4dC1tYXJrZXItbGVuZ3RoLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA4LTI3ICBUb255IENoYW5n
ICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gIEFkZCBjaHJvbWl1
bS1tYWMgcmVzdWx0cyBmb3Igc3ZnL2N1c3RvbS9nZXRzY3JlZW5jdG0taW4tc2Nyb2xsYWJsZS1k
aXYtYXJlYS54aHRtbC4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L2VsZW1lbnQtZm9yLXRleHQtbWFya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0LW1h
cmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKK3RleHQgaGVyZQordGV4dCBibG9jawordGV4dCBo
ZXJlCitUaGlzIHRlc3RzIHRoZSB0ZXh0IG1hcmtlciBzeXN0ZW0gd2lsbCByZXR1cm4gdGhlIHJp
Z2h0IGVsZW1lbnQgd2hlbiBnaXZlbiBhIHRleHQgbWFya2VyCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIHRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKHRleHRNYXJrZXJS
YW5nZTEpIGlzIDEwCitQQVNTIHRleHQuYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2Vy
KHN0YXJ0TWFya2VyKS5pc0VxdWFsKHRleHQpIGlzIHRydWUKK1BBU1MgdGV4dC5hY2Nlc3NpYmls
aXR5RWxlbWVudEZvclRleHRNYXJrZXIoZW5kTWFya2VyKS5pc0VxdWFsKHRleHQpIGlzIHRydWUK
K1BBU1MgdGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgobmV3TWFya2VyUmFuZ2UpIGlzIDEwCitQ
QVNTIG5ld01hcmtlclJhbmdlLmlzRXF1YWwodGV4dE1hcmtlclJhbmdlMSkgaXMgdHJ1ZQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFy
a2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFya2Vy
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKK3RleHQgaGVyZQorPGRp
diBpZD0idGV4dDEiIHRhYmluZGV4PTA+dGV4dCBibG9jazwvZGl2PgordGV4dCBoZXJlCisKKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3Jp
cHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgdGV4dCBtYXJrZXIgc3lzdGVt
IHdpbGwgcmV0dXJuIHRoZSByaWdodCBlbGVtZW50IHdoZW4gZ2l2ZW4gYSB0ZXh0IG1hcmtlciIp
OworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworCisgICAgICAg
ICAgLy8gYXJpYS1zdGF0ZT10cnVlCisgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InRleHQxIikuZm9jdXMoKTsKKyAgICAgICAgICB2YXIgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmZvY3VzZWRFbGVtZW50OworCisgICAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgdGV4
dCBub2RlLgorICAgICAgICAgIHRleHQgPSB0ZXh0LmNoaWxkQXRJbmRleCgwKTsKKworICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIGdldCB0aGUgc3RhcnQgbWFya2VyIGZvciB0aGlzIHJh
bmdlLgorICAgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UxID0gdGV4dC50ZXh0TWFya2VyUmFu
Z2VGb3JFbGVtZW50KHRleHQpOworICAgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnRleHRNYXJrZXJS
YW5nZUxlbmd0aCh0ZXh0TWFya2VyUmFuZ2UxKSIsICIxMCIpOworICAgICAgICAgIHZhciBzdGFy
dE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJr
ZXJSYW5nZTEpOworCisgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc3RhcnQgbWFya2VyIHdp
bGwgZ2l2ZSB1cyB0aGUgc2FtZSBlbGVtZW50IHRoYXQgd2Ugc3RhcnRlZCB3aXRoLgorICAgICAg
ICAgIHNob3VsZEJlVHJ1ZSgidGV4dC5hY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIo
c3RhcnRNYXJrZXIpLmlzRXF1YWwodGV4dCkiKTsKKworICAgICAgICAgIC8vIEdldCB0aGUgZW5k
IG1hcmtlciBhbmQgY2hlY2sgdGhhdCBpdCBnaXZlcyB1cyB0aGUgc2FtZSBlbGVtZW50LgorICAg
ICAgICAgIHZhciBlbmRNYXJrZXIgPSB0ZXh0LmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFu
Z2UodGV4dE1hcmtlclJhbmdlMSk7CisgICAgICAgICAgc2hvdWxkQmVUcnVlKCJ0ZXh0LmFjY2Vz
c2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihlbmRNYXJrZXIpLmlzRXF1YWwodGV4dCkiKTsK
KworICAgICAgICAgIC8vIE1ha2UgYSBtYXJrZXIgcmFuZ2Ugb3V0IG9mIHRoZSBzdGFydCBhbmQg
ZW5kIG1hcmtlcnMgYW5kIGNoZWNrIHRoZSBsZW5ndGgKKyAgICAgICAgICB2YXIgbmV3TWFya2Vy
UmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoc3RhcnRNYXJrZXIsIGVuZE1h
cmtlcik7CisgICAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKG5l
d01hcmtlclJhbmdlKSIsICIxMCIpOworCisgICAgICAgICAgLy8gQW5kIG1ha2Ugc3VyZSBpdCBl
cXVhbHMgdGhlIHNhbWUgbWFya2VyIHJhbmdlIHdlIHN0YXJ0ZWQgd2l0aAorICAgICAgICAgIHNo
b3VsZEJlVHJ1ZSgibmV3TWFya2VyUmFuZ2UuaXNFcXVhbCh0ZXh0TWFya2VyUmFuZ2UxKSIpOwor
ICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyLWxl
bmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExIEBACit0ZXh0IGJsb2NrCitUaGlzIHRlc3RzIHRoZSB0ZXh0IG1h
cmtlciBpbXBsZW1lbnRpb24gb2YgRFJUIGlzIHdvcmtpbmcgYnkgcmV0dXJuaW5nIGEgbWFya2Vy
IHJhbmdlIGFuZCBieSByZXR1cm5pbmcgaXRzIGNvcnJlY3QgbGVuZ3RoLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aCh0ZXh0
TWFya2VyUmFuZ2UpIGlzIDEwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvdGV4dC1tYXJrZXItbGVuZ3RoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtl
ci1sZW5ndGguaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGRpdiBp
ZD0idGV4dCIgdGFiaW5kZXg9MD50ZXh0IGJsb2NrPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgdGV4dCBtYXJrZXIgaW1wbGVtZW50aW9uIG9mIERSVCBp
cyB3b3JraW5nIGJ5IHJldHVybmluZyBhIG1hcmtlciByYW5nZSBhbmQgYnkgcmV0dXJuaW5nIGl0
cyBjb3JyZWN0IGxlbmd0aC4iKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIpIHsKKworICAgICAgICAgIC8vIGFyaWEtc3RhdGU9dHJ1ZQorICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0IikuZm9jdXMoKTsKKyAgICAgICAgICB2YXIgdGV4dCA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAgICAgIHZhciB0
ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7Cisg
ICAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKHRleHRNYXJrZXJS
YW5nZSkiLCAiMTAiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65796</attachid>
            <date>2010-08-27 17:44:40 -0700</date>
            <delta_ts>2010-08-30 09:48:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>42049</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjIzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMjcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcnMgaW4gRFJUCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDc3OAorCisgICAgICAgIFBy
b3ZpZGUgc3VwcG9ydCBpbiBEUlQgZm9yIGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSB0
ZXh0IG1hcmtlciBzeXN0ZW0gdGhhdCBBWCBleHBvc2VzLgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgZnV0dXJlIGJ1ZyBmaXhlcyBpbiB0aGUgdGV4dCBtYXJrZXIgc3lzdGVtIHRvIGJlIGFkZXF1
YXRlbHkgdGVzdGVkLgorCisgICAgICAgIFRlc3RzOiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci5odG1sCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgt
W0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpm
b3JQYXJhbWV0ZXI6XSk6CisKIDIwMTAtMDgtMjcgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KSW5k
ZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTI0LDYgKzI1MjQsMTcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0
cgogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bGVuZ3RoXTsKICAgICB9
CiAKKyAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhcikKKyAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6IEAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2UiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFu
Z2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFy
a2VyUmFuZ2VdOworICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2
aXNpYmxlUG9zUmFuZ2Uuc3RhcnQpOworICAgIH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzogQCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAg
ICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxl
UG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAg
ICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2UuZW5k
KTsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7CiAgICAg
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDZWxsRm9y
Q29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlmIChh
cnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50XSAhPSAyKQpJbmRleDogV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjYy
MzEpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2
OSBAQAorMjAxMC0wOC0yNyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFYOiBTdXBw
b3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VycyBpbiBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0Nzc4CisKKyAgICAgICAgQWRkIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIGFuZCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHdoaWNoIGVu
Y2Fwc3VsYXRlIHRoZSBBWFRleHRNYXJrZXJzIAorICAgICAgICB0aGF0IFdlYkNvcmUgdXNlcyB3
aGVuIHZlbmRpbmcgaW5mb3JtYXRpb24gYWJvdXQgaXRzIFZpc2libGVQb3NpdGlvbnMgdGhyb3Vn
aCBBWC4KKworICAgICAgICBUaGVyZSBhcmUgYSBmZXcgbmV3IG1ldGhvZHMgaW4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCB0byByZXRyaWV2ZSBhbmQgdXNlIHRleHQgbWFya2VycywgYW5kIHNvbWUg
YmFzaWMKKyAgICAgICAgbWV0aG9kcyBmb3IgZW5jYXBzdWxhdGluZyBhbmQgY2hlY2tpbmcgZXF1
YWxpdHkuCisKKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IGZ1dHVyZSBidWcgZml4ZXMgaW4gdGhl
IHRleHQgbWFya2VyIHN5c3RlbSB0byBiZSBhZGVxdWF0ZWx5IHRlc3RlZC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcDogQWRkZWQuCisgICAg
ICAgICh0b1RleHRNYXJrZXIpOgorICAgICAgICAoaXNNYXJrZXJFcXVhbENhbGxiYWNrKToKKyAg
ICAgICAgKG1hcmtlckZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
OjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcyk6CisgICAgICAgICh0b1RleHRNYXJrZXJSYW5nZSk6Cisg
ICAgICAgIChpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjayk6CisgICAgICAgIChtYXJrZXJSYW5n
ZUZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6Om1ha2VK
U0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIuaDogQWRkZWQuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlcjo6cGxhdGZvcm1UZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6Cisg
ICAgICAgICh0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2spOgorICAgICAgICAodGV4
dE1hcmtlclJhbmdlTGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAodGV4dE1hcmtlclJhbmdlRm9y
TWFya2Vyc0NhbGxiYWNrKToKKyAgICAgICAgKHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZUNhbGxiYWNrKToKKyAgICAgICAgKGVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VD
YWxsYmFjayk6CisgICAgICAgIChhY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXJDYWxs
YmFjayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VG
b3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJS
YW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tOiBBZGRlZC4K
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
cik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZTo6aXNFcXVhbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9y
VGV4dE1hcmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LnZjcHJvajoKKwogMjAxMC0wOC0yNyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxh
aW5Abm9raWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZCBteXNlbGYgdG8gdGhlIGNv
bW1pdHRlcnMgbGlzdC4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisKKyNwcmFnbWEgbWFyayBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcgorCisvLyBDYWxsYmFjayBtZXRob2RzCisKK0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyKiB0b1RleHRNYXJrZXIoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcio+KEpTT2JqZWN0R2V0UHJp
dmF0ZShvYmplY3QpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaXNNYXJrZXJFcXVhbENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU09iamVjdFJlZiBvdGhl
ck1hcmtlciA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgb3RoZXJN
YXJrZXIgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBm
YWxzZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCB0b1Rl
eHRNYXJrZXIodGhpc09iamVjdCktPmlzRXF1YWwodG9UZXh0TWFya2VyKG90aGVyTWFya2VyKSkp
OworfQorCisvLyBEZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJGaW5hbGl6ZShKU09i
amVjdFJlZiB0aGlzT2JqZWN0KQoreworICAgIGRlbGV0ZSB0b1RleHRNYXJrZXIodGhpc09iamVj
dCk7Cit9CisKKy8vIE9iamVjdCBDcmVhdGlvbgorCitKU09iamVjdFJlZiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyJiBlbGVtZW50KQoreworICAgIHJl
dHVybiBKU09iamVjdE1ha2UoY29udGV4dCwgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OmdldEpT
Q2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGVsZW1lbnQpKTsKK30KKworSlND
bGFzc1JlZiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcygpCit7CisgICAgc3Rh
dGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgICAgIHsgMCwgMCwgMCwg
MCB9CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5j
dGlvbnNbXSA9IHsKKyAgICAgICAgeyAiaXNFcXVhbCIsIGlzTWFya2VyRXF1YWxDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpT
Q2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NB
dHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIiLCAwLCBzdGF0aWNWYWx1ZXMs
IHN0YXRpY0Z1bmN0aW9ucywKKyAgICAgICAgMCwgbWFya2VyRmluYWxpemUsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBKU0NsYXNzUmVmIGFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24p
OworICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckNsYXNzOworfQorCisjcHJhZ21h
IG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZQorCisvLyBDYWxsYmFjayBtZXRob2Rz
CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHRvVGV4dE1hcmtlclJhbmdlKEpTT2Jq
ZWN0UmVmIG9iamVjdCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgaXNNYXJrZXJSYW5nZUVxdWFsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIEpTT2JqZWN0UmVmIG90aGVyTWFya2VyID0gMDsKKyAgICBpZiAo
YXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBvdGhlck1hcmtlciA9IEpTVmFsdWVUb09iamVj
dChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGZhbHNlKTsKKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmpl
Y3QpLT5pc0VxdWFsKHRvVGV4dE1hcmtlclJhbmdlKG90aGVyTWFya2VyKSkpOworfQorCisvLyBE
ZXN0cnVjdGlvbgorCitzdGF0aWMgdm9pZCBtYXJrZXJSYW5nZUZpbmFsaXplKEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QpCit7CisgICAgZGVsZXRlIHRvVGV4dE1hcmtlclJhbmdlKHRoaXNPYmplY3Qp
OworfQorCisvLyBPYmplY3QgQ3JlYXRpb24KKworSlNPYmplY3RSZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShKU0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYgZWxlbWVu
dCkKK3sKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGNvbnRleHQsIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OmdldEpTQ2xhc3MoKSwgbmV3IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UoZWxlbWVudCkpOworfQorCitKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U6OmdldEpTQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVl
c1tdID0geworICAgICAgICB7IDAsIDAsIDAsIDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGlj
IEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgImlzRXF1
YWwiLCBpc01hcmtlclJhbmdlRXF1YWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAs
IDAgfQorICAgIH07CisgICAgCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVm
aW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAor
ICAgICAgICAwLCBtYXJrZXJSYW5nZUZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBhY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlclJhbmdlQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJl
dHVybiBhY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlQ2xhc3M7Cit9CkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcl9oCisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2Rl
ZmluZSBJTVBMRU1FTlRTX0FYX1RFWFRNQVJLRVJTIDEKKyNlbHNlCisjZGVmaW5lIElNUExFTUVO
VFNfQVhfVEVYVE1BUktFUlMgMAorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisjaWZkZWYg
X19PQkpDX18KK3R5cGVkZWYgaWQgUGxhdGZvcm1UZXh0TWFya2VyOwordHlwZWRlZiBpZCBQbGF0
Zm9ybVRleHRNYXJrZXJSYW5nZTsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCog
UGxhdGZvcm1UZXh0TWFya2VyOwordHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIFBsYXRmb3Jt
VGV4dE1hcmtlclJhbmdlOworI2VuZGlmCisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVRl
eHRNYXJrZXI7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtVGV4dE1hcmtlclJhbmdlOworI2VuZGlm
CisKK2NsYXNzIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ7CisKK2NsYXNzIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyIHsKK3B1YmxpYzoKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihQbGF0Zm9y
bVRleHRNYXJrZXIpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGNvbnN0IEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyJik7CisgICAgfkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKCk7CisgICAg
CisgICAgUGxhdGZvcm1UZXh0TWFya2VyIHBsYXRmb3JtVGV4dE1hcmtlcigpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dE1hcmtlcjsgfQorICAgIAorICAgIHN0YXRpYyBKU09iamVjdFJlZiBtYWtlSlNB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihKU0NvbnRleHRSZWYsIGNvbnN0IEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyJik7CisgICAgYm9vbCBpc0VxdWFsKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7
CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAg
ICBQbGF0Zm9ybVRleHRNYXJrZXIgbV90ZXh0TWFya2VyOworfTsKKworY2xhc3MgQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSB7CitwdWJsaWM6CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZShQbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSk7CisgICAgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZShjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlJik7CisgICAgfkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoKTsKKyAgICAKKyAgICBQbGF0Zm9ybVRleHRNYXJr
ZXJSYW5nZSBwbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dE1h
cmtlclJhbmdlOyB9CisgICAgCisgICAgc3RhdGljIEpTT2JqZWN0UmVmIG1ha2VKU0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UoSlNDb250ZXh0UmVmLCBjb25zdCBBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlJik7CisgICAgYm9vbCBpc0VxdWFsKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIEpTQ2xhc3NSZWYgZ2V0SlNDbGFz
cygpOworICAgIFBsYXRmb3JtVGV4dE1hcmtlciBtX3RleHRNYXJrZXJSYW5nZTsgICAgCit9Owor
CitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdG9UZXh0TWFya2VyKEpTT2JqZWN0UmVmIG9iamVj
dCk7CitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiB0b1RleHRNYXJrZXJSYW5nZShKU09i
amVjdFJlZiBvYmplY3QpOworCisjaWYgIUlNUExFTUVOVFNfQVhfVEVYVE1BUktFUlMKK2lubGlu
ZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoUGxhdGZv
cm1UZXh0TWFya2VyKSB7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6QWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIoY29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXImKSB7IH0KK2lu
bGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKCkg
eyB9CitpbmxpbmUgYm9vbCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6aXNFcXVhbChBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciopIHsgcmV0dXJuIGZhbHNlOyB9CisKK2lubGluZSBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKFBsYXRmb3Jt
VGV4dE1hcmtlclJhbmdlKSB7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
OjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UmKSB7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjp+QWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSgpIHsgfQoraW5saW5lIGJvb2wgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKikg
eyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudF9oCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2LDYgKzQwNiw2MiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiByZW1vdmVTZWxlY3Rpb25DYWxs
YmFjCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0
aWMgSlNWYWx1ZVJlZiB0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHVpRWxl
bWVudCA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgdWlFbGVtZW50
ID0gdG9BWEVsZW1lbnQoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhj
ZXB0aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6
Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29udGV4dCwgdG9BWEVsZW1lbnQo
dGhpc09iamVjdCktPnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodWlFbGVtZW50KSk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRNYXJrZXJSYW5nZUxlbmd0aENhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
KiByYW5nZSA9IDA7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgcmFuZ2Ug
PSB0b1RleHRNYXJrZXJSYW5nZShKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4
dCwgKGludCl0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+dGV4dE1hcmtlclJhbmdlTGVuZ3RoKHJh
bmdlKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnND
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gMDsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciogZW5kTWFya2VyID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAyKSB7CisgICAgICAg
IHN0YXJ0TWFya2VyID0gdG9UZXh0TWFya2VyKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgICAgICBlbmRNYXJrZXIgPSB0b1RleHRNYXJrZXIo
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjptYWtlSlNB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNvbnRleHQsIHRvQVhFbGVtZW50KHRoaXNPYmpl
Y3QpLT50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0YXJ0TWFya2VyLCBlbmRNYXJrZXIpKTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdl
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UqIG1hcmtlclJhbmdlID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA9PSAxKQorICAgICAgICBtYXJrZXJSYW5nZSA9IHRvVGV4dE1hcmtlclJhbmdlKEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIAorICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnN0YXJ0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBlbmRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIG1hcmtlclJhbmdl
ID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBtYXJrZXJSYW5nZSA9
IHRvVGV4dE1hcmtlclJhbmdlKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbikpOworICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6
bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09i
amVjdCktPmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpKTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKiBtYXJrZXIgPSAwOworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAg
ICAgIG1hcmtlciA9IHRvVGV4dE1hcmtlcihKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1l
bnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWFrZUpTQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb250ZXh0LCB0b0FYRWxlbWVudCh0
aGlzT2JqZWN0KS0+YWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyKG1hcmtlcikpOwor
fQogCiAvLyBTdGF0aWMgVmFsdWUgR2V0dGVycwogCkBAIC02NjIsNiArNzE4LDQyIEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3QKICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKKy8vIEltcGxlbWVudGF0aW9uCisKKyNpZiAhSU1Q
TEVNRU5UU19BWF9URVhUTUFSS0VSUworCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciosIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UqKQoreworICAgIHJldHVybiAwOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJh
bmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKQoreworICAgIHJldHVybiAwOyAgIAor
fQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vz
c2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopCit7
CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCiAvLyBEZXN0cnVjdGlvbgogCiBzdGF0aWMg
dm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZiB0aGlzT2JqZWN0KQpAQCAtNzc0LDYgKzg2NiwxMiBA
QCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldEpTCiAgICAgICAgIHsgInRh
a2VTZWxlY3Rpb24iLCB0YWtlU2VsZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
YWRkU2VsZWN0aW9uIiwgYWRkU2VsZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
cmVtb3ZlU2VsZWN0aW9uIiwgcmVtb3ZlU2VsZWN0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAidGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCIsIHRleHRNYXJrZXJSYW5nZUZvckVsZW1l
bnRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJ0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJz
IiwgdGV4dE1hcmtlclJhbmdlRm9yTWFya2Vyc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSIsIHN0YXJ0VGV4dE1hcmtlckZvclRl
eHRNYXJrZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImVuZFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyUmFuZ2UiLCBlbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAiYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2Vy
IiwgYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAidGV4dE1hcmtlclJhbmdlTGVuZ3RoIiwgdGV4dE1hcmtlclJhbmdlTGVuZ3RoQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAgICB9OwogCkluZGV4OiBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
CShyZXZpc2lvbiA2NjIyOCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKICNkZWZpbmUgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dF9oCiAKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDAsOCArNDEsOCBAQCB0eXBlZGVmIHN0cnVjdCBv
YmpjX29iamVjdCogUGxhdGZvcm1VSUVsCiAjdW5kZWYgX1dJTlNPQ0tBUElfCiAjZGVmaW5lIF9X
SU5TT0NLQVBJXyAvLyBQcmV2ZW50IGluY2x1c2lvbiBvZiB3aW5zb2NrLmggaW4gd2luZG93cy5o
CiAKLSNpbmNsdWRlIDxvbGVhY2MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgorI2lu
Y2x1ZGUgPG9sZWFjYy5oPgogCiB0eXBlZGVmIENPTVB0cjxJQWNjZXNzaWJsZT4gUGxhdGZvcm1V
SUVsZW1lbnQ7CiAjZWxpZiBQTEFURk9STShHVEspCkBAIC0xODMsNiArMTg0LDE0IEBAIHB1Ymxp
YzoKICAgICAvLyBUYWJsZS1zcGVjaWZpYwogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgY2Vs
bEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sIHVuc2lnbmVkIHJvdyk7CiAKKyAgICAv
LyBUZXh0IG1hcmtlcnMuCisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0TWFy
a2VyUmFuZ2VGb3JFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqKTsgICAgCisgICAgQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciwgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIq
IGVuZE1hcmtlcik7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgc3RhcnRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKKyAgICBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBlbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKKyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IGFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciopOworICAgIGludCB0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZSopOworICAgIAogICAgIC8vIE5vdGlmaWNhdGlvbnMKICAgICAvLyBGdW5jdGlvbiBj
YWxsYmFjayBzaG91bGQgdGFrZSBvbmUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBub3RpZmlj
YXRpb24uCiAgICAgYm9vbCBhZGROb3RpZmljYXRpb25MaXN0ZW5lcihKU09iamVjdFJlZiBmdW5j
dGlvbkNhbGxiYWNrKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNjYyMjgpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw5IEBACiAJCTFBQzc3RENGMTIwNjA1QjYwMDVDMTlFRiAvKiBOUFJ1bnRpbWVSZW1vdmVQ
cm9wZXJ0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUM3N0RDRTEyMDYwNUI2MDA1QzE5RUYgLyogTlBSdW50aW1lUmVtb3ZlUHJvcGVydHkuY3Bw
ICovOyB9OwogCQkxQUQ5RDJGRTEyMDI4NDA5MDAxQTcwRDEgLyogUGx1Z2luU2NyaXB0YWJsZU5Q
T2JqZWN0SW52b2tlRGVmYXVsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUQ5RDJGRDEyMDI4NDA5MDAxQTcwRDEgLyogUGx1Z2luU2NyaXB0YWJs
ZU5QT2JqZWN0SW52b2tlRGVmYXVsdC5jcHAgKi87IH07CiAJCTIzQkNCODkwMEVBNTc2MjMwMDND
NjI4OSAvKiBPcGVuR0wuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjNCQ0I4OEYwRUE1NzYyMzAwM0M2Mjg5IC8qIE9wZW5HTC5mcmFt
ZXdvcmsgKi87IH07CisJCTI5Q0ZCQTEwMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjlDRkJBMEUxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgg
Ki87IH07CisJCTI5Q0ZCQTExMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OUNGQkEwRjEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwICov
OyB9OworCQkyOUNGQkEyRTEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OUNGQkEyRDEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0g
Ki87IH07CiAJCTM3MTNFREUyMTE1QkUxOTMwMDcwNTcyMCAvKiBDb2xvckJpdHMtQS5wbmcgaW4g
Q29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MTNF
RERGMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMtQS5wbmcgKi87IH07CiAJCTM3MTNFREUz
MTE1QkUxOTMwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmIGluIENvcHkgRm9udCBGaWxlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzEzRURFMDExNUJFMTZGMDA3MDU3MjAg
LyogQ29sb3JCaXRzLnR0ZiAqLzsgfTsKIAkJNTE4NUY2QjIxMDcxNEUwNzAwN0FBMzkzIC8qIEhp
c3RvcnlEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxODVGNjlGMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUubW0gKi87
IH07CkBAIC0yMDIsNiArMjA1LDkgQEAKIAkJMUFDNzdEQ0UxMjA2MDVCNjAwNUMxOUVGIC8qIE5Q
UnVudGltZVJlbW92ZVByb3BlcnR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE5QUnVudGltZVJlbW92ZVByb3BlcnR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUFEOUQyRkQxMjAyODQwOTAwMUE3MEQxIC8qIFBsdWdpblNjcmlwdGFibGVOUE9i
amVjdEludm9rZURlZmF1bHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0SW52b2tlRGVmYXVsdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTIzQkNCODhGMEVBNTc2MjMwMDNDNjI4OSAvKiBPcGVuR0wuZnJh
bWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
d3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBPcGVuR0wuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvT3BlbkdMLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKKwkJMjlDRkJBMEUxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5Q0ZCQTBGMTIy
NzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5Q0ZCQTJEMTIyNzNBMTAwMEJDMzBDMCAvKiBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tOyBwYXRoID0gbWFjL0Fj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHVtcFJlbmRlclRyZWVQcmVmaXguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxM0VEREYxMTVCRTE2RjAwNzA1NzIwIC8qIENv
bG9yQml0cy1BLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGltYWdlLnBuZzsgbmFtZSA9ICJDb2xvckJpdHMtQS5wbmciOyBwYXRoID0gImZvbnRz
L0NvbG9yQml0cy1BLnBuZyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MTNFREUw
MTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IENvbG9yQml0cy50dGY7IHBh
dGggPSBmb250cy9Db2xvckJpdHMudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Mzg5LDYgKzM5NSw5IEBACiAJCQkJQkNEMDhCMzkwRTEwNTdFRjAwQTdEMEMxIC8qIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcCAqLywKIAkJCQlCQ0QwOEE1ODBFMTA0OTZCMDBBN0QwQzEgLyog
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCAqLywKIAkJCQlCQ0QwOEI3MDBFMTA1OUQyMDBBN0Qw
QzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi8sCisJCQkJMjlDRkJBMEYxMjI3
MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNwcCAqLywKKwkJCQkyOUNG
QkEwRTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCAqLywKKwkJ
CQkyOUNGQkEyRDEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMu
bW0gKi8sCiAJCQkJQkMwRTI0REYwRTJEOTQ1MTAwMUI2QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuY3BwICovLAogCQkJCUJDMEUyNERFMEUyRDk0NTEwMDFCNkJDMiAvKiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmggKi8sCiAJCQkJQkMwRTI2MTQwRTJEQTRDNjAwMUI2QkMyIC8qIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnRNYWMubW0gKi8sCkBAIC01ODUsNiArNTk0LDcgQEAKIAkJCQlCQzlE
OTAyNjBDOTc0NzJFMDA5OUE0QTMgLyogV29ya1F1ZXVlSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE4NUY2QjMxMDcxNEUxMjAwN0FBMzkzIC8qIEhpc3RvcnlEZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTFCNzgxNjcxMUFGMzFDMzAwN0UxQkMyIC8qIE1vY2tHZW9sb2NhdGlvblBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyOUNGQkExMDEyMjczNkU2MDBCQzMwQzAgLyog
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNjc3LDcgKzY4Nywx
NCBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAx
NDlDMjlDMzA4OTAyQzZEMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhQcm9qZWN0ICJEdW1wUmVuZGVyVHJlZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9
ICJYY29kZSAyLjQiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nh
bm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQlrbm93blJlZ2lvbnMgPSAoCisJCQkJRW5nbGlzaCwK
KwkJCQlKYXBhbmVzZSwKKwkJCQlGcmVuY2gsCisJCQkJR2VybWFuLAorCQkJKTsKIAkJCW1haW5H
cm91cCA9IDA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1wUmVuZGVyVHJlZSAqLzsKIAkJ
CXByb2R1Y3RSZWZHcm91cCA9IDkzNDA5OTU1MDg1NDBDQUYwMDdGM0JDOCAvKiBQcm9kdWN0cyAq
LzsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7CkBAIC03NTgsNiArNzc1LDggQEAKIAkJCQlCQ0Ex
OEIyNjBDOUIwMTVDMDAxMTQzNjkgLyogV29ya1F1ZXVlSXRlbU1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTUxODVGNkIyMTA3MTRFMDcwMDdBQTM5MyAvKiBIaXN0b3J5RGVsZWdhdGUubW0gaW4g
U291cmNlcyAqLywKIAkJCQlFMUI3ODE2NTExQUYzMUI3MDA3RTFCQzIgLyogTW9ja0dlb2xvY2F0
aW9uUHJvdmlkZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkyOUNGQkExMTEyMjczNkU2MDBCQzMw
QzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjlD
RkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
TWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
RHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgiCisK
KyNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcgorCitBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlcjo6QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoUGxhdGZvcm1UZXh0TWFya2VyIG1hcmtl
cikKKyAgICA6IG1fdGV4dE1hcmtlcihtYXJrZXIpCit7CisgICAgaWYgKG1fdGV4dE1hcmtlcikK
KyAgICAgICAgQ0ZSZXRhaW4obV90ZXh0TWFya2VyKTsKK30KKworQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXI6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGNvbnN0IEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyJiBtYXJrZXIpCisgICAgOiBtX3RleHRNYXJrZXIobWFya2VyLnBsYXRmb3JtVGV4dE1hcmtl
cigpKQoreworICAgIGlmIChtX3RleHRNYXJrZXIpCisgICAgICAgIENGUmV0YWluKG1fdGV4dE1h
cmtlcik7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjp+QWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIoKQoreworICAgIGlmIChtX3RleHRNYXJrZXIpCisgICAgICAgIENGUmVsZWFzZShtX3Rl
eHRNYXJrZXIpOworICAgIG1fdGV4dE1hcmtlciA9IG5pbDsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlcjo6aXNFcXVhbChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogb3RoZXIpCit7
CisgICAgcmV0dXJuIFtwbGF0Zm9ybVRleHRNYXJrZXIoKSBpc0VxdWFsOm90aGVyLT5wbGF0Zm9y
bVRleHRNYXJrZXIoKV07Cit9CisKKyNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlCisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UoUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UgbWFya2VyUmFuZ2UpCisgICAgOiBt
X3RleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyUmFu
Z2UpCisgICAgICAgIENGUmV0YWluKG1fdGV4dE1hcmtlclJhbmdlKTsKK30KKworQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZTo6QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShjb25zdCBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlJiBtYXJrZXJSYW5nZSkKKyAgICA6IG1fdGV4dE1h
cmtlclJhbmdlKG1hcmtlclJhbmdlLnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKCkpCit7CisgICAg
aWYgKG1fdGV4dE1hcmtlclJhbmdlKQorICAgICAgICBDRlJldGFpbihtX3RleHRNYXJrZXJSYW5n
ZSk7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6On5BY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlclJhbmdlKCkKK3sKKyAgICBpZiAobV90ZXh0TWFya2VyUmFuZ2UpCisgICAgICAgIENG
UmVsZWFzZShtX3RleHRNYXJrZXJSYW5nZSk7CisgICAgbV90ZXh0TWFya2VyUmFuZ2UgPSBuaWw7
Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbChBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlclJhbmdlKiBvdGhlcikKK3sKKyAgICByZXR1cm4gW3BsYXRmb3JtVGV4
dE1hcmtlclJhbmdlKCkgaXNFcXVhbDpvdGhlci0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKV07
Cit9CisKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lvbiA2NjIyOCkKKysrIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTkwLDMgKzExOTAsNjcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpyZW1vdmVTZWxlYwogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KKwor
Ly8gVGV4dCBtYXJrZXJzCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogZWxlbWVudCkKK3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0
ZXh0TWFya2VyUmFuZ2UgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpA
IkFYVGV4dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50IiBmb3JQYXJhbWV0ZXI6ZWxlbWVudC0+cGxh
dGZvcm1VSUVsZW1lbnQoKV07CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisgICAgCisg
ICAgcmV0dXJuIDA7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2Vy
UmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2UpCit7CisgICAg
QkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgTlNOdW1iZXIqIGxlbmd0aFZhbHVlID0gW21f
ZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWExlbmd0aEZvclRleHRNYXJr
ZXJSYW5nZSIgZm9yUGFyYW1ldGVyOnJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpXTsK
KyAgICByZXR1cm4gW2xlbmd0aFZhbHVlIGludFZhbHVlXTsKKyAgICBFTkRfQVhfT0JKQ19FWENF
UFRJT05TCisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKKworQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJz
KEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciwgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIqIGVuZE1hcmtlcikKK3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBO
U0FycmF5KiB0ZXh0TWFya2VycyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6c3RhcnRNYXJr
ZXItPnBsYXRmb3JtVGV4dE1hcmtlcigpLCBlbmRNYXJrZXItPnBsYXRmb3JtVGV4dE1hcmtlcigp
LCBuaWxdOworICAgIGlkIHRleHRNYXJrZXJSYW5nZSA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVbm9yZGVyZWRUZXh0TWFya2Vy
cyIgZm9yUGFyYW1ldGVyOnRleHRNYXJrZXJzXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElP
TlMKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQoreworICAgIEJFR0lOX0FYX09CSkNf
RVhDRVBUSU9OUworICAgIGlkIHRleHRNYXJrZXIgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpAIkFYU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIiBmb3JQ
YXJhbWV0ZXI6cmFuZ2UtPnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKCldOworICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICBFTkRfQVhfT0JKQ19FWENF
UFRJT05TCisgICAgCisgICAgcmV0dXJuIDA7ICAgIAorfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJh
bmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQoreworICAgIEJFR0lOX0FY
X09CSkNfRVhDRVBUSU9OUworICAgIGlkIHRleHRNYXJrZXIgPSBbbV9lbGVtZW50IGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSIg
Zm9yUGFyYW1ldGVyOnJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpXTsKKyAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgRU5EX0FYX09CSkNf
RVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiAwOyAgICAKK30KKworQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRl
eHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIG1hcmtlcikKK3sKKyAgICBCRUdJTl9B
WF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB1aUVsZW1lbnQgPSBbbV9lbGVtZW50IGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYVUlFbGVtZW50Rm9yVGV4dE1hcmtlciIgZm9yUGFyYW1l
dGVyOm1hcmtlci0+cGxhdGZvcm1UZXh0TWFya2VyKCldOworICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KHVpRWxlbWVudCk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAg
IAorICAgIHJldHVybiAwOyAgCit9CisKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagkocmV2aXNpb24gNjYyMjgpCisr
KyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC01NzgsNiArNTc4LDE0IEBACiAJCQk+DQogCQk8L0ZpbGU+DQogCQk8
RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIg0K
KwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuLlxBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlci5oIg0KKwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVs
YXRpdmVQYXRoPSIuXERyYWdnaW5nSW5mby5oIg0KIAkJCT4NCiAJCTwvRmlsZT4NCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjIzMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA4LTI3ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFj
aEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQVg6IFN1cHBvcnQgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJzIGluIERSVAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3NzgKKworICAgICAg
ICBBZGQgYmFzaWMgdGV4dCBtYXJrZXIgdGVzdHMgdG8gdmFsaWRhdGUgZnVuY3Rpb25zIGFyZSB3
b3JraW5nLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1m
b3ItdGV4dC1tYXJrZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90
ZXh0LW1hcmtlci1sZW5ndGguaHRtbDogQWRkZWQuCisKIDIwMTAtMDgtMjcgIFRvbnkgQ2hhbmcg
IDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiAgQWRkIGNocm9taXVt
LW1hYyByZXN1bHRzIGZvciBzdmcvY3VzdG9tL2dldHNjcmVlbmN0bS1pbi1zY3JvbGxhYmxlLWRp
di1hcmVhLnhodG1sLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFy
a2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9hY2Nlc3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFya2VyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAordGV4dCBoZXJlCit0ZXh0IGJsb2NrCit0ZXh0IGhl
cmUKK1RoaXMgdGVzdHMgdGhlIHRleHQgbWFya2VyIHN5c3RlbSB3aWxsIHJldHVybiB0aGUgcmln
aHQgZWxlbWVudCB3aGVuIGdpdmVuIGEgdGV4dCBtYXJrZXIKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgdGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgodGV4dE1hcmtlclJh
bmdlMSkgaXMgMTAKK1BBU1MgdGV4dC5hY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIo
c3RhcnRNYXJrZXIpLmlzRXF1YWwodGV4dCkgaXMgdHJ1ZQorUEFTUyB0ZXh0LmFjY2Vzc2liaWxp
dHlFbGVtZW50Rm9yVGV4dE1hcmtlcihlbmRNYXJrZXIpLmlzRXF1YWwodGV4dCkgaXMgdHJ1ZQor
UEFTUyB0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aChuZXdNYXJrZXJSYW5nZSkgaXMgMTAKK1BB
U1MgbmV3TWFya2VyUmFuZ2UuaXNFcXVhbCh0ZXh0TWFya2VyUmFuZ2UxKSBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJr
ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKwordGV4dCBoZXJlCis8ZGl2
IGlkPSJ0ZXh0MSIgdGFiaW5kZXg9MD50ZXh0IGJsb2NrPC9kaXY+Cit0ZXh0IGhlcmUKKworPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoZSB0ZXh0IG1hcmtlciBzeXN0ZW0g
d2lsbCByZXR1cm4gdGhlIHJpZ2h0IGVsZW1lbnQgd2hlbiBnaXZlbiBhIHRleHQgbWFya2VyIik7
CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisKKyAgICAgICAg
ICAvLyBhcmlhLXN0YXRlPXRydWUKKyAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
dGV4dDEiKS5mb2N1cygpOworICAgICAgICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisKKyAgICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCB0ZXh0
IG5vZGUuCisgICAgICAgICAgdGV4dCA9IHRleHQuY2hpbGRBdEluZGV4KDApOworCisgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gZ2V0IHRoZSBzdGFydCBtYXJrZXIgZm9yIHRoaXMgcmFu
Z2UuCisgICAgICAgICAgdmFyIHRleHRNYXJrZXJSYW5nZTEgPSB0ZXh0LnRleHRNYXJrZXJSYW5n
ZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtlclJh
bmdlTGVuZ3RoKHRleHRNYXJrZXJSYW5nZTEpIiwgIjEwIik7CisgICAgICAgICAgdmFyIHN0YXJ0
TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtl
clJhbmdlMSk7CisKKyAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBzdGFydCBtYXJrZXIgd2ls
bCBnaXZlIHVzIHRoZSBzYW1lIGVsZW1lbnQgdGhhdCB3ZSBzdGFydGVkIHdpdGguCisgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCJ0ZXh0LmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihz
dGFydE1hcmtlcikuaXNFcXVhbCh0ZXh0KSIpOworCisgICAgICAgICAgLy8gR2V0IHRoZSBlbmQg
bWFya2VyIGFuZCBjaGVjayB0aGF0IGl0IGdpdmVzIHVzIHRoZSBzYW1lIGVsZW1lbnQuCisgICAg
ICAgICAgdmFyIGVuZE1hcmtlciA9IHRleHQuZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZSh0ZXh0TWFya2VyUmFuZ2UxKTsKKyAgICAgICAgICBzaG91bGRCZVRydWUoInRleHQuYWNjZXNz
aWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyKGVuZE1hcmtlcikuaXNFcXVhbCh0ZXh0KSIpOwor
CisgICAgICAgICAgLy8gTWFrZSBhIG1hcmtlciByYW5nZSBvdXQgb2YgdGhlIHN0YXJ0IGFuZCBl
bmQgbWFya2VycyBhbmQgY2hlY2sgdGhlIGxlbmd0aAorICAgICAgICAgIHZhciBuZXdNYXJrZXJS
YW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhzdGFydE1hcmtlciwgZW5kTWFy
a2VyKTsKKyAgICAgICAgICBzaG91bGRCZSgidGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgobmV3
TWFya2VyUmFuZ2UpIiwgIjEwIik7CisKKyAgICAgICAgICAvLyBBbmQgbWFrZSBzdXJlIGl0IGVx
dWFscyB0aGUgc2FtZSBtYXJrZXIgcmFuZ2Ugd2Ugc3RhcnRlZCB3aXRoCisgICAgICAgICAgc2hv
dWxkQmVUcnVlKCJuZXdNYXJrZXJSYW5nZS5pc0VxdWFsKHRleHRNYXJrZXJSYW5nZTEpIik7Cisg
ICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9h
Y2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyLWxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVu
Z3RoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyLWxlbmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTEgQEAKK3RleHQgYmxvY2sKK1RoaXMgdGVzdHMgdGhlIHRleHQgbWFy
a2VyIGltcGxlbWVudGlvbiBvZiBEUlQgaXMgd29ya2luZyBieSByZXR1cm5pbmcgYSBtYXJrZXIg
cmFuZ2UgYW5kIGJ5IHJldHVybmluZyBpdHMgY29ycmVjdCBsZW5ndGguCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKHRleHRN
YXJrZXJSYW5nZSkgaXMgMTAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2Vy
LWxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2IGlk
PSJ0ZXh0IiB0YWJpbmRleD0wPnRleHQgYmxvY2s8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2Ny
aXB0aW9uKCJUaGlzIHRlc3RzIHRoZSB0ZXh0IG1hcmtlciBpbXBsZW1lbnRpb24gb2YgRFJUIGlz
IHdvcmtpbmcgYnkgcmV0dXJuaW5nIGEgbWFya2VyIHJhbmdlIGFuZCBieSByZXR1cm5pbmcgaXRz
IGNvcnJlY3QgbGVuZ3RoLiIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcikgeworCisgICAgICAgICAgLy8gYXJpYS1zdGF0ZT10cnVlCisgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRleHQiKS5mb2N1cygpOworICAgICAgICAgIHZhciB0ZXh0ID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgICAgICAgdmFyIHRl
eHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAg
ICAgICAgICBzaG91bGRCZSgidGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgodGV4dE1hcmtlclJh
bmdlKSIsICIxMCIpOworICAgIH0KKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8
L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65926</attachid>
            <date>2010-08-30 09:48:53 -0700</date>
            <delta_ts>2010-09-07 14:20:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>42852</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjM5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMzAgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogU3VwcG9ydCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcnMgaW4gRFJUCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDc3OAorCisgICAgICAgIFBy
b3ZpZGUgc3VwcG9ydCBpbiBEUlQgZm9yIGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSB0
ZXh0IG1hcmtlciBzeXN0ZW0gdGhhdCBBWCBleHBvc2VzLgorICAgICAgICBUaGlzIHdpbGwgYWxs
b3cgZnV0dXJlIGJ1ZyBmaXhlcyBpbiB0aGUgdGV4dCBtYXJrZXIgc3lzdGVtIHRvIGJlIGFkZXF1
YXRlbHkgdGVzdGVkLgorCisgICAgICAgIFRlc3RzOiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci5odG1sCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9t
YWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRtbAorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW06CisgICAgICAgICgt
W0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpm
b3JQYXJhbWV0ZXI6XSk6CisKIDIwMTAtMDgtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNv
bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4gQWRkIHRoZSBuZXcgZmlsZWFwaSBk
aXJlY3RvcnkgdG8gdGhlIElETCB2cGF0aC4KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24g
NjYzOTIpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTI0LDYgKzI1MjQsMTcgQEAgLSAoaWQpYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICByZXR1cm4gW05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6bGVuZ3RoXTsKICAgICB9CiAKKyAgICAvLyBVc2VkIG9ubHkgYnkgRHVt
cFJlbmRlclRyZWUgKHNvIGZhcikKKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
IEAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAgICAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25S
YW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICByZXR1cm4g
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2Uuc3RhcnQpOworICAg
IH0KKworICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzogQCJBWEVuZFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2
aXNpYmxlUG9zUmFuZ2UgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJS
YW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvclZpc2li
bGVQb3NpdGlvbih2aXNpYmxlUG9zUmFuZ2UuZW5kKTsKKyAgICB9CisgICAgCiAgICAgaWYgKG1f
b2JqZWN0LT5pc0RhdGFUYWJsZSgpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlDZWxsRm9yQ29sdW1uQW5kUm93UGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV0pIHsKICAgICAgICAgICAgIGlmIChhcnJheSA9PSBuaWwgfHwgW2FycmF5IGNvdW50
XSAhPSAyKQpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjYzOTIpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wOC0zMCAgQ2hyaXMgRmxl
aXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFYOiBTdXBwb3J0IEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
cyBpbiBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0Nzc4CisKKyAgICAgICAgQWRkIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGFuZCBBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlclJhbmdlIHdoaWNoIGVuY2Fwc3VsYXRlIHRoZSBBWFRleHRNYXJrZXJz
IAorICAgICAgICB0aGF0IFdlYkNvcmUgdXNlcyB3aGVuIHZlbmRpbmcgaW5mb3JtYXRpb24gYWJv
dXQgaXRzIFZpc2libGVQb3NpdGlvbnMgdGhyb3VnaCBBWC4KKworICAgICAgICBUaGVyZSBhcmUg
YSBmZXcgbmV3IG1ldGhvZHMgaW4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCB0byByZXRyaWV2ZSBh
bmQgdXNlIHRleHQgbWFya2VycywgYW5kIHNvbWUgYmFzaWMKKyAgICAgICAgbWV0aG9kcyBmb3Ig
ZW5jYXBzdWxhdGluZyBhbmQgY2hlY2tpbmcgZXF1YWxpdHkuCisKKyAgICAgICAgVGhpcyB3aWxs
IGFsbG93IGZ1dHVyZSBidWcgZml4ZXMgaW4gdGhlIHRleHQgbWFya2VyIHN5c3RlbSB0byBiZSBh
ZGVxdWF0ZWx5IHRlc3RlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyLmNwcDogQWRkZWQuCisgICAgICAgICh0b1RleHRNYXJrZXIpOgorICAgICAg
ICAoaXNNYXJrZXJFcXVhbENhbGxiYWNrKToKKyAgICAgICAgKG1hcmtlckZpbmFsaXplKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcyk6Cisg
ICAgICAgICh0b1RleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChpc01hcmtlclJhbmdlRXF1YWxD
YWxsYmFjayk6CisgICAgICAgIChtYXJrZXJSYW5nZUZpbmFsaXplKToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Z2V0SlNDbGFzcyk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaDogQWRk
ZWQuCisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6cGxhdGZvcm1UZXh0TWFya2Vy
KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OnBsYXRmb3JtVGV4dE1h
cmtlclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpp
c0VxdWFsKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZTo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6CisgICAgICAgICh0ZXh0TWFya2VyUmFuZ2VGb3JF
bGVtZW50Q2FsbGJhY2spOgorICAgICAgICAodGV4dE1hcmtlclJhbmdlTGVuZ3RoQ2FsbGJhY2sp
OgorICAgICAgICAodGV4dE1hcmtlclJhbmdlRm9yTWFya2Vyc0NhbGxiYWNrKToKKyAgICAgICAg
KHN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZUNhbGxiYWNrKToKKyAgICAgICAgKGVu
ZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VDYWxsYmFjayk6CisgICAgICAgIChhY2Nlc3Np
YmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXJDYWxsYmFjayk6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KToKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aCk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXJSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphY2Nlc3NpYmlsaXR5
RWxlbWVudEZvclRleHRNYXJrZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Z2V0SlNDbGFzcyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjppc0VxdWFsKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6aXNFcXVhbCk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUxlbmd0aCk6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JNYXJr
ZXJzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZv
clRleHRNYXJrZXJSYW5nZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcik6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvajoKKwogMjAxMC0wOC0zMCAgWm9s
dGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYktpdFRvb2xzL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2
NjM5MikKKysrIFdlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCw4IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCiAJV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVQcmVmaXguaCBcCiAJV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIFwKIAlXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIFwKKwlXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAgXAorCVdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggXAogCVdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwIFwKIAlXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggXAogCVdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAgXApJbmRleDogV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgiCisKKyNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5Q
dHIuaD4KKworI3ByYWdtYSBtYXJrIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyCisKKy8vIENhbGxi
YWNrIG1ldGhvZHMKKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRvVGV4dE1hcmtlcihKU09i
amVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworfQorCitzdGF0aWMgSlNW
YWx1ZVJlZiBpc01hcmtlckVxdWFsQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIEpTT2JqZWN0UmVmIG90aGVyTWFya2VyID0gMDsKKyAgICBpZiAoYXJndW1lbnRD
b3VudCA9PSAxKQorICAgICAgICBvdGhlck1hcmtlciA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIGZhbHNlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VCb29sZWFuKGNvbnRleHQsIHRvVGV4dE1hcmtlcih0aGlzT2JqZWN0KS0+aXNFcXVhbCh0
b1RleHRNYXJrZXIob3RoZXJNYXJrZXIpKSk7Cit9CisKKy8vIERlc3RydWN0aW9uCisKK3N0YXRp
YyB2b2lkIG1hcmtlckZpbmFsaXplKEpTT2JqZWN0UmVmIHRoaXNPYmplY3QpCit7CisgICAgZGVs
ZXRlIHRvVGV4dE1hcmtlcih0aGlzT2JqZWN0KTsKK30KKworLy8gT2JqZWN0IENyZWF0aW9uCisK
K0pTT2JqZWN0UmVmIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjptYWtlSlNBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcihKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXImIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjb250ZXh0LCBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcjo6Z2V0SlNDbGFzcygpLCBuZXcgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIoZWxlbWVudCkpOworfQorCitKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
OjpnZXRKU0NsYXNzKCkKK3sKKyAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNb
XSA9IHsKKyAgICAgICAgeyAwLCAwLCAwLCAwIH0KKyAgICB9OworICAgIAorICAgIHN0YXRpYyBK
U1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgICAgICB7ICJpc0VxdWFs
IiwgaXNNYXJrZXJFcXVhbENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwgMCB9Cisg
ICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9u
ID0geworICAgICAgICAwLCBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsICJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGljRnVuY3Rpb25zLAorICAgICAgICAwLCBt
YXJrZXJGaW5hbGl6ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorICAgIH07CisgICAgCisg
ICAgc3RhdGljIEpTQ2xhc3NSZWYgYWNjZXNzaWJpbGl0eVRleHRNYXJrZXJDbGFzcyA9IEpTQ2xh
c3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyQ2xhc3M7Cit9CisKKyNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlCisKKy8vIENhbGxiYWNrIG1ldGhvZHMKKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZSogdG9UZXh0TWFya2VyUmFuZ2UoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKj4oSlNPYmplY3RHZXRQcml2
YXRlKG9iamVjdCkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBpc01hcmtlclJhbmdlRXF1YWxD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgSlNPYmplY3RSZWYg
b3RoZXJNYXJrZXIgPSAwOworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAgICAgIG90
aGVyTWFya2VyID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4
dCwgZmFsc2UpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwg
dG9UZXh0TWFya2VyUmFuZ2UodGhpc09iamVjdCktPmlzRXF1YWwodG9UZXh0TWFya2VyUmFuZ2Uo
b3RoZXJNYXJrZXIpKSk7Cit9CisKKy8vIERlc3RydWN0aW9uCisKK3N0YXRpYyB2b2lkIG1hcmtl
clJhbmdlRmluYWxpemUoSlNPYmplY3RSZWYgdGhpc09iamVjdCkKK3sKKyAgICBkZWxldGUgdG9U
ZXh0TWFya2VyUmFuZ2UodGhpc09iamVjdCk7Cit9CisKKy8vIE9iamVjdCBDcmVhdGlvbgorCitK
U09iamVjdFJlZiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjptYWtlSlNBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlJiBlbGVtZW50KQoreworICAgIHJldHVybiBKU09iamVjdE1ha2Uo
Y29udGV4dCwgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Z2V0SlNDbGFzcygpLCBuZXcg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShlbGVtZW50KSk7Cit9CisKK0pTQ2xhc3NSZWYg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Z2V0SlNDbGFzcygpCit7CisgICAgc3RhdGlj
IEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgICAgIHsgMCwgMCwgMCwgMCB9
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlv
bnNbXSA9IHsKKyAgICAgICAgeyAiaXNFcXVhbCIsIGlzTWFya2VyUmFuZ2VFcXVhbENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwgMCB9CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMg
SlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9uID0geworICAgICAgICAwLCBrSlNDbGFz
c0F0dHJpYnV0ZU5vbmUsICJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIiwgMCwgc3RhdGlj
VmFsdWVzLCBzdGF0aWNGdW5jdGlvbnMsCisgICAgICAgIDAsIG1hcmtlclJhbmdlRmluYWxpemUs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBKU0Ns
YXNzUmVmIGFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2VDbGFzcyA9IEpTQ2xhc3NDcmVhdGUo
JmNsYXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2VDbGFzczsKK30KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcl9oCisjZGVmaW5lIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyX2gKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+
CisKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIFNVUFBPUlRTX0FYX1RFWFRNQVJLRVJTIDEK
KyNlbHNlCisjZGVmaW5lIFNVUFBPUlRTX0FYX1RFWFRNQVJLRVJTIDAKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oTUFDKQorI2lmZGVmIF9fT0JKQ19fCit0eXBlZGVmIGlkIFBsYXRmb3JtVGV4dE1h
cmtlcjsKK3R5cGVkZWYgaWQgUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2U7CisjZWxzZQordHlwZWRl
ZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIFBsYXRmb3JtVGV4dE1hcmtlcjsKK3R5cGVkZWYgc3RydWN0
IG9iamNfb2JqZWN0KiBQbGF0Zm9ybVRleHRNYXJrZXJSYW5nZTsKKyNlbmRpZgorI2Vsc2UKK3R5
cGVkZWYgdm9pZCogUGxhdGZvcm1UZXh0TWFya2VyOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVRl
eHRNYXJrZXJSYW5nZTsKKyNlbmRpZgorCitjbGFzcyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Owor
CitjbGFzcyBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB7CitwdWJsaWM6CisgICAgQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIoUGxhdGZvcm1UZXh0TWFya2VyKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlcihjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciYpOworICAgIH5BY2Nlc3NpYmls
aXR5VGV4dE1hcmtlcigpOworICAgIAorICAgIFBsYXRmb3JtVGV4dE1hcmtlciBwbGF0Zm9ybVRl
eHRNYXJrZXIoKSBjb25zdCB7IHJldHVybiBtX3RleHRNYXJrZXI7IH0KKyAgICAKKyAgICBzdGF0
aWMgSlNPYmplY3RSZWYgbWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoSlNDb250ZXh0UmVm
LCBjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciYpOworICAgIGJvb2wgaXNFcXVhbChBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciopOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNDbGFz
c1JlZiBnZXRKU0NsYXNzKCk7CisgICAgUGxhdGZvcm1UZXh0TWFya2VyIG1fdGV4dE1hcmtlcjsK
K307CisKK2NsYXNzIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgeworcHVibGljOgorICAg
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UpOwor
ICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29uc3QgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZSYpOworICAgIH5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKCk7CisgICAg
CisgICAgUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UgcGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX3RleHRNYXJrZXJSYW5nZTsgfQorICAgIAorICAgIHN0YXRpYyBKU09i
amVjdFJlZiBtYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKEpTQ29udGV4dFJlZiwg
Y29uc3QgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYpOworICAgIGJvb2wgaXNFcXVhbChB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRp
YyBKU0NsYXNzUmVmIGdldEpTQ2xhc3MoKTsKKyAgICBQbGF0Zm9ybVRleHRNYXJrZXIgbV90ZXh0
TWFya2VyUmFuZ2U7ICAgIAorfTsKKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRvVGV4dE1h
cmtlcihKU09iamVjdFJlZiBvYmplY3QpOworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSog
dG9UZXh0TWFya2VyUmFuZ2UoSlNPYmplY3RSZWYgb2JqZWN0KTsKKworI2lmICFTVVBQT1JUU19B
WF9URVhUTUFSS0VSUworaW5saW5lIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlcihQbGF0Zm9ybVRleHRNYXJrZXIpIHsgfQoraW5saW5lIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb25zdCBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciYpIHsgfQoraW5saW5lIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjp+QWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIoKSB7IH0KK2lubGluZSBib29sIEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyOjppc0VxdWFsKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikgeyByZXR1cm4gZmFsc2U7IH0K
KworaW5saW5lIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UoUGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UpIHsgfQoraW5saW5lIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29uc3Qg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSYpIHsgfQoraW5saW5lIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2U6On5BY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKCkgeyB9Citpbmxp
bmUgYm9vbCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjppc0VxdWFsKEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UqKSB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyNlbmRpZiAv
LyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NjM5
MikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDYsNiArNDA2LDYyIEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IHJlbW92ZVNlbGVjdGlvbkNhbGxiYWMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHRleHRNYXJrZXJSYW5nZUZvckVsZW1l
bnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCogdWlFbGVtZW50ID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAx
KQorICAgICAgICB1aUVsZW1lbnQgPSB0b0FYRWxlbWVudChKU1ZhbHVlVG9PYmplY3QoY29udGV4
dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShj
b250ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+dGV4dE1hcmtlclJhbmdlRm9yRWxlbWVu
dCh1aUVsZW1lbnQpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgdGV4dE1hcmtlclJhbmdlTGVu
Z3RoQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9
PSAxKQorICAgICAgICByYW5nZSA9IHRvVGV4dE1hcmtlclJhbmdlKEpTVmFsdWVUb09iamVjdChj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlTWFrZU51bWJlcihjb250ZXh0LCAoaW50KXRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT50ZXh0
TWFya2VyUmFuZ2VMZW5ndGgocmFuZ2UpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgdGV4dE1h
cmtlclJhbmdlRm9yTWFya2Vyc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIgPSAwOworICAgIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIgPSAwOworICAgIGlmIChhcmd1bWVudENv
dW50ID09IDIpIHsKKyAgICAgICAgc3RhcnRNYXJrZXIgPSB0b1RleHRNYXJrZXIoSlNWYWx1ZVRv
T2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGVuZE1h
cmtlciA9IHRvVGV4dE1hcmtlcihKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29udGV4dCwg
dG9BWEVsZW1lbnQodGhpc09iamVjdCktPnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoc3RhcnRN
YXJrZXIsIGVuZE1hcmtlcikpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzdGFydFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogbWFya2VyUmFuZ2UgPSAwOwor
ICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAgICAgIG1hcmtlclJhbmdlID0gdG9UZXh0
TWFya2VyUmFuZ2UoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjptYWtlSlNB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb250ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+
c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKSk7Cit9CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIGVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2VDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZSogbWFya2VyUmFuZ2UgPSAwOworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisg
ICAgICAgIG1hcmtlclJhbmdlID0gdG9UZXh0TWFya2VyUmFuZ2UoSlNWYWx1ZVRvT2JqZWN0KGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyOjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb250ZXh0
LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZShtYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBhY2Nlc3NpYmlsaXR5RWxl
bWVudEZvclRleHRNYXJrZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIG1hcmtlciA9IDA7CisgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPT0gMSkKKyAgICAgICAgbWFya2VyID0gdG9UZXh0TWFya2VyKEpTVmFsdWVUb09i
amVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIAorICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYWtlSlNBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNv
bnRleHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5hY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRl
eHRNYXJrZXIobWFya2VyKSk7Cit9CiAKIC8vIFN0YXRpYyBWYWx1ZSBHZXR0ZXJzCiAKQEAgLTY2
Miw2ICs3MTgsNDIgQEAgc3RhdGljIEpTVmFsdWVSZWYgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdAog
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorLy8gSW1wbGVt
ZW50YXRpb24KKworI2lmICFTVVBQT1JUU19BWF9URVhUTUFSS0VSUworCitBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZv
ckVsZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCopCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K2ludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJh
bmdlRm9yTWFya2VycyhBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciosIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKikKK3sKKyAgICByZXR1cm4gMDsKK30KKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdl
KEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKQoreworICAgIHJldHVybiAwOworfQorCitB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbmRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKQorewor
ICAgIHJldHVybiAwOyAgIAorfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciopCit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCiAvLyBEZXN0
cnVjdGlvbgogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZiB0aGlzT2JqZWN0KQpA
QCAtNzc0LDYgKzg2NiwxMiBAQCBKU0NsYXNzUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omdl
dEpTCiAgICAgICAgIHsgInRha2VTZWxlY3Rpb24iLCB0YWtlU2VsZWN0aW9uQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAiYWRkU2VsZWN0aW9uIiwgYWRkU2VsZWN0aW9uQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAicmVtb3ZlU2VsZWN0aW9uIiwgcmVtb3ZlU2VsZWN0aW9uQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAidGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCIsIHRleHRN
YXJrZXJSYW5nZUZvckVsZW1lbnRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJ0ZXh0TWFy
a2VyUmFuZ2VGb3JNYXJrZXJzIiwgdGV4dE1hcmtlclJhbmdlRm9yTWFya2Vyc0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgInN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSIsIHN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAg
IHsgImVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiLCBlbmRUZXh0TWFya2VyRm9yVGV4
dE1hcmtlclJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiYWNjZXNzaWJpbGl0eUVs
ZW1lbnRGb3JUZXh0TWFya2VyIiwgYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAidGV4dE1hcmtlclJhbmdlTGVuZ3RoIiwgdGV4dE1h
cmtlclJhbmdlTGVuZ3RoQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAwLCAwLCAwIH0KICAg
ICB9OwogCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5oCShyZXZpc2lvbiA2NjM5MikKKysrIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gKICNkZWZpbmUgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudF9oCiAKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDAsOCArNDEsOCBA
QCB0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCogUGxhdGZvcm1VSUVsCiAjdW5kZWYgX1dJTlNP
Q0tBUElfCiAjZGVmaW5lIF9XSU5TT0NLQVBJXyAvLyBQcmV2ZW50IGluY2x1c2lvbiBvZiB3aW5z
b2NrLmggaW4gd2luZG93cy5oCiAKLSNpbmNsdWRlIDxvbGVhY2MuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0NPTVB0ci5oPgorI2luY2x1ZGUgPG9sZWFjYy5oPgogCiB0eXBlZGVmIENPTVB0cjxJQWNj
ZXNzaWJsZT4gUGxhdGZvcm1VSUVsZW1lbnQ7CiAjZWxpZiBQTEFURk9STShHVEspCkBAIC0xODMs
NiArMTg0LDE0IEBAIHB1YmxpYzoKICAgICAvLyBUYWJsZS1zcGVjaWZpYwogICAgIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgY2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sIHVuc2ln
bmVkIHJvdyk7CiAKKyAgICAvLyBUZXh0IG1hcmtlcnMuCisgICAgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZSB0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQqKTsgICAgCisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSB0ZXh0TWFya2VyUmFu
Z2VGb3JNYXJrZXJzKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciwgQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlcik7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UqKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBlbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqKTsKKyAgICBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50IGFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciopOworICAgIGludCB0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSopOworICAgIAogICAgIC8vIE5vdGlmaWNhdGlvbnMK
ICAgICAvLyBGdW5jdGlvbiBjYWxsYmFjayBzaG91bGQgdGFrZSBvbmUgYXJndW1lbnQsIHRoZSBu
YW1lIG9mIHRoZSBub3RpZmljYXRpb24uCiAgICAgYm9vbCBhZGROb3RpZmljYXRpb25MaXN0ZW5l
cihKU09iamVjdFJlZiBmdW5jdGlvbkNhbGxiYWNrKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjYzOTIpCisrKyBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBACiAJCTFBQzc3RENGMTIwNjA1QjYwMDVDMTlFRiAv
KiBOUFJ1bnRpbWVSZW1vdmVQcm9wZXJ0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUM3N0RDRTEyMDYwNUI2MDA1QzE5RUYgLyogTlBSdW50aW1l
UmVtb3ZlUHJvcGVydHkuY3BwICovOyB9OwogCQkxQUQ5RDJGRTEyMDI4NDA5MDAxQTcwRDEgLyog
UGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0SW52b2tlRGVmYXVsdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUQ5RDJGRDEyMDI4NDA5MDAxQTcwRDEg
LyogUGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0SW52b2tlRGVmYXVsdC5jcHAgKi87IH07CiAJCTIz
QkNCODkwMEVBNTc2MjMwMDNDNjI4OSAvKiBPcGVuR0wuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjNCQ0I4OEYwRUE1NzYyMzAwM0M2
Mjg5IC8qIE9wZW5HTC5mcmFtZXdvcmsgKi87IH07CisJCTI5Q0ZCQTEwMTIyNzM2RTYwMEJDMzBD
MCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjlDRkJBMEUxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyLmggKi87IH07CisJCTI5Q0ZCQTExMTIyNzM2RTYwMEJDMzBDMCAvKiBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyOUNGQkEwRjEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIuY3BwICovOyB9OworCQkyOUNGQkEyRTEyMjczQTEwMDBCQzMwQzAgLyogQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyOUNGQkEyRDEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJNYWMubW0gKi87IH07CiAJCTM3MTNFREUyMTE1QkUxOTMwMDcwNTcyMCAvKiBD
b2xvckJpdHMtQS5wbmcgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3MTNFRERGMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMtQS5wbmcg
Ki87IH07CiAJCTM3MTNFREUzMTE1QkUxOTMwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmIGluIENv
cHkgRm9udCBGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzEzRURF
MDExNUJFMTZGMDA3MDU3MjAgLyogQ29sb3JCaXRzLnR0ZiAqLzsgfTsKIAkJNTE4NUY2QjIxMDcx
NEUwNzAwN0FBMzkzIC8qIEhpc3RvcnlEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODVGNjlGMTA3MTRBNTcwMDdBQTM5MyAvKiBIaXN0
b3J5RGVsZWdhdGUubW0gKi87IH07CkBAIC0yMDIsNiArMjA1LDkgQEAKIAkJMUFDNzdEQ0UxMjA2
MDVCNjAwNUMxOUVGIC8qIE5QUnVudGltZVJlbW92ZVByb3BlcnR5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5QUnVudGltZVJlbW92ZVByb3BlcnR5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFEOUQyRkQxMjAyODQwOTAwMUE3MEQxIC8qIFBs
dWdpblNjcmlwdGFibGVOUE9iamVjdEludm9rZURlZmF1bHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0SW52b2tlRGVmYXVs
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIzQkNCODhGMEVBNTc2MjMwMDND
NjI4OSAvKiBPcGVuR0wuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBPcGVuR0wuZnJhbWV3
b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvT3BlbkdMLmZyYW1ld29yazsg
c291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJMjlDRkJBMEUxMjI3MzZFNjAwQkMzMEMw
IC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI5Q0ZCQTBGMTIyNzM2RTYwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5Q0ZCQTJEMTIy
NzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFj
Lm1tOyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRl
clRyZWVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHVtcFJlbmRl
clRyZWVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxM0VEREYxMTVC
RTE2RjAwNzA1NzIwIC8qIENvbG9yQml0cy1BLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgbmFtZSA9ICJDb2xvckJpdHMtQS5w
bmciOyBwYXRoID0gImZvbnRzL0NvbG9yQml0cy1BLnBuZyI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3MTNFREUwMTE1QkUxNkYwMDcwNTcyMCAvKiBDb2xvckJpdHMudHRmICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9
IENvbG9yQml0cy50dGY7IHBhdGggPSBmb250cy9Db2xvckJpdHMudHRmOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzg5LDYgKzM5NSw5IEBACiAJCQkJQkNEMDhCMzkwRTEwNTdFRjAw
QTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCAqLywKIAkJCQlCQ0QwOEE1ODBF
MTA0OTZCMDBBN0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCAqLywKIAkJCQlCQ0Qw
OEI3MDBFMTA1OUQyMDBBN0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi8s
CisJCQkJMjlDRkJBMEYxMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
LmNwcCAqLywKKwkJCQkyOUNGQkEwRTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIuaCAqLywKKwkJCQkyOUNGQkEyRDEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJNYWMubW0gKi8sCiAJCQkJQkMwRTI0REYwRTJEOTQ1MTAwMUI2QkMyIC8q
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwICovLAogCQkJCUJDMEUyNERFMEUyRDk0NTEwMDFC
NkJDMiAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmggKi8sCiAJCQkJQkMwRTI2MTQwRTJEQTRD
NjAwMUI2QkMyIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0gKi8sCkBAIC01ODUsNiAr
NTk0LDcgQEAKIAkJCQlCQzlEOTAyNjBDOTc0NzJFMDA5OUE0QTMgLyogV29ya1F1ZXVlSXRlbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUY2QjMxMDcxNEUxMjAwN0FBMzkzIC8qIEhpc3RvcnlE
ZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCNzgxNjcxMUFGMzFDMzAwN0UxQkMyIC8q
IE1vY2tHZW9sb2NhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyOUNGQkExMDEy
MjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtNjc3LDcgKzY4NywxNCBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAxNDlDMjlDMzA4OTAyQzZEMDA4QTlFRkMgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJEdW1wUmVuZGVyVHJlZSIgKi87CiAJCQljb21w
YXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBF
bmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQlrbm93blJlZ2lvbnMg
PSAoCisJCQkJRW5nbGlzaCwKKwkJCQlKYXBhbmVzZSwKKwkJCQlGcmVuY2gsCisJCQkJR2VybWFu
LAorCQkJKTsKIAkJCW1haW5Hcm91cCA9IDA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1w
UmVuZGVyVHJlZSAqLzsKIAkJCXByb2R1Y3RSZWZHcm91cCA9IDkzNDA5OTU1MDg1NDBDQUYwMDdG
M0JDOCAvKiBQcm9kdWN0cyAqLzsKIAkJCXByb2plY3REaXJQYXRoID0gIiI7CkBAIC03NTgsNiAr
Nzc1LDggQEAKIAkJCQlCQ0ExOEIyNjBDOUIwMTVDMDAxMTQzNjkgLyogV29ya1F1ZXVlSXRlbU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGNkIyMTA3MTRFMDcwMDdBQTM5MyAvKiBIaXN0
b3J5RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUI3ODE2NTExQUYzMUI3MDA3RTFC
QzIgLyogTW9ja0dlb2xvY2F0aW9uUHJvdmlkZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQkyOUNG
QkExMTEyMjczNkU2MDBCQzMwQzAgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMjlDRkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFj
Lm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlUZXh0TWFya2VyTWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyLmgiCisKKyNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcgor
CisjaWYgU1VQUE9SVFNfQVhfVEVYVE1BUktFUlMKKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6
OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKFBsYXRmb3JtVGV4dE1hcmtlciBtYXJrZXIpCisgICAg
OiBtX3RleHRNYXJrZXIobWFya2VyKQoreworICAgIGlmIChtX3RleHRNYXJrZXIpCisgICAgICAg
IENGUmV0YWluKG1fdGV4dE1hcmtlcik7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciYgbWFy
a2VyKQorICAgIDogbV90ZXh0TWFya2VyKG1hcmtlci5wbGF0Zm9ybVRleHRNYXJrZXIoKSkKK3sK
KyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAgICBDRlJldGFpbihtX3RleHRNYXJrZXIpOwor
fQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6fkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKCkK
K3sKKyAgICBpZiAobV90ZXh0TWFya2VyKQorICAgICAgICBDRlJlbGVhc2UobV90ZXh0TWFya2Vy
KTsKKyAgICBtX3RleHRNYXJrZXIgPSBuaWw7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXI6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIG90aGVyKQoreworICAgIHJl
dHVybiBbcGxhdGZvcm1UZXh0TWFya2VyKCkgaXNFcXVhbDpvdGhlci0+cGxhdGZvcm1UZXh0TWFy
a2VyKCldOworfQorCisjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZQor
CitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjpBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlKFBsYXRmb3JtVGV4dE1hcmtlclJhbmdlIG1hcmtlclJhbmdlKQorICAgIDogbV90ZXh0TWFy
a2VyUmFuZ2UobWFya2VyUmFuZ2UpCit7CisgICAgaWYgKG1fdGV4dE1hcmtlclJhbmdlKQorICAg
ICAgICBDRlJldGFpbihtX3RleHRNYXJrZXJSYW5nZSk7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2U6OkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UoY29uc3QgQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZSYgbWFya2VyUmFuZ2UpCisgICAgOiBtX3RleHRNYXJrZXJSYW5n
ZShtYXJrZXJSYW5nZS5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpKQoreworICAgIGlmIChtX3Rl
eHRNYXJrZXJSYW5nZSkKKyAgICAgICAgQ0ZSZXRhaW4obV90ZXh0TWFya2VyUmFuZ2UpOworfQor
CitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlOjp+QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJS
YW5nZSgpCit7CisgICAgaWYgKG1fdGV4dE1hcmtlclJhbmdlKQorICAgICAgICBDRlJlbGVhc2Uo
bV90ZXh0TWFya2VyUmFuZ2UpOworICAgIG1fdGV4dE1hcmtlclJhbmdlID0gbmlsOworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSogb3RoZXIpCit7CisgICAgcmV0dXJuIFtwbGF0Zm9ybVRleHRNYXJrZXJS
YW5nZSgpIGlzRXF1YWw6b3RoZXItPnBsYXRmb3JtVGV4dE1hcmtlclJhbmdlKCldOworfQorCisj
ZW5kaWYgLy8gU1VQUE9SVFNfQVhfVEVYVE1BUktFUlMKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tCShyZXZpc2lvbiA2NjM5MikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkwLDMgKzEx
OTAsNzAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlYwogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KKworI2lmIFNVUFBPUlRTX0FYX1RFWFRNQVJLRVJTCisK
Ky8vIFRleHQgbWFya2VycworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQg
dGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCIgZm9yUGFyYW1ldGVyOmVsZW1lbnQtPnBs
YXRmb3JtVUlFbGVtZW50KCldOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAgIAor
ICAgIHJldHVybiAwOworfQorCitpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtl
clJhbmdlTGVuZ3RoKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJhbmdlKQoreworICAg
IEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIE5TTnVtYmVyKiBsZW5ndGhWYWx1ZSA9IFtt
X2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhMZW5ndGhGb3JUZXh0TWFy
a2VyUmFuZ2UiIGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKV07
CisgICAgcmV0dXJuIFtsZW5ndGhWYWx1ZSBpbnRWYWx1ZV07CisgICAgRU5EX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIAorICAgIHJldHVybiAwOworfQorCisKK0FjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlclJhbmdlRm9yTWFya2Vy
cyhBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIsIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKiBlbmRNYXJrZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAg
TlNBcnJheSogdGV4dE1hcmtlcnMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOnN0YXJ0TWFy
a2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKSwgZW5kTWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIo
KSwgbmlsXTsKKyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTpAIkFYVGV4dE1hcmtlclJhbmdlRm9yVW5vcmRlcmVkVGV4dE1hcmtl
cnMiIGZvclBhcmFtZXRlcjp0ZXh0TWFya2Vyc107CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJ
T05TCisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZShB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkKK3sKKyAgICBCRUdJTl9BWF9PQkpD
X0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSIgZm9y
UGFyYW1ldGVyOnJhbmdlLT5wbGF0Zm9ybVRleHRNYXJrZXJSYW5nZSgpXTsKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgRU5EX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIAorICAgIHJldHVybiAwOyAgICAKK30KKworQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKiByYW5nZSkKK3sKKyAgICBCRUdJTl9B
WF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2Ui
IGZvclBhcmFtZXRlcjpyYW5nZS0+cGxhdGZvcm1UZXh0TWFya2VyUmFuZ2UoKV07CisgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgIEVORF9BWF9PQkpD
X0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gMDsgICAgCit9CisKK0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JU
ZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIpCit7CisgICAgQkVHSU5f
QVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgdWlFbGVtZW50ID0gW21fZWxlbWVudCBhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFVJRWxlbWVudEZvclRleHRNYXJrZXIiIGZvclBhcmFt
ZXRlcjptYXJrZXItPnBsYXRmb3JtVGV4dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCh1aUVsZW1lbnQpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAg
ICAKKyAgICByZXR1cm4gMDsgIAorfQorCisjZW5kaWYgLy8gU1VQUE9SVFNfQVhfVEVYVE1BUktF
UlMKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvagkocmV2aXNpb24gNjYzOTIpCisrKyBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01Nzgs
NiArNTc4LDE0IEBACiAJCQk+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0
aD0iLi5cQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIg0KKwkJCT4NCisJCTwvRmlsZT4NCisJ
CTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuLlxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlci5oIg0K
KwkJCT4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuXERyYWdnaW5n
SW5mby5oIg0KIAkJCT4NCiAJCTwvRmlsZT4NCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjM5MikKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisy
MDEwLTA4LTMwICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQVg6IFN1cHBvcnQgQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJzIGluIERSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3NzgKKworICAgICAgICBBZGQgYmFzaWMgdGV4dCBtYXJr
ZXIgdGVzdHMgdG8gdmFsaWRhdGUgZnVuY3Rpb25zIGFyZSB3b3JraW5nLgorCisgICAgICAgICog
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVt
ZW50LWZvci10ZXh0LW1hcmtlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
YWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci1sZW5ndGguaHRt
bDogQWRkZWQuCisKIDIwMTAtMDgtMzAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBodHRwL3Rlc3RzL2Nzcy9jc3MtaW1hZ2UtbG9hZGlu
Zy5odG1sIG9uIFdpbmRvd3MuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNz
aWJpbGl0eS9lbGVtZW50LWZvci10ZXh0LW1hcmtlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4
dC1tYXJrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvZWxlbWVudC1mb3ItdGV4dC1tYXJrZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACit0ZXh0IGhlcmUKK3RleHQgYmxvY2sKK3Rl
eHQgaGVyZQorVGhpcyB0ZXN0cyB0aGUgdGV4dCBtYXJrZXIgc3lzdGVtIHdpbGwgcmV0dXJuIHRo
ZSByaWdodCBlbGVtZW50IHdoZW4gZ2l2ZW4gYSB0ZXh0IG1hcmtlcgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyB0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aCh0ZXh0TWFy
a2VyUmFuZ2UxKSBpcyAxMAorUEFTUyB0ZXh0LmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1h
cmtlcihzdGFydE1hcmtlcikuaXNFcXVhbCh0ZXh0KSBpcyB0cnVlCitQQVNTIHRleHQuYWNjZXNz
aWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyKGVuZE1hcmtlcikuaXNFcXVhbCh0ZXh0KSBpcyB0
cnVlCitQQVNTIHRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKG5ld01hcmtlclJhbmdlKSBpcyAx
MAorUEFTUyBuZXdNYXJrZXJSYW5nZS5pc0VxdWFsKHRleHRNYXJrZXJSYW5nZTEpIGlzIHRydWUK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0
LW1hcmtlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nl
c3NpYmlsaXR5L2VsZW1lbnQtZm9yLXRleHQtbWFya2VyLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9lbGVtZW50LWZvci10ZXh0LW1h
cmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCit0ZXh0IGhlcmUK
KzxkaXYgaWQ9InRleHQxIiB0YWJpbmRleD0wPnRleHQgYmxvY2s8L2Rpdj4KK3RleHQgaGVyZQor
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8
c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhlIHRleHQgbWFya2VyIHN5
c3RlbSB3aWxsIHJldHVybiB0aGUgcmlnaHQgZWxlbWVudCB3aGVuIGdpdmVuIGEgdGV4dCBtYXJr
ZXIiKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKworICAg
ICAgICAgIC8vIGFyaWEtc3RhdGU9dHJ1ZQorICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJ0ZXh0MSIpLmZvY3VzKCk7CisgICAgICAgICAgdmFyIHRleHQgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFs
IHRleHQgbm9kZS4KKyAgICAgICAgICB0ZXh0ID0gdGV4dC5jaGlsZEF0SW5kZXgoMCk7CisKKyAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBnZXQgdGhlIHN0YXJ0IG1hcmtlciBmb3IgdGhp
cyByYW5nZS4KKyAgICAgICAgICB2YXIgdGV4dE1hcmtlclJhbmdlMSA9IHRleHQudGV4dE1hcmtl
clJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgICBzaG91bGRCZSgidGV4dC50ZXh0TWFy
a2VyUmFuZ2VMZW5ndGgodGV4dE1hcmtlclJhbmdlMSkiLCAiMTAiKTsKKyAgICAgICAgICB2YXIg
c3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0
TWFya2VyUmFuZ2UxKTsKKworICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHN0YXJ0IG1hcmtl
ciB3aWxsIGdpdmUgdXMgdGhlIHNhbWUgZWxlbWVudCB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC4KKyAg
ICAgICAgICBzaG91bGRCZVRydWUoInRleHQuYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFy
a2VyKHN0YXJ0TWFya2VyKS5pc0VxdWFsKHRleHQpIik7CisKKyAgICAgICAgICAvLyBHZXQgdGhl
IGVuZCBtYXJrZXIgYW5kIGNoZWNrIHRoYXQgaXQgZ2l2ZXMgdXMgdGhlIHNhbWUgZWxlbWVudC4K
KyAgICAgICAgICB2YXIgZW5kTWFya2VyID0gdGV4dC5lbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
clJhbmdlKHRleHRNYXJrZXJSYW5nZTEpOworICAgICAgICAgIHNob3VsZEJlVHJ1ZSgidGV4dC5h
Y2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoZW5kTWFya2VyKS5pc0VxdWFsKHRleHQp
Iik7CisKKyAgICAgICAgICAvLyBNYWtlIGEgbWFya2VyIHJhbmdlIG91dCBvZiB0aGUgc3RhcnQg
YW5kIGVuZCBtYXJrZXJzIGFuZCBjaGVjayB0aGUgbGVuZ3RoCisgICAgICAgICAgdmFyIG5ld01h
cmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0YXJ0TWFya2VyLCBl
bmRNYXJrZXIpOworICAgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0
aChuZXdNYXJrZXJSYW5nZSkiLCAiMTAiKTsKKworICAgICAgICAgIC8vIEFuZCBtYWtlIHN1cmUg
aXQgZXF1YWxzIHRoZSBzYW1lIG1hcmtlciByYW5nZSB3ZSBzdGFydGVkIHdpdGgKKyAgICAgICAg
ICBzaG91bGRCZVRydWUoIm5ld01hcmtlclJhbmdlLmlzRXF1YWwodGV4dE1hcmtlclJhbmdlMSki
KTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisK
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtl
ci1sZW5ndGgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXItbGVuZ3RoLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAordGV4dCBibG9jaworVGhpcyB0ZXN0cyB0aGUgdGV4
dCBtYXJrZXIgaW1wbGVtZW50aW9uIG9mIERSVCBpcyB3b3JraW5nIGJ5IHJldHVybmluZyBhIG1h
cmtlciByYW5nZSBhbmQgYnkgcmV0dXJuaW5nIGl0cyBjb3JyZWN0IGxlbmd0aC4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgo
dGV4dE1hcmtlclJhbmdlKSBpcyAxMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hY2Nlc3Np
YmlsaXR5L3RleHQtbWFya2VyLWxlbmd0aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyLWxlbmd0aC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvdGV4dC1t
YXJrZXItbGVuZ3RoLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFs
c2U7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxk
aXYgaWQ9InRleHQiIHRhYmluZGV4PTA+dGV4dCBibG9jazwvZGl2PgorCis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAg
ZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhlIHRleHQgbWFya2VyIGltcGxlbWVudGlvbiBvZiBE
UlQgaXMgd29ya2luZyBieSByZXR1cm5pbmcgYSBtYXJrZXIgcmFuZ2UgYW5kIGJ5IHJldHVybmlu
ZyBpdHMgY29ycmVjdCBsZW5ndGguIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKSB7CisKKyAgICAgICAgICAvLyBhcmlhLXN0YXRlPXRydWUKKyAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dCIpLmZvY3VzKCk7CisgICAgICAgICAgdmFyIHRl
eHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAgICB2
YXIgdGV4dE1hcmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQp
OworICAgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aCh0ZXh0TWFy
a2VyUmFuZ2UpIiwgIjEwIik7CisgICAgfQorCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="54796"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>