<?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>72106</bug_id>
          
          <creation_ts>2011-11-11 03:08:02 -0800</creation_ts>
          <short_desc>Consolidate the logic that creates run loop observers for flushing layer tree changes to CoreAnimation</short_desc>
          <delta_ts>2011-12-02 03:24:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>70086</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>darin</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>500617</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-11-11 03:08:02 -0800</bug_when>
    <thetext>Consolidate the logic that creates run loop observers for flushing layer tree changes to CoreAnimation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500631</commentid>
    <comment_count>1</comment_count>
      <attachid>114661</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-11-11 03:31:37 -0800</bug_when>
    <thetext>Created attachment 114661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502166</commentid>
    <comment_count>2</comment_count>
      <attachid>114661</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-11-14 12:08:03 -0800</bug_when>
    <thetext>Comment on attachment 114661
Patch

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

&gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.h:42
&gt; +    typedef void (*CallbackFunction)(void* context);
&gt; +
&gt; +    static PassOwnPtr&lt;LayerFlushScheduler&gt; create(CallbackFunction callback, void* context)

It would be nicer if this took a Client class instead of a callback and a context. You&apos;d have to add an extra class to WebKit1, but maybe that&apos;s fine.

&gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.h:52
&gt; +    void invalidate();
&gt; +    void invalidateIfScheduled();

I don&apos;t think we need both invalidate and invalidateIfScheduled. Let&apos;s just have invalidate() become invalidateIfScheduled().

&gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.h:53
&gt; +    void setEnabled(bool);

Instead of having a setEnabled function, it would be nicer to have suspend/resume calls that would increment/decrement a counter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502168</commentid>
    <comment_count>3</comment_count>
      <attachid>114661</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-14 12:09:43 -0800</bug_when>
    <thetext>Comment on attachment 114661
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:32
&gt; +#define CoreAnimationRunLoopOrder 2000000

We use const for this sort of thing, not #define.

&gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:34
&gt; +using namespace WebCore;

File should be *in* the WebCore namespace, not *using* the WebCore namespace.

&gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:37
&gt; +    : m_enabled(true)

I think it’s better to name this m_isEnabled.

&gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:49
&gt; +void LayerFlushScheduler::runLoopObserverCallback(CFRunLoopObserverRef, CFRunLoopActivity, void* info)

Why info vs. context?

&gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:71
&gt; +    // Run before the Core Animation commit observer.
&gt; +    const CFIndex runLoopOrder = CoreAnimationRunLoopOrder - 1;

I think this would be better at the top of the file.

&gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:80
&gt; +    ASSERT(m_runLoopObserver);

Why assert this instead of doing an if? I think this should be idempotent and callable multiple times and you should not bother having a separate invalidateIfScheduled function.

&gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:103
&gt; +    if (m_enabled) {
&gt; +        schedule();
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    invalidateIfScheduled();

Seems like this would read better as if/else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502295</commentid>
    <comment_count>4</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-11-14 14:16:31 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 114661 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114661&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:49
&gt; &gt; +void LayerFlushScheduler::runLoopObserverCallback(CFRunLoopObserverRef, CFRunLoopActivity, void* info)
&gt; 
&gt; Why info vs. context?

info is what CF calls the third parameter in its CFRunLoopObserverCallBack declaration in CFRunLoop.h. context is the term I use in this class, so it&apos;s probably more consistent to go with that.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:80
&gt; &gt; +    ASSERT(m_runLoopObserver);
&gt; 
&gt; Why assert this instead of doing an if? I think this should be idempotent and callable multiple times and you should not bother having a separate invalidateIfScheduled function.

LayerTreeHostCAMac asserted that a run loop observer was in fact registered before invalidating it in didPerformScheduledLayerFlush(), so I wanted to provide a way to retain this assertion without exposing m_runLoopObserver, hence invalidate() and invalidateIfScheduled(). I agree this makes for a confusing interface. I can make invalidate() do what invalidateIfScheduled() does, drop invalidateIfScheduled(), and perhaps even add a debug-only method for asserting that a run loop observer is scheduled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502641</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-11-14 22:21:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 114661 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114661&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.h:53
&gt; &gt; +    void setEnabled(bool);
&gt; 
&gt; Instead of having a setEnabled function, it would be nicer to have suspend/resume calls that would increment/decrement a counter.

I&apos;m not sure I follow why this is better given the current use of setEnabled() (and setLayerTreeStateIsFrozen(), by extension) in WebKit2. For instance, I don&apos;t think calls to setLayerTreeStateIsFrozen() in WebFrameLoaderClient are guaranteed to be balanced, so we&apos;d have to do a check to make sure we don&apos;t over-resume. This seems more complicated than the current approach.

Maybe you have a use case in mind that I don&apos;t know about, or maybe I&apos;m missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502674</commentid>
    <comment_count>6</comment_count>
      <attachid>115105</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-11-14 23:21:48 -0800</bug_when>
    <thetext>Created attachment 115105
Patch

Despite my previous question, I decided to implement suspend()/resume() to see what it would look like. This patch addresses all review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502680</commentid>
    <comment_count>7</comment_count>
      <attachid>115105</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-11-14 23:29:06 -0800</bug_when>
    <thetext>Comment on attachment 115105
Patch

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

&gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.cpp:40
&gt; +    ASSERT(m_suspendCount);

This should be m_suspendCount &gt; 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503460</commentid>
    <comment_count>8</comment_count>
      <attachid>115105</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-11-15 17:14:41 -0800</bug_when>
    <thetext>Comment on attachment 115105
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.cpp:40
&gt;&gt; +    ASSERT(m_suspendCount);
&gt; 
&gt; This should be m_suspendCount &gt; 0

I don&apos;t think this assertion buys us anything unless someone calls suspend more than 2^31 times :)

&gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.cpp:46
&gt; +    --m_suspendCount;
&gt; +    ASSERT(m_suspendCount &gt; -1);

I think it&apos;s cleaner to put the ASSERT before the decrement here - then you can just assert that m_suspendCount is not 0.

&gt; Source/WebCore/platform/graphics/ca/LayerFlushScheduler.h:51
&gt; +    int m_suspendCount;

I&apos;d make this an unsigned integer instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503478</commentid>
    <comment_count>9</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2011-11-15 17:52:33 -0800</bug_when>
    <thetext>Committed r100384: &lt;http://trac.webkit.org/changeset/100384&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114661</attachid>
            <date>2011-11-11 03:31:37 -0800</date>
            <delta_ts>2011-11-14 23:21:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72106-20111111033138.patch</filename>
            <type>text/plain</type>
            <size>26375</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk5MzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NzFkYTYwNDkxZWFkNDU4
MDkwYmFkYWY3MzkyOTI5NzVlMmU4YzU5Li5kMDJlMThkYThlOTc2YTZhYTM4MDFlMDBhMjI3ZWIy
MTJmMGQxMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTEtMTEgIEFuZHkg
RXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIENvbnNvbGlkYXRlIHRoZSBsb2dp
YyB0aGF0IGNyZWF0ZXMgcnVuIGxvb3Agb2JzZXJ2ZXJzIGZvciBmbHVzaGluZyBsYXllciB0cmVl
IGNoYW5nZXMgdG8gQ29yZUFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMg
b2Ygc2NoZWR1bGluZywgZW5hYmxpbmcgYW5kCisgICAgICAgIGludmFsaWRhdGluZyBhIHJ1biBs
b29wIG9ic2VydmVyIHRoYXQgZmlyZXMgYmVmb3JlIENvcmUgQW5pbWF0aW9uJ3MKKyAgICAgICAg
Y29tbWl0IG9ic2VydmVyLiBDbGllbnRzIGNhbiBzdXBwbHkgdGhlaXIgb3duIGNhbGxvdXQgZnVu
Y3Rpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
TGF5ZXJGbHVzaFNjaGVkdWxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmx1
c2hTY2hlZHVsZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKExheWVyRmx1c2hT
Y2hlZHVsZXI6OkxheWVyRmx1c2hTY2hlZHVsZXIpOgorICAgICAgICAoTGF5ZXJGbHVzaFNjaGVk
dWxlcjo6fkxheWVyRmx1c2hTY2hlZHVsZXIpOgorICAgICAgICAoTGF5ZXJGbHVzaFNjaGVkdWxl
cjo6cnVuTG9vcE9ic2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoTGF5ZXJGbHVzaFNjaGVkdWxl
cjo6c2NoZWR1bGUpOiBJbnN0YWxsIHRoZSBydW4gbG9vcCBvYnNlcnZlci4KKyAgICAgICAgKExh
eWVyRmx1c2hTY2hlZHVsZXI6OmludmFsaWRhdGUpOiBSZW1vdmUgdGhlIHJ1biBsb29wIG9ic2Vy
dmVyLAorICAgICAgICBhc3NlcnRpbmcgdGhhdCBpdCBpcyBpbnN0YWxsZWQgYmVmb3JlIHJlbW92
aW5nIGl0LgorICAgICAgICAoTGF5ZXJGbHVzaFNjaGVkdWxlcjo6aW52YWxpZGF0ZUlmU2NoZWR1
bGVkKTogUmVtb3ZlIHRoZSBydW4gbG9vcAorICAgICAgICBvYnNlcnZlciBpZiBpdCBpcyBpbnN0
YWxsZWQuCisgICAgICAgIChMYXllckZsdXNoU2NoZWR1bGVyOjpzZXRFbmFibGVkKTogVGVtcG9y
YXJpbHkgZW5hYmxlIG9yIGRpc2FibGUgdGhlCisgICAgICAgIHJ1biBsb29wIG9ic2VydmVyLgor
CiAyMDExLTExLTEwICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZWJLaXRDU1NTaGFkZXJWYWx1ZS5oIGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgV2ViQ29yZSB0YXJn
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCAzZTY0MWNjMGE3YWYyNDQxZjA4YjM5YTQwNDUzOTJiZDdl
YWUxODRmLi41YTRhZWU1OTcyMmIxYmE1NGNmZTI0ZTkyNTEwMmM1MmM3OTMyOTg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMTEgIEFuZHkgRXN0ZXMgIDxhZXN0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIENvbnNvbGlkYXRlIHRoZSBsb2dpYyB0aGF0IGNyZWF0
ZXMgcnVuIGxvb3Agb2JzZXJ2ZXJzIGZvciBmbHVzaGluZyBsYXllciB0cmVlIGNoYW5nZXMgdG8g
Q29yZUFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzIxMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgY29kZSB0aGF0IHNjaGVkdWxlcyBsYXllciBmbHVzaGVzIGFuZCB1c2UgTGF5
ZXJGbHVzaFNjaGVkdWxlciBpbnN0ZWFkLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJWaWV3IF9jbG9zZV0pOiBJbnZhbGlkYXRlIHRoZSBydW4gbG9vcCBv
YnNlcnZlciBhbmQgZGVzdHJveQorICAgICAgICBsYXllckZsdXNoU2NoZWR1bGVyLgorICAgICAg
ICAoLVtXZWJWaWV3IF9jbGVhckxheWVyU3luY0xvb3BPYnNlcnZlcl0pOiBDYWxsIExheWVyRmx1
c2hTY2hlZHVsZXI6OmludmFsaWRhdGVJZlNjaGVkdWxlZCgpLgorICAgICAgICAobGF5ZXJTeW5j
Q2FsbEJhY2spOgorICAgICAgICAoLVtXZWJWaWV3IF9zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJT
eW5jXSk6IElmIGxheWVyRmx1c2hTY2hlZHVsZXIgaGFzCisgICAgICAgIHlldCB0byBiZSBjcmVh
dGVkLCBjcmVhdGUgaXQgd2l0aCBsYXllclN5bmNDYWxsQmFjayBhcyB0aGUgY2FsbGJhY2suCisg
ICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5oOiBSZXBsYWNlIGxheWVyU3luY1J1bkxvb3BP
YnNlcnZlciB3aXRoCisgICAgICAgIGxheWVyRmx1c2hTY2hlZHVsZXIuCisKIDIwMTEtMTEtMDcg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIHN0YXRpYyAi
cG9saWN5IiBzdGF0ZSBmcm9tIFNlY3VyaXR5T3JpZ2luLmNwcCB0byBTZWN1cml0eVBvbGljeS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwppbmRleCBlMTI5NzRhZmNjZDIyMGY2MjVhYmExOGQxYjYyYzA2ODk4NjJkMTg0
Li4xZWFjNjg4ODUxNGRhMjNmNTk0MGVkMmUzZTBmZDZjYzVlYzA1NWZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTEtMTEtMTEgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29t
PgorCisgICAgICAgIENvbnNvbGlkYXRlIHRoZSBsb2dpYyB0aGF0IGNyZWF0ZXMgcnVuIGxvb3Ag
b2JzZXJ2ZXJzIGZvciBmbHVzaGluZyBsYXllciB0cmVlIGNoYW5nZXMgdG8gQ29yZUFuaW1hdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUg
Y29kZSB0aGF0IHNjaGVkdWxlcyBsYXllciBmbHVzaGVzIGFuZCB1c2UgTGF5ZXJGbHVzaFNjaGVk
dWxlciBpbnN0ZWFkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL21hYy9MYXll
clRyZWVIb3N0Q0FNYWMuaDogUmVwbGFjZQorICAgICAgICBtX2ZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlc1J1bkxvb3BPYnNlcnZlciB3aXRoIG1fbGF5ZXJGbHVzaFNjaGVkdWxlci4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvY2EvbWFjL0xheWVyVHJlZUhvc3RDQU1hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdENBTWFjOjpMYXllclRyZWVIb3N0Q0FNYWMpOiBJbnN0
YW50aWF0ZQorICAgICAgICBtX2xheWVyRmx1c2hTY2hlZHVsZXIgd2l0aCBmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXNDYWxsYmFjayBhcyB0aGUKKyAgICAgICAgY2FsbGJhY2suCisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RDQU1hYzo6fkxheWVyVHJlZUhvc3RDQU1hYyk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RDQU1hYzo6c2NoZWR1bGVMYXllckZsdXNoKTogQ2FsbCBM
YXllckZsdXNoU2NoZWR1bGVyOjpzY2hlZHVsZSgpLgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0Q0FNYWM6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6IENhbGwgTGF5ZXJG
bHVzaFNjaGVkdWxlcjo6c2V0RW5hYmxlZCgpLgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0Q0FNYWM6OmludmFsaWRhdGUpOiBDYWxsIExheWVyRmx1c2hTY2hlZHVsZXI6OmludmFsaWRh
dGVJZlNjaGVkdWxlZCgpLgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Q0FNYWM6OmZs
dXNoUGVuZGluZ0xheWVyQ2hhbmdlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdENBTWFjOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCk6IENhbGwgTGF5ZXJG
bHVzaFNjaGVkdWxlcjo6aW52YWxpZGF0ZSgpLgorCiAyMDExLTExLTEwICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBPbmNlIG1vcmUgZm9yIHRoZSBRVCBidWlsZC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggMDg5OTU4OWExZWI2MzMwYTJkZTNkODdhYWI0ODRiYzRh
Y2IzNzQzYi4uMTc1NTZmZDYxNGIyOGY0MjlkYjAyMTA4ZjJkOTM0YzFkOTY1YThhZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KQEAgLTU2Niw2ICs1NjYsMTIgQEAgX19aTjdXZWJDb3JlMTlCYWNrRm9y
d2FyZExpc3RJbXBsOGNhcGFjaXR5RXYKIF9fWk43V2ViQ29yZTE5QmFja0ZvcndhcmRMaXN0SW1w
bDlnb0ZvcndhcmRFdgogX19aTjdXZWJDb3JlMTlCYWNrRm9yd2FyZExpc3RJbXBsQzFFUE5TXzRQ
YWdlRQogX19aTjdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9uMTFzZXRQcm9wZXJ0eUVSS04z
V1RGNlN0cmluZ0VTNF9SaQorX19aTjdXZWJDb3JlMTlMYXllckZsdXNoU2NoZWR1bGVyMTBpbnZh
bGlkYXRlRXYKK19fWk43V2ViQ29yZTE5TGF5ZXJGbHVzaFNjaGVkdWxlcjEwc2V0RW5hYmxlZEVi
CitfX1pON1dlYkNvcmUxOUxheWVyRmx1c2hTY2hlZHVsZXIyMWludmFsaWRhdGVJZlNjaGVkdWxl
ZEV2CitfX1pON1dlYkNvcmUxOUxheWVyRmx1c2hTY2hlZHVsZXI4c2NoZWR1bGVFdgorX19aTjdX
ZWJDb3JlMTlMYXllckZsdXNoU2NoZWR1bGVyQzFFUEZ2UHZFUzFfCitfX1pON1dlYkNvcmUxOUxh
eWVyRmx1c2hTY2hlZHVsZXJEMUV2CiBfX1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2Ux
MXNldEhUVFBCb2R5RU4zV1RGMTBQYXNzUmVmUHRySU5TXzhGb3JtRGF0YUVFRQogX19aTjdXZWJD
b3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTNzZXRIVFRQTWV0aG9kRVJLTjNXVEY2U3RyaW5nRQog
X19aTjdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMThzZXRIVFRQSGVhZGVyRmllbGRFUEtj
UktOM1dURjZTdHJpbmdFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMGZlZTg3YjUxYWY2MzQ1N2ZkMzE3YzQ3NWFhMjJmMTc3OWMy
OTk2OS4uNDlkNDQ1NmY4NzVlNzA3MmM0NjhjNGVhOTEwMGFiMDI5NjUzMzJlNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjg5
LDYgKzY4OSw4IEBACiAJCTI5QUNCMjEyMTQzRTcxMjgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5
TW9ja09iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjlBQ0IyMTExNDNFNzEyODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0Lmgg
Ki87IH07CiAJCTI5QUNCMjE0MTQzRTc0OTgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9ja09i
amVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OUFDQjIxMzE0M0U3NDk4MDA2QkNBNUYgLyogQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwICov
OyB9OwogCQkyOUNENjFERTE0NkQwMjg5MDA2OEU4MkEgLyogV2ViS2l0Q1NTU2hhZGVyVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwQjQyMTU3
MTQ2OTc2OTYwMDg3RTYwNCAvKiBXZWJLaXRDU1NTaGFkZXJWYWx1ZS5oICovOyB9OworCQkyOUNE
NjFFODE0NkQwNzM2MDA2OEU4MkEgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlDRDYxRTcxNDZEMDczNjAwNjhF
ODJBIC8qIExheWVyRmx1c2hTY2hlZHVsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkyOUNENjFFQjE0NkQwNzRGMDA2OEU4MkEgLyogTGF5ZXJG
bHVzaFNjaGVkdWxlck1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOUNENjFFQTE0NkQwNzRGMDA2OEU4MkEgLyogTGF5ZXJGbHVzaFNjaGVkdWxl
ck1hYy5jcHAgKi87IH07CiAJCTI5RDdCQ0Y2MTQ0NEFGNTgwMDcwNjE5QyAvKiBBY2Nlc3NpYmls
aXR5U3BpbkJ1dHRvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyOUQ3QkNGNTE0NDRBRjU4MDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0
b24uY3BwICovOyB9OwogCQkyOUQ3QkNGQTE0NDRBRjdEMDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0
eVNwaW5CdXR0b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI5RDdCQ0Y5MTQ0NEFGN0QwMDcwNjE5QyAvKiBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5o
ICovOyB9OwogCQkyQkU4RTJDNzEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQkU4
RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi87IH07CkBA
IC03NzgzLDYgKzc3ODUsOCBAQAogCQkyOUE4MTI0NzBGQkI5Q0E5MDA1MTAyOTMgLyogQVhPYmpl
Y3RDYWNoZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFY
T2JqZWN0Q2FjaGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5QUNCMjEx
MTQzRTcxMjgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyOUFDQjIxMzE0M0U3NDk4MDA2QkNBNUYgLyogQWNjZXNz
aWJpbGl0eU1vY2tPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyOUNENjFFNzE0NkQwNzM2MDA2OEU4MkEgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXllckZsdXNoU2NoZWR1bGVyLmg7IHBh
dGggPSBjYS9MYXllckZsdXNoU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTI5Q0Q2MUVBMTQ2RDA3NEYwMDY4RTgyQSAvKiBMYXllckZsdXNoU2NoZWR1bGVyTWFjLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExheWVyRmx1c2hTY2hlZHVs
ZXJNYWMuY3BwOyBwYXRoID0gY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUQ3QkNGNTE0NDRBRjU4MDA3MDYxOUMgLyogQWNj
ZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwOyBwYXRoID0gYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
IAkJMjlEN0JDRjkxNDQ0QUY3RDAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTcGluQnV0dG9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1
MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg7IHBhdGggPSBwYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDk0Miw2ICsxNDk0
Niw3IEBACiAJCTQ5NTg3ODFFMTJBNTdEQkMwMDcyMzhBQyAvKiBtYWMgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTI5Q0Q2MUVBMTQ2RDA3NEYwMDY4RTgy
QSAvKiBMYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcCAqLywKIAkJCQk0OTU4NzgxRjEyQTU3RERG
MDA3MjM4QUMgLyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSAqLywKIAkJCQk0OTU4NzgyMDEy
QTU3RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUxheWVyTWFjLm1tICovLAogCQkJKTsKQEAgLTE0
OTc4LDYgKzE0OTgzLDcgQEAKIAkJCQk0OTU4NzgxRTEyQTU3REJDMDA3MjM4QUMgLyogbWFjICov
LAogCQkJCTQ5OUIzRUQ0MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwICov
LAogCQkJCTQ5OUIzRUQ1MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCAqLywK
KwkJCQkyOUNENjFFNzE0NkQwNzM2MDA2OEU4MkEgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5oICov
LAogCQkJCTQ5OUIzRURDMTI4REI1MDEwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmgg
Ki8sCiAJCQkJNDk5QjNFQzMxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oICov
LAogCQkJCTQ5M0U1RTA4MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQu
aCAqLywKQEAgLTI0NjU0LDYgKzI0NjYwLDcgQEAKIAkJCQk3MTUzN0EwMTE0NkJEOUQ3MDA4QkQ2
MTUgLyogU1ZHUGF0aERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMzEzRjY2MTQ0M0IzNUYw
MDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlD
RDYxREUxNDZEMDI4OTAwNjhFODJBIC8qIFdlYktpdENTU1NoYWRlclZhbHVlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkyOUNENjFFODE0NkQwNzM2MDA2OEU4MkEgLyogTGF5ZXJGbHVzaFNjaGVkdWxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNzUxNSw2ICsyNzUyMiw3IEBACiAJCQkJNzEzNDQ5NkQx
NDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTc0RDJEQTQxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxMzEzRjY1MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOUNENjFFQjE0NkQwNzRGMDA2OEU4MkEgLyog
TGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyRmx1c2hTY2hlZHVsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyRmx1c2hTY2hlZHVsZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hYTk4YmQwM2E5NzhjNjEwNjk5Nzc1Y2EzMjkyY2M1YzkzY2ZlNGE3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5
ZXJGbHVzaFNjaGVkdWxlci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTGF5ZXJGbHVzaFNj
aGVkdWxlcl9oCisjZGVmaW5lIExheWVyRmx1c2hTY2hlZHVsZXJfaAorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIExheWVyRmx1c2hTY2hlZHVsZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyRmx1c2hTY2hlZHVsZXIpOworcHVibGljOgorICAg
IHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKHZvaWQqIGNvbnRleHQpOworCisgICAg
c3RhdGljIFBhc3NPd25QdHI8TGF5ZXJGbHVzaFNjaGVkdWxlcj4gY3JlYXRlKENhbGxiYWNrRnVu
Y3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IExheWVyRmx1c2hTY2hlZHVsZXIoY2FsbGJhY2ssIGNvbnRleHQpKTsKKyAgICB9
CisKKyAgICBMYXllckZsdXNoU2NoZWR1bGVyKENhbGxiYWNrRnVuY3Rpb24sIHZvaWQqIGNvbnRl
eHQpOworICAgIH5MYXllckZsdXNoU2NoZWR1bGVyKCk7CisKKyAgICB2b2lkIHNjaGVkdWxlKCk7
CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlSWZTY2hlZHVsZWQo
KTsKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2Vu
YWJsZWQ7CisgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2NhbGxiYWNrOworICAgIHZvaWQqIG1fY29u
dGV4dDsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPENGUnVuTG9vcE9i
c2VydmVyUmVmPiBtX3J1bkxvb3BPYnNlcnZlcjsKKyAgICBzdGF0aWMgdm9pZCBydW5Mb29wT2Jz
ZXJ2ZXJDYWxsYmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aXZpdHksIHZv
aWQqIGNvbnRleHQpOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZiAvLyBMYXllckZs
dXNoU2NoZWR1bGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40N2NiNmU0ODZkZjlkZTgwNmE2YzlmN2EyYzliYTNlMmFiNmE0YTAwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1
c2hTY2hlZHVsZXJNYWMuY3BwCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbXBvcnQgIkxheWVyRmx1
c2hTY2hlZHVsZXIuaCIKKworI2RlZmluZSBDb3JlQW5pbWF0aW9uUnVuTG9vcE9yZGVyIDIwMDAw
MDAKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0xheWVyRmx1c2hTY2hlZHVsZXI6Okxh
eWVyRmx1c2hTY2hlZHVsZXIoQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4
dCkKKyAgICA6IG1fZW5hYmxlZCh0cnVlKQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAg
ICAsIG1fY29udGV4dChjb250ZXh0KQoreworICAgIEFTU0VSVF9BUkcoY2FsbGJhY2ssIGNhbGxi
YWNrKTsKK30KKworTGF5ZXJGbHVzaFNjaGVkdWxlcjo6fkxheWVyRmx1c2hTY2hlZHVsZXIoKQor
eworICAgIEFTU0VSVCghbV9ydW5Mb29wT2JzZXJ2ZXIpOworfQorCit2b2lkIExheWVyRmx1c2hT
Y2hlZHVsZXI6OnJ1bkxvb3BPYnNlcnZlckNhbGxiYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBD
RlJ1bkxvb3BBY3Rpdml0eSwgdm9pZCogaW5mbykKK3sKKyAgICBMYXllckZsdXNoU2NoZWR1bGVy
KiBsYXllckZsdXNoU2NoZWR1bGVyID0gc3RhdGljX2Nhc3Q8TGF5ZXJGbHVzaFNjaGVkdWxlcio+
KGluZm8pOworICAgIEFTU0VSVChsYXllckZsdXNoU2NoZWR1bGVyLT5tX3J1bkxvb3BPYnNlcnZl
cik7CisgICAgQVNTRVJUKGxheWVyRmx1c2hTY2hlZHVsZXItPm1fZW5hYmxlZCk7CisgICAgbGF5
ZXJGbHVzaFNjaGVkdWxlci0+bV9jYWxsYmFjayhsYXllckZsdXNoU2NoZWR1bGVyLT5tX2NvbnRl
eHQpOworfQorCit2b2lkIExheWVyRmx1c2hTY2hlZHVsZXI6OnNjaGVkdWxlKCkKK3sKKyAgICBp
ZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZSdW5Mb29wUmVmIGN1cnJl
bnRSdW5Mb29wID0gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOworCisgICAgLy8gTWFrZSBzdXJlIHdl
IHdha2UgdXAgdGhlIGxvb3Agb3IgdGhlIG9ic2VydmVyIGNvdWxkIGJlIGRlbGF5ZWQgdW50aWwg
c29tZSBvdGhlciBzb3VyY2UgZmlyZXMuCisgICAgQ0ZSdW5Mb29wV2FrZVVwKGN1cnJlbnRSdW5M
b29wKTsKKworICAgIGlmIChtX3J1bkxvb3BPYnNlcnZlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gUnVuIGJlZm9yZSB0aGUgQ29yZSBBbmltYXRpb24gY29tbWl0IG9ic2VydmVyLgorICAg
IGNvbnN0IENGSW5kZXggcnVuTG9vcE9yZGVyID0gQ29yZUFuaW1hdGlvblJ1bkxvb3BPcmRlciAt
IDE7CisgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHRoaXMsIDAs
IDAsIDAgfTsKKyAgICBtX3J1bkxvb3BPYnNlcnZlci5hZG9wdENGKENGUnVuTG9vcE9ic2VydmVy
Q3JlYXRlKDAsIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5nIHwga0NGUnVuTG9vcEV4aXQsIHRydWUs
IHJ1bkxvb3BPcmRlciwgcnVuTG9vcE9ic2VydmVyQ2FsbGJhY2ssICZjb250ZXh0KSk7CisKKyAg
ICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihjdXJyZW50UnVuTG9vcCwgbV9ydW5Mb29wT2JzZXJ2ZXIu
Z2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Cit9CisKK3ZvaWQgTGF5ZXJGbHVzaFNjaGVk
dWxlcjo6aW52YWxpZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fcnVuTG9vcE9ic2VydmVyKTsKKyAg
ICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUobV9ydW5Mb29wT2JzZXJ2ZXIuZ2V0KCkpOwor
ICAgIG1fcnVuTG9vcE9ic2VydmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBMYXllckZsdXNoU2No
ZWR1bGVyOjppbnZhbGlkYXRlSWZTY2hlZHVsZWQoKQoreworICAgIGlmIChtX3J1bkxvb3BPYnNl
cnZlcikKKyAgICAgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIExheWVyRmx1c2hTY2hlZHVs
ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChtX2VuYWJsZWQgPT0gZW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9lbmFibGVkID0gZW5hYmxlZDsKKworICAg
IGlmIChtX2VuYWJsZWQpIHsKKyAgICAgICAgc2NoZWR1bGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGludmFsaWRhdGVJZlNjaGVkdWxlZCgpOworfQorCisjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CmluZGV4IDBhZGNlNzNkNmNlOWEyNmI2ZmFiMDg0ZWNmMjU4MTljNjE0NDNiNDcuLjEyNWU1ZDE1
NzhkY2Q4ZmYxMmEyYjFkYzNhZGE5NTdlZGNmYzc5NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KQEAgLTEwOTYsNyArMTA5NiwxMCBAQCBzdGF0aWMgYm9vbCBmYXN0RG9jdW1l
bnRUZWFyZG93bkVuYWJsZWQoKQogICAgIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICBbc2VsZiBfY2xlYXJMYXllclN5bmNMb29wT2JzZXJ2ZXJdOworICAgIGlmIChf
cHJpdmF0ZS0+bGF5ZXJGbHVzaFNjaGVkdWxlcikgeworICAgICAgICBbc2VsZiBfY2xlYXJMYXll
clN5bmNMb29wT2JzZXJ2ZXJdOworICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJGbHVzaFNjaGVkdWxl
ciA9IG51bGxwdHI7CisgICAgfQogI2VuZGlmCiAgICAgCiAjaWYgRU5BQkxFKEdMSUJfU1VQUE9S
VCkKQEAgLTU4NjIsMTIgKzU4NjUsNyBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5kVXBU
b1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAtICh2b2lkKV9jbGVhckxheWVyU3luY0xvb3BPYnNlcnZlcgogewotICAgIGlmICghX3ByaXZh
dGUtPmxheWVyU3luY1J1bkxvb3BPYnNlcnZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0ZS
dW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKF9wcml2YXRlLT5sYXllclN5bmNSdW5Mb29wT2JzZXJ2
ZXIpOwotICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+bGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVyKTsK
LSAgICBfcHJpdmF0ZS0+bGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVyID0gMDsKKyAgICBfcHJpdmF0
ZS0+bGF5ZXJGbHVzaFNjaGVkdWxlci0+aW52YWxpZGF0ZUlmU2NoZWR1bGVkKCk7CiB9CiAjZW5k
aWYKIApAQCAtNjA3Nyw3ICs2MDc1LDcgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByb3VuZFVw
VG9Qb3dlck9mMih1aW50NjRfdCBudW0pCiAgICAgCiAqLwogCi1zdGF0aWMgdm9pZCBsYXllclN5
bmNSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29w
QWN0aXZpdHksIHZvaWQqIGluZm8pCitzdGF0aWMgdm9pZCBsYXllclN5bmNDYWxsQmFjayh2b2lk
KiBpbmZvKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSByZWludGVycHJldF9jYXN0PFdlYlZp
ZXcqPihpbmZvKTsKICAgICBOU1dpbmRvdyAqd2luZG93ID0gW3dlYlZpZXcgd2luZG93XTsKQEAg
LTYxMTIsMjggKzYxMTAsOSBAQCBzdGF0aWMgdm9pZCBsYXllclN5bmNSdW5Mb29wT2JzZXJ2ZXJD
YWxsQmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aQogCiAtICh2b2lkKV9z
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jCiB7Ci0gICAgQ0ZSdW5Mb29wUmVmIGN1cnJlbnRS
dW5Mb29wID0gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIHdh
a2UgdXAgdGhlIGxvb3Agb3IgdGhlIG9ic2VydmVyIGNvdWxkIGJlIGRlbGF5ZWQgdW50aWwgc29t
ZSBvdGhlciBzb3VyY2UgZmlyZXMuCi0gICAgQ0ZSdW5Mb29wV2FrZVVwKGN1cnJlbnRSdW5Mb29w
KTsKLQotICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBSdW4gYWZ0ZXIgQXBwS2l0IGRvZXMgaXRzIHdpbmRvdyB1cGRh
dGUuIElmIHdlIGRvIGFueSBwYWludGluZywgd2UnbGwgY29tbWl0Ci0gICAgLy8gbGF5ZXIgY2hh
bmdlcyBmcm9tIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cygpLCBvdGhlcndpc2Ugd2UnbGwgY29t
bWl0IHZpYQotICAgIC8vIF9zeW5jQ29tcG9zaXRpbmdDaGFuZ2VzIHdoZW4gdGhpcyBvYnNlcnZl
ciBmaXJlcy4KLSAgICAvLyBBbHNvIGxlYXZlIGEgc2xvdCBmb3IgdGhlIHJlcXVlc3RBbmltYXRp
b25GcmFtZVJ1bkxvb3BPYnNlcnZlciwgaWYgaXQncyBlbmFibGVkCi0gICAgY29uc3QgQ0ZJbmRl
eCBydW5Mb29wT3JkZXIgPSBOU0Rpc3BsYXlXaW5kb3dSdW5Mb29wT3JkZXJpbmcgKyAyOwotCi0g
ICAgLy8gVGhlIFdlYlZpZXcgYWx3YXlzIG91dGxpdmVzIHRoZSBvYnNlcnZlciwgc28gbm8gbmVl
ZCB0byByZXRhaW4vcmVsZWFzZS4KLSAgICBDRlJ1bkxvb3BPYnNlcnZlckNvbnRleHQgY29udGV4
dCA9IHsgMCwgc2VsZiwgMCwgMCwgMCB9OwotCi0gICAgX3ByaXZhdGUtPmxheWVyU3luY1J1bkxv
b3BPYnNlcnZlciA9IENGUnVuTG9vcE9ic2VydmVyQ3JlYXRlKE5VTEwsCi0gICAgICAgIGtDRlJ1
bkxvb3BCZWZvcmVXYWl0aW5nIHwga0NGUnVuTG9vcEV4aXQsIHRydWUgLyogcmVwZWF0cyAqLywK
LSAgICAgICAgcnVuTG9vcE9yZGVyLCBsYXllclN5bmNSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjaywg
JmNvbnRleHQpOwotCi0gICAgQ0ZSdW5Mb29wQWRkT2JzZXJ2ZXIoY3VycmVudFJ1bkxvb3AsIF9w
cml2YXRlLT5sYXllclN5bmNSdW5Mb29wT2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7
CisgICAgaWYgKCFfcHJpdmF0ZS0+bGF5ZXJGbHVzaFNjaGVkdWxlcikKKyAgICAgICAgX3ByaXZh
dGUtPmxheWVyRmx1c2hTY2hlZHVsZXIgPSBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyOjpj
cmVhdGUobGF5ZXJTeW5jQ2FsbEJhY2ssIHNlbGYpOworICAgIF9wcml2YXRlLT5sYXllckZsdXNo
U2NoZWR1bGVyLT5zY2hlZHVsZSgpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0RhdGEuaAppbmRleCA5YjMyNTgzNjMyN2E0ZDY0YjUyODE1NTYyZjczZmJiNWNj
ZTZlNDU1Li43ZGEwMmVhYzBiMjA4MDYxMjg2MDE5OGRkYTZiNjUxNzMwMTJhZjFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKKysrIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkRlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoaW5nLmgiCisjaW1wb3J0IDxXZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2Vi
Q29yZUtleWJvYXJkVUlNb2RlLmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgpAQCAtMTQ5LDcg
KzE1MCw3IEBAIGV4dGVybiBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudDsKICAgICBCT09M
IG5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb247CiAgICAgQk9PTCBwb3N0c0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdOb3RpZmljYXRpb25zOwogICAgIC8vIFJ1biBsb29wIG9ic2VydmVy
IHVzZWQgdG8gaW1wbGVtZW50IHRoZSBjb21wb3NpdGluZyBlcXVpdmFsZW50IG9mIC12aWV3V2ls
bERyYXcKLSAgICBDRlJ1bkxvb3BPYnNlcnZlclJlZiBsYXllclN5bmNSdW5Mb29wT2JzZXJ2ZXI7
CisgICAgT3duUHRyPFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXI+IGxheWVyRmx1c2hTY2hl
ZHVsZXI7CiAjZW5kaWYKIAogICAgIE5TUGFzdGVib2FyZCAqaW5zZXJ0aW9uUGFzdGVib2FyZDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9tYWMvTGF5
ZXJUcmVlSG9zdENBTWFjLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2Ev
bWFjL0xheWVyVHJlZUhvc3RDQU1hYy5oCmluZGV4IGJmOTk2NjAyNDdkYzdjODY3NzdhYzQ4NWJl
ZTM2MjRkYmVmZTg4MjQuLjM4ZTIyNWI4NmY3MGNjMGVjNTgzNzVkZGFjNDdkNmIyZDNmNTUxNDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9tYWMvTGF5
ZXJUcmVlSG9zdENBTWFjLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2NhL21hYy9MYXllclRyZWVIb3N0Q0FNYWMuaApAQCAtMjcsMTAgKzI3LDkgQEAKICNkZWZpbmUg
TGF5ZXJUcmVlSG9zdENBTWFjX2gKIAogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RDQS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTGF5ZXJGbHVzaFNjaGVkdWxlci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KIAotI2RlZmluZSBDb3JlQW5pbWF0aW9uUnVuTG9vcE9yZGVyIDIwMDAwMDAKLQog
dHlwZWRlZiBzdHJ1Y3QgX19XS0NBUmVtb3RlTGF5ZXJDbGllbnRSZWYqIFdLQ0FSZW1vdGVMYXll
ckNsaWVudFJlZjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01NiwxMCArNTUsMTAgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKExheWVyVHJlZUNvbnRl
eHQmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsK
IAotICAgIHN0YXRpYyB2b2lkIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1J1bkxvb3BPYnNlcnZl
ckNhbGxiYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxvb3BBY3Rpdml0eSwgdm9pZCop
OworICAgIHN0YXRpYyB2b2lkIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc0NhbGxiYWNrKHZvaWQq
IGNvbnRleHQpOwogCiAgICAgUmV0YWluUHRyPFdLQ0FSZW1vdGVMYXllckNsaWVudFJlZj4gbV9y
ZW1vdGVMYXllckNsaWVudDsKLSAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wT2JzZXJ2ZXJSZWY+IG1f
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyOworICAgIFdlYkNvcmU6Okxh
eWVyRmx1c2hTY2hlZHVsZXIgbV9sYXllckZsdXNoU2NoZWR1bGVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvY2EvbWFjL0xheWVyVHJlZUhvc3RDQU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9jYS9tYWMvTGF5ZXJUcmVlSG9zdENBTWFjLm1tCmluZGV4IDU4Mzg2MjFmMDA5
ZTdhZWZjMmE3OTJkZGM2ZWUwZmVlZWEyYzczNWQuLjc3NTY5MDE5ZDllZjlmYzZlNzk0NzJmMzFj
N2UzY2Y1ZTk1MzI0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9jYS9tYWMvTGF5ZXJUcmVlSG9zdENBTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9jYS9tYWMvTGF5ZXJUcmVlSG9zdENBTWFjLm1tCkBAIC00OCwxMiAr
NDgsMTIgQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0Q0FNYWM+IExheWVyVHJlZUhvc3RDQU1h
Yzo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAKIExheWVyVHJlZUhvc3RDQU1hYzo6TGF5ZXJU
cmVlSG9zdENBTWFjKFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgOiBMYXllclRyZWVIb3N0Q0Eod2Vi
UGFnZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxlcihmbHVzaFBlbmRpbmdMYXllckNoYW5n
ZXNDYWxsYmFjaywgdGhpcykKIHsKIH0KIAogTGF5ZXJUcmVlSG9zdENBTWFjOjp+TGF5ZXJUcmVl
SG9zdENBTWFjKCkKIHsKLSAgICBBU1NFUlQoIW1fZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVu
TG9vcE9ic2VydmVyKTsKICAgICBBU1NFUlQoIW1fcmVtb3RlTGF5ZXJDbGllbnQpOwogfQogCkBA
IC02OSw1MCArNjksMTcgQEAgdm9pZCBMYXllclRyZWVIb3N0Q0FNYWM6OnBsYXRmb3JtSW5pdGlh
bGl6ZShMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQogCiB2b2lkIExheWVyVHJl
ZUhvc3RDQU1hYzo6c2NoZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlJ1bkxvb3BSZWYg
Y3VycmVudFJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7Ci0gICAgCi0gICAgLy8gTWFr
ZSBzdXJlIHdlIHdha2UgdXAgdGhlIGxvb3Agb3IgdGhlIG9ic2VydmVyIGNvdWxkIGJlIGRlbGF5
ZWQgdW50aWwgc29tZSBvdGhlciBzb3VyY2UgZmlyZXMuCi0gICAgQ0ZSdW5Mb29wV2FrZVVwKGN1
cnJlbnRSdW5Mb29wKTsKLQotICAgIGlmIChtX2ZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1J1bkxv
b3BPYnNlcnZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUnVuIGJlZm9yZSB0aGUgQ29y
ZSBBbmltYXRpb24gY29tbWl0IG9ic2VydmVyLgotICAgIGNvbnN0IENGSW5kZXggcnVuTG9vcE9y
ZGVyID0gQ29yZUFuaW1hdGlvblJ1bkxvb3BPcmRlciAtIDE7Ci0gICAgQ0ZSdW5Mb29wT2JzZXJ2
ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHRoaXMsIDAsIDAsIDAgfTsKLSAgICBtX2ZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlc1J1bkxvb3BPYnNlcnZlci5hZG9wdENGKENGUnVuTG9vcE9ic2VydmVy
Q3JlYXRlKDAsIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5nIHwga0NGUnVuTG9vcEV4aXQsIHRydWUs
IHJ1bkxvb3BPcmRlciwgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyQ2Fs
bGJhY2ssICZjb250ZXh0KSk7Ci0KLSAgICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihjdXJyZW50UnVu
TG9vcCwgbV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIuZ2V0KCksIGtD
RlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgbV9sYXllckZsdXNoU2NoZWR1bGVyLnNjaGVkdWxl
KCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdENBTWFjOjpzZXRMYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKIHsKLSAgICBpZiAobV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGlu
Z0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAg
ICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1fZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUobV9mbHVzaFBlbmRp
bmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIuZ2V0KCkpOwotICAgIG1fZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyID0gbnVsbHB0cjsKKyAgICBtX2xheWVyRmx1c2hT
Y2hlZHVsZXIuc2V0RW5hYmxlZChsYXllckZsdXNoaW5nRW5hYmxlZCk7CiB9CiAKIHZvaWQgTGF5
ZXJUcmVlSG9zdENBTWFjOjppbnZhbGlkYXRlKCkKIHsKLSAgICBpZiAobV9mbHVzaFBlbmRpbmdM
YXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIpIHsKLSAgICAgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJ
bnZhbGlkYXRlKG1fZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyLmdldCgp
KTsKLSAgICAgICAgbV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIgPSBu
dWxscHRyOwotICAgIH0KKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsZXIuaW52YWxpZGF0ZUlmU2No
ZWR1bGVkKCk7CiAKICAgICBXS0NBUmVtb3RlTGF5ZXJDbGllbnRJbnZhbGlkYXRlKG1fcmVtb3Rl
TGF5ZXJDbGllbnQuZ2V0KCkpOwogICAgIG1fcmVtb3RlTGF5ZXJDbGllbnQgPSBudWxscHRyOwpA
QCAtMTQ4LDEyICsxMTUsMTAgQEAgdm9pZCBMYXllclRyZWVIb3N0Q0FNYWM6OnJlc3VtZVJlbmRl
cmluZygpCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBwb3N0Tm90
aWZpY2F0aW9uTmFtZTpAIk5TQ0FWaWV3UmVuZGVyRGlkUmVzdW1lTm90aWZpY2F0aW9uIiBvYmpl
Y3Q6bmlsIHVzZXJJbmZvOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6cm9vdCBm
b3JLZXk6QCJsYXllciJdXTsKIH0KIAotdm9pZCBMYXllclRyZWVIb3N0Q0FNYWM6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlc1J1bkxvb3BPYnNlcnZlckNhbGxiYWNrKENGUnVuTG9vcE9ic2VydmVy
UmVmLCBDRlJ1bkxvb3BBY3Rpdml0eSwgdm9pZCogY29udGV4dCkKK3ZvaWQgTGF5ZXJUcmVlSG9z
dENBTWFjOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXNDYWxsYmFjayh2b2lkKiBjb250ZXh0KQog
ewogICAgIExheWVyVHJlZUhvc3RDQU1hYyogbGF5ZXJUcmVlSG9zdCA9IHN0YXRpY19jYXN0PExh
eWVyVHJlZUhvc3RDQU1hYyo+KGNvbnRleHQpOwogCi0gICAgQVNTRVJUKGxheWVyVHJlZUhvc3Qt
Pm1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKTsKLQogICAgIC8vIFRoaXMgZ2V0cyBjYWxs
ZWQgb3V0c2lkZSBvZiB0aGUgbm9ybWFsIGV2ZW50IGxvb3Agc28gd3JhcCBpbiBhbiBhdXRvcmVs
ZWFzZSBwb29sCiAgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQ
b29sIGFsbG9jXSBpbml0XTsKICAgICBsYXllclRyZWVIb3N0LT5wZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaCgpOwpAQCAtMTYzLDkgKzEyOCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdENBTWFjOjpm
bHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXJDYWxsYmFjayhDRlJ1bkxvCiB2
b2lkIExheWVyVHJlZUhvc3RDQU1hYzo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQog
ewogICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBmbHVzaGVkIHRoZSBwZW5kaW5nIGxheWVyIGNoYW5n
ZXMsIHJlbW92ZSB0aGUgcnVuIGxvb3Agb2JzZXJ2ZXIuCi0gICAgQVNTRVJUKG1fZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyKTsKLSAgICBDRlJ1bkxvb3BPYnNlcnZlcklu
dmFsaWRhdGUobV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIuZ2V0KCkp
OwotICAgIG1fZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyID0gMDsKKyAg
ICBtX2xheWVyRmx1c2hTY2hlZHVsZXIuaW52YWxpZGF0ZSgpOwogCiAgICAgTGF5ZXJUcmVlSG9z
dENBOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115105</attachid>
            <date>2011-11-14 23:21:48 -0800</date>
            <delta_ts>2011-11-15 17:14:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72106-20111114232148.patch</filename>
            <type>text/plain</type>
            <size>36464</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk5MzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NzFkYTYwNDkxZWFkNDU4
MDkwYmFkYWY3MzkyOTI5NzVlMmU4YzU5Li5jZmI0MzhhNWZlZTYyZTk5MGE1MjgyMWNkYTllOWQ0
ZTkyYzU1ZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMTEtMTQgIEFuZHkg
RXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIENvbnNvbGlkYXRlIHRoZSBsb2dp
YyB0aGF0IGNyZWF0ZXMgcnVuIGxvb3Agb2JzZXJ2ZXJzIGZvciBmbHVzaGluZyBsYXllciB0cmVl
IGNoYW5nZXMgdG8gQ29yZUFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMg
b2Ygc2NoZWR1bGluZywgZW5hYmxpbmcgYW5kCisgICAgICAgIGludmFsaWRhdGluZyBhIHJ1biBs
b29wIG9ic2VydmVyIHRoYXQgZmlyZXMgYmVmb3JlIENvcmUgQW5pbWF0aW9uJ3MKKyAgICAgICAg
Y29tbWl0IG9ic2VydmVyLiBDbGllbnRzIGNhbiBzdWJjbGFzcyBMYXllckZsdXNoU2NoZWR1bGVy
Q2xpZW50IGFuZAorICAgICAgICBpbXBsZW1lbnQgZmx1c2hMYXllcnMoKSwgd2hpY2ggd2lsbCBi
ZSBjYWxsZWQgYnkgdGhlIG9ic2VydmVyLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyRmx1c2hTY2hlZHVsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXI6OnN1c3BlbmQpOiBTdXNwZW5kIHNjaGVk
dWxpbmcgYnkKKyAgICAgICAgaW52YWxpZGF0aW5nIHRoZSBydW4gbG9vcCBvYnNlcnZlci4gS2Vl
cCBhIGNvdW50IG9mIGNhbGxzIHRvIHN1c3BlbmQoKQorICAgICAgICBpbiBtX3N1c3BlbmRDb3Vu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVsZXI6OnJlc3VtZSk6IERlY3Jl
bWVudCBtX3N1c3BlbmRDb3VudC4KKyAgICAgICAgSW5zdGFsbCB0aGUgcnVuIGxvb3Agb2JzZXJ2
ZXIgd2hlbiBpdCByZWFjaGVzIDAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5
ZXJGbHVzaFNjaGVkdWxlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Rmx1c2hTY2hlZHVsZXJDbGllbnQ6On5MYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllckZsdXNoU2NoZWR1bGVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllckZsdXNoU2NoZWR1bGVyTWFj
LmNwcDogQWRkZWQuCisgICAgICAgIChMYXllckZsdXNoU2NoZWR1bGVyOjpMYXllckZsdXNoU2No
ZWR1bGVyKToKKyAgICAgICAgKExheWVyRmx1c2hTY2hlZHVsZXI6On5MYXllckZsdXNoU2NoZWR1
bGVyKToKKyAgICAgICAgKExheWVyRmx1c2hTY2hlZHVsZXI6OnJ1bkxvb3BPYnNlcnZlckNhbGxi
YWNrKTogQ2FsbCBmbHVzaExheWVycygpIG9uCisgICAgICAgIHRoZSBMYXllckZsdXNoU2NoZWR1
bGVyQ2xpZW50LgorICAgICAgICAoTGF5ZXJGbHVzaFNjaGVkdWxlcjo6c2NoZWR1bGUpOiBJbnN0
YWxsIHRoZSBydW4gbG9vcCBvYnNlcnZlci4KKyAgICAgICAgKExheWVyRmx1c2hTY2hlZHVsZXI6
OmludmFsaWRhdGUpOiBSZW1vdmUgdGhlIHJ1biBsb29wCisgICAgICAgIG9ic2VydmVyIGlmIGl0
IGlzIGluc3RhbGxlZC4KKwogMjAxMS0xMS0xMCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5j
b20+CiAKICAgICAgICAgV2ViS2l0Q1NTU2hhZGVyVmFsdWUuaCBpcyBub3QgYSBtZW1iZXIgb2Yg
dGhlIFdlYkNvcmUgdGFyZ2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggM2U2NDFjYzBhN2FmMjQ0MWYw
OGIzOWE0MDQ1MzkyYmQ3ZWFlMTg0Zi4uZGIzYzc1MmVkNWQ3Y2IwMjkxMGE0MzY5YWVjMzdkMjFj
NThiZTc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTExLTExICBB
bmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBDb25zb2xpZGF0ZSB0aGUg
bG9naWMgdGhhdCBjcmVhdGVzIHJ1biBsb29wIG9ic2VydmVycyBmb3IgZmx1c2hpbmcgbGF5ZXIg
dHJlZSBjaGFuZ2VzIHRvIENvcmVBbmltYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGNvZGUgdGhhdCBzY2hlZHVsZXMgbGF5ZXIgZmx1
c2hlcyBhbmQgdXNlIExheWVyRmx1c2hTY2hlZHVsZXIgaW5zdGVhZC4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKTogSW52YWxpZGF0
ZSB0aGUgcnVuIGxvb3Agb2JzZXJ2ZXIgYW5kIGRlc3Ryb3kgdGhlCisgICAgICAgIExheWVyRmx1
c2hDb250cm9sbGVyLgorICAgICAgICAoTGF5ZXJGbHVzaENvbnRyb2xsZXI6OmZsdXNoTGF5ZXJz
KTogUGVyZm9ybSB0aGUgd29yayB0aGF0CisgICAgICAgIGxheWVyU3luY1J1bkxvb3BPYnNlcnZl
ckNhbGxCYWNrIHVzZWQgdG8gZG8uCisgICAgICAgICgtW1dlYlZpZXcgX3NjaGVkdWxlQ29tcG9z
aXRpbmdMYXllclN5bmNdKTogSWYgbGF5ZXJGbHVzaENvbnRyb2xsZXIgaGFzCisgICAgICAgIHll
dCB0byBiZSBjcmVhdGVkLCBjcmVhdGUgaXQsIHRoZW4gc2NoZWR1bGUgYSBsYXllciBmbHVzaC4K
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgIChMYXllckZsdXNoQ29u
dHJvbGxlcjo6Y3JlYXRlKTogQ3JlYXRlIGEgTGF5ZXJGbHVzaENvbnRyb2xsZXIgdGhhdAorICAg
ICAgICBpbXBsZW1lbnRzIHRoZSBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50IGludGVyZmFjZSBh
bmQgY29udGFpbnMgYQorICAgICAgICBMYXllckZsdXNoU2NoZWR1bGVyIHdpdGggaXRzZWxmIGFz
IHRoZSBjbGllbnQuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKyAgICAgICAg
KExheWVyRmx1c2hDb250cm9sbGVyOjpzY2hlZHVsZUxheWVyRmx1c2gpOgorICAgICAgICAoTGF5
ZXJGbHVzaENvbnRyb2xsZXI6OmludmFsaWRhdGVPYnNlcnZlcik6CisgICAgICAgIChMYXllckZs
dXNoQ29udHJvbGxlcjo6TGF5ZXJGbHVzaENvbnRyb2xsZXIpOgorCiAyMDExLTExLTA3ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBzdGF0aWMgInBvbGlj
eSIgc3RhdGUgZnJvbSBTZWN1cml0eU9yaWdpbi5jcHAgdG8gU2VjdXJpdHlQb2xpY3kuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggZTEyOTc0YWZjY2QyMjBmNjI1YWJhMThkMWI2MmMwNjg5ODYyZDE4NC4uMDBh
ZTFjNjE1ODc1ZmEyNWFhNmY0ZWY3NWQ2YTQwNzJhODAxMmI5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI3IEBACisyMDExLTExLTE0ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDb25zb2xpZGF0ZSB0aGUgbG9naWMgdGhhdCBjcmVhdGVzIHJ1biBsb29wIG9ic2Vy
dmVycyBmb3IgZmx1c2hpbmcgbGF5ZXIgdHJlZSBjaGFuZ2VzIHRvIENvcmVBbmltYXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGNvZGUg
dGhhdCBzY2hlZHVsZXMgbGF5ZXIgZmx1c2hlcyBhbmQgdXNlIExheWVyRmx1c2hTY2hlZHVsZXIg
aW5zdGVhZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9jYS9tYWMvTGF5ZXJUcmVl
SG9zdENBTWFjLmg6IFJlcGxhY2UKKyAgICAgICAgbV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNS
dW5Mb29wT2JzZXJ2ZXIgd2l0aCBtX2xheWVyRmx1c2hTY2hlZHVsZXIKKyAgICAgICAgYW5kIGlt
cGxlbWVudCB0aGUgTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudCBpbnRlcmZhY2UuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL21hYy9MYXllclRyZWVIb3N0Q0FNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RDQU1hYzo6TGF5ZXJUcmVlSG9zdENBTWFjKTogSW5z
dGFudGlhdGUKKyAgICAgICAgbV9sYXllckZsdXNoU2NoZWR1bGVyIHdpdGggdGhlIExheWVyVHJl
ZUhvc3QgYXMgdGhlIGNsaWVudC4KKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdENBTWFj
Ojp+TGF5ZXJUcmVlSG9zdENBTWFjKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdENB
TWFjOjpzY2hlZHVsZUxheWVyRmx1c2gpOiBDYWxsIExheWVyRmx1c2hTY2hlZHVsZXI6OnNjaGVk
dWxlKCkuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RDQU1hYzo6c2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKTogQ2FsbAorICAgICAgICBMYXllckZsdXNoU2NoZWR1bGVyOjpz
dXNwZW5kKCkgb3IgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6cmVzdW1lKCkuCisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RDQU1hYzo6aW52YWxpZGF0ZSk6IENhbGwgTGF5ZXJGbHVzaFNjaGVk
dWxlcjo6aW52YWxpZGF0ZSgpLgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Q0FNYWM6
OmZsdXNoTGF5ZXJzKTogRG8gdGhlIHdvcmsgdGhhdAorICAgICAgICBmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXJDYWxsYmFjaygpIHVzZWQgdG8gZG8uCisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RDQU1hYzo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gp
OiBDYWxsIExheWVyRmx1c2hTY2hlZHVsZXI6OmludmFsaWRhdGUoKS4KKwogMjAxMS0xMS0xMCAg
QmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgT25jZSBtb3JlIGZvciB0
aGUgUVQgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDA4OTk1ODlhMWViNjMzMGEyZGUz
ZDg3YWFiNDg0YmM0YWNiMzc0M2IuLjlmMDc5Yzk2MzViYjkwZTQ2MzE4MDBhYmEwMGMyZDJjYmVm
NWM3ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC01NjYsNiArNTY2LDEyIEBAIF9fWk43V2Vi
Q29yZTE5QmFja0ZvcndhcmRMaXN0SW1wbDhjYXBhY2l0eUV2CiBfX1pON1dlYkNvcmUxOUJhY2tG
b3J3YXJkTGlzdEltcGw5Z29Gb3J3YXJkRXYKIF9fWk43V2ViQ29yZTE5QmFja0ZvcndhcmRMaXN0
SW1wbEMxRVBOU180UGFnZUUKIF9fWk43V2ViQ29yZTE5Q1NTU3R5bGVEZWNsYXJhdGlvbjExc2V0
UHJvcGVydHlFUktOM1dURjZTdHJpbmdFUzRfUmkKK19fWk43V2ViQ29yZTE5TGF5ZXJGbHVzaFNj
aGVkdWxlcjEwaW52YWxpZGF0ZUV2CitfX1pON1dlYkNvcmUxOUxheWVyRmx1c2hTY2hlZHVsZXI2
cmVzdW1lRXYKK19fWk43V2ViQ29yZTE5TGF5ZXJGbHVzaFNjaGVkdWxlcjdzdXNwZW5kRXYKK19f
Wk43V2ViQ29yZTE5TGF5ZXJGbHVzaFNjaGVkdWxlcjhzY2hlZHVsZUV2CitfX1pON1dlYkNvcmUx
OUxheWVyRmx1c2hTY2hlZHVsZXJDMUVQTlNfMjVMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50RQor
X19aTjdXZWJDb3JlMTlMYXllckZsdXNoU2NoZWR1bGVyRDFFdgogX19aTjdXZWJDb3JlMTlSZXNv
dXJjZVJlcXVlc3RCYXNlMTFzZXRIVFRQQm9keUVOM1dURjEwUGFzc1JlZlB0cklOU184Rm9ybURh
dGFFRUUKIF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEzc2V0SFRUUE1ldGhvZEVS
S04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTE4c2V0SFRU
UEhlYWRlckZpZWxkRVBLY1JLTjNXVEY2U3RyaW5nRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBmZWU4N2I1MWFmNjM0NTdmZDMx
N2M0NzVhYTIyZjE3NzljMjk5NjkuLmFjNzJmODE3YTcwZWY0YjNjNTRkMTk3ZDVkNTg4ZGQxM2Fm
OWRmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTY4OSw4ICs2ODksMTIgQEAKIAkJMjlBQ0IyMTIxNDNFNzEyODAwNkJDQTVG
IC8qIEFjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyOUFDQjIxMTE0M0U3MTI4MDA2QkNBNUYgLyogQWNjZXNzaWJp
bGl0eU1vY2tPYmplY3QuaCAqLzsgfTsKIAkJMjlBQ0IyMTQxNDNFNzQ5ODAwNkJDQTVGIC8qIEFj
Y2Vzc2liaWxpdHlNb2NrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI5QUNCMjEzMTQzRTc0OTgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5
TW9ja09iamVjdC5jcHAgKi87IH07CiAJCTI5Q0Q2MURFMTQ2RDAyODkwMDY4RTgyQSAvKiBXZWJL
aXRDU1NTaGFkZXJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTBCNDIxNTcxNDY5NzY5NjAwODdFNjA0IC8qIFdlYktpdENTU1NoYWRlclZhbHVl
LmggKi87IH07CisJCTI5Q0Q2MUU4MTQ2RDA3MzYwMDY4RTgyQSAvKiBMYXllckZsdXNoU2NoZWR1
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUNE
NjFFNzE0NkQwNzM2MDA2OEU4MkEgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTI5Q0Q2MUVCMTQ2RDA3NEYw
MDY4RTgyQSAvKiBMYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q2MUVBMTQ2RDA3NEYwMDY4RTgyQSAvKiBM
YXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcCAqLzsgfTsKIAkJMjlEN0JDRjYxNDQ0QUY1ODAwNzA2
MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RDdCQ0Y1MTQ0NEFGNTgwMDcwNjE5QyAvKiBBY2Nl
c3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHAgKi87IH07CiAJCTI5RDdCQ0ZBMTQ0NEFGN0QwMDcwNjE5
QyAvKiBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjlEN0JDRjkxNDQ0QUY3RDAwNzA2MTlDIC8qIEFjY2Vzc2li
aWxpdHlTcGluQnV0dG9uLmggKi87IH07CisJCTI5RUE5NUM3MTQ3MjQwRDIwMDBEQTQxQSAvKiBM
YXllckZsdXNoU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI5RUE5NUM2MTQ3MjQwRDIwMDBEQTQxQSAvKiBMYXllckZsdXNoU2NoZWR1
bGVyLmNwcCAqLzsgfTsKKwkJMjlFQTk1QzkxNDcyNDBGQjAwMERBNDFBIC8qIExheWVyRmx1c2hT
Y2hlZHVsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI5RUE5NUM4MTQ3MjQwRkIwMDBEQTQxQSAvKiBMYXllckZsdXNoU2NoZWR1bGVyQ2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUyQzYxMkE1ODlF
QzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwogCQkyQkU4RTJDOTEy
QTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM4MTJBNThBMDEwMEZBRDU1
MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwICovOyB9OwogCQkyRDNBMEUzNjEzQTdENzYx
MDBFODVBRjAgLyogU1ZHUGFyc2luZ0Vycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDNBMEUzNTEzQTdENzYxMDBFODVBRjAgLyogU1ZHUGFyc2lu
Z0Vycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc3ODMsOCArNzc4NywxMiBAQAogCQkyOUE4MTI0NzBGQkI5Q0E5MDA1MTAyOTMgLyogQVhP
YmplY3RDYWNoZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEFYT2JqZWN0Q2FjaGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5QUNC
MjExMTQzRTcxMjgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUFDQjIxMzE0M0U3NDk4MDA2QkNBNUYgLyogQWNj
ZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyOUNENjFFNzE0NkQwNzM2MDA2OEU4MkEgLyogTGF5ZXJGbHVzaFNjaGVkdWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXllckZsdXNoU2NoZWR1bGVyLmg7
IHBhdGggPSBjYS9MYXllckZsdXNoU2NoZWR1bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI5Q0Q2MUVBMTQ2RDA3NEYwMDY4RTgyQSAvKiBMYXllckZsdXNoU2NoZWR1bGVyTWFj
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExheWVyRmx1c2hTY2hl
ZHVsZXJNYWMuY3BwOyBwYXRoID0gY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUQ3QkNGNTE0NDRBRjU4MDA3MDYxOUMgLyog
QWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwOyBwYXRoID0gYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKIAkJMjlEN0JDRjkxNDQ0QUY3RDAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTcGluQnV0
dG9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5RUE5NUM2MTQ3MjQwRDIwMDBE
QTQxQSAvKiBMYXllckZsdXNoU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IExheWVyRmx1c2hTY2hlZHVsZXIuY3BwOyBwYXRoID0gY2EvTGF5ZXJGbHVz
aFNjaGVkdWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5RUE5NUM4MTQ3
MjQwRkIwMDBEQTQxQSAvKiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaDsgcGF0aCA9
IGNhL0xheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIu
aDsgcGF0aCA9IHBhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNl
dFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBIVE1MTWV0
YUNoYXJzZXRQYXJzZXIuY3BwOyBwYXRoID0gcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEM0EwRTM1MTNBN0Q3NjEwMEU4NUFG
MCAvKiBTVkdQYXJzaW5nRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHUGFyc2luZ0Vycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDk0Miw2
ICsxNDk1MCw3IEBACiAJCTQ5NTg3ODFFMTJBNTdEQkMwMDcyMzhBQyAvKiBtYWMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTI5Q0Q2MUVBMTQ2RDA3NEYw
MDY4RTgyQSAvKiBMYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcCAqLywKIAkJCQk0OTU4NzgxRjEy
QTU3RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbSAqLywKIAkJCQk0OTU4
NzgyMDEyQTU3RERGMDA3MjM4QUMgLyogUGxhdGZvcm1DQUxheWVyTWFjLm1tICovLAogCQkJKTsK
QEAgLTE0OTc4LDYgKzE0OTg3LDkgQEAKIAkJCQk0OTU4NzgxRTEyQTU3REJDMDA3MjM4QUMgLyog
bWFjICovLAogCQkJCTQ5OUIzRUQ0MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0Eu
Y3BwICovLAogCQkJCTQ5OUIzRUQ1MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0Eu
aCAqLywKKwkJCQkyOUVBOTVDNjE0NzI0MEQyMDAwREE0MUEgLyogTGF5ZXJGbHVzaFNjaGVkdWxl
ci5jcHAgKi8sCisJCQkJMjlDRDYxRTcxNDZEMDczNjAwNjhFODJBIC8qIExheWVyRmx1c2hTY2hl
ZHVsZXIuaCAqLywKKwkJCQkyOUVBOTVDODE0NzI0MEZCMDAwREE0MUEgLyogTGF5ZXJGbHVzaFNj
aGVkdWxlckNsaWVudC5oICovLAogCQkJCTQ5OUIzRURDMTI4REI1MDEwMEU3MjZDMiAvKiBQbGF0
Zm9ybUNBQW5pbWF0aW9uLmggKi8sCiAJCQkJNDk5QjNFQzMxMjhDQ0M0NzAwRTcyNkMyIC8qIFBs
YXRmb3JtQ0FMYXllci5oICovLAogCQkJCTQ5M0U1RTA4MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI0NjU0LDYgKzI0NjY2LDggQEAKIAkJCQk3MTUz
N0EwMTE0NkJEOUQ3MDA4QkQ2MTUgLyogU1ZHUGF0aERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMzEzRjY2MTQ0M0IzNUYwMDZFMkE5MCAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjlDRDYxREUxNDZEMDI4OTAwNjhFODJBIC8qIFdlYktpdENTU1NoYWRl
clZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyOUNENjFFODE0NkQwNzM2MDA2OEU4MkEgLyog
TGF5ZXJGbHVzaFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjlFQTk1QzkxNDcyNDBG
QjAwMERBNDFBIC8qIExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMjc1MTUsNiArMjc1MjksOCBAQAogCQkJCTcxMzQ0OTZEMTQ2OTQxQjMwMDcyMDMxMiAvKiBT
VkdMZW5ndGhDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NEQyREE0MTQ2QTUzNUQw
MEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTMxM0Y2
NTE0NDNCMzVGMDA2RTJBOTAgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMjlDRDYxRUIxNDZEMDc0RjAwNjhFODJBIC8qIExheWVyRmx1c2hTY2hlZHVsZXJN
YWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjlFQTk1QzcxNDcyNDBEMjAwMERBNDFBIC8qIExh
eWVyRmx1c2hTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXllckZsdXNoU2NoZWR1bGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyRmx1c2hTY2hlZHVsZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFjNWUxMmQzOWFkYzE1MjdjZTIyYTUxYzViMGE3MjVlNjNiODAzNWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9MYXll
ckZsdXNoU2NoZWR1bGVyLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckZs
dXNoU2NoZWR1bGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgTGF5ZXJG
bHVzaFNjaGVkdWxlcjo6c3VzcGVuZCgpCit7CisgICAgaWYgKCFtX3N1c3BlbmRDb3VudCkKKyAg
ICAgICAgaW52YWxpZGF0ZSgpOworICAgIAorICAgICsrbV9zdXNwZW5kQ291bnQ7CisgICAgQVNT
RVJUKG1fc3VzcGVuZENvdW50KTsKK30KKyAgICAKK3ZvaWQgTGF5ZXJGbHVzaFNjaGVkdWxlcjo6
cmVzdW1lKCkKK3sKKyAgICAtLW1fc3VzcGVuZENvdW50OworICAgIEFTU0VSVChtX3N1c3BlbmRD
b3VudCA+IC0xKTsKKyAgICAKKyAgICBpZiAoIW1fc3VzcGVuZENvdW50KQorICAgICAgICBzY2hl
ZHVsZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9MYXllckZsdXNoU2NoZWR1bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9MYXllckZsdXNoU2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYxYzNh
OWE2ODVjNWE3ZmQwMDNhYzZjNmJlMTg5OGI4ZjIxMzZmMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0xheWVyRmx1c2hTY2hlZHVsZXIuaApA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIExheWVyRmx1c2hTY2hlZHVsZXJfaAorI2RlZmluZSBM
YXllckZsdXNoU2NoZWR1bGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIkxheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgTGF5ZXJG
bHVzaFNjaGVkdWxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJGbHVzaFNjaGVk
dWxlcik7CitwdWJsaWM6CisgICAgTGF5ZXJGbHVzaFNjaGVkdWxlcihMYXllckZsdXNoU2NoZWR1
bGVyQ2xpZW50Kik7CisgICAgfkxheWVyRmx1c2hTY2hlZHVsZXIoKTsKKworICAgIHZvaWQgc2No
ZWR1bGUoKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZvaWQgc3VzcGVuZCgpOwor
ICAgIHZvaWQgcmVzdW1lKCk7CisKK3ByaXZhdGU6CisgICAgaW50IG1fc3VzcGVuZENvdW50Owor
ICAgIExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQqIG1fY2xpZW50OworICAgIAorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wT2JzZXJ2ZXJSZWY+IG1fcnVuTG9vcE9i
c2VydmVyOworICAgIHN0YXRpYyB2b2lkIHJ1bkxvb3BPYnNlcnZlckNhbGxiYWNrKENGUnVuTG9v
cE9ic2VydmVyUmVmLCBDRlJ1bkxvb3BBY3Rpdml0eSwgdm9pZCogY29udGV4dCk7CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIExheWVyRmx1c2hTY2hlZHVsZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJGbHVzaFNjaGVk
dWxlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvTGF5ZXJG
bHVzaFNjaGVkdWxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiODYwYmMxMzk3NmY0NTU0MzQwMTFj
OGE0YTk5ZGUyMzAzZjRlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9MYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50LmgKQEAgLTAsMCArMSw0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBMYXllckZsdXNoU2NoZWR1bGVyQ2xpZW50X2gKKyNkZWZpbmUgTGF5ZXJG
bHVzaFNjaGVkdWxlckNsaWVudF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudCgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaExheWVycygpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2VuZGlmIC8vIExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hTY2hlZHVsZXJNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyRmx1c2hT
Y2hlZHVsZXJNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMjliNGY3ZGRkNzhjNDA4ZmIzYzIyNDAwOGY5
OTk2YWJlYjlkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAKQEAgLTAsMCArMSw4NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiTGF5ZXJGbHVzaFNjaGVkdWxlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBDRkluZGV4IENvcmVBbmltYXRpb25SdW5Mb29wT3JkZXIgPSAy
MDAwMDAwOworc3RhdGljIGNvbnN0IENGSW5kZXggTGF5ZXJGbHVzaFJ1bkxvb3BPcmRlciA9IENv
cmVBbmltYXRpb25SdW5Mb29wT3JkZXIgLSAxOworCitMYXllckZsdXNoU2NoZWR1bGVyOjpMYXll
ckZsdXNoU2NoZWR1bGVyKExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQqIGNsaWVudCkKKyAgICA6
IG1fc3VzcGVuZENvdW50KDApCisgICAgLCBtX2NsaWVudChjbGllbnQpCit7CisgICAgQVNTRVJU
X0FSRyhjbGllbnQsIGNsaWVudCk7Cit9CisKK0xheWVyRmx1c2hTY2hlZHVsZXI6On5MYXllckZs
dXNoU2NoZWR1bGVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcnVuTG9vcE9ic2VydmVyKTsKK30KKwor
dm9pZCBMYXllckZsdXNoU2NoZWR1bGVyOjpydW5Mb29wT2JzZXJ2ZXJDYWxsYmFjayhDRlJ1bkxv
b3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aXZpdHksIHZvaWQqIGNvbnRleHQpCit7CisgICAg
TGF5ZXJGbHVzaFNjaGVkdWxlciogbGF5ZXJGbHVzaFNjaGVkdWxlciA9IHN0YXRpY19jYXN0PExh
eWVyRmx1c2hTY2hlZHVsZXIqPihjb250ZXh0KTsKKyAgICBBU1NFUlQobGF5ZXJGbHVzaFNjaGVk
dWxlci0+bV9ydW5Mb29wT2JzZXJ2ZXIpOworICAgIEFTU0VSVCghbGF5ZXJGbHVzaFNjaGVkdWxl
ci0+bV9zdXNwZW5kQ291bnQpOworICAgIGxheWVyRmx1c2hTY2hlZHVsZXItPm1fY2xpZW50LT5m
bHVzaExheWVycygpOworfQorCit2b2lkIExheWVyRmx1c2hTY2hlZHVsZXI6OnNjaGVkdWxlKCkK
K3sKKyAgICBpZiAobV9zdXNwZW5kQ291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIENGUnVu
TG9vcFJlZiBjdXJyZW50UnVuTG9vcCA9IENGUnVuTG9vcEdldEN1cnJlbnQoKTsKKworICAgIC8v
IE1ha2Ugc3VyZSB3ZSB3YWtlIHVwIHRoZSBsb29wIG9yIHRoZSBvYnNlcnZlciBjb3VsZCBiZSBk
ZWxheWVkIHVudGlsIHNvbWUgb3RoZXIgc291cmNlIGZpcmVzLgorICAgIENGUnVuTG9vcFdha2VV
cChjdXJyZW50UnVuTG9vcCk7CisKKyAgICBpZiAobV9ydW5Mb29wT2JzZXJ2ZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIENGUnVuTG9vcE9ic2VydmVyQ29udGV4dCBjb250ZXh0ID0geyAwLCB0
aGlzLCAwLCAwLCAwIH07CisgICAgbV9ydW5Mb29wT2JzZXJ2ZXIuYWRvcHRDRihDRlJ1bkxvb3BP
YnNlcnZlckNyZWF0ZSgwLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0
LCB0cnVlLCBMYXllckZsdXNoUnVuTG9vcE9yZGVyLCBydW5Mb29wT2JzZXJ2ZXJDYWxsYmFjaywg
JmNvbnRleHQpKTsKKworICAgIENGUnVuTG9vcEFkZE9ic2VydmVyKGN1cnJlbnRSdW5Mb29wLCBt
X3J1bkxvb3BPYnNlcnZlci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKK30KKwordm9p
ZCBMYXllckZsdXNoU2NoZWR1bGVyOjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAobV9ydW5Mb29w
T2JzZXJ2ZXIpIHsKKyAgICAgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKG1fcnVuTG9v
cE9ic2VydmVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wT2JzZXJ2ZXIgPSBudWxscHRyOyAg
IAorICAgIH0KK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQppbmRleCAwYWRjZTczZDZjZTlhMjZiNmZhYjA4NGVjZjI1ODE5YzYxNDQzYjQ3Li43ZmMwYThk
MDhhNDc2MDUxN2MzN2YyMGM4OGIyN2E2YmNiMGJiZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCkBAIC0zOTQsOSArMzk0LDYgQEAgRmluZE9wdGlvbnMgY29yZU9wdGlvbnMo
V2ViRmluZE9wdGlvbnMgb3B0aW9ucykKICsgKHZvaWQpX3ByZWZsaWdodFNwZWxsQ2hlY2tlcjsK
IC0gKEJPT0wpX2NvbnRpbnVvdXNDaGVja2luZ0FsbG93ZWQ7CiAtIChOU1Jlc3BvbmRlciAqKV9y
ZXNwb25kZXJGb3JSZXNwb25kZXJPcGVyYXRpb25zOwotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLS0gKHZvaWQpX2NsZWFyTGF5ZXJTeW5jTG9vcE9ic2VydmVyOwotI2VuZGlmCiAj
aWYgRU5BQkxFKEdMSUJfU1VQUE9SVCkKIC0gKHZvaWQpX2NsZWFyR2xpYkxvb3BPYnNlcnZlcjsK
ICNlbmRpZgpAQCAtMTA5Niw3ICsxMDkzLDEwIEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRl
YXJkb3duRW5hYmxlZCgpCiAgICAgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIFtzZWxmIF9jbGVhckxheWVyU3luY0xvb3BPYnNlcnZlcl07CisgICAgaWYgKF9wcml2
YXRlLT5sYXllckZsdXNoQ29udHJvbGxlcikgeworICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJGbHVz
aENvbnRyb2xsZXItPmludmFsaWRhdGVPYnNlcnZlcigpOworICAgICAgICBfcHJpdmF0ZS0+bGF5
ZXJGbHVzaENvbnRyb2xsZXIgPSBudWxscHRyOworICAgIH0KICNlbmRpZgogICAgIAogI2lmIEVO
QUJMRShHTElCX1NVUFBPUlQpCkBAIC01ODU5LDE4ICs1ODU5LDYgQEAgc3RhdGljIGlubGluZSB1
aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50NjRfdCBudW0pCiAjZW5kaWYKIH0KIAotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLS0gKHZvaWQpX2NsZWFyTGF5ZXJTeW5jTG9v
cE9ic2VydmVyCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+bGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUoX3By
aXZhdGUtPmxheWVyU3luY1J1bkxvb3BPYnNlcnZlcik7Ci0gICAgQ0ZSZWxlYXNlKF9wcml2YXRl
LT5sYXllclN5bmNSdW5Mb29wT2JzZXJ2ZXIpOwotICAgIF9wcml2YXRlLT5sYXllclN5bmNSdW5M
b29wT2JzZXJ2ZXIgPSAwOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoR0xJQl9TVVBQT1JUKQog
LSAodm9pZClfY2xlYXJHbGliTG9vcE9ic2VydmVyCiB7CkBAIC02MDc2LDEyICs2MDY0LDEwIEBA
IHN0YXRpYyBpbmxpbmUgdWludDY0X3Qgcm91bmRVcFRvUG93ZXJPZjIodWludDY0X3QgbnVtKQog
ICAgICAgIHVudGlsIHRoZSB0aW1lIGlzIHJpZ2h0IChlc3NlbnRpYWxseSB3aGVuIHRoZXJlIGFy
ZSBubyBtb3JlIHBlbmRpbmcgbGF5b3V0cykuCiAgICAgCiAqLwotCi1zdGF0aWMgdm9pZCBsYXll
clN5bmNSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5M
b29wQWN0aXZpdHksIHZvaWQqIGluZm8pCit2b2lkIExheWVyRmx1c2hDb250cm9sbGVyOjpmbHVz
aExheWVycygpCiB7Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
Vmlldyo+KGluZm8pOwotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbd2ViVmlldyB3aW5kb3ddOwot
CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFttX3dlYlZpZXcgd2luZG93XTsKKyAgICAKICAgICAv
LyBBbiBOU1dpbmRvdyBtYXkgbm90IGRpc3BsYXkgaW4gdGhlIG5leHQgcnVubG9vcCBjeWNsZSBh
ZnRlciBkaXJ0eWluZyBkdWUgdG8gZGVsYXllZCB3aW5kb3cgZGlzcGxheSBsb2dpYywKICAgICAv
LyBpbiB3aGljaCBjYXNlIHRoaXMgb2JzZXJ2ZXIgY2FuIGZpcmUgZmlyc3QuIFNvIGlmIHRoZSB3
aW5kb3cgaXMgZHVlIGZvciBhIGRpc3BsYXksIGRvbid0IGNvbW1pdAogICAgIC8vIGxheWVyIGNo
YW5nZXMsIG90aGVyd2lzZSB0aGV5J2xsIHNob3cgb24gc2NyZWVuIGJlZm9yZSB0aGUgdmlldyBk
cmF3aW5nLgpAQCAtNjA5Niw4ICs2MDgyLDggQEAgc3RhdGljIHZvaWQgbGF5ZXJTeW5jUnVuTG9v
cE9ic2VydmVyQ2FsbEJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGkKICAg
ICBpZiAodmlld3NOZWVkRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFt3ZWJW
aWV3IF9zeW5jQ29tcG9zaXRpbmdDaGFuZ2VzXSkgewotICAgICAgICBbd2ViVmlldyBfY2xlYXJM
YXllclN5bmNMb29wT2JzZXJ2ZXJdOworICAgIGlmIChbbV93ZWJWaWV3IF9zeW5jQ29tcG9zaXRp
bmdDaGFuZ2VzXSkgeworICAgICAgICBtX2xheWVyRmx1c2hTY2hlZHVsZXIuaW52YWxpZGF0ZSgp
OwogICAgICAgICAvLyBBcHBLaXQgbWF5IGhhdmUgZGlzYWJsZWQgc2NyZWVuIHVwZGF0ZXMsIHRo
aW5raW5nIGFuIHVwY29taW5nIHdpbmRvdyBmbHVzaCB3aWxsIHJlLWVuYWJsZSB0aGVtLgogICAg
ICAgICAvLyBJbiBjYXNlIHNldE5lZWRzRGlzcGxheUluUmVjdCgpIGhhcyBwcmV2ZW50ZWQgdGhl
IHdpbmRvdyBmcm9tIG5lZWRpbmcgdG8gYmUgZmx1c2hlZCwgcmUtZW5hYmxlIHNjcmVlbgogICAg
ICAgICAvLyB1cGRhdGVzIGhlcmUuCkBAIC02MTA2LDM0ICs2MDkyLDE1IEBAIHN0YXRpYyB2b2lk
IGxheWVyU3luY1J1bkxvb3BPYnNlcnZlckNhbGxCYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBD
RlJ1bkxvb3BBY3RpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gU2luY2UgdGhlIFdlYlZpZXcg
ZG9lcyBub3QgbmVlZCBkaXNwbGF5LCAtdmlld1dpbGxEcmF3IHdpbGwgbm90IGJlIGNhbGxlZC4g
UGVyZm9ybSBwZW5kaW5nIGxheW91dCBub3csCiAgICAgICAgIC8vIHNvIHRoYXQgdGhlIGxheWVy
cyBkcmF3IHdpdGggdXAtdG8tZGF0ZSBsYXlvdXQuIAotICAgICAgICBbd2ViVmlldyBfdmlld1dp
bGxEcmF3SW50ZXJuYWxdOworICAgICAgICBbbV93ZWJWaWV3IF92aWV3V2lsbERyYXdJbnRlcm5h
bF07CiAgICAgfQogfQogCiAtICh2b2lkKV9zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jCiB7
Ci0gICAgQ0ZSdW5Mb29wUmVmIGN1cnJlbnRSdW5Mb29wID0gQ0ZSdW5Mb29wR2V0Q3VycmVudCgp
OwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIHdha2UgdXAgdGhlIGxvb3Agb3IgdGhlIG9ic2VydmVy
IGNvdWxkIGJlIGRlbGF5ZWQgdW50aWwgc29tZSBvdGhlciBzb3VyY2UgZmlyZXMuCi0gICAgQ0ZS
dW5Mb29wV2FrZVVwKGN1cnJlbnRSdW5Mb29wKTsKLQotICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJT
eW5jUnVuTG9vcE9ic2VydmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBSdW4gYWZ0ZXIg
QXBwS2l0IGRvZXMgaXRzIHdpbmRvdyB1cGRhdGUuIElmIHdlIGRvIGFueSBwYWludGluZywgd2Un
bGwgY29tbWl0Ci0gICAgLy8gbGF5ZXIgY2hhbmdlcyBmcm9tIEZyYW1lVmlldzo6cGFpbnRDb250
ZW50cygpLCBvdGhlcndpc2Ugd2UnbGwgY29tbWl0IHZpYQotICAgIC8vIF9zeW5jQ29tcG9zaXRp
bmdDaGFuZ2VzIHdoZW4gdGhpcyBvYnNlcnZlciBmaXJlcy4KLSAgICAvLyBBbHNvIGxlYXZlIGEg
c2xvdCBmb3IgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlciwgaWYgaXQn
cyBlbmFibGVkCi0gICAgY29uc3QgQ0ZJbmRleCBydW5Mb29wT3JkZXIgPSBOU0Rpc3BsYXlXaW5k
b3dSdW5Mb29wT3JkZXJpbmcgKyAyOwotCi0gICAgLy8gVGhlIFdlYlZpZXcgYWx3YXlzIG91dGxp
dmVzIHRoZSBvYnNlcnZlciwgc28gbm8gbmVlZCB0byByZXRhaW4vcmVsZWFzZS4KLSAgICBDRlJ1
bkxvb3BPYnNlcnZlckNvbnRleHQgY29udGV4dCA9IHsgMCwgc2VsZiwgMCwgMCwgMCB9OwotCi0g
ICAgX3ByaXZhdGUtPmxheWVyU3luY1J1bkxvb3BPYnNlcnZlciA9IENGUnVuTG9vcE9ic2VydmVy
Q3JlYXRlKE5VTEwsCi0gICAgICAgIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5nIHwga0NGUnVuTG9v
cEV4aXQsIHRydWUgLyogcmVwZWF0cyAqLywKLSAgICAgICAgcnVuTG9vcE9yZGVyLCBsYXllclN5
bmNSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjaywgJmNvbnRleHQpOwotCi0gICAgQ0ZSdW5Mb29wQWRk
T2JzZXJ2ZXIoY3VycmVudFJ1bkxvb3AsIF9wcml2YXRlLT5sYXllclN5bmNSdW5Mb29wT2JzZXJ2
ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgaWYgKCFfcHJpdmF0ZS0+bGF5ZXJGbHVz
aENvbnRyb2xsZXIpCisgICAgICAgIF9wcml2YXRlLT5sYXllckZsdXNoQ29udHJvbGxlciA9IExh
eWVyRmx1c2hDb250cm9sbGVyOjpjcmVhdGUoc2VsZik7CisgICAgX3ByaXZhdGUtPmxheWVyRmx1
c2hDb250cm9sbGVyLT5zY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmggYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKaW5kZXggOWIzMjU4MzYzMjdhNGQ2NGI1Mjgx
NTU2MmY3M2ZiYjVjY2U2ZTQ1NS4uMzY4NjIwMjIyMzkxM2Q3YTdmMWI2NWVkZjQwZTYxYTk1ZTRh
N2IyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaApAQCAtMjksNiAr
MjksOCBAQAogCiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJEZWxl
Z2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oIgorI2ltcG9ydCA8V2ViQ29yZS9MYXllckZsdXNo
U2NoZWR1bGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZUtleWJvYXJkVUlNb2RlLmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgpAQCAtNTcs
NiArNTksMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZXh0ZXJuIEJPT0wgYXBwbGljYXRpb25J
c1Rlcm1pbmF0aW5nOwogZXh0ZXJuIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50OwogCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorY2xhc3MgTGF5ZXJGbHVzaENvbnRyb2xs
ZXIgOiBwdWJsaWMgV2ViQ29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJGbHVzaENvbnRyb2xsZXI+IGNyZWF0ZShXZWJW
aWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllckZs
dXNoQ29udHJvbGxlcih3ZWJWaWV3KSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBm
bHVzaExheWVycygpOworICAgIAorICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAg
dm9pZCBpbnZhbGlkYXRlT2JzZXJ2ZXIoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgTGF5ZXJGbHVz
aENvbnRyb2xsZXIoV2ViVmlldyopOworICAgIAorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKyAg
ICBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1bGVyIG1fbGF5ZXJGbHVzaFNjaGVkdWxlcjsKK307
CisjZW5kaWYKKwogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gV2ViVmlld0Rh
dGEuCiBAaW50ZXJmYWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmplY3QgewogQHB1YmxpYwpAQCAt
MTQ4LDggKzE3MSw3IEBAIGV4dGVybiBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudDsKICAg
ICAvLyBzbyB0aGF0IHRoZSBOU1ZpZXcgZHJhd2luZyBpcyB2aXN1YWxseSBzeW5jaHJvbml6ZWQg
d2l0aCBDQUxheWVyIHVwZGF0ZXMuCiAgICAgQk9PTCBuZWVkc09uZVNob3REcmF3aW5nU3luY2hy
b25pemF0aW9uOwogICAgIEJPT0wgcG9zdHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nTm90aWZpY2F0
aW9uczsKLSAgICAvLyBSdW4gbG9vcCBvYnNlcnZlciB1c2VkIHRvIGltcGxlbWVudCB0aGUgY29t
cG9zaXRpbmcgZXF1aXZhbGVudCBvZiAtdmlld1dpbGxEcmF3Ci0gICAgQ0ZSdW5Mb29wT2JzZXJ2
ZXJSZWYgbGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVyOworICAgIE93blB0cjxMYXllckZsdXNoQ29u
dHJvbGxlcj4gbGF5ZXJGbHVzaENvbnRyb2xsZXI7CiAjZW5kaWYKIAogICAgIE5TUGFzdGVib2Fy
ZCAqaW5zZXJ0aW9uUGFzdGVib2FyZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdE
YXRhLm1tCmluZGV4IDJjYmM4NjM3YTAyMjUwMzhjMzdiNzgzOTY2NmY3OWU0Y2NjN2IzNWQuLmRl
OTNkY2MxYTc4NmU1NTA0ZDM1NTM3MGFmNjQzMDQ5OWZjZGZkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQpAQCAtNDAsNiArNDAsMjUgQEAKIEJPT0wgYXBwbGlj
YXRpb25Jc1Rlcm1pbmF0aW5nID0gTk87CiBpbnQgcGx1Z2luRGF0YWJhc2VDbGllbnRDb3VudCA9
IDA7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lkIExheWVyRmx1c2hD
b250cm9sbGVyOjpzY2hlZHVsZUxheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFNjaGVk
dWxlci5zY2hlZHVsZSgpOworfQorCit2b2lkIExheWVyRmx1c2hDb250cm9sbGVyOjppbnZhbGlk
YXRlT2JzZXJ2ZXIoKQoreworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxlci5pbnZhbGlkYXRlKCk7
Cit9CisKK0xheWVyRmx1c2hDb250cm9sbGVyOjpMYXllckZsdXNoQ29udHJvbGxlcihXZWJWaWV3
KiB3ZWJWaWV3KQorICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCisgICAgLCBtX2xheWVyRmx1c2hT
Y2hlZHVsZXIodGhpcykKK3sKKyAgICBBU1NFUlRfQVJHKHdlYlZpZXcsIHdlYlZpZXcpOworfQor
I2VuZGlmCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJWaWV3UHJpdmF0ZQogCiArICh2b2lkKWluaXRp
YWxpemUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9t
YWMvTGF5ZXJUcmVlSG9zdENBTWFjLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvY2EvbWFjL0xheWVyVHJlZUhvc3RDQU1hYy5oCmluZGV4IGJmOTk2NjAyNDdkYzdjODY3Nzdh
YzQ4NWJlZTM2MjRkYmVmZTg4MjQuLmIwYTA0OTI2NzRkMGRjYmYzOTA3MDNiNmMyM2EzMjEzNDdh
YjA0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9jYS9t
YWMvTGF5ZXJUcmVlSG9zdENBTWFjLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2NhL21hYy9MYXllclRyZWVIb3N0Q0FNYWMuaApAQCAtMjcsMTUgKzI3LDE1IEBACiAj
ZGVmaW5lIExheWVyVHJlZUhvc3RDQU1hY19oCiAKICNpbmNsdWRlICJMYXllclRyZWVIb3N0Q0Eu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0xheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAKLSNkZWZpbmUgQ29yZUFuaW1hdGlvblJ1bkxvb3BPcmRlciAyMDAwMDAwCi0KIHR5
cGVkZWYgc3RydWN0IF9fV0tDQVJlbW90ZUxheWVyQ2xpZW50UmVmKiBXS0NBUmVtb3RlTGF5ZXJD
bGllbnRSZWY7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBMYXllclRyZWVIb3N0Q0FN
YWMgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdENBIHsKK2NsYXNzIExheWVyVHJlZUhvc3RDQU1hYyA6
IHB1YmxpYyBMYXllclRyZWVIb3N0Q0EsIHB1YmxpYyBXZWJDb3JlOjpMYXllckZsdXNoU2NoZWR1
bGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0
Q0FNYWM+IGNyZWF0ZShXZWJQYWdlKik7CiAgICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdENBTWFj
KCk7CkBAIC01NSwxMSArNTUsMTIgQEAgcHJpdmF0ZToKICAgICAvLyBMYXllclRyZWVIb3N0Q0EK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKExheWVyVHJlZUNvbnRleHQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLQotICAg
IHN0YXRpYyB2b2lkIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1J1bkxvb3BPYnNlcnZlckNhbGxi
YWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxvb3BBY3Rpdml0eSwgdm9pZCopOworICAg
IAorICAgIC8vIExheWVyRmx1c2hTY2hlZHVsZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hMYXllcnMoKTsKIAogICAgIFJldGFpblB0cjxXS0NBUmVtb3RlTGF5ZXJDbGllbnRSZWY+IG1f
cmVtb3RlTGF5ZXJDbGllbnQ7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcE9ic2VydmVyUmVmPiBt
X2ZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1J1bkxvb3BPYnNlcnZlcjsKKyAgICBXZWJDb3JlOjpM
YXllckZsdXNoU2NoZWR1bGVyIG1fbGF5ZXJGbHVzaFNjaGVkdWxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2NhL21hYy9MYXllclRyZWVIb3N0Q0FNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvY2EvbWFjL0xheWVyVHJlZUhvc3RDQU1hYy5tbQppbmRleCA1ODM4NjIxZjAw
OWU3YWVmYzJhNzkyZGRjNmVlMGZlZWVhMmM3MzVkLi4wODVkN2UzODFlMjdiMGQwZDZhZjViMjMx
MzQ2Mzg4OGFmNmQzN2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvY2EvbWFjL0xheWVyVHJlZUhvc3RDQU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvY2EvbWFjL0xheWVyVHJlZUhvc3RDQU1hYy5tbQpAQCAtNDgsMTIg
KzQ4LDEyIEBAIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdENBTWFjPiBMYXllclRyZWVIb3N0Q0FN
YWM6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogCiBMYXllclRyZWVIb3N0Q0FNYWM6OkxheWVy
VHJlZUhvc3RDQU1hYyhXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogTGF5ZXJUcmVlSG9zdENBKHdl
YlBhZ2UpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsZXIodGhpcykKIHsKIH0KIAogTGF5ZXJU
cmVlSG9zdENBTWFjOjp+TGF5ZXJUcmVlSG9zdENBTWFjKCkKIHsKLSAgICBBU1NFUlQoIW1fZmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyKTsKICAgICBBU1NFUlQoIW1fcmVt
b3RlTGF5ZXJDbGllbnQpOwogfQogCkBAIC02OSw1MCArNjksMjAgQEAgdm9pZCBMYXllclRyZWVI
b3N0Q0FNYWM6OnBsYXRmb3JtSW5pdGlhbGl6ZShMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KQogCiB2b2lkIExheWVyVHJlZUhvc3RDQU1hYzo6c2NoZWR1bGVMYXllckZsdXNoKCkK
IHsKLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDRlJ1bkxvb3BSZWYgY3VycmVudFJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJy
ZW50KCk7Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHdlIHdha2UgdXAgdGhlIGxvb3Agb3IgdGhl
IG9ic2VydmVyIGNvdWxkIGJlIGRlbGF5ZWQgdW50aWwgc29tZSBvdGhlciBzb3VyY2UgZmlyZXMu
Ci0gICAgQ0ZSdW5Mb29wV2FrZVVwKGN1cnJlbnRSdW5Mb29wKTsKLQotICAgIGlmIChtX2ZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlc1J1bkxvb3BPYnNlcnZlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gUnVuIGJlZm9yZSB0aGUgQ29yZSBBbmltYXRpb24gY29tbWl0IG9ic2VydmVyLgotICAg
IGNvbnN0IENGSW5kZXggcnVuTG9vcE9yZGVyID0gQ29yZUFuaW1hdGlvblJ1bkxvb3BPcmRlciAt
IDE7Ci0gICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHRoaXMsIDAs
IDAsIDAgfTsKLSAgICBtX2ZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1J1bkxvb3BPYnNlcnZlci5h
ZG9wdENGKENGUnVuTG9vcE9ic2VydmVyQ3JlYXRlKDAsIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5n
IHwga0NGUnVuTG9vcEV4aXQsIHRydWUsIHJ1bkxvb3BPcmRlciwgZmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzUnVuTG9vcE9ic2VydmVyQ2FsbGJhY2ssICZjb250ZXh0KSk7Ci0KLSAgICBDRlJ1bkxv
b3BBZGRPYnNlcnZlcihjdXJyZW50UnVuTG9vcCwgbV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNS
dW5Mb29wT2JzZXJ2ZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgbV9sYXll
ckZsdXNoU2NoZWR1bGVyLnNjaGVkdWxlKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdENBTWFj
OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxl
ZCkKIHsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVz
aGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
UnVuTG9vcE9ic2VydmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlJ1bkxvb3BPYnNlcnZl
ckludmFsaWRhdGUobV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIuZ2V0
KCkpOwotICAgIG1fZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyID0gbnVs
bHB0cjsKKyAgICBpZiAobGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIG1fbGF5ZXJGbHVz
aFNjaGVkdWxlci5yZXN1bWUoKTsKKyAgICBlbHNlCisgICAgICAgIG1fbGF5ZXJGbHVzaFNjaGVk
dWxlci5zdXNwZW5kKCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdENBTWFjOjppbnZhbGlkYXRl
KCkKIHsKLSAgICBpZiAobV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIp
IHsKLSAgICAgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKG1fZmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyLmdldCgpKTsKLSAgICAgICAgbV9mbHVzaFBlbmRpbmdM
YXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIgPSBudWxscHRyOwotICAgIH0KKyAgICBtX2xheWVy
Rmx1c2hTY2hlZHVsZXIuaW52YWxpZGF0ZSgpOwogCiAgICAgV0tDQVJlbW90ZUxheWVyQ2xpZW50
SW52YWxpZGF0ZShtX3JlbW90ZUxheWVyQ2xpZW50LmdldCgpKTsKICAgICBtX3JlbW90ZUxheWVy
Q2xpZW50ID0gbnVsbHB0cjsKQEAgLTE0OCwyNCArMTE4LDE4IEBAIHZvaWQgTGF5ZXJUcmVlSG9z
dENBTWFjOjpyZXN1bWVSZW5kZXJpbmcoKQogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcG9zdE5vdGlmaWNhdGlvbk5hbWU6QCJOU0NBVmlld1JlbmRlckRpZFJlc3Vt
ZU5vdGlmaWNhdGlvbiIgb2JqZWN0Om5pbCB1c2VySW5mbzpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0OnJvb3QgZm9yS2V5OkAibGF5ZXIiXV07CiB9CiAKLXZvaWQgTGF5ZXJUcmVl
SG9zdENBTWFjOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXJDYWxsYmFj
ayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aXZpdHksIHZvaWQqIGNvbnRleHQp
Cit2b2lkIExheWVyVHJlZUhvc3RDQU1hYzo6Zmx1c2hMYXllcnMoKQogewotICAgIExheWVyVHJl
ZUhvc3RDQU1hYyogbGF5ZXJUcmVlSG9zdCA9IHN0YXRpY19jYXN0PExheWVyVHJlZUhvc3RDQU1h
Yyo+KGNvbnRleHQpOwotCi0gICAgQVNTRVJUKGxheWVyVHJlZUhvc3QtPm1fbGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKTsKLQogICAgIC8vIFRoaXMgZ2V0cyBjYWxsZWQgb3V0c2lkZSBvZiB0
aGUgbm9ybWFsIGV2ZW50IGxvb3Agc28gd3JhcCBpbiBhbiBhdXRvcmVsZWFzZSBwb29sCiAgICAg
TlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0
XTsKLSAgICBsYXllclRyZWVIb3N0LT5wZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworICAg
IHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CiAgICAgW3Bvb2wgZHJhaW5dOwogfQogCiB2
b2lkIExheWVyVHJlZUhvc3RDQU1hYzo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQog
ewogICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBmbHVzaGVkIHRoZSBwZW5kaW5nIGxheWVyIGNoYW5n
ZXMsIHJlbW92ZSB0aGUgcnVuIGxvb3Agb2JzZXJ2ZXIuCi0gICAgQVNTRVJUKG1fZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyKTsKLSAgICBDRlJ1bkxvb3BPYnNlcnZlcklu
dmFsaWRhdGUobV9mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIuZ2V0KCkp
OwotICAgIG1fZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzUnVuTG9vcE9ic2VydmVyID0gMDsKKyAg
ICBtX2xheWVyRmx1c2hTY2hlZHVsZXIuaW52YWxpZGF0ZSgpOwogCiAgICAgTGF5ZXJUcmVlSG9z
dENBOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwogfQo=
</data>
<flag name="review"
          id="113931"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>