<?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>41721</bug_id>
          
          <creation_ts>2010-07-06 16:06:07 -0700</creation_ts>
          <short_desc>Missing plug-in indicator button should have a pressed state</short_desc>
          <delta_ts>2010-07-08 18:02:16 -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>Plug-ins</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adele Peterson">adele</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>darin</cc>
    
    <cc>jhoneycutt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>247230</commentid>
    <comment_count>0</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-07-06 16:06:07 -0700</bug_when>
    <thetext>Missing plug-in indicator button should have a pressed state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247267</commentid>
    <comment_count>1</comment_count>
      <attachid>60672</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-07-06 19:06:34 -0700</bug_when>
    <thetext>Created attachment 60672
patch

Still needs a test and real ChangeLog comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247603</commentid>
    <comment_count>2</comment_count>
      <attachid>60672</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 09:49:30 -0700</bug_when>
    <thetext>Comment on attachment 60672
patch

&gt; +    , m_capturingMouseEvents(0)

false, not 0.

&gt; +    if (m_capturingMouseEvents)
&gt; +        if (Frame* frame = document()-&gt;frame())
&gt; +            frame-&gt;eventHandler()-&gt;setCapturingMouseEventsNode(0);      

Need braces around this. Trailing spaces after the setCapturingMouseEventsNode call. Should this set m_capturingMouseEvents to false?

&gt; +    bool m_capturingMouseEvents;

Should be m_isCapturingMouseEvents.

&gt; +    FloatPoint labelPoint(roundf(replacementTextRect.location().x() + (replacementTextRect.size().width() - textWidth) / 2),
&gt; +                          roundf(replacementTextRect.location().y()+ (replacementTextRect.size().height() - font.height()) / 2 + font.ascent()));

For what it&apos;s worth, I never format things like this, with the second line indented to match the open parenthesis.

I think this might read better if you used two local variables for x and y. There&apos;s a missing space in &quot;y()+&quot;.

&gt; +    replacementTextRect.setLocation(FloatPoint((contentRect.size().width() / 2 - replacementTextRect.size().width() / 2) + contentRect.location().x(),
&gt; +                                               (contentRect.size().height() / 2 - replacementTextRect.size().height() / 2) + contentRect.location().y()));

Same comment about indentation.

&gt; +    FloatRect contentRect;
&gt; +    Path path;
&gt; +    FloatRect replacementTextRect;
&gt; +    Font font;
&gt; +    TextRun run(&quot;&quot;);
&gt; +    float textWidth;
&gt; +    if (!getReplacementTextGeometry(0, 0, contentRect, path, replacementTextRect, font, run, textWidth))
&gt; +        return false;

Another way to do this is to create a struct to hold the six things that come out of this function.

&gt; +    FloatPoint localPoint = absoluteToLocal(static_cast&lt;MouseEvent*&gt;(event)-&gt;absoluteLocation(), false, true);

Those boolean arguments stink! Not your job to fix that in this check-in, but still!

&gt; +    if (Page* page = document()-&gt;page())
&gt; +        if (!page-&gt;chrome()-&gt;client()-&gt;shouldMissingPluginMessageBeButton())
&gt; +            return;

Missing braces here.

&gt; +    void setMissingPluginIndicatorIsPressed(bool pressed) { m_missingPluginIndicatorIsPressed = pressed; }

Might want to make this handle the repaint automatically. Then you could use it in the three places that set this flag without explicit code to handle the repainting.

Also, I see no callers, so if you don&apos;t add callers, then I suggest getting rid of this. Also, should consider making this a private function.

&gt; +    bool eventIsInMissingPluginIndicator(Event*);

Not sure the word &quot;event&quot; is needed in the function name.

Since you did end up checking isMouseEvent in handleMissingPluginIndicatorEvent, you could change this to take a MouseEvent*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247843</commentid>
    <comment_count>3</comment_count>
      <attachid>60800</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-07-07 16:28:56 -0700</bug_when>
    <thetext>Created attachment 60800
patch

same changelog issues as before, but addresses many of Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247996</commentid>
    <comment_count>4</comment_count>
      <attachid>60834</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-07-07 21:52:54 -0700</bug_when>
    <thetext>Created attachment 60834
patch

now with a test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248257</commentid>
    <comment_count>5</comment_count>
      <attachid>60834</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-08 09:15:17 -0700</bug_when>
    <thetext>Comment on attachment 60834
patch

You need to update UIDelegate::QueryInterface to support querying to IWebUIDelegatePrivate3. You should probably support IWebUIDelegatePrivate2, too.

You could get away without adding shouldMissingPluginMessageBeButton on Windows. You could instead say &quot;if the UI delegate implements IWebUIDelegatePrivate3, then the message should be a button&quot;. That would be good enough for Safari. It&apos;s not clear to me whether that&apos;s better than adding the new delegate function, though.

Other than that, the Windows changes look fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248309</commentid>
    <comment_count>6</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-07-08 10:28:53 -0700</bug_when>
    <thetext>Hmm I may post a new patch then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248456</commentid>
    <comment_count>7</comment_count>
      <attachid>60936</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-07-08 12:57:47 -0700</bug_when>
    <thetext>Created attachment 60936
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248484</commentid>
    <comment_count>8</comment_count>
      <attachid>60936</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-08 13:21:14 -0700</bug_when>
    <thetext>Comment on attachment 60936
patch

I still think you should add support for IWebUIDelegatePrivate2 to UIDelegate::QueryInterface.

Other than that, the Windows changes look fine. Looks like you have an extra space in the Mac UIDelegate implementation.

I didn&apos;t read the rest of the patch (aroben--)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248486</commentid>
    <comment_count>9</comment_count>
      <attachid>60936</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2010-07-08 13:25:16 -0700</bug_when>
    <thetext>Comment on attachment 60936
patch

&gt; ===================================================================
&gt; Index: WebCore/plugins/PluginView.cpp
&gt; ===================================================================
&gt; --- WebCore/plugins/PluginView.cpp	(revision 62605)
&gt; +++ WebCore/plugins/PluginView.cpp	(working copy)
&gt; @@ -284,7 +284,9 @@ PluginView::~PluginView()
&gt;  
&gt;      ASSERT(!m_lifeSupportTimer.isActive());
&gt;  
&gt; -    instanceMap().remove(m_instance);
&gt; +    // If the plug-in can&apos;t be found then m_instance is 0
&gt; +    if (m_instance)
&gt; +        instanceMap().remove(m_instance);
&gt;  
&gt;      if (m_isWaitingToStart)
&gt;          m_parentFrame-&gt;document()-&gt;removeMediaCanStartListener(this);
&gt; @@ -811,6 +813,7 @@ PluginView::PluginView(Frame* parentFram
&gt;      , m_paramNames(0)
&gt;      , m_paramValues(0)
&gt;      , m_mimeType(mimeType)
&gt; +    , m_instance(0)
&gt;  #if defined(XP_MACOSX)
&gt;      , m_isWindowed(false)
&gt;  #else

This change isn&apos;t mentioned in your ChangeLog. This fix is also separate from your other changes and could be split out into its own change. Also, although your new test does test this on Windows, this fix could also have its own test that ran on all platforms that use PluginView.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248517</commentid>
    <comment_count>10</comment_count>
      <attachid>60936</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-08 14:02:12 -0700</bug_when>
    <thetext>Comment on attachment 60936
patch

&gt; +    // If the plug-in can&apos;t be found then m_instance is 0

Missing period on this comment.

&gt; +void RenderEmbeddedObject::setMissingPluginIndicatorIsPressed(bool pressed)
&gt; +{
&gt; +    if (m_missingPluginIndicatorIsPressed != pressed) {
&gt; +        m_missingPluginIndicatorIsPressed = pressed;
&gt; +        repaint();
&gt; +    }
&gt; +}

I normally suggest early-return for this kind of function.

&gt; +    path = Path::createRoundedRectangle(replacementTextRect, FloatSize(replacementTextRoundedRectRadius, replacementTextRoundedRectRadius));
&gt; +    return true;

I think there should be a blank line there. No reason for the path-setting line to be grouped with the return statement, since it&apos;s only one of many things returned by the function.

&gt; +    FloatPoint localPoint = absoluteToLocal(event-&gt;absoluteLocation(), false, true);
&gt; +    return path.contains(localPoint);

I would collapse these two lines into one. I don&apos;t think the local variable name helps a lot, and the combined line is only three characters longer than the first line.

&gt; +        bool shouldBePressed = m_mouseDownWasInMissingPluginIndicator &amp;&amp; isInMissingPluginIndicator(mouseEvent);
&gt; +        setMissingPluginIndicatorIsPressed(shouldBePressed);

I would collapse these two lines into one.

&gt; +    void setMissingPluginIndicatorIsPressed(bool pressed);

I don&apos;t think you need this argument name here.

&gt; +    // If the UI delegate implements IWebUIDelegatePrivate3, 
&gt; +    // which contains didPressMissingPluginButton, then the message should be a button.
&gt; +    COMPtr&lt;IWebUIDelegatePrivate3&gt; uiDelegatePrivate3(Query, uiDelegate);
&gt; +    return uiDelegatePrivate3;

Seems like in the future some client might want to implement some other aspects of IWebUIDelegatePrivate3 but not have the missing plug-in text act as a button. So this is not perfect for the future.

&gt; +    printf (&quot;MISSING PLUGIN BUTTON PRESSED\n&quot;);

Extra space after printf. Could use puts here instead.

&gt; +    printf(&quot;MISSING PLUGIN BUTTON PRESSED\n&quot;);

Could use puts here instead.

All of those comments are advisory and none should be considered as overriding Jon&apos;s r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248658</commentid>
    <comment_count>11</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-07-08 18:02:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62875</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60672</attachid>
            <date>2010-07-06 19:06:34 -0700</date>
            <delta_ts>2010-07-07 16:28:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-07-06-10-plugin-open.txt</filename>
            <type>text/plain</type>
            <size>24091</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjYwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDctMDYgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBNaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNo
b3VsZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisgICAgICAgIFRlc3Q6CisKKyAgICAgICAgKiBo
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5F
bGVtZW50OjpIVE1MUGx1Z0luRWxlbWVudCk6IEluaXRpYWxpemUgbV9jYXB0dXJpbmdNb3VzZUV2
ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2gpOiBJZiB3
ZSdyZSBzdGlsbCBjYXB0dXJpbmcgd2hlbiBnZXR0aW5nIGRldGFjaGVkLCBjbGVhciB0aGUgY2Fw
dHVyaW5nIG5vZGUgb24gdGhlIEV2ZW50SGFuZGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
bHVnSW5FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogQ2FsbCBoYW5kbGVNaXNzaW5nUGx1
Z2luSW5kaWNhdG9yRXZlbnQgd2hlbiB0aGUgbWlzc2luZyBwbHVnaW4gaW5kaWNhdG9yIGlzIHNo
b3dpbmcuCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OmlzQ2FwdHVyaW5nTW91c2VFdmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnNldENhcHR1cmluZ01vdXNlRXZlbnRzKToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpz
aG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKTogQWRkZWQgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OlJlbmRlckVtYmVkZGVk
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJl
cGxhY2VkKTogQ2FsbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeSk6IEZh
Y3RvciB0aGlzIG91dCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBwYWludFJlcGxhY2VkIGFuZCBpbiBl
dmVudElzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmV2ZW50SXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IpOiBDYWxsIGdl
dFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5IHRvIGhpdCB0ZXN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZU1pc3NpbmdQbHVnaW5JbmRpY2F0b3JFdmVudCk6
IENhcHR1cmUgbW91c2UgZXZlbnRzIGFzIG5lZWRlZCBhbmQgdHJhY2sgdGhlIHByZXNzZWQgYXBw
ZWFyYW5jZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaDogKFdl
YkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQ
cmVzc2VkKToKKwogMjAxMC0wNy0wNiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5F
bGVtZW50LmNwcAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIEhUTUxQbHVnSW5FbGVt
ZW50OjpIVE1MUGx1Z0luRWxlbWVudChjb24KICAgICA6IEhUTUxGcmFtZU93bmVyRWxlbWVudCh0
YWdOYW1lLCBkb2MpCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgLCBtX05Q
T2JqZWN0KDApCisgICAgLCBtX2NhcHR1cmluZ01vdXNlRXZlbnRzKDApCiAjZW5kaWYKIHsKIH0K
QEAgLTcwLDYgKzcxLDExIEBAIEhUTUxQbHVnSW5FbGVtZW50Ojp+SFRNTFBsdWdJbkVsZW1lbnQo
KQogdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCkKIHsKICAgICBtX2luc3RhbmNlLmNs
ZWFyKCk7CisKKyAgICBpZiAobV9jYXB0dXJpbmdNb3VzZUV2ZW50cykKKyAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsgICAgICAKKwogICAg
IEhUTUxGcmFtZU93bmVyRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKQEAgLTE0MiwxNCArMTQ4LDcg
QEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogCiAgICAgUmVuZGVy
T2JqZWN0KiByID0gcmVuZGVyZXIoKTsKICAgICBpZiAociAmJiByLT5pc0VtYmVkZGVkT2JqZWN0
KCkgJiYgdG9SZW5kZXJFbWJlZGRlZE9iamVjdChyKS0+c2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNh
dG9yKCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmNsaWNr
RXZlbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUGFnZSogcGFnZSA9IGRvY3Vt
ZW50KCktPnBhZ2UoKTsKLSAgICAgICAgaWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bWlzc2luZ1BsdWdpbkJ1dHRvbkNs
aWNrZWQodGhpcyk7CisgICAgICAgIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QociktPmhhbmRsZU1p
c3NpbmdQbHVnaW5JbmRpY2F0b3JFdmVudChldmVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCShyZXZpc2lvbiA2MjU2MCkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0
NCw5IEBAIHB1YmxpYzoKICAgICBOUE9iamVjdCogZ2V0TlBPYmplY3QoKTsKICNlbmRpZgogCisg
ICAgYm9vbCBpc0NhcHR1cmluZ01vdXNlRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJp
bmdNb3VzZUV2ZW50czsgfQorICAgIHZvaWQgc2V0Q2FwdHVyaW5nTW91c2VFdmVudHMoYm9vbCBj
YXB0dXJpbmcpIHsgbV9jYXB0dXJpbmdNb3VzZUV2ZW50cyA9IGNhcHR1cmluZzsgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqKTsKIApAQCAtNzIsNiArNzUsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIE5QT2JqZWN0KiBtX05QT2JqZWN0OwogI2VuZGlmCisg
ICAgYm9vbCBtX2NhcHR1cmluZ01vdXNlRXZlbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEVuZCBtZXRob2RzIHVzZWQgYnkgSG9zdFdpbmRv
dy4KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25z
dCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJl
QnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIG1p
c3NpbmdQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQqKSBjb25zdCB7IH0KICAgICAgICAgdmly
dHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1
bnNpZ25lZCBtb2RpZmllckZsYWdzKSA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDYyNTYwKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsy
NCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiRm9udFNlbGVjdG9yLmgiCkBAIC0zNyw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcmFt
RWxlbWVudC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGx1Z2luV2lkZ2V0LmgiCkBAIC02MSwx
MyArNjQsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBmbG9h
dCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdEhlaWdodCA9IDE4Owogc3RhdGljIGNvbnN0IGZs
b2F0IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0TGVmdFJpZ2h0VGV4dE1hcmdpbiA9IDY7CiBz
dGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RPcGFjaXR5ID0gMC4y
MGY7CitzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0UHJlc3NlZFJvdW5kZWRSZWN0
T3BhY2l0eSA9IDAuNjVmOwogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0UmFkaXVzID0gNTsKIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudFRleHRUZXh0
T3BhY2l0eSA9IDAuNTVmOworc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50VGV4dFByZXNz
ZWRUZXh0T3BhY2l0eSA9IDAuNjVmOwogCitzdGF0aWMgY29uc3QgQ29sb3ImIHJlcGxhY2VtZW50
VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgQ29sb3Ig
bGlnaHRHcmF5KDIwNSwgMjA1LCAyMDUpOworICAgIHJldHVybiBsaWdodEdyYXk7Cit9CisgICAg
CiBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UmVuZGVyRW1iZWRkZWRPYmplY3QoRWxlbWVudCogZWxl
bWVudCkKICAgICA6IFJlbmRlclBhcnQoZWxlbWVudCkKICAgICAsIG1faGFzRmFsbGJhY2tDb250
ZW50KGZhbHNlKQogICAgICwgbV9zaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3IoZmFsc2UpCisg
ICAgLCBtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoZmFsc2UpCisgICAgLCBtX21v
dXNlRG93bldhc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcihmYWxzZSkKIHsKICAgICB2aWV3KCkt
PmZyYW1lVmlldygpLT5zZXRJc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKIH0KQEAgLTM3OCw4ICszOTEs
MzUgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIGlmIChj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBG
bG9hdFJlY3QgcGx1Z2luUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgcGx1Z2luUmVjdC5t
b3ZlKHR4LCB0eSk7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0OworICAgIFBhdGggcGF0aDsK
KyAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKKyAgICBGb250IGZvbnQ7CisgICAg
VGV4dFJ1biBydW4oIiIpOworICAgIGZsb2F0IHRleHRXaWR0aDsKKyAgICBpZiAoIWdldFJlcGxh
Y2VtZW50VGV4dEdlb21ldHJ5KHR4LCB0eSwgY29udGVudFJlY3QsIHBhdGgsIHJlcGxhY2VtZW50
VGV4dFJlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlwKGNvbnRlbnRSZWN0KTsKKyAg
ICBjb250ZXh0LT5iZWdpblBhdGgoKTsKKyAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOyAgCisg
ICAgY29udGV4dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8g
cmVwbGFjZW1lbnRUZXh0UHJlc3NlZFJvdW5kZWRSZWN0T3BhY2l0eSA6IHJlcGxhY2VtZW50VGV4
dFJvdW5kZWRSZWN0T3BhY2l0eSk7CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG1fbWlzc2lu
Z1BsdWdpbkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJl
c3NlZENvbG9yKCkgOiBDb2xvcjo6d2hpdGUsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CisgICAg
Y29udGV4dC0+ZmlsbFBhdGgoKTsKKworICAgIEZsb2F0UG9pbnQgbGFiZWxQb2ludChyb3VuZGYo
cmVwbGFjZW1lbnRUZXh0UmVjdC5sb2NhdGlvbigpLngoKSArIChyZXBsYWNlbWVudFRleHRSZWN0
LnNpemUoKS53aWR0aCgpIC0gdGV4dFdpZHRoKSAvIDIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICByb3VuZGYocmVwbGFjZW1lbnRUZXh0UmVjdC5sb2NhdGlvbigpLnkoKSsgKHJlcGxhY2Vt
ZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdodCgpIC0gZm9udC5oZWlnaHQoKSkgLyAyICsgZm9udC5h
c2NlbnQoKSkpOworICAgIGNvbnRleHQtPnNldEFscGhhKG1fbWlzc2luZ1BsdWdpbkluZGljYXRv
cklzUHJlc3NlZCA/IHJlcGxhY2VtZW50VGV4dFByZXNzZWRUZXh0T3BhY2l0eSA6IHJlcGxhY2Vt
ZW50VGV4dFRleHRPcGFjaXR5KTsKKyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJs
YWNrLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOworICAgIGNvbnRleHQtPmRyYXdCaWRpVGV4dChm
b250LCBydW4sIGxhYmVsUG9pbnQpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworYm9v
bCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoaW50IHR4
LCBpbnQgdHksIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIFBhdGgmIHBhdGgsIEZsb2F0UmVjdCYg
cmVwbGFjZW1lbnRUZXh0UmVjdCwgRm9udCYgZm9udCwgVGV4dFJ1biYgcnVuLCBmbG9hdCYgdGV4
dFdpZHRoKQoreworICAgIGNvbnRlbnRSZWN0ID0gY29udGVudEJveFJlY3QoKTsKKyAgICBjb250
ZW50UmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgCiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbjsKICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NT
VmFsdWVXZWJraXRTbWFsbENvbnRyb2wsIGZvbnREZXNjcmlwdGlvbik7CkBAIC0zODcsMzYgKzQy
NywyMiBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkCiAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICBBU1NFUlQoc2V0
dGluZ3MpOwogICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdz
LT5mb250UmVuZGVyaW5nTW9kZSgpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRT
aXplKGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwotICAgIEZvbnQgZm9udChmb250
RGVzY3JpcHRpb24sIDAsIDApOworICAgIGZvbnQgPSBGb250KGZvbnREZXNjcmlwdGlvbiwgMCwg
MCk7CiAgICAgZm9udC51cGRhdGUoMCk7CiAgICAgCi0gICAgVGV4dFJ1biBydW4obV9yZXBsYWNl
bWVudFRleHQuY2hhcmFjdGVycygpLCBtX3JlcGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7CisgICAg
cnVuID0gVGV4dFJ1bihtX3JlcGxhY2VtZW50VGV4dC5jaGFyYWN0ZXJzKCksIG1fcmVwbGFjZW1l
bnRUZXh0Lmxlbmd0aCgpKTsKICAgICBydW4uZGlzYWJsZVJvdW5kaW5nSGFja3MoKTsKLSAgICBm
bG9hdCB0ZXh0V2lkdGggPSBmb250LmZsb2F0V2lkdGgocnVuKTsKKyAgICB0ZXh0V2lkdGggPSBm
b250LmZsb2F0V2lkdGgocnVuKTsKICAgICAKLSAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0
UmVjdDsKICAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldFNpemUoRmxvYXRTaXplKHRleHRXaWR0
aCArIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0TGVmdFJpZ2h0VGV4dE1hcmdpbiAqIDIsIHJl
cGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0SGVpZ2h0KSk7Ci0gICAgcmVwbGFjZW1lbnRUZXh0UmVj
dC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KChwbHVnaW5SZWN0LnNpemUoKS53aWR0aCgpIC8gMiAt
IHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndpZHRoKCkgLyAyKSArIHBsdWdpblJlY3QubG9j
YXRpb24oKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAocGx1Z2luUmVjdC5zaXplKCkuaGVpZ2h0KCkgLyAyIC0gcmVwbGFjZW1lbnRUZXh0UmVjdC5z
aXplKCkuaGVpZ2h0KCkgLyAyKSArIHBsdWdpblJlY3QubG9jYXRpb24oKS55KCkpKTsKLSAgIAot
ICAgIFBhdGggcGF0aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVwbGFjZW1lbnRU
ZXh0UmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBs
YWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOwotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAg
ICBjb250ZXh0LT5jbGlwKHBsdWdpblJlY3QpOwotICAgIGNvbnRleHQtPmJlZ2luUGF0aCgpOwot
ICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7ICAKLSAgICBjb250ZXh0LT5zZXRBbHBoYShyZXBs
YWNlbWVudFRleHRSb3VuZGVkUmVjdE9wYWNpdHkpOwotICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihDb2xvcjo6d2hpdGUsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7Ci0gICAgY29udGV4dC0+Zmls
bFBhdGgoKTsKLQotICAgIEZsb2F0UG9pbnQgbGFiZWxQb2ludChyb3VuZGYocmVwbGFjZW1lbnRU
ZXh0UmVjdC5sb2NhdGlvbigpLngoKSArIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS53aWR0
aCgpIC0gdGV4dFdpZHRoKSAvIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGYo
cmVwbGFjZW1lbnRUZXh0UmVjdC5sb2NhdGlvbigpLnkoKSsgKHJlcGxhY2VtZW50VGV4dFJlY3Qu
c2l6ZSgpLmhlaWdodCgpIC0gZm9udC5oZWlnaHQoKSkgLyAyICsgZm9udC5hc2NlbnQoKSkpOwot
ICAgIGNvbnRleHQtPnNldEFscGhhKHJlcGxhY2VtZW50VGV4dFRleHRPcGFjaXR5KTsKLSAgICBj
b250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkp
OwotICAgIGNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCBydW4sIGxhYmVsUG9pbnQpOwotICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldExvY2F0aW9u
KEZsb2F0UG9pbnQoKGNvbnRlbnRSZWN0LnNpemUoKS53aWR0aCgpIC8gMiAtIHJlcGxhY2VtZW50
VGV4dFJlY3Quc2l6ZSgpLndpZHRoKCkgLyAyKSArIGNvbnRlbnRSZWN0LmxvY2F0aW9uKCkueCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGVu
dFJlY3Quc2l6ZSgpLmhlaWdodCgpIC8gMiAtIHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhl
aWdodCgpIC8gMikgKyBjb250ZW50UmVjdC5sb2NhdGlvbigpLnkoKSkpOworICAgIAorICAgIHBh
dGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlcGxhY2VtZW50VGV4dFJlY3QsIEZs
b2F0U2l6ZShyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cywgcmVwbGFjZW1lbnRUZXh0
Um91bmRlZFJlY3RSYWRpdXMpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6bGF5b3V0KCkKQEAgLTQ1NSw1ICs0ODEsNjggQEAgdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6dmlld0NsZWFyZWQoKQogICAgICAgICAgICAgdmlldy0+c2V0TWFyZ2lu
SGVpZ2h0KG1hcmdpbmgpOwogICAgIH0KIH0KKyAKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OmV2ZW50SXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IoRXZlbnQqIGV2ZW50KQoreworICAgIEZs
b2F0UmVjdCBjb250ZW50UmVjdDsKKyAgICBQYXRoIHBhdGg7CisgICAgRmxvYXRSZWN0IHJlcGxh
Y2VtZW50VGV4dFJlY3Q7CisgICAgRm9udCBmb250OworICAgIFRleHRSdW4gcnVuKCIiKTsKKyAg
ICBmbG9hdCB0ZXh0V2lkdGg7CisgICAgaWYgKCFnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeSgw
LCAwLCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgZm9udCwgcnVuLCB0
ZXh0V2lkdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRmxvYXRQb2ludCBs
b2NhbFBvaW50ID0gYWJzb2x1dGVUb0xvY2FsKHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVu
dCktPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOworICAgIHJldHVybiBwYXRoLmNv
bnRhaW5zKGxvY2FsUG9pbnQpOworfQorCit2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpoYW5k
bGVNaXNzaW5nUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChQ
YWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBpZiAoIXBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+c2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbigpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG5vZGUoKSk7CisgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNl
RXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgbV9tb3Vz
ZURvd25XYXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IgPSBldmVudElzSW5NaXNzaW5nUGx1Z2lu
SW5kaWNhdG9yKGV2ZW50KTsKKyAgICAgICAgaWYgKG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1
Z2luSW5kaWNhdG9yKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0
Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGVsZW1l
bnQtPnNldENhcHR1cmluZ01vdXNlRXZlbnRzKHRydWUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJlcGFpbnQoKTsKKyAgICAgICAgfQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICB9ICAgICAgICAKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2V1cEV2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKG1fbWlzc2luZ1BsdWdpbkluZGljYXRv
cklzUHJlc3NlZCkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCkt
PmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENh
cHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRD
YXB0dXJpbmdNb3VzZUV2ZW50cyhmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBt
X21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHJl
cGFpbnQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9tb3VzZURvd25XYXNJbk1pc3NpbmdQ
bHVnaW5JbmRpY2F0b3IgJiYgZXZlbnRJc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcihldmVudCkp
IHsKKyAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKQorICAg
ICAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bWlzc2luZ1BsdWdpbkJ1dHRv
bkNsaWNrZWQoZWxlbWVudCk7ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgbV9tb3Vz
ZURvd25XYXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IgPSBmYWxzZTsKKyAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkgeworICAgICAgICBib29sIHNob3VsZEJlUHJlc3Nl
ZCA9IG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yICYmIGV2ZW50SXNJbk1p
c3NpbmdQbHVnaW5JbmRpY2F0b3IoZXZlbnQpOworICAgICAgICBpZiAobV9taXNzaW5nUGx1Z2lu
SW5kaWNhdG9ySXNQcmVzc2VkICE9IHNob3VsZEJlUHJlc3NlZCkgeworICAgICAgICAgICAgbV9t
aXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID0gc2hvdWxkQmVQcmVzc2VkOworICAgICAg
ICAgICAgcmVwYWludCgpOworICAgICAgICB9CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgIH0KK30KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5oCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFNob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcigpOwogICAgIHZvaWQg
c2V0U2hvd3NDcmFzaGVkUGx1Z2luSW5kaWNhdG9yKCk7CiAgICAgYm9vbCBzaG93c01pc3NpbmdQ
bHVnaW5JbmRpY2F0b3IoKSBjb25zdCB7IHJldHVybiBtX3Nob3dzTWlzc2luZ1BsdWdpbkluZGlj
YXRvcjsgfQorICAgIHZvaWQgc2V0TWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZChib29s
IHByZXNzZWQpIHsgbV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID0gcHJlc3NlZDsg
fQogCiAgICAgYm9vbCBoYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc0Zh
bGxiYWNrQ29udGVudDsgfQogCisgICAgdm9pZCBoYW5kbGVNaXNzaW5nUGx1Z2luSW5kaWNhdG9y
RXZlbnQoRXZlbnQqKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0OwogI2VuZGlm
CkBAIC01OCwxMCArNjEsMTUgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdmlld0NsZWFyZWQoKTsKKyAgICAKKyAgICBib29sIGV2ZW50
SXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IoRXZlbnQqKTsKKyAgICBib29sIGdldFJlcGxhY2Vt
ZW50VGV4dEdlb21ldHJ5KGludCB0eCwgaW50IHR5LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQ
YXRoJiwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZs
b2F0JiB0ZXh0V2lkdGgpOwogCiAgICAgU3RyaW5nIG1fcmVwbGFjZW1lbnRUZXh0OwogICAgIGJv
b2wgbV9oYXNGYWxsYmFja0NvbnRlbnQ7CiAgICAgYm9vbCBtX3Nob3dzTWlzc2luZ1BsdWdpbklu
ZGljYXRvcjsKKyAgICBib29sIG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZDsKKyAg
ICBib29sIG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yOwogfTsKIAogaW5s
aW5lIFJlbmRlckVtYmVkZGVkT2JqZWN0KiB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KFJlbmRlck9i
amVjdCogb2JqZWN0KQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNjAyKQorKysgV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNy0wNiAgQWRlbGUg
UGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDE3MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgxNTg1NjE+IE1pc3Np
bmcgcGx1Zy1pbiBpbmRpY2F0b3Igc2hvdWxkIGhhdmUgYSBwcmVzc2VkIHN0YXRlCisKKyAgICAg
ICAgSW1wbGVtZW50IHNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24uCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnNo
b3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24pOgorCiAyMDEwLTA2LTIzICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIENhcmxzb24uCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgJKHJldmlzaW9uIDYyNTYwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVGV4dChjb25zdCBXZWJDb3JlOjpTdHJp
bmcmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0
IHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9u
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkKFdl
YkNvcmU6OkVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVy
RmxhZ3MpOwogCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQkocmV2aXNpb24gNjI1NjApCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTE2LDYgKzUxNiwxMSBAQCB2b2lk
IFdlYkNocm9tZUNsaWVudDo6c2Nyb2xsUmVjdEludG9WaWV3CiAKIC8vIEVuZCBob3N0IHdpbmRv
dyBtZXRob2RzLgogCitib29sIFdlYkNocm9tZUNsaWVudDo6c2hvdWxkTWlzc2luZ1BsdWdpbk1l
c3NhZ2VCZUJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtbbV93ZWJWaWV3IFVJRGVsZWdh
dGVdIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpkaWRQcmVzc01pc3NpbmdQ
bHVnaW5CdXR0b246KV07Cit9CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjptaXNzaW5nUGx1Z2lu
QnV0dG9uQ2xpY2tlZChFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIENhbGxVSURlbGVn
YXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0
dG9uOiksIGtpdChlbGVtZW50KSk7CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNjI2MDIpCisrKyBXZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTA2
ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MTcyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODE1ODU2
MT4gTWlzc2luZyBwbHVnLWluIGluZGljYXRvciBzaG91bGQgaGF2ZSBhIHByZXNzZWQgc3RhdGUK
KworICAgICAgICBJbXBsZW1lbnQgc2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbi4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6IChXZWJDaHJv
bWVDbGllbnQ6OnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24pOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDEwLTA3LTAzICBKb24gSG9u
ZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAgICAgVGhlIG1pc3NpbmcgcGx1
Zy1pbiBpbmRpY2F0b3Igc2hvdWxkIGJlIGNsaWNrYWJsZQpJbmRleDogV2ViS2l0L3dpbi9JbnRl
cmZhY2VzL0lXZWJVSURlbGVnYXRlUHJpdmF0ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlUHJpdmF0ZS5pZGwJKHJldmlzaW9uIDYyNTYwKQor
KysgV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlUHJpdmF0ZS5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw0ICsxMDksNSBAQCBpbnRlcmZhY2UgSVdlYlVJRGVsZWdhdGVQcml2
YXRlMiA6IElXZWJVCiBpbnRlcmZhY2UgSVdlYlVJRGVsZWdhdGVQcml2YXRlMyA6IElXZWJVSURl
bGVnYXRlUHJpdmF0ZTIKIHsKICAgICBIUkVTVUxUIGRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1dHRv
bihbaW5dIElET01FbGVtZW50Kik7CisgICAgSFJFU1VMVCBzaG91bGRNaXNzaW5nUGx1Z2luTWVz
c2FnZUJlQnV0dG9uKFtvdXRdIEJPT0wqKTsKIH0KSW5kZXg6IFdlYktpdC93aW4vSW50ZXJmYWNl
cy9XZWJLaXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vSW50ZXJmYWNlcy9XZWJLaXQu
aWRsCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYktpdC93aW4vSW50ZXJmYWNlcy9XZWJLaXQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
IGNwcF9xdW90ZSgiLyoiKQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNSw2ICs1MzUs
MjMgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbAogICAgIHVpRGVs
ZWdhdGUtPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KG1fd2ViVmlldywgZWxlbWVudC5nZXQoKSwg
bW9kaWZpZXJGbGFncyk7CiB9CiAKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRNaXNzaW5n
UGx1Z2luTWVzc2FnZUJlQnV0dG9uKCkgY29uc3QKK3sKKyAgICBDT01QdHI8SVdlYlVJRGVsZWdh
dGU+IHVpRGVsZWdhdGU7CisgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnVpRGVsZWdhdGUoJnVp
RGVsZWdhdGUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENPTVB0cjxJV2Vi
VUlEZWxlZ2F0ZVByaXZhdGUzPiB1aURlbGVnYXRlUHJpdmF0ZTMoUXVlcnksIHVpRGVsZWdhdGUp
OworICAgIGlmICghdWlEZWxlZ2F0ZVByaXZhdGUzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgQk9PTCBzaG91bGRCZUJ1dHRvbjsKKyAgICBpZiAoRkFJTEVEKHVpRGVsZWdhdGVQ
cml2YXRlMy0+c2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbigmc2hvdWxkQmVCdXR0
b24pKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBzaG91bGRCZUJ1
dHRvbjsKK30KKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1pc3NpbmdQbHVnaW5CdXR0b25DbGlj
a2VkKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRl
PiB1aURlbGVnYXRlOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25zdCB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIG1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkKFdlYkNvcmU6OkVsZW1lbnQqKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pOwpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjI2MDUpCisr
KyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxMC0wNy0wNiAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVy
ZSBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBNaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNo
b3VsZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L1VJRGVsZWdhdGUubW06ICgtW1VJRGVsZWdhdGUgd2ViVmlldzpkaWRQcmVzc01pc3NpbmdQbHVn
aW5CdXR0b246XSk6CisgICAgICAgIExvZyB3aGVuIHRoZSBtaXNzaW5nIHBsdWdpbiBidXR0b24g
aXMgcHJlc3NlZC4KKwogMjAxMC0wNy0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIEZpeCBNaW5pQnJvd3NlciBidWlsZC4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xODMsNiArMTgzLDEyIEBAIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBzaG91
bGQKICAgICByZXR1cm4gTk87CiB9CiAKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZp
ZXcgZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uOihET01FbGVtZW50ICopZWxlbWVudAorewor
ICAgIHByaW50ZiAoIk1JU1NJTkcgUExVR0lOIEJVVFRPTiBQUkVTU0VEXG4iKTsKKyAgICByZXR1
cm4gVFJVRTsKK30KKwogLSAodm9pZClkZWFsbG9jCiB7CiAgICAgW2RyYWdnaW5nSW5mbyByZWxl
YXNlXTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0
ZS5jcHAJKHJldmlzaW9uIDYyNTYwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1VJRGVsZWdhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzQsMyArNjM0LDMwIEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6ZGUKICAgICBtX2Rlc2t0b3BOb3RpZmlj
YXRpb25zLmNvcHlSZWZUbyhyZXN1bHQpOwogICAgIHJldHVybiBTX09LOwogfQorCitIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdChJ
V2ViVmlldyogc2VuZGVyLCBJV2ViVVJMUmVxdWVzdCogcmVxdWVzdCwgSVByb3BlcnR5QmFnKiB3
aW5kb3dGZWF0dXJlcywgSVdlYlZpZXcqKiBuZXdXZWJWaWV3KQoreworICAgIHJldHVybiBFX05P
VElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6ZHJhd0Jh
Y2tncm91bmQoSVdlYlZpZXcqIHNlbmRlciwgT0xFX0hBTkRMRSBoZGMsIGNvbnN0IFJFQ1QqIGRp
cnR5UmVjdCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFVJRGVsZWdhdGU6OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdChJ
V2ViVmlldyogc2VuZGVyLCBJV2ViRnJhbWUqIGZyYW1lLCBJV2ViU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgSVdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIqIGxpc3RlbmVyKQoreworICAgIHJl
dHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0
ZTo6ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uKElET01FbGVtZW50KiBlbGVtZW50KQorewor
ICAgIHByaW50ZigiTUlTU0lORyBQTFVHSU4gQlVUVE9OIFBSRVNTRURcbiIpOworICAgIHJldHVy
biBTX09LOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OnNob3Vs
ZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24oQk9PTCogcmVzdWx0KQoreworICAgICpyZXN1
bHQgPSBUUlVFOworICAgIHJldHVybiBTX09LOworfQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL1VJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5oCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAKIGNsYXNzIERSVFVuZG9NYW5hZ2VyOwogY2xhc3MgRFJURGVza3RvcE5vdGlm
aWNhdGlvblByZXNlbnRlcjsKIAotY2xhc3MgVUlEZWxlZ2F0ZSA6IHB1YmxpYyBJV2ViVUlEZWxl
Z2F0ZTIsIElXZWJVSURlbGVnYXRlUHJpdmF0ZSB7CitjbGFzcyBVSURlbGVnYXRlIDogcHVibGlj
IElXZWJVSURlbGVnYXRlMiwgSVdlYlVJRGVsZWdhdGVQcml2YXRlMyB7CiBwdWJsaWM6CiAgICAg
VUlEZWxlZ2F0ZSgpOwogCkBAIC0zMjUsNiArMzI1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgLyog
W2luXSAqLyBIREMgaERDLAogICAgICAgICAvKiBbaW5dICovIFJFQ1QgcmVjdCk7CiAKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0
KElXZWJWaWV3KiBzZW5kZXIsIElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0LCBJUHJvcGVydHlCYWcq
IHdpbmRvd0ZlYXR1cmVzLCBJV2ViVmlldyoqIG5ld1dlYlZpZXcpOworCisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRyYXdCYWNrZ3JvdW5kKElXZWJWaWV3KiBzZW5kZXIs
IE9MRV9IQU5ETEUgaGRjLCBjb25zdCBSRUNUKiBkaXJ0eVJlY3QpOworCisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVz
dChJV2ViVmlldyogc2VuZGVyLCBJV2ViRnJhbWUqIGZyYW1lLCBJV2ViU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgSVdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIqIGxpc3RlbmVyKTsKKworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRQcmVzc01pc3NpbmdQbHVnaW5C
dXR0b24oSURPTUVsZW1lbnQqKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKEJPT0wqKTsKKwogcHJvdGVj
dGVkOgogICAgIC8vIElXZWJVSURlbGVnYXRlUHJpdmF0ZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60800</attachid>
            <date>2010-07-07 16:28:56 -0700</date>
            <delta_ts>2010-07-07 21:52:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_7-7-10-plugin.txt</filename>
            <type>text/plain</type>
            <size>24527</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjYwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDctMDYgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBNaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNo
b3VsZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisgICAgICAgIFRlc3Q6CisKKyAgICAgICAgKiBo
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5F
bGVtZW50OjpIVE1MUGx1Z0luRWxlbWVudCk6IEluaXRpYWxpemUgbV9jYXB0dXJpbmdNb3VzZUV2
ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2gpOiBJZiB3
ZSdyZSBzdGlsbCBjYXB0dXJpbmcgd2hlbiBnZXR0aW5nIGRldGFjaGVkLCBjbGVhciB0aGUgY2Fw
dHVyaW5nIG5vZGUgb24gdGhlIEV2ZW50SGFuZGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
bHVnSW5FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogQ2FsbCBoYW5kbGVNaXNzaW5nUGx1
Z2luSW5kaWNhdG9yRXZlbnQgd2hlbiB0aGUgbWlzc2luZyBwbHVnaW4gaW5kaWNhdG9yIGlzIHNo
b3dpbmcuCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OmlzQ2FwdHVyaW5nTW91c2VFdmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnNldENhcHR1cmluZ01vdXNlRXZlbnRzKToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOiAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojpz
aG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKTogQWRkZWQgZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbi4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OlJlbmRlckVtYmVkZGVk
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJl
cGxhY2VkKTogQ2FsbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeSk6IEZh
Y3RvciB0aGlzIG91dCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBwYWludFJlcGxhY2VkIGFuZCBpbiBl
dmVudElzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmV2ZW50SXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IpOiBDYWxsIGdl
dFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5IHRvIGhpdCB0ZXN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmhhbmRsZU1pc3NpbmdQbHVnaW5JbmRpY2F0b3JFdmVudCk6
IENhcHR1cmUgbW91c2UgZXZlbnRzIGFzIG5lZWRlZCBhbmQgdHJhY2sgdGhlIHByZXNzZWQgYXBw
ZWFyYW5jZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaDogKFdl
YkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQ
cmVzc2VkKToKKwogMjAxMC0wNy0wNiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5F
bGVtZW50LmNwcAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIEhUTUxQbHVnSW5FbGVt
ZW50OjpIVE1MUGx1Z0luRWxlbWVudChjb24KICAgICA6IEhUTUxGcmFtZU93bmVyRWxlbWVudCh0
YWdOYW1lLCBkb2MpCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgLCBtX05Q
T2JqZWN0KDApCisgICAgLCBtX2lzQ2FwdHVyaW5nTW91c2VFdmVudHMoZmFsc2UpCiAjZW5kaWYK
IHsKIH0KQEAgLTcwLDYgKzcxLDEzIEBAIEhUTUxQbHVnSW5FbGVtZW50Ojp+SFRNTFBsdWdJbkVs
ZW1lbnQoKQogdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCkKIHsKICAgICBtX2luc3Rh
bmNlLmNsZWFyKCk7CisKKyAgICBpZiAobV9pc0NhcHR1cmluZ01vdXNlRXZlbnRzKSB7CisgICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7Cisg
ICAgICAgIG1faXNDYXB0dXJpbmdNb3VzZUV2ZW50cyA9IGZhbHNlOworICAgIH0KKwogICAgIEhU
TUxGcmFtZU93bmVyRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKQEAgLTE0MiwxNCArMTUwLDcgQEAg
dm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogCiAgICAgUmVuZGVyT2Jq
ZWN0KiByID0gcmVuZGVyZXIoKTsKICAgICBpZiAociAmJiByLT5pc0VtYmVkZGVkT2JqZWN0KCkg
JiYgdG9SZW5kZXJFbWJlZGRlZE9iamVjdChyKS0+c2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNhdG9y
KCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50
KCktPnBhZ2UoKTsKLSAgICAgICAgaWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+bWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNr
ZWQodGhpcyk7CisgICAgICAgIHRvUmVuZGVyRW1iZWRkZWRPYmplY3QociktPmhhbmRsZU1pc3Np
bmdQbHVnaW5JbmRpY2F0b3JFdmVudChldmVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw5
IEBAIHB1YmxpYzoKICAgICBOUE9iamVjdCogZ2V0TlBPYmplY3QoKTsKICNlbmRpZgogCisgICAg
Ym9vbCBpc0NhcHR1cmluZ01vdXNlRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pc0NhcHR1cmlu
Z01vdXNlRXZlbnRzOyB9CisgICAgdm9pZCBzZXRJc0NhcHR1cmluZ01vdXNlRXZlbnRzKGJvb2wg
Y2FwdHVyaW5nKSB7IG1faXNDYXB0dXJpbmdNb3VzZUV2ZW50cyA9IGNhcHR1cmluZzsgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqKTsKIApAQCAtNzIsNiArNzUsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIE5QT2JqZWN0KiBtX05QT2JqZWN0OwogI2VuZGlm
CisgICAgYm9vbCBtX2lzQ2FwdHVyaW5nTW91c2VFdmVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRW5kIG1ldGhvZHMgdXNlZCBieSBIb3N0
V2luZG93LgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgp
IGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZE1pc3NpbmdQbHVnaW5NZXNz
YWdlQmVCdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZv
aWQgbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVudCopIGNvbnN0IHsgfQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3Vs
dCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpID0gMDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRl
ZE9iamVjdC5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNp
bmNsdWRlICJGb250U2VsZWN0b3IuaCIKQEAgLTM3LDYgKzM5LDcgQEAKICNpbmNsdWRlICJIVE1M
UGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbHVnaW5XaWRnZXQuaCIKQEAg
LTYxLDEzICs2NCwyMyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNvbnN0
IGZsb2F0IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0SGVpZ2h0ID0gMTg7CiBzdGF0aWMgY29u
c3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luID0g
NjsKIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdE9wYWNpdHkg
PSAwLjIwZjsKK3N0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudFRleHRQcmVzc2VkUm91bmRl
ZFJlY3RPcGFjaXR5ID0gMC42NWY7CiBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0
Um91bmRlZFJlY3RSYWRpdXMgPSA1Owogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50VGV4
dFRleHRPcGFjaXR5ID0gMC41NWY7CitzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0
UHJlc3NlZFRleHRPcGFjaXR5ID0gMC42NWY7CiAKK3N0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IoKQoreworICAgIHN0YXRpYyBjb25zdCBD
b2xvciBsaWdodEdyYXkoMjA1LCAyMDUsIDIwNSk7CisgICAgcmV0dXJuIGxpZ2h0R3JheTsKK30K
KyAgICAKIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpSZW5kZXJFbWJlZGRlZE9iamVjdChFbGVtZW50
KiBlbGVtZW50KQogICAgIDogUmVuZGVyUGFydChlbGVtZW50KQogICAgICwgbV9oYXNGYWxsYmFj
a0NvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Nob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcihmYWxz
ZSkKKyAgICAsIG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZChmYWxzZSkKKyAgICAs
IG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKGZhbHNlKQogewogICAgIHZp
ZXcoKS0+ZnJhbWVWaWV3KCktPnNldElzVmlzdWFsbHlOb25FbXB0eSgpOwogfQpAQCAtMzU2LDYg
KzM2OSwxNCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRTaG93c0NyYXNoCiAgICAg
bV9yZXBsYWNlbWVudFRleHQgPSBjcmFzaGVkUGx1Z2luVGV4dCgpOwogfQogCit2b2lkIFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGJvb2wg
cHJlc3NlZCkKK3sKKyAgICBpZiAobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkICE9
IHByZXNzZWQpIHsKKyAgICAgICAgbV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID0g
cHJlc3NlZDsKKyAgICAgICAgcmVwYWludCgpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJFbWJl
ZGRlZE9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQog
ewogICAgIGlmICghbV9yZXBsYWNlbWVudFRleHQuaXNOdWxsKCkpIHsKQEAgLTM3OCw4ICszOTks
MzUgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIGlmIChj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBG
bG9hdFJlY3QgcGx1Z2luUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgcGx1Z2luUmVjdC5t
b3ZlKHR4LCB0eSk7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0OworICAgIFBhdGggcGF0aDsK
KyAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKKyAgICBGb250IGZvbnQ7CisgICAg
VGV4dFJ1biBydW4oIiIpOworICAgIGZsb2F0IHRleHRXaWR0aDsKKyAgICBpZiAoIWdldFJlcGxh
Y2VtZW50VGV4dEdlb21ldHJ5KHR4LCB0eSwgY29udGVudFJlY3QsIHBhdGgsIHJlcGxhY2VtZW50
VGV4dFJlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlwKGNvbnRlbnRSZWN0KTsKKyAg
ICBjb250ZXh0LT5iZWdpblBhdGgoKTsKKyAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOyAgCisg
ICAgY29udGV4dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8g
cmVwbGFjZW1lbnRUZXh0UHJlc3NlZFJvdW5kZWRSZWN0T3BhY2l0eSA6IHJlcGxhY2VtZW50VGV4
dFJvdW5kZWRSZWN0T3BhY2l0eSk7CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG1fbWlzc2lu
Z1BsdWdpbkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJl
c3NlZENvbG9yKCkgOiBDb2xvcjo6d2hpdGUsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CisgICAg
Y29udGV4dC0+ZmlsbFBhdGgoKTsKKworICAgIGZsb2F0IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNl
bWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgp
LndpZHRoKCkgLSB0ZXh0V2lkdGgpIC8gMik7CisgICAgZmxvYXQgbGFiZWxZID0gcm91bmRmKHJl
cGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5z
aXplKCkuaGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAvIDIgKyBmb250LmFzY2VudCgpKTsKKyAg
ICBjb250ZXh0LT5zZXRBbHBoYShtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyBy
ZXBsYWNlbWVudFRleHRQcmVzc2VkVGV4dE9wYWNpdHkgOiByZXBsYWNlbWVudFRleHRUZXh0T3Bh
Y2l0eSk7CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgc3R5bGUoKS0+
Y29sb3JTcGFjZSgpKTsKKyAgICBjb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgcnVuLCBGbG9h
dFBvaW50KGxhYmVsWCwgbGFiZWxZKSk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCiti
b29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShpbnQg
dHgsIGludCB0eSwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgUGF0aCYgcGF0aCwgRmxvYXRSZWN0
JiByZXBsYWNlbWVudFRleHRSZWN0LCBGb250JiBmb250LCBUZXh0UnVuJiBydW4sIGZsb2F0JiB0
ZXh0V2lkdGgpCit7CisgICAgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIGNv
bnRlbnRSZWN0Lm1vdmUodHgsIHR5KTsKICAgICAKICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uOwogICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChD
U1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbCwgZm9udERlc2NyaXB0aW9uKTsKQEAgLTM4NywzNiAr
NDM1LDIzIEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgIEFTU0VSVChz
ZXR0aW5ncyk7CiAgICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGlu
Z3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgRm9udCBmb250KGZv
bnREZXNjcmlwdGlvbiwgMCwgMCk7CisgICAgZm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAw
LCAwKTsKICAgICBmb250LnVwZGF0ZSgwKTsKICAgICAKLSAgICBUZXh0UnVuIHJ1bihtX3JlcGxh
Y2VtZW50VGV4dC5jaGFyYWN0ZXJzKCksIG1fcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKKyAg
ICBydW4gPSBUZXh0UnVuKG1fcmVwbGFjZW1lbnRUZXh0LmNoYXJhY3RlcnMoKSwgbV9yZXBsYWNl
bWVudFRleHQubGVuZ3RoKCkpOwogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwotICAg
IGZsb2F0IHRleHRXaWR0aCA9IGZvbnQuZmxvYXRXaWR0aChydW4pOworICAgIHRleHRXaWR0aCA9
IGZvbnQuZmxvYXRXaWR0aChydW4pOwogICAgIAotICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRl
eHRSZWN0OwogICAgIHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0U2l6ZShGbG9hdFNpemUodGV4dFdp
ZHRoICsgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luICogMiwg
cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RIZWlnaHQpKTsKLSAgICByZXBsYWNlbWVudFRleHRS
ZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKHBsdWdpblJlY3Quc2l6ZSgpLndpZHRoKCkgLyAy
IC0gcmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAvIDIpICsgcGx1Z2luUmVjdC5s
b2NhdGlvbigpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChwbHVnaW5SZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIgLSByZXBsYWNlbWVudFRleHRSZWN0
LnNpemUoKS5oZWlnaHQoKSAvIDIpICsgcGx1Z2luUmVjdC5sb2NhdGlvbigpLnkoKSkpOwotICAg
Ci0gICAgUGF0aCBwYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZXBsYWNlbWVu
dFRleHRSZWN0LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMsIHJl
cGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7Ci0gICAgY29udGV4dC0+c2F2ZSgpOwot
ICAgIGNvbnRleHQtPmNsaXAocGx1Z2luUmVjdCk7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7
Ci0gICAgY29udGV4dC0+YWRkUGF0aChwYXRoKTsgIAotICAgIGNvbnRleHQtPnNldEFscGhhKHJl
cGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0T3BhY2l0eSk7Ci0gICAgY29udGV4dC0+c2V0RmlsbENv
bG9yKENvbG9yOjp3aGl0ZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKLSAgICBjb250ZXh0LT5m
aWxsUGF0aCgpOwotCi0gICAgRmxvYXRQb2ludCBsYWJlbFBvaW50KHJvdW5kZihyZXBsYWNlbWVu
dFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndp
ZHRoKCkgLSB0ZXh0V2lkdGgpIC8gMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5k
ZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueSgpKyAocmVwbGFjZW1lbnRUZXh0UmVj
dC5zaXplKCkuaGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAvIDIgKyBmb250LmFzY2VudCgpKSk7
Ci0gICAgY29udGV4dC0+c2V0QWxwaGEocmVwbGFjZW1lbnRUZXh0VGV4dE9wYWNpdHkpOwotICAg
IGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIHN0eWxlKCktPmNvbG9yU3BhY2Uo
KSk7Ci0gICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHJ1biwgbGFiZWxQb2ludCk7Ci0g
ICAgY29udGV4dC0+cmVzdG9yZSgpOworICAgIGZsb2F0IHggPSAoY29udGVudFJlY3Quc2l6ZSgp
LndpZHRoKCkgLyAyIC0gcmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAvIDIpICsg
Y29udGVudFJlY3QubG9jYXRpb24oKS54KCk7CisgICAgZmxvYXQgeSA9IChjb250ZW50UmVjdC5z
aXplKCkuaGVpZ2h0KCkgLyAyIC0gcmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkg
LyAyKSArIGNvbnRlbnRSZWN0LmxvY2F0aW9uKCkueSgpOworICAgIHJlcGxhY2VtZW50VGV4dFJl
Y3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgCisgICAgcGF0aCA9IFBhdGg6
OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRTaXplKHJl
cGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVj
dFJhZGl1cykpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0OjpsYXlvdXQoKQpAQCAtNDU1LDUgKzQ5MCw2NSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0Ojp2aWV3Q2xlYXJlZCgpCiAgICAgICAgICAgICB2aWV3LT5zZXRNYXJnaW5IZWlnaHQobWFy
Z2luaCk7CiAgICAgfQogfQorIAorYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJbk1pc3Np
bmdQbHVnaW5JbmRpY2F0b3IoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgRmxvYXRSZWN0IGNv
bnRlbnRSZWN0OworICAgIFBhdGggcGF0aDsKKyAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0
UmVjdDsKKyAgICBGb250IGZvbnQ7CisgICAgVGV4dFJ1biBydW4oIiIpOworICAgIGZsb2F0IHRl
eHRXaWR0aDsKKyAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KDAsIDAsIGNvbnRl
bnRSZWN0LCBwYXRoLCByZXBsYWNlbWVudFRleHRSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQg
PSBhYnNvbHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUp
OworICAgIHJldHVybiBwYXRoLmNvbnRhaW5zKGxvY2FsUG9pbnQpOworfQorCit2b2lkIFJlbmRl
ckVtYmVkZGVkT2JqZWN0OjpoYW5kbGVNaXNzaW5nUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQq
IGV2ZW50KQoreworICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7Cisg
ICAgICAgIGlmICghcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRNaXNzaW5nUGx1Z2lu
TWVzc2FnZUJlQnV0dG9uKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
TW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7
CisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0lu
RWxlbWVudCo+KG5vZGUoKSk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgbV9tb3VzZURvd25XYXNJbk1pc3NpbmdQbHVn
aW5JbmRpY2F0b3IgPSBpc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcihtb3VzZUV2ZW50KTsKKyAg
ICAgICAgaWYgKG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKSB7CisgICAg
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAg
ICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNO
b2RlKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldElzQ2FwdHVyaW5nTW91
c2VFdmVudHModHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRNaXNzaW5nUGx1
Z2luSW5kaWNhdG9ySXNQcmVzc2VkKHRydWUpOworICAgICAgICB9CisgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0gICAgICAgIAorICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+
KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBpZiAobV9taXNzaW5n
UGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOworICAgICAgICAgICAgICAg
IGVsZW1lbnQtPnNldElzQ2FwdHVyaW5nTW91c2VFdmVudHMoZmFsc2UpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc2V0TWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZChmYWxzZSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5k
aWNhdG9yICYmIGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpKSB7CisgICAg
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgICAg
ICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2Vk
KGVsZW1lbnQpOyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIG1fbW91c2VEb3duV2Fz
SW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yID0gZmFsc2U7CisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgIH0KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQpIHsKKyAgICAgICAgYm9vbCBzaG91bGRCZVByZXNzZWQgPSBtX21v
dXNlRG93bldhc0luTWlzc2luZ1BsdWdpbkluZGljYXRvciAmJiBpc0luTWlzc2luZ1BsdWdpbklu
ZGljYXRvcihtb3VzZUV2ZW50KTsKKyAgICAgICAgc2V0TWlzc2luZ1BsdWdpbkluZGljYXRvcklz
UHJlc3NlZChzaG91bGRCZVByZXNzZWQpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICB9Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bWJlZGRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTW91c2VFdmVudDsKKwogLy8gUmVuZGVyZXIgZm9yIGVt
YmVkcyBhbmQgb2JqZWN0cywgb2Z0ZW4sIGJ1dCBub3QgYWx3YXlzLCByZW5kZXJlZCB2aWEgcGx1
Zy1pbnMuCiAvLyBGb3IgZXhhbXBsZSwgPGVtYmVkIHNyYz0iZm9vLmh0bWwiPiBkb2VzIG5vdCBp
bnZva2UgYSBwbHVnLWluLgogY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3QgOiBwdWJsaWMgUmVu
ZGVyUGFydCB7CkBAIC00MSw2ICs0Myw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRmFsbGJh
Y2tDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYWxsYmFja0NvbnRlbnQ7IH0KIAorICAg
IHZvaWQgaGFuZGxlTWlzc2luZ1BsdWdpbkluZGljYXRvckV2ZW50KEV2ZW50Kik7CisKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdDsKICNlbmRpZgpAQCAtNTgsMTAgKzYyLDE2IEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHZp
ZXdDbGVhcmVkKCk7CisgICAgCisgICAgdm9pZCBzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQ
cmVzc2VkKGJvb2wgcHJlc3NlZCk7CisgICAgYm9vbCBpc0luTWlzc2luZ1BsdWdpbkluZGljYXRv
cihNb3VzZUV2ZW50Kik7CisgICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShpbnQg
dHgsIGludCB0eSwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgUGF0aCYsIEZsb2F0UmVjdCYgcmVw
bGFjZW1lbnRUZXh0UmVjdCwgRm9udCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAog
ICAgIFN0cmluZyBtX3JlcGxhY2VtZW50VGV4dDsKICAgICBib29sIG1faGFzRmFsbGJhY2tDb250
ZW50OwogICAgIGJvb2wgbV9zaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3I7CisgICAgYm9vbCBt
X21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQ7CisgICAgYm9vbCBtX21vdXNlRG93bldh
c0luTWlzc2luZ1BsdWdpbkluZGljYXRvcjsKIH07CiAKIGlubGluZSBSZW5kZXJFbWJlZGRlZE9i
amVjdCogdG9SZW5kZXJFbWJlZGRlZE9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCkKSW5kZXg6
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjYwMikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDctMDYgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBNaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9y
IHNob3VsZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisgICAgICAgIEltcGxlbWVudCBzaG91bGRN
aXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRNaXNzaW5nUGx1Z2luTWVz
c2FnZUJlQnV0dG9uKToKKwogMjAxMC0wNi0yMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDog
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA2
MjU2MCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldFN0YXR1c2JhclRleHQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbigpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJDb3JlOjpFbGVtZW50KikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKIApJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDYy
NTYwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUxNiw2ICs1MTYsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNj
cm9sbFJlY3RJbnRvVmlldwogCiAvLyBFbmQgaG9zdCB3aW5kb3cgbWV0aG9kcy4KIAorYm9vbCBX
ZWJDaHJvbWVDbGllbnQ6OnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24oKSBjb25z
dAoreworICAgIHJldHVybiBbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlZpZXc6ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uOildOworfQor
CiB2b2lkIFdlYkNocm9tZUNsaWVudDo6bWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKIHsKICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1dHRvbjopLCBraXQoZWxlbWVudCkp
OwpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYyNjAyKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNy0wNiAgQWRlbGUgUGV0ZXJzb24gIDxh
ZGVsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDE3MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgxNTg1NjE+IE1pc3NpbmcgcGx1Zy1pbiBp
bmRpY2F0b3Igc2hvdWxkIGhhdmUgYSBwcmVzc2VkIHN0YXRlCisKKyAgICAgICAgSW1wbGVtZW50
IHNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24uCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOiAoV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRNaXNz
aW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaDoKKwogMjAxMC0wNy0wMyAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRA
YXBwbGUuY29tPgogCiAgICAgICAgIFRoZSBtaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNob3Vs
ZCBiZSBjbGlja2FibGUKSW5kZXg6IFdlYktpdC93aW4vSW50ZXJmYWNlcy9JV2ViVUlEZWxlZ2F0
ZVByaXZhdGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vSW50ZXJmYWNlcy9JV2ViVUlE
ZWxlZ2F0ZVByaXZhdGUuaWRsCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYktpdC93aW4vSW50ZXJm
YWNlcy9JV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNCAr
MTA5LDUgQEAgaW50ZXJmYWNlIElXZWJVSURlbGVnYXRlUHJpdmF0ZTIgOiBJV2ViVQogaW50ZXJm
YWNlIElXZWJVSURlbGVnYXRlUHJpdmF0ZTMgOiBJV2ViVUlEZWxlZ2F0ZVByaXZhdGUyCiB7CiAg
ICAgSFJFU1VMVCBkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b24oW2luXSBJRE9NRWxlbWVudCop
OworICAgIEhSRVNVTFQgc2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbihbb3V0XSBC
T09MKik7CiB9CkluZGV4OiBXZWJLaXQvd2luL0ludGVyZmFjZXMvV2ViS2l0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL0ludGVyZmFjZXMvV2ViS2l0LmlkbAkocmV2aXNpb24gNjI1NjAp
CisrKyBXZWJLaXQvd2luL0ludGVyZmFjZXMvV2ViS2l0LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBjcHBfcXVvdGUoIi8qIikKSW5k
ZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJl
dmlzaW9uIDYyNTYwKQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNiArNTM1LDIzIEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWwKICAgICB1aURlbGVnYXRlLT5tb3VzZURpZE1vdmVP
dmVyRWxlbWVudChtX3dlYlZpZXcsIGVsZW1lbnQuZ2V0KCksIG1vZGlmaWVyRmxhZ3MpOwogfQog
Citib29sIFdlYkNocm9tZUNsaWVudDo6c2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRv
bigpIGNvbnN0Cit7CisgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiB1aURlbGVnYXRlOworICAg
IGlmIChGQUlMRUQobV93ZWJWaWV3LT51aURlbGVnYXRlKCZ1aURlbGVnYXRlKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGVQcml2YXRlMz4g
dWlEZWxlZ2F0ZVByaXZhdGUzKFF1ZXJ5LCB1aURlbGVnYXRlKTsKKyAgICBpZiAoIXVpRGVsZWdh
dGVQcml2YXRlMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEJPT0wgc2hvdWxk
QmVCdXR0b247CisgICAgaWYgKEZBSUxFRCh1aURlbGVnYXRlUHJpdmF0ZTMtPnNob3VsZE1pc3Np
bmdQbHVnaW5NZXNzYWdlQmVCdXR0b24oJnNob3VsZEJlQnV0dG9uKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gc2hvdWxkQmVCdXR0b247Cit9CisKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjptaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50KiBlbGVtZW50
KSBjb25zdAogewogICAgIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gdWlEZWxlZ2F0ZTsKSW5kZXg6
IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24g
NjI1NjApCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1
bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTWlzc2luZ1Bs
dWdpbk1lc3NhZ2VCZUJ1dHRvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtaXNzaW5nUGx1
Z2luQnV0dG9uQ2xpY2tlZChXZWJDb3JlOjpFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0VG9vbFRpcChjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGly
ZWN0aW9uKTsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNjA1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDctMDYgIEFkZWxlIFBl
dGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUgZm9yIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTcyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
ODE1ODU2MT4gTWlzc2luZyBwbHVnLWluIGluZGljYXRvciBzaG91bGQgaGF2ZSBhIHByZXNzZWQg
c3RhdGUKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tOiAoLVtV
SURlbGVnYXRlIHdlYlZpZXc6ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uOl0pOgorICAgICAg
ICBMb2cgd2hlbiB0aGUgbWlzc2luZyBwbHVnaW4gYnV0dG9uIGlzIHByZXNzZWQuCisKIDIwMTAt
MDctMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggTWluaUJy
b3dzZXIgYnVpbGQuCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxl
Z2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVUlE
ZWxlZ2F0ZS5tbQkocmV2aXNpb24gNjI1NjApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvVUlEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMiBAQCAt
IChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgc2hvdWxkCiAgICAgcmV0dXJuIE5POwog
fQogCistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRpZFByZXNzTWlzc2luZ1Bs
dWdpbkJ1dHRvbjooRE9NRWxlbWVudCAqKWVsZW1lbnQKK3sKKyAgICBwcmludGYgKCJNSVNTSU5H
IFBMVUdJTiBCVVRUT04gUFJFU1NFRFxuIik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIC0gKHZv
aWQpZGVhbGxvYwogewogICAgIFtkcmFnZ2luZ0luZm8gcmVsZWFzZV07CkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCShyZXZpc2lvbiA2MjU2
MCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjM0LDMgKzYzNCwzMCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFVJRGVsZWdhdGU6OmRlCiAgICAgbV9kZXNrdG9wTm90aWZpY2F0aW9ucy5jb3B5UmVmVG8ocmVz
dWx0KTsKICAgICByZXR1cm4gU19PSzsKIH0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBV
SURlbGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QoSVdlYlZpZXcqIHNlbmRlciwgSVdl
YlVSTFJlcXVlc3QqIHJlcXVlc3QsIElQcm9wZXJ0eUJhZyogd2luZG93RmVhdHVyZXMsIElXZWJW
aWV3KiogbmV3V2ViVmlldykKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmRyYXdCYWNrZ3JvdW5kKElXZWJWaWV3KiBz
ZW5kZXIsIE9MRV9IQU5ETEUgaGRjLCBjb25zdCBSRUNUKiBkaXJ0eVJlY3QpCit7CisgICAgcmV0
dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRl
OjpkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3QoSVdlYlZpZXcqIHNlbmRlciwgSVdl
YkZyYW1lKiBmcmFtZSwgSVdlYlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIElXZWJHZW9sb2NhdGlv
blBvbGljeUxpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQor
CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmRpZFByZXNzTWlzc2luZ1Bs
dWdpbkJ1dHRvbihJRE9NRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBwcmludGYoIk1JU1NJTkcg
UExVR0lOIEJVVFRPTiBQUkVTU0VEXG4iKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2Fn
ZUJlQnV0dG9uKEJPT0wqIHJlc3VsdCkKK3sKKyAgICAqcmVzdWx0ID0gVFJVRTsKKyAgICByZXR1
cm4gU19PSzsKK30KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVn
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVs
ZWdhdGUuaAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vVUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiBjbGFzcyBE
UlRVbmRvTWFuYWdlcjsKIGNsYXNzIERSVERlc2t0b3BOb3RpZmljYXRpb25QcmVzZW50ZXI7CiAK
LWNsYXNzIFVJRGVsZWdhdGUgOiBwdWJsaWMgSVdlYlVJRGVsZWdhdGUyLCBJV2ViVUlEZWxlZ2F0
ZVByaXZhdGUgeworY2xhc3MgVUlEZWxlZ2F0ZSA6IHB1YmxpYyBJV2ViVUlEZWxlZ2F0ZTIsIElX
ZWJVSURlbGVnYXRlUHJpdmF0ZTMgewogcHVibGljOgogICAgIFVJRGVsZWdhdGUoKTsKIApAQCAt
MzI1LDYgKzMyNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIC8qIFtpbl0gKi8gSERDIGhEQywKICAg
ICAgICAgLyogW2luXSAqLyBSRUNUIHJlY3QpOwogCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIGNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdChJV2ViVmlldyogc2VuZGVyLCBJ
V2ViVVJMUmVxdWVzdCogcmVxdWVzdCwgSVByb3BlcnR5QmFnKiB3aW5kb3dGZWF0dXJlcywgSVdl
YlZpZXcqKiBuZXdXZWJWaWV3KTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBkcmF3QmFja2dyb3VuZChJV2ViVmlldyogc2VuZGVyLCBPTEVfSEFORExFIGhkYywgY29u
c3QgUkVDVCogZGlydHlSZWN0KTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3QoSVdlYlZpZXcqIHNlbmRlciwg
SVdlYkZyYW1lKiBmcmFtZSwgSVdlYlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIElXZWJHZW9sb2Nh
dGlvblBvbGljeUxpc3RlbmVyKiBsaXN0ZW5lcik7CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uKElET01FbGVtZW50Kik7
CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2hvdWxkTWlzc2luZ1Bs
dWdpbk1lc3NhZ2VCZUJ1dHRvbihCT09MKik7CisKIHByb3RlY3RlZDoKICAgICAvLyBJV2ViVUlE
ZWxlZ2F0ZVByaXZhdGUKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60834</attachid>
            <date>2010-07-07 21:52:54 -0700</date>
            <delta_ts>2010-07-08 12:57:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_7-7-10-plugin-2.txt</filename>
            <type>text/plain</type>
            <size>28545</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mjc1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMDcgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBNaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNo
b3VsZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisgICAgICAgIFRlc3Q6IHBsdWdpbnMvY2xpY2tp
bmctbWlzc2luZy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUuaHRtbAorCisgICAgICAgICogaHRtbC9I
VE1MUGx1Z0luRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVu
dDo6SFRNTFBsdWdJbkVsZW1lbnQpOiBJbml0aWFsaXplIG1faXNDYXB0dXJpbmdNb3VzZUV2ZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2gpOiBJZiB3ZSdy
ZSBzdGlsbCBjYXB0dXJpbmcgd2hlbiBnZXR0aW5nIGRldGFjaGVkLCBjbGVhciB0aGUgY2FwdHVy
aW5nIG5vZGUgb24gdGhlIEV2ZW50SGFuZGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVn
SW5FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogQ2FsbCBoYW5kbGVNaXNzaW5nUGx1Z2lu
SW5kaWNhdG9yRXZlbnQgd2hlbiB0aGUgbWlzc2luZyBwbHVnaW4gaW5kaWNhdG9yIGlzIHNob3dp
bmcuCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OmlzQ2FwdHVyaW5nTW91c2VFdmVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnNldElzQ2FwdHVyaW5nTW91c2VFdmVudHMpOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnQ6OnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24pOiBBZGRlZCBkZWZhdWx0
IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFByZXNz
ZWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6UmVuZGVy
RW1iZWRkZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6
OnNldE1pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQpOiBBZGRlZC4gIENhdXNlcyBhIHJl
cGFpbnQgd2hlbiB0aGUgc3RhdGUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVt
YmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKTogQ2FsbCBnZXRSZXBsYWNlbWVudFRleHRHZW9t
ZXRyeS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNl
bWVudFRleHRHZW9tZXRyeSk6IEZhY3RvcmVkIHRoaXMgb3V0IHNvIGl0IGNhbiBiZSB1c2VkIGlu
IHBhaW50UmVwbGFjZWQgYW5kIGluIGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5NaXNzaW5nUGx1Z2luSW5kaWNh
dG9yKTogSGl0IHRlc3QgdG8gc2VlIGlmIHRoZSBtb3VzZSBldmVudCBpcyBpbiB0aGUgbWlzc2lu
ZyBwbHVnaW4gaW5kaWNhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OmhhbmRsZU1pc3NpbmdQbHVnaW5JbmRpY2F0b3JFdmVudCk6IENhcHR1cmUgbW91c2UgZXZl
bnRzIGFzIG5lZWRlZCBhbmQgdHJhY2sgdGhlIHByZXNzZWQgYXBwZWFyYW5jZS4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaDoKKwogMjAxMC0wNy0wNyAgUGF2ZWwg
UG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBZdXJ5IFNlbWlraGF0c2t5LgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MjU2MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgSFRNTFBsdWdJbkVsZW1lbnQ6OkhUTUxQbHVn
SW5FbGVtZW50KGNvbgogICAgIDogSFRNTEZyYW1lT3duZXJFbGVtZW50KHRhZ05hbWUsIGRvYykK
ICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1fTlBPYmplY3QoMCkKKyAg
ICAsIG1faXNDYXB0dXJpbmdNb3VzZUV2ZW50cyhmYWxzZSkKICNlbmRpZgogewogfQpAQCAtNzAs
NiArNzEsMTMgQEAgSFRNTFBsdWdJbkVsZW1lbnQ6On5IVE1MUGx1Z0luRWxlbWVudCgpCiB2b2lk
IEhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2goKQogewogICAgIG1faW5zdGFuY2UuY2xlYXIoKTsK
KworICAgIGlmIChtX2lzQ2FwdHVyaW5nTW91c2VFdmVudHMpIHsKKyAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKKyAgICAgICAgbV9pc0Nh
cHR1cmluZ01vdXNlRXZlbnRzID0gZmFsc2U7CisgICAgfQorCiAgICAgSFRNTEZyYW1lT3duZXJF
bGVtZW50OjpkZXRhY2goKTsKIH0KIApAQCAtMTQyLDE0ICsxNTAsNyBAQCB2b2lkIEhUTUxQbHVn
SW5FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAKICAgICBSZW5kZXJPYmplY3QqIHIgPSByZW5k
ZXJlcigpOwogICAgIGlmIChyICYmIHItPmlzRW1iZWRkZWRPYmplY3QoKSAmJiB0b1JlbmRlckVt
YmVkZGVkT2JqZWN0KHIpLT5zaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3IoKSkgewotICAgICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOwot
ICAgICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5taXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZCh0aGlzKTsKKyAg
ICAgICAgdG9SZW5kZXJFbWJlZGRlZE9iamVjdChyKS0+aGFuZGxlTWlzc2luZ1BsdWdpbkluZGlj
YXRvckV2ZW50KGV2ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmgJKHJldmlzaW9uIDYyNTYwKQorKysgV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAgcHVibGljOgog
ICAgIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOwogI2VuZGlmCiAKKyAgICBib29sIGlzQ2FwdHVy
aW5nTW91c2VFdmVudHMoKSBjb25zdCB7IHJldHVybiBtX2lzQ2FwdHVyaW5nTW91c2VFdmVudHM7
IH0KKyAgICB2b2lkIHNldElzQ2FwdHVyaW5nTW91c2VFdmVudHMoYm9vbCBjYXB0dXJpbmcpIHsg
bV9pc0NhcHR1cmluZ01vdXNlRXZlbnRzID0gY2FwdHVyaW5nOyB9CisKIHByb3RlY3RlZDoKICAg
ICBIVE1MUGx1Z0luRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCopOwogCkBAIC03Miw2ICs3NSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgTlBPYmplY3QqIG1fTlBPYmplY3Q7CiAjZW5kaWYKKyAgICBib29sIG1f
aXNDYXB0dXJpbmdNb3VzZUV2ZW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDYyNTYwKQorKysgV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBFbmQgbWV0aG9kcyB1c2VkIGJ5IEhvc3RXaW5kb3cuCiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtaXNzaW5nUGx1
Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50KikgY29uc3QgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQg
bW9kaWZpZXJGbGFncykgPSAwOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJl
ZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAK
KyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRT
ZWxlY3Rvci5oIgpAQCAtMzcsNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxQYXJhbUVsZW1lbnQu
aCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsdWdpbldpZGdldC5oIgpAQCAtNjEsMTMgKzY0LDIz
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RIZWlnaHQgPSAxODsKIHN0YXRpYyBjb25zdCBmbG9hdCByZXBs
YWNlbWVudFRleHRSb3VuZGVkUmVjdExlZnRSaWdodFRleHRNYXJnaW4gPSA2Owogc3RhdGljIGNv
bnN0IGZsb2F0IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0T3BhY2l0eSA9IDAuMjBmOworc3Rh
dGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50VGV4dFByZXNzZWRSb3VuZGVkUmVjdE9wYWNpdHkg
PSAwLjY1ZjsKIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJh
ZGl1cyA9IDU7CiBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0VGV4dE9wYWNpdHkg
PSAwLjU1ZjsKK3N0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudFRleHRQcmVzc2VkVGV4dE9w
YWNpdHkgPSAwLjY1ZjsKIAorc3RhdGljIGNvbnN0IENvbG9yJiByZXBsYWNlbWVudFRleHRSb3Vu
ZGVkUmVjdFByZXNzZWRDb2xvcigpCit7CisgICAgc3RhdGljIGNvbnN0IENvbG9yIGxpZ2h0R3Jh
eSgyMDUsIDIwNSwgMjA1KTsKKyAgICByZXR1cm4gbGlnaHRHcmF5OworfQorICAgIAogUmVuZGVy
RW1iZWRkZWRPYmplY3Q6OlJlbmRlckVtYmVkZGVkT2JqZWN0KEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgOiBSZW5kZXJQYXJ0KGVsZW1lbnQpCiAgICAgLCBtX2hhc0ZhbGxiYWNrQ29udGVudChmYWxz
ZSkKICAgICAsIG1fc2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNhdG9yKGZhbHNlKQorICAgICwgbV9t
aXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGZhbHNlKQorICAgICwgbV9tb3VzZURvd25X
YXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IoZmFsc2UpCiB7CiAgICAgdmlldygpLT5mcmFtZVZp
ZXcoKS0+c2V0SXNWaXN1YWxseU5vbkVtcHR5KCk7CiB9CkBAIC0zNTYsNiArMzY5LDE0IEBAIHZv
aWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnNldFNob3dzQ3Jhc2gKICAgICBtX3JlcGxhY2VtZW50
VGV4dCA9IGNyYXNoZWRQbHVnaW5UZXh0KCk7CiB9CiAKK3ZvaWQgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OnNldE1pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9vbCBwcmVzc2VkKQorewor
ICAgIGlmIChtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgIT0gcHJlc3NlZCkgewor
ICAgICAgICBtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPSBwcmVzc2VkOworICAg
ICAgICByZXBhaW50KCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaWYgKCFt
X3JlcGxhY2VtZW50VGV4dC5pc051bGwoKSkgewpAQCAtMzc4LDggKzM5OSwzNSBAQCB2b2lkIFJl
bmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkCiAgICAgaWYgKGNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEZsb2F0UmVjdCBwbHVn
aW5SZWN0ID0gY29udGVudEJveFJlY3QoKTsKLSAgICBwbHVnaW5SZWN0Lm1vdmUodHgsIHR5KTsK
KyAgICBGbG9hdFJlY3QgY29udGVudFJlY3Q7CisgICAgUGF0aCBwYXRoOworICAgIEZsb2F0UmVj
dCByZXBsYWNlbWVudFRleHRSZWN0OworICAgIEZvbnQgZm9udDsKKyAgICBUZXh0UnVuIHJ1bigi
Iik7CisgICAgZmxvYXQgdGV4dFdpZHRoOworICAgIGlmICghZ2V0UmVwbGFjZW1lbnRUZXh0R2Vv
bWV0cnkodHgsIHR5LCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgZm9u
dCwgcnVuLCB0ZXh0V2lkdGgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY29udGV4dC0+
c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXAoY29udGVudFJlY3QpOworICAgIGNvbnRleHQtPmJl
Z2luUGF0aCgpOworICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCk7ICAKKyAgICBjb250ZXh0LT5z
ZXRBbHBoYShtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRl
eHRQcmVzc2VkUm91bmRlZFJlY3RPcGFjaXR5IDogcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RP
cGFjaXR5KTsKKyAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IobV9taXNzaW5nUGx1Z2luSW5kaWNh
dG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IoKSA6
IENvbG9yOjp3aGl0ZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKKyAgICBjb250ZXh0LT5maWxs
UGF0aCgpOworCisgICAgZmxvYXQgbGFiZWxYID0gcm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3Qu
bG9jYXRpb24oKS54KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAtIHRl
eHRXaWR0aCkgLyAyKTsKKyAgICBmbG9hdCBsYWJlbFkgPSByb3VuZGYocmVwbGFjZW1lbnRUZXh0
UmVjdC5sb2NhdGlvbigpLnkoKSArIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQo
KSAtIGZvbnQuaGVpZ2h0KCkpIC8gMiArIGZvbnQuYXNjZW50KCkpOworICAgIGNvbnRleHQtPnNl
dEFscGhhKG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2VtZW50VGV4
dFByZXNzZWRUZXh0T3BhY2l0eSA6IHJlcGxhY2VtZW50VGV4dFRleHRPcGFjaXR5KTsKKyAgICBj
b250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkp
OworICAgIGNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQobGFiZWxY
LCBsYWJlbFkpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK2Jvb2wgUmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGludCB0eCwgaW50IHR5LCBG
bG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiBwYXRoLCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50
VGV4dFJlY3QsIEZvbnQmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkKK3sK
KyAgICBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CisgICAgY29udGVudFJlY3QubW92
ZSh0eCwgdHkpOwogICAgIAogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAg
ICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0
U21hbGxDb250cm9sLCBmb250RGVzY3JpcHRpb24pOwpAQCAtMzg3LDM2ICs0MzUsMjMgQEAgdm9p
ZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgQVNTRVJUKHNldHRpbmdzKTsKICAg
ICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRl
cmluZ01vZGUoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShmb250RGVz
Y3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBGb250IGZvbnQoZm9udERlc2NyaXB0aW9u
LCAwLCAwKTsKKyAgICBmb250ID0gRm9udChmb250RGVzY3JpcHRpb24sIDAsIDApOwogICAgIGZv
bnQudXBkYXRlKDApOwogICAgIAotICAgIFRleHRSdW4gcnVuKG1fcmVwbGFjZW1lbnRUZXh0LmNo
YXJhY3RlcnMoKSwgbV9yZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOworICAgIHJ1biA9IFRleHRS
dW4obV9yZXBsYWNlbWVudFRleHQuY2hhcmFjdGVycygpLCBtX3JlcGxhY2VtZW50VGV4dC5sZW5n
dGgoKSk7CiAgICAgcnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7Ci0gICAgZmxvYXQgdGV4dFdp
ZHRoID0gZm9udC5mbG9hdFdpZHRoKHJ1bik7CisgICAgdGV4dFdpZHRoID0gZm9udC5mbG9hdFdp
ZHRoKHJ1bik7CiAgICAgCi0gICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAg
cmVwbGFjZW1lbnRUZXh0UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSh0ZXh0V2lkdGggKyByZXBsYWNl
bWVudFRleHRSb3VuZGVkUmVjdExlZnRSaWdodFRleHRNYXJnaW4gKiAyLCByZXBsYWNlbWVudFRl
eHRSb3VuZGVkUmVjdEhlaWdodCkpOwotICAgIHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0TG9jYXRp
b24oRmxvYXRQb2ludCgocGx1Z2luUmVjdC5zaXplKCkud2lkdGgoKSAvIDIgLSByZXBsYWNlbWVu
dFRleHRSZWN0LnNpemUoKS53aWR0aCgpIC8gMikgKyBwbHVnaW5SZWN0LmxvY2F0aW9uKCkueCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBsdWdpblJl
Y3Quc2l6ZSgpLmhlaWdodCgpIC8gMiAtIHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdo
dCgpIC8gMikgKyBwbHVnaW5SZWN0LmxvY2F0aW9uKCkueSgpKSk7Ci0gICAKLSAgICBQYXRoIHBh
dGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlcGxhY2VtZW50VGV4dFJlY3QsIEZs
b2F0U2l6ZShyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cywgcmVwbGFjZW1lbnRUZXh0
Um91bmRlZFJlY3RSYWRpdXMpKTsKLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgY29udGV4dC0+
Y2xpcChwbHVnaW5SZWN0KTsKLSAgICBjb250ZXh0LT5iZWdpblBhdGgoKTsKLSAgICBjb250ZXh0
LT5hZGRQYXRoKHBhdGgpOyAgCi0gICAgY29udGV4dC0+c2V0QWxwaGEocmVwbGFjZW1lbnRUZXh0
Um91bmRlZFJlY3RPcGFjaXR5KTsKLSAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6Ondo
aXRlLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwotICAgIGNvbnRleHQtPmZpbGxQYXRoKCk7Ci0K
LSAgICBGbG9hdFBvaW50IGxhYmVsUG9pbnQocm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9j
YXRpb24oKS54KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAtIHRleHRX
aWR0aCkgLyAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRmKHJlcGxhY2VtZW50
VGV4dFJlY3QubG9jYXRpb24oKS55KCkrIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWln
aHQoKSAtIGZvbnQuaGVpZ2h0KCkpIC8gMiArIGZvbnQuYXNjZW50KCkpKTsKLSAgICBjb250ZXh0
LT5zZXRBbHBoYShyZXBsYWNlbWVudFRleHRUZXh0T3BhY2l0eSk7Ci0gICAgY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjpibGFjaywgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKLSAgICBjb250
ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgcnVuLCBsYWJlbFBvaW50KTsKLSAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7CisgICAgZmxvYXQgeCA9IChjb250ZW50UmVjdC5zaXplKCkud2lkdGgoKSAvIDIg
LSByZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS53aWR0aCgpIC8gMikgKyBjb250ZW50UmVjdC5s
b2NhdGlvbigpLngoKTsKKyAgICBmbG9hdCB5ID0gKGNvbnRlbnRSZWN0LnNpemUoKS5oZWlnaHQo
KSAvIDIgLSByZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIpICsgY29udGVu
dFJlY3QubG9jYXRpb24oKS55KCk7CisgICAgcmVwbGFjZW1lbnRUZXh0UmVjdC5zZXRMb2NhdGlv
bihGbG9hdFBvaW50KHgsIHkpKTsKKyAgICAKKyAgICBwYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRl
ZFJlY3RhbmdsZShyZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0
Um91bmRlZFJlY3RSYWRpdXMsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgp
CkBAIC00NTUsNSArNDkwLDY1IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnZpZXdDbGVh
cmVkKCkKICAgICAgICAgICAgIHZpZXctPnNldE1hcmdpbkhlaWdodChtYXJnaW5oKTsKICAgICB9
CiB9CisgCitib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luTWlzc2luZ1BsdWdpbkluZGlj
YXRvcihNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBGbG9hdFJlY3QgY29udGVudFJlY3Q7Cisg
ICAgUGF0aCBwYXRoOworICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0OworICAgIEZv
bnQgZm9udDsKKyAgICBUZXh0UnVuIHJ1bigiIik7CisgICAgZmxvYXQgdGV4dFdpZHRoOworICAg
IGlmICghZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoMCwgMCwgY29udGVudFJlY3QsIHBhdGgs
IHJlcGxhY2VtZW50VGV4dFJlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGFic29sdXRlVG9M
b2NhbChldmVudC0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7CisgICAgcmV0dXJu
IHBhdGguY29udGFpbnMobG9jYWxQb2ludCk7Cit9CisKK3ZvaWQgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OmhhbmRsZU1pc3NpbmdQbHVnaW5JbmRpY2F0b3JFdmVudChFdmVudCogZXZlbnQpCit7Cisg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgaWYgKCFw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0
b24oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFldmVudC0+
aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBNb3VzZUV2ZW50KiBt
b3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKKyAgICBIVE1MUGx1
Z0luRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZl
bnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgeworICAgICAgICBtX21vdXNlRG93bldhc0luTWlzc2luZ1BsdWdpbkluZGljYXRvciA9
IGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpOworICAgICAgICBpZiAobV9t
b3VzZURvd25XYXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IpIHsKKyAgICAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoZWxlbWVudCk7
CisgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0SXNDYXB0dXJpbmdNb3VzZUV2ZW50cyh0cnVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldE1pc3NpbmdQbHVnaW5JbmRpY2F0b3JJ
c1ByZXNzZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgfSAgICAgICAgCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNldXBFdmVudCAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGlmIChtX21pc3NpbmdQbHVnaW5JbmRpY2F0
b3JJc1ByZXNzZWQpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgp
LT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRD
YXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7CisgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0
SXNDYXB0dXJpbmdNb3VzZUV2ZW50cyhmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGZhbHNlKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobV9tb3VzZURvd25XYXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IgJiYgaXNJ
bk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IobW91c2VFdmVudCkpIHsKKyAgICAgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICAgICAgICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+bWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQoZWxlbWVudCk7ICAg
ICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgbV9tb3VzZURvd25XYXNJbk1pc3NpbmdQbHVn
aW5JbmRpY2F0b3IgPSBmYWxzZTsKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgfQorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVF
dmVudCkgeworICAgICAgICBib29sIHNob3VsZEJlUHJlc3NlZCA9IG1fbW91c2VEb3duV2FzSW5N
aXNzaW5nUGx1Z2luSW5kaWNhdG9yICYmIGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKG1vdXNl
RXZlbnQpOworICAgICAgICBzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKHNob3Vs
ZEJlUHJlc3NlZCk7CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0K
K30KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCShy
ZXZpc2lvbiA2MjU2MCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBNb3VzZUV2ZW50OworCiAvLyBSZW5kZXJlciBmb3IgZW1iZWRzIGFuZCBvYmpl
Y3RzLCBvZnRlbiwgYnV0IG5vdCBhbHdheXMsIHJlbmRlcmVkIHZpYSBwbHVnLWlucy4KIC8vIEZv
ciBleGFtcGxlLCA8ZW1iZWQgc3JjPSJmb28uaHRtbCI+IGRvZXMgbm90IGludm9rZSBhIHBsdWct
aW4uCiBjbGFzcyBSZW5kZXJFbWJlZGRlZE9iamVjdCA6IHB1YmxpYyBSZW5kZXJQYXJ0IHsKQEAg
LTQxLDYgKzQzLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNGYWxsYmFja0NvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBtX2hhc0ZhbGxiYWNrQ29udGVudDsgfQogCisgICAgdm9pZCBoYW5kbGVN
aXNzaW5nUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpIGNvbnN0OwogI2VuZGlmCkBAIC01OCwxMCArNjIsMTYgQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlld0NsZWFyZWQoKTsK
KyAgICAKKyAgICB2b2lkIHNldE1pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9vbCBw
cmVzc2VkKTsKKyAgICBib29sIGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZlbnQq
KTsKKyAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGludCB0eCwgaW50IHR5LCBG
bG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiwgRmxvYXRSZWN0JiByZXBsYWNlbWVudFRleHRS
ZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0V2lkdGgpOwogCiAgICAgU3RyaW5nIG1f
cmVwbGFjZW1lbnRUZXh0OwogICAgIGJvb2wgbV9oYXNGYWxsYmFja0NvbnRlbnQ7CiAgICAgYm9v
bCBtX3Nob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcjsKKyAgICBib29sIG1fbWlzc2luZ1BsdWdp
bkluZGljYXRvcklzUHJlc3NlZDsKKyAgICBib29sIG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1
Z2luSW5kaWNhdG9yOwogfTsKIAogaW5saW5lIFJlbmRlckVtYmVkZGVkT2JqZWN0KiB0b1JlbmRl
ckVtYmVkZGVkT2JqZWN0KFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYy
NzU1KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxMC0wNy0wNyAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE3MjEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzgxNTg1NjE+IE1pc3NpbmcgcGx1Zy1pbiBpbmRpY2F0b3Igc2hvdWxkIGhhdmUg
YSBwcmVzc2VkIHN0YXRlCisKKyAgICAgICAgSW1wbGVtZW50IHNob3VsZE1pc3NpbmdQbHVnaW5N
ZXNzYWdlQmVCdXR0b24uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAg
ICAgIChXZWJDaHJvbWVDbGllbnQ6OnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24p
OgorCiAyMDEwLTA3LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2
ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclRleHQoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVE
aWRDaGFuZ2UoKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTWlzc2luZ1BsdWdp
bk1lc3NhZ2VCZUJ1dHRvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtaXNzaW5nUGx1Z2lu
QnV0dG9uQ2xpY2tlZChXZWJDb3JlOjpFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1
bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKIApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDYyNTYwKQorKysgV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxNiw2
ICs1MTYsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbFJlY3RJbnRvVmlldwogCiAv
LyBFbmQgaG9zdCB3aW5kb3cgbWV0aG9kcy4KIAorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3Vs
ZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24oKSBjb25zdAoreworICAgIHJldHVybiBbW21f
d2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6
ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uOildOworfQorCiB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6bWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsK
ICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZFByZXNz
TWlzc2luZ1BsdWdpbkJ1dHRvbjopLCBraXQoZWxlbWVudCkpOwpJbmRleDogV2ViS2l0L3dpbi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDYy
NzU1KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OCBAQAorMjAxMC0wNy0wNyAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE3MjEKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzgxNTg1NjE+IE1pc3NpbmcgcGx1Zy1pbiBpbmRpY2F0b3Igc2hvdWxkIGhhdmUg
YSBwcmVzc2VkIHN0YXRlCisKKyAgICAgICAgSW1wbGVtZW50IHNob3VsZE1pc3NpbmdQbHVnaW5N
ZXNzYWdlQmVCdXR0b24uCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlUHJp
dmF0ZS5pZGw6CisgICAgICAgICogSW50ZXJmYWNlcy9XZWJLaXQuaWRsOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGll
bnQ6OnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24pOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDEwLTA3LTA3ICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJh
c2VyLgpJbmRleDogV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlUHJpdmF0ZS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJVSURlbGVnYXRlUHJp
dmF0ZS5pZGwJKHJldmlzaW9uIDYyNTYwKQorKysgV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJV
SURlbGVnYXRlUHJpdmF0ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw0ICsxMDksNSBAQCBp
bnRlcmZhY2UgSVdlYlVJRGVsZWdhdGVQcml2YXRlMiA6IElXZWJVCiBpbnRlcmZhY2UgSVdlYlVJ
RGVsZWdhdGVQcml2YXRlMyA6IElXZWJVSURlbGVnYXRlUHJpdmF0ZTIKIHsKICAgICBIUkVTVUxU
IGRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1dHRvbihbaW5dIElET01FbGVtZW50Kik7CisgICAgSFJF
U1VMVCBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKFtvdXRdIEJPT0wqKTsKIH0K
SW5kZXg6IFdlYktpdC93aW4vSW50ZXJmYWNlcy9XZWJLaXQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vSW50ZXJmYWNlcy9XZWJLaXQuaWRsCShyZXZpc2lvbiA2MjU2MCkKKysrIFdlYktp
dC93aW4vSW50ZXJmYWNlcy9XZWJLaXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3
IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKIGNwcF9xdW90ZSgiLyoiKQpJbmRleDogV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNjI1
NjApCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzNSw2ICs1MzUsMjMgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1v
dXNlRGlkTW92ZU92ZXJFbAogICAgIHVpRGVsZWdhdGUtPm1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KG1fd2ViVmlldywgZWxlbWVudC5nZXQoKSwgbW9kaWZpZXJGbGFncyk7CiB9CiAKK2Jvb2wgV2Vi
Q2hyb21lQ2xpZW50OjpzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKCkgY29uc3QK
K3sKKyAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IHVpRGVsZWdhdGU7CisgICAgaWYgKEZBSUxF
RChtX3dlYlZpZXctPnVpRGVsZWdhdGUoJnVpRGVsZWdhdGUpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZVByaXZhdGUzPiB1aURlbGVnYXRl
UHJpdmF0ZTMoUXVlcnksIHVpRGVsZWdhdGUpOworICAgIGlmICghdWlEZWxlZ2F0ZVByaXZhdGUz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQk9PTCBzaG91bGRCZUJ1dHRvbjsK
KyAgICBpZiAoRkFJTEVEKHVpRGVsZWdhdGVQcml2YXRlMy0+c2hvdWxkTWlzc2luZ1BsdWdpbk1l
c3NhZ2VCZUJ1dHRvbigmc2hvdWxkQmVCdXR0b24pKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBzaG91bGRCZUJ1dHRvbjsKK30KKwogdm9pZCBXZWJDaHJvbWVDbGll
bnQ6Om1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7
CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiB1aURlbGVnYXRlOwpJbmRleDogV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA2MjU2MCkKKysr
IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
YmFyc01vZGVEaWRDaGFuZ2UoKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1v
ZGlmaWVyRmxhZ3MpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2Fn
ZUJlQnV0dG9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG1pc3NpbmdQbHVnaW5CdXR0b25D
bGlja2VkKFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRU
b29sVGlwKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pOwpJ
bmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gNjI3NTQpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0wNy0wNyAgQWRlbGUgUGV0ZXJzb24gIDxh
ZGVsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZSBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQxNzIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBN
aXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNob3VsZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisg
ICAgICAgIExvZyB3aGVuIHRoZSBtaXNzaW5nIHBsdWdpbiBidXR0b24gaXMgcHJlc3NlZC4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tOgorICAgICAgICAoLVtV
SURlbGVnYXRlIHdlYlZpZXc6ZGlkUHJlc3NNaXNzaW5nUGx1Z2luQnV0dG9uOl0pOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcDoKKyAgICAgICAgKFVJRGVsZWdh
dGU6OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdCk6CisgICAgICAgIChVSURlbGVnYXRlOjpkcmF3
QmFja2dyb3VuZCk6CisgICAgICAgIChVSURlbGVnYXRlOjpkZWNpZGVQb2xpY3lGb3JHZW9sb2Nh
dGlvblJlcXVlc3QpOgorICAgICAgICAoVUlEZWxlZ2F0ZTo6ZGlkUHJlc3NNaXNzaW5nUGx1Z2lu
QnV0dG9uKToKKyAgICAgICAgKFVJRGVsZWdhdGU6OnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdl
QmVCdXR0b24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmg6CisK
IDIwMTAtMDctMDcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDb21tZW50IG91dCBhIHBhcnQgb2YgVGVzdE5ldHNjYXBlUGx1Z2luIHRoYXQgY2F1c2Vk
IHRlc3RzwqB0byBmYWlsIG9uIFRpZ2VyIGFuZCBMZW9wYXJkLgpJbmRleDogV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHJldmlzaW9uIDYyNTYwKQorKysg
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE4Myw2ICsxODMsMTIgQEAgLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVy
IHNob3VsZAogICAgIHJldHVybiBOTzsKIH0KIAorLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICop
d2ViVmlldyBkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b246KERPTUVsZW1lbnQgKillbGVtZW50
Cit7CisgICAgcHJpbnRmICgiTUlTU0lORyBQTFVHSU4gQlVUVE9OIFBSRVNTRURcbiIpOworICAg
IHJldHVybiBUUlVFOworfQorCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBbZHJhZ2dpbmdJbmZv
IHJlbGVhc2VdOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURl
bGVnYXRlLmNwcAkocmV2aXNpb24gNjI1NjApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVUlEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNCwzICs2MzQsMzAgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkZQogICAgIG1fZGVza3RvcE5v
dGlmaWNhdGlvbnMuY29weVJlZlRvKHJlc3VsdCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CisKK0hS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6Y3JlYXRlV2ViVmlld1dpdGhSZXF1
ZXN0KElXZWJWaWV3KiBzZW5kZXIsIElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0LCBJUHJvcGVydHlC
YWcqIHdpbmRvd0ZlYXR1cmVzLCBJV2ViVmlldyoqIG5ld1dlYlZpZXcpCit7CisgICAgcmV0dXJu
IEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpk
cmF3QmFja2dyb3VuZChJV2ViVmlldyogc2VuZGVyLCBPTEVfSEFORExFIGhkYywgY29uc3QgUkVD
VCogZGlydHlSZWN0KQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1
ZXN0KElXZWJWaWV3KiBzZW5kZXIsIElXZWJGcmFtZSogZnJhbWUsIElXZWJTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBJV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lciogbGlzdGVuZXIpCit7Cisg
ICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBVSURl
bGVnYXRlOjpkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b24oSURPTUVsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgcHJpbnRmKCJNSVNTSU5HIFBMVUdJTiBCVVRUT04gUFJFU1NFRFxuIik7CisgICAg
cmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVUlEZWxlZ2F0ZTo6
c2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbihCT09MKiByZXN1bHQpCit7CisgICAg
KnJlc3VsdCA9IFRSVUU7CisgICAgcmV0dXJuIFNfT0s7Cit9CkluZGV4OiBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmgJKHJldmlzaW9uIDYyNTYwKQorKysgV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQAogY2xhc3MgRFJUVW5kb01hbmFnZXI7CiBjbGFzcyBEUlREZXNrdG9w
Tm90aWZpY2F0aW9uUHJlc2VudGVyOwogCi1jbGFzcyBVSURlbGVnYXRlIDogcHVibGljIElXZWJV
SURlbGVnYXRlMiwgSVdlYlVJRGVsZWdhdGVQcml2YXRlIHsKK2NsYXNzIFVJRGVsZWdhdGUgOiBw
dWJsaWMgSVdlYlVJRGVsZWdhdGUyLCBJV2ViVUlEZWxlZ2F0ZVByaXZhdGUzIHsKIHB1YmxpYzoK
ICAgICBVSURlbGVnYXRlKCk7CiAKQEAgLTMyNSw2ICszMjUsMTYgQEAgcHVibGljOgogICAgICAg
ICAvKiBbaW5dICovIEhEQyBoREMsCiAgICAgICAgIC8qIFtpbl0gKi8gUkVDVCByZWN0KTsKIAor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjcmVhdGVXZWJWaWV3V2l0aFJl
cXVlc3QoSVdlYlZpZXcqIHNlbmRlciwgSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsIElQcm9wZXJ0
eUJhZyogd2luZG93RmVhdHVyZXMsIElXZWJWaWV3KiogbmV3V2ViVmlldyk7CisKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZHJhd0JhY2tncm91bmQoSVdlYlZpZXcqIHNl
bmRlciwgT0xFX0hBTkRMRSBoZGMsIGNvbnN0IFJFQ1QqIGRpcnR5UmVjdCk7CisKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25S
ZXF1ZXN0KElXZWJWaWV3KiBzZW5kZXIsIElXZWJGcmFtZSogZnJhbWUsIElXZWJTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBJV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lciogbGlzdGVuZXIpOwor
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFByZXNzTWlzc2luZ1Bs
dWdpbkJ1dHRvbihJRE9NRWxlbWVudCopOworCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24oQk9PTCopOworCiBw
cm90ZWN0ZWQ6CiAgICAgLy8gSVdlYlVJRGVsZWdhdGVQcml2YXRlCiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDYyNzU0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMDctMDcgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Qg
Zm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTcyMQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vODE1ODU2MT4gTWlzc2luZyBwbHVnLWluIGluZGljYXRvciBzaG91
bGQgaGF2ZSBhIHByZXNzZWQgc3RhdGUKKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVk
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogcGx1Z2lucy9jbGlj
a2luZy1taXNzaW5nLXBsdWdpbi1maXJlcy1kZWxlZ2F0ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsdWdpbnMvY2xpY2tpbmctbWlzc2luZy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUu
aHRtbDogQWRkZWQuCisKIDIwMTAtMDctMDcgIE5pY29sYXMgV2ViZXIgIDx0aGFraXNAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiA2MjU2MCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAyLDYgKzM0MDIsOSBAQCBw
bHVnaW5zL21vdXNlLWV2ZW50cy1maXhlZHBvcy5odG1sCiBwbHVnaW5zL2tleWJvYXJkLWV2ZW50
cy5odG1sCiBwbHVnaW5zL2dldHVybG5vdGlmeS1kdXJpbmctZG9jdW1lbnQtdGVhcmRvd24uaHRt
bAogCisjIFRoaXMgdGVzdCBpcyBmb3IgY2xpZW50cyB0aGF0IGNob29zZSB0byBtYWtlIHRoZSBt
aXNzaW5nIHBsdWdpbiBpbmRpY2F0b3IgYSBidXR0b24KK3BsdWdpbnMvY2xpY2tpbmctbWlzc2lu
Zy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUuaHRtbAorCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMDU2MQogcGx1Z2lucy9wcml2YXRlLWJyb3dzaW5nLW1vZGUuaHRt
bAogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDYyNTYwKQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYs
OSBAQCBodHRwL3Rlc3RzL3dlYmFyY2hpdmUKIHdlYmFyY2hpdmUKIHN2Zy93ZWJhcmNoaXZlCiAK
KyMgVGhpcyB0ZXN0IGlzIGZvciBjbGllbnRzIHRoYXQgY2hvb3NlIHRvIG1ha2UgdGhlIG1pc3Np
bmcgcGx1Z2luIGluZGljYXRvciBhIGJ1dHRvbgorcGx1Z2lucy9jbGlja2luZy1taXNzaW5nLXBs
dWdpbi1maXJlcy1kZWxlZ2F0ZS5odG1sCisKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMKICMgICAg
ICAgRmVhdHVyZSBub3Qgc3VwcG9ydGVkLi4uIHlldAogIyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwpJ
bmRleDogTGF5b3V0VGVzdHMvcGx1Z2lucy9jbGlja2luZy1taXNzaW5nLXBsdWdpbi1maXJlcy1k
ZWxlZ2F0ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGx1Z2lucy9j
bGlja2luZy1taXNzaW5nLXBsdWdpbi1maXJlcy1kZWxlZ2F0ZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbHVnaW5zL2NsaWNraW5nLW1pc3NpbmctcGx1Z2luLWZp
cmVzLWRlbGVnYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitN
SVNTSU5HIFBMVUdJTiBCVVRUT04gUFJFU1NFRAorCitUaGlzIHRlc3QgY2hlY2tzIGlmIHRoZSBt
aXNzaW5nIHBsdWctaW4gYnV0dG9uIGNhbiBiZSBjbGlja2VkLiBUaGlzIGlzIGEgdGVzdCBmb3Ig
QnVnIDQxNzIxLgpJbmRleDogTGF5b3V0VGVzdHMvcGx1Z2lucy9jbGlja2luZy1taXNzaW5nLXBs
dWdpbi1maXJlcy1kZWxlZ2F0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsdWdp
bnMvY2xpY2tpbmctbWlzc2luZy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsdWdpbnMvY2xpY2tpbmctbWlzc2luZy1wbHVnaW4tZmlyZXMt
ZGVsZWdhdGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorPGh0bWw+Cis8Ym9k
eT4KKzxlbWJlZCBuYW1lPSJwbGciIHR5cGU9ImFwcGxpY2F0aW9uL3gtbm9uLWV4aXN0ZW50IiB3
aWR0aD0yMDAgaGVpZ2h0PTIwMD48L2VtYmVkPgorPHA+VGhpcyB0ZXN0IGNoZWNrcyBpZiB0aGUg
bWlzc2luZyBwbHVnLWluIGJ1dHRvbiBjYW4gYmUgY2xpY2tlZC4gVGhpcyBpcyBhIHRlc3QgZm9y
IDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTcyMSI+
QnVnIDQxNzIxPC9hPi48L3A+Cis8c2NyaXB0PgorCisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoIlRoaXMgdGVzdCBkb2VzIG5v
dCB3b3JrIGluIG1hbnVhbCBtb2RlLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1v
dmVUbygwLDApOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDUsIDEwNSk7Cisg
ICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3Vz
ZVVwKCk7CisgICAgfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60936</attachid>
            <date>2010-07-08 12:57:47 -0700</date>
            <delta_ts>2010-07-08 14:02:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_7-8-10-plugins-open.txt</filename>
            <type>text/plain</type>
            <size>27344</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjgxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDctMDggIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBNaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNo
b3VsZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisgICAgICAgIFRlc3Q6IHBsdWdpbnMvY2xpY2tp
bmctbWlzc2luZy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUuaHRtbAorCisgICAgICAgICogaHRtbC9I
VE1MUGx1Z0luRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVu
dDo6SFRNTFBsdWdJbkVsZW1lbnQpOiBJbml0aWFsaXplIG1faXNDYXB0dXJpbmdNb3VzZUV2ZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2gpOiBJZiB3ZSdy
ZSBzdGlsbCBjYXB0dXJpbmcgd2hlbiBnZXR0aW5nIGRldGFjaGVkLCBjbGVhciB0aGUgY2FwdHVy
aW5nIG5vZGUgb24gdGhlIEV2ZW50SGFuZGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVn
SW5FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogQ2FsbCBoYW5kbGVNaXNzaW5nUGx1Z2lu
SW5kaWNhdG9yRXZlbnQgd2hlbiB0aGUgbWlzc2luZyBwbHVnaW4gaW5kaWNhdG9yIGlzIHNob3dp
bmcuCisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OmlzQ2FwdHVyaW5nTW91c2VFdmVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6OnNldElzQ2FwdHVyaW5nTW91c2VFdmVudHMpOgor
ICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnQ6OnNob3VsZE1pc3NpbmdQbHVnaW5NZXNzYWdlQmVCdXR0b24pOiBBZGRlZCBkZWZhdWx0
IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldyk6IENoZWNrIHRoYXQgbV9pbnN0
YW5jZSBoYXMgYmVlbiBzZXQgYmVmb3JlIHJlbW92aW5nIGl0IGZyb20gdGhlIGluc3RhbmNlIG1h
cC4gIAorICAgICAgICAgVGhpcyBwcmV2ZW50cyBhIGNyYXNoIEkgc2F3IGluIERSVCB3aGVuIHBs
dWdpbnMgYXJlbid0IGluc3RhbGxlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OlBs
dWdpblZpZXcpOiBJbml0aWFsaXplIG1faW5zdGFuY2UuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VtZW50VGV4
dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpSZW5kZXJFbWJlZGRlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbWJlZGRlZE9iamVjdDo6c2V0TWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZCk6IEFk
ZGVkLiAgQ2F1c2VzIGEgcmVwYWludCB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2VzLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOiBDYWxsIGdldFJl
cGxhY2VtZW50VGV4dEdlb21ldHJ5LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRP
YmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KTogRmFjdG9yZWQgdGhpcyBvdXQgc28g
aXQgY2FuIGJlIHVzZWQgaW4gcGFpbnRSZXBsYWNlZCBhbmQgaW4gaXNJbk1pc3NpbmdQbHVnaW5J
bmRpY2F0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJbk1p
c3NpbmdQbHVnaW5JbmRpY2F0b3IpOiBIaXQgdGVzdCB0byBzZWUgaWYgdGhlIG1vdXNlIGV2ZW50
IGlzIGluIHRoZSBtaXNzaW5nIHBsdWdpbiBpbmRpY2F0b3IuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6aGFuZGxlTWlzc2luZ1BsdWdpbkluZGljYXRvckV2ZW50KTog
Q2FwdHVyZSBtb3VzZSBldmVudHMgYXMgbmVlZGVkIGFuZCB0cmFjayB0aGUgcHJlc3NlZCBhcHBl
YXJhbmNlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oOgorCiAy
MDEwLTA3LTA3ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDYyNjA1KQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBIVE1MUGx1Z0luRWxlbWVudDo6SFRNTFBs
dWdJbkVsZW1lbnQoY29uCiAgICAgOiBIVE1MRnJhbWVPd25lckVsZW1lbnQodGFnTmFtZSwgZG9j
KQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgICwgbV9OUE9iamVjdCgwKQor
ICAgICwgbV9pc0NhcHR1cmluZ01vdXNlRXZlbnRzKGZhbHNlKQogI2VuZGlmCiB7CiB9CkBAIC03
MCw2ICs3MSwxMyBAQCBIVE1MUGx1Z0luRWxlbWVudDo6fkhUTUxQbHVnSW5FbGVtZW50KCkKIHZv
aWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpCiB7CiAgICAgbV9pbnN0YW5jZS5jbGVhcigp
OworCisgICAgaWYgKG1faXNDYXB0dXJpbmdNb3VzZUV2ZW50cykgeworICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOworICAgICAgICBtX2lz
Q2FwdHVyaW5nTW91c2VFdmVudHMgPSBmYWxzZTsKKyAgICB9CisKICAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6OmRldGFjaCgpOwogfQogCkBAIC0xNDIsMTQgKzE1MCw3IEBAIHZvaWQgSFRNTFBs
dWdJbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmQKIAogICAgIFJlbmRlck9iamVjdCogciA9IHJl
bmRlcmVyKCk7CiAgICAgaWYgKHIgJiYgci0+aXNFbWJlZGRlZE9iamVjdCgpICYmIHRvUmVuZGVy
RW1iZWRkZWRPYmplY3QociktPnNob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcigpKSB7Ci0gICAg
ICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7
Ci0gICAgICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBwYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPm1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkKHRoaXMpOwor
ICAgICAgICB0b1JlbmRlckVtYmVkZGVkT2JqZWN0KHIpLT5oYW5kbGVNaXNzaW5nUGx1Z2luSW5k
aWNhdG9yRXZlbnQoZXZlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuaAkocmV2aXNpb24gNjI2MDUpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFBsdWdJbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOSBAQCBwdWJsaWM6
CiAgICAgTlBPYmplY3QqIGdldE5QT2JqZWN0KCk7CiAjZW5kaWYKIAorICAgIGJvb2wgaXNDYXB0
dXJpbmdNb3VzZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1faXNDYXB0dXJpbmdNb3VzZUV2ZW50
czsgfQorICAgIHZvaWQgc2V0SXNDYXB0dXJpbmdNb3VzZUV2ZW50cyhib29sIGNhcHR1cmluZykg
eyBtX2lzQ2FwdHVyaW5nTW91c2VFdmVudHMgPSBjYXB0dXJpbmc7IH0KKwogcHJvdGVjdGVkOgog
ICAgIEhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50Kik7CiAKQEAgLTcyLDYgKzc1LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKICAgICBOUE9iamVjdCogbV9OUE9iamVjdDsKICNlbmRpZgorICAgIGJvb2wg
bV9pc0NhcHR1cmluZ01vdXNlRXZlbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDYyNjA1KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDkgQEAgUGx1Z2luVmlldzo6
flBsdWdpblZpZXcoKQogCiAgICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUo
KSk7CiAKLSAgICBpbnN0YW5jZU1hcCgpLnJlbW92ZShtX2luc3RhbmNlKTsKKyAgICAvLyBJZiB0
aGUgcGx1Zy1pbiBjYW4ndCBiZSBmb3VuZCB0aGVuIG1faW5zdGFuY2UgaXMgMAorICAgIGlmICht
X2luc3RhbmNlKQorICAgICAgICBpbnN0YW5jZU1hcCgpLnJlbW92ZShtX2luc3RhbmNlKTsKIAog
ICAgIGlmIChtX2lzV2FpdGluZ1RvU3RhcnQpCiAgICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3Vt
ZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKQEAgLTgxMSw2ICs4MTMs
NyBAQCBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtCiAgICAgLCBtX3Bh
cmFtTmFtZXMoMCkKICAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKICAgICAsIG1fbWltZVR5cGUobWlt
ZVR5cGUpCisgICAgLCBtX2luc3RhbmNlKDApCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gpCiAgICAg
LCBtX2lzV2luZG93ZWQoZmFsc2UpCiAjZWxzZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gNjI2MDUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVj
dC5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJGb250U2VsZWN0b3IuaCIKQEAgLTM3LDYgKzM5LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyYW1F
bGVtZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbHVnaW5XaWRnZXQuaCIKQEAgLTYxLDEz
ICs2NCwyMyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIGNvbnN0IGZsb2F0
IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0SGVpZ2h0ID0gMTg7CiBzdGF0aWMgY29uc3QgZmxv
YXQgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luID0gNjsKIHN0
YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdE9wYWNpdHkgPSAwLjIw
ZjsKK3N0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudFRleHRQcmVzc2VkUm91bmRlZFJlY3RP
cGFjaXR5ID0gMC42NWY7CiBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0Um91bmRl
ZFJlY3RSYWRpdXMgPSA1Owogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50VGV4dFRleHRP
cGFjaXR5ID0gMC41NWY7CitzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRUZXh0UHJlc3Nl
ZFRleHRPcGFjaXR5ID0gMC42NWY7CiAKK3N0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRU
ZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IoKQoreworICAgIHN0YXRpYyBjb25zdCBDb2xvciBs
aWdodEdyYXkoMjA1LCAyMDUsIDIwNSk7CisgICAgcmV0dXJuIGxpZ2h0R3JheTsKK30KKyAgICAK
IFJlbmRlckVtYmVkZGVkT2JqZWN0OjpSZW5kZXJFbWJlZGRlZE9iamVjdChFbGVtZW50KiBlbGVt
ZW50KQogICAgIDogUmVuZGVyUGFydChlbGVtZW50KQogICAgICwgbV9oYXNGYWxsYmFja0NvbnRl
bnQoZmFsc2UpCiAgICAgLCBtX3Nob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcihmYWxzZSkKKyAg
ICAsIG1fbWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZChmYWxzZSkKKyAgICAsIG1fbW91
c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKGZhbHNlKQogewogICAgIHZpZXcoKS0+
ZnJhbWVWaWV3KCktPnNldElzVmlzdWFsbHlOb25FbXB0eSgpOwogfQpAQCAtMzU2LDYgKzM2OSwx
NCBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpzZXRTaG93c0NyYXNoCiAgICAgbV9yZXBs
YWNlbWVudFRleHQgPSBjcmFzaGVkUGx1Z2luVGV4dCgpOwogfQogCit2b2lkIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGJvb2wgcHJlc3Nl
ZCkKK3sKKyAgICBpZiAobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkICE9IHByZXNz
ZWQpIHsKKyAgICAgICAgbV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID0gcHJlc3Nl
ZDsKKyAgICAgICAgcmVwYWludCgpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewogICAg
IGlmICghbV9yZXBsYWNlbWVudFRleHQuaXNOdWxsKCkpIHsKQEAgLTM3OCw4ICszOTksMzUgQEAg
dm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIGlmIChjb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBGbG9hdFJl
Y3QgcGx1Z2luUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgcGx1Z2luUmVjdC5tb3ZlKHR4
LCB0eSk7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0OworICAgIFBhdGggcGF0aDsKKyAgICBG
bG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKKyAgICBGb250IGZvbnQ7CisgICAgVGV4dFJ1
biBydW4oIiIpOworICAgIGZsb2F0IHRleHRXaWR0aDsKKyAgICBpZiAoIWdldFJlcGxhY2VtZW50
VGV4dEdlb21ldHJ5KHR4LCB0eSwgY29udGVudFJlY3QsIHBhdGgsIHJlcGxhY2VtZW50VGV4dFJl
Y3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNv
bnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlwKGNvbnRlbnRSZWN0KTsKKyAgICBjb250
ZXh0LT5iZWdpblBhdGgoKTsKKyAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgpOyAgCisgICAgY29u
dGV4dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFj
ZW1lbnRUZXh0UHJlc3NlZFJvdW5kZWRSZWN0T3BhY2l0eSA6IHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0T3BhY2l0eSk7CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKG1fbWlzc2luZ1BsdWdp
bkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENv
bG9yKCkgOiBDb2xvcjo6d2hpdGUsIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CisgICAgY29udGV4
dC0+ZmlsbFBhdGgoKTsKKworICAgIGZsb2F0IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRl
eHRSZWN0LmxvY2F0aW9uKCkueCgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndpZHRo
KCkgLSB0ZXh0V2lkdGgpIC8gMik7CisgICAgZmxvYXQgbGFiZWxZID0gcm91bmRmKHJlcGxhY2Vt
ZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCku
aGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAvIDIgKyBmb250LmFzY2VudCgpKTsKKyAgICBjb250
ZXh0LT5zZXRBbHBoYShtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNl
bWVudFRleHRQcmVzc2VkVGV4dE9wYWNpdHkgOiByZXBsYWNlbWVudFRleHRUZXh0T3BhY2l0eSk7
CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgc3R5bGUoKS0+Y29sb3JT
cGFjZSgpKTsKKyAgICBjb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgcnVuLCBGbG9hdFBvaW50
KGxhYmVsWCwgbGFiZWxZKSk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCitib29sIFJl
bmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShpbnQgdHgsIGlu
dCB0eSwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgUGF0aCYgcGF0aCwgRmxvYXRSZWN0JiByZXBs
YWNlbWVudFRleHRSZWN0LCBGb250JiBmb250LCBUZXh0UnVuJiBydW4sIGZsb2F0JiB0ZXh0V2lk
dGgpCit7CisgICAgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIGNvbnRlbnRS
ZWN0Lm1vdmUodHgsIHR5KTsKICAgICAKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwogICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1
ZVdlYmtpdFNtYWxsQ29udHJvbCwgZm9udERlc2NyaXB0aW9uKTsKQEAgLTM4NywzNiArNDM1LDIz
IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgIEFTU0VSVChzZXR0aW5n
cyk7CiAgICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZv
bnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Zm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7Ci0gICAgRm9udCBmb250KGZvbnREZXNj
cmlwdGlvbiwgMCwgMCk7CisgICAgZm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsK
ICAgICBmb250LnVwZGF0ZSgwKTsKICAgICAKLSAgICBUZXh0UnVuIHJ1bihtX3JlcGxhY2VtZW50
VGV4dC5jaGFyYWN0ZXJzKCksIG1fcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKKyAgICBydW4g
PSBUZXh0UnVuKG1fcmVwbGFjZW1lbnRUZXh0LmNoYXJhY3RlcnMoKSwgbV9yZXBsYWNlbWVudFRl
eHQubGVuZ3RoKCkpOwogICAgIHJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwotICAgIGZsb2F0
IHRleHRXaWR0aCA9IGZvbnQuZmxvYXRXaWR0aChydW4pOworICAgIHRleHRXaWR0aCA9IGZvbnQu
ZmxvYXRXaWR0aChydW4pOwogICAgIAotICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0
OwogICAgIHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0U2l6ZShGbG9hdFNpemUodGV4dFdpZHRoICsg
cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luICogMiwgcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RIZWlnaHQpKTsKLSAgICByZXBsYWNlbWVudFRleHRSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoKHBsdWdpblJlY3Quc2l6ZSgpLndpZHRoKCkgLyAyIC0gcmVw
bGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAvIDIpICsgcGx1Z2luUmVjdC5sb2NhdGlv
bigpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw
bHVnaW5SZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIgLSByZXBsYWNlbWVudFRleHRSZWN0LnNpemUo
KS5oZWlnaHQoKSAvIDIpICsgcGx1Z2luUmVjdC5sb2NhdGlvbigpLnkoKSkpOwotICAgCi0gICAg
UGF0aCBwYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZXBsYWNlbWVudFRleHRS
ZWN0LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMsIHJlcGxhY2Vt
ZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7Ci0gICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNv
bnRleHQtPmNsaXAocGx1Z2luUmVjdCk7Ci0gICAgY29udGV4dC0+YmVnaW5QYXRoKCk7Ci0gICAg
Y29udGV4dC0+YWRkUGF0aChwYXRoKTsgIAotICAgIGNvbnRleHQtPnNldEFscGhhKHJlcGxhY2Vt
ZW50VGV4dFJvdW5kZWRSZWN0T3BhY2l0eSk7Ci0gICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENv
bG9yOjp3aGl0ZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKLSAgICBjb250ZXh0LT5maWxsUGF0
aCgpOwotCi0gICAgRmxvYXRQb2ludCBsYWJlbFBvaW50KHJvdW5kZihyZXBsYWNlbWVudFRleHRS
ZWN0LmxvY2F0aW9uKCkueCgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLndpZHRoKCkg
LSB0ZXh0V2lkdGgpIC8gMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZihyZXBs
YWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueSgpKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXpl
KCkuaGVpZ2h0KCkgLSBmb250LmhlaWdodCgpKSAvIDIgKyBmb250LmFzY2VudCgpKSk7Ci0gICAg
Y29udGV4dC0+c2V0QWxwaGEocmVwbGFjZW1lbnRUZXh0VGV4dE9wYWNpdHkpOwotICAgIGNvbnRl
eHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7Ci0g
ICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHJ1biwgbGFiZWxQb2ludCk7Ci0gICAgY29u
dGV4dC0+cmVzdG9yZSgpOworICAgIGZsb2F0IHggPSAoY29udGVudFJlY3Quc2l6ZSgpLndpZHRo
KCkgLyAyIC0gcmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkud2lkdGgoKSAvIDIpICsgY29udGVu
dFJlY3QubG9jYXRpb24oKS54KCk7CisgICAgZmxvYXQgeSA9IChjb250ZW50UmVjdC5zaXplKCku
aGVpZ2h0KCkgLyAyIC0gcmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkgLyAyKSAr
IGNvbnRlbnRSZWN0LmxvY2F0aW9uKCkueSgpOworICAgIHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0
TG9jYXRpb24oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgCisgICAgcGF0aCA9IFBhdGg6OmNyZWF0
ZVJvdW5kZWRSZWN0YW5nbGUocmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRTaXplKHJlcGxhY2Vt
ZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1
cykpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojps
YXlvdXQoKQpAQCAtNDU1LDUgKzQ5MCw2NSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojp2
aWV3Q2xlYXJlZCgpCiAgICAgICAgICAgICB2aWV3LT5zZXRNYXJnaW5IZWlnaHQobWFyZ2luaCk7
CiAgICAgfQogfQorIAorYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJbk1pc3NpbmdQbHVn
aW5JbmRpY2F0b3IoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRS
ZWN0OworICAgIFBhdGggcGF0aDsKKyAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsK
KyAgICBGb250IGZvbnQ7CisgICAgVGV4dFJ1biBydW4oIiIpOworICAgIGZsb2F0IHRleHRXaWR0
aDsKKyAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KDAsIDAsIGNvbnRlbnRSZWN0
LCBwYXRoLCByZXBsYWNlbWVudFRleHRSZWN0LCBmb250LCBydW4sIHRleHRXaWR0aCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBhYnNv
bHV0ZVRvTG9jYWwoZXZlbnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOworICAg
IHJldHVybiBwYXRoLmNvbnRhaW5zKGxvY2FsUG9pbnQpOworfQorCit2b2lkIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpoYW5kbGVNaXNzaW5nUGx1Z2luSW5kaWNhdG9yRXZlbnQoRXZlbnQqIGV2ZW50
KQoreworICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAg
IGlmICghcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5zaG91bGRNaXNzaW5nUGx1Z2luTWVzc2Fn
ZUJlQnV0dG9uKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICgh
ZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTW91c2VF
dmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CisgICAg
SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVu
dCo+KG5vZGUoKSk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKKyAgICAgICAgbV9tb3VzZURvd25XYXNJbk1pc3NpbmdQbHVnaW5JbmRp
Y2F0b3IgPSBpc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcihtb3VzZUV2ZW50KTsKKyAgICAgICAg
aWYgKG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKSB7CisgICAgICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAg
ICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKGVs
ZW1lbnQpOworICAgICAgICAgICAgICAgIGVsZW1lbnQtPnNldElzQ2FwdHVyaW5nTW91c2VFdmVu
dHModHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRNaXNzaW5nUGx1Z2luSW5k
aWNhdG9ySXNQcmVzc2VkKHRydWUpOworICAgICAgICB9CisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgIH0gICAgICAgIAorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBpZiAobV9taXNzaW5nUGx1Z2lu
SW5kaWNhdG9ySXNQcmVzc2VkKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOworICAgICAgICAgICAgICAgIGVsZW1l
bnQtPnNldElzQ2FwdHVyaW5nTW91c2VFdmVudHMoZmFsc2UpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc2V0TWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3NlZChmYWxzZSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG1fbW91c2VEb3duV2FzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9y
ICYmIGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKG1vdXNlRXZlbnQpKSB7CisgICAgICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkKGVsZW1l
bnQpOyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIG1fbW91c2VEb3duV2FzSW5NaXNz
aW5nUGx1Z2luSW5kaWNhdG9yID0gZmFsc2U7CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworICAgIH0KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpIHsKKyAgICAgICAgYm9vbCBzaG91bGRCZVByZXNzZWQgPSBtX21vdXNlRG93
bldhc0luTWlzc2luZ1BsdWdpbkluZGljYXRvciAmJiBpc0luTWlzc2luZ1BsdWdpbkluZGljYXRv
cihtb3VzZUV2ZW50KTsKKyAgICAgICAgc2V0TWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJlc3Nl
ZChzaG91bGRCZVByZXNzZWQpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
KyAgICB9Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuaAkocmV2aXNpb24gNjI2MDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgTW91c2VFdmVudDsKKwogLy8gUmVuZGVyZXIgZm9yIGVtYmVkcyBh
bmQgb2JqZWN0cywgb2Z0ZW4sIGJ1dCBub3QgYWx3YXlzLCByZW5kZXJlZCB2aWEgcGx1Zy1pbnMu
CiAvLyBGb3IgZXhhbXBsZSwgPGVtYmVkIHNyYz0iZm9vLmh0bWwiPiBkb2VzIG5vdCBpbnZva2Ug
YSBwbHVnLWluLgogY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3QgOiBwdWJsaWMgUmVuZGVyUGFy
dCB7CkBAIC00MSw2ICs0Myw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRmFsbGJhY2tDb250
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYWxsYmFja0NvbnRlbnQ7IH0KIAorICAgIHZvaWQg
aGFuZGxlTWlzc2luZ1BsdWdpbkluZGljYXRvckV2ZW50KEV2ZW50Kik7CisKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKSBjb25zdDsKICNlbmRpZgpAQCAtNTgsMTAgKzYyLDE2IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHZpZXdDbGVh
cmVkKCk7CisgICAgCisgICAgdm9pZCBzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2Vk
KGJvb2wgcHJlc3NlZCk7CisgICAgYm9vbCBpc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcihNb3Vz
ZUV2ZW50Kik7CisgICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShpbnQgdHgsIGlu
dCB0eSwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgUGF0aCYsIEZsb2F0UmVjdCYgcmVwbGFjZW1l
bnRUZXh0UmVjdCwgRm9udCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIFN0
cmluZyBtX3JlcGxhY2VtZW50VGV4dDsKICAgICBib29sIG1faGFzRmFsbGJhY2tDb250ZW50Owog
ICAgIGJvb2wgbV9zaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3I7CisgICAgYm9vbCBtX21pc3Np
bmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQ7CisgICAgYm9vbCBtX21vdXNlRG93bldhc0luTWlz
c2luZ1BsdWdpbkluZGljYXRvcjsKIH07CiAKIGlubGluZSBSZW5kZXJFbWJlZGRlZE9iamVjdCog
dG9SZW5kZXJFbWJlZGRlZE9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCkKSW5kZXg6IFdlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MjgxNSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTAtMDctMDggIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS84MTU4NTYxPiBNaXNzaW5nIHBsdWctaW4gaW5kaWNhdG9yIHNob3Vs
ZCBoYXZlIGEgcHJlc3NlZCBzdGF0ZQorCisgICAgICAgIEltcGxlbWVudCBzaG91bGRNaXNzaW5n
UGx1Z2luTWVzc2FnZUJlQnV0dG9uLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1t
OgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJl
QnV0dG9uKToKKwogMjAxMC0wNy0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNjI2MDUpCisrKyBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNiArMTA1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJU
ZXh0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJh
cnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCBib29sIHNob3VsZE1pc3Np
bmdQbHVnaW5NZXNzYWdlQmVCdXR0b24oKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbWlzc2lu
Z1BsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiA2MjYwNSkKKysrIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01MTYsNiArNTE2LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY3JvbGxSZWN0SW50b1Zp
ZXcKIAogLy8gRW5kIGhvc3Qgd2luZG93IG1ldGhvZHMuCiAKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50
OjpzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gW1ttX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3
ZWJWaWV3OmRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1dHRvbjopXTsKK30KKwogdm9pZCBXZWJDaHJv
bWVDbGllbnQ6Om1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0CiB7CiAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpk
aWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b246KSwga2l0KGVsZW1lbnQpKTsKSW5kZXg6IFdlYktp
dC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDYyNjA1KQorKysgV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MzUsNiArNTM1LDE4IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWwK
ICAgICB1aURlbGVnYXRlLT5tb3VzZURpZE1vdmVPdmVyRWxlbWVudChtX3dlYlZpZXcsIGVsZW1l
bnQuZ2V0KCksIG1vZGlmaWVyRmxhZ3MpOwogfQogCitib29sIFdlYkNocm9tZUNsaWVudDo6c2hv
dWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbigpIGNvbnN0Cit7CisgICAgQ09NUHRyPElX
ZWJVSURlbGVnYXRlPiB1aURlbGVnYXRlOworICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT51aURl
bGVnYXRlKCZ1aURlbGVnYXRlKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAv
LyBJZiB0aGUgVUkgZGVsZWdhdGUgaW1wbGVtZW50cyBJV2ViVUlEZWxlZ2F0ZVByaXZhdGUzLCAK
KyAgICAvLyB3aGljaCBjb250YWlucyBkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b24sIHRoZW4g
dGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgYnV0dG9uLgorICAgIENPTVB0cjxJV2ViVUlEZWxlZ2F0
ZVByaXZhdGUzPiB1aURlbGVnYXRlUHJpdmF0ZTMoUXVlcnksIHVpRGVsZWdhdGUpOworICAgIHJl
dHVybiB1aURlbGVnYXRlUHJpdmF0ZTM7Cit9CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjptaXNz
aW5nUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIENP
TVB0cjxJV2ViVUlEZWxlZ2F0ZT4gdWlEZWxlZ2F0ZTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNjI2MDUpCisrKyBXZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNiArMTA1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNNb2Rl
RGlkQ2hhbmdlKCkgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50KGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZs
YWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRv
bigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZChX
ZWJDb3JlOjpFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChj
b25zdCBXZWJDb3JlOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKSW5kZXg6IFdl
YktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDYyODE1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDctMDggIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3QgaW5mcmFzdHJ1Y3R1cmUgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTcyMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODE1ODU2MT4gTWlzc2luZyBw
bHVnLWluIGluZGljYXRvciBzaG91bGQgaGF2ZSBhIHByZXNzZWQgc3RhdGUKKworICAgICAgICBM
b2cgd2hlbiB0aGUgbWlzc2luZyBwbHVnaW4gYnV0dG9uIGlzIHByZXNzZWQuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bVUlEZWxlZ2F0
ZSB3ZWJWaWV3OmRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1dHRvbjpdKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHA6CisgICAgICAgIChVSURlbGVnYXRlOjpRdWVy
eUludGVyZmFjZSk6CisgICAgICAgIChVSURlbGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVl
c3QpOgorICAgICAgICAoVUlEZWxlZ2F0ZTo6ZHJhd0JhY2tncm91bmQpOgorICAgICAgICAoVUlE
ZWxlZ2F0ZTo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0KToKKyAgICAgICAgKFVJ
RGVsZWdhdGU6OmRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1dHRvbik6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvd2luL1VJRGVsZWdhdGUuaDoKKwogMjAxMC0wNy0wOCAgSmF5IENpdmVsbGkgIDxq
Y2l2ZWxsaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQWRkaW5nIG15c2Vs
ZiBhcyBhIGNvbW1pdHRlci4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9V
SURlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiA2MjYwNSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDEy
IEBAIC0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBzaG91bGQKICAgICByZXR1cm4g
Tk87CiB9CiAKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkUHJlc3NNaXNz
aW5nUGx1Z2luQnV0dG9uOihET01FbGVtZW50ICopZWxlbWVudAoreworICAgIHByaW50ZiAoIk1J
U1NJTkcgUExVR0lOIEJVVFRPTiBQUkVTU0VEXG4iKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwog
LSAodm9pZClkZWFsbG9jCiB7CiAgICAgW2RyYWdnaW5nSW5mbyByZWxlYXNlXTsKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHAJKHJldmlzaW9u
IDYyNjA1KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBVSURlbGVnYXRlOjpRdQogICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdl
YlVJRGVsZWdhdGUyKj4odGhpcyk7CiAgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlE
X0lXZWJVSURlbGVnYXRlUHJpdmF0ZSkpCiAgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2Fz
dDxJV2ViVUlEZWxlZ2F0ZVByaXZhdGUqPih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBJSURfSVdlYlVJRGVsZWdhdGVQcml2YXRlMykpCisgICAgICAgICpwcHZPYmplY3Qg
PSBzdGF0aWNfY2FzdDxJV2ViVUlEZWxlZ2F0ZVByaXZhdGUzKj4odGhpcyk7CiAgICAgZWxzZQog
ICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKIApAQCAtNjM0LDMgKzYzNiwyNSBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmRlCiAgICAgbV9kZXNrdG9wTm90aWZp
Y2F0aW9ucy5jb3B5UmVmVG8ocmVzdWx0KTsKICAgICByZXR1cm4gU19PSzsKIH0KKworSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBVSURlbGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3Qo
SVdlYlZpZXcqIHNlbmRlciwgSVdlYlVSTFJlcXVlc3QqIHJlcXVlc3QsIElQcm9wZXJ0eUJhZyog
d2luZG93RmVhdHVyZXMsIElXZWJWaWV3KiogbmV3V2ViVmlldykKK3sKKyAgICByZXR1cm4gRV9O
T1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdhdGU6OmRyYXdC
YWNrZ3JvdW5kKElXZWJWaWV3KiBzZW5kZXIsIE9MRV9IQU5ETEUgaGRjLCBjb25zdCBSRUNUKiBk
aXJ0eVJlY3QpCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBVSURlbGVnYXRlOjpkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3Qo
SVdlYlZpZXcqIHNlbmRlciwgSVdlYkZyYW1lKiBmcmFtZSwgSVdlYlNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4sIElXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyAgICBy
ZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVJRGVsZWdh
dGU6OmRpZFByZXNzTWlzc2luZ1BsdWdpbkJ1dHRvbihJRE9NRWxlbWVudCogZWxlbWVudCkKK3sK
KyAgICBwcmludGYoIk1JU1NJTkcgUExVR0lOIEJVVFRPTiBQUkVTU0VEXG4iKTsKKyAgICByZXR1
cm4gU19PSzsKK30KKwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVs
ZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlE
ZWxlZ2F0ZS5oCShyZXZpc2lvbiA2MjYwNSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9VSURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIGNsYXNz
IERSVFVuZG9NYW5hZ2VyOwogY2xhc3MgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRlcjsK
IAotY2xhc3MgVUlEZWxlZ2F0ZSA6IHB1YmxpYyBJV2ViVUlEZWxlZ2F0ZTIsIElXZWJVSURlbGVn
YXRlUHJpdmF0ZSB7CitjbGFzcyBVSURlbGVnYXRlIDogcHVibGljIElXZWJVSURlbGVnYXRlMiwg
SVdlYlVJRGVsZWdhdGVQcml2YXRlMyB7CiBwdWJsaWM6CiAgICAgVUlEZWxlZ2F0ZSgpOwogCkBA
IC0zMjUsNiArMzI1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLyogW2luXSAqLyBIREMgaERDLAog
ICAgICAgICAvKiBbaW5dICovIFJFQ1QgcmVjdCk7CiAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgY3JlYXRlV2ViVmlld1dpdGhSZXF1ZXN0KElXZWJWaWV3KiBzZW5kZXIs
IElXZWJVUkxSZXF1ZXN0KiByZXF1ZXN0LCBJUHJvcGVydHlCYWcqIHdpbmRvd0ZlYXR1cmVzLCBJ
V2ViVmlldyoqIG5ld1dlYlZpZXcpOworCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGRyYXdCYWNrZ3JvdW5kKElXZWJWaWV3KiBzZW5kZXIsIE9MRV9IQU5ETEUgaGRjLCBj
b25zdCBSRUNUKiBkaXJ0eVJlY3QpOworCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdChJV2ViVmlldyogc2VuZGVy
LCBJV2ViRnJhbWUqIGZyYW1lLCBJV2ViU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgSVdlYkdlb2xv
Y2F0aW9uUG9saWN5TGlzdGVuZXIqIGxpc3RlbmVyKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBkaWRQcmVzc01pc3NpbmdQbHVnaW5CdXR0b24oSURPTUVsZW1lbnQq
KTsKKwogcHJvdGVjdGVkOgogICAgIC8vIElXZWJVSURlbGVnYXRlUHJpdmF0ZQogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjYwNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTA4ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE3MjEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgxNTg1NjE+IE1pc3NpbmcgcGx1Zy1pbiBpbmRpY2F0
b3Igc2hvdWxkIGhhdmUgYSBwcmVzc2VkIHN0YXRlCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
U2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorICAgICAgICAqIHBsdWdp
bnMvY2xpY2tpbmctbWlzc2luZy1wbHVnaW4tZmlyZXMtZGVsZWdhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBwbHVnaW5zL2NsaWNraW5nLW1pc3NpbmctcGx1Z2luLWZpcmVzLWRl
bGVnYXRlLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTA2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDYyNjA1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTM0MDIsNiArMzQwMiw5IEBAIHBsdWdp
bnMvbW91c2UtZXZlbnRzLWZpeGVkcG9zLmh0bWwKIHBsdWdpbnMva2V5Ym9hcmQtZXZlbnRzLmh0
bWwKIHBsdWdpbnMvZ2V0dXJsbm90aWZ5LWR1cmluZy1kb2N1bWVudC10ZWFyZG93bi5odG1sCiAK
KyMgVGhpcyB0ZXN0IGlzIGZvciBjbGllbnRzIHRoYXQgY2hvb3NlIHRvIG1ha2UgdGhlIG1pc3Np
bmcgcGx1Z2luIGluZGljYXRvciBhIGJ1dHRvbgorcGx1Z2lucy9jbGlja2luZy1taXNzaW5nLXBs
dWdpbi1maXJlcy1kZWxlZ2F0ZS5odG1sCisKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMwNTYxCiBwbHVnaW5zL3ByaXZhdGUtYnJvd3NpbmctbW9kZS5odG1sCiAK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNjI2MDUpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBA
IGh0dHAvdGVzdHMvd2ViYXJjaGl2ZQogd2ViYXJjaGl2ZQogc3ZnL3dlYmFyY2hpdmUKIAorIyBU
aGlzIHRlc3QgaXMgZm9yIGNsaWVudHMgdGhhdCBjaG9vc2UgdG8gbWFrZSB0aGUgbWlzc2luZyBw
bHVnaW4gaW5kaWNhdG9yIGEgYnV0dG9uCitwbHVnaW5zL2NsaWNraW5nLW1pc3NpbmctcGx1Z2lu
LWZpcmVzLWRlbGVnYXRlLmh0bWwKKwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwogIyAgICAgICBG
ZWF0dXJlIG5vdCBzdXBwb3J0ZWQuLi4geWV0CiAjID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAjCkluZGV4
OiBMYXlvdXRUZXN0cy9wbHVnaW5zL2NsaWNraW5nLW1pc3NpbmctcGx1Z2luLWZpcmVzLWRlbGVn
YXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbHVnaW5zL2NsaWNr
aW5nLW1pc3NpbmctcGx1Z2luLWZpcmVzLWRlbGVnYXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3BsdWdpbnMvY2xpY2tpbmctbWlzc2luZy1wbHVnaW4tZmlyZXMt
ZGVsZWdhdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK01JU1NJ
TkcgUExVR0lOIEJVVFRPTiBQUkVTU0VECisKK1RoaXMgdGVzdCBjaGVja3MgaWYgdGhlIG1pc3Np
bmcgcGx1Zy1pbiBidXR0b24gY2FuIGJlIGNsaWNrZWQuIFRoaXMgaXMgYSB0ZXN0IGZvciBCdWcg
NDE3MjEuCkluZGV4OiBMYXlvdXRUZXN0cy9wbHVnaW5zL2NsaWNraW5nLW1pc3NpbmctcGx1Z2lu
LWZpcmVzLWRlbGVnYXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGx1Z2lucy9j
bGlja2luZy1taXNzaW5nLXBsdWdpbi1maXJlcy1kZWxlZ2F0ZS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvcGx1Z2lucy9jbGlja2luZy1taXNzaW5nLXBsdWdpbi1maXJlcy1kZWxl
Z2F0ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACis8aHRtbD4KKzxib2R5Pgor
PGVtYmVkIG5hbWU9InBsZyIgdHlwZT0iYXBwbGljYXRpb24veC1ub24tZXhpc3RlbnQiIHdpZHRo
PTIwMCBoZWlnaHQ9MjAwPjwvZW1iZWQ+Cis8cD5UaGlzIHRlc3QgY2hlY2tzIGlmIHRoZSBtaXNz
aW5nIHBsdWctaW4gYnV0dG9uIGNhbiBiZSBjbGlja2VkLiBUaGlzIGlzIGEgdGVzdCBmb3IgPGEg
aHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzIxIj5CdWcg
NDE3MjE8L2E+LjwvcD4KKzxzY3JpcHQ+CisKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICBkb2N1bWVudC53cml0ZSgiVGhpcyB0ZXN0IGRvZXMgbm90IHdv
cmsgaW4gbWFudWFsIG1vZGUuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRv
KDAsMCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEwNSwgMTA1KTsKKyAgICAg
ICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAo
KTsKKyAgICB9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="48787"
          type_id="1"
          status="+"
          setter="jhoneycutt"
    />
          </attachment>
      

    </bug>

</bugzilla>