<?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>73233</bug_id>
          
          <creation_ts>2011-11-28 11:17:34 -0800</creation_ts>
          <short_desc>[chromium] Create a base-class CCAnimation to represent compositor animations</short_desc>
          <delta_ts>2012-01-18 20:18:23 -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>WebKit Misc.</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>76468</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>509989</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-28 11:17:34 -0800</bug_when>
    <thetext>We need a base class that can be used as a basis for impl-thread animations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510040</commentid>
    <comment_count>1</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-28 11:56:17 -0800</bug_when>
    <thetext>Just as a strawman to start discussion:
1. Lets keep mutation separate from computation. This allows unit testing.
2. Lets allow keyframed and nonkeyframed


CCAnimationTarget {
  void setValue(float value);
}

CCAnimation {
  // returns false if the animation has ended
  virtual bool getValue(double timeStamp);
  CCAnimationTarget* target;
}

CCLayerTreeHostImpl {
  vector&lt;CCAnimation&gt; m_animations;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510164</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 14:15:06 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Just as a strawman to start discussion:
&gt; 1. Lets keep mutation separate from computation. This allows unit testing.
&gt; 2. Lets allow keyframed and nonkeyframed
&gt; 
&gt; 
&gt; CCAnimationTarget {
&gt;   void setValue(float value);
&gt; }
&gt; 
&gt; CCAnimation {
&gt;   // returns false if the animation has ended
&gt;   virtual bool getValue(double timeStamp);
&gt;   CCAnimationTarget* target;
&gt; }

How do you get at the actual value? Does this trigger a setValue() call?

What about animated things that aren&apos;t floats - do we templatize the target?

I think an Animation also has state (active, running, paused, waiting for start is the set of states that page/animation/AnimationBase seems to use).

&gt; 
&gt; CCLayerTreeHostImpl {
&gt;   vector&lt;CCAnimation&gt; m_animations;
&gt; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510845</commentid>
    <comment_count>3</comment_count>
      <attachid>116982</attachid>
    <who name="">vollick</who>
    <bug_when>2011-11-29 09:15:09 -0800</bug_when>
    <thetext>Created attachment 116982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510852</commentid>
    <comment_count>4</comment_count>
    <who name="">vollick</who>
    <bug_when>2011-11-29 09:22:54 -0800</bug_when>
    <thetext>This is a very rough idea for how compositor animations could eventually look. tl;dr 
 - CCLayerImpl&apos;s may optionally have animators.
 - Animators maintain (a) animation queue (b) running animations
 - Animations are made up of animation elements
    o elements are more general than keyframes (basically implements progress(t, layer), where t \in [0, 1])
    o keyframes can be implemented in terms of elements.
    o elements allow for parametric animation. Will be a simpler way to represent a fling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510906</commentid>
    <comment_count>5</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-29 10:49:36 -0800</bug_when>
    <thetext>I&apos;d really like to se something simpler than this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511313</commentid>
    <comment_count>6</comment_count>
      <attachid>116982</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-29 19:35:15 -0800</bug_when>
    <thetext>Comment on attachment 116982
Patch

Attachment 116982 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10687021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511467</commentid>
    <comment_count>7</comment_count>
      <attachid>116982</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-30 00:32:52 -0800</bug_when>
    <thetext>Comment on attachment 116982
Patch

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

This entire patch (rightly) deals with to impl-thread-side animations. So, everything should have impl suffixes.

We need to nail down the animation-lifetime model. As we discussed verbally, refptr/shared ownership is really hard to get right [when moving fast] so ideally we&apos;d settle on a OwnPtr system. As you suggested, lets try out &quot;creator of the animation owns the animation, and is responsible for adding it to the animation controller.&quot; If you let an animation have an m_animationController that gets set on adding to a controller, then you can automatically unregister from the controller inside ~CCAnimation().

With that model, we have to figure out how to deal with the case where the target dies before the animation ends. Lets make sure a unit test exists for that case.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:33
&gt; +class CCAnimationObserver;

Lets leave observers as a followon.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:36
&gt; +class CCAnimation {

I think this is an AnimationChain. Lets not support animation chaining for now. Also, I think with the right design of an Animation base class, a chain of animations is just
CCChainedAnimation : CCAnimation {
 vector&lt;CCAnimation&gt; m_childAnimations;
}

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:38
&gt; +    enum AnimatableProperty {

We can push this out to a binding class. I&apos;d prefer something like
CCTransformAnimationTarget {
  virtual void setTransform(Transform&amp;) = 0;
}
For things like layers that might have multiple target types, you could make an adapter
CCLayerImplAnimationTargetAdapter : CCTransformAnimationTarget, ... {
   AnimatableProperty m_animatableProperty;
   CCLayerImpl* m_layer;
   void setTransform(...) { call the appropriate m_layer setter method based on m_property enum);
}

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:40
&gt; +class CCAnimationElement {

This class feels more to me like CCAnimation, with subclasses for different kinds of animations. CCKeyframedTransformAnimation, CCZooomAnimatorTransformation, etc.

However:
- The comments before about pulling out the &apos;binding&apos; of the animation to a CCAnimationTarget method would be good
- Do we really need a reset() method?
- We should decide if we animate() needs to support time moving backward, or if we assume that time will always increase. We use the monotonic clock for animation which guarantees that time moves forward, but its probably better to either explicitly require this OR say it must support random time accesses. 
- Where does the start time of an animation get obtained? Ideally, we dont have to wait a full frame to call onStarted. Afaict, the right way to do this is to have AnimationController maintain a list of new animations --- then, whenever an animation is started, post a task (no delay) that starts all the animations.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:50
&gt; +    void progress(double t, CCLayerImpl*);

animate

lets forbid animations from having direct pointers to the thing they&apos;re animating.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:66
&gt; +    bool m_firstFrame;

Ideally, not a property of the animation. Although, I could imagine an animation has a state (&quot;starting&quot;, &quot;running&quot;) as jamesr pointed out.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:72
&gt; +    double m_duration;

Do animations have to specify their duration? What do we get from knowing the duration?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:75
&gt; +    OwnPtr&lt;CCResampler&gt; m_resampler;

Lets hold this feature. Also, its probably a property of a CCKeyframedAnimation subclass.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationObserver.h:32
&gt; +class CCAnimationObserver {

Good stuff, but lets not do it right away.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimator.h:37
&gt; +class CCAnimator {

This feels like an animation manager. We talked about animation controller earlier, but on reflection, we are using Manager eg TextureManager, for &quot;compositor-wide&quot; classses.

I&apos;d like for each CCLayerImpls not to have an animation manager. Rather, CCLayerTreeHostImpl should have an animation manager --- this way we dont have to walk the universe to figure out what to animate. There are other wins here later.

There are good things that this does regarding combining/merging/canceling/preempting animations that are already in progress. I think those should probably be another class and feature, either just part of a CCChainedAnimation class or something new.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimator.h:86
&gt; +    struct RunningAnimation {

I find this concept very intriguing. This begs the notion that an animation itself mostly stateless? Or is it stateful and startTime is special? This gets back to whether we should do
a) void CCAnimation::animate(float t/*awaysincreasing*/)
b) float CCAnimation::getValue(float t /*no guarantee on t*/) const

I have to say, I find (b) tempting. The mutable keyword could always be used inside (b) if we got worried about the cost of looking up keyframe pairs inside a keyframed animation impl.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:89
&gt; +    //

I am a huuuge fan of walking over a vector and not having any smartness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513065</commentid>
    <comment_count>8</comment_count>
      <attachid>117480</attachid>
    <who name="">vollick</who>
    <bug_when>2011-12-01 13:49:02 -0800</bug_when>
    <thetext>Created attachment 117480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513073</commentid>
    <comment_count>9</comment_count>
      <attachid>117481</attachid>
    <who name="">vollick</who>
    <bug_when>2011-12-01 13:57:21 -0800</bug_when>
    <thetext>Created attachment 117481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513094</commentid>
    <comment_count>10</comment_count>
      <attachid>117486</attachid>
    <who name="">vollick</who>
    <bug_when>2011-12-01 14:16:08 -0800</bug_when>
    <thetext>Created attachment 117486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513098</commentid>
    <comment_count>11</comment_count>
    <who name="">vollick</who>
    <bug_when>2011-12-01 14:17:22 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 116982 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116982&amp;action=review
&gt; 
&gt; This entire patch (rightly) deals with to impl-thread-side animations. So, everything should have impl suffixes.

Fixed.

&gt; 
&gt; We need to nail down the animation-lifetime model. As we discussed verbally, refptr/shared ownership is really hard to get right [when moving fast] so ideally we&apos;d settle on a OwnPtr system. As you suggested, lets try out &quot;creator of the animation owns the animation, and is responsible for adding it to the animation controller.&quot; If you let an animation have an m_animationController that gets set on adding to a controller, then you can automatically unregister from the controller inside ~CCAnimation().
&gt; 
&gt; With that model, we have to figure out how to deal with the case where the target dies before the animation ends. Lets make sure a unit test exists for that case.

We should talk about this again. I considered an OwnPtr method and having various parties (layer, creator, manager) actually own the pointers. None of them seemed great to me, but I may be missing something. I went with a RefPtr model so that creators can hang onto their animations if they want to do things like check them to see if they&apos;re still animating. As you mentioned it is still crucial that CCLayerImpls let the manager know to discard animations.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:33
&gt; &gt; +class CCAnimationObserver;
&gt; 
&gt; Lets leave observers as a followon.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:36
&gt; &gt; +class CCAnimation {
&gt; 
&gt; I think this is an AnimationChain. Lets not support animation chaining for now. Also, I think with the right design of an Animation base class, a chain of animations is just
&gt; CCChainedAnimation : CCAnimation {
&gt;  vector&lt;CCAnimation&gt; m_childAnimations;
&gt; }
&gt; 
Yep. Gone.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:38
&gt; &gt; +    enum AnimatableProperty {
&gt; 
&gt; We can push this out to a binding class. I&apos;d prefer something like
&gt; CCTransformAnimationTarget {
&gt;   virtual void setTransform(Transform&amp;) = 0;
&gt; }
&gt; For things like layers that might have multiple target types, you could make an adapter
&gt; CCLayerImplAnimationTargetAdapter : CCTransformAnimationTarget, ... {
&gt;    AnimatableProperty m_animatableProperty;
&gt;    CCLayerImpl* m_layer;
&gt;    void setTransform(...) { call the appropriate m_layer setter method based on m_property enum);
&gt; }
&gt; 
Have a new idea for this one based on signature. See CCFloatAnimationTargetImpl::signature().

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:40
&gt; &gt; +class CCAnimationElement {
&gt; 
&gt; This class feels more to me like CCAnimation, with subclasses for different kinds of animations. CCKeyframedTransformAnimation, CCZooomAnimatorTransformation, etc.
&gt; 
&gt; However:
&gt; - The comments before about pulling out the &apos;binding&apos; of the animation to a CCAnimationTarget method would be good
&gt; - Do we really need a reset() method?
&gt; - We should decide if we animate() needs to support time moving backward, or if we assume that time will always increase. We use the monotonic clock for animation which guarantees that time moves forward, but its probably better to either explicitly require this OR say it must support random time accesses. 
&gt; - Where does the start time of an animation get obtained? Ideally, we dont have to wait a full frame to call onStarted. Afaict, the right way to do this is to have AnimationController maintain a list of new animations --- then, whenever an animation is started, post a task (no delay) that starts all the animations.
&gt; 
The point of reset was to allow animations to flush any state they may have if they&apos;re cyclic (they may, for example, cache the current state of the target when they begin animating). If we pass animations the absolute time, then this is unnecessary. I think this is a good approach.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:50
&gt; &gt; +    void progress(double t, CCLayerImpl*);
&gt; 
&gt; animate
Done.
&gt; 
&gt; lets forbid animations from having direct pointers to the thing they&apos;re animating.

This is now done through an animation target as we discussed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:66
&gt; &gt; +    bool m_firstFrame;
&gt; 
&gt; Ideally, not a property of the animation. Although, I could imagine an animation has a state (&quot;starting&quot;, &quot;running&quot;) as jamesr pointed out.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:72
&gt; &gt; +    double m_duration;
&gt; 
&gt; Do animations have to specify their duration? What do we get from knowing the duration?
I thought this would be handy for animation chains in the future. Might be nice if an animation chain knew how long it was (for cycling, etc).
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationElement.h:75
&gt; &gt; +    OwnPtr&lt;CCResampler&gt; m_resampler;
&gt; 
&gt; Lets hold this feature. Also, its probably a property of a CCKeyframedAnimation subclass.
Removed (though the class is still in the patch)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationObserver.h:32
&gt; &gt; +class CCAnimationObserver {
&gt; 
&gt; Good stuff, but lets not do it right away.
Removed (though the class is still in the patch)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimator.h:37
&gt; &gt; +class CCAnimator {
&gt; 
&gt; This feels like an animation manager. We talked about animation controller earlier, but on reflection, we are using Manager eg TextureManager, for &quot;compositor-wide&quot; classses.
Fixed.
&gt; 
&gt; I&apos;d like for each CCLayerImpls not to have an animation manager. Rather, CCLayerTreeHostImpl should have an animation manager --- this way we dont have to walk the universe to figure out what to animate. There are other wins here later.
&gt; 
&gt; There are good things that this does regarding combining/merging/canceling/preempting animations that are already in progress. I think those should probably be another class and feature, either just part of a CCChainedAnimation class or something new.
&gt; 
Done.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimator.h:86
&gt; &gt; +    struct RunningAnimation {
&gt; 
&gt; I find this concept very intriguing. This begs the notion that an animation itself mostly stateless? Or is it stateful and startTime is special? This gets back to whether we should do
&gt; a) void CCAnimation::animate(float t/*awaysincreasing*/)
&gt; b) float CCAnimation::getValue(float t /*no guarantee on t*/) const
&gt; 
&gt; I have to say, I find (b) tempting. The mutable keyword could always be used inside (b) if we got worried about the cost of looking up keyframe pairs inside a keyframed animation impl.
&gt; 
Things became much simpler when I had animations be a bit more stateful and keep track of things like their start time and state (paused, running, etc).

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:89
&gt; &gt; +    //
&gt; 
&gt; I am a huuuge fan of walking over a vector and not having any smartness.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513170</commentid>
    <comment_count>12</comment_count>
      <attachid>117486</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 15:08:28 -0800</bug_when>
    <thetext>Comment on attachment 117486
Patch

Attachment 117486 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10694736</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513909</commentid>
    <comment_count>13</comment_count>
      <attachid>117652</attachid>
    <who name="">vollick</who>
    <bug_when>2011-12-02 10:35:49 -0800</bug_when>
    <thetext>Created attachment 117652
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522130</commentid>
    <comment_count>14</comment_count>
      <attachid>119480</attachid>
    <who name="">vollick</who>
    <bug_when>2011-12-15 12:13:28 -0800</bug_when>
    <thetext>Created attachment 119480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524371</commentid>
    <comment_count>15</comment_count>
      <attachid>119480</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-12-19 19:00:20 -0800</bug_when>
    <thetext>Comment on attachment 119480
Patch

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

Great work! I&apos;d like to see the CCLayerTreeHostImpl::m_activeAnimations code as well so we can troubleshoot it.

Wk style prefers foo()/setFoo() rather than getFoo()/setFoo().

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:32
&gt; +class CCAnimation {

Add a type system here in the style of the CCDrawQuad. E.g. 
   enum Type { FloatAnimation, TransformAnimation };
   Type getType() const = 0;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:37
&gt; +    virtual bool hasDuration() const = 0;

Why do we support this? I thought we agreed we&apos;d not support procedural animations. The goal is to be laser focused on CSS!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:48
&gt; +// O(n^2) in the number of animations in the queue.

Not sure why so much commentary on the runtime complexity of these. I&apos;d delete these comments. The function names should be self explanatory (update them if they&apos;re not) and anything that doesn&apos;t make sense in the function name should be a comment at the beginning of the function. E.g resolveConflicts might want a bit of explanation IN the function, but not here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:49
&gt; +void CCLayerAnimationControllerImpl::animate(double frameBeginTimeMs)

Should we use seconds in the animation system? I know I started the rest of the code using ms, but I think thats a huge mistake on my part.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:72
&gt; +    m_lastTickTime = frameBeginTimeMs;

why are we tracking lastTickTime?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:80
&gt; +void CCLayerAnimationControllerImpl::abort(ID id)

Not needed. Just make setState public. Minimalism!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:85
&gt; +void CCLayerAnimationControllerImpl::pause(ID id)

Not needed.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:90
&gt; +void CCLayerAnimationControllerImpl::resume(ID id)

Same.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:95
&gt; +bool CCLayerAnimationControllerImpl::isAnimating() const

I think that we should probably be more precise than animating... that word is massively overloaded... isActive might be better, and explain on the .h  file what that means.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:100
&gt; +double CCLayerAnimationControllerImpl::ControlledAnimation::duration() const

Is the idea here that when an animation loops we bump the animation time and this causes its apparent duration to go up?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:107
&gt; +    return m_animation-&gt;hasDuration() &amp;&amp; m_state.iterations &gt; 0;

the iterations field is a bit ambiguous it seems.... as named, its not clear if it starts at zero or 1.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:112
&gt; +{
&gt; +    // TODO(vollick): eventually we will want to notify observers here.

WK style prefers // FIXME: foo without a name

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:132
&gt; +{

Are these functions needed? It seems they have only one caller. Can we just fold the code into there?

Also, probably want to add lots of defensive asserts to wherever this lands to avoid casting errors.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:42
&gt; +    typedef int ID;

Copy the style for IDs in LayerChromium/CCLayerImpl --- on the impl side, CCLayerImpls are constructed with an ID. In this case, I think its the State struct...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:58
&gt; +    enum Property {

Seems to me that until we can avoid this for now if we have CCAnimation::Type. I know its not as general, but since we have only two targets, that will suffice for now. Dont you think?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImplClient.h:32
&gt; +#define CCLayerAnimationControllerImplClient_h

Typically we put clients with their class. E.g in the main animationcontrollerimpl.h

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImplClient.h:48
&gt; +    virtual const IntSize&amp; renderBoxBorderSize() const = 0;

We need to figrue out what that is and map it to whatever CCLayerImpl understands it to be... if you need help figuring that out, hit me up on chat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525256</commentid>
    <comment_count>16</comment_count>
      <attachid>120177</attachid>
    <who name="">vollick</who>
    <bug_when>2011-12-21 07:08:31 -0800</bug_when>
    <thetext>Created attachment 120177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525291</commentid>
    <comment_count>17</comment_count>
    <who name="">vollick</who>
    <bug_when>2011-12-21 09:36:28 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 119480 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119480&amp;action=review
&gt; 
&gt; Great work! I&apos;d like to see the CCLayerTreeHostImpl::m_activeAnimations code as well so we can troubleshoot it.
&gt; 

The controller&apos;s client (CCLayerImpl) doesn&apos;t seem to have access to the CCLayerTreeHostImpl (I may be missing it though). It seems like there are two options -- (1) give all the CCLayerImpl&apos;s back references to the LTHI so they can add/remove anim controllers from active list themselves, or (2) the main thread can manage the active list when animations are added and layers are deleted. Since it might take a bit to sort this out, I was hoping put this off until the next CL if you&apos;re alright with it.

&gt; Wk style prefers foo()/setFoo() rather than getFoo()/setFoo().

Noted. I&apos;ve used foo()/setFoo() for trivial getters and setters, but CCAnimation still has getFloat and getTransformOperations since they&apos;re not simple getters. Is that ok?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:32
&gt; &gt; +class CCAnimation {
&gt; 
&gt; Add a type system here in the style of the CCDrawQuad. E.g. 
&gt;    enum Type { FloatAnimation, TransformAnimation };
&gt;    Type getType() const = 0;
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:37
&gt; &gt; +    virtual bool hasDuration() const = 0;
&gt; 
&gt; Why do we support this? I thought we agreed we&apos;d not support procedural animations. The goal is to be laser focused on CSS!

Not having a duration has a big effect on looping, scheduling and blending, and I thought that if we added support for duration-less animations right from the beginning, when new features are added, they would be designed with this in mind. Otherwise, it might require major surgery to support animations without a duration down the road.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:48
&gt; &gt; +// O(n^2) in the number of animations in the queue.
&gt; 
&gt; Not sure why so much commentary on the runtime complexity of these. I&apos;d delete these comments. The function names should be self explanatory (update them if they&apos;re not) and anything that doesn&apos;t make sense in the function name should be a comment at the beginning of the function. E.g resolveConflicts might want a bit of explanation IN the function, but not here.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:49
&gt; &gt; +void CCLayerAnimationControllerImpl::animate(double frameBeginTimeMs)
&gt; 
&gt; Should we use seconds in the animation system? I know I started the rest of the code using ms, but I think thats a huge mistake on my part.
Switched to seconds.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:72
&gt; &gt; +    m_lastTickTime = frameBeginTimeMs;
&gt; 
&gt; why are we tracking lastTickTime?
It&apos;s used in pause/resume.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:80
&gt; &gt; +void CCLayerAnimationControllerImpl::abort(ID id)
&gt; 
&gt; Not needed. Just make setState public. Minimalism!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:85
&gt; &gt; +void CCLayerAnimationControllerImpl::pause(ID id)
&gt; 
&gt; Not needed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:90
&gt; &gt; +void CCLayerAnimationControllerImpl::resume(ID id)
&gt; 
&gt; Same.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:95
&gt; &gt; +bool CCLayerAnimationControllerImpl::isAnimating() const
&gt; 
&gt; I think that we should probably be more precise than animating... that word is massively overloaded... isActive might be better, and explain on the .h  file what that means.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:100
&gt; &gt; +double CCLayerAnimationControllerImpl::ControlledAnimation::duration() const
&gt; 
&gt; Is the idea here that when an animation loops we bump the animation time and this causes its apparent duration to go up?
&gt; 
Yes. This value in combination with the start time lets the controller know when the animation is finished.
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:107
&gt; &gt; +    return m_animation-&gt;hasDuration() &amp;&amp; m_state.iterations &gt; 0;
&gt; 
&gt; the iterations field is a bit ambiguous it seems.... as named, its not clear if it starts at zero or 1.

I&apos;m following the lead of WebCore/platform/animation/Animation.h. Actually, iterationCount was used in that case  -- would that be better?

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:112
&gt; &gt; +{
&gt; &gt; +    // TODO(vollick): eventually we will want to notify observers here.
&gt; 
&gt; WK style prefers // FIXME: foo without a name
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:132
&gt; &gt; +{
&gt; 
&gt; Are these functions needed? It seems they have only one caller. Can we just fold the code into there?
I was thinking ahead to when multiple float or transform properties were animatable. The inlined code would need to be refactored when that happened anyhow, so it made sense to do it now. Also, it makes the switch statement a little cleaner.
&gt; 
&gt; Also, probably want to add lots of defensive asserts to wherever this lands to avoid casting errors.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:42
&gt; &gt; +    typedef int ID;
&gt; 
&gt; Copy the style for IDs in LayerChromium/CCLayerImpl --- on the impl side, CCLayerImpls are constructed with an ID. In this case, I think its the State struct...
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:58
&gt; &gt; +    enum Property {
&gt; 
&gt; Seems to me that until we can avoid this for now if we have CCAnimation::Type. I know its not as general, but since we have only two targets, that will suffice for now. Dont you think?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImplClient.h:32
&gt; &gt; +#define CCLayerAnimationControllerImplClient_h
&gt; 
&gt; Typically we put clients with their class. E.g in the main animationcontrollerimpl.h
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImplClient.h:48
&gt; &gt; +    virtual const IntSize&amp; renderBoxBorderSize() const = 0;
&gt; 
&gt; We need to figrue out what that is and map it to whatever CCLayerImpl understands it to be... if you need help figuring that out, hit me up on chat.
Removed. After doing some digging, it looks like CCLayerImpl does not have access to that information (which, I think, is why it was plumbed down into GraphicsLayer::addAnimation). What I think should ultimately happen is this: after a call to addAnimation, the main thread&apos;s controller will be told to start up an animation. At that point, it will have the size handy and can just replace the transforms that operate in terms of percentages with equivalent transforms that operate in terms of absolute pixel distances. The cc animation framework should never need to know about this detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525574</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-21 14:13:28 -0800</bug_when>
    <thetext>Attachment 120177 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
From git://git.webkit.org/WebKit
   5282799..4428c79  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 103439 = 5282799a1fb6729d1acbccc6f581466f9694b675
r103445 = 4428c79e3922c44a4537acf0b21a4e4540a3eecb
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Applying: Inform the scrolling coordinator when scrollbar layers come and go
Using index info to reconstruct a base tree...
&lt;stdin&gt;:474806: trailing whitespace.
        [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread 
&lt;stdin&gt;:474827: trailing whitespace.
        Nothing to test, just removing redundant code. Correct behavior tested by 
&lt;stdin&gt;:475346: trailing whitespace.
    
warning: 3 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 167249 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Source/WebKit2/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit2/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Inform the scrolling coordinator when scrollbar layers come and go

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 158.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529679</commentid>
    <comment_count>19</comment_count>
      <attachid>120177</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-04 12:41:47 -0800</bug_when>
    <thetext>Comment on attachment 120177
Patch

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

I think you&apos;re working too hard at keeping funcitonality here protected/private. Please keep in mind, all of this stuff lives on the impl thread, the only people that can get at these data structures is the compositor. As a result, adding protected-to-prevent-ill-goings-on is only necessary when there is real danger.

Similarly, I still see that you like to add helper functions (&quot;it makes the function cleaner/etc&quot;). Again, I think that&apos;s not the right approach here. The problem with these is that a new person to the code has to understand these helper functions as well -- and those helper functions themselves might have side effects. For example, your AnimationControllerImpl::add method really just constructs an ActiveAnimation --- but I don&apos;t know that by reading the call site -- I have to instead go look at the ::add method to see that its just a wrapper around a constructor. As a similar example, AnimationControllerImpl::setState just wrapps ActiveAnimation::SetState BUT has the side effect of purging deleted animations. This might be nice from a user-facing API, but from a backend point of view, it just makes it hard to reason about side effects.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Unit tests for the controller are in CCLayerAnimationControllerImplTest.cpp

You can probably just delete this line.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:32
&gt; +class CCAnimation {

Comment this class explaining its role.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:39
&gt; +    virtual bool hasDuration() const = 0;

We&apos;ve gone back and forth on this far too much. The simple fact of the matter is that CSS doesn&apos;t require this. The main use cases of this system are css and chrome/aura. Neither of those need implicit animations.

So, Decision Time: we will not explicitly not support for duration-less animations. We do not have enough use cases for them that warrant the investment. SG?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:44
&gt; +public:

We try to group base-class overrides together with a comment indicating which are overrides. See the style in CCThreadProxy for example.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:47
&gt; +    virtual bool getFloat(double t, float* value) = 0;

getValue?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:55
&gt; +    virtual bool getTransformOperations(double t, TransformOperations* value) = 0;

getValue?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:65
&gt; +inline CCTransformAnimation* toTransformAnimation(CCAnimation* object)

Please copy the approach Enne uses in CCDrawQuad --- the toXXX are member functions on the base class.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:39
&gt; +{ }

This style is a bit funky. I think we tend to expand fully.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:41
&gt; +// static

We don&apos;t typically annotate static methods

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:66
&gt; +void CCLayerAnimationControllerImpl::add(PassOwnPtr&lt;CCAnimation&gt; anim, const AnimationState&amp; state)

Again, this feels like sugar.

I&apos;d prefer we just have addActiveAnimation(PassOwnPtr&lt;CCLayerAnimationControllerImpl::ActiveAnimation&gt;)

That makes it extremely clear that the add method isn&apos;t doing anything else.

As written, I have to go look at the ::add method to see if its doing anything on the base class.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:156
&gt; +            m_animations[i]-&gt;setRunState(state, m_lastTickTime);

I&apos;d prefer we not have this m_lastTickTime field. Can we structure this so that anyone who needs the &quot;current time&quot; gets it passed in?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:159
&gt; +    purgeFinishedAnimations();

Can&apos;t this be held until the animation tick? This seems like &quot;GC&quot; and if we&apos;re setting the state on 10 animations, it seems like overkill to go looking for finished animations at this point.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:71
&gt; +    enum Property {

TargetProperty?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:78
&gt; +    struct AnimationState {

Why can&apos;t this stuff just be on the ActiveAnimation class? Either I&apos;ve forgotten something over the holiday, or it seems to me that this is unnecessary. All this code is inaccessible to users of our API, remember!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:96
&gt; +    void abort(ID id) { setState(id, Aborted); }

I really dont feel that this sugar is necessary. Why not have a method called
  getActivateANimation(ID id)

You can put pause/abort/resume on the activeanimation.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:128
&gt; +        bool getFloat(double t, float* value);

Sorry, I don&apos;t buy it. Remove these. Do the conversion inline. If and only if we have multiple places doing this conversion should we add this marshalling code.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:153
&gt; +    void setState(ID, RunState);

If you persist this method [which I dont think you need to do?], try setRunState for consistency.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:163
&gt; +    Vector&lt;OwnPtr&lt;ActiveAnimation&gt; &gt; m_animations;

Any reason this is a vector and not a hashtable/map/something? Its indexed by ID...

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:41
&gt; +class DummyControllerClient : public CCLayerAnimationControllerImplClient {

I think we&apos;ve setttled on the word Fake, fwiw.

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:50
&gt; +    virtual const IntSize&amp; renderBoxBorderSize() const { return m_size; }

no longer needed?

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:118
&gt; +

Probably want test of didActivate.... you&apos;ve got all the plumbing for it, it seems, just not the tests.

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:119
&gt; +void addAnimation(CCLayerAnimationControllerImpl* controller, PassOwnPtr&lt;CCAnimation&gt; animation, int id, CCLayerAnimationControllerImpl::Property property, CCLayerAnimationControllerImpl::RunState runState, double when, int iterations)

I think this makes the case for CCLayerAnimationControllerImpl::ActiveAnimation to be directly constructable by end code and directly addable to the AnimationControllerImpl.

Also, what do you think about making take ActiveAnimation and make it a toplevel class, e.g. CCActiveAnimation? The RunState enum might become an internal member of CCActiveAnimation instead of being on the animationcontroller.... Since the activeanimation class has some logic on its own, I almost think it should be its own file and have its own tests independent of the controller...

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:124
&gt; +// Transition opacity from 0 to 1

Comments are complete sentences.

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:182
&gt; +    addAnimation(controller.get(),

Though its more typing, I think this would read better if you made ActiveAnimations start up in a fixed state and reasonable defaults, then had to set their state explicitly as followup methods. Decoding what the positional arguments mean here is pretty hard as a noob to the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530363</commentid>
    <comment_count>20</comment_count>
      <attachid>121290</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-05 09:54:15 -0800</bug_when>
    <thetext>Created attachment 121290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530383</commentid>
    <comment_count>21</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-01-05 10:18:17 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 120177 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120177&amp;action=review
&gt; 
&gt; I think you&apos;re working too hard at keeping funcitonality here protected/private. Please keep in mind, all of this stuff lives on the impl thread, the only people that can get at these data structures is the compositor. As a result, adding protected-to-prevent-ill-goings-on is only necessary when there is real danger.
&gt; 
&gt; Similarly, I still see that you like to add helper functions (&quot;it makes the function cleaner/etc&quot;). Again, I think that&apos;s not the right approach here. The problem with these is that a new person to the code has to understand these helper functions as well -- and those helper functions themselves might have side effects. For example, your AnimationControllerImpl::add method really just constructs an ActiveAnimation --- but I don&apos;t know that by reading the call site -- I have to instead go look at the ::add method to see that its just a wrapper around a constructor. As a similar example, AnimationControllerImpl::setState just wrapps ActiveAnimation::SetState BUT has the side effect of purging deleted animations. This might be nice from a user-facing API, but from a backend point of view, it just makes it hard to reason about side effects.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Unit tests for the controller are in CCLayerAnimationControllerImplTest.cpp
&gt; 
&gt; You can probably just delete this line.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:32
&gt; &gt; +class CCAnimation {
&gt; 
&gt; Comment this class explaining its role.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:39
&gt; &gt; +    virtual bool hasDuration() const = 0;
&gt; 
&gt; We&apos;ve gone back and forth on this far too much. The simple fact of the matter is that CSS doesn&apos;t require this. The main use cases of this system are css and chrome/aura. Neither of those need implicit animations.
&gt; 
&gt; So, Decision Time: we will not explicitly not support for duration-less animations. We do not have enough use cases for them that warrant the investment. SG?
Removed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:44
&gt; &gt; +public:
&gt; 
&gt; We try to group base-class overrides together with a comment indicating which are overrides. See the style in CCThreadProxy for example.
Fixed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:47
&gt; &gt; +    virtual bool getFloat(double t, float* value) = 0;
&gt; 
&gt; getValue?
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:55
&gt; &gt; +    virtual bool getTransformOperations(double t, TransformOperations* value) = 0;
&gt; 
&gt; getValue?
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimation.h:65
&gt; &gt; +inline CCTransformAnimation* toTransformAnimation(CCAnimation* object)
&gt; 
&gt; Please copy the approach Enne uses in CCDrawQuad --- the toXXX are member functions on the base class.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:39
&gt; &gt; +{ }
&gt; 
&gt; This style is a bit funky. I think we tend to expand fully.
Fixed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:41
&gt; &gt; +// static
&gt; 
&gt; We don&apos;t typically annotate static methods
Removed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:66
&gt; &gt; +void CCLayerAnimationControllerImpl::add(PassOwnPtr&lt;CCAnimation&gt; anim, const AnimationState&amp; state)
&gt; 
&gt; Again, this feels like sugar.
&gt; 
&gt; I&apos;d prefer we just have addActiveAnimation(PassOwnPtr&lt;CCLayerAnimationControllerImpl::ActiveAnimation&gt;)
&gt; 
&gt; That makes it extremely clear that the add method isn&apos;t doing anything else.
&gt; 
&gt; As written, I have to go look at the ::add method to see if its doing anything on the base class.
Done. It does have the side effect of activating the controller as you requsted, though.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:156
&gt; &gt; +            m_animations[i]-&gt;setRunState(state, m_lastTickTime);
&gt; 
&gt; I&apos;d prefer we not have this m_lastTickTime field. Can we structure this so that anyone who needs the &quot;current time&quot; gets it passed in?
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:159
&gt; &gt; +    purgeFinishedAnimations();
&gt; 
&gt; Can&apos;t this be held until the animation tick? This seems like &quot;GC&quot; and if we&apos;re setting the state on 10 animations, it seems like overkill to go looking for finished animations at this point.
Removed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:71
&gt; &gt; +    enum Property {
&gt; 
&gt; TargetProperty?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:78
&gt; &gt; +    struct AnimationState {
&gt; 
&gt; Why can&apos;t this stuff just be on the ActiveAnimation class? Either I&apos;ve forgotten something over the holiday, or it seems to me that this is unnecessary. All this code is inaccessible to users of our API, remember!
Removed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:96
&gt; &gt; +    void abort(ID id) { setState(id, Aborted); }
&gt; 
&gt; I really dont feel that this sugar is necessary. Why not have a method called
&gt;   getActivateANimation(ID id)

The reason for not adding this method is that multiple animations may have the same ID. This is by design. Groups of animations with the same ID are run as a block (that is, they&apos;re started at the same time, and queued animations have to wait for the whole block to finish before they start). This is how queued animations can be synchronized with no skew.

Given the way that ID&apos;s are used, ID may be a poor name. Maybe &apos;sequence number&apos; would be more appropriate. What do you think?

&gt; 
&gt; You can put pause/abort/resume on the activeanimation.
&gt; 
Since we are exposing the RunState anyhow (consumers can now create CCActiveAnimations) it makes no sense to prevent the sole consumer (the main thread&apos;s compositor) from setting the active animations&apos; state directly. I&apos;ve replaced these three functions with setRunState as you had suggested in an earlier review.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:128
&gt; &gt; +        bool getFloat(double t, float* value);
&gt; 
&gt; Sorry, I don&apos;t buy it. Remove these. Do the conversion inline. If and only if we have multiple places doing this conversion should we add this marshalling code.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:153
&gt; &gt; +    void setState(ID, RunState);
&gt; 
&gt; If you persist this method [which I dont think you need to do?], try setRunState for consistency.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:163
&gt; &gt; +    Vector&lt;OwnPtr&lt;ActiveAnimation&gt; &gt; m_animations;
&gt; 
&gt; Any reason this is a vector and not a hashtable/map/something? Its indexed by ID...

It&apos;s because multiple animations may have the same ID (see note above). I think that the typical use case is to schedule a couple of animations to run together (scale down and fade out, for example). These two animations will have the same id. It&apos;s unlikely that there are other animations in the queue (I think that queuing/scheduling is a rare case), so you&apos;d end up with an associative container where all the items have the same key. Given that the container would usually be in this degenerate state, and given that the number of animations in flight for a single layer will be very small, a Vector seemed like the right choice.

&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:41
&gt; &gt; +class DummyControllerClient : public CCLayerAnimationControllerImplClient {
&gt; 
&gt; I think we&apos;ve setttled on the word Fake, fwiw.
Fixed
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:50
&gt; &gt; +    virtual const IntSize&amp; renderBoxBorderSize() const { return m_size; }
&gt; 
&gt; no longer needed?
Removed.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:118
&gt; &gt; +
&gt; 
&gt; Probably want test of didActivate.... you&apos;ve got all the plumbing for it, it seems, just not the tests.
Added.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:119
&gt; &gt; +void addAnimation(CCLayerAnimationControllerImpl* controller, PassOwnPtr&lt;CCAnimation&gt; animation, int id, CCLayerAnimationControllerImpl::Property property, CCLayerAnimationControllerImpl::RunState runState, double when, int iterations)
&gt; 
&gt; I think this makes the case for CCLayerAnimationControllerImpl::ActiveAnimation to be directly constructable by end code and directly addable to the AnimationControllerImpl.
&gt; 
&gt; Also, what do you think about making take ActiveAnimation and make it a toplevel class, e.g. CCActiveAnimation? The RunState enum might become an internal member of CCActiveAnimation instead of being on the animationcontroller.... Since the activeanimation class has some logic on its own, I almost think it should be its own file and have its own tests independent of the controller...
Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:124
&gt; &gt; +// Transition opacity from 0 to 1
&gt; 
&gt; Comments are complete sentences.
Fixed.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:182
&gt; &gt; +    addAnimation(controller.get(),
&gt; 
&gt; Though its more typing, I think this would read better if you made ActiveAnimations start up in a fixed state and reasonable defaults, then had to set their state explicitly as followup methods. Decoding what the positional arguments mean here is pretty hard as a noob to the code.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530488</commentid>
    <comment_count>22</comment_count>
      <attachid>121290</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 11:40:26 -0800</bug_when>
    <thetext>Comment on attachment 121290
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:41
&gt; +    , m_startTime(0.0)

don&apos;t suffix these with &quot;.0&quot;. see http://www.webkit.org/coding/coding-style.html &quot;Floating point literals&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:47
&gt; +void CCActiveAnimation::setRunState(RunState runState, double t)

here and elsewhere: we don&apos;t normally use abbreviations and never use one-letter variable names in WebKit except for &apos;i&apos; and &apos;j&apos; as loop counters, so this needs to be an actual word. See http://www.webkit.org/coding/coding-style.html &quot;Names&quot;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.h:72
&gt; +    CCLayerAnimationControllerImpl(CCLayerAnimationControllerImplClient*);

please add the &apos;explicit&apos; keyword to all 1-arg constructors, unless you truly do want implicit conversion behavior (which is rarely the case)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530535</commentid>
    <comment_count>23</comment_count>
      <attachid>121290</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-05 12:24:39 -0800</bug_when>
    <thetext>Comment on attachment 121290
Patch

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

Any sense in calling CCAnimation a CCAnimationCurve? NBD if thats a pain to rename...

I definitely think making IDs unique and then dealing with intra-property chaining using vector&lt;ID&gt; m_animationsThatMustBeFinishedBeforeWeRun; // or something like that

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:48
&gt; +{

give t in this function a better name? is it &quot;now&quot;?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:49
&gt; +    // FIXME: eventually we will want to notify observers here.

This comment probably should get snipped, dont think it adds value.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:50
&gt; +    switch (runState) {

this switch can probably be written as a few if statements for special cases...

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:70
&gt; +    if (runState() == Finished || runState() == Aborted)

is there a reason you&apos;re using runState() vs m_runState?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:85
&gt; +    // all time spent paused

End sentence with .

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:107
&gt; +

should this file have unit tests?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:42
&gt; +    enum RunState {

Might put a basic explanation of the state transition graph here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:33
&gt; +namespace {

You dont need to namespace the typedef, I think?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:35
&gt; +}

Bit puzzled by this type name

&gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:411
&gt; +// Tests that adding an animation to the controller calls the appropriate callback on the controller client

Is this sufficient coverage?

Does aborting one animation have any vulnerability points?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530750</commentid>
    <comment_count>24</comment_count>
      <attachid>121290</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-05 16:15:14 -0800</bug_when>
    <thetext>Comment on attachment 121290
Patch

Attachment 121290 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11145129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532572</commentid>
    <comment_count>25</comment_count>
      <attachid>121735</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-09 15:34:31 -0800</bug_when>
    <thetext>Created attachment 121735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532574</commentid>
    <comment_count>26</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-01-09 15:38:03 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 121290 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121290&amp;action=review
&gt; 
&gt; Any sense in calling CCAnimation a CCAnimationCurve? NBD if thats a pain to rename...
Done. That&apos;s a much better name.
&gt; 
&gt; I definitely think making IDs unique and then dealing with intra-property chaining using vector&lt;ID&gt; m_animationsThatMustBeFinishedBeforeWeRun; // or something like that
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:48
&gt; &gt; +{
&gt; 
&gt; give t in this function a better name? is it &quot;now&quot;?
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:49
&gt; &gt; +    // FIXME: eventually we will want to notify observers here.
&gt; 
&gt; This comment probably should get snipped, dont think it adds value.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:50
&gt; &gt; +    switch (runState) {
&gt; 
&gt; this switch can probably be written as a few if statements for special cases...
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:70
&gt; &gt; +    if (runState() == Finished || runState() == Aborted)
&gt; 
&gt; is there a reason you&apos;re using runState() vs m_runState?
Nope. Switched to m_runState.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:85
&gt; &gt; +    // all time spent paused
&gt; 
&gt; End sentence with .
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:107
&gt; &gt; +
&gt; 
&gt; should this file have unit tests?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:42
&gt; &gt; +    enum RunState {
&gt; 
&gt; Might put a basic explanation of the state transition graph here.
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:33
&gt; &gt; +namespace {
&gt; 
&gt; You dont need to namespace the typedef, I think?
Removed.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:35
&gt; &gt; +}
&gt; 
&gt; Bit puzzled by this type name
Added a comment.
&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerAnimationControllerImplTest.cpp:411
&gt; &gt; +// Tests that adding an animation to the controller calls the appropriate callback on the controller client
&gt; 
&gt; Is this sufficient coverage?
&gt; 
&gt; Does aborting one animation have any vulnerability points?
There&apos;s a concern when one of the animations is in a group is aborted, scheduling will proceed correctly. Added another test for this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532690</commentid>
    <comment_count>27</comment_count>
      <attachid>121735</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-09 17:17:56 -0800</bug_when>
    <thetext>Comment on attachment 121735
Patch

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

Nearly LGTM. Nits and setGroupID/ GroupID typedef

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:62
&gt; +bool CCActiveAnimation::isFinishedAt(double now) const

now-&gt;time?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:35
&gt; +// A CCActiveAnimation, contains all the state required to play a CCAnimation.

CCAnimation referenc

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationCurve.h:34
&gt; +// An animation is essentially a function that returns a value given a time.

Remove &quot;essentially&quot; :)

An animation -&gt; An animation curve

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationCurve.h:35
&gt; +// There are currently only two types of animation, float and transform.

types of animation -&gt; types of curves

&gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationCurve.h:53
&gt; +    // Returns true if the animation is finished.

Do we need to return bool now that we know duration?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:107
&gt; +        // if it&apos;s enqueued

Lets steer clear of &quot;Enqueued&quot; as a word.

Also, complete setnence comments or none at all. Probably this comment isn&apos;t very useful?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:109
&gt; +            // collect all properties for animations with the same id (they should all also be enqueued)

collect -&gt; Collect

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:121
&gt; +            // if there&apos;s nothing in common, start them up.

if -&gt; If

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:159
&gt; +    // each iteration, m_activeAnimations.size() decreases or i increments

Capitalize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533196</commentid>
    <comment_count>28</comment_count>
      <attachid>121870</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-10 10:54:58 -0800</bug_when>
    <thetext>Created attachment 121870
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533202</commentid>
    <comment_count>29</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-01-10 10:59:36 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 121735 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121735&amp;action=review
&gt; 
&gt; Nearly LGTM. Nits and setGroupID/ GroupID typedef
GroupID added.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.cpp:62
&gt; &gt; +bool CCActiveAnimation::isFinishedAt(double now) const
&gt; 
&gt; now-&gt;time?
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCActiveAnimation.h:35
&gt; &gt; +// A CCActiveAnimation, contains all the state required to play a CCAnimation.
&gt; 
&gt; CCAnimation referenc
Switched to CCAnimationCurve
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationCurve.h:34
&gt; &gt; +// An animation is essentially a function that returns a value given a time.
&gt; 
&gt; Remove &quot;essentially&quot; :)
Removed.
&gt; 
&gt; An animation -&gt; An animation curve
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationCurve.h:35
&gt; &gt; +// There are currently only two types of animation, float and transform.
&gt; 
&gt; types of animation -&gt; types of curves
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCAnimationCurve.h:53
&gt; &gt; +    // Returns true if the animation is finished.
&gt; 
&gt; Do we need to return bool now that we know duration?
Nope. The getValue functions now return the value.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:107
&gt; &gt; +        // if it&apos;s enqueued
&gt; 
&gt; Lets steer clear of &quot;Enqueued&quot; as a word.
Removed.
&gt; 
&gt; Also, complete setnence comments or none at all. Probably this comment isn&apos;t very useful?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:109
&gt; &gt; +            // collect all properties for animations with the same id (they should all also be enqueued)
&gt; 
&gt; collect -&gt; Collect
Capitalized.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:121
&gt; &gt; +            // if there&apos;s nothing in common, start them up.
&gt; 
&gt; if -&gt; If
Done.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:159
&gt; &gt; +    // each iteration, m_activeAnimations.size() decreases or i increments
&gt; 
&gt; Capitalize
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533206</commentid>
    <comment_count>30</comment_count>
      <attachid>121870</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-10 11:03:53 -0800</bug_when>
    <thetext>Comment on attachment 121870
Patch

LGTM. @jamesr, your turn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538076</commentid>
    <comment_count>31</comment_count>
      <attachid>121870</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-18 12:32:13 -0800</bug_when>
    <thetext>Comment on attachment 121870
Patch

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

rs=me based on nduca&apos;s review. Nice tests.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:67
&gt; +    for (size_t i = 0; i &lt; m_activeAnimations.size(); ++i)

Note: it&apos;s OK to use braces for a for loop like this, since its body is more than one line long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538096</commentid>
    <comment_count>32</comment_count>
      <attachid>122977</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-18 13:12:00 -0800</bug_when>
    <thetext>Created attachment 122977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538097</commentid>
    <comment_count>33</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-01-18 13:13:21 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 121870 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121870&amp;action=review
&gt; 
&gt; rs=me based on nduca&apos;s review. Nice tests.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerAnimationControllerImpl.cpp:67
&gt; &gt; +    for (size_t i = 0; i &lt; m_activeAnimations.size(); ++i)
&gt; 
&gt; Note: it&apos;s OK to use braces for a for loop like this, since its body is more than one line long.

I&apos;ve rebased and updated the braces as you mentioned in the latest patch -- it looks a lot nicer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538120</commentid>
    <comment_count>34</comment_count>
      <attachid>122985</attachid>
    <who name="">vollick</who>
    <bug_when>2012-01-18 13:48:25 -0800</bug_when>
    <thetext>Created attachment 122985
Patch

Another attempt at rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538217</commentid>
    <comment_count>35</comment_count>
      <attachid>122985</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 15:10:37 -0800</bug_when>
    <thetext>Comment on attachment 122985
Patch

Rejecting attachment 122985 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/11211808</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538275</commentid>
    <comment_count>36</comment_count>
      <attachid>122985</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-18 15:46:08 -0800</bug_when>
    <thetext>Comment on attachment 122985
Patch

rs=me again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538423</commentid>
    <comment_count>37</comment_count>
      <attachid>122985</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 20:18:16 -0800</bug_when>
    <thetext>Comment on attachment 122985
Patch

Clearing flags on attachment: 122985

Committed r105377: &lt;http://trac.webkit.org/changeset/105377&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538424</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 20:18:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116982</attachid>
            <date>2011-11-29 09:15:09 -0800</date>
            <delta_ts>2011-12-01 13:48:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20111129121507.patch</filename>
            <type>text/plain</type>
            <size>28397</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUwYjdmNGUxM2M0NmE0
ODlkMTE0MGIzNjkzYjYxZWYyNzMyNzU2Ni4uNjIxY2U2NTU5OGY0Y2YzZTAwNTZiNzFhNzczNWFh
MzVhZTcxMmQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTExLTI5ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1F
bGVtZW50OjpnZXRDdXJyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtRWxlbWVudDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3Jt
RWxlbWVudDo6b25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtRWxlbWVu
dDo6b25Qcm9ncmVzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25FbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbk9ic2VydmVyOjp+Q0NBbmltYXRpb25PYnNlcnZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRvci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphbmltYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0QW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgIChDQ0Vhc2VJblJl
c2FtcGxlcjo6Q0NFYXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlSW5SZXNhbXBsZXI6
On5DQ0Vhc2VJblJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6OkNDRWFz
ZU91dFJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6On5DQ0Vhc2VPdXRS
ZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjpDQ0Vhc2VPdXRF
YXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjp+Q0NF
YXNlSW5DQ0Vhc2VPdXRFYXNlSW5SZXNhbXBsZXJSZXNhbXBsZXIpOgorCiAyMDExLTExLTI4ICBB
bmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbnNwZWN0b3JDU1NB
Z2VudDogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBpbmxpbmVTdHlsZUVsZW1lbnQoKS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5p
bWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwMjNmMTQ5NWQ5OGVlODIzMTAzODNkNzc4YTNkMjgx
MTBhMTc2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbi5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25faAorCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NBbmltYXRpb25PYnNlcnZlcjsKKworLy8gQSBjb21w
bGV0ZSBjdXJ2ZSB3aXRoIGxvdHMgb2Yga2V5ZnJhbWVzLgorY2xhc3MgQ0NBbmltYXRpb24gewor
cHVibGljOgorICAgIGVudW0gQW5pbWF0YWJsZVByb3BlcnR5IHsKKyAgICAgICAgT1BBQ0lUWSwK
KyAgICAgICAgUE9TSVRJT04sCisgICAgICAgIFRSQU5TRk9STSwKKyAgICAgICAgWk9PTV9BTklN
QVRPUl9UUkFOU0ZPUk0sCisgICAgICAgIERSQVdfVFJBTlNGT1JNLAorICAgICAgICAvLyBUT0RP
KHZvbGxpY2spOiBhZGQgdGhlIHJlc3QKKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoU2V0PEFu
aW1hdGFibGVQcm9wZXJ0eT4gQW5pbWF0YWJsZVByb3BlcnRpZXM7CisKKyAgICBDQ0FuaW1hdGlv
bigpOworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uKCk7CisKKyAgICAvLyBVcGRhdGVzIHRoZSBh
bmltYXRpb24gY2xpZW50IGZvciB0aGUgZ2l2ZW4gdGltZS4KKyAgICB2b2lkIHByb2dyZXNzKGRv
dWJsZSBjdXJyZW50VGltZSwgQ0NMYXllckltcGwqKTsKKworICAgIC8vIEltbWVkaWF0ZWx5IHN0
b3BzIHRoZSBhbmltYXRpb24uCisgICAgdm9pZCBhYm9ydCgpOworCisgICAgLy8gU2V0cyB0aGUg
Y2xpZW50IHRvIHRoZSB0YXJnZXQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbiAtLSBsaWtlIGZhc3Qg
Zm9yd2FyZGluZyB0byB0aGUgZW5kLgorICAgIHZvaWQgZ2V0VGFyZ2V0VmFsdWUoQ0NMYXllcklt
cGwqKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIHByb3BlcnRpZXMgdGhpcyBhbmltYXRp
b24gYWZmZWN0cy4KKyAgICB2b2lkIGNvbnN0IENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcGVy
dGllcyYgcHJvcGVydGllcygpIGNvbnN0OworCisgICAgLy8gTmVnYXRpdmUgPT0gaW5maW5pdGUu
CisgICAgdm9pZCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCA9IDA7CisKKyAgICAvLyBOZWdhdGl2
ZSA9PSBpbmZpbml0ZSBsb29waW5nLiBaZXJvIG1lYW5zICdkbyBub3RoaW5nJy4KKyAgICB2b2lk
IHNldExvb3BJdGVyYXRpb25zKGludCk7CisgICAgaW50IGxvb3BJdGVyYXRpb25zKCk7CisKKyAg
ICAvLyBBZGRzIGFuIGVsZW1lbnQgdG8gdGhlIGxpc3QgdGhhdCBpcyBzY2hlZHVsZWQgdG8gc3Rh
cnQgYXQgdGhlIGdpdmVuIHRpbWUuCisgICAgLy8gTm90ZTogdGltZSBpcyByZWxhdGl2ZSB0byB0
aGUgc3RhcnQgdGltZSBvZiB0aGUgYW5pbWF0aW9uLgorICAgIHZvaWQgYWRkRWxlbWVudChQYXNz
T3duUHRyPENDQW5pbWF0aW9uRWxlbWVudD4sIGRvdWJsZSByZWxhdGl2ZVN0YXJ0VGltZSk7CisK
KyAgICAvLyBTY2hlZHVsZXMgdGhlIGVsZW1lbnQgdG8gc3RhcnQgaW1tZWRpYXRlbHkgYWZ0ZXIg
YWxsIHNjaGVkdWxlZCBhbmltYXRpb25zLgorICAgIHZvaWQgYXBwZW5kRWxlbWVudChQYXNzT3du
UHRyPENDQW5pbWF0aW9uRWxlbWVudD4pOworCisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1
c2VkIGZvciBhZGRpbmcgb3IgcmVtb3Zpbmcgb2JzZXJ2ZXJzIGZyb20gdGhlIG9ic2VydmVyCisg
ICAgLy8gbGlzdC4gVGhlIG9ic2VydmVycyBhcmUgbm90aWZpZWQgd2hlbiBhbmltYXRpb25zIGVu
ZC4KKyAgICB2b2lkIGFkZE9ic2VydmVyKFBhc3NSZWZQdHI8Q0NBbmltYXRpb25PYnNlcnZlcj4p
OworICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoQ0NBbmltYXRpb25PYnNlcnZlciopOworCisgICAg
Ly8gQ2FsbGVkIHdoZW4gdGhlIGFuaW1hdG9yIHNjaGVkdWxlcyB0aGlzIGFuaW1hdGlvbi4KKyAg
ICBvblNjaGVkdWxlZCgpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBTY2hlZHVsZWRFbGVtZW50
IHsKKyAgICAgICAgZG91YmxlIHRpbWU7CisgICAgICAgIENDQW5pbWF0aW9uRWxlbWVudCogZWxl
bWVudDsKKyAgICB9OworCisgICAgLy8gUmV0YWlucyB0aGUgZWxlbWVudHMgaW4gdGhpcyBhbmlt
YXRpb24uCisgICAgVmVjdG9yPE93blB0cjxDQ0FuaW1hdGlvbkVsZW1lbnQ+ID4gbV9lbGVtZW50
czsKKworICAgIC8vIEEgc29ydGVkIGxpc3QgKGJ5IHN0YXJ0IHRpbWUpIG9mIGVsZW1lbnRzLgor
ICAgIFZlY3RvcjxTY2hlZHVsZWRFbGVtZW50PiBtX2VsZW1lbnRzU29ydGVkQnlTdGFydFRpbWU7
CisKKyAgICAvLyBBIHNvcnRlZCBsaXN0IChieSBlbmQgdGltZSkgb2YgZWxlbWVudHMuCisgICAg
VmVjdG9yPFNjaGVkdWxlZEVsZW1lbnQ+IG1fZWxlbWVudHNTb3J0ZWRCeUVuZFRpbWU7CisKKyAg
ICAvLyBPYnNlcnZlcnMgbGlzdGVuIGZvciBhbmltYXRpb25zIGNvbXBsZXRpbmcuCisgICAgVmVj
dG9yPFJlZlB0cjxDQ0FuaW1hdGlvbk9ic2VydmVyPiA+IG1fb2JzZXJ2ZXJzOworCisgICAgLy8g
VGhlIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllcyBhZmZlY3RlZCBieSB0aGlzIGFuaW1hdGlvbi4K
KyAgICBBbmltYXRhYmxlUHJvcGVydGllcyBtX3Byb3BlcnRpZXM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
bmltYXRpb25FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmFjYzA3ODU5OGVhOWQwOTk3MGExYjJk
OTdlZmZiMGFkOWVlZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25FbGVtZW50LmNwcApAQCAtMCwwICsx
LDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
Y2MvQ0NBbmltYXRpb25FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIHsKKworLy8gVGhlIGZvbGxvd2luZyBjbGFzc2VzIGp1c3Qgb3ZlcnJpZGUgQ0NUcmFuc2Zv
cm1FbGVtZW50OjpnZXRDdXJyZW50VHJhbnNmb3JtCisvLyBhbmQgQ0NUcmFuc2Zvcm1FbGVtZW50
OjpzZXRUcmFuc2Zvcm0uIGUuZy4KK2NsYXNzIENDRHJhd1RyYW5zZm9ybUVsZW1lbnQgOiBwdWJs
aWMgQ0NUcmFuc2Zvcm1FbGVtZW50QmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NEcmF3VHJhbnNmb3JtRWxlbWVudD4gY3JlYXRlRHJhd1RyYW5zZm9ybUVsZW1lbnQoUGFz
c093blB0cjxUcmFuc2Zvcm1PcG9yYXRpb24+IG9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0NEcmF3VHJhbnNmb3JtRWxlbWVudChvcGVyYXRpb24pKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQ0NEcmF3VHJhbnNmb3JtRWxlbWVudChQYXNzT3duUHRyPFRy
YW5zZm9ybU9wb3JhdGlvbj4gb3BlcmF0aW9uKQorICAgICAgICA6IENDVHJhbnNmb3JtRWxlbWVu
dEJhc2Uob3BlcmF0aW9uKSB7IH0KKworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGdldEN1cnJlbnRUcmFuc2Zvcm0oQ0NMYXllckltcGwqIGxheWVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgfQorCisgICAgdmlydHVh
bCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0sIENDTGF5ZXJJbXBs
KiBsYXllcikKKyAgICB7CisgICAgICAgIHJldHVybiBsYXllci0+c2V0RHJhd1RyYW5zZm9ybSht
KTsKKyAgICB9Cit9OworCisvLyBUT0RPKHZvbGxpY2spOiB3cml0ZSB0aGVzZSBjbGFzc2VzLCB0
b28uCisvLyBjbGFzcyBDQ1NjcmVlblNwYWNlVHJhbnNmb3JtRWxlbWVudCA6IHB1YmxpYyBDQ1Ry
YW5zZm9ybUVsZW1lbnRCYXNlIHsKKy8vIH07CisvLyBjbGFzcyBDQ1N1YmxheWVyVHJhbnNmb3Jt
RWxlbWVudCA6IHB1YmxpYyBDQ1RyYW5zZm9ybUVsZW1lbnRCYXNlIHsKKy8vIH07CisvLyBjbGFz
cyBDQ1pvb21BbmltYXRvclRyYW5zZm9ybUVsZW1lbnQgOiBwdWJsaWMgQ0NUcmFuc2Zvcm1FbGVt
ZW50QmFzZSB7CisvLyB9OworCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIENDQW5pbWF0aW9uRWxl
bWVudDo6cmVzZXQoKQoreworICAgIG1fZmlyc3RfZnJhbWUgPSB0cnVlOworfQorCit2b2lkIEND
QW5pbWF0aW9uRWxlbWVudDo6cHJvZ3Jlc3MoZG91YmxlIHQsIENDTGF5ZXJJbXBsKiB0YXJnZXQp
IGNvbnN0Cit7CisgICAgaWYgKG1fZmlyc3RfZnJhbWUpIHsKKyAgICAgICAgb25TdGFydGVkKHRh
cmdldCk7CisgICAgICAgIG1fZmlyc3RfZnJhbWUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1f
cmVzYW1wbGVyLmdldCgpKQorICAgICAgICB0ID0gbV9yZXNhbXBsZXItPnJlc2FtcGxlKHQpOwor
ICAgIG9uUHJvZ3Jlc3ModCwgdGFyZ2V0KTsKK30KKworY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIENDVHJhbnNmb3JtRWxlbWVudDo6Z2V0Q3VycmVudFRyYW5zZm9ybShDQ0xheWVySW1wbCog
bGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT50cmFuc2Zvcm0oKTsKK30KKwordm9pZCBDQ1Ry
YW5zZm9ybUVsZW1lbnQ6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bSwgQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obSk7Cit9
CisKK3ZvaWQgQ0NUcmFuc2Zvcm1FbGVtZW50OjpvblN0YXJ0ZWQoQ0NMYXllckltcGwqIGxheWVy
KQoreworICAgIG1fb2xkX3RyYW5zZm9ybSA9IGdldEN1cnJlbnRUcmFuc2Zvcm0obGF5ZXIpOwor
fQorCit2b2lkIENDVHJhbnNmb3JtRWxlbWVudDo6b25Qcm9ncmVzcyhkb3VibGUgdCwgQ0NMYXll
ckltcGwqIGxheWVyKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSBtX29sZF90cmFu
c2Zvcm07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29wZXJhdGlvbnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fb3BlcmF0aW9uc1tpXS0+YmxlbmQoMCwgdCwgZmFsc2UpLT5hcHBseSht
KTsKKyAgICBzZXRUcmFuc2Zvcm0obSwgbGF5ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FuaW1hdGlvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmNTYzYzdi
Njc2OWU2NDUwYjdiZWEyMTMzZDAwOGJhZGY1NzFjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkVsZW1l
bnQuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FuaW1hdGlv
bkVsZW1lbnRfaAorI2RlZmluZSBDQ0FuaW1hdGlvbkVsZW1lbnRfaAorCisjaW5jbHVkZSAiY2Mv
Q0NBbmltYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NBbmltYXRpb25DbGllbnQ7CisKKy8vIFRoZSBjb25jZXB0
IG9mIGFuIGFuaW1hdGlvbiBlbGVtZW50IGlzIG1vcmUgZ2VuZXJhbCB0aGFuIGEga2V5ZnJhbWUu
IEFuIGFuaW1hdGlvbiBlbGVtZW50IGlzIGVzc2VudGlhbGx5CisvLyBhIGZ1bmN0aW9uIHRoYXQg
c2V0cyBsYXllciBwcm9wZXJ0aWVzIGdpdmVuIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIHdpdGgg
bm8gb3RoZXIgcmVzdHJpY3Rpb25zLiBLZXlmcmFtZXMKKy8vIGNhbiBlYXNpbHkgYmUgd3JpdHRl
biBpbiB0ZXJtcyBvZiBhbmltYXRpb24gZWxlbWVudHMsIGJ1dCB0aGlzIGFsc28gYWxsb3dzIGZv
ciBwYXJhbWV0cmljIGFuaW1hdGlvbiBpbgorLy8gdGVybXMgb2YgdC4gT25lIHBsYWNlIHdoZXJl
IHRoaXMgd2lsbCBiZSB1c2VmdWwKK2NsYXNzIENDQW5pbWF0aW9uRWxlbWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBbmltYXRpb25FbGVtZW50PiBjcmVhdGVPcGFjaXR5
RWxlbWVudChkb3VibGUgZHVyYXRpb24sIGRvdWJsZSB0YXJnZXRPcGFjaXR5KTsKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUVsZW1lbnQ+IGNyZWF0ZVJvdGF0aW9uRWxlbWVudChk
b3VibGUgZHVyYXRpb24sIGRvdWJsZSByYWRpYW5zKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q1RyYW5zZm9ybUVsZW1lbnQ+IGNyZWF0ZVJvdGF0aW9uRWxlbWVudChkb3VibGUgZHVyYXRpb24s
IGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSByYWRpYW5zKTsKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUVsZW1lbnQ+IGNyZWF0ZVRyYW5zbGF0aW9uRWxlbWVu
dChkb3VibGUgZHVyYXRpb24sIGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ1RyYW5zZm9ybUVsZW1lbnQ+IGNyZWF0ZVRyYW5zbGF0aW9uRWxlbWVudChkb3Vi
bGUgZHVyYXRpb24sIGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHopOworICAgIC8vIFRP
RE8odm9sbGljaykgY29tcGxldGUgdGhpcyBsaXN0Li4uCisKKyAgICB2b2lkIHJlc2V0KCk7Cisg
ICAgdm9pZCBwcm9ncmVzcyhkb3VibGUgdCwgQ0NMYXllckltcGwqKTsKKyAgICB2b2lkIHNldFJl
c2FtcGxlcihQYXNzT3duUHRyPENDUmVzYW1wbGVyPik7CisgICAgQ0NBbmltYXRpb246OkFuaW1h
dGFibGVQcm9wZXJ0eSBwcm9wZXJ0eSgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQ0NBbmlt
YXRpb25FbGVtZW50KENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcGVydHksIGRvdWJsZSBkdXJh
dGlvbik7CisKKyAgICAvLyBDYWxsZWQgYmVmb3JlIGZpcnN0IGNhbGwgdG8gb25Qcm9ncmVzcy4g
QWxsb3dzIGVsZW1lbnRzIHRvIGNhY2hlIHRoZSBjdXJyZW50IHN0YXRlLgorICAgIHZpcnR1YWwg
dm9pZCBvblN0YXJ0ZWQoQ0NMYXllckltcGwqKSA9IDA7CisKKyAgICAvLyB0IGhhcyBiZWVuIHJl
c2FtcGxlZCB1c2luZyByZXNhbXBsZXJfIGFuZCBpcyBpbiBbMCwgMV0KKyAgICB2aXJ0dWFsIHZv
aWQgb25Qcm9ncmVzcyhkb3VibGUgdCwgQ0NMYXllckltcGwqKSBjb25zdCA9IDA7CisKK3ByaXZh
dGU6CisgICAgLy8gVHJ1ZSB1bnRpbCB0aGUgZmlyc3QgY2FsbCB0byBwcm9ncmVzcyBhZnRlciBj
cmVhdGlvbiBvciBhIHJlc2V0LiBJdCdzIHVzZWQgdG8gZGV0ZXJtaW5lCisgICAgLy8gaWYgb25T
dGFydGVkIG5lZWRzIHRvIGJlIGNhbGxlZC4KKyAgICBib29sIG1fZmlyc3RGcmFtZTsKKworICAg
IC8vIFRoZSBwcm9wZXJ0eSBhZmZlY3RlZCBieSB0aGlzIGVsZW1lbnQuCisgICAgQ0NBbmltYXRp
b246OkFuaW1hdGFibGVQcm9wZXJ0eSBtX3Byb3BlcnR5OworCisgICAgLy8gaW4gbWlsbGlzZWNv
bmRzCisgICAgZG91YmxlIG1fZHVyYXRpb247CisKKyAgICAvLyByZW1hcHMgdCBcaW4gWzAsIDFd
IHRvIFswLCAxXSBhbGxvd2luZyBzbG93IGluLCBzbG93IG91dCwgZXRjLgorICAgIE93blB0cjxD
Q1Jlc2FtcGxlcj4gbV9yZXNhbXBsZXI7Cit9OworCitjbGFzcyBDQ1RyYW5zZm9ybUVsZW1lbnRC
YXNlIDogcHVibGljIENDQW5pbWF0aW9uRWxlbWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NUcmFuc2Zvcm1FbGVtZW50PiBjcmVhdGVUcmFuc2Zvcm1FbGVtZW50KGRvdWJs
ZSBkdXJhdGlvbiwgUGFzc093blB0cjxUcmFuc2Zvcm1PcG9yYXRpb24+IG9wZXJhdGlvbik7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1FbGVtZW50PiBjcmVhdGVTdWJsYXllclRy
YW5zZm9ybUVsZW1lbnQoZG91YmxlIGR1cmF0aW9uLCBQYXNzT3duUHRyPFRyYW5zZm9ybU9wb3Jh
dGlvbj4gb3BlcmF0aW9uKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybUVsZW1l
bnQ+IGNyZWF0ZVpvb21BbmltYXRvclRyYW5zZm9ybUVsZW1lbnQoZG91YmxlIGR1cmF0aW9uLCBQ
YXNzT3duUHRyPFRyYW5zZm9ybU9wb3JhdGlvbj4gb3BlcmF0aW9uKTsKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ1RyYW5zZm9ybUVsZW1lbnQ+IGNyZWF0ZURyYXdUcmFuc2Zvcm1UcmFuc2Zvcm1F
bGVtZW50KGRvdWJsZSBkdXJhdGlvbiwgUGFzc093blB0cjxUcmFuc2Zvcm1PcG9yYXRpb24+IG9w
ZXJhdGlvbik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1FbGVtZW50PiBjcmVh
dGVTY3JlZW5TcGFjZVRyYW5zZm9ybUVsZW1lbnQoZG91YmxlIGR1cmF0aW9uLCBQYXNzT3duUHRy
PFRyYW5zZm9ybU9wb3JhdGlvbj4gb3BlcmF0aW9uKTsKKworICAgIHZvaWQgYWRkT3BlcmF0aW9u
KFBhc3NPd25QdHI8VHJhbnNmb3JtT3BlcmF0aW9uPik7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnZXRDdXJyZW50VHJhbnNmb3JtKENDTGF5
ZXJJbXBsKik7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYsIENDTGF5ZXJJbXBsKik7CisKK3ByaXZhdGU6CisgICAgQ0NUcmFuc2Zvcm1F
bGVtZW50KFBhc3NPd25QdHI8VHJhbnNmb3JtT3BvcmF0aW9uPiBvcGVyYXRpb24pOworCisgICAg
Ly8gSW1wbGVtZW50YXRpb24gb2YgQ0NBbmltYXRpb25FbGVtZW50CisgICAgdmlydHVhbCB2b2lk
IG9uU3RhcnRlZChDQ0xheWVySW1wbCopOworICAgIHZpcnR1YWwgdm9pZCBvblByb2dyZXNzKGRv
dWJsZSB0LCBDQ0xheWVySW1wbCopOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vbGRU
cmFuc2Zvcm07CisgICAgVmVjdG9yPE93blB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID4gbV9vcGVy
YXRpb25zOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKworI2VuZGlmIC8vIENDQW5p
bWF0aW9uRWxlbWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbk9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbk9ic2VydmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjZiZjcxZjQ0ZGNmMGFmMzAxZjY2NDM2NDgxZGZhMDVkZjdiZTE4ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QW5pbWF0aW9uT2JzZXJ2ZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENDQW5pbWF0aW9uT2JzZXJ2ZXJfaAorI2RlZmluZSBDQ0FuaW1hdGlvbk9ic2VydmVyX2gK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBbiBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGNs
YXNzZXMgdGhhdCB3aGljaCB0byBiZSBub3RpZmllZCB3aGVuIGFuaW1hdGlvbnMKKy8vIGFyZSBz
Y2hlZHVsZWQsIGVuZGVkLCBvciBhYm9ydGVkLgorY2xhc3MgQ0NBbmltYXRpb25PYnNlcnZlciB7
CitwdWJsaWM6CisgICAgLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW5pbWF0aW9uIGlzIGFkZGVkIHRv
IGEgbGF5ZXIncyBxdWV1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25TY2hlZHVsZWQo
Q0NBbmltYXRpb24qKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgd2hlbiBhbiBhbmltYXRpb24gZW5k
cy4KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmRlZChDQ0FuaW1hdGlvbiopID0gMDsK
KworICAgIC8vIENhbGxlZCB3aGVuIGFuIGFuaW1hdGlvbiBpcyBhYm9ydGVkIGJlZm9yZSBpdCBj
b21wbGV0ZXMuIHxvbkFuaW1hdGlvbkVuZGVkfAorICAgIC8vIGlzIG5vdCBjYWxsZWQgaW4gdGhp
cyBjYXNlLgorICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkFib3J0ZWQoQ0NBbmltYXRpb24q
KSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbk9ic2VydmVyKCkg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlv
bk9ic2VydmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTA5NWEzZmZmODE0NDhm
YTEyODU0N2U0MTU5M2JhZDJhOGU1MTgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRvci5oCkBAIC0wLDAgKzEs
MTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0b3JfaAorI2RlZmluZSBDQ0Fu
aW1hdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NBbmltYXRpb25PYnNlcnZlcjsKKworY2xh
c3MgQ0NBbmltYXRvciB7CitwdWJsaWM6CisgICAgZW51bSBQcmVlbXB0aW9uU3RyYXRlZ3kgewor
ICAgICAgICBJTU1FRElBVEVMWV9TRVRfTkVXX1RBUkdFVCwKKyAgICAgICAgSU1NRURJQVRFTFlf
QU5JTUFURV9UT19ORVdfVEFSR0VULAorICAgICAgICBFTlFVRVVFX05FV19BTklNQVRJT04sCisg
ICAgICAgIFJFUExBQ0VfUVVFVUVEX0FOSU1BVElPTlMsCisgICAgICAgIEJMRU5EX1dJVEhfQ1VS
UkVOVF9BTklNQVRJT04KKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoU2V0PEFuaW1hdGFibGVQ
cm9wZXJ0eT4gQW5pbWF0YWJsZVByb3BlcnRpZXM7CisKKyAgICB2b2lkIGFuaW1hdGUoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lTXMpOworCisgICAgLy8gU3RhcnRzIGFuIGFuaW1hdGlvbi4gSWYgYW4g
YW5pbWF0aW9uIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBpcyBpbiBwcm9ncmVzcywKKyAgICAvLyBp
dCBuZWVkcyB0byBiZSBpbnRlcnJ1cHRlZCB3aXRoIHRoZSBuZXcgYW5pbWF0aW9uLgorICAgIHZv
aWQgc3RhcnRBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbj4pOworCisgICAgLy8gU2No
ZWR1bGVzIGFuIGFuaW1hdGlvbiB0byBiZSBydW4gYXMgc29vbiBhcyBwb3NzaWJsZSB3aXRob3V0
IGludGVycnVwdGluZworICAgIC8vIGFueSBjdXJyZW50bHkgcnVubmluZyBhbmltYXRpb25zLgor
ICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbj4pOworCisg
ICAgLy8gU2NoZWR1bGVzIGFuaW1hdGlvbnMgdG8gYmUgcnVuIGF0IHRoZSBzYW1lIHRpbWUgYXMg
c29vbiBhcyBwb3NzaWJsZSB3aXRob3V0CisgICAgLy8gaW50ZXJydXB0aW5nIGFueSBjdXJyZW50
bHkgcnVubmluZyBhbmltYXRpb25zLgorICAgIC8vICMjIyNOQVQgLS0gaXMgdGhpcyB0aGUgcmln
aHQgd2F5IHRvIHBhc3Mgb3duZXJzaGlwIG9mIGEgYnVuY2ggb2YgYW5pbWF0aW9ucyB0bworICAg
IC8vIHRoZSBhbmltYXRvcj8gV291bGQgVmVjdG9yPE93blB0cjxDQ0FuaW1hdGlvbj4gPiBiZSBi
ZXR0ZXI/CisgICAgdm9pZCBzY2hlZHVsZVRvZ2V0aGVyKFBhc3NPd25QdHI8VmVjdG9yPE93blB0
cjxDQ0FuaW1hdGlvbj4gPiA+IGFuaW1hdGlvbnMpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBhbmltYXRvciBpcyBjdXJyZW50bHkgYW5pbWF0aW5nLgorICAgIGJvb2wgaXNBbmltYXRp
bmcoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYW5pbWF0b3IgaXMgY3Vy
cmVudGx5IGFuaW1hdGluZyB0aGUgZ2l2ZW4gcHJvcGVydHkuCisgICAgYm9vbCBpc0FuaW1hdGlu
Z1Byb3BlcnR5KENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcHJldHkgcHJvcGVydHkpIGNvbnN0
OworCisgICAgLy8gU3RvcHMgYWxsIGFuaW1hdGlvbnMgYW5kIGNsZWFycyB0aGUgcXVldWUuCisg
ICAgdm9pZCBzdG9wQW5pbWF0aW5nKCk7CisKKyAgICAvLyBTdG9wcyBhbnkgYW5pbWF0aW9uIHRo
YXQgYWZmZWN0cyB0aGUgZ2l2ZW4gcHJvcGVydHkuCisgICAgdm9pZCBzdG9wQW5pbWF0aW5nUHJv
cGVydHkoQ0NBbmltYXRpb246OkFuaW1hdGFibGVQcm9wcmV0eSBwcm9wZXJ0eSk7CisKKyAgICAv
LyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIGFkZGluZyBvciByZW1vdmluZyBvYnNlcnZl
cnMgZnJvbSB0aGUgb2JzZXJ2ZXIKKyAgICAvLyBsaXN0LiBUaGUgb2JzZXJ2ZXJzIGFyZSBub3Rp
ZmllZCB3aGVuIGFuaW1hdGlvbnMgZW5kLgorICAgIHZvaWQgQWRkT2JzZXJ2ZXIoUGFzc1JlZlB0
cjxDQ0FuaW1hdGlvbk9ic2VydmVyPik7CisgICAgdm9pZCBSZW1vdmVPYnNlcnZlcihDQ0FuaW1h
dGlvbk9ic2VydmVyKik7CisKKyAgICB2b2lkIHNldFByZWVtcHRpb25TdHJhdGVneShQcmVlbXB0
aW9uU3RyYXRlZ3kpOworICAgIFByZWVtcHRpb25TdHJhdGVneSBnZXRQcmVlbXB0aW9uU3RyYXRl
Z3koKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUnVubmluZ0FuaW1hdGlvbiB7Cisg
ICAgICAgIGRvdWJsZSBzdGFydFRpbWU7CisgICAgICAgIENDQW5pbWF0aW9uKiBhbmltYXRpb247
CisgICAgfTsKKworICAgIHR5cGVkZWYgVmVjdG9yPFJ1bm5pbmdBbmltYXRpb24+IFJ1bm5pbmdB
bmltYXRpb25zOworICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxDQ0FuaW1hdGlvbj4gPiBBbmlt
YXRpb25RdWV1ZTsKKworICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIu
CisgICAgQ0NBbmltYXRvcihDQ0xheWVySW1wbCopOworCisgICAgLy8gVGhpcyB0aGUgbGF5ZXIg
dG8gYmUgYW5pbWF0ZWQuCisgICAgQ0NMYXllckltcGwqIG1fbGF5ZXI7CisKKyAgICAvLyBUaGlz
IGlzIHRoZSBxdWV1ZSBvZiBhbmltYXRpb25zIHRvIHJ1bi4KKyAgICBBbmltYXRpb25RdWV1ZSBt
X2FuaW1hdGlvbk91ZXVlOworCisgICAgLy8gVGhlIGN1cnJlbnRseSBydW5uaW5nIGFuaW1hdGlv
bnMuCisgICAgUnVubmluZ0FuaW1hdGlvbnMgbV9ydW5uaW5nQW5pbWF0aW9uczsKKworICAgIC8v
IERldGVybWluZXMgaG93IGFuaW1hdGlvbnMgYXJlIGludGVycnVwdGVkLgorICAgIFByZWVtcHRp
b25TdHJhdGVneSBtX3ByZWVtcHRpb25TdHJhdGVneTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIENDQW5pbWF0b3JfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAK
aW5kZXggMTJkMjJlMmEyNDExMjJjYjU3Yjk5ZWRiZGY0NjNmZjljYjI4ODI0ZS4uMWY4YmZkMDIz
ZTgwODY1ZmUzMDA4MjNmZjkyN2Q5YWNhYTM0M2MyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDQW5pbWF0b3IuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CmluZGV4IGJmNmI2OGUxZTc4MjA3Y2UxYWM2ZmNmMjYyNTdmZDk3ZDRiZDgyNDEuLjBlOWUzOWJh
MDc3ODkwZjE2Y2UxN2IyNWNiNGQwOTVmMDFlNmQ5M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApA
QCAtMzksNiArMzksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQW5pbWF0
b3I7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTsKQEAgLTE5NCw2ICsxOTUsMTAgQEAgcHVibGljOgogICAgIGJv
b2wgbGF5ZXJQcm9wZXJ0eUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUHJvcGVydHlD
aGFuZ2VkOyB9CiAgICAgdm9pZCByZXNldFByb3BlcnR5Q2hhbmdlZEZsYWdGb3JTdWJ0cmVlKCk7
IC8vIGFsc28gcmVzZXRzIHByb3BlcnR5IGNoYW5nZSBmb3IgZXhpc3RpbmcgcmVuZGVyIHN1cmZh
Y2VzLgogCisgICAgQ0NMYXllckFuaW1hdG9yKiBhbmltYXRvcigpIHsgcmV0dXJuIG1fYW5pbWF0
b3IuZ2V0KCk7IH0KKyAgICBjb25zdCBDQ0xheWVyQW5pbWF0b3IqIGFuaW1hdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9hbmltYXRvci5nZXQoKSA7IH0KKyAgICB2b2lkIHNldEFuaW1hdG9yKFBhc3NP
d25QdHI8Q0NBbmltYXRvcj4gYW5pbWF0b3IpIHsgbV9hbmltYXRvciA9IGFuaW1hdG9yOyB9CisK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVySW1wbChpbnQpOwogCkBAIC0yOTYsNiAr
MzAxLDkgQEAgcHJpdmF0ZToKICAgICAvLyBSZWN0IGluZGljYXRpbmcgd2hhdCB3YXMgcmVwYWlu
dGVkL3VwZGF0ZWQgZHVyaW5nIHVwZGF0ZS4KICAgICAvLyBOb3RlIHRoYXQgcGx1Z2luIGxheWVy
cyBieXBhc3MgdGhpcyBhbmQgbGVhdmUgaXQgZW1wdHkuCiAgICAgRmxvYXRSZWN0IG1fdXBkYXRl
UmVjdDsKKworICAgIC8vIE1hbmFnZXMgbGF5ZXIgYW5pbWF0aW9ucy4KKyAgICBPd25QdHI8Q0NM
YXllckFuaW1hdG9yPiBtX2FuaW1hdG9yOwogfTsKIAogdm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGZpcnN0LCBWZWN0b3I8UmVmUHRyPENDTGF5
ZXJJbXBsPiA+OjppdGVyYXRvciBlbmQsIENDTGF5ZXJTb3J0ZXIqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggOGNmYmQzMDdhMDUwOTQwY2Y2YjA4NzE0ZGM1
ODI1ZmRmOGFhOTMxNi4uN2M1NTgzMDFlYzExOTZjZDNhMmUzMDEzOTMzMmVmYTAzMmZkNTc0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTg0LDYgKzg0LDEz
IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KCkKIAog
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1z
KQogeworICAgIC8vIEhvdyBkbyB3ZSBkbyB0aGlzIG1vc3QgZWZmaWNpZW50bHk/IENhbiB3ZSBi
dWlsZCB0aGUgbGlzdCBvZiBsYXllcnMgd2l0aAorICAgIC8vIGFuaW1hdGlvbnMgYXMgcGFydCBv
ZiB0aGUgY29tbWl0PworICAgIC8vCisgICAgLy8gZm9yIGFsbCBsYXllcnMsIGwsIHdpdGggYW5p
bWF0aW9ucworICAgIC8vICAgICAgbC0+YW5pbWF0b3IoKS0+YW5pbWF0ZShmcmFtZUJlZ2luVGlt
ZU1zKTsKKyAgICAvLyAgICAgIGlmICghbC0+YW5pbWF0b3IoKS0+aXNBbmltYXRpbmcoKSkKKyAg
ICAvLyAgICAgICAgICByZW1vdmUgbCBmcm9tIHRoZSBjb2xsZWN0aW9uIG9mIGxheWVycyB3aXRo
IGFuaW1hdGlvbnMKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVzYW1wbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Jlc2FtcGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiNTk3NTZhMWM2OTRkMTA4OTBmM2U0YmQ0
ZDEyMzkxNDMyYmVkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc2FtcGxlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ0NSZXNhbXBsZXJfaAorI2RlZmluZSBDQ1Jlc2FtcGxlcl9o
CisKKyNpbmNsdWRlICJVbml0QmV6aWVyLmgiCisKK2NsYXNzIENDUmVzYW1wbGVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5DQ1Jlc2FtcGxlcigpOworICAgIGRvdWJsZSByZXNhbXBsZShkb3Vi
bGUgdCkgY29uc3QgPSAwOworfTsKKworLy8gSXQgaXMgYXNzdW1lZCB0aGF0ICh4MSwgeTEpID0g
KDAsIDApIGFuZCAoeDQsIHk0KSA9ICgxLCAxKQorY2xhc3MgQ0NCZXppZXJSZXNhbXBsZXIgewor
cHVibGljOgorICAgIENDQmV6aWVyUmVzYW1wbGVyKGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3Vi
bGUgeDMsIGRvdWJsZSB5Myk7CisgICAgdmlydHVhbCB+Q0NCZXppZXJSZXNhbXBsZXIoKTsKKwor
ICAgIGRvdWJsZSByZXNhbXBsZShkb3VibGUgdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVW5p
dEJlemllciBtX2JlemllcjsKK307CisKK2NsYXNzIENDRWFzZUluUmVzYW1wbGVyIDogcHVibGlj
IEJlemllclJlc2FtcGxlciB7CitwdWJsaWM6CisgICAgQ0NFYXNlSW5SZXNhbXBsZXIoKSA6IEND
QmV6aWVyUmVzYW1wbGVyKDEuMCAvIDMuMCwgMS4wIC8gMy4wLCAyLjAgLyAzLjAsIDEuMCkgeyB9
CisgICAgfkNDRWFzZUluUmVzYW1wbGVyKCkgeyB9Cit9OworCitjbGFzcyBDQ0Vhc2VPdXRSZXNh
bXBsZXIgOiBwdWJsaWMgQmV6aWVyUmVzYW1wbGVyIHsKK3B1YmxpYzoKKyAgICBDQ0Vhc2VPdXRS
ZXNhbXBsZXIoKSA6IENDQmV6aWVyUmVzYW1wbGVyKDEuMCAvIDMuMCwgMC4wLCAyLjAgLyAzLjAs
IDIuMCAvIDMuMCkgeyB9CisgICAgfkNDRWFzZU91dFJlc2FtcGxlcigpIHsgfQorfTsKKworY2xh
c3MgQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyIDogcHVibGljIEJlemllclJlc2FtcGxlciB7Citw
dWJsaWM6CisgICAgQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyKCkgOiBDQ0JlemllclJlc2FtcGxl
cigxLjAgLyAzLjAsIDAuMCwgMi4wIC8gMy4wLCAxLjApIHsgfQorICAgIH5DQ0Vhc2VJbkNDRWFz
ZU91dEVhc2VJblJlc2FtcGxlclJlc2FtcGxlcigpIHsgfQorfTsKKworI2VuZGlmIC8vIENDUmVz
YW1wbGVyX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117480</attachid>
            <date>2011-12-01 13:49:02 -0800</date>
            <delta_ts>2011-12-01 13:57:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20111201164901.patch</filename>
            <type>text/plain</type>
            <size>34586</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY5MjZiNDJiYmY0NGQ5
YjY2YmI3NzMzODYwMTI4YWI5NTE0OGQ5OC4uYmQxZDQzNGY3OTY1ZGUxY2RlYzk0NjU4MjA5OWQy
ODA1NWZiOGVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTExLTI5ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1F
bGVtZW50OjpnZXRDdXJyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtRWxlbWVudDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3Jt
RWxlbWVudDo6b25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtRWxlbWVu
dDo6b25Qcm9ncmVzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25FbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbk9ic2VydmVyOjp+Q0NBbmltYXRpb25PYnNlcnZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRvci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphbmltYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0QW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgIChDQ0Vhc2VJblJl
c2FtcGxlcjo6Q0NFYXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlSW5SZXNhbXBsZXI6
On5DQ0Vhc2VJblJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6OkNDRWFz
ZU91dFJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6On5DQ0Vhc2VPdXRS
ZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjpDQ0Vhc2VPdXRF
YXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjp+Q0NF
YXNlSW5DQ0Vhc2VPdXRFYXNlSW5SZXNhbXBsZXJSZXNhbXBsZXIpOgorCiAyMDExLTExLTMwICBQ
YXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBnZXQgcmlkIG9mIGRlZmVycmVkIGJhY2tlbmQtPmZyb250LWVuZCBjb21tYW5kcyBwcm9j
ZXNzaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBbmltYXRpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTYwZTEwOWY0
NWVhNTE5OWVhZGI2MGU5MjJiMzM3ZTQ5YzgyMTNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25JbXBsLmgK
QEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25JbXBs
X2gKKyNkZWZpbmUgQ0NBbmltYXRpb25JbXBsX2gKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDQW5pYW10aW9uQ29sb3JUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25Db250YWluZXJJ
bXBsOworY2xhc3MgQ0NBbmltYXRpb25Db250cm9sbGVySW1wbDsKK2NsYXNzIENDQW5pbWF0aW9u
RmxvYXRUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25GbG9hdFBvaW50VGFyZ2V0SW1wbDsK
K2NsYXNzIENDQW5pbWF0aW9uSW50UG9pbnRUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25U
cmFuc2Zvcm1hdGlvbk1hdHJpeFRhcmdldEltcGw7CisKK2NsYXNzIENDQW5pbWF0aW9uSW1wbCA6
IHB1YmxpYyBSZWZDb3VudGVkPENDQW5pbWF0aW9uSW1wbD4geworcHVibGljOgorICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPHZvaWQqLCB2b2lkKj4gQW5pbWF0YWJsZVByb3BlcnR5OworCisgICAgLy8g
dm9sbGljazogSSBkZWNpZGVkIHRvIHVzZSBhIHNpZ25hdHVyZSAoYSBjb21iaW5hdGlvbiBvZiBp
bnN0YW5jZS9zZXR0ZXIgcG9pbnRlcnMpIHJhdGhlciB0aGFuCisgICAgLy8gcmF0aGVyIHRoYW4g
dGhlIGZvbGxvd2luZyBlbnVtLiBBIGNvbiBpcyB0aGF0IHRoZSBlbnVtIGNvbnN0YW50cyBhcmUg
bW9yZSBtZWFuaW5nZnVsLgorICAgIC8vIEEgcHJvIGlzIHRoYXQgaXQncyBlYXNpZXIgdG8gbWFp
bnRhaW4gdGhpcy4gV2hlbiB5b3UgYWRkIGEgbmV3IGFuaW1hdGFibGUgcHJvcGVydHksIHlvdQor
ICAgIC8vIG5vIGxvbmdlciBoYXZlIHRvIHVwZGF0ZSBhbiBlbnVtIGFuZCBhbGwgb2YgdGhlIHJl
bGF0ZWQgc3dpdGNoIHN0YXRlbWVudHMuIEFsc28sIHdlIGNhbgorICAgIC8vIGRpZmZlcmVudGlh
dGUgYmV0d2VlbiBwcm9wZXJ0aWVzIG9uIGRpZmZlcmVudCBvYmplY3RzLiBMZXQgbWUga25vdyBp
ZiB5b3UgdGhpbmsgdGhpcyBpcyBhIGJhZCB0cmFkZW9mZi4KKyAgICAvLworICAgIC8vICBlbnVt
IEFuaW1hdGFibGVQcm9wZXJ0eSB7CisgICAgLy8gICAgICBBTkNIT1JfUE9JTlQsIEFOQ0hPUl9Q
T0lOVF9aLCBCQUNLR1JPVU5EX0NPTE9SLCBPUEFDSVRZLAorICAgIC8vICAgICAgUE9TSVRJT04s
IFRSQU5TRk9STSwgWk9PTV9BTklNQVRPUl9UUkFOU0ZPUk0sCisgICAgLy8gICAgICBTQ1JFRU5f
U1BBQ0VfVFJBTlNGT1JNLCBCT1VORFMsIENPTlRFTlRfQk9VTkRTLCBTQ1JPTExfUE9TSVRJT04K
KyAgICAvLyAgfTsKKworICAgIGNsYXNzIEFuaW1hdGFibGVQcm9wZXJ0aWVzIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vIEVuc3VyZSBubyBkdXBsaWNhdGVzLgorICAgICAgICB2b2lkIGFkZChB
bmltYXRhYmxlUHJvcGVydHkpOworICAgICAgICB2b2lkIGFkZChjb25zdCBBbmltYXRhYmxlUHJv
cGVydGllcyYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPEFuaW1hdGFibGVQcm9w
ZXJ0eT4gbV9wcm9wZXJ0aWVzOworICAgIH07CisKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAg
V2FpdGluZ1RvUnVuLAorICAgICAgICBSdW5uaW5nLAorICAgICAgICBQYXVzZWQsCisgICAgICAg
IEZpbmlzaGVkCisgICAgfTsKKworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uSW1wbCgpOworCisg
ICAgLy8gSWYgYW5pbWF0aW9ucyBjYW4gYmUgY3ljbGljLCB0aGVuIHx0fCBuZWVkcyB0byBiZSBp
biByZWxhdGl2ZSB0aW1lIChpLmUuLCBtcyBzaW5jZQorICAgIC8vIHRoZSBhbmltYXRpb24gd2Fz
IHN0YXJ0ZWQpLgorICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgdCk7CisKKyAgICAvLyBJcyB0aGlz
IHdoZXJlIGxvb3BpbmcgbG9naWMgc2hvdWxkIGxpdmU/CisKKyAgICB2aXJ0dWFsIGNvbnN0IEFu
aW1hdGFibGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCkgPSAwOworCisgICAgLy8gVGhlIGFuaW1h
dGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgY29udHJvbGxlci4KKyAgICB2b2lk
IHNldENvbnRyb2xsZXIoQ0NBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisgICAgdm9pZCBz
ZXRUaW1pbmdGdW5jdGlvbihQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKworICAgIFN0
YXRlIHN0YXRlKCkgY29uc3Q7CisgICAgLy8gV2lsbCBldmVudHVhbGx5IHVwZGF0ZSBsaXN0ZW5l
cihzKQorICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUpOworCisgICAgZG91YmxlIHN0YXJ0VGltZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0U3RhcnRUaW1lKGRvdWJsZSk7CisKKyAgICBkb3VibGUgZHVy
YXRpb24oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIENDQW5pbWF0aW9uKGRvdWJsZSBkdXJh
dGlvbik7CisKKyAgICAvLyBEb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgY29udGFpbmVy
LgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRhaW5lcihDQ0FuaW1hdGlvbkNvbnRhaW5lcklt
cGwqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21Db250YWluZXIoQ0NBbmltYXRp
b25Db250YWluZXJJbXBsKikgPSAwOworCisgICAgLy8gfHR8IGlzIGFkanVzdGVkIHVzaW5nIHRv
IHRoZSB0aW1pbmcgZnVuY3Rpb24uCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0ZShkb3VibGUg
dCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIENDQW5pbWF0aW9uQ29udHJvbGxlckltcGwq
IG1fY29udHJvbGxlcjsKKworICAgIC8vIGluIG1pbGxpc2Vjb25kcworICAgIGRvdWJsZSBtX2R1
cmF0aW9uOworCisgICAgT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IG1fdGltaW5nRnVuY3Rpb247
CisKKyAgICBTdGF0ZSBtX3N0YXRlOworCisgICAgZG91YmxlIG1fc3RhcnRUaW1lOworfTsKKwor
Y2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkltcGwgOiBwdWJsaWMgQ0NBbmltYXRpb25JbXBsIHsKK3B1
YmxpYzoKKyAgICAvLyBDcmVhdGVzIGFuIGFuaW1hdGlvbiB0aGF0IGJsZW5kcyBiZXR3ZWVuIHRo
ZSBvbGQgYW5kIHRoZSBuZXcgYW5pbWF0aW9uLgorICAgIC8vIHxsYXN0QW5pbVRpbWV8IGlzIHRo
ZSBsYXN0IHJlbGF0aXZlIHRpbWUgdXNlZCB3aXRoIHRoZSBvbGQgYW5pbWF0aW9uIChlLmcuLCBp
ZiB0aGUgb2xkIGFuaW1hdGlvbgorICAgIC8vIGhhZCBiZWVuIGFuaW1hdGluZyBmb3IgaGFsZiBh
IHNlY29uZCwgfGxhc3RBbmltVGltZXwgd291bGQgYmUgNTAwIG1zLCBub3QgdGhlIGFic29sdXRl
CisgICAgLy8gYW5pbWF0aW9uIHRpbWUuIEJsZW5kaW5nIHdvcmtzIGFzIGZvbGxvd3M6CisgICAg
Ly8gIC0gTGV0IHxyZW1haW5pbmd8ID0gfG9sZEFuaW1hdGlvbi5kdXJhdGlvbigpfCAtIHxsYXN0
QW5pbVRpbWV8CisgICAgLy8gIC0gSWYgb2xkQW5pbWF0aW9uKHQpIGFuZCBuZXdBbmltYXRpb24o
dCkgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIG9sZCBhbmQgbmV3IGFuaW1hdGlvbnMgYXQgdGltZSB0
LAorICAgIC8vICAgIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmxlbmRlZCBhbmltYXRpb24gYXQg
dGltZSB0IGlzOgorICAgIC8vICAgICAgaWYgKHQgPCByZW1haW5pbmcpCisgICAgLy8gICAgICAg
IHJldHVybiBpbnRlcnBvbGF0ZSh0IC8gcmVtYWluaW5nLCBvbGRBbmltYXRpb24odCksIG5ld0Fu
aW1hdGlvbih0KSkKKyAgICAvLyAgICAgIHJldHVybiBuZXdBbmltYXRpb24odCkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4gY3JlYXRlQmxlbmRlZChkb3VibGUg
bGFzdEFuaW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+IG9sZEFuaW0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4gbmV3QW5pbSk7CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4gY3JlYXRlKGRvdWJsZSBkdXJhdGlv
biwgZmxvYXQgc3RhcnQsIGZsb2F0IGVuZCk7CisKKyAgICAvLyBOZWVkIHRvIGJlIGFibGUgdG8g
cmVsZWFzZSB3aGVuIGNyZWF0aW5nIGJsZW5kZWQgYW5pbWF0aW9ucy4gVGhlIGJsZW5kZWQgYW5p
bWF0aW9uCisgICAgLy8gd2lsbCBzdGVhbCB0aGUgYW5pbWF0aW9uIGZyb20gb25lIG9mIHRoZSBj
aGlsZHJlbiwgYW5kIHBhc3MgZHVtbXkgdGFyZ2V0cyB0byB0aGUga2lkcy4KKyAgICBQYXNzT3du
UHRyPENDRmxvYXRBbmltYXRpb25UYXJnZXRJbXBsPiByZWxlYXNlVGFyZ2V0KCk7CisgICAgdm9p
ZCBzZXRUYXJnZXQoUGFzc093blB0cjxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1wbD4pOworCisg
ICAgdmlydHVhbCB+Q0NGbG9hdEFuaW1hdGlvbkltcGwoKTsKK3Byb3RlY3RlZDoKKyAgICBDQ0Zs
b2F0QW5pbWF0aW9uSW1wbChkb3VibGUgZHVyYXRpb24pOworCitwcml2YXRlOgorICAgIC8vIFBh
cnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ0NBbmltYXRpb25JbXBsIChvdGhlciB0aGFuIHxhbmlt
YXRlfCkuCisgICAgdmlydHVhbCB2b2lkIGFkZFRvQ29udGFpbmVyKENDQW5pbWF0aW9uQ29udGFp
bmVySW1wbCopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tQ29udGFpbmVyKENDQW5pbWF0
aW9uQ29udGFpbmVySW1wbCopOworICAgIHZpcnR1YWwgY29uc3QgQW5pbWF0YWJsZVByb3BlcnRp
ZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1w
bD4gbV90YXJnZXQ7Cit9OworCitjbGFzcyBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9u
SW1wbCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBsPiBjcmVhdGVCbGVuZGVk
KGRvdWJsZSBsYXN0QW5pbVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ1RyYW5z
Zm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uSW1wbD4gb2xkQW5pbSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YXNzUmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBsPiBuZXdBbmltKTsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25J
bXBsPiBjcmVhdGUoZG91YmxlIGR1cmF0aW9uLCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4pOworCisgICAgUGFzc093blB0cjxDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFy
Z2V0SW1wbD4gcmVsZWFzZVRhcmdldCgpOworICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NPd25QdHI8
Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRhcmdldEltcGw+KTsKKworICAgIHZpcnR1
YWwgfkNDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBsKCk7Citwcm90ZWN0ZWQ6Cisg
ICAgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbkltcGwoZG91YmxlIGR1cmF0aW9uKTsK
KworcHJpdmF0ZToKKyAgICAvLyBQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIENDQW5pbWF0aW9u
SW1wbCAob3RoZXIgdGhhbiB8YW5pbWF0ZXwpLgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRh
aW5lcihDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGwqKik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUZyb21Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1YWwg
Y29uc3QgQW5pbWF0YWJsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxD
Q1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFyZ2V0SW1wbD4gbV90YXJnZXQ7Cit9Owor
CitjbGFzcyBDQ0NvbG9yQW5pbWF0aW9uSW1wbCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkltcGwgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBsPiBjcmVh
dGVCbGVuZGVkKGRvdWJsZSBsYXN0QW5pbVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0NvbG9yQW5pbWF0
aW9uSW1wbD4gb2xkQW5pbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBsPiBuZXdB
bmltKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBsPiBjcmVh
dGUoZG91YmxlIGR1cmF0aW9uLCBjb25zdCBDb2xvciYgc3RhcnQsIGNvbnN0IENvbG9yJiBlbmQp
OworCisgICAgUGFzc093blB0cjxDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbD4gcmVsZWFzZVRh
cmdldCgpOworICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NPd25QdHI8Q0NDb2xvckFuaW1hdGlvblRh
cmdldEltcGw+KTsKKworICAgIHZpcnR1YWwgfkNDQ29sb3JBbmltYXRpb25JbXBsKCk7Citwcm90
ZWN0ZWQ6CisgICAgQ0NDb2xvckFuaW1hdGlvbkltcGwoZG91YmxlIGR1cmF0aW9uKTsKKworcHJp
dmF0ZToKKyAgICAvLyBQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIENDQW5pbWF0aW9uSW1wbCAo
b3RoZXIgdGhhbiB8YW5pbWF0ZXwpLgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRhaW5lcihD
Q0FuaW1hdGlvbkNvbnRhaW5lckltcGwqKik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21D
b250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1YWwgY29uc3Qg
QW5pbWF0YWJsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxDQ0NvbG9y
QW5pbWF0aW9uVGFyZ2V0SW1wbD4gbV90YXJnZXQ7Cit9OworCitjbGFzcyBDQ0Zsb2F0UG9pbnRB
bmltYXRpb25JbXBsIDogcHVibGljIENDQW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbD4gY3JlYXRlQmxlbmRlZChk
b3VibGUgbGFzdEFuaW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRp
b25JbXBsPiBvbGRBbmltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25J
bXBsPiBuZXdBbmltKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDRmxvYXRQb2ludEFuaW1h
dGlvbkltcGw+IGNyZWF0ZShkb3VibGUgZHVyYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
LCBjb25zdCBGbG9hdFBvaW50JiBlbmQpOworCisgICAgUGFzc093blB0cjxDQ0Zsb2F0UG9pbnRB
bmltYXRpb25UYXJnZXRJbXBsPiByZWxlYXNlVGFyZ2V0KCk7CisgICAgdm9pZCBzZXRUYXJnZXQo
UGFzc093blB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPik7CisKKyAgICB2aXJ0
dWFsIH5DQ0Zsb2F0UG9pbnRBbmltYXRpb25JbXBsKCk7Citwcm90ZWN0ZWQ6CisgICAgQ0NGbG9h
dFBvaW50QW5pbWF0aW9uSW1wbChkb3VibGUgZHVyYXRpb24pOworCitwcml2YXRlOgorICAgIC8v
IFBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ0NBbmltYXRpb25JbXBsIChvdGhlciB0aGFuIHxh
bmltYXRlfCkuCisgICAgdmlydHVhbCB2b2lkIGFkZFRvQ29udGFpbmVyKENDQW5pbWF0aW9uQ29u
dGFpbmVySW1wbCoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbUNvbnRhaW5lcihDQ0Fu
aW1hdGlvbkNvbnRhaW5lckltcGwqKik7CisgICAgdmlydHVhbCBjb25zdCBBbmltYXRhYmxlUHJv
cGVydGllcyYgcHJvcGVydGllcygpOworCisgICAgT3duUHRyPENDRmxvYXRQb2ludEFuaW1hdGlv
blRhcmdldEltcGw+IG1fdGFyZ2V0OworfTsKKworY2xhc3MgQ0NJbnRQb2ludEFuaW1hdGlvbklt
cGwgOiBwdWJsaWMgQ0NBbmltYXRpb25JbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4gY3JlYXRlQmxlbmRlZChkb3VibGUgbGFzdEFu
aW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NJbnRQb2ludEFuaW1hdGlvbkltcGw+IG9sZEFuaW0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4gbmV3QW5pbSk7CisKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4gY3JlYXRlKGRvdWJs
ZSBkdXJhdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0YXJ0LCBjb25zdCBJbnRQb2ludCYgZW5kKTsK
KworICAgIFBhc3NPd25QdHI8Q0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+IHJlbGVhc2VU
YXJnZXQoKTsKKyAgICB2b2lkIHNldFRhcmdldChQYXNzT3duUHRyPENDSW50UG9pbnRBbmltYXRp
b25UYXJnZXRJbXBsPik7CisKKyAgICB2aXJ0dWFsIH5DQ0ludFBvaW50QW5pbWF0aW9uSW1wbCgp
OworcHJvdGVjdGVkOgorICAgIENDSW50UG9pbnRBbmltYXRpb25JbXBsKGRvdWJsZSBkdXJhdGlv
bik7CisKK3ByaXZhdGU6CisgICAgLy8gUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBDQ0FuaW1h
dGlvbkltcGwgKG90aGVyIHRoYW4gfGFuaW1hdGV8KS4KKyAgICB2aXJ0dWFsIHZvaWQgYWRkVG9D
b250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVGcm9tQ29udGFpbmVyKENDQW5pbWF0aW9uQ29udGFpbmVySW1wbCoqKTsKKyAgICB2aXJ0
dWFsIGNvbnN0IEFuaW1hdGFibGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCk7CisKKyAgICBPd25Q
dHI8Q0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+IG1fdGFyZ2V0OworfTsKKworLy8gQ2Fu
IHNlcnZlIHR3byBwdXJwb3NlczoKKy8vICAxKSBBcyBnZW5lcmFsIHN0b3JhZ2UgZm9yIGFuaW1h
dGlvbnMuCisvLyAgMikgQSBjb21wb3NpdGUgYW5pbWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhIGNv
bGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0byBiZSBydW4gc2ltdWx0YW5lb3VzbHkgKGUuZy4sIHNj
YWxlICYgcG9zaXRpb24pLgorY2xhc3MgQ0NBbmltYXRpb25Db250YWluZXJJbXBsIDogcHVibGlj
IENDQW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgLy8gRm9yIGVhY2ggdHlwZSBvZiBhbmlt
YXRpb24gKGFuZCBlYWNoIHByb3BlcnR5KSwgdGFrZSB0aGUgcnVubmluZyBhbmltYXRpb24gb2Yg
dGhhdCB0eXBlIGZvciB0aGF0IHByb3BlcnR5CisgICAgLy8gKGlmIHRoZXJlIGlzIG9uZSksIGFu
ZCBibGVuZCBpdCB3aXRoIHRoZSBydW5uaW5nIGFuaW1hdGlvbiBvZiB0aGUgc2FtZSB0eXBlIGFu
ZCBwcm9wZXJ0eSBmcm9tIHRoZSBvdGhlciBhbmltYXRpb24gY29udGFpbmVyLgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENDQW5pbWF0aW9uQ29udGFpbmVySW1wbD4gY3JlYXRlQmxlbmRlZChkb3Vi
bGUgbGFzdEFuaW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPENDQW5pbWF0aW9uQ29udGFpbmVySW1w
bD4gb2xkQW5pbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGw+IG5l
d0FuaW0pOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NBbmltYXRpb25Db250YWluZXJJbXBs
PiBjcmVhdGUoKTsKKworICAgIHZvaWQgYWRkQW5pbWF0aW9uKFBhc3NSZWZQdHI8Q0NBbmltYXRp
b25JbXBsPik7CisvLyAgeworLy8gICAgICBhbmltYXRpb24tPmFkZFRvQ29udGFpbmVyKHRoaXMp
OworLy8gIH0KKworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKENDQW5pbWF0aW9uSW1wbCopOwor
Ly8gIHsKKy8vICAgICAgYW5pbWF0aW9uLT5hZGRSZW1vdmVGcm9tQ29udGFpbmVyKHRoaXMpOwor
Ly8gIH0KKworICAgIFZlY3RvcjxSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+JiBmbG9hdEFu
aW1hdGlvbnMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmlt
YXRpb25JbXBsPiYgdHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25zKCk7CisgICAgVmVjdG9y
PFJlZlB0cjxDQ0NvbG9yQW5pbWF0aW9uSW1wbD4mIGNvbG9yQW5pbWF0aW9ucygpOworICAgIFZl
Y3RvcjxSZWZQdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbD4mIGZsb2F0UG9pbnRBbmltYXRp
b25zKCk7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4mIGludFBv
aW50QW5pbWF0aW9ucygpOworCitwcml2YXRlOgorICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIEND
QW5pbWF0aW9uSW1wbAorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSB0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkVG9Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJ
bXBsKiopOworICAgIHZpcnR1YWwgY29uc3QgQW5pbWF0YWJsZVByb3BlcnRpZXMmIHByb3BlcnRp
ZXMoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+IG1fZmxvYXRB
bmltYXRpb25zOworICAgIFZlY3RvcjxSZWZQdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1h
dGlvbkltcGw+IG1fdHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25zOworICAgIFZlY3RvcjxS
ZWZQdHI8Q0NDb2xvckFuaW1hdGlvbkltcGw+IG1fY29sb3JBbmltYXRpb25zOworICAgIFZlY3Rv
cjxSZWZQdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbD4gbV9mbG9hdFBvaW50QW5pbWF0aW9u
czsKKyAgICBWZWN0b3I8UmVmUHRyPENDSW50UG9pbnRBbmltYXRpb25JbXBsPiBtX2ludFBvaW50
QW5pbWF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8g
Q0NBbmltYXRpb25JbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uTWFuYWdlckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uTWFuYWdlckltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZmJjY2ZmYTc1YWQ0YTJiYmYyNGYyMzFjMjFmNDM2MzIyZTdmNDNkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb25NYW5hZ2VySW1wbC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25NYW5hZ2VySW1wbF9oCisjZGVmaW5lIENDQW5pbWF0
aW9uTWFuYWdlckltcGxfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0FuaW1hdGlvbk9ic2VydmVy
OworCitjbGFzcyBDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsPiBjcmVhdGUoKTsKKworICAgIHZvaWQg
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisKKyAgICB2b2lkIGFkZEFuaW1hdGlv
bihQYXNzUmVmUHRyPENDQW5pbWF0aW9uSW1wbD4pOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KENDQW5pbWF0aW9uKik7CisgICAgLy8gcGF1c2UsIHJlc3VtZS4uLgorCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgY3VycmVudGx5IHJ1bm5pbmcgYW5pbWF0aW9ucy4KKyAg
ICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gVGhlIGFuaW1h
dG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KKyAgICBDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsKCk7
CisKKyAgICBSZWZQdHI8Q0NBbmltYXRpb25Db250YWluZXJJbXBsPiBtX2FuaW1hdGlvbnM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvbk1hbmFn
ZXJJbXBsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25PYnNlcnZlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzYyMjc3NDE3NDBjMThlMWZmMzE4OWM1ZTVkOWNlMzY1MjExMDVlZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ0FuaW1hdGlvbk9ic2VydmVySW1wbF9oCisjZGVmaW5lIENDQW5pbWF0aW9u
T2JzZXJ2ZXJJbXBsX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBbiBhYnN0cmFjdCBp
bnRlcmZhY2UgZm9yIGNsYXNzZXMgdGhhdCB3aGljaCB0byBiZSBub3RpZmllZCB3aGVuIGFuaW1h
dGlvbnMKKy8vIGFyZSBzY2hlZHVsZWQsIGVuZGVkLCBvciBhYm9ydGVkLgorY2xhc3MgQ0NBbmlt
YXRpb25PYnNlcnZlckltcGwgeworcHVibGljOgorICAgIC8vIENhbGxlZCBhcyBzb29uIGFzIGFu
aW1hdGlvbiBpcyBhZGRlZCB0byBhIGxheWVyJ3MgcXVldWUuCisgICAgdmlydHVhbCB2b2lkIG9u
QW5pbWF0aW9uU2NoZWR1bGVkKENDQW5pbWF0aW9uSW1wbCopID0gMDsKKworICAgIC8vIENhbGxl
ZCB3aGVuIGFuIGFuaW1hdGlvbiBlbmRzLgorICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkVu
ZGVkKENDQW5pbWF0aW9uSW1wbCopID0gMDsKKworICAgIC8vIENhbGxlZCB3aGVuIGFuIGFuaW1h
dGlvbiBpcyBhYm9ydGVkIGJlZm9yZSBpdCBjb21wbGV0ZXMuIHxvbkFuaW1hdGlvbkVuZGVkfAor
ICAgIC8vIGlzIG5vdCBjYWxsZWQgaW4gdGhpcyBjYXNlLgorICAgIHZpcnR1YWwgdm9pZCBvbkFu
aW1hdGlvbkFib3J0ZWQoQ0NBbmltYXRpb25JbXBsKikgPSAwOworCisgICAgLy8gQ2FsbGVkIHdo
ZW4gYW4gYW5pbWF0aW9uIGlzIHBhdXNlZC4KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25Q
YXVzZWQoQ0NBbmltYXRpb25JbXBsKikgPSAwOworCisgICAgLy8gQ2FsbGVkIHdoZW4gYW4gYW5p
bWF0aW9uIGlzIHJlc3VtZWQuCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uUmVzdW1lZChD
Q0FuaW1hdGlvbkltcGwqKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5DQ0FuaW1h
dGlvbk9ic2VydmVySW1wbCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ0NBbmltYXRpb25PYnNlcnZlckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25UYXJnZXRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1h
dGlvblRhcmdldEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjUzZjBmODA4YzViYTY0OGU0NzM3MzBjZDU5
OGVmODliYWVjNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25UYXJnZXRJbXBsLmgKQEAgLTAsMCArMSwy
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25UYXJnZXRJbXBsX2gKKyNk
ZWZpbmUgQ0NBbmltYXRpb25UYXJnZXRJbXBsX2gKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvblRhcmdldEJhc2VJbXBs
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZShmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgQ0NBbmltYXRpb246OkFu
aW1hdGFibGVQcm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+Q0NG
bG9hdEFuaW1hdGlvblRhcmdldEJhc2VJbXBsKCkgeyB9OworfTsKKwordGVtcGxhdGUgPGNsYXNz
IFQ+CitjbGFzcyBDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1wbCA6IHB1YmxpYyBDQ0Zsb2F0QW5p
bWF0aW9uVGFyZ2V0QmFzZUltcGwgeworcHVibGljOgorICAgIHR5cGVkZWYgZmxvYXQgKFQ6OipH
ZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0TWV0aG9kKShmbG9hdCk7CisK
KyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKCkgeyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1f
Z2V0TWV0aG9kKSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKFUgdmFsdWUpIHsgKCgq
bV9pbnN0YW5jZSkuKm1fc2V0TWV0aG9kKSh2YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIENDQW5pbWF0
aW9uQW5pbWF0YWJsZVByb3BlcnR5OjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0
PHZvaWQqPihtX2luc3RhbmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9zZXRNZXRob2Qp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0
SW1wbDxUPiA+IGNyZWF0ZShUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0
aG9kIHNldE1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NGbG9h
dEFuaW1hdGlvblRhcmdldEltcGw8VD4oaW5zdGFuY2UsIGdldE1ldGhvZCwgc2V0TWV0aG9kKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NGbG9hdEFuaW1hdGlvblRhcmdldEltcGwoVCogaW5z
dGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgICAg
IDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAgICAgLCBtX2dldE1ldGhvZChnZXRNZXRob2Qp
CisgICAgICAgICwgbV9zZXRNZXRob2Qoc2V0TWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICBU
KiBtX2luc3RhbmNlOworICAgIFNldE1ldGhvZCBtX3NldE1ldGhvZDsKKyAgICBHZXRNZXRob2Qg
bV9nZXRNZXRob2Q7Cit9OworCitjbGFzcyBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9u
VGFyZ2V0QmFzZUltcGwgeworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGdldFZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKKyAgICB2aXJ0dWFsIENDQW5pbWF0aW9uOjpB
bmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgfkND
VHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRCYXNlSW1wbCgpIHsgfTsKK307CisK
K3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlv
blRhcmdldEltcGwgOiBwdWJsaWMgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRhcmdl
dEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiAoVDo6KkdldE1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipTZXRNZXRob2Qp
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBnZXRWYWx1ZSgpIHsgcmV0dXJuICgoKm1faW5zdGFuY2UpLiptX2dl
dE1ldGhvZCkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShVIHZhbHVlKSB7ICgoKm1f
aW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9CisgICAgdmlydHVhbCBDQ0FuaW1hdGlv
bkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc2V0TWV0aG9kKSk7
CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFu
aW1hdGlvblRhcmdldEltcGw8VD4gPiBjcmVhdGUoVCogaW5zdGFuY2UsIEdldE1ldGhvZCBnZXRN
ZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJbXBsPFQ+KGluc3Rh
bmNlLCBnZXRNZXRob2QsIHNldE1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVHJh
bnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJbXBsKFQqIGluc3RhbmNlLCBHZXRNZXRo
b2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgICAgICA6IG1faW5zdGFuY2Uo
aW5zdGFuY2UpCisgICAgICAgICwgbV9nZXRNZXRob2QoZ2V0TWV0aG9kKQorICAgICAgICAsIG1f
c2V0TWV0aG9kKHNldE1ldGhvZCkKKyAgICB7CisgICAgfQorCisgICAgVCogbV9pbnN0YW5jZTsK
KyAgICBTZXRNZXRob2QgbV9zZXRNZXRob2Q7CisgICAgR2V0TWV0aG9kIG1fZ2V0TWV0aG9kOwor
fTsKKworY2xhc3MgQ0NDb2xvckFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIGNvbnN0IENvbG9yJiBnZXRWYWx1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWUoY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCBDQ0FuaW1hdGlvbjo6QW5p
bWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5DQ0Nv
bG9yQW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwoKSB7IH07Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KK2NsYXNzIENDQ29sb3JBbmltYXRpb25UYXJnZXRJbXBsIDogcHVibGljIENDQ29sb3JBbmlt
YXRpb25UYXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBjb25zdCBDb2xvciYg
KFQ6OipHZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0TWV0aG9kKShjb25z
dCBDb2xvciYpOworCisgICAgdmlydHVhbCBjb25zdCBDb2xvciYgZ2V0VmFsdWUoKSB7IHJldHVy
biAoKCptX2luc3RhbmNlKS4qbV9nZXRNZXRob2QpKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWUoVSB2YWx1ZSkgeyAoKCptX2luc3RhbmNlKS4qbV9zZXRNZXRob2QpKHZhbHVlKTsgfQor
ICAgIHZpcnR1YWwgQ0NBbmltYXRpb25BbmltYXRhYmxlUHJvcGVydHk6OkFuaW1hdGFibGVQcm9w
ZXJ0eSBzaWduYXR1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1faW5zdGFuY2UpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihtX3NldE1ldGhvZCkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
Q29sb3JBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4gY3JlYXRlKFQqIGluc3RhbmNlLCBHZXRNZXRo
b2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbDxUPihpbnN0YW5jZSwgZ2V0
TWV0aG9kLCBzZXRNZXRob2QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0NvbG9yQW5pbWF0
aW9uVGFyZ2V0SW1wbChUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0aG9k
IHNldE1ldGhvZCkKKyAgICAgICAgOiBtX2luc3RhbmNlKGluc3RhbmNlKQorICAgICAgICAsIG1f
Z2V0TWV0aG9kKGdldE1ldGhvZCkKKyAgICAgICAgLCBtX3NldE1ldGhvZChzZXRNZXRob2QpCisg
ICAgeworICAgIH0KKworICAgIFQqIG1faW5zdGFuY2U7CisgICAgU2V0TWV0aG9kIG1fc2V0TWV0
aG9kOworICAgIEdldE1ldGhvZCBtX2dldE1ldGhvZDsKK307CisKK2NsYXNzIENDRmxvYXRQb2lu
dEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IEZs
b2F0UG9pbnQmIGdldFZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25z
dCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgQ0NBbmltYXRpb246OkFuaW1hdGFibGVQ
cm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+Q0NGbG9hdFBvaW50
QW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwoKSB7IH07Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4K
K2NsYXNzIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEltcGwgOiBwdWJsaWMgQ0NGbG9hdFBv
aW50QW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwgeworcHVibGljOgorICAgIHR5cGVkZWYgY29uc3Qg
RmxvYXRQb2ludCYgKFQ6OipHZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0
TWV0aG9kKShjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9p
bnQmIGdldFZhbHVlKCkgeyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1fZ2V0TWV0aG9kKSgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKFUgdmFsdWUpIHsgKCgqbV9pbnN0YW5jZSkuKm1f
c2V0TWV0aG9kKSh2YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIENDQW5pbWF0aW9uQW5pbWF0YWJsZVBy
b3BlcnR5OjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX2luc3Rh
bmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9zZXRNZXRob2QpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4g
Y3JlYXRlKFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0
aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0Zsb2F0UG9pbnRBbmlt
YXRpb25UYXJnZXRJbXBsPFQ+KGluc3RhbmNlLCBnZXRNZXRob2QsIHNldE1ldGhvZCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEltcGwoVCogaW5z
dGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgICAg
IDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAgICAgLCBtX2dldE1ldGhvZChnZXRNZXRob2Qp
CisgICAgICAgICwgbV9zZXRNZXRob2Qoc2V0TWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICBU
KiBtX2luc3RhbmNlOworICAgIFNldE1ldGhvZCBtX3NldE1ldGhvZDsKKyAgICBHZXRNZXRob2Qg
bV9nZXRNZXRob2Q7Cit9OworCitjbGFzcyBDQ0ludFBvaW50QW5pbWF0aW9uVGFyZ2V0QmFzZUlt
cGwgeworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgSW50UG9pbnQmIGdldFZhbHVlKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBJbnRQb2ludCYpID0gMDsKKyAgICB2
aXJ0dWFsIENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgfkNDSW50UG9pbnRBbmltYXRpb25UYXJnZXRCYXNlSW1wbCgpIHsg
fTsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgQ0NJbnRQb2ludEFuaW1hdGlvblRh
cmdldEltcGwgOiBwdWJsaWMgQ0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIGNvbnN0IEludFBvaW50JiAoVDo6KkdldE1ldGhvZCkoKTsKKyAg
ICB0eXBlZGVmIHZvaWQgKFQ6OipTZXRNZXRob2QpKGNvbnN0IEludFBvaW50Jik7CisKKyAgICB2
aXJ0dWFsIGNvbnN0IEludFBvaW50JiBnZXRWYWx1ZSgpIHsgcmV0dXJuICgoKm1faW5zdGFuY2Up
LiptX2dldE1ldGhvZCkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShVIHZhbHVlKSB7
ICgoKm1faW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9CisgICAgdmlydHVhbCBDQ0Fu
aW1hdGlvbkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc2V0TWV0
aG9kKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NJbnRQb2ludEFuaW1hdGlv
blRhcmdldEltcGw8VD4gPiBjcmVhdGUoVCogaW5zdGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2Qs
IFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENDSW50UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPFQ+KGluc3RhbmNlLCBnZXRNZXRob2QsIHNl
dE1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDSW50UG9pbnRBbmltYXRpb25UYXJn
ZXRJbXBsKFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0
aG9kKQorICAgICAgICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAgICAgICwgbV9nZXRNZXRo
b2QoZ2V0TWV0aG9kKQorICAgICAgICAsIG1fc2V0TWV0aG9kKHNldE1ldGhvZCkKKyAgICB7Cisg
ICAgfQorCisgICAgVCogbV9pbnN0YW5jZTsKKyAgICBTZXRNZXRob2QgbV9zZXRNZXRob2Q7Cisg
ICAgR2V0TWV0aG9kIG1fZ2V0TWV0aG9kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQ0NBbmltYXRpb25UYXJnZXRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cAppbmRleCBhZjA0MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRlOTJkLi5lOThlYmRl
MzkyYjY0NTNjZTkxYmQwOWRjZTJlZTY0NTEzMjNlMmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA4Y2ZiZDMwN2EwNTA5NDBjZjZiMDg3MTRkYzU4
MjVmZGY4YWE5MzE2Li44NDhkYzUyNWNjMDEwNDMwNWUwMmUxNTIxMTdmYzU2N2FlYjk4OWU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtNDUsNiArNDUsNyBA
QCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzLCBDQ0xheWVyVHJlZQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwg
bV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAsIG1f
YW5pbWF0aW9uTWFuYWdlcihDQ0FuaW1hdGlvbk1hbmFnZXI6OmNyZWF0ZSgpKQogICAgICwgbV9z
ZXR0aW5ncyhzZXR0aW5ncykKICAgICAsIG1fdmlzaWJsZSh0cnVlKQogICAgICwgbV9oYXZlV2hl
ZWxFdmVudEhhbmRsZXJzKGZhbHNlKQpAQCAtODQsNiArODUsNyBAQCBHcmFwaGljc0NvbnRleHQz
RCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKIHsKKyAgICBtX2FuaW1hdGlv
bk1hbmFnZXItPmFuaW1hdGUoZnJhbWVCZWdpblRpbWVNcyk7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgKaW5kZXggY2E0ZjcxYmQ4NmFhMzI5NDU0NWVmOTdiYWQ3YmJhMWRlNzk2YjdlYS4uYzhiNDMw
MzRhMTg1YTU5NzM5YmY2OWNlZDhjYWQxYWEzODdlZTM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaApAQCAtMTI1LDYgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1
cGRhdGVNYXhTY3JvbGxQb3NpdGlvbigpOwogCiAgICAgT3duUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gbV9sYXllclJlbmRlcmVyOworICAgIE93blB0cjxDQ0FuaW1hdGlvbk1hbmFnZXI+IG1f
YW5pbWF0aW9uTWFuYWdlcjsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdExheWVySW1w
bDsKICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fc2Nyb2xsTGF5ZXJJbXBsOwogICAgIENDU2V0
dGluZ3MgbV9zZXR0aW5nczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0aW9uSW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI4ZGRlZDk3NWU4NDI5YmY0Y2YzY2U4ZGQyNmFlZTE0YWRkYjVhNTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbWluZ0Z1bmN0aW9uSW1wbC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NUaW1pbmdGdW5jdGlvbkltcGxfaAorI2RlZmluZSBDQ1RpbWluZ0Z1bmN0aW9u
SW1wbF9oCisKKyNpbmNsdWRlICJVbml0QmV6aWVyLmgiCisKK2NsYXNzIENDVGltaW5nRnVuY3Rp
b25JbXBsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ1RpbWluZ0Z1bmN0aW9uSW1wbCgpOwor
ICAgIGRvdWJsZSByZXNhbXBsZShkb3VibGUgdCkgY29uc3QgPSAwOworfTsKKworLy8gSXQgaXMg
YXNzdW1lZCB0aGF0ICh4MSwgeTEpID0gKDAsIDApIGFuZCAoeDQsIHk0KSA9ICgxLCAxKQorY2xh
c3MgQ0NCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwgeworcHVibGljOgorICAgIENDQmV6aWVyVGlt
aW5nRnVuY3Rpb25JbXBsKGRvdWJsZSB4MiwgZG91YmxlIHkyLCBkb3VibGUgeDMsIGRvdWJsZSB5
Myk7CisgICAgdmlydHVhbCB+Q0NCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwoKTsKKworICAgIGRv
dWJsZSByZXNhbXBsZShkb3VibGUgdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVW5pdEJlemll
ciBtX2JlemllcjsKK307CisKK2NsYXNzIENDRWFzZUluVGltaW5nRnVuY3Rpb25JbXBsIDogcHVi
bGljIEJlemllclRpbWluZ0Z1bmN0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgQ0NFYXNlSW5UaW1p
bmdGdW5jdGlvbkltcGwoKSA6IENDQmV6aWVyVGltaW5nRnVuY3Rpb25JbXBsKDEuMCAvIDMuMCwg
MS4wIC8gMy4wLCAyLjAgLyAzLjAsIDEuMCkgeyB9CisgICAgfkNDRWFzZUluVGltaW5nRnVuY3Rp
b25JbXBsKCkgeyB9Cit9OworCitjbGFzcyBDQ0Vhc2VPdXRUaW1pbmdGdW5jdGlvbkltcGwgOiBw
dWJsaWMgQmV6aWVyVGltaW5nRnVuY3Rpb25JbXBsIHsKK3B1YmxpYzoKKyAgICBDQ0Vhc2VPdXRU
aW1pbmdGdW5jdGlvbkltcGwoKSA6IENDQmV6aWVyVGltaW5nRnVuY3Rpb25JbXBsKDEuMCAvIDMu
MCwgMC4wLCAyLjAgLyAzLjAsIDIuMCAvIDMuMCkgeyB9CisgICAgfkNDRWFzZU91dFRpbWluZ0Z1
bmN0aW9uSW1wbCgpIHsgfQorfTsKKworY2xhc3MgQ0NFYXNlT3V0RWFzZUluVGltaW5nRnVuY3Rp
b25JbXBsIDogcHVibGljIEJlemllclRpbWluZ0Z1bmN0aW9uSW1wbCB7CitwdWJsaWM6CisgICAg
Q0NFYXNlT3V0RWFzZUluVGltaW5nRnVuY3Rpb25JbXBsKCkgOiBDQ0JlemllclRpbWluZ0Z1bmN0
aW9uSW1wbCgxLjAgLyAzLjAsIDAuMCwgMi4wIC8gMy4wLCAxLjApIHsgfQorICAgIH5DQ0Vhc2VJ
bkNDRWFzZU91dEVhc2VJblRpbWluZ0Z1bmN0aW9uSW1wbFRpbWluZ0Z1bmN0aW9uSW1wbCgpIHsg
fQorfTsKKworI2VuZGlmIC8vIENDVGltaW5nRnVuY3Rpb25JbXBsX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117481</attachid>
            <date>2011-12-01 13:57:21 -0800</date>
            <delta_ts>2011-12-01 14:15:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20111201165720.patch</filename>
            <type>text/plain</type>
            <size>35241</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY5MjZiNDJiYmY0NGQ5
YjY2YmI3NzMzODYwMTI4YWI5NTE0OGQ5OC4uYmQxZDQzNGY3OTY1ZGUxY2RlYzk0NjU4MjA5OWQy
ODA1NWZiOGVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTExLTI5ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1F
bGVtZW50OjpnZXRDdXJyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtRWxlbWVudDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3Jt
RWxlbWVudDo6b25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtRWxlbWVu
dDo6b25Qcm9ncmVzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25FbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbk9ic2VydmVyOjp+Q0NBbmltYXRpb25PYnNlcnZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRvci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphbmltYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0QW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgIChDQ0Vhc2VJblJl
c2FtcGxlcjo6Q0NFYXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlSW5SZXNhbXBsZXI6
On5DQ0Vhc2VJblJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6OkNDRWFz
ZU91dFJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6On5DQ0Vhc2VPdXRS
ZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjpDQ0Vhc2VPdXRF
YXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjp+Q0NF
YXNlSW5DQ0Vhc2VPdXRFYXNlSW5SZXNhbXBsZXJSZXNhbXBsZXIpOgorCiAyMDExLTExLTMwICBQ
YXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBnZXQgcmlkIG9mIGRlZmVycmVkIGJhY2tlbmQtPmZyb250LWVuZCBjb21tYW5kcyBwcm9j
ZXNzaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBbmltYXRpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTYwZTEwOWY0
NWVhNTE5OWVhZGI2MGU5MjJiMzM3ZTQ5YzgyMTNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25JbXBsLmgK
QEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25JbXBs
X2gKKyNkZWZpbmUgQ0NBbmltYXRpb25JbXBsX2gKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDQW5pYW10aW9uQ29sb3JUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25Db250YWluZXJJ
bXBsOworY2xhc3MgQ0NBbmltYXRpb25Db250cm9sbGVySW1wbDsKK2NsYXNzIENDQW5pbWF0aW9u
RmxvYXRUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25GbG9hdFBvaW50VGFyZ2V0SW1wbDsK
K2NsYXNzIENDQW5pbWF0aW9uSW50UG9pbnRUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25U
cmFuc2Zvcm1hdGlvbk1hdHJpeFRhcmdldEltcGw7CisKK2NsYXNzIENDQW5pbWF0aW9uSW1wbCA6
IHB1YmxpYyBSZWZDb3VudGVkPENDQW5pbWF0aW9uSW1wbD4geworcHVibGljOgorICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPHZvaWQqLCB2b2lkKj4gQW5pbWF0YWJsZVByb3BlcnR5OworCisgICAgLy8g
dm9sbGljazogSSBkZWNpZGVkIHRvIHVzZSBhIHNpZ25hdHVyZSAoYSBjb21iaW5hdGlvbiBvZiBp
bnN0YW5jZS9zZXR0ZXIgcG9pbnRlcnMpIHJhdGhlciB0aGFuCisgICAgLy8gcmF0aGVyIHRoYW4g
dGhlIGZvbGxvd2luZyBlbnVtLiBBIGNvbiBpcyB0aGF0IHRoZSBlbnVtIGNvbnN0YW50cyBhcmUg
bW9yZSBtZWFuaW5nZnVsLgorICAgIC8vIEEgcHJvIGlzIHRoYXQgaXQncyBlYXNpZXIgdG8gbWFp
bnRhaW4gdGhpcy4gV2hlbiB5b3UgYWRkIGEgbmV3IGFuaW1hdGFibGUgcHJvcGVydHksIHlvdQor
ICAgIC8vIG5vIGxvbmdlciBoYXZlIHRvIHVwZGF0ZSBhbiBlbnVtIGFuZCBhbGwgb2YgdGhlIHJl
bGF0ZWQgc3dpdGNoIHN0YXRlbWVudHMuIEFsc28sIHdlIGNhbgorICAgIC8vIGRpZmZlcmVudGlh
dGUgYmV0d2VlbiBwcm9wZXJ0aWVzIG9uIGRpZmZlcmVudCBvYmplY3RzLiBMZXQgbWUga25vdyBp
ZiB5b3UgdGhpbmsgdGhpcyBpcyBhIGJhZCB0cmFkZW9mZi4KKyAgICAvLworICAgIC8vICBlbnVt
IEFuaW1hdGFibGVQcm9wZXJ0eSB7CisgICAgLy8gICAgICBBTkNIT1JfUE9JTlQsIEFOQ0hPUl9Q
T0lOVF9aLCBCQUNLR1JPVU5EX0NPTE9SLCBPUEFDSVRZLAorICAgIC8vICAgICAgUE9TSVRJT04s
IFRSQU5TRk9STSwgWk9PTV9BTklNQVRPUl9UUkFOU0ZPUk0sCisgICAgLy8gICAgICBTQ1JFRU5f
U1BBQ0VfVFJBTlNGT1JNLCBCT1VORFMsIENPTlRFTlRfQk9VTkRTLCBTQ1JPTExfUE9TSVRJT04K
KyAgICAvLyAgfTsKKworICAgIGNsYXNzIEFuaW1hdGFibGVQcm9wZXJ0aWVzIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vIEVuc3VyZSBubyBkdXBsaWNhdGVzLgorICAgICAgICB2b2lkIGFkZChB
bmltYXRhYmxlUHJvcGVydHkpOworICAgICAgICB2b2lkIGFkZChjb25zdCBBbmltYXRhYmxlUHJv
cGVydGllcyYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPEFuaW1hdGFibGVQcm9w
ZXJ0eT4gbV9wcm9wZXJ0aWVzOworICAgIH07CisKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAg
V2FpdGluZ1RvUnVuLAorICAgICAgICBSdW5uaW5nLAorICAgICAgICBQYXVzZWQsCisgICAgICAg
IEZpbmlzaGVkCisgICAgfTsKKworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uSW1wbCgpOworCisg
ICAgLy8gSWYgYW5pbWF0aW9ucyBjYW4gYmUgY3ljbGljLCB0aGVuIHx0fCBuZWVkcyB0byBiZSBp
biByZWxhdGl2ZSB0aW1lIChpLmUuLCBtcyBzaW5jZQorICAgIC8vIHRoZSBhbmltYXRpb24gd2Fz
IHN0YXJ0ZWQpLgorICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgdCk7CisKKyAgICAvLyBJcyB0aGlz
IHdoZXJlIGxvb3BpbmcgbG9naWMgc2hvdWxkIGxpdmU/CisKKyAgICB2aXJ0dWFsIGNvbnN0IEFu
aW1hdGFibGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCkgPSAwOworCisgICAgLy8gVGhlIGFuaW1h
dGlvbiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgY29udHJvbGxlci4KKyAgICB2b2lk
IHNldENvbnRyb2xsZXIoQ0NBbmltYXRpb25Db250cm9sbGVySW1wbCopOworCisgICAgdm9pZCBz
ZXRUaW1pbmdGdW5jdGlvbihQYXNzT3duUHRyPENDVGltaW5nRnVuY3Rpb24+KTsKKworICAgIFN0
YXRlIHN0YXRlKCkgY29uc3Q7CisgICAgLy8gV2lsbCBldmVudHVhbGx5IHVwZGF0ZSBsaXN0ZW5l
cihzKQorICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUpOworCisgICAgZG91YmxlIHN0YXJ0VGltZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0U3RhcnRUaW1lKGRvdWJsZSk7CisKKyAgICBkb3VibGUgZHVy
YXRpb24oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIENDQW5pbWF0aW9uKGRvdWJsZSBkdXJh
dGlvbik7CisKKyAgICAvLyBEb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUgY29udGFpbmVy
LgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRhaW5lcihDQ0FuaW1hdGlvbkNvbnRhaW5lcklt
cGwqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21Db250YWluZXIoQ0NBbmltYXRp
b25Db250YWluZXJJbXBsKikgPSAwOworCisgICAgLy8gfHR8IGlzIGFkanVzdGVkIHVzaW5nIHRv
IHRoZSB0aW1pbmcgZnVuY3Rpb24uCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0ZShkb3VibGUg
dCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIENDQW5pbWF0aW9uQ29udHJvbGxlckltcGwq
IG1fY29udHJvbGxlcjsKKworICAgIC8vIGluIG1pbGxpc2Vjb25kcworICAgIGRvdWJsZSBtX2R1
cmF0aW9uOworCisgICAgT3duUHRyPENDVGltaW5nRnVuY3Rpb24+IG1fdGltaW5nRnVuY3Rpb247
CisKKyAgICBTdGF0ZSBtX3N0YXRlOworCisgICAgZG91YmxlIG1fc3RhcnRUaW1lOworfTsKKwor
Y2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkltcGwgOiBwdWJsaWMgQ0NBbmltYXRpb25JbXBsIHsKK3B1
YmxpYzoKKyAgICAvLyBDcmVhdGVzIGFuIGFuaW1hdGlvbiB0aGF0IGJsZW5kcyBiZXR3ZWVuIHRo
ZSBvbGQgYW5kIHRoZSBuZXcgYW5pbWF0aW9uLgorICAgIC8vIHxsYXN0QW5pbVRpbWV8IGlzIHRo
ZSBsYXN0IHJlbGF0aXZlIHRpbWUgdXNlZCB3aXRoIHRoZSBvbGQgYW5pbWF0aW9uIChlLmcuLCBp
ZiB0aGUgb2xkIGFuaW1hdGlvbgorICAgIC8vIGhhZCBiZWVuIGFuaW1hdGluZyBmb3IgaGFsZiBh
IHNlY29uZCwgfGxhc3RBbmltVGltZXwgd291bGQgYmUgNTAwIG1zLCBub3QgdGhlIGFic29sdXRl
CisgICAgLy8gYW5pbWF0aW9uIHRpbWUuIEJsZW5kaW5nIHdvcmtzIGFzIGZvbGxvd3M6CisgICAg
Ly8gIC0gTGV0IHxyZW1haW5pbmd8ID0gfG9sZEFuaW1hdGlvbi5kdXJhdGlvbigpfCAtIHxsYXN0
QW5pbVRpbWV8CisgICAgLy8gIC0gSWYgb2xkQW5pbWF0aW9uKHQpIGFuZCBuZXdBbmltYXRpb24o
dCkgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIG9sZCBhbmQgbmV3IGFuaW1hdGlvbnMgYXQgdGltZSB0
LAorICAgIC8vICAgIHRoZW4gdGhlIHJlc3VsdCBvZiB0aGUgYmxlbmRlZCBhbmltYXRpb24gYXQg
dGltZSB0IGlzOgorICAgIC8vICAgICAgaWYgKHQgPCByZW1haW5pbmcpCisgICAgLy8gICAgICAg
IHJldHVybiBpbnRlcnBvbGF0ZSh0IC8gcmVtYWluaW5nLCBvbGRBbmltYXRpb24odCksIG5ld0Fu
aW1hdGlvbih0KSkKKyAgICAvLyAgICAgIHJldHVybiBuZXdBbmltYXRpb24odCkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4gY3JlYXRlQmxlbmRlZChkb3VibGUg
bGFzdEFuaW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+IG9sZEFuaW0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4gbmV3QW5pbSk7CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4gY3JlYXRlKGRvdWJsZSBkdXJhdGlv
biwgZmxvYXQgc3RhcnQsIGZsb2F0IGVuZCk7CisKKyAgICAvLyBOZWVkIHRvIGJlIGFibGUgdG8g
cmVsZWFzZSB3aGVuIGNyZWF0aW5nIGJsZW5kZWQgYW5pbWF0aW9ucy4gVGhlIGJsZW5kZWQgYW5p
bWF0aW9uCisgICAgLy8gd2lsbCBzdGVhbCB0aGUgYW5pbWF0aW9uIGZyb20gb25lIG9mIHRoZSBj
aGlsZHJlbiwgYW5kIHBhc3MgZHVtbXkgdGFyZ2V0cyB0byB0aGUga2lkcy4KKyAgICBQYXNzT3du
UHRyPENDRmxvYXRBbmltYXRpb25UYXJnZXRJbXBsPiByZWxlYXNlVGFyZ2V0KCk7CisgICAgdm9p
ZCBzZXRUYXJnZXQoUGFzc093blB0cjxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1wbD4pOworCisg
ICAgdmlydHVhbCB+Q0NGbG9hdEFuaW1hdGlvbkltcGwoKTsKK3Byb3RlY3RlZDoKKyAgICBDQ0Zs
b2F0QW5pbWF0aW9uSW1wbChkb3VibGUgZHVyYXRpb24pOworCitwcml2YXRlOgorICAgIC8vIFBh
cnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ0NBbmltYXRpb25JbXBsIChvdGhlciB0aGFuIHxhbmlt
YXRlfCkuCisgICAgdmlydHVhbCB2b2lkIGFkZFRvQ29udGFpbmVyKENDQW5pbWF0aW9uQ29udGFp
bmVySW1wbCopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tQ29udGFpbmVyKENDQW5pbWF0
aW9uQ29udGFpbmVySW1wbCopOworICAgIHZpcnR1YWwgY29uc3QgQW5pbWF0YWJsZVByb3BlcnRp
ZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1w
bD4gbV90YXJnZXQ7Cit9OworCitjbGFzcyBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9u
SW1wbCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBsPiBjcmVhdGVCbGVuZGVk
KGRvdWJsZSBsYXN0QW5pbVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ1RyYW5z
Zm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uSW1wbD4gb2xkQW5pbSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YXNzUmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBsPiBuZXdBbmltKTsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25J
bXBsPiBjcmVhdGUoZG91YmxlIGR1cmF0aW9uLCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4pOworCisgICAgUGFzc093blB0cjxDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFy
Z2V0SW1wbD4gcmVsZWFzZVRhcmdldCgpOworICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NPd25QdHI8
Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRhcmdldEltcGw+KTsKKworICAgIHZpcnR1
YWwgfkNDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBsKCk7Citwcm90ZWN0ZWQ6Cisg
ICAgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbkltcGwoZG91YmxlIGR1cmF0aW9uKTsK
KworcHJpdmF0ZToKKyAgICAvLyBQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIENDQW5pbWF0aW9u
SW1wbCAob3RoZXIgdGhhbiB8YW5pbWF0ZXwpLgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRh
aW5lcihDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGwqKik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUZyb21Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1YWwg
Y29uc3QgQW5pbWF0YWJsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxD
Q1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFyZ2V0SW1wbD4gbV90YXJnZXQ7Cit9Owor
CitjbGFzcyBDQ0NvbG9yQW5pbWF0aW9uSW1wbCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkltcGwgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBsPiBjcmVh
dGVCbGVuZGVkKGRvdWJsZSBsYXN0QW5pbVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0NvbG9yQW5pbWF0
aW9uSW1wbD4gb2xkQW5pbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBsPiBuZXdB
bmltKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBsPiBjcmVh
dGUoZG91YmxlIGR1cmF0aW9uLCBjb25zdCBDb2xvciYgc3RhcnQsIGNvbnN0IENvbG9yJiBlbmQp
OworCisgICAgUGFzc093blB0cjxDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbD4gcmVsZWFzZVRh
cmdldCgpOworICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NPd25QdHI8Q0NDb2xvckFuaW1hdGlvblRh
cmdldEltcGw+KTsKKworICAgIHZpcnR1YWwgfkNDQ29sb3JBbmltYXRpb25JbXBsKCk7Citwcm90
ZWN0ZWQ6CisgICAgQ0NDb2xvckFuaW1hdGlvbkltcGwoZG91YmxlIGR1cmF0aW9uKTsKKworcHJp
dmF0ZToKKyAgICAvLyBQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIENDQW5pbWF0aW9uSW1wbCAo
b3RoZXIgdGhhbiB8YW5pbWF0ZXwpLgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRhaW5lcihD
Q0FuaW1hdGlvbkNvbnRhaW5lckltcGwqKik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21D
b250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1YWwgY29uc3Qg
QW5pbWF0YWJsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxDQ0NvbG9y
QW5pbWF0aW9uVGFyZ2V0SW1wbD4gbV90YXJnZXQ7Cit9OworCitjbGFzcyBDQ0Zsb2F0UG9pbnRB
bmltYXRpb25JbXBsIDogcHVibGljIENDQW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbD4gY3JlYXRlQmxlbmRlZChk
b3VibGUgbGFzdEFuaW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRp
b25JbXBsPiBvbGRBbmltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25J
bXBsPiBuZXdBbmltKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDRmxvYXRQb2ludEFuaW1h
dGlvbkltcGw+IGNyZWF0ZShkb3VibGUgZHVyYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
LCBjb25zdCBGbG9hdFBvaW50JiBlbmQpOworCisgICAgUGFzc093blB0cjxDQ0Zsb2F0UG9pbnRB
bmltYXRpb25UYXJnZXRJbXBsPiByZWxlYXNlVGFyZ2V0KCk7CisgICAgdm9pZCBzZXRUYXJnZXQo
UGFzc093blB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPik7CisKKyAgICB2aXJ0
dWFsIH5DQ0Zsb2F0UG9pbnRBbmltYXRpb25JbXBsKCk7Citwcm90ZWN0ZWQ6CisgICAgQ0NGbG9h
dFBvaW50QW5pbWF0aW9uSW1wbChkb3VibGUgZHVyYXRpb24pOworCitwcml2YXRlOgorICAgIC8v
IFBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgQ0NBbmltYXRpb25JbXBsIChvdGhlciB0aGFuIHxh
bmltYXRlfCkuCisgICAgdmlydHVhbCB2b2lkIGFkZFRvQ29udGFpbmVyKENDQW5pbWF0aW9uQ29u
dGFpbmVySW1wbCoqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbUNvbnRhaW5lcihDQ0Fu
aW1hdGlvbkNvbnRhaW5lckltcGwqKik7CisgICAgdmlydHVhbCBjb25zdCBBbmltYXRhYmxlUHJv
cGVydGllcyYgcHJvcGVydGllcygpOworCisgICAgT3duUHRyPENDRmxvYXRQb2ludEFuaW1hdGlv
blRhcmdldEltcGw+IG1fdGFyZ2V0OworfTsKKworY2xhc3MgQ0NJbnRQb2ludEFuaW1hdGlvbklt
cGwgOiBwdWJsaWMgQ0NBbmltYXRpb25JbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4gY3JlYXRlQmxlbmRlZChkb3VibGUgbGFzdEFu
aW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NJbnRQb2ludEFuaW1hdGlvbkltcGw+IG9sZEFuaW0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4gbmV3QW5pbSk7CisKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4gY3JlYXRlKGRvdWJs
ZSBkdXJhdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0YXJ0LCBjb25zdCBJbnRQb2ludCYgZW5kKTsK
KworICAgIFBhc3NPd25QdHI8Q0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+IHJlbGVhc2VU
YXJnZXQoKTsKKyAgICB2b2lkIHNldFRhcmdldChQYXNzT3duUHRyPENDSW50UG9pbnRBbmltYXRp
b25UYXJnZXRJbXBsPik7CisKKyAgICB2aXJ0dWFsIH5DQ0ludFBvaW50QW5pbWF0aW9uSW1wbCgp
OworcHJvdGVjdGVkOgorICAgIENDSW50UG9pbnRBbmltYXRpb25JbXBsKGRvdWJsZSBkdXJhdGlv
bik7CisKK3ByaXZhdGU6CisgICAgLy8gUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBDQ0FuaW1h
dGlvbkltcGwgKG90aGVyIHRoYW4gfGFuaW1hdGV8KS4KKyAgICB2aXJ0dWFsIHZvaWQgYWRkVG9D
b250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVGcm9tQ29udGFpbmVyKENDQW5pbWF0aW9uQ29udGFpbmVySW1wbCoqKTsKKyAgICB2aXJ0
dWFsIGNvbnN0IEFuaW1hdGFibGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCk7CisKKyAgICBPd25Q
dHI8Q0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+IG1fdGFyZ2V0OworfTsKKworLy8gQ2Fu
IHNlcnZlIHR3byBwdXJwb3NlczoKKy8vICAxKSBBcyBnZW5lcmFsIHN0b3JhZ2UgZm9yIGFuaW1h
dGlvbnMuCisvLyAgMikgQSBjb21wb3NpdGUgYW5pbWF0aW9uIHRoYXQgcmVwcmVzZW50cyBhIGNv
bGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0byBiZSBydW4gc2ltdWx0YW5lb3VzbHkgKGUuZy4sIHNj
YWxlICYgcG9zaXRpb24pLgorY2xhc3MgQ0NBbmltYXRpb25Db250YWluZXJJbXBsIDogcHVibGlj
IENDQW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgLy8gRm9yIGVhY2ggdHlwZSBvZiBhbmlt
YXRpb24gKGFuZCBlYWNoIHByb3BlcnR5KSwgdGFrZSB0aGUgcnVubmluZyBhbmltYXRpb24gb2Yg
dGhhdCB0eXBlIGZvciB0aGF0IHByb3BlcnR5CisgICAgLy8gKGlmIHRoZXJlIGlzIG9uZSksIGFu
ZCBibGVuZCBpdCB3aXRoIHRoZSBydW5uaW5nIGFuaW1hdGlvbiBvZiB0aGUgc2FtZSB0eXBlIGFu
ZCBwcm9wZXJ0eSBmcm9tIHRoZSBvdGhlciBhbmltYXRpb24gY29udGFpbmVyLgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENDQW5pbWF0aW9uQ29udGFpbmVySW1wbD4gY3JlYXRlQmxlbmRlZChkb3Vi
bGUgbGFzdEFuaW1UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPENDQW5pbWF0aW9uQ29udGFpbmVySW1w
bD4gb2xkQW5pbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGw+IG5l
d0FuaW0pOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NBbmltYXRpb25Db250YWluZXJJbXBs
PiBjcmVhdGUoKTsKKworICAgIHZvaWQgYWRkQW5pbWF0aW9uKFBhc3NSZWZQdHI8Q0NBbmltYXRp
b25JbXBsPik7CisvLyAgeworLy8gICAgICBhbmltYXRpb24tPmFkZFRvQ29udGFpbmVyKHRoaXMp
OworLy8gIH0KKworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKENDQW5pbWF0aW9uSW1wbCopOwor
Ly8gIHsKKy8vICAgICAgYW5pbWF0aW9uLT5hZGRSZW1vdmVGcm9tQ29udGFpbmVyKHRoaXMpOwor
Ly8gIH0KKworICAgIFZlY3RvcjxSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+JiBmbG9hdEFu
aW1hdGlvbnMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmlt
YXRpb25JbXBsPiYgdHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25zKCk7CisgICAgVmVjdG9y
PFJlZlB0cjxDQ0NvbG9yQW5pbWF0aW9uSW1wbD4mIGNvbG9yQW5pbWF0aW9ucygpOworICAgIFZl
Y3RvcjxSZWZQdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbD4mIGZsb2F0UG9pbnRBbmltYXRp
b25zKCk7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4mIGludFBv
aW50QW5pbWF0aW9ucygpOworCitwcml2YXRlOgorICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIEND
QW5pbWF0aW9uSW1wbAorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKGRvdWJsZSB0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkVG9Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJ
bXBsKiopOworICAgIHZpcnR1YWwgY29uc3QgQW5pbWF0YWJsZVByb3BlcnRpZXMmIHByb3BlcnRp
ZXMoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+IG1fZmxvYXRB
bmltYXRpb25zOworICAgIFZlY3RvcjxSZWZQdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1h
dGlvbkltcGw+IG1fdHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25zOworICAgIFZlY3RvcjxS
ZWZQdHI8Q0NDb2xvckFuaW1hdGlvbkltcGw+IG1fY29sb3JBbmltYXRpb25zOworICAgIFZlY3Rv
cjxSZWZQdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbD4gbV9mbG9hdFBvaW50QW5pbWF0aW9u
czsKKyAgICBWZWN0b3I8UmVmUHRyPENDSW50UG9pbnRBbmltYXRpb25JbXBsPiBtX2ludFBvaW50
QW5pbWF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8g
Q0NBbmltYXRpb25JbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uTWFuYWdlckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uTWFuYWdlckltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZmJjY2ZmYTc1YWQ0YTJiYmYyNGYyMzFjMjFmNDM2MzIyZTdmNDNkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb25NYW5hZ2VySW1wbC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25NYW5hZ2VySW1wbF9oCisjZGVmaW5lIENDQW5pbWF0
aW9uTWFuYWdlckltcGxfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0FuaW1hdGlvbk9ic2VydmVy
OworCitjbGFzcyBDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsPiBjcmVhdGUoKTsKKworICAgIHZvaWQg
YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcyk7CisKKyAgICB2b2lkIGFkZEFuaW1hdGlv
bihQYXNzUmVmUHRyPENDQW5pbWF0aW9uSW1wbD4pOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KENDQW5pbWF0aW9uKik7CisgICAgLy8gcGF1c2UsIHJlc3VtZS4uLgorCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgY3VycmVudGx5IHJ1bm5pbmcgYW5pbWF0aW9ucy4KKyAg
ICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gVGhlIGFuaW1h
dG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KKyAgICBDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsKCk7
CisKKyAgICBSZWZQdHI8Q0NBbmltYXRpb25Db250YWluZXJJbXBsPiBtX2FuaW1hdGlvbnM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvbk1hbmFn
ZXJJbXBsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25PYnNlcnZlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzYyMjc3NDE3NDBjMThlMWZmMzE4OWM1ZTVkOWNlMzY1MjExMDVlZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ0FuaW1hdGlvbk9ic2VydmVySW1wbF9oCisjZGVmaW5lIENDQW5pbWF0aW9u
T2JzZXJ2ZXJJbXBsX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBbiBhYnN0cmFjdCBp
bnRlcmZhY2UgZm9yIGNsYXNzZXMgdGhhdCB3aGljaCB0byBiZSBub3RpZmllZCB3aGVuIGFuaW1h
dGlvbnMKKy8vIGFyZSBzY2hlZHVsZWQsIGVuZGVkLCBvciBhYm9ydGVkLgorY2xhc3MgQ0NBbmlt
YXRpb25PYnNlcnZlckltcGwgeworcHVibGljOgorICAgIC8vIENhbGxlZCBhcyBzb29uIGFzIGFu
aW1hdGlvbiBpcyBhZGRlZCB0byBhIGxheWVyJ3MgcXVldWUuCisgICAgdmlydHVhbCB2b2lkIG9u
QW5pbWF0aW9uU2NoZWR1bGVkKENDQW5pbWF0aW9uSW1wbCopID0gMDsKKworICAgIC8vIENhbGxl
ZCB3aGVuIGFuIGFuaW1hdGlvbiBlbmRzLgorICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkVu
ZGVkKENDQW5pbWF0aW9uSW1wbCopID0gMDsKKworICAgIC8vIENhbGxlZCB3aGVuIGFuIGFuaW1h
dGlvbiBpcyBhYm9ydGVkIGJlZm9yZSBpdCBjb21wbGV0ZXMuIHxvbkFuaW1hdGlvbkVuZGVkfAor
ICAgIC8vIGlzIG5vdCBjYWxsZWQgaW4gdGhpcyBjYXNlLgorICAgIHZpcnR1YWwgdm9pZCBvbkFu
aW1hdGlvbkFib3J0ZWQoQ0NBbmltYXRpb25JbXBsKikgPSAwOworCisgICAgLy8gQ2FsbGVkIHdo
ZW4gYW4gYW5pbWF0aW9uIGlzIHBhdXNlZC4KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25Q
YXVzZWQoQ0NBbmltYXRpb25JbXBsKikgPSAwOworCisgICAgLy8gQ2FsbGVkIHdoZW4gYW4gYW5p
bWF0aW9uIGlzIHJlc3VtZWQuCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uUmVzdW1lZChD
Q0FuaW1hdGlvbkltcGwqKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5DQ0FuaW1h
dGlvbk9ic2VydmVySW1wbCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ0NBbmltYXRpb25PYnNlcnZlckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25UYXJnZXRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1h
dGlvblRhcmdldEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjUzZjBmODA4YzViYTY0OGU0NzM3MzBjZDU5
OGVmODliYWVjNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25UYXJnZXRJbXBsLmgKQEAgLTAsMCArMSwy
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25UYXJnZXRJbXBsX2gKKyNk
ZWZpbmUgQ0NBbmltYXRpb25UYXJnZXRJbXBsX2gKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvblRhcmdldEJhc2VJbXBs
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRWYWx1ZShmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgQ0NBbmltYXRpb246OkFu
aW1hdGFibGVQcm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+Q0NG
bG9hdEFuaW1hdGlvblRhcmdldEJhc2VJbXBsKCkgeyB9OworfTsKKwordGVtcGxhdGUgPGNsYXNz
IFQ+CitjbGFzcyBDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1wbCA6IHB1YmxpYyBDQ0Zsb2F0QW5p
bWF0aW9uVGFyZ2V0QmFzZUltcGwgeworcHVibGljOgorICAgIHR5cGVkZWYgZmxvYXQgKFQ6OipH
ZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0TWV0aG9kKShmbG9hdCk7CisK
KyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKCkgeyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1f
Z2V0TWV0aG9kKSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKFUgdmFsdWUpIHsgKCgq
bV9pbnN0YW5jZSkuKm1fc2V0TWV0aG9kKSh2YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIENDQW5pbWF0
aW9uQW5pbWF0YWJsZVByb3BlcnR5OjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0
PHZvaWQqPihtX2luc3RhbmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9zZXRNZXRob2Qp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0
SW1wbDxUPiA+IGNyZWF0ZShUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0
aG9kIHNldE1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NGbG9h
dEFuaW1hdGlvblRhcmdldEltcGw8VD4oaW5zdGFuY2UsIGdldE1ldGhvZCwgc2V0TWV0aG9kKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NGbG9hdEFuaW1hdGlvblRhcmdldEltcGwoVCogaW5z
dGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgICAg
IDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAgICAgLCBtX2dldE1ldGhvZChnZXRNZXRob2Qp
CisgICAgICAgICwgbV9zZXRNZXRob2Qoc2V0TWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICBU
KiBtX2luc3RhbmNlOworICAgIFNldE1ldGhvZCBtX3NldE1ldGhvZDsKKyAgICBHZXRNZXRob2Qg
bV9nZXRNZXRob2Q7Cit9OworCitjbGFzcyBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9u
VGFyZ2V0QmFzZUltcGwgeworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGdldFZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKKyAgICB2aXJ0dWFsIENDQW5pbWF0aW9uOjpB
bmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgfkND
VHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRCYXNlSW1wbCgpIHsgfTsKK307CisK
K3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlv
blRhcmdldEltcGwgOiBwdWJsaWMgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRhcmdl
dEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiAoVDo6KkdldE1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipTZXRNZXRob2Qp
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBnZXRWYWx1ZSgpIHsgcmV0dXJuICgoKm1faW5zdGFuY2UpLiptX2dl
dE1ldGhvZCkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShVIHZhbHVlKSB7ICgoKm1f
aW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9CisgICAgdmlydHVhbCBDQ0FuaW1hdGlv
bkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc2V0TWV0aG9kKSk7
CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFu
aW1hdGlvblRhcmdldEltcGw8VD4gPiBjcmVhdGUoVCogaW5zdGFuY2UsIEdldE1ldGhvZCBnZXRN
ZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJbXBsPFQ+KGluc3Rh
bmNlLCBnZXRNZXRob2QsIHNldE1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVHJh
bnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJbXBsKFQqIGluc3RhbmNlLCBHZXRNZXRo
b2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgICAgICA6IG1faW5zdGFuY2Uo
aW5zdGFuY2UpCisgICAgICAgICwgbV9nZXRNZXRob2QoZ2V0TWV0aG9kKQorICAgICAgICAsIG1f
c2V0TWV0aG9kKHNldE1ldGhvZCkKKyAgICB7CisgICAgfQorCisgICAgVCogbV9pbnN0YW5jZTsK
KyAgICBTZXRNZXRob2QgbV9zZXRNZXRob2Q7CisgICAgR2V0TWV0aG9kIG1fZ2V0TWV0aG9kOwor
fTsKKworY2xhc3MgQ0NDb2xvckFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIGNvbnN0IENvbG9yJiBnZXRWYWx1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWUoY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCBDQ0FuaW1hdGlvbjo6QW5p
bWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5DQ0Nv
bG9yQW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwoKSB7IH07Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KK2NsYXNzIENDQ29sb3JBbmltYXRpb25UYXJnZXRJbXBsIDogcHVibGljIENDQ29sb3JBbmlt
YXRpb25UYXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBjb25zdCBDb2xvciYg
KFQ6OipHZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0TWV0aG9kKShjb25z
dCBDb2xvciYpOworCisgICAgdmlydHVhbCBjb25zdCBDb2xvciYgZ2V0VmFsdWUoKSB7IHJldHVy
biAoKCptX2luc3RhbmNlKS4qbV9nZXRNZXRob2QpKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWUoVSB2YWx1ZSkgeyAoKCptX2luc3RhbmNlKS4qbV9zZXRNZXRob2QpKHZhbHVlKTsgfQor
ICAgIHZpcnR1YWwgQ0NBbmltYXRpb25BbmltYXRhYmxlUHJvcGVydHk6OkFuaW1hdGFibGVQcm9w
ZXJ0eSBzaWduYXR1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1faW5zdGFuY2UpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihtX3NldE1ldGhvZCkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
Q29sb3JBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4gY3JlYXRlKFQqIGluc3RhbmNlLCBHZXRNZXRo
b2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbDxUPihpbnN0YW5jZSwgZ2V0
TWV0aG9kLCBzZXRNZXRob2QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0NvbG9yQW5pbWF0
aW9uVGFyZ2V0SW1wbChUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0aG9k
IHNldE1ldGhvZCkKKyAgICAgICAgOiBtX2luc3RhbmNlKGluc3RhbmNlKQorICAgICAgICAsIG1f
Z2V0TWV0aG9kKGdldE1ldGhvZCkKKyAgICAgICAgLCBtX3NldE1ldGhvZChzZXRNZXRob2QpCisg
ICAgeworICAgIH0KKworICAgIFQqIG1faW5zdGFuY2U7CisgICAgU2V0TWV0aG9kIG1fc2V0TWV0
aG9kOworICAgIEdldE1ldGhvZCBtX2dldE1ldGhvZDsKK307CisKK2NsYXNzIENDRmxvYXRQb2lu
dEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IEZs
b2F0UG9pbnQmIGdldFZhbHVlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25z
dCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgQ0NBbmltYXRpb246OkFuaW1hdGFibGVQ
cm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+Q0NGbG9hdFBvaW50
QW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwoKSB7IH07Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4K
K2NsYXNzIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEltcGwgOiBwdWJsaWMgQ0NGbG9hdFBv
aW50QW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwgeworcHVibGljOgorICAgIHR5cGVkZWYgY29uc3Qg
RmxvYXRQb2ludCYgKFQ6OipHZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0
TWV0aG9kKShjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9p
bnQmIGdldFZhbHVlKCkgeyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1fZ2V0TWV0aG9kKSgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKFUgdmFsdWUpIHsgKCgqbV9pbnN0YW5jZSkuKm1f
c2V0TWV0aG9kKSh2YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIENDQW5pbWF0aW9uQW5pbWF0YWJsZVBy
b3BlcnR5OjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX2luc3Rh
bmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9zZXRNZXRob2QpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4g
Y3JlYXRlKFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0
aG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0Zsb2F0UG9pbnRBbmlt
YXRpb25UYXJnZXRJbXBsPFQ+KGluc3RhbmNlLCBnZXRNZXRob2QsIHNldE1ldGhvZCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEltcGwoVCogaW5z
dGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgICAg
IDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAgICAgLCBtX2dldE1ldGhvZChnZXRNZXRob2Qp
CisgICAgICAgICwgbV9zZXRNZXRob2Qoc2V0TWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICBU
KiBtX2luc3RhbmNlOworICAgIFNldE1ldGhvZCBtX3NldE1ldGhvZDsKKyAgICBHZXRNZXRob2Qg
bV9nZXRNZXRob2Q7Cit9OworCitjbGFzcyBDQ0ludFBvaW50QW5pbWF0aW9uVGFyZ2V0QmFzZUlt
cGwgeworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgSW50UG9pbnQmIGdldFZhbHVlKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBJbnRQb2ludCYpID0gMDsKKyAgICB2
aXJ0dWFsIENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgfkNDSW50UG9pbnRBbmltYXRpb25UYXJnZXRCYXNlSW1wbCgpIHsg
fTsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgQ0NJbnRQb2ludEFuaW1hdGlvblRh
cmdldEltcGwgOiBwdWJsaWMgQ0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIGNvbnN0IEludFBvaW50JiAoVDo6KkdldE1ldGhvZCkoKTsKKyAg
ICB0eXBlZGVmIHZvaWQgKFQ6OipTZXRNZXRob2QpKGNvbnN0IEludFBvaW50Jik7CisKKyAgICB2
aXJ0dWFsIGNvbnN0IEludFBvaW50JiBnZXRWYWx1ZSgpIHsgcmV0dXJuICgoKm1faW5zdGFuY2Up
LiptX2dldE1ldGhvZCkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShVIHZhbHVlKSB7
ICgoKm1faW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9CisgICAgdmlydHVhbCBDQ0Fu
aW1hdGlvbkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc2V0TWV0
aG9kKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NJbnRQb2ludEFuaW1hdGlv
blRhcmdldEltcGw8VD4gPiBjcmVhdGUoVCogaW5zdGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2Qs
IFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENDSW50UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPFQ+KGluc3RhbmNlLCBnZXRNZXRob2QsIHNl
dE1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDSW50UG9pbnRBbmltYXRpb25UYXJn
ZXRJbXBsKFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0
aG9kKQorICAgICAgICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAgICAgICwgbV9nZXRNZXRo
b2QoZ2V0TWV0aG9kKQorICAgICAgICAsIG1fc2V0TWV0aG9kKHNldE1ldGhvZCkKKyAgICB7Cisg
ICAgfQorCisgICAgVCogbV9pbnN0YW5jZTsKKyAgICBTZXRNZXRob2QgbV9zZXRNZXRob2Q7Cisg
ICAgR2V0TWV0aG9kIG1fZ2V0TWV0aG9kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQ0NBbmltYXRpb25UYXJnZXRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cAppbmRleCBhZjA0MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRlOTJkLi5lOThlYmRl
MzkyYjY0NTNjZTkxYmQwOWRjZTJlZTY0NTEzMjNlMmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgKaW5kZXggZTJjMDBjODY4OTgyYTc2YzY1OGNhZTgzNDEwZTg1YmNjZGNmODA5Zi4uNzRhZTlj
Yjg2OWEwNzhmZTAwY2JkOTYyZGFhZjQ1NGFjNTc3Zjc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CkBAIC0yMTksNiArMjE5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJ
bXBsPiA+IG1fY2hpbGRyZW47CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX21hc2tMYXllcjsK
ICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcmVwbGljYUxheWVyOworICAgIFJlZlB0cjxDQ0Fu
aW1hdGlvbkNvbnRhbmluZXJJbXBsPiBtX2FuaW1hdGlvbnM7CiAgICAgaW50IG1fbGF5ZXJJZDsK
IAogICAgIC8vIFByb3BlcnRpZXMgc3luY2hyb25pemVkIGZyb20gdGhlIGFzc29jaWF0ZWQgTGF5
ZXJDaHJvbWl1bS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXgg
OGNmYmQzMDdhMDUwOTQwY2Y2YjA4NzE0ZGM1ODI1ZmRmOGFhOTMxNi4uODQ4ZGM1MjVjYzAxMDQz
MDVlMDJlMTUyMTE3ZmM1NjdhZWI5ODllNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXll
clRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAg
ICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAg
LCBtX2ZyYW1lTnVtYmVyKDApCisgICAgLCBtX2FuaW1hdGlvbk1hbmFnZXIoQ0NBbmltYXRpb25N
YW5hZ2VyOjpjcmVhdGUoKSkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3Zp
c2libGUodHJ1ZSkKICAgICAsIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhmYWxzZSkKQEAgLTg0
LDYgKzg1LDcgQEAgR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRl
eHQoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVn
aW5UaW1lTXMpCiB7CisgICAgbV9hbmltYXRpb25NYW5hZ2VyLT5hbmltYXRlKGZyYW1lQmVnaW5U
aW1lTXMpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGNhNGY3MWJkODZhYTMyOTQ1NDVl
Zjk3YmFkN2JiYTFkZTc5NmI3ZWEuLmM4YjQzMDM0YTE4NWE1OTczOWJmNjljZWQ4Y2FkMWFhMzg3
ZWUzNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEyNSw2ICsx
MjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKIAog
ICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKKyAgICBP
d25QdHI8Q0NBbmltYXRpb25NYW5hZ2VyPiBtX2FuaW1hdGlvbk1hbmFnZXI7CiAgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBt
X3Njcm9sbExheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1
bmN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaW1pbmdGdW5jdGlvbkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGRkZWQ5NzVlODQyOWJmNGNm
M2NlOGRkMjZhZWUxNGFkZGI1YTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbkltcGwuaApAQCAt
MCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGltaW5nRnVuY3Rpb25JbXBs
X2gKKyNkZWZpbmUgQ0NUaW1pbmdGdW5jdGlvbkltcGxfaAorCisjaW5jbHVkZSAiVW5pdEJlemll
ci5oIgorCitjbGFzcyBDQ1RpbWluZ0Z1bmN0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q0NUaW1pbmdGdW5jdGlvbkltcGwoKTsKKyAgICBkb3VibGUgcmVzYW1wbGUoZG91YmxlIHQp
IGNvbnN0ID0gMDsKK307CisKKy8vIEl0IGlzIGFzc3VtZWQgdGhhdCAoeDEsIHkxKSA9ICgwLCAw
KSBhbmQgKHg0LCB5NCkgPSAoMSwgMSkKK2NsYXNzIENDQmV6aWVyVGltaW5nRnVuY3Rpb25JbXBs
IHsKK3B1YmxpYzoKKyAgICBDQ0JlemllclRpbWluZ0Z1bmN0aW9uSW1wbChkb3VibGUgeDIsIGRv
dWJsZSB5MiwgZG91YmxlIHgzLCBkb3VibGUgeTMpOworICAgIHZpcnR1YWwgfkNDQmV6aWVyVGlt
aW5nRnVuY3Rpb25JbXBsKCk7CisKKyAgICBkb3VibGUgcmVzYW1wbGUoZG91YmxlIHQpIGNvbnN0
OworCitwcml2YXRlOgorICAgIFVuaXRCZXppZXIgbV9iZXppZXI7Cit9OworCitjbGFzcyBDQ0Vh
c2VJblRpbWluZ0Z1bmN0aW9uSW1wbCA6IHB1YmxpYyBCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwg
eworcHVibGljOgorICAgIENDRWFzZUluVGltaW5nRnVuY3Rpb25JbXBsKCkgOiBDQ0JlemllclRp
bWluZ0Z1bmN0aW9uSW1wbCgxLjAgLyAzLjAsIDEuMCAvIDMuMCwgMi4wIC8gMy4wLCAxLjApIHsg
fQorICAgIH5DQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uSW1wbCgpIHsgfQorfTsKKworY2xhc3MgQ0NF
YXNlT3V0VGltaW5nRnVuY3Rpb25JbXBsIDogcHVibGljIEJlemllclRpbWluZ0Z1bmN0aW9uSW1w
bCB7CitwdWJsaWM6CisgICAgQ0NFYXNlT3V0VGltaW5nRnVuY3Rpb25JbXBsKCkgOiBDQ0Jlemll
clRpbWluZ0Z1bmN0aW9uSW1wbCgxLjAgLyAzLjAsIDAuMCwgMi4wIC8gMy4wLCAyLjAgLyAzLjAp
IHsgfQorICAgIH5DQ0Vhc2VPdXRUaW1pbmdGdW5jdGlvbkltcGwoKSB7IH0KK307CisKK2NsYXNz
IENDRWFzZU91dEVhc2VJblRpbWluZ0Z1bmN0aW9uSW1wbCA6IHB1YmxpYyBCZXppZXJUaW1pbmdG
dW5jdGlvbkltcGwgeworcHVibGljOgorICAgIENDRWFzZU91dEVhc2VJblRpbWluZ0Z1bmN0aW9u
SW1wbCgpIDogQ0NCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwoMS4wIC8gMy4wLCAwLjAsIDIuMCAv
IDMuMCwgMS4wKSB7IH0KKyAgICB+Q0NFYXNlSW5DQ0Vhc2VPdXRFYXNlSW5UaW1pbmdGdW5jdGlv
bkltcGxUaW1pbmdGdW5jdGlvbkltcGwoKSB7IH0KK307CisKKyNlbmRpZiAvLyBDQ1RpbWluZ0Z1
bmN0aW9uSW1wbF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117486</attachid>
            <date>2011-12-01 14:16:08 -0800</date>
            <delta_ts>2011-12-02 10:35:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20111201171606.patch</filename>
            <type>text/plain</type>
            <size>34975</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY5MjZiNDJiYmY0NGQ5
YjY2YmI3NzMzODYwMTI4YWI5NTE0OGQ5OC4uYmQxZDQzNGY3OTY1ZGUxY2RlYzk0NjU4MjA5OWQy
ODA1NWZiOGVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTExLTI5ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1F
bGVtZW50OjpnZXRDdXJyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtRWxlbWVudDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3Jt
RWxlbWVudDo6b25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtRWxlbWVu
dDo6b25Qcm9ncmVzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25FbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbk9ic2VydmVyOjp+Q0NBbmltYXRpb25PYnNlcnZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRvci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphbmltYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0QW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgIChDQ0Vhc2VJblJl
c2FtcGxlcjo6Q0NFYXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlSW5SZXNhbXBsZXI6
On5DQ0Vhc2VJblJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6OkNDRWFz
ZU91dFJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6On5DQ0Vhc2VPdXRS
ZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjpDQ0Vhc2VPdXRF
YXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjp+Q0NF
YXNlSW5DQ0Vhc2VPdXRFYXNlSW5SZXNhbXBsZXJSZXNhbXBsZXIpOgorCiAyMDExLTExLTMwICBQ
YXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBnZXQgcmlkIG9mIGRlZmVycmVkIGJhY2tlbmQtPmZyb250LWVuZCBjb21tYW5kcyBwcm9j
ZXNzaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NBbmltYXRpb25JbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDBhMjI5ZWEx
ZGM5NTBjZjkyYjhhNGNlNTc2ZGFhMzVlMGUxZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25JbXBsLmgK
QEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25JbXBs
X2gKKyNkZWZpbmUgQ0NBbmltYXRpb25JbXBsX2gKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDQW5pYW10aW9uQ29sb3JUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25Db250YWluZXJJ
bXBsOworY2xhc3MgQ0NBbmltYXRpb25Db250cm9sbGVySW1wbDsKK2NsYXNzIENDQW5pbWF0aW9u
RmxvYXRUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25GbG9hdFBvaW50VGFyZ2V0SW1wbDsK
K2NsYXNzIENDQW5pbWF0aW9uSW50UG9pbnRUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25U
cmFuc2Zvcm1hdGlvbk1hdHJpeFRhcmdldEltcGw7CisKK2NsYXNzIENDQW5pbWF0aW9uSW1wbCA6
IHB1YmxpYyBSZWZDb3VudGVkPENDQW5pbWF0aW9uSW1wbD4geworcHVibGljOgorICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPHZvaWQqLCB2b2lkKj4gQW5pbWF0YWJsZVByb3BlcnR5OworCisgICAgLy8g
dm9sbGljazogSSBkZWNpZGVkIHRvIHVzZSBhIHNpZ25hdHVyZSAoYSBjb21iaW5hdGlvbiBvZiBp
bnN0YW5jZS9zZXR0ZXIgcG9pbnRlcnMpIHJhdGhlciB0aGFuCisgICAgLy8gcmF0aGVyIHRoYW4g
dGhlIGZvbGxvd2luZyBlbnVtLiBBIGNvbiBpcyB0aGF0IHRoZSBlbnVtIGNvbnN0YW50cyBhcmUg
bW9yZSBtZWFuaW5nZnVsLgorICAgIC8vIEEgcHJvIGlzIHRoYXQgaXQncyBlYXNpZXIgdG8gbWFp
bnRhaW4gdGhpcy4gV2hlbiB5b3UgYWRkIGEgbmV3IGFuaW1hdGFibGUgcHJvcGVydHksIHlvdQor
ICAgIC8vIG5vIGxvbmdlciBoYXZlIHRvIHVwZGF0ZSBhbiBlbnVtIGFuZCBhbGwgb2YgdGhlIHJl
bGF0ZWQgc3dpdGNoIHN0YXRlbWVudHMuIEFsc28sIHdlIGNhbgorICAgIC8vIGRpZmZlcmVudGlh
dGUgYmV0d2VlbiBwcm9wZXJ0aWVzIG9uIGRpZmZlcmVudCBvYmplY3RzLiBMZXQgbWUga25vdyBp
ZiB5b3UgdGhpbmsgdGhpcyBpcyBhIGJhZCB0cmFkZW9mZi4KKyAgICAvLworICAgIC8vICBlbnVt
IEFuaW1hdGFibGVQcm9wZXJ0eSB7CisgICAgLy8gICAgICBBTkNIT1JfUE9JTlQsIEFOQ0hPUl9Q
T0lOVF9aLCBCQUNLR1JPVU5EX0NPTE9SLCBPUEFDSVRZLAorICAgIC8vICAgICAgUE9TSVRJT04s
IFRSQU5TRk9STSwgWk9PTV9BTklNQVRPUl9UUkFOU0ZPUk0sCisgICAgLy8gICAgICBTQ1JFRU5f
U1BBQ0VfVFJBTlNGT1JNLCBCT1VORFMsIENPTlRFTlRfQk9VTkRTLCBTQ1JPTExfUE9TSVRJT04K
KyAgICAvLyAgfTsKKworICAgIGNsYXNzIEFuaW1hdGFibGVQcm9wZXJ0aWVzIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vIEVuc3VyZSBubyBkdXBsaWNhdGVzLgorICAgICAgICB2b2lkIGFkZChB
bmltYXRhYmxlUHJvcGVydHkpOworICAgICAgICB2b2lkIGFkZChjb25zdCBBbmltYXRhYmxlUHJv
cGVydGllcyYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPEFuaW1hdGFibGVQcm9w
ZXJ0eT4gbV9wcm9wZXJ0aWVzOworICAgIH07CisKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAg
V2FpdGluZ1RvUnVuLAorICAgICAgICBSdW5uaW5nLAorICAgICAgICBQYXVzZWQsCisgICAgICAg
IEZpbmlzaGVkCisgICAgfTsKKworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uSW1wbCgpOworCisg
ICAgLy8gSW4gYWJzb2x1dGUgdGltZS4KKyAgICB2b2lkIGFuaW1hdGUoZG91YmxlIHQpOworCisg
ICAgLy8gSXMgdGhpcyB3aGVyZSBsb29waW5nIGxvZ2ljIHNob3VsZCBsaXZlPworCisgICAgdmly
dHVhbCBjb25zdCBBbmltYXRhYmxlUHJvcGVydGllcyYgcHJvcGVydGllcygpID0gMDsKKworICAg
IC8vIFRoZSBhbmltYXRpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGNvbnRyb2xs
ZXIuCisgICAgdm9pZCBzZXRDb250cm9sbGVyKENDQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsK
KworICAgIFN0YXRlIHN0YXRlKCkgY29uc3Q7CisgICAgLy8gV2lsbCBldmVudHVhbGx5IHVwZGF0
ZSBsaXN0ZW5lcihzKQorICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUpOworCisgICAgZG91YmxlIHN0
YXJ0VGltZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U3RhcnRUaW1lKGRvdWJsZSk7CisKKyAgICBk
b3VibGUgZHVyYXRpb24oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIENDQW5pbWF0aW9uKGRv
dWJsZSBkdXJhdGlvbik7CisKKyAgICAvLyBEb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUg
Y29udGFpbmVyLgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRhaW5lcihDQ0FuaW1hdGlvbkNv
bnRhaW5lckltcGwqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21Db250YWluZXIo
Q0NBbmltYXRpb25Db250YWluZXJJbXBsKikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG9uQW5p
bWF0ZShkb3VibGUgdCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIENDQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwqIG1fY29udHJvbGxlcjsKKworICAgIC8vIGluIG1pbGxpc2Vjb25kcworICAg
IGRvdWJsZSBtX2R1cmF0aW9uOworCisgICAgU3RhdGUgbV9zdGF0ZTsKKworICAgIGRvdWJsZSBt
X3N0YXJ0VGltZTsKK307CisKK2NsYXNzIENDRmxvYXRBbmltYXRpb25JbXBsIDogcHVibGljIEND
QW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgLy8gQ3JlYXRlcyBhbiBhbmltYXRpb24gdGhh
dCBibGVuZHMgYmV0d2VlbiB0aGUgb2xkIGFuZCB0aGUgbmV3IGFuaW1hdGlvbi4KKyAgICAvLyB8
bGFzdEFuaW1UaW1lfCBpcyB0aGUgbGFzdCByZWxhdGl2ZSB0aW1lIHVzZWQgd2l0aCB0aGUgb2xk
IGFuaW1hdGlvbiAoZS5nLiwgaWYgdGhlIG9sZCBhbmltYXRpb24KKyAgICAvLyBoYWQgYmVlbiBh
bmltYXRpbmcgZm9yIGhhbGYgYSBzZWNvbmQsIHxsYXN0QW5pbVRpbWV8IHdvdWxkIGJlIDUwMCBt
cywgbm90IHRoZSBhYnNvbHV0ZQorICAgIC8vIGFuaW1hdGlvbiB0aW1lLiBCbGVuZGluZyB3b3Jr
cyBhcyBmb2xsb3dzOgorICAgIC8vICAtIExldCB8cmVtYWluaW5nfCA9IHxvbGRBbmltYXRpb24u
ZHVyYXRpb24oKXwgLSB8bGFzdEFuaW1UaW1lfAorICAgIC8vICAtIElmIG9sZEFuaW1hdGlvbih0
KSBhbmQgbmV3QW5pbWF0aW9uKHQpIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSBvbGQgYW5kIG5ldyBh
bmltYXRpb25zIGF0IHRpbWUgdCwKKyAgICAvLyAgICB0aGVuIHRoZSByZXN1bHQgb2YgdGhlIGJs
ZW5kZWQgYW5pbWF0aW9uIGF0IHRpbWUgdCBpczoKKyAgICAvLyAgICAgIGlmICh0IDwgcmVtYWlu
aW5nKQorICAgIC8vICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUodCAvIHJlbWFpbmluZywgb2xk
QW5pbWF0aW9uKHQpLCBuZXdBbmltYXRpb24odCkpCisgICAgLy8gICAgICByZXR1cm4gbmV3QW5p
bWF0aW9uKHQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+IGNy
ZWF0ZUJsZW5kZWQoZG91YmxlIGxhc3RBbmltVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPENDRmxvYXRBbmlt
YXRpb25JbXBsPiBvbGRBbmltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+IG5l
d0FuaW0pOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NGbG9hdEFuaW1hdGlvbkltcGw+IGNy
ZWF0ZShkb3VibGUgZHVyYXRpb24sIGZsb2F0IHN0YXJ0LCBmbG9hdCBlbmQpOworCisgICAgLy8g
TmVlZCB0byBiZSBhYmxlIHRvIHJlbGVhc2Ugd2hlbiBjcmVhdGluZyBibGVuZGVkIGFuaW1hdGlv
bnMuIFRoZSBibGVuZGVkIGFuaW1hdGlvbgorICAgIC8vIHdpbGwgc3RlYWwgdGhlIGFuaW1hdGlv
biBmcm9tIG9uZSBvZiB0aGUgY2hpbGRyZW4sIGFuZCBwYXNzIGR1bW15IHRhcmdldHMgdG8gdGhl
IGtpZHMuCisgICAgUGFzc093blB0cjxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1wbD4gcmVsZWFz
ZVRhcmdldCgpOworICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NPd25QdHI8Q0NGbG9hdEFuaW1hdGlv
blRhcmdldEltcGw+KTsKKworICAgIHZpcnR1YWwgfkNDRmxvYXRBbmltYXRpb25JbXBsKCk7Citw
cm90ZWN0ZWQ6CisgICAgQ0NGbG9hdEFuaW1hdGlvbkltcGwoZG91YmxlIGR1cmF0aW9uKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIENDQW5pbWF0aW9uSW1w
bCAob3RoZXIgdGhhbiB8YW5pbWF0ZXwpLgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRhaW5l
cihDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGwqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJv
bUNvbnRhaW5lcihDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGwqKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IEFuaW1hdGFibGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCk7CisKKyAgICBPd25QdHI8Q0NGbG9h
dEFuaW1hdGlvblRhcmdldEltcGw+IG1fdGFyZ2V0OworfTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1h
dGlvbk1hdHJpeEFuaW1hdGlvbkltcGwgOiBwdWJsaWMgQ0NBbmltYXRpb25JbXBsIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9u
SW1wbD4gY3JlYXRlQmxlbmRlZChkb3VibGUgbGFzdEFuaW1UaW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbkltcGw+IG9sZEFuaW0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0
aW9uSW1wbD4gbmV3QW5pbSk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1RyYW5zZm9ybWF0
aW9uTWF0cml4QW5pbWF0aW9uSW1wbD4gY3JlYXRlKGRvdWJsZSBkdXJhdGlvbiwgUGFzc1JlZlB0
cjxUcmFuc2Zvcm1PcGVyYXRpb24+KTsKKworICAgIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1hdGlv
bk1hdHJpeEFuaW1hdGlvblRhcmdldEltcGw+IHJlbGVhc2VUYXJnZXQoKTsKKyAgICB2b2lkIHNl
dFRhcmdldChQYXNzT3duUHRyPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJ
bXBsPik7CisKKyAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uSW1w
bCgpOworcHJvdGVjdGVkOgorICAgIENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBs
KGRvdWJsZSBkdXJhdGlvbik7CisKK3ByaXZhdGU6CisgICAgLy8gUGFydGlhbCBpbXBsZW1lbnRh
dGlvbiBvZiBDQ0FuaW1hdGlvbkltcGwgKG90aGVyIHRoYW4gfGFuaW1hdGV8KS4KKyAgICB2aXJ0
dWFsIHZvaWQgYWRkVG9Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tQ29udGFpbmVyKENDQW5pbWF0aW9uQ29udGFpbmVySW1w
bCoqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEFuaW1hdGFibGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVz
KCk7CisKKyAgICBPd25QdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRhcmdldElt
cGw+IG1fdGFyZ2V0OworfTsKKworY2xhc3MgQ0NDb2xvckFuaW1hdGlvbkltcGwgOiBwdWJsaWMg
Q0NBbmltYXRpb25JbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NvbG9y
QW5pbWF0aW9uSW1wbD4gY3JlYXRlQmxlbmRlZChkb3VibGUgbGFzdEFuaW1UaW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NS
ZWZQdHI8Q0NDb2xvckFuaW1hdGlvbkltcGw+IG9sZEFuaW0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0NvbG9y
QW5pbWF0aW9uSW1wbD4gbmV3QW5pbSk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NvbG9y
QW5pbWF0aW9uSW1wbD4gY3JlYXRlKGRvdWJsZSBkdXJhdGlvbiwgY29uc3QgQ29sb3ImIHN0YXJ0
LCBjb25zdCBDb2xvciYgZW5kKTsKKworICAgIFBhc3NPd25QdHI8Q0NDb2xvckFuaW1hdGlvblRh
cmdldEltcGw+IHJlbGVhc2VUYXJnZXQoKTsKKyAgICB2b2lkIHNldFRhcmdldChQYXNzT3duUHRy
PENDQ29sb3JBbmltYXRpb25UYXJnZXRJbXBsPik7CisKKyAgICB2aXJ0dWFsIH5DQ0NvbG9yQW5p
bWF0aW9uSW1wbCgpOworcHJvdGVjdGVkOgorICAgIENDQ29sb3JBbmltYXRpb25JbXBsKGRvdWJs
ZSBkdXJhdGlvbik7CisKK3ByaXZhdGU6CisgICAgLy8gUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBv
ZiBDQ0FuaW1hdGlvbkltcGwgKG90aGVyIHRoYW4gfGFuaW1hdGV8KS4KKyAgICB2aXJ0dWFsIHZv
aWQgYWRkVG9Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVGcm9tQ29udGFpbmVyKENDQW5pbWF0aW9uQ29udGFpbmVySW1wbCoqKTsK
KyAgICB2aXJ0dWFsIGNvbnN0IEFuaW1hdGFibGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCk7CisK
KyAgICBPd25QdHI8Q0NDb2xvckFuaW1hdGlvblRhcmdldEltcGw+IG1fdGFyZ2V0OworfTsKKwor
Y2xhc3MgQ0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkltcGwg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDRmxvYXRQb2ludEFuaW1hdGlvbklt
cGw+IGNyZWF0ZUJsZW5kZWQoZG91YmxlIGxhc3RBbmltVGltZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbD4gb2xkQW5pbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NG
bG9hdFBvaW50QW5pbWF0aW9uSW1wbD4gbmV3QW5pbSk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25JbXBsPiBjcmVhdGUoZG91YmxlIGR1cmF0aW9uLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kKTsKKworICAgIFBhc3NP
d25QdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbD4gcmVsZWFzZVRhcmdldCgpOwor
ICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NPd25QdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uVGFyZ2V0
SW1wbD4pOworCisgICAgdmlydHVhbCB+Q0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbCgpOworcHJv
dGVjdGVkOgorICAgIENDRmxvYXRQb2ludEFuaW1hdGlvbkltcGwoZG91YmxlIGR1cmF0aW9uKTsK
KworcHJpdmF0ZToKKyAgICAvLyBQYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIENDQW5pbWF0aW9u
SW1wbCAob3RoZXIgdGhhbiB8YW5pbWF0ZXwpLgorICAgIHZpcnR1YWwgdm9pZCBhZGRUb0NvbnRh
aW5lcihDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGwqKik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUZyb21Db250YWluZXIoQ0NBbmltYXRpb25Db250YWluZXJJbXBsKiopOworICAgIHZpcnR1YWwg
Y29uc3QgQW5pbWF0YWJsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxD
Q0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPiBtX3RhcmdldDsKK307CisKK2NsYXNzIEND
SW50UG9pbnRBbmltYXRpb25JbXBsIDogcHVibGljIENDQW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NJbnRQb2ludEFuaW1hdGlvbkltcGw+IGNyZWF0ZUJs
ZW5kZWQoZG91YmxlIGxhc3RBbmltVGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPENDSW50UG9pbnRBbmlt
YXRpb25JbXBsPiBvbGRBbmltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NJbnRQb2ludEFuaW1hdGlvbklt
cGw+IG5ld0FuaW0pOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NJbnRQb2ludEFuaW1hdGlv
bkltcGw+IGNyZWF0ZShkb3VibGUgZHVyYXRpb24sIGNvbnN0IEludFBvaW50JiBzdGFydCwgY29u
c3QgSW50UG9pbnQmIGVuZCk7CisKKyAgICBQYXNzT3duUHRyPENDSW50UG9pbnRBbmltYXRpb25U
YXJnZXRJbXBsPiByZWxlYXNlVGFyZ2V0KCk7CisgICAgdm9pZCBzZXRUYXJnZXQoUGFzc093blB0
cjxDQ0ludFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbD4pOworCisgICAgdmlydHVhbCB+Q0NJbnRQ
b2ludEFuaW1hdGlvbkltcGwoKTsKK3Byb3RlY3RlZDoKKyAgICBDQ0ludFBvaW50QW5pbWF0aW9u
SW1wbChkb3VibGUgZHVyYXRpb24pOworCitwcml2YXRlOgorICAgIC8vIFBhcnRpYWwgaW1wbGVt
ZW50YXRpb24gb2YgQ0NBbmltYXRpb25JbXBsIChvdGhlciB0aGFuIHxhbmltYXRlfCkuCisgICAg
dmlydHVhbCB2b2lkIGFkZFRvQ29udGFpbmVyKENDQW5pbWF0aW9uQ29udGFpbmVySW1wbCoqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbUNvbnRhaW5lcihDQ0FuaW1hdGlvbkNvbnRhaW5l
ckltcGwqKik7CisgICAgdmlydHVhbCBjb25zdCBBbmltYXRhYmxlUHJvcGVydGllcyYgcHJvcGVy
dGllcygpOworCisgICAgT3duUHRyPENDSW50UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPiBtX3Rh
cmdldDsKK307CisKKy8vIENhbiBzZXJ2ZSB0d28gcHVycG9zZXM6CisvLyAgMSkgQXMgZ2VuZXJh
bCBzdG9yYWdlIGZvciBhbmltYXRpb25zLgorLy8gIDIpIEEgY29tcG9zaXRlIGFuaW1hdGlvbiB0
aGF0IHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGFuaW1hdGlvbnMgdG8gYmUgcnVuIHNpbXVs
dGFuZW91c2x5IChlLmcuLCBzY2FsZSAmIHBvc2l0aW9uKS4KK2NsYXNzIENDQW5pbWF0aW9uQ29u
dGFpbmVySW1wbCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkltcGwgeworcHVibGljOgorICAgIC8vIEZv
ciBlYWNoIHR5cGUgb2YgYW5pbWF0aW9uIChhbmQgZWFjaCBwcm9wZXJ0eSksIHRha2UgdGhlIHJ1
bm5pbmcgYW5pbWF0aW9uIG9mIHRoYXQgdHlwZSBmb3IgdGhhdCBwcm9wZXJ0eQorICAgIC8vIChp
ZiB0aGVyZSBpcyBvbmUpLCBhbmQgYmxlbmQgaXQgd2l0aCB0aGUgcnVubmluZyBhbmltYXRpb24g
b2YgdGhlIHNhbWUgdHlwZSBhbmQgcHJvcGVydHkgZnJvbSB0aGUgb3RoZXIgYW5pbWF0aW9uIGNv
bnRhaW5lci4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGw+
IGNyZWF0ZUJsZW5kZWQoZG91YmxlIGxhc3RBbmltVGltZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDQ0Fu
aW1hdGlvbkNvbnRhaW5lckltcGw+IG9sZEFuaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Q0NBbmltYXRp
b25Db250YWluZXJJbXBsPiBuZXdBbmltKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQW5p
bWF0aW9uQ29udGFpbmVySW1wbD4gY3JlYXRlKCk7CisKKyAgICB2b2lkIGFkZEFuaW1hdGlvbihQ
YXNzUmVmUHRyPENDQW5pbWF0aW9uSW1wbD4pOworLy8gIHsKKy8vICAgICAgYW5pbWF0aW9uLT5h
ZGRUb0NvbnRhaW5lcih0aGlzKTsKKy8vICB9CisKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbihD
Q0FuaW1hdGlvbkltcGwqKTsKKy8vICB7CisvLyAgICAgIGFuaW1hdGlvbi0+YWRkUmVtb3ZlRnJv
bUNvbnRhaW5lcih0aGlzKTsKKy8vICB9CisKKyAgICBWZWN0b3I8UmVmUHRyPENDRmxvYXRBbmlt
YXRpb25JbXBsPiYgZmxvYXRBbmltYXRpb25zKCk7CisgICAgVmVjdG9yPFJlZlB0cjxDQ1RyYW5z
Zm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uSW1wbD4mIHRyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0
aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8Q0NDb2xvckFuaW1hdGlvbkltcGw+JiBjb2xvckFu
aW1hdGlvbnMoKTsKKyAgICBWZWN0b3I8UmVmUHRyPENDRmxvYXRQb2ludEFuaW1hdGlvbkltcGw+
JiBmbG9hdFBvaW50QW5pbWF0aW9ucygpOworICAgIFZlY3RvcjxSZWZQdHI8Q0NJbnRQb2ludEFu
aW1hdGlvbkltcGw+JiBpbnRQb2ludEFuaW1hdGlvbnMoKTsKKworcHJpdmF0ZToKKyAgICAvLyBJ
bXBsZW1lbnRhdGlvbiBvZiBDQ0FuaW1hdGlvbkltcGwKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZShkb3VibGUgdCk7CisgICAgdmlydHVhbCB2b2lkIGFkZFRvQ29udGFpbmVyKENDQW5pbWF0aW9u
Q29udGFpbmVySW1wbCopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tQ29udGFpbmVyKEND
QW5pbWF0aW9uQ29udGFpbmVySW1wbCoqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEFuaW1hdGFibGVQ
cm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPENDRmxvYXRBbmlt
YXRpb25JbXBsPiBtX2Zsb2F0QW5pbWF0aW9uczsKKyAgICBWZWN0b3I8UmVmUHRyPENDVHJhbnNm
b3JtYXRpb25NYXRyaXhBbmltYXRpb25JbXBsPiBtX3RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0
aW9uczsKKyAgICBWZWN0b3I8UmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBsPiBtX2NvbG9yQW5p
bWF0aW9uczsKKyAgICBWZWN0b3I8UmVmUHRyPENDRmxvYXRQb2ludEFuaW1hdGlvbkltcGw+IG1f
ZmxvYXRQb2ludEFuaW1hdGlvbnM7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0ludFBvaW50QW5pbWF0
aW9uSW1wbD4gbV9pbnRQb2ludEFuaW1hdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKworI2VuZGlmIC8vIENDQW5pbWF0aW9uSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbk1hbmFnZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbk1hbmFnZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZiY2NmZmE3NWFkNGEyYmJmMjRmMjMx
YzIxZjQzNjMyMmU3ZjQzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uTWFuYWdlckltcGwuaApAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uTWFuYWdlckltcGxf
aAorI2RlZmluZSBDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0NBbmltYXRpb25PYnNlcnZlcjsKKworY2xhc3MgQ0NBbmltYXRpb25NYW5hZ2VySW1wbCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBbmltYXRpb25NYW5hZ2VySW1wbD4gY3Jl
YXRlKCk7CisKKyAgICB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lTXMpOworCisg
ICAgdm9pZCBhZGRBbmltYXRpb24oUGFzc1JlZlB0cjxDQ0FuaW1hdGlvbkltcGw+KTsKKyAgICB2
b2lkIHJlbW92ZUFuaW1hdGlvbihDQ0FuaW1hdGlvbiopOworICAgIC8vIHBhdXNlLCByZXN1bWUu
Li4KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGN1cnJlbnRseSBydW5u
aW5nIGFuaW1hdGlvbnMuCisgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0OworCitwcml2YXRl
OgorICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIuCisgICAgQ0NBbmlt
YXRpb25NYW5hZ2VySW1wbCgpOworCisgICAgUmVmUHRyPENDQW5pbWF0aW9uQ29udGFpbmVySW1w
bD4gbV9hbmltYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gQ0NBbmltYXRpb25NYW5hZ2VySW1wbF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bk9ic2VydmVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2MjI3NzQxNzQwYzE4ZTFmZjMxODljNWU1ZDlj
ZTM2NTIxMTA1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbk9ic2VydmVySW1wbC5oCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmltYXRpb25PYnNlcnZlckltcGxfaAor
I2RlZmluZSBDQ0FuaW1hdGlvbk9ic2VydmVySW1wbF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQW4gYWJzdHJhY3QgaW50ZXJmYWNlIGZvciBjbGFzc2VzIHRoYXQgd2hpY2ggdG8gYmUg
bm90aWZpZWQgd2hlbiBhbmltYXRpb25zCisvLyBhcmUgc2NoZWR1bGVkLCBlbmRlZCwgb3IgYWJv
cnRlZC4KK2NsYXNzIENDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICAvLyBD
YWxsZWQgYXMgc29vbiBhcyBhbmltYXRpb24gaXMgYWRkZWQgdG8gYSBsYXllcidzIHF1ZXVlLgor
ICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblNjaGVkdWxlZChDQ0FuaW1hdGlvbkltcGwqKSA9
IDA7CisKKyAgICAvLyBDYWxsZWQgd2hlbiBhbiBhbmltYXRpb24gZW5kcy4KKyAgICB2aXJ0dWFs
IHZvaWQgb25BbmltYXRpb25FbmRlZChDQ0FuaW1hdGlvbkltcGwqKSA9IDA7CisKKyAgICAvLyBD
YWxsZWQgd2hlbiBhbiBhbmltYXRpb24gaXMgYWJvcnRlZCBiZWZvcmUgaXQgY29tcGxldGVzLiB8
b25BbmltYXRpb25FbmRlZHwKKyAgICAvLyBpcyBub3QgY2FsbGVkIGluIHRoaXMgY2FzZS4KKyAg
ICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25BYm9ydGVkKENDQW5pbWF0aW9uSW1wbCopID0gMDsK
KworICAgIC8vIENhbGxlZCB3aGVuIGFuIGFuaW1hdGlvbiBpcyBwYXVzZWQuCisgICAgdmlydHVh
bCB2b2lkIG9uQW5pbWF0aW9uUGF1c2VkKENDQW5pbWF0aW9uSW1wbCopID0gMDsKKworICAgIC8v
IENhbGxlZCB3aGVuIGFuIGFuaW1hdGlvbiBpcyByZXN1bWVkLgorICAgIHZpcnR1YWwgdm9pZCBv
bkFuaW1hdGlvblJlc3VtZWQoQ0NBbmltYXRpb25JbXBsKikgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+Q0NBbmltYXRpb25PYnNlcnZlckltcGwoKSB7IH0KK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QW5pbWF0aW9uVGFyZ2V0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25UYXJnZXRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzI1M2YwZjgw
OGM1YmE2NDhlNDczNzMwY2Q1OThlZjg5YmFlYzRmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uVGFyZ2V0
SW1wbC5oCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0
aW9uVGFyZ2V0SW1wbF9oCisjZGVmaW5lIENDQW5pbWF0aW9uVGFyZ2V0SW1wbF9oCisKKyNpbmNs
dWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDRmxvYXRBbmlt
YXRpb25UYXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoZmxvYXQpID0gMDsKKyAgICB2aXJ0
dWFsIENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgfkNDRmxvYXRBbmltYXRpb25UYXJnZXRCYXNlSW1wbCgpIHsgfTsKK307
CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgQ0NGbG9hdEFuaW1hdGlvblRhcmdldEltcGwg
OiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIGZsb2F0IChUOjoqR2V0TWV0aG9kKSgpOworICAgIHR5cGVkZWYgdm9pZCAoVDo6KlNl
dE1ldGhvZCkoZmxvYXQpOworCisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZSgpIHsgcmV0dXJu
ICgoKm1faW5zdGFuY2UpLiptX2dldE1ldGhvZCkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZShVIHZhbHVlKSB7ICgoKm1faW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9Cisg
ICAgdmlydHVhbCBDQ0FuaW1hdGlvbkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3Bl
cnR5IHNpZ25hdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG1fc2V0TWV0aG9kKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NG
bG9hdEFuaW1hdGlvblRhcmdldEltcGw8VD4gPiBjcmVhdGUoVCogaW5zdGFuY2UsIEdldE1ldGhv
ZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDRmxvYXRBbmltYXRpb25UYXJnZXRJbXBsPFQ+KGluc3RhbmNlLCBnZXRN
ZXRob2QsIHNldE1ldGhvZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDRmxvYXRBbmltYXRp
b25UYXJnZXRJbXBsKFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qg
c2V0TWV0aG9kKQorICAgICAgICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAgICAgICwgbV9n
ZXRNZXRob2QoZ2V0TWV0aG9kKQorICAgICAgICAsIG1fc2V0TWV0aG9kKHNldE1ldGhvZCkKKyAg
ICB7CisgICAgfQorCisgICAgVCogbV9pbnN0YW5jZTsKKyAgICBTZXRNZXRob2QgbV9zZXRNZXRo
b2Q7CisgICAgR2V0TWV0aG9kIG1fZ2V0TWV0aG9kOworfTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1h
dGlvbk1hdHJpeEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnZXRWYWx1ZSgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmly
dHVhbCBDQ0FuaW1hdGlvbjo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIH5DQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFyZ2V0QmFz
ZUltcGwoKSB7IH07Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIENDVHJhbnNmb3Jt
YXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJbXBsIDogcHVibGljIENDVHJhbnNmb3JtYXRpb25N
YXRyaXhBbmltYXRpb25UYXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgKFQ6OipHZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2
b2lkIChUOjoqU2V0TWV0aG9kKShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAg
dmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2V0VmFsdWUoKSB7IHJldHVybiAo
KCptX2luc3RhbmNlKS4qbV9nZXRNZXRob2QpKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWUoVSB2YWx1ZSkgeyAoKCptX2luc3RhbmNlKS4qbV9zZXRNZXRob2QpKHZhbHVlKTsgfQorICAg
IHZpcnR1YWwgQ0NBbmltYXRpb25BbmltYXRhYmxlUHJvcGVydHk6OkFuaW1hdGFibGVQcm9wZXJ0
eSBzaWduYXR1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1faW5zdGFuY2UpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihtX3NldE1ldGhvZCkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVHJh
bnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4gY3JlYXRlKFQqIGluc3Rh
bmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9u
VGFyZ2V0SW1wbDxUPihpbnN0YW5jZSwgZ2V0TWV0aG9kLCBzZXRNZXRob2QpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFyZ2V0SW1wbChU
KiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0aG9kIHNldE1ldGhvZCkKKyAg
ICAgICAgOiBtX2luc3RhbmNlKGluc3RhbmNlKQorICAgICAgICAsIG1fZ2V0TWV0aG9kKGdldE1l
dGhvZCkKKyAgICAgICAgLCBtX3NldE1ldGhvZChzZXRNZXRob2QpCisgICAgeworICAgIH0KKwor
ICAgIFQqIG1faW5zdGFuY2U7CisgICAgU2V0TWV0aG9kIG1fc2V0TWV0aG9kOworICAgIEdldE1l
dGhvZCBtX2dldE1ldGhvZDsKK307CisKK2NsYXNzIENDQ29sb3JBbmltYXRpb25UYXJnZXRCYXNl
SW1wbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBDb2xvciYgZ2V0VmFsdWUoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1
YWwgQ0NBbmltYXRpb246OkFuaW1hdGFibGVQcm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB+Q0NDb2xvckFuaW1hdGlvblRhcmdldEJhc2VJbXBsKCkgeyB9OworfTsK
KwordGVtcGxhdGUgPGNsYXNzIFQ+CitjbGFzcyBDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbCA6
IHB1YmxpYyBDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwgeworcHVibGljOgorICAgIHR5
cGVkZWYgY29uc3QgQ29sb3ImIChUOjoqR2V0TWV0aG9kKSgpOworICAgIHR5cGVkZWYgdm9pZCAo
VDo6KlNldE1ldGhvZCkoY29uc3QgQ29sb3ImKTsKKworICAgIHZpcnR1YWwgY29uc3QgQ29sb3Im
IGdldFZhbHVlKCkgeyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1fZ2V0TWV0aG9kKSgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKFUgdmFsdWUpIHsgKCgqbV9pbnN0YW5jZSkuKm1fc2V0
TWV0aG9kKSh2YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIENDQW5pbWF0aW9uQW5pbWF0YWJsZVByb3Bl
cnR5OjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX2luc3RhbmNl
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9zZXRNZXRob2QpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbDxUPiA+IGNyZWF0ZShU
KiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0aG9kIHNldE1ldGhvZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDb2xvckFuaW1hdGlvblRhcmdldElt
cGw8VD4oaW5zdGFuY2UsIGdldE1ldGhvZCwgc2V0TWV0aG9kKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQ0NDb2xvckFuaW1hdGlvblRhcmdldEltcGwoVCogaW5zdGFuY2UsIEdldE1ldGhvZCBn
ZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgICAgIDogbV9pbnN0YW5jZShpbnN0
YW5jZSkKKyAgICAgICAgLCBtX2dldE1ldGhvZChnZXRNZXRob2QpCisgICAgICAgICwgbV9zZXRN
ZXRob2Qoc2V0TWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICBUKiBtX2luc3RhbmNlOworICAg
IFNldE1ldGhvZCBtX3NldE1ldGhvZDsKKyAgICBHZXRNZXRob2QgbV9nZXRNZXRob2Q7Cit9Owor
CitjbGFzcyBDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiBnZXRWYWx1ZSgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWUoY29uc3QgRmxvYXRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIENDQW5p
bWF0aW9uOjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgfkNDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEJhc2VJbXBsKCkgeyB9OworfTsKKwor
dGVtcGxhdGUgPGNsYXNzIFQ+CitjbGFzcyBDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRJbXBs
IDogcHVibGljIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIGNvbnN0IEZsb2F0UG9pbnQmIChUOjoqR2V0TWV0aG9kKSgpOworICAgIHR5
cGVkZWYgdm9pZCAoVDo6KlNldE1ldGhvZCkoY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgdmly
dHVhbCBjb25zdCBGbG9hdFBvaW50JiBnZXRWYWx1ZSgpIHsgcmV0dXJuICgoKm1faW5zdGFuY2Up
LiptX2dldE1ldGhvZCkoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShVIHZhbHVlKSB7
ICgoKm1faW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9CisgICAgdmlydHVhbCBDQ0Fu
aW1hdGlvbkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc2V0TWV0
aG9kKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NGbG9hdFBvaW50QW5pbWF0
aW9uVGFyZ2V0SW1wbDxUPiA+IGNyZWF0ZShUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhv
ZCwgU2V0TWV0aG9kIHNldE1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ0NGbG9hdFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbDxUPihpbnN0YW5jZSwgZ2V0TWV0aG9k
LCBzZXRNZXRob2QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0Zsb2F0UG9pbnRBbmltYXRp
b25UYXJnZXRJbXBsKFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qg
c2V0TWV0aG9kKQorICAgICAgICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAgICAgICwgbV9n
ZXRNZXRob2QoZ2V0TWV0aG9kKQorICAgICAgICAsIG1fc2V0TWV0aG9kKHNldE1ldGhvZCkKKyAg
ICB7CisgICAgfQorCisgICAgVCogbV9pbnN0YW5jZTsKKyAgICBTZXRNZXRob2QgbV9zZXRNZXRo
b2Q7CisgICAgR2V0TWV0aG9kIG1fZ2V0TWV0aG9kOworfTsKKworY2xhc3MgQ0NJbnRQb2ludEFu
aW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IEludFBv
aW50JiBnZXRWYWx1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgSW50
UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBDQ0FuaW1hdGlvbjo6QW5pbWF0YWJsZVByb3BlcnR5
IHNpZ25hdHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5DQ0ludFBvaW50QW5pbWF0aW9u
VGFyZ2V0QmFzZUltcGwoKSB7IH07Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIEND
SW50UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsIDogcHVibGljIENDSW50UG9pbnRBbmltYXRpb25U
YXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBjb25zdCBJbnRQb2ludCYgKFQ6
OipHZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0TWV0aG9kKShjb25zdCBJ
bnRQb2ludCYpOworCisgICAgdmlydHVhbCBjb25zdCBJbnRQb2ludCYgZ2V0VmFsdWUoKSB7IHJl
dHVybiAoKCptX2luc3RhbmNlKS4qbV9nZXRNZXRob2QpKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWUoVSB2YWx1ZSkgeyAoKCptX2luc3RhbmNlKS4qbV9zZXRNZXRob2QpKHZhbHVlKTsg
fQorICAgIHZpcnR1YWwgQ0NBbmltYXRpb25BbmltYXRhYmxlUHJvcGVydHk6OkFuaW1hdGFibGVQ
cm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1faW5zdGFuY2UpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihtX3NldE1ldGhvZCkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDSW50UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4gY3JlYXRlKFQqIGluc3RhbmNlLCBH
ZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0ludFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbDxUPihpbnN0
YW5jZSwgZ2V0TWV0aG9kLCBzZXRNZXRob2QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0lu
dFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbChUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhv
ZCwgU2V0TWV0aG9kIHNldE1ldGhvZCkKKyAgICAgICAgOiBtX2luc3RhbmNlKGluc3RhbmNlKQor
ICAgICAgICAsIG1fZ2V0TWV0aG9kKGdldE1ldGhvZCkKKyAgICAgICAgLCBtX3NldE1ldGhvZChz
ZXRNZXRob2QpCisgICAgeworICAgIH0KKworICAgIFQqIG1faW5zdGFuY2U7CisgICAgU2V0TWV0
aG9kIG1fc2V0TWV0aG9kOworICAgIEdldE1ldGhvZCBtX2dldE1ldGhvZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDQW5pbWF0aW9uVGFyZ2V0SW1wbF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggYWYwNDJlNTY2OWI0NjJmYjZjMDlkZTZmYzNkNGNm
NGI2ZDg0ZTkyZC4uZTk4ZWJkZTM5MmI2NDUzY2U5MWJkMDlkY2UyZWU2NDUxMzIzZTJiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0b3IuaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGUyYzAwYzg2ODk4MmE3NmM2NThjYWU4MzQxMGU4
NWJjY2RjZjgwOWYuLjc0YWU5Y2I4NjlhMDc4ZmUwMGNiZDk2MmRhYWY0NTRhYzU3N2Y3NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuaApAQCAtMjE5LDYgKzIxOSw3IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBtX2NoaWxkcmVuOwogICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gbV9tYXNrTGF5ZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3JlcGxpY2FMYXll
cjsKKyAgICBSZWZQdHI8Q0NBbmltYXRpb25Db250YW5pbmVySW1wbD4gbV9hbmltYXRpb25zOwog
ICAgIGludCBtX2xheWVySWQ7CiAKICAgICAvLyBQcm9wZXJ0aWVzIHN5bmNocm9uaXplZCBmcm9t
IHRoZSBhc3NvY2lhdGVkIExheWVyQ2hyb21pdW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCmluZGV4IDhjZmJkMzA3YTA1MDk0MGNmNmIwODcxNGRjNTgyNWZkZjhhYTkz
MTYuLjg0OGRjNTI1Y2MwMTA0MzA1ZTAyZTE1MjExN2ZjNTY3YWViOTg5ZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC00NSw2ICs0NSw3IEBAIENDTGF5ZXJU
cmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGlu
Z3MsIENDTGF5ZXJUcmVlCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3NvdXJjZUZy
YW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9hbmltYXRpb25N
YW5hZ2VyKENDQW5pbWF0aW9uTWFuYWdlcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3NldHRpbmdzKHNl
dHRpbmdzKQogICAgICwgbV92aXNpYmxlKHRydWUpCiAgICAgLCBtX2hhdmVXaGVlbEV2ZW50SGFu
ZGxlcnMoZmFsc2UpCkBAIC04NCw2ICs4NSw3IEBAIEdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpjb250ZXh0KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjphbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKQogeworICAgIG1fYW5pbWF0aW9uTWFuYWdlci0+
YW5pbWF0ZShmcmFtZUJlZ2luVGltZU1zKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpkcmF3TGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBj
YTRmNzFiZDg2YWEzMjk0NTQ1ZWY5N2JhZDdiYmExZGU3OTZiN2VhLi5jOGI0MzAzNGExODVhNTk3
MzliZjY5Y2VkOGNhZDFhYTM4N2VlMzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oCkBAIC0xMjUsNiArMTI1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZU1heFNj
cm9sbFBvc2l0aW9uKCk7CiAKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xh
eWVyUmVuZGVyZXI7CisgICAgT3duUHRyPENDQW5pbWF0aW9uTWFuYWdlcj4gbV9hbmltYXRpb25N
YW5hZ2VyOwogICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOwogICAgIFJl
ZlB0cjxDQ0xheWVySW1wbD4gbV9zY3JvbGxMYXllckltcGw7CiAgICAgQ0NTZXR0aW5ncyBtX3Nl
dHRpbmdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbkltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5nRnVuY3Rpb25JbXBsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjhkZGVkOTc1ZTg0MjliZjRjZjNjZThkZDI2YWVlMTRhZGRiNWE1MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGltaW5n
RnVuY3Rpb25JbXBsLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q1RpbWluZ0Z1bmN0aW9uSW1wbF9oCisjZGVmaW5lIENDVGltaW5nRnVuY3Rpb25JbXBsX2gKKwor
I2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKKworY2xhc3MgQ0NUaW1pbmdGdW5jdGlvbkltcGwgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkNDVGltaW5nRnVuY3Rpb25JbXBsKCk7CisgICAgZG91Ymxl
IHJlc2FtcGxlKGRvdWJsZSB0KSBjb25zdCA9IDA7Cit9OworCisvLyBJdCBpcyBhc3N1bWVkIHRo
YXQgKHgxLCB5MSkgPSAoMCwgMCkgYW5kICh4NCwgeTQpID0gKDEsIDEpCitjbGFzcyBDQ0Jlemll
clRpbWluZ0Z1bmN0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgQ0NCZXppZXJUaW1pbmdGdW5jdGlv
bkltcGwoZG91YmxlIHgyLCBkb3VibGUgeTIsIGRvdWJsZSB4MywgZG91YmxlIHkzKTsKKyAgICB2
aXJ0dWFsIH5DQ0JlemllclRpbWluZ0Z1bmN0aW9uSW1wbCgpOworCisgICAgZG91YmxlIHJlc2Ft
cGxlKGRvdWJsZSB0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBVbml0QmV6aWVyIG1fYmV6aWVy
OworfTsKKworY2xhc3MgQ0NFYXNlSW5UaW1pbmdGdW5jdGlvbkltcGwgOiBwdWJsaWMgQmV6aWVy
VGltaW5nRnVuY3Rpb25JbXBsIHsKK3B1YmxpYzoKKyAgICBDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9u
SW1wbCgpIDogQ0NCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwoMS4wIC8gMy4wLCAxLjAgLyAzLjAs
IDIuMCAvIDMuMCwgMS4wKSB7IH0KKyAgICB+Q0NFYXNlSW5UaW1pbmdGdW5jdGlvbkltcGwoKSB7
IH0KK307CisKK2NsYXNzIENDRWFzZU91dFRpbWluZ0Z1bmN0aW9uSW1wbCA6IHB1YmxpYyBCZXpp
ZXJUaW1pbmdGdW5jdGlvbkltcGwgeworcHVibGljOgorICAgIENDRWFzZU91dFRpbWluZ0Z1bmN0
aW9uSW1wbCgpIDogQ0NCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwoMS4wIC8gMy4wLCAwLjAsIDIu
MCAvIDMuMCwgMi4wIC8gMy4wKSB7IH0KKyAgICB+Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb25JbXBs
KCkgeyB9Cit9OworCitjbGFzcyBDQ0Vhc2VPdXRFYXNlSW5UaW1pbmdGdW5jdGlvbkltcGwgOiBw
dWJsaWMgQmV6aWVyVGltaW5nRnVuY3Rpb25JbXBsIHsKK3B1YmxpYzoKKyAgICBDQ0Vhc2VPdXRF
YXNlSW5UaW1pbmdGdW5jdGlvbkltcGwoKSA6IENDQmV6aWVyVGltaW5nRnVuY3Rpb25JbXBsKDEu
MCAvIDMuMCwgMC4wLCAyLjAgLyAzLjAsIDEuMCkgeyB9CisgICAgfkNDRWFzZUluQ0NFYXNlT3V0
RWFzZUluVGltaW5nRnVuY3Rpb25JbXBsVGltaW5nRnVuY3Rpb25JbXBsKCkgeyB9Cit9OworCisj
ZW5kaWYgLy8gQ0NUaW1pbmdGdW5jdGlvbkltcGxfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117652</attachid>
            <date>2011-12-02 10:35:49 -0800</date>
            <delta_ts>2011-12-15 12:13:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20111202133548.patch</filename>
            <type>text/plain</type>
            <size>40596</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Y3ZTIzODEyM2ZjZjA1
MjgzNTMxNDA1MDgwMjRlYjcxMzJhYTQwYi4uNTRiODA0MGJmYTViMzI0ZmIyZDgzY2M1OTljN2Ri
Mjk1Y2I2MjJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTExLTI5ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25FbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbkVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uRWxlbWVudDo6cHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1F
bGVtZW50OjpnZXRDdXJyZW50VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNm
b3JtRWxlbWVudDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3Jt
RWxlbWVudDo6b25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3JtRWxlbWVu
dDo6b25Qcm9ncmVzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBbmltYXRpb25FbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uT2JzZXJ2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0FuaW1hdGlvbk9ic2VydmVyOjp+Q0NBbmltYXRpb25PYnNlcnZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRvci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphbmltYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6c2V0QW5pbWF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNhbXBsZXIuaDogQWRkZWQuCisgICAgICAgIChDQ0Vhc2VJblJl
c2FtcGxlcjo6Q0NFYXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlSW5SZXNhbXBsZXI6
On5DQ0Vhc2VJblJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6OkNDRWFz
ZU91dFJlc2FtcGxlcik6CisgICAgICAgIChDQ0Vhc2VPdXRSZXNhbXBsZXI6On5DQ0Vhc2VPdXRS
ZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjpDQ0Vhc2VPdXRF
YXNlSW5SZXNhbXBsZXIpOgorICAgICAgICAoQ0NFYXNlT3V0RWFzZUluUmVzYW1wbGVyOjp+Q0NF
YXNlSW5DQ0Vhc2VPdXRFYXNlSW5SZXNhbXBsZXJSZXNhbXBsZXIpOgorCiAyMDExLTEyLTAyICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTAxNzk0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25JbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkltcGwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MmRiZGE0YTY0MWJiODE2YTExNmY0NDAyOTk3NWEzMmY2MWQ3NTJlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBbmltYXRpb25JbXBsLmgKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ0NBbmltYXRpb25JbXBsX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25JbXBsX2gKKworI2lu
Y2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9uLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENDQW5pYW10aW9uQ29sb3JUYXJnZXRJbXBsOworY2xhc3Mg
Q0NBbmltYXRpb25Db250cm9sbGVySW1wbDsKK2NsYXNzIENDQW5pbWF0aW9uRmxvYXRUYXJnZXRJ
bXBsOworY2xhc3MgQ0NBbmltYXRpb25GbG9hdFBvaW50VGFyZ2V0SW1wbDsKK2NsYXNzIENDQW5p
bWF0aW9uSW50UG9pbnRUYXJnZXRJbXBsOworY2xhc3MgQ0NBbmltYXRpb25UcmFuc2Zvcm1hdGlv
bk1hdHJpeFRhcmdldEltcGw7CisKK2NsYXNzIENDQW5pbWF0aW9uSW1wbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENDQW5pbWF0aW9uSW1wbD4geworcHVibGljOgorICAgIHR5cGVkZWYgc3RkOjpwYWly
PHZvaWQqLCB2b2lkKj4gQW5pbWF0YWJsZVByb3BlcnR5OworCisgICAgLy8gdm9sbGljazogSSBk
ZWNpZGVkIHRvIHVzZSBhIHNpZ25hdHVyZSAoYSBjb21iaW5hdGlvbiBvZiBpbnN0YW5jZS9zZXR0
ZXIgcG9pbnRlcnMpIHJhdGhlciB0aGFuCisgICAgLy8gcmF0aGVyIHRoYW4gdGhlIGZvbGxvd2lu
ZyBlbnVtLiBBIGNvbiBpcyB0aGF0IHRoZSBlbnVtIGNvbnN0YW50cyBhcmUgbW9yZSBtZWFuaW5n
ZnVsLgorICAgIC8vIEEgcHJvIGlzIHRoYXQgaXQncyBlYXNpZXIgdG8gbWFpbnRhaW4gdGhpcy4g
V2hlbiB5b3UgYWRkIGEgbmV3IGFuaW1hdGFibGUgcHJvcGVydHksIHlvdQorICAgIC8vIG5vIGxv
bmdlciBoYXZlIHRvIHVwZGF0ZSBhbiBlbnVtIGFuZCBhbGwgb2YgdGhlIHJlbGF0ZWQgc3dpdGNo
IHN0YXRlbWVudHMuIEFsc28sIHdlIGNhbgorICAgIC8vIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBw
cm9wZXJ0aWVzIG9uIGRpZmZlcmVudCBvYmplY3RzLiBMZXQgbWUga25vdyBpZiB5b3UgdGhpbmsg
dGhpcyBpcyBhIGJhZCB0cmFkZW9mZi4KKyAgICAvLworICAgIC8vICBlbnVtIEFuaW1hdGFibGVQ
cm9wZXJ0eSB7CisgICAgLy8gICAgICBBTkNIT1JfUE9JTlQsIEFOQ0hPUl9QT0lOVF9aLCBCQUNL
R1JPVU5EX0NPTE9SLCBPUEFDSVRZLAorICAgIC8vICAgICAgUE9TSVRJT04sIFRSQU5TRk9STSwg
Wk9PTV9BTklNQVRPUl9UUkFOU0ZPUk0sCisgICAgLy8gICAgICBTQ1JFRU5fU1BBQ0VfVFJBTlNG
T1JNLCBCT1VORFMsIENPTlRFTlRfQk9VTkRTLCBTQ1JPTExfUE9TSVRJT04KKyAgICAvLyAgfTsK
KworICAgIGNsYXNzIEFuaW1hdGFibGVQcm9wZXJ0aWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IC8vIEVuc3VyZSBubyBkdXBsaWNhdGVzLgorICAgICAgICB2b2lkIGFkZChBbmltYXRhYmxlUHJv
cGVydHkpOworICAgICAgICB2b2lkIGFkZChjb25zdCBBbmltYXRhYmxlUHJvcGVydGllcyYpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9yPEFuaW1hdGFibGVQcm9wZXJ0eT4gbV9wcm9w
ZXJ0aWVzOworICAgIH07CisKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgV2FpdGluZ1RvUnVu
LAorICAgICAgICBSdW5uaW5nLAorICAgICAgICBQYXVzZWQsCisgICAgICAgIEZpbmlzaGVkCisg
ICAgfTsKKworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uSW1wbCgpOworCisgICAgLy8gSW4gYWJz
b2x1dGUgdGltZS4KKyAgICB2b2lkIGFuaW1hdGUoZG91YmxlIHQpOworCisgICAgLy8gSXMgdGhp
cyB3aGVyZSBsb29waW5nIGxvZ2ljIHNob3VsZCBsaXZlPworCisgICAgdmlydHVhbCBjb25zdCBB
bmltYXRhYmxlUHJvcGVydGllcyYgcHJvcGVydGllcygpID0gMDsKKworICAgIC8vIFRoZSBhbmlt
YXRpb24gZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGNvbnRyb2xsZXIuCisgICAgdm9p
ZCBzZXRDb250cm9sbGVyKENDQW5pbWF0aW9uQ29udHJvbGxlckltcGwqKTsKKworICAgIFN0YXRl
IHN0YXRlKCkgY29uc3Q7CisgICAgLy8gV2lsbCBldmVudHVhbGx5IHVwZGF0ZSBsaXN0ZW5lcihz
KQorICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUpOworCisgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0U3RhcnRUaW1lKGRvdWJsZSk7CisKKyAgICB2aXJ0dWFsIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRHVyYXRpb24oKSBj
b25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBDQ0FuaW1hdGlvbigpOworCisgICAgdmlydHVh
bCB2b2lkIG9uQW5pbWF0ZShkb3VibGUgdCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIEND
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqIG1fY29udHJvbGxlcjsKKworICAgIFN0YXRlIG1fc3Rh
dGU7CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7Cit9OworCitjbGFzcyBDQ0Zsb2F0QW5pbWF0
aW9uSW1wbCA6IHB1YmxpYyBDQ0FuaW1hdGlvbkltcGwgeworcHVibGljOgorICAgIHR5cGVkZWYg
Q0NGbG9hdEFuaW1hdGlvblRhcmdldEltcGwgVGFyZ2V0VHlwZTsKKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDRmxvYXRBbmltYXRpb25JbXBsPiBjcmVhdGUoZmxvYXQgc3RhcnQsIGZsb2F0IGVu
ZCk7CisKKyAgICB2aXJ0dWFsIH5DQ0Zsb2F0QW5pbWF0aW9uSW1wbCgpOworCisgICAgdm9pZCBz
ZXRUYXJnZXQoUGFzc093blB0cjxUYXJnZXRUeXBlPik7CisKK3Byb3RlY3RlZDoKKyAgICBDQ0Zs
b2F0QW5pbWF0aW9uSW1wbCgpOworCisgICAgdmlydHVhbCBjb25zdCBBbmltYXRhYmxlUHJvcGVy
dGllcyYgcHJvcGVydGllcygpOworCisgICAgT3duUHRyPFRhcmdldFR5cGU+IG1fdGFyZ2V0Owor
fTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbkltcGwgOiBwdWJsaWMg
Q0NBbmltYXRpb25JbXBsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENDVHJhbnNmb3JtYXRpb25N
YXRyaXhBbmltYXRpb25UYXJnZXRJbXBsIFRhcmdldFR5cGU7CisKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uSW1wbD4gY3JlYXRlKCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbkltcGw+IGNy
ZWF0ZShQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4pOworCisgICAgdmlydHVhbCB+Q0NU
cmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbkltcGwoKTsKKworICAgIHZvaWQgc2V0VGFyZ2V0
KFBhc3NPd25QdHI8VGFyZ2V0VHlwZT4pOworCitwcm90ZWN0ZWQ6CisgICAgQ0NUcmFuc2Zvcm1h
dGlvbk1hdHJpeEFuaW1hdGlvbkltcGwoKTsKKworICAgIHZpcnR1YWwgY29uc3QgQW5pbWF0YWJs
ZVByb3BlcnRpZXMmIHByb3BlcnRpZXMoKTsKKworICAgIE93blB0cjxUYXJnZXRUeXBlPiBtX3Rh
cmdldDsKK307CisKKworY2xhc3MgQ0NDb2xvckFuaW1hdGlvbkltcGwgOiBwdWJsaWMgQ0NBbmlt
YXRpb25JbXBsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIENDQ29sb3JBbmltYXRpb25UYXJnZXRJ
bXBsIFRhcmdldFR5cGU7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NvbG9yQW5pbWF0aW9u
SW1wbD4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5DQ0NvbG9yQW5pbWF0aW9uSW1wbCgpOwor
CisgICAgdm9pZCBzZXRUYXJnZXQoUGFzc093blB0cjxUYXJnZXRUeXBlPik7CisKK3Byb3RlY3Rl
ZDoKKyAgICBDQ0NvbG9yQW5pbWF0aW9uSW1wbCgpOworCisgICAgdmlydHVhbCBjb25zdCBBbmlt
YXRhYmxlUHJvcGVydGllcyYgcHJvcGVydGllcygpOworCisgICAgT3duUHRyPFRhcmdldFR5cGU+
IG1fdGFyZ2V0OworfTsKKworCitjbGFzcyBDQ0Zsb2F0UG9pbnRBbmltYXRpb25JbXBsIDogcHVi
bGljIENDQW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDQ0Zsb2F0UG9pbnRB
bmltYXRpb25UYXJnZXRJbXBsIFRhcmdldFR5cGU7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
Q0Zsb2F0UG9pbnRBbmltYXRpb25JbXBsPiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgfkNDRmxv
YXRQb2ludEFuaW1hdGlvbkltcGwoKTsKKworICAgIHZvaWQgc2V0VGFyZ2V0KFBhc3NPd25QdHI8
VGFyZ2V0VHlwZT4pOworCitwcm90ZWN0ZWQ6CisgICAgQ0NGbG9hdFBvaW50QW5pbWF0aW9uSW1w
bCgpOworCisgICAgdmlydHVhbCBjb25zdCBBbmltYXRhYmxlUHJvcGVydGllcyYgcHJvcGVydGll
cygpOworCisgICAgT3duUHRyPFRhcmdldFR5cGU+IG1fdGFyZ2V0OworfTsKKworY2xhc3MgQ0NJ
bnRQb2ludEFuaW1hdGlvbkltcGwgOiBwdWJsaWMgQ0NBbmltYXRpb25JbXBsIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIENDSW50UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsIFRhcmdldFR5cGU7CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0ludFBvaW50QW5pbWF0aW9uSW1wbD4gY3JlYXRlKCk7
CisKKyAgICB2aXJ0dWFsIH5DQ0ludFBvaW50QW5pbWF0aW9uSW1wbCgpOworCisgICAgdm9pZCBz
ZXRUYXJnZXQoUGFzc093blB0cjxUYXJnZXRUeXBlPik7CisKK3Byb3RlY3RlZDoKKyAgICBDQ0lu
dFBvaW50QW5pbWF0aW9uSW1wbCgpOworCisgICAgdmlydHVhbCBjb25zdCBBbmltYXRhYmxlUHJv
cGVydGllcyYgcHJvcGVydGllcygpOworCisgICAgT3duUHRyPFRhcmdldFR5cGU+IG1fdGFyZ2V0
OworfTsKKworLy8gQ2FuIHNlcnZlIHR3byBwdXJwb3NlczoKKy8vICAxKSBBcyBnZW5lcmFsIHN0
b3JhZ2UgZm9yIGFuaW1hdGlvbnMuCisvLyAgMikgQSBjb21wb3NpdGUgYW5pbWF0aW9uIHRoYXQg
cmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0byBiZSBydW4gc2ltdWx0YW5l
b3VzbHkgKGUuZy4sIHNjYWxlICYgcG9zaXRpb24pLgorY2xhc3MgQ0NBbmltYXRpb25Db250YWlu
ZXJJbXBsIDogcHVibGljIENDQW5pbWF0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NBbmltYXRpb25Db250YWluZXJJbXBsPiBjcmVhdGUoKTsKKworICAgIHZvaWQg
YWRkQW5pbWF0aW9uKFBhc3NSZWZQdHI8Q0NBbmltYXRpb25JbXBsPik7CisgICAgdm9pZCBhZGRB
bmltYXRpb24oUGFzc1JlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4pOworICAgIHZvaWQgYWRk
QW5pbWF0aW9uKFBhc3NSZWZQdHI8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbkltcGw+
KTsKKyAgICB2b2lkIGFkZEFuaW1hdGlvbihQYXNzUmVmUHRyPENDQ29sb3JBbmltYXRpb25JbXBs
Pik7CisgICAgdm9pZCBhZGRBbmltYXRpb24oUGFzc1JlZlB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRp
b25JbXBsPik7CisgICAgdm9pZCBhZGRBbmltYXRpb24oUGFzc1JlZlB0cjxDQ0ludFBvaW50QW5p
bWF0aW9uSW1wbD4pOworCisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oQ0NBbmltYXRpb25JbXBs
Kik7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oQ0NGbG9hdEFuaW1hdGlvbkltcGwqKTsKKyAg
ICB2b2lkIHJlbW92ZUFuaW1hdGlvbihDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uSW1w
bCopOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKENDQ29sb3JBbmltYXRpb25JbXBsKik7Cisg
ICAgdm9pZCByZW1vdmVBbmltYXRpb24oQ0NGbG9hdFBvaW50QW5pbWF0aW9uSW1wbCopOworICAg
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKENDSW50UG9pbnRBbmltYXRpb25JbXBsKik7CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFJlZlB0cjxDQ0Zsb2F0QW5pbWF0aW9uSW1wbD4gbV9mbG9hdEFuaW1h
dGlvbnM7CisgICAgVmVjdG9yPFJlZlB0cjxDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9u
SW1wbD4gbV90cmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvbnM7CisgICAgVmVjdG9yPFJlZlB0
cjxDQ0NvbG9yQW5pbWF0aW9uSW1wbD4gbV9jb2xvckFuaW1hdGlvbnM7CisgICAgVmVjdG9yPFJl
ZlB0cjxDQ0Zsb2F0UG9pbnRBbmltYXRpb25JbXBsPiBtX2Zsb2F0UG9pbnRBbmltYXRpb25zOwor
ICAgIFZlY3RvcjxSZWZQdHI8Q0NJbnRQb2ludEFuaW1hdGlvbkltcGw+IG1faW50UG9pbnRBbmlt
YXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBDQ0Fu
aW1hdGlvbkltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25NYW5hZ2VySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25NYW5hZ2VySW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBmYmNjZmZhNzVhZDRhMmJiZjI0ZjIzMWMyMWY0MzYzMjJlN2Y0M2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbk1hbmFnZXJJbXBsLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDQ0FuaW1hdGlvbk1hbmFnZXJJbXBsX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25N
YW5hZ2VySW1wbF9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDQW5pbWF0aW9uT2JzZXJ2ZXI7CisK
K2NsYXNzIENDQW5pbWF0aW9uTWFuYWdlckltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDQW5pbWF0aW9uTWFuYWdlckltcGw+IGNyZWF0ZSgpOworCisgICAgdm9pZCBhbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZU1zKTsKKworICAgIHZvaWQgYWRkQW5pbWF0aW9uKFBh
c3NSZWZQdHI8Q0NBbmltYXRpb25JbXBsPik7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oQ0NB
bmltYXRpb24qKTsKKyAgICAvLyBwYXVzZSwgcmVzdW1lLi4uCisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlcmUgYXJlIGFueSBjdXJyZW50bHkgcnVubmluZyBhbmltYXRpb25zLgorICAgIGJv
b2wgaXNBbmltYXRpbmcoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgYW5pbWF0b3Ig
aXMgb3duZWQgYnkgdGhlIGxheWVyLgorICAgIENDQW5pbWF0aW9uTWFuYWdlckltcGwoKTsKKwor
ICAgIFJlZlB0cjxDQ0FuaW1hdGlvbkNvbnRhaW5lckltcGw+IG1fYW5pbWF0aW9uczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDQW5pbWF0aW9uTWFuYWdlcklt
cGxfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FuaW1hdGlvbk9ic2VydmVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25PYnNlcnZlckltcGwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43NjIyNzc0MTc0MGMxOGUxZmYzMTg5YzVlNWQ5Y2UzNjUyMTEwNWVlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
bmltYXRpb25PYnNlcnZlckltcGwuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENDQW5pbWF0aW9uT2JzZXJ2ZXJJbXBsX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25PYnNl
cnZlckltcGxfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEFuIGFic3RyYWN0IGludGVy
ZmFjZSBmb3IgY2xhc3NlcyB0aGF0IHdoaWNoIHRvIGJlIG5vdGlmaWVkIHdoZW4gYW5pbWF0aW9u
cworLy8gYXJlIHNjaGVkdWxlZCwgZW5kZWQsIG9yIGFib3J0ZWQuCitjbGFzcyBDQ0FuaW1hdGlv
bk9ic2VydmVySW1wbCB7CitwdWJsaWM6CisgICAgLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW5pbWF0
aW9uIGlzIGFkZGVkIHRvIGEgbGF5ZXIncyBxdWV1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgb25Bbmlt
YXRpb25TY2hlZHVsZWQoQ0NBbmltYXRpb25JbXBsKikgPSAwOworCisgICAgLy8gQ2FsbGVkIHdo
ZW4gYW4gYW5pbWF0aW9uIGVuZHMuCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kZWQo
Q0NBbmltYXRpb25JbXBsKikgPSAwOworCisgICAgLy8gQ2FsbGVkIHdoZW4gYW4gYW5pbWF0aW9u
IGlzIGFib3J0ZWQgYmVmb3JlIGl0IGNvbXBsZXRlcy4gfG9uQW5pbWF0aW9uRW5kZWR8CisgICAg
Ly8gaXMgbm90IGNhbGxlZCBpbiB0aGlzIGNhc2UuCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0
aW9uQWJvcnRlZChDQ0FuaW1hdGlvbkltcGwqKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgd2hlbiBh
biBhbmltYXRpb24gaXMgcGF1c2VkLgorICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblBhdXNl
ZChDQ0FuaW1hdGlvbkltcGwqKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgd2hlbiBhbiBhbmltYXRp
b24gaXMgcmVzdW1lZC4KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25SZXN1bWVkKENDQW5p
bWF0aW9uSW1wbCopID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9u
T2JzZXJ2ZXJJbXBsKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBDQ0FuaW1hdGlvbk9ic2VydmVySW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvblRhcmdldEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
VGFyZ2V0SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyMjg0MWVkYzljYzc2ZWQzMTkyMDg1NDllMzMyYjlm
MjJmMWVjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvblRhcmdldEltcGwuaApAQCAtMCwwICsxLDM1MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FuaW1hdGlvblRhcmdldEltcGxfaAorI2RlZmlu
ZSBDQ0FuaW1hdGlvblRhcmdldEltcGxfaAorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwgewor
cHVibGljOgorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCBDQ0FuaW1hdGlvbjo6QW5pbWF0
YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5DQ0Zsb2F0
QW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwoKSB7IH07Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgVD4K
K2NsYXNzIENDRmxvYXRBbmltYXRpb25UYXJnZXRJbXBsIDogcHVibGljIENDRmxvYXRBbmltYXRp
b25UYXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBmbG9hdCAoVDo6KkdldE1l
dGhvZCkoKTsKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipTZXRNZXRob2QpKGZsb2F0KTsKKworICAg
IHN0YXRpYyBQYXNzT3duUHRyPENDRmxvYXRBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4gY3JlYXRl
KFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0
SW1wbDxUPihpbnN0YW5jZSwgZ2V0TWV0aG9kLCBzZXRNZXRob2QpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIGZsb2F0IGdldFZhbHVlKCkgeyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1fZ2V0TWV0
aG9kKSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGZsb2F0IHZhbHVlKSB7ICgoKm1f
aW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9CisgICAgdmlydHVhbCBDQ0FuaW1hdGlv
bkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc2V0TWV0aG9kKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIENDRmxvYXRBbmltYXRpb25UYXJnZXRJbXBsKFQqIGlu
c3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgICAg
ICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAgICAgICwgbV9nZXRNZXRob2QoZ2V0TWV0aG9k
KQorICAgICAgICAsIG1fc2V0TWV0aG9kKHNldE1ldGhvZCkKKyAgICB7CisgICAgfQorCisgICAg
VCogbV9pbnN0YW5jZTsKKyAgICBTZXRNZXRob2QgbV9zZXRNZXRob2Q7CisgICAgR2V0TWV0aG9k
IG1fZ2V0TWV0aG9kOworfTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlv
blRhcmdldEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBnZXRWYWx1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCBDQ0FuaW1hdGlvbjo6
QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIH5D
Q1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwoKSB7IH07Cit9Owor
Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRp
b25UYXJnZXRJbXBsIDogcHVibGljIENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJn
ZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgKFQ6OipHZXRNZXRob2QpKCk7CisgICAgdHlwZWRlZiB2b2lkIChUOjoqU2V0TWV0aG9k
KShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRhcmdldEltcGw8VD4gPiBjcmVhdGUoVCog
aW5zdGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmlt
YXRpb25UYXJnZXRJbXBsPFQ+KGluc3RhbmNlLCBnZXRNZXRob2QsIHNldE1ldGhvZCkpOworICAg
IH0KKworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdldFZhbHVlKCkg
eyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1fZ2V0TWV0aG9kKSgpOyB9CisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkgeyAoKCptX2lu
c3RhbmNlKS4qbV9zZXRNZXRob2QpKHZhbHVlKTsgfQorICAgIHZpcnR1YWwgQ0NBbmltYXRpb25B
bmltYXRhYmxlUHJvcGVydHk6OkFuaW1hdGFibGVQcm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG1faW5zdGFuY2UpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX3NldE1ldGhvZCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFy
Z2V0SW1wbChUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0aG9kIHNldE1l
dGhvZCkKKyAgICAgICAgOiBtX2luc3RhbmNlKGluc3RhbmNlKQorICAgICAgICAsIG1fZ2V0TWV0
aG9kKGdldE1ldGhvZCkKKyAgICAgICAgLCBtX3NldE1ldGhvZChzZXRNZXRob2QpCisgICAgewor
ICAgIH0KKworICAgIFQqIG1faW5zdGFuY2U7CisgICAgU2V0TWV0aG9kIG1fc2V0TWV0aG9kOwor
ICAgIEdldE1ldGhvZCBtX2dldE1ldGhvZDsKK307CisKK2NsYXNzIENDQ29sb3JBbmltYXRpb25U
YXJnZXRCYXNlSW1wbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBDb2xvciYgZ2V0VmFs
dWUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IENvbG9yJikgPSAwOwor
ICAgIHZpcnR1YWwgQ0NBbmltYXRpb246OkFuaW1hdGFibGVQcm9wZXJ0eSBzaWduYXR1cmUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB+Q0NDb2xvckFuaW1hdGlvblRhcmdldEJhc2VJbXBsKCkg
eyB9OworfTsKKwordGVtcGxhdGUgPGNsYXNzIFQ+CitjbGFzcyBDQ0NvbG9yQW5pbWF0aW9uVGFy
Z2V0SW1wbCA6IHB1YmxpYyBDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0QmFzZUltcGwgeworcHVibGlj
OgorICAgIHR5cGVkZWYgY29uc3QgQ29sb3ImIChUOjoqR2V0TWV0aG9kKSgpOworICAgIHR5cGVk
ZWYgdm9pZCAoVDo6KlNldE1ldGhvZCkoY29uc3QgQ29sb3ImKTsKKworICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDQ29sb3JBbmltYXRpb25UYXJnZXRJbXBsPFQ+ID4gY3JlYXRlKFQqIGluc3RhbmNl
LCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBTZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbDxUPihpbnN0
YW5jZSwgZ2V0TWV0aG9kLCBzZXRNZXRob2QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0
IENvbG9yJiBnZXRWYWx1ZSgpIHsgcmV0dXJuICgoKm1faW5zdGFuY2UpLiptX2dldE1ldGhvZCko
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBDb2xvciYgdmFsdWUpIHsgKCgq
bV9pbnN0YW5jZSkuKm1fc2V0TWV0aG9kKSh2YWx1ZSk7IH0KKyAgICB2aXJ0dWFsIENDQW5pbWF0
aW9uQW5pbWF0YWJsZVByb3BlcnR5OjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0
PHZvaWQqPihtX2luc3RhbmNlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9zZXRNZXRob2Qp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NDb2xvckFuaW1hdGlvblRhcmdldEltcGwoVCog
aW5zdGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAg
ICAgIDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAgICAgLCBtX2dldE1ldGhvZChnZXRNZXRo
b2QpCisgICAgICAgICwgbV9zZXRNZXRob2Qoc2V0TWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAg
ICBUKiBtX2luc3RhbmNlOworICAgIFNldE1ldGhvZCBtX3NldE1ldGhvZDsKKyAgICBHZXRNZXRo
b2QgbV9nZXRNZXRob2Q7Cit9OworCitjbGFzcyBDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRC
YXNlSW1wbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiBnZXRWYWx1
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgRmxvYXRQb2ludCYpID0g
MDsKKyAgICB2aXJ0dWFsIENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJl
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgfkNDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEJh
c2VJbXBsKCkgeyB9OworfTsKKwordGVtcGxhdGUgPGNsYXNzIFQ+CitjbGFzcyBDQ0Zsb2F0UG9p
bnRBbmltYXRpb25UYXJnZXRJbXBsIDogcHVibGljIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdl
dEJhc2VJbXBsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGNvbnN0IEZsb2F0UG9pbnQmIChUOjoq
R2V0TWV0aG9kKSgpOworICAgIHR5cGVkZWYgdm9pZCAoVDo6KlNldE1ldGhvZCkoY29uc3QgRmxv
YXRQb2ludCYpOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9u
VGFyZ2V0SW1wbDxUPiA+IGNyZWF0ZShUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwg
U2V0TWV0aG9kIHNldE1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NGbG9hdFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbDxUPihpbnN0YW5jZSwgZ2V0TWV0aG9kLCBz
ZXRNZXRob2QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIGdldFZh
bHVlKCkgeyByZXR1cm4gKCgqbV9pbnN0YW5jZSkuKm1fZ2V0TWV0aG9kKSgpOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IEZsb2F0UG9pbnQmIHZhbHVlKSB7ICgoKm1faW5zdGFu
Y2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9CisgICAgdmlydHVhbCBDQ0FuaW1hdGlvbkFuaW1h
dGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVByb3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
bV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fc2V0TWV0aG9kKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEltcGwoVCogaW5z
dGFuY2UsIEdldE1ldGhvZCBnZXRNZXRob2QsIFNldE1ldGhvZCBzZXRNZXRob2QpCisgICAgICAg
IDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAgICAgLCBtX2dldE1ldGhvZChnZXRNZXRob2Qp
CisgICAgICAgICwgbV9zZXRNZXRob2Qoc2V0TWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICBU
KiBtX2luc3RhbmNlOworICAgIFNldE1ldGhvZCBtX3NldE1ldGhvZDsKKyAgICBHZXRNZXRob2Qg
bV9nZXRNZXRob2Q7Cit9OworCitjbGFzcyBDQ0ludFBvaW50QW5pbWF0aW9uVGFyZ2V0QmFzZUlt
cGwgeworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgSW50UG9pbnQmIGdldFZhbHVlKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBJbnRQb2ludCYpID0gMDsKKyAgICB2
aXJ0dWFsIENDQW5pbWF0aW9uOjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgfkNDSW50UG9pbnRBbmltYXRpb25UYXJnZXRCYXNlSW1wbCgpIHsg
fTsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorY2xhc3MgQ0NJbnRQb2ludEFuaW1hdGlvblRh
cmdldEltcGwgOiBwdWJsaWMgQ0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEJhc2VJbXBsIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIGNvbnN0IEludFBvaW50JiAoVDo6KkdldE1ldGhvZCkoKTsKKyAg
ICB0eXBlZGVmIHZvaWQgKFQ6OipTZXRNZXRob2QpKGNvbnN0IEludFBvaW50Jik7CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxDQ0ludFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbDxUPiA+IGNyZWF0
ZShUKiBpbnN0YW5jZSwgR2V0TWV0aG9kIGdldE1ldGhvZCwgU2V0TWV0aG9kIHNldE1ldGhvZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NJbnRQb2ludEFuaW1hdGlvblRh
cmdldEltcGw8VD4oaW5zdGFuY2UsIGdldE1ldGhvZCwgc2V0TWV0aG9kKSk7CisgICAgfQorCisg
ICAgdmlydHVhbCBjb25zdCBJbnRQb2ludCYgZ2V0VmFsdWUoKSB7IHJldHVybiAoKCptX2luc3Rh
bmNlKS4qbV9nZXRNZXRob2QpKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3Qg
SW50UG9pbnQmIHZhbHVlKSB7ICgoKm1faW5zdGFuY2UpLiptX3NldE1ldGhvZCkodmFsdWUpOyB9
CisgICAgdmlydHVhbCBDQ0FuaW1hdGlvbkFuaW1hdGFibGVQcm9wZXJ0eTo6QW5pbWF0YWJsZVBy
b3BlcnR5IHNpZ25hdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9pbnN0YW5jZSksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KG1fc2V0TWV0aG9kKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDSW50UG9p
bnRBbmltYXRpb25UYXJnZXRJbXBsKFQqIGluc3RhbmNlLCBHZXRNZXRob2QgZ2V0TWV0aG9kLCBT
ZXRNZXRob2Qgc2V0TWV0aG9kKQorICAgICAgICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAg
ICAgICwgbV9nZXRNZXRob2QoZ2V0TWV0aG9kKQorICAgICAgICAsIG1fc2V0TWV0aG9kKHNldE1l
dGhvZCkKKyAgICB7CisgICAgfQorCisgICAgVCogbV9pbnN0YW5jZTsKKyAgICBTZXRNZXRob2Qg
bV9zZXRNZXRob2Q7CisgICAgR2V0TWV0aG9kIG1fZ2V0TWV0aG9kOworfTsKKwordGVtcGxhdGUg
PGNsYXNzIFQ+IGNsYXNzIENDRHVtbXlUYXJnZXRJbXBsOworCit0ZW1wbGF0ZSA8PgorY2xhc3Mg
Q0NEdW1teVRhcmdldEltcGw8Q0NGbG9hdEFuaW1hdGlvblRhcmdldEltcGw+IDogcHVibGljIEND
RmxvYXRBbmltYXRpb25UYXJnZXQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
RmxvYXRBbmltYXRpb25UYXJnZXQgPiBjcmVhdGUoZmxvYXQgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IENDRHVtbXlUYXJnZXRJbXBsPENDRmxvYXRBbmltYXRpb25U
YXJnZXRJbXBsPih2YWx1ZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUo
KSB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGZsb2F0IHZh
bHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgQ0NBbmltYXRpb25BbmltYXRh
YmxlUHJvcGVydHk6OkFuaW1hdGFibGVQcm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRo
aXMpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigmQ0NEdW1teVRhcmdldEltcGw8Q0NGbG9hdEFu
aW1hdGlvblRhcmdldEltcGw+OjpzZXRWYWx1ZSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
Q0R1bW15VGFyZ2V0SW1wbChmbG9hdCB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisKKyAgICBmbG9hdCBtX3ZhbHVlOworfTsKKwordGVtcGxhdGUgPD4KK2Ns
YXNzIENDRHVtbXlUYXJnZXRJbXBsPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJn
ZXRJbXBsPiA6IHB1YmxpYyBDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5pbWF0aW9uVGFyZ2V0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RyYW5zZm9ybWF0aW9uTWF0cml4QW5p
bWF0aW9uVGFyZ2V0ID4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NEdW1teVRhcmdldEltcGw8Q0NU
cmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRhcmdldEltcGw+KHZhbHVlKSk7CisgICAgfQor
CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2V0VmFsdWUoKSB7IHJl
dHVybiBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKyAgICB2aXJ0dWFsIEND
QW5pbWF0aW9uQW5pbWF0YWJsZVByb3BlcnR5OjpBbmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJl
dF9jYXN0PHZvaWQqPih0aGlzKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJkNDRHVtbXlUYXJn
ZXRJbXBsPENDVHJhbnNmb3JtYXRpb25NYXRyaXhBbmltYXRpb25UYXJnZXRJbXBsPjo6c2V0VmFs
dWUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NEdW1teVRhcmdldEltcGwoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtX3ZhbHVlOworfTsK
KwordGVtcGxhdGUgPD4KK2NsYXNzIENDRHVtbXlUYXJnZXRJbXBsPENDQ29sb3JBbmltYXRpb25U
YXJnZXRJbXBsPiA6IHB1YmxpYyBDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0ID4gY3JlYXRlKGNvbnN0
IENvbG9yJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NEdW1t
eVRhcmdldEltcGw8Q0NDb2xvckFuaW1hdGlvblRhcmdldEltcGw+KHZhbHVlKSk7CisgICAgfQor
CisgICAgdmlydHVhbCBjb25zdCBDb2xvciYgZ2V0VmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IENvbG9yJiB2YWx1ZSkgeyBtX3ZhbHVl
ID0gdmFsdWU7IH0KKyAgICB2aXJ0dWFsIENDQW5pbWF0aW9uQW5pbWF0YWJsZVByb3BlcnR5OjpB
bmltYXRhYmxlUHJvcGVydHkgc2lnbmF0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0PHZvaWQqPih0aGlzKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oJkNDRHVtbXlUYXJnZXRJbXBsPENDQ29sb3JBbmltYXRpb25UYXJnZXRJ
bXBsPjo6c2V0VmFsdWUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NEdW1teVRhcmdldElt
cGwoY29uc3QgQ29sb3ImIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgewor
ICAgIH0KKworICAgIGNvbnN0IENvbG9yJiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGUgPD4KK2Ns
YXNzIENDRHVtbXlUYXJnZXRJbXBsPENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+IDog
cHVibGljIENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NGbG9hdFBvaW50QW5pbWF0aW9uVGFyZ2V0ID4gY3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0R1
bW15VGFyZ2V0SW1wbDxDQ0Zsb2F0UG9pbnRBbmltYXRpb25UYXJnZXRJbXBsPih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgZ2V0VmFsdWUoKSB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IEZsb2F0UG9pbnQm
IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgQ0NBbmltYXRpb25Bbmlt
YXRhYmxlUHJvcGVydHk6OkFuaW1hdGFibGVQcm9wZXJ0eSBzaWduYXR1cmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHRoaXMpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigmQ0NEdW1teVRhcmdldEltcGw8Q0NGbG9h
dFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbD46OnNldFZhbHVlKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIENDRHVtbXlUYXJnZXRJbXBsKGNvbnN0IEZsb2F0UG9pbnQmIHZhbHVlKQorICAgICAg
ICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9pbnQm
IG1fdmFsdWU7Cit9OworCit0ZW1wbGF0ZSA8PgorY2xhc3MgQ0NEdW1teVRhcmdldEltcGw8Q0NJ
bnRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+IDogcHVibGljIENDSW50UG9pbnRBbmltYXRpb25U
YXJnZXQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDSW50UG9pbnRBbmltYXRp
b25UYXJnZXQgPiBjcmVhdGUoY29uc3QgSW50UG9pbnQmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0R1bW15VGFyZ2V0SW1wbDxDQ0ludFBvaW50QW5pbWF0aW9u
VGFyZ2V0SW1wbD4odmFsdWUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEludFBvaW50
JiBnZXRWYWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFs
dWUoY29uc3QgSW50UG9pbnQmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIHZpcnR1
YWwgQ0NBbmltYXRpb25BbmltYXRhYmxlUHJvcGVydHk6OkFuaW1hdGFibGVQcm9wZXJ0eSBzaWdu
YXR1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRoaXMpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigmQ0NEdW1t
eVRhcmdldEltcGw8Q0NJbnRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+OjpzZXRWYWx1ZSkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0R1bW15VGFyZ2V0SW1wbChjb25zdCBJbnRQb2ludCYg
dmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgY29u
c3QgSW50UG9pbnQmIG1fdmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBDQ0FuaW1hdGlvblRhcmdldEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NCbGVuZGVkQW5pbWF0aW9uSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NCbGVuZGVk
QW5pbWF0aW9uSW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0NTYyYTQ2MTE2MjA1OTEyMThkZTViZWUwNzI5
NGIxNGY1YWUxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0JsZW5kZWRBbmltYXRpb25JbXBsLmgKQEAgLTAsMCArMSwx
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NCbGVuZGVkQW5pbWF0aW9uSW1wbF9oCisj
ZGVmaW5lIENDQmxlbmRlZEFuaW1hdGlvbkltcGxfaAorCisjaW5jbHVkZSAiQ0NBbmltYXRpb25J
bXBsLmgiCisjaW5jbHVkZSAiQ0NBbmltYXRpb25UYXJnZXRJbXBsIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBmbG9hdCBibGVuZEZsb2F0KGRvdWJsZSB0LCBmbG9hdCBmcm9tLCBm
bG9hdCB0bykKK3sKKyAgICBpZiAodCA8PSAwLjApCisgICAgICAgIHJldHVybiBmcm9tOworICAg
IGlmICh0ID49IDEuMCkKKyAgICAgICAgcmV0dXJuIHRvOworICAgIHJldHVybiBmcm9tICsgdCAq
ICh0byAtIGZyb20pOworfQorCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRUcmFu
c2Zvcm1hdGlvbk1hdHJpeChkb3VibGUgdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZy
b20sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0bykKK3sKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0b1JldHVybiA9IHRvOworICAgIHRvUmV0dXJuLmJsZW5kKGZyb20sIHQpOworICAg
IHJldHVybiB0b1JldHVybjsKK30KKworc3RhdGljIENvbG9yIGJsZW5kQ29sb3IoZG91YmxlIHQs
IGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8pCit7CisgICAgZmxvYXQgckZyb20s
IGdGcm9tLCBiRnJvbSwgYUZyb207CisgICAgZmxvYXQgclRvLCBnVG8sIGJUbywgYVRvOworICAg
IGZyb20uZ2V0UkdCQShyRnJvbSwgZ0Zyb20sIGJGcm9tLCBhRnJvbSk7CisgICAgdG8uZ2V0UkdC
QShyVG8sIGdUbywgYlRvLCBhVG8pOworICAgIHJldHVybiBDb2xvcihibGVuZEZsb2F0KHQsIHJG
cm9tLCByVG8pLCBibGVuZEZsb2F0KHQsIGdGcm9tLCBnVG8pLCBibGVuZEZsb2F0KHQsIGJGcm9t
LCBiVG8pLCBibGVuZEZsb2F0KHQsIGFGcm9tLCBhVG8pKTsKK30KKworc3RhdGljIEZsb2F0UG9p
bnQgYmxlbmRGbG9hdFBvaW50KGRvdWJsZSB0LCBjb25zdCBGbG9hdFBvaW50JiBmcm9tLCBjb25z
dCBGbG9hdFBvaW50JiB0bykKK3sKKyAgICByZXR1cm4gRmxvYXRQb2ludChibGVuZEZsb2F0KHQs
IGZyb20ueCgpLCB0by54KCkpLCBibGVuZEZsb2F0KHQsIGZyb20ueSgpLCB0by55KCkpKTsKK30K
Kworc3RhdGljIEludFBvaW50IGJsZW5kSW50UG9pbnQoZG91YmxlIHQsIGNvbnN0IEludFBvaW50
JiBmcm9tLCBjb25zdCBJbnRQb2ludCYgdG8pCit7CisgICAgcmV0dXJuIEludFBvaW50KHN0YXRp
Y19jYXN0PGludD4oYmxlbmRGbG9hdCh0LCBmcm9tLngoKSwgdG8ueCgpKSksIHN0YXRpY19jYXN0
PGludD4oYmxlbmRGbG9hdCh0LCBmcm9tLnkoKSwgdG8ueSgpKSkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgQ0NCbGVuZEZ1bmM7CisKK3RlbXBsYXRlIDw+CitjbGFzcyBDQ0Js
ZW5kRnVuYzxDQ0Zsb2F0QW5pbWF0aW9uVGFyZ2V0SW1wbD4geworcHVibGljOgorICAgIGZsb2F0
IG9wZXJhdG9yKCkgKGRvdWJsZSB0LCBmbG9hdCBmcm9tLCBmbG9hdCB0bykKKyAgICB7CisgICAg
ICAgIHJldHVybiBibGVuZEZsb2F0KHQsIGZyb20sIHRvKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZSA8PgorY2xhc3MgQ0NCbGVuZEZ1bmM8Q0NUcmFuc2Zvcm1hdGlvbk1hdHJpeEFuaW1hdGlvblRh
cmdldEltcGw+IHsKK3B1YmxpYzoKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcGVyYXRvcigp
KGRvdWJsZSB0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnJvbSwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJsZW5kVHJhbnNmb3Jt
YXRpb25NYXRyaXgodCwgZnJvbSwgdG8pOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitjbGFz
cyBDQ0JsZW5kRnVuYzxDQ0NvbG9yQW5pbWF0aW9uVGFyZ2V0SW1wbD4geworcHVibGljOgorICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG9wZXJhdG9yKCkoZG91YmxlIHQsIGNvbnN0IENvbG9yJiBm
cm9tLCBjb25zdCBDb2xvciYgdG8pCisgICAgeworICAgICAgICByZXR1cm4gYmxlbmRDb2xvcih0
LCBmcm9tLCB0byk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK2NsYXNzIENDQmxlbmRGdW5j
PENDRmxvYXRQb2ludEFuaW1hdGlvblRhcmdldEltcGw+IHsKK3B1YmxpYzoKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBvcGVyYXRvcigpKGRvdWJsZSB0LCBjb25zdCBGbG9hdFBvaW50JiBmcm9t
LCBjb25zdCBGbG9hdFBvaW50JiB0bykKKyAgICB7CisgICAgICAgIHJldHVybiBibGVuZEZsb2F0
UG9pbnQodCwgZnJvbSwgdG8pOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitjbGFzcyBDQ0Js
ZW5kRnVuYzxDQ0ludFBvaW50QW5pbWF0aW9uVGFyZ2V0SW1wbD4geworcHVibGljOgorICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG9wZXJhdG9yKCkoZG91YmxlIHQsIGNvbnN0IEludFBvaW50JiBm
cm9tLCBjb25zdCBJbnRQb2ludCYgdG8pCisgICAgeworICAgICAgICByZXR1cm4gYmxlbmRJbnRQ
b2ludCh0LCBmcm9tLCB0byk7CisgICAgfQorfTsKKworLy8gTm8gc3BlY2lhbGl6YXRpb24gZm9y
IENDQW5pbWF0aW9uQ29udGFpbmVySW1wbCA9PT4gY2Fubm90IGJsZW5kIHRoZW0uIEJ5IGRlc2ln
bi4KKworLy8gQ3JlYXRlcyBhbiBhbmltYXRpb24gdGhhdCBibGVuZHMgYmV0d2VlbiB0aGUgb2xk
IGFuZCB0aGUgbmV3IGFuaW1hdGlvbi4KK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBDQ0JsZW5k
ZWRBbmltYXRpb25JbXBsIDogcHVibGljIFQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFQ+IGNyZWF0ZShkb3VibGUgbGFzdEFuaW1UaW1lLCBQYXNzUmVmUHRyPFQ+IG9sZEFuaW0s
IFBhc3NSZWZQdHI8VD4gbmV3QW5pbSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ0NCbGVuZGVkQW5pbWF0aW9uSW1wbDxUPihsYXN0QW5pbVRpbWUsIG9sZEFuaW0sIG5ld0Fu
aW0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ0JsZW5kZWRBbmltYXRpb25JbXBsKGRvdWJs
ZSBsYXN0QW5pbVRpbWUsIFBhc3NSZWZQdHI8VD4gb2xkQW5pbSwgUGFzc1JlZlB0cjxUPiBuZXdB
bmltKQorICAgICAgICA6IG1fbGFzdEFuaW1UaW1lKGxhc3RBbmltVGltZSkKKyAgICAgICAgLCBt
X29sZEFuaW0ob2xkQW5pbSkKKyAgICAgICAgLCBtX25ld0FuaW0obmV3QW5pbSkKKyAgICAgICAg
LCBtX2JsZW5kRnVuYyhDQ0JsZW5kRnVuYzxUOjpUYXJnZXRUeXBlPigpKQorICAgICAgICAsIG1f
dGFyZ2V0KG1fb2xkQW5pbS0+bV90YXJnZXQucmVsZWFzZSgpKQorICAgIHsKKyAgICAgICAgbV9v
bGRBbmltLT5zZXRUYXJnZXQoQ0NEdW1teVRhcmdldEltcGw8VDo6VGFyZ2V0VHlwZT46OmNyZWF0
ZShtX25ld0FuaW0tPm1fdGFyZ2V0LT5nZXRWYWx1ZSgpKSk7CisgICAgICAgIG1fbmV3QW5pbS0+
c2V0VGFyZ2V0KENDRHVtbXlUYXJnZXRJbXBsPFQ6OlRhcmdldFR5cGU+OjpjcmVhdGUobV9uZXdB
bmltLT5tX3RhcmdldC0+Z2V0VmFsdWUoKSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBv
bkFuaW1hdGUoZG91YmxlIHQpCisgICAgeworICAgICAgICBkb3VibGUgdHJhbnNpdGlvbkR1cmF0
aW9uID0gMC4wOworICAgICAgICBpZiAobV9vbGRBbmltLT5oYXNEdXJhdGlvbigpKQorICAgICAg
ICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gc3RkOjptYXgoMC4wLCBtX29sZEFuaW0tPmR1cmF0
aW9uKCkgLSAobV9sYXN0QW5pbVRpbWUgLSBtX29sZEFuaW0tPnN0YXJ0VGltZSgpKSk7CisgICAg
ICAgIGVsc2UgaWYgKG1fbmV3QW5pbS0+aGFzRHVyYXRpb24oKSkKKyAgICAgICAgICAgIHRyYW5z
aXRpb25EdXJhdGlvbiA9IHN0ZDo6bWF4KDAuMCwgbV9uZXdBbmltLT5kdXJhdGlvbigpKTsKKwor
ICAgICAgICBpZiAodHJhbnNpdGlvbkR1cmF0aW9uID4gMC4wKSB7CisgICAgICAgICAgICBtX29s
ZEFuaW0tPmFuaW1hdGUobV9sYXN0QW5pbVRpbWUgKyB0KTsKKyAgICAgICAgICAgIG1fbmV3QW5p
bS0+YW5pbWF0ZShtX25ld0FuaW0tPnN0YXJ0VGltZSgpICsgdCk7CisgICAgICAgICAgICBtX3Rh
cmdldC0+c2V0VmFsdWUobV9ibGVuZEZ1bmModCAvIHRyYW5zYXRpb25fZHVyYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vbGRBbmltLT5tX3Rhcmdl
dC0+Z2V0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX25ld0FuaW0tPm1fdGFyZ2V0LT5nZXRWYWx1ZSgpKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV90YXJnZXQtPnNldFZhbHVlKG1fbmV3QW5pbS0+YW5pbWF0ZShtX25ld0FuaW0t
PnN0YXJ0VGltZSgpICsgdCkpOworICAgIH0KKworICAgIGRvdWJsZSBtX2xhc3RBbmltVGltZTsK
KyAgICBSZWZQdHI8VD4gbV9vbGRBbmltOworICAgIFJlZlB0cjxUPiBtX25ld0FuaW07CisgICAg
Q0NCbGVuZEZ1bmM8VDo6VGFyZ2V0VHlwZT4gbV9ibGVuZEZ1bmM7CisgICAgT3duUHRyPFQ6OlRh
cmdldFR5cGU+IG1fdGFyZ2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKyNl
bmRpZiAvLyBDQ0JsZW5kZWRBbmltYXRpb25JbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApp
bmRleCBhZjA0MmU1NjY5YjQ2MmZiNmMwOWRlNmZjM2Q0Y2Y0YjZkODRlOTJkLi5lOThlYmRlMzky
YjY0NTNjZTkxYmQwOWRjZTJlZTY0NTEzMjNlMmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CisjaW5jbHVkZSAiY2MvQ0NBbmltYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
aW5kZXggZTJjMDBjODY4OTgyYTc2YzY1OGNhZTgzNDEwZTg1YmNjZGNmODA5Zi4uNzRhZTljYjg2
OWEwNzhmZTAwY2JkOTYyZGFhZjQ1NGFjNTc3Zjc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBA
IC0yMTksNiArMjE5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+IG1fY2hpbGRyZW47CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX21hc2tMYXllcjsKICAg
ICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcmVwbGljYUxheWVyOworICAgIFJlZlB0cjxDQ0FuaW1h
dGlvbkNvbnRhbmluZXJJbXBsPiBtX2FuaW1hdGlvbnM7CiAgICAgaW50IG1fbGF5ZXJJZDsKIAog
ICAgIC8vIFByb3BlcnRpZXMgc3luY2hyb25pemVkIGZyb20gdGhlIGFzc29jaWF0ZWQgTGF5ZXJD
aHJvbWl1bS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMTUw
YjkzZDE0OGZkOTgyNDdlNjc3NzJkZTE2ZmRlNzRjOTBlM2U2ZS4uMTQ3YWNhYzBiNWZhZDA5Zjgx
MTUzMTliODJlMTA3YjFmZjEyZGUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5jcHAKQEAgLTQ1LDYgKzQ1LDcgQEAgQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRy
ZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywgQ0NMYXllclRyZWUKICAgICA6
IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAgLCBt
X2ZyYW1lTnVtYmVyKDApCisgICAgLCBtX2FuaW1hdGlvbk1hbmFnZXIoQ0NBbmltYXRpb25NYW5h
Z2VyOjpjcmVhdGUoKSkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiAgICAgLCBtX3Zpc2li
bGUodHJ1ZSkKICAgICAsIG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhmYWxzZSkKQEAgLTg0LDYg
Kzg1LDcgQEAgR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQo
KQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5U
aW1lTXMpCiB7CisgICAgbV9hbmltYXRpb25NYW5hZ2VyLT5hbmltYXRlKGZyYW1lQmVnaW5UaW1l
TXMpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDQxYjgzOTZkZmJmZTg1MjNiZTNmMGJh
Yzc4YzZjOTk2YWMwZjY5Y2EuLjE5ZTc2YjcwZGY0Y2RmNzc1ZmVkMzg2YzI2MDUxYzI3OTIzOTVl
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTEyNyw2ICsxMjcs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlTWF4U2Nyb2xsUG9zaXRpb24oKTsKIAogICAg
IE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKKyAgICBPd25Q
dHI8Q0NBbmltYXRpb25NYW5hZ2VyPiBtX2FuaW1hdGlvbk1hbmFnZXI7CiAgICAgUmVmUHRyPEND
TGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Nj
cm9sbExheWVySW1wbDsKICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbWluZ0Z1bmN0
aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaW1pbmdGdW5jdGlvbkltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGRkZWQ5NzVlODQyOWJmNGNmM2Nl
OGRkMjZhZWUxNGFkZGI1YTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaW1pbmdGdW5jdGlvbkltcGwuaApAQCAtMCww
ICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGltaW5nRnVuY3Rpb25JbXBsX2gK
KyNkZWZpbmUgQ0NUaW1pbmdGdW5jdGlvbkltcGxfaAorCisjaW5jbHVkZSAiVW5pdEJlemllci5o
IgorCitjbGFzcyBDQ1RpbWluZ0Z1bmN0aW9uSW1wbCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
Q0NUaW1pbmdGdW5jdGlvbkltcGwoKTsKKyAgICBkb3VibGUgcmVzYW1wbGUoZG91YmxlIHQpIGNv
bnN0ID0gMDsKK307CisKKy8vIEl0IGlzIGFzc3VtZWQgdGhhdCAoeDEsIHkxKSA9ICgwLCAwKSBh
bmQgKHg0LCB5NCkgPSAoMSwgMSkKK2NsYXNzIENDQmV6aWVyVGltaW5nRnVuY3Rpb25JbXBsIHsK
K3B1YmxpYzoKKyAgICBDQ0JlemllclRpbWluZ0Z1bmN0aW9uSW1wbChkb3VibGUgeDIsIGRvdWJs
ZSB5MiwgZG91YmxlIHgzLCBkb3VibGUgeTMpOworICAgIHZpcnR1YWwgfkNDQmV6aWVyVGltaW5n
RnVuY3Rpb25JbXBsKCk7CisKKyAgICBkb3VibGUgcmVzYW1wbGUoZG91YmxlIHQpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFVuaXRCZXppZXIgbV9iZXppZXI7Cit9OworCitjbGFzcyBDQ0Vhc2VJ
blRpbWluZ0Z1bmN0aW9uSW1wbCA6IHB1YmxpYyBCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwgewor
cHVibGljOgorICAgIENDRWFzZUluVGltaW5nRnVuY3Rpb25JbXBsKCkgOiBDQ0JlemllclRpbWlu
Z0Z1bmN0aW9uSW1wbCgxLjAgLyAzLjAsIDEuMCAvIDMuMCwgMi4wIC8gMy4wLCAxLjApIHsgfQor
ICAgIH5DQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uSW1wbCgpIHsgfQorfTsKKworY2xhc3MgQ0NFYXNl
T3V0VGltaW5nRnVuY3Rpb25JbXBsIDogcHVibGljIEJlemllclRpbWluZ0Z1bmN0aW9uSW1wbCB7
CitwdWJsaWM6CisgICAgQ0NFYXNlT3V0VGltaW5nRnVuY3Rpb25JbXBsKCkgOiBDQ0JlemllclRp
bWluZ0Z1bmN0aW9uSW1wbCgxLjAgLyAzLjAsIDAuMCwgMi4wIC8gMy4wLCAyLjAgLyAzLjApIHsg
fQorICAgIH5DQ0Vhc2VPdXRUaW1pbmdGdW5jdGlvbkltcGwoKSB7IH0KK307CisKK2NsYXNzIEND
RWFzZU91dEVhc2VJblRpbWluZ0Z1bmN0aW9uSW1wbCA6IHB1YmxpYyBCZXppZXJUaW1pbmdGdW5j
dGlvbkltcGwgeworcHVibGljOgorICAgIENDRWFzZU91dEVhc2VJblRpbWluZ0Z1bmN0aW9uSW1w
bCgpIDogQ0NCZXppZXJUaW1pbmdGdW5jdGlvbkltcGwoMS4wIC8gMy4wLCAwLjAsIDIuMCAvIDMu
MCwgMS4wKSB7IH0KKyAgICB+Q0NFYXNlSW5DQ0Vhc2VPdXRFYXNlSW5UaW1pbmdGdW5jdGlvbklt
cGxUaW1pbmdGdW5jdGlvbkltcGwoKSB7IH0KK307CisKKyNlbmRpZiAvLyBDQ1RpbWluZ0Z1bmN0
aW9uSW1wbF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119480</attachid>
            <date>2011-12-15 12:13:28 -0800</date>
            <delta_ts>2011-12-21 07:08:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20111215151326.patch</filename>
            <type>text/plain</type>
            <size>50712</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjJiMDdkYTE1MjE4ZTYw
ZTM4YjJlYWNiNWE0OTg5OWQ1NjE0N2I2ZC4uMDkzZWM2NzJjNzg2YzUzYWNiOGY0ZWYxY2I2Y2Nl
OTE4ZGM5YTZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDExLTEyLTE1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVu
aXQgdGVzdCBmb3IgdGhlIGNvbnRyb2xsZXIgaXMgaW4gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdC5jcHAKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDQW5pbWF0aW9uOjp+Q0NBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NGbG9hdEFuaW1hdGlvbjo6fkNDRmxvYXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUcmFuc2Zvcm1BbmltYXRpb246On5DQ1RyYW5zZm9ybUFuaW1hdGlvbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphYm9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnBhdXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cmVzdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aXNBbmlt
YXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpDb250cm9sbGVkQW5pbWF0aW9uOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNvbnRyb2xsZWRBbmltYXRpb246Omhhc0R1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
Q29udHJvbGxlZEFuaW1hdGlvbjo6c2V0UnVuU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDb250cm9sbGVkQW5pbWF0aW9uOjpnZXRGbG9h
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNv
bnRyb2xsZWRBbmltYXRpb246OmdldFRyYW5zZm9ybU9wZXJhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDb250cm9sbGVkQW5pbWF0aW9u
Ojppc0ZpbmlzaGVkQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpDb250cm9sbGVkQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnNl
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6cHJvbW90ZVN0YXJ0aW5nVG9SdW5uaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6cHJvbW90ZVNjaGVkdWxlZFRvUnVubmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnByb21vdGVFbnF1
ZXVlZFRvUnVubmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OnJlc29sdmVDb25mbGljdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OkNvbnRyb2xsZWRBbmltYXRpb246OkNvbnRyb2xsZWRBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpDb250cm9sbGVkQW5pbWF0aW9uOjp+Q29udHJvbGxlZEFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNvbnRyb2xsZWRBbmltYXRp
b246OnByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Q29udHJvbGxlZEFuaW1hdGlvbjo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDb250cm9sbGVkQW5pbWF0aW9uOjpydW5TdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNv
bnRyb2xsZWRBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNvbnRyb2xsZWRBbmltYXRpb246OnN0YXJ0VGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNv
bnRyb2xsZWRBbmltYXRpb246OmlzRmluaXNoZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudDo6fkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCk6CisKIDIwMTEtMTIt
MDggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIE9wdGltaXpl
IFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IDU2OWJiYjg3NmFmMmMyOGY0YjZjMDhkNmI1ZDkxMGNlNjU2N2RkZGQuLjk2M2NlZDRi
ZjM1Zjg3OGRmMmZlYmY4ODc0ZmVjYWY2ODQ4NTlhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMTItMTUgIElhbiBWb2xsaWNrICA8dm9sbGlja0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgYSBiYXNlLWNsYXNzIEND
QW5pbWF0aW9uIHRvIHJlcHJlc2VudCBjb21wb3NpdG9yIGFuaW1hdGlvbnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMjMzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAg
ICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6OkR1bW15Q29udHJvbGxl
ckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6On5EdW1t
eUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlDb250cm9sbGVyQ2xp
ZW50OjpvcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15Q29udHJvbGxlckNsaWVudDo6
c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6OnRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6OnNldFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6OnJlbmRl
ckJveEJvcmRlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlDb250cm9sbGVyQ2xpZW50
OjphbmltYXRpb25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkR1bW15Q29udHJvbGxlckNsaWVudDo6YWN0aXZlQ29udHJvbGxlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RHVtbXlUcmFuc2Zvcm1UcmFuc2l0aW9uOjpEdW1teVRyYW5zZm9ybVRyYW5zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlUcmFuc2Zvcm1UcmFuc2l0aW9uOjpkdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpEdW1teVRyYW5zZm9ybVRyYW5zaXRpb246Omhhc0R1cmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15VHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VHJhbnNm
b3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teUZsb2F0VHJhbnNpdGlvbjo6
RHVtbXlGbG9hdFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlGbG9hdFRyYW5z
aXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15RmxvYXRUcmFuc2l0aW9u
OjpoYXNEdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEdW1teUZsb2F0VHJhbnNpdGlvbjo6
Z2V0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlGbG9hdFBhcmFtZXRyaWNBbmltYXRp
b246OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15RmxvYXRQYXJhbWV0cmljQW5p
bWF0aW9uOjpoYXNEdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEdW1teUZsb2F0UGFyYW1l
dHJpY0FuaW1hdGlvbjo6Z2V0RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6YWRkQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTEyLTA3ICBBbGV4YW5kcmUgRWxp
YXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBwYWdlLXNj
YWxlIGFuaW1hdGlvbiBzdXBwb3J0IHRvIEltcGwgdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
NGMzNzk0OTg1NzkyNjA0ZTA3M2JkYWU5OWY4Y2Y4OTExODdiYmJkNy4uYmQxZTVlOTQwZWY2ZWY4
OTY1MjNjN2I4NzNhOTU5Mzg3N2EwNDFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU4OSw2ICsz
NTg5LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
V2ViR0xMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2Vy
LmNwcCcsCkBAIC0zNjAwLDYgKzM2MDEsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzEyNmZkN2I1MWZiZTE5ZGFmOTNmMDE2YTk1Njg4MGEzYWFhNTBjMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0
aW9uLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FuaW1hdGlv
bl9oCisjZGVmaW5lIENDQW5pbWF0aW9uX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBUcmFuc2Zvcm1PcGVyYXRpb25zOworCitjbGFzcyBDQ0FuaW1hdGlvbiB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+Q0NBbmltYXRpb24oKSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0
aW9uKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNEdXJhdGlvbigpIGNvbnN0ID0g
MDsKK307CisKK2NsYXNzIENDRmxvYXRBbmltYXRpb24gOiBwdWJsaWMgQ0NBbmltYXRpb24gewor
cHVibGljOgorICAgIHZpcnR1YWwgfkNDRmxvYXRBbmltYXRpb24oKSB7IH0KKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBpcyBmaW5pc2hlZC4KKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQoZG91YmxlIHQsIGZsb2F0KiB2YWx1ZSkgPSAwOworfTsKKworY2xhc3MgQ0NUcmFu
c2Zvcm1BbmltYXRpb24gOiBwdWJsaWMgQ0NBbmltYXRpb24geworcHVibGljOgorICAgIHZpcnR1
YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uKCkgeyB9CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBhbmltYXRpb24gaXMgZmluaXNoZWQuCisgICAgdmlydHVhbCBib29sIGdldFRyYW5zZm9ybU9w
ZXJhdGlvbnMoZG91YmxlIHQsIFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbHVlKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kZjQ1YTAzMDc3ZDExOTU2MTg2MzIxNjJiMGUwZjBmMDQyODc1N2ZkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtMCwwICsxLDMxMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50
LmgiCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMKK1Bhc3NPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIGNsaWVudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bChjbGllbnQpKTsKK30KKworCitDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fbGFzdFRpY2tU
aW1lKDAuMCkKK3sKK30KKworLy8gTyhuXjIpIGluIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9ucyBp
biB0aGUgcXVldWUuCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0
ZShkb3VibGUgZnJhbWVCZWdpblRpbWVNcykKK3sKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhl
cmUgaXMgYW55IGFuaW1hdGlvbiBqdXN0IHdhaXRpbmcgZm9yIGEgc3RhcnQgdGltZS4KKyAgICBw
cm9tb3RlU3RhcnRpbmdUb1J1bm5pbmcoZnJhbWVCZWdpblRpbWVNcyk7CisKKyAgICAvLyBDaGVj
ayB0byBzZWUgaWYgd2UgY2FuIHByb21vdGUgZnJvbSBzY2hlZHVsZWQgdG8gcnVubmluZy4gTyhu
KQorICAgIHByb21vdGVTY2hlZHVsZWRUb1J1bm5pbmcoZnJhbWVCZWdpblRpbWVNcyk7CisKKyAg
ICAvLyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIHByb21vdGUgZnJvbSBlbnF1ZXVlZCB0byBydW5u
aW5nLiBPKG5eMikKKyAgICBwcm9tb3RlRW5xdWV1ZWRUb1J1bm5pbmcoZnJhbWVCZWdpblRpbWVN
cyk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhbnkgY29uZmxpY3RpbmcgYW5p
bWF0aW9ucyBhbmQgcmVzb2x2ZSB0aGUgY29uZmxpY3RzLgorICAgIHJlc29sdmVDb25mbGljdHMo
ZnJhbWVCZWdpblRpbWVNcyk7CisKKyAgICAvLyBUaWNrIGFsbCBydW5uaW5nIGFuaW1hdGlvbnMu
IE8obikKKyAgICB0aWNrQW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZU1zKTsKKworICAgIC8vIFJl
bW92ZSBhbGwgdGhlIGZpbmlzaGVkIGFuaW1hdGlvbnMKKyAgICBwdXJnZUZpbmlzaGVkQW5pbWF0
aW9ucygpOworCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBwcm9tb3RlIGZyb20gZW5x
dWV1ZWQgdG8gcnVubmluZy4gTyhuXjIpCisgICAgcHJvbW90ZUVucXVldWVkVG9SdW5uaW5nKGZy
YW1lQmVnaW5UaW1lTXMpOworCisgICAgbV9sYXN0VGlja1RpbWUgPSBmcmFtZUJlZ2luVGltZU1z
OworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YWRkKFBhc3NPd25Q
dHI8Q0NBbmltYXRpb24+IGFuaW0sIGNvbnN0IEFuaW1hdGlvblN0YXRlJiBzdGF0ZSkKK3sKKyAg
ICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBDb250cm9sbGVkQW5pbWF0aW9uKGFu
aW0sIHN0YXRlKSkpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
YWJvcnQoSUQgaWQpCit7CisgICAgc2V0U3RhdGUoaWQsIEFib3J0ZWQpOworfQorCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cGF1c2UoSUQgaWQpCit7CisgICAgc2V0U3Rh
dGUoaWQsIFBhdXNlZCk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpyZXN1bWUoSUQgaWQpCit7CisgICAgc2V0U3RhdGUoaWQsIFJ1bm5pbmcpOworfQorCitib29s
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aXNBbmltYXRpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2FuaW1hdGlvbnMuc2l6ZSgpOworfQorCitkb3VibGUgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpDb250cm9sbGVkQW5pbWF0aW9uOjpkdXJhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3RhdGUuaXRlcmF0aW9ucyAqIG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpOworfQorCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q29udHJvbGxl
ZEFuaW1hdGlvbjo6aGFzRHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2FuaW1hdGlv
bi0+aGFzRHVyYXRpb24oKSAmJiBtX3N0YXRlLml0ZXJhdGlvbnMgPiAwOworfQorCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q29udHJvbGxlZEFuaW1hdGlvbjo6c2V0UnVu
U3RhdGUoUnVuU3RhdGUgcnVuU3RhdGUsIGRvdWJsZSB0KQoreworICAgIC8vIFRPRE8odm9sbGlj
ayk6IGV2ZW50dWFsbHkgd2Ugd2lsbCB3YW50IHRvIG5vdGlmeSBvYnNlcnZlcnMgaGVyZS4KKyAg
ICBzd2l0Y2ggKHJ1blN0YXRlKSB7CisgICAgY2FzZSBSdW5uaW5nOgorICAgICAgICBpZiAobV9z
dGF0ZS5ydW5TdGF0ZSA9PSBQYXVzZWQpCisgICAgICAgICAgICBtX3RvdGFsUGF1c2VkVGltZSAr
PSB0IC0gbV9wYXVzZVRpbWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF1c2VkOgorICAg
ICAgICBtX3BhdXNlVGltZSA9IHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FpdGluZ0Zv
clN0YXJ0VGltZToKKyAgICBjYXNlIFdhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHk6CisgICAg
Y2FzZSBXYWl0aW5nVG9SdW46CisgICAgY2FzZSBGaW5pc2hlZDoKKyAgICBjYXNlIEFib3J0ZWQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBtX3N0YXRlLnJ1blN0YXRlID0gcnVuU3RhdGU7
Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDb250cm9sbGVkQW5p
bWF0aW9uOjpnZXRGbG9hdChkb3VibGUgdCwgZmxvYXQqIHZhbHVlKQoreworICAgIHQgPSB0cmlt
VGltZVRvQ3VycmVudEl0ZXJhdGlvbih0KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0NGbG9h
dEFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKS0+Z2V0RmxvYXQodCwgdmFsdWUpOworfQor
Citib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q29udHJvbGxlZEFuaW1hdGlv
bjo6Z2V0VHJhbnNmb3JtT3BlcmF0aW9ucyhkb3VibGUgdCwgVHJhbnNmb3JtT3BlcmF0aW9ucyog
dmFsdWUpCit7CisgICAgdCA9IHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKHQpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDQ1RyYW5zZm9ybUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgp
KS0+Z2V0VHJhbnNmb3JtT3BlcmF0aW9ucyh0LCB2YWx1ZSk7Cit9CisKK2Jvb2wgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpDb250cm9sbGVkQW5pbWF0aW9uOjppc0ZpbmlzaGVkQXQo
ZG91YmxlIHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJ1blN0YXRlKCkgPT0gUnVubmluZyAmJiBo
YXNEdXJhdGlvbigpICYmIGR1cmF0aW9uKCkgPD0gdCAtIHN0YXJ0VGltZSgpIC0gbV90b3RhbFBh
dXNlZFRpbWU7Cit9CisKK2RvdWJsZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNv
bnRyb2xsZWRBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSB0KSBj
b25zdAoreworICAgIC8vIFJldHVybmVkIHRpbWUgc2hvdWxkIGFsd2F5cyBiZSByZWxhdGl2ZSB0
byB0aGUgc3RhcnQgdGltZSBhbmQgc2hvdWxkIHN1YnRyYWN0CisgICAgLy8gYWxsIHRpbWUgc3Bl
bnQgcGF1c2VkCisgICAgdCAtPSBtX3N0YXRlLnN0YXJ0VGltZSArIG1fdG90YWxQYXVzZWRUaW1l
OworCisgICAgLy8gQWx3YXlzIHJldHVybiB6ZXJvIGlmIHdlIGhhdmUgbm8gaXRlcmF0aW9ucy4K
KyAgICBpZiAoIW1fc3RhdGUuaXRlcmF0aW9ucykKKyAgICAgICAgcmV0dXJuIDAuMDsKKworICAg
IC8vIENhbm5vdCB0cmltIHRpbWUgaWYgd2UgaGF2ZW4ndCBnb3QgYSByZWxpYWJsZSBkdXJhdGlv
bi4KKyAgICBpZiAoIW1fYW5pbWF0aW9uLT5oYXNEdXJhdGlvbigpKQorICAgICAgICByZXR1cm4g
dDsKKworICAgIC8vIElmIGxlc3MgdGhhbiBhbiBpdGVyYXRpb24gZHVyYXRpb24sIGp1c3QgcmV0
dXJuIHQuCisgICAgaWYgKHQgPCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkKKyAgICAgICAgcmV0
dXJuIHQ7CisKKyAgICAvLyBJZiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRvdGFsIGR1
cmF0aW9uLCByZXR1cm4gaXRlcmF0aW9uIGR1cmF0aW9uLgorICAgIGlmIChoYXNEdXJhdGlvbigp
ICYmIHQgPj0gZHVyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpOworCisgICAgLy8gRmluYWxseSwgcmV0dXJuIHggd2hlcmUgdCA9IHggKyBuICogbV9hbmlt
YXRpb24tPmR1cmF0aW9uKCkgZm9yIHNvbWUgcG9zaXRpdmUgaW50ZWdlciBuLgorICAgIHJldHVy
biBmbW9kKHQsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKK30KKwordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OnNldFN0YXRlKElEIGlkLCBSdW5TdGF0ZSBzdGF0ZSkKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBpZCkKKyAgICAgICAgICAgIG1fYW5p
bWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoc3RhdGUsIG1fbGFzdFRpY2tUaW1lKTsKKworICAgIC8v
IElmIGFueW9uZSdzIGZpbmlzaGVkLCBwdXJnZSB0aGVtIG5vdy4KKyAgICBwdXJnZUZpbmlzaGVk
QW5pbWF0aW9ucygpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
cHJvbW90ZVN0YXJ0aW5nVG9SdW5uaW5nKGRvdWJsZSB0KQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FuaW1h
dGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gV2FpdGluZ0ZvclN0YXJ0VGltZSkgeworICAgICAgICAg
ICAgbV9hbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShSdW5uaW5nLCB0KTsKKyAgICAgICAgICAg
IG1fYW5pbWF0aW9uc1tpXS0+c2V0U3RhcnRUaW1lKHQpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHJvbW90ZVNjaGVkdWxlZFRv
UnVubmluZyhkb3VibGUgdCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0
aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUo
KSA9PSBXYWl0aW5nVG9SdW4gJiYgbV9hbmltYXRpb25zW2ldLT5zdGFydFRpbWUoKSA8PSB0KQor
ICAgICAgICAgICAgbV9hbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShSdW5uaW5nLCB0KTsKK30K
Kwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnByb21vdGVFbnF1ZXVlZFRv
UnVubmluZyhkb3VibGUgdCkKK3sKKyAgICAvLyBGaXJzdCBjb2xsZWN0IHJ1bm5pbmcgcHJvcGVy
dGllcy4KKyAgICBQcm9wZXJ0aWVzIGJsb2NrZWRQcm9wZXJ0aWVzOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9hbmlt
YXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IFJ1bm5pbmcgfHwgbV9hbmltYXRpb25zW2ldLT5ydW5T
dGF0ZSgpID09IEZpbmlzaGVkKQorICAgICAgICAgICAgYmxvY2tlZFByb3BlcnRpZXMuYWRkKG1f
YW5pbWF0aW9uc1tpXS0+cHJvcGVydHkoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBpZiBpdCdzIGVucXVldWVk
CisgICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gV2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgcHJvcGVydGll
cyBmb3IgYW5pbWF0aW9ucyB3aXRoIHRoZSBzYW1lIGlkICh0aGV5IHNob3VsZCBhbGwgYWxzbyBi
ZSBlbnF1ZXVlZCkKKyAgICAgICAgICAgIFByb3BlcnRpZXMgZW5xdWV1ZWRQcm9wZXJ0aWVzOwor
ICAgICAgICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FuaW1hdGlvbnNbaV0tPnByb3Bl
cnR5KCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hbmltYXRp
b25zLnNpemUoKTsgKytqKQorICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPmlk
KCkgPT0gbV9hbmltYXRpb25zW2pdLT5pZCgpKQorICAgICAgICAgICAgICAgICAgICBlbnF1ZXVl
ZFByb3BlcnRpZXMuYWRkKG1fYW5pbWF0aW9uc1tqXS0+cHJvcGVydHkoKSk7CisKKyAgICAgICAg
ICAgIGJvb2wgbnVsbEludGVyc2VjdGlvbiA9IHRydWU7CisgICAgICAgICAgICBmb3IgKFByb3Bl
cnRpZXM6Oml0ZXJhdG9yIHBJdGVyID0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmJlZ2luKCk7IHBJdGVy
ICE9IGVucXVldWVkUHJvcGVydGllcy5lbmQoKTsgKytwSXRlcikKKyAgICAgICAgICAgICAgICBp
ZiAoIWJsb2NrZWRQcm9wZXJ0aWVzLmFkZCgqcEl0ZXIpLnNlY29uZCkKKyAgICAgICAgICAgICAg
ICAgICAgbnVsbEludGVyc2VjdGlvbiA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBpZiB0aGVy
ZSdzIG5vdGhpbmcgaW4gY29tbW9uLCBzdGFydCB0aGVtIHVwLgorICAgICAgICAgICAgaWYgKG51
bGxJbnRlcnNlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbnNbaV0tPnNldFJ1
blN0YXRlKFJ1bm5pbmcsIHQpOworICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uc1tpXS0+c2V0
U3RhcnRUaW1lKHQpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9h
bmltYXRpb25zW2ldLT5pZCgpID09IG1fYW5pbWF0aW9uc1tqXS0+aWQoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShSdW5uaW5nLCB0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uc1tqXS0+c2V0U3RhcnRUaW1lKHQp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6cmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgdCkKK3sKKyAgICAvLyBDb3VsZCBldmVudHVh
bGx5IGJsZW5kLiBGb3Igbm93LCB3ZSdsbCBqdXN0IGFib3J0IHRoZSBwcmV2aW91cyBhbmltYXRp
b24uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBSdW5uaW5nKSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FuaW1hdGlvbnMuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25zW2pdLT5ydW5TdGF0
ZSgpID09IFJ1bm5pbmcgJiYgbV9hbmltYXRpb25zW2ldLT5wcm9wZXJ0eSgpID09IG1fYW5pbWF0
aW9uc1tqXS0+cHJvcGVydHkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRp
b25zW2ldLT5zdGFydFRpbWUoKSA+IG1fYW5pbWF0aW9uc1tqXS0+c3RhcnRUaW1lKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKEFib3J0ZWQs
IHQpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2FuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKEFib3J0ZWQsIHQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKCkKK3sKKyAgICAv
LyBlYWNoIGl0ZXJhdGlvbiwgbV9hbmltYXRpb25zLnNpemUoKSBkZWNyZWFzZXMgb3IgaSBpbmNy
ZW1lbnRzCisgICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5h
dGlvbi4KKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBtX2FuaW1hdGlvbnMuc2l6
ZSgpKSB7CisgICAgICAgIGJvb2wgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAg
ICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IHRydWU7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5pZCgpID09IG1fYW5pbWF0aW9uc1tq
XS0+aWQoKSAmJiAhbV9hbmltYXRpb25zW2pdLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkKKyAgICAg
ICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGkrKzsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0
aWNrQW5pbWF0aW9ucyhkb3VibGUgdCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpID09IFJ1bm5pbmcpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9hbmltYXRpb25z
W2ldLT5wcm9wZXJ0eSgpKSB7CisKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtOiB7CisgICAg
ICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICAgICAg
ICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPmdldFRyYW5zZm9ybU9wZXJhdGlvbnModCwgJm9wZXJh
dGlvbnMpIHx8IG1fYW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KHQpKQorICAgICAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKEZpbmlzaGVkLCB0KTsKKworICAg
ICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJlIGlmIGFic29sdXRlIG9yIHJlbGF0aXZlLiBBYnNv
bHV0ZSBmb3Igbm93LgorICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvQXBw
bHk7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBseShtX2NsaWVudC0+cmVuZGVyQm94
Qm9yZGVyU2l6ZSgpLCB0b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJh
bnNmb3JtKHRvQXBwbHkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjYXNlIE9wYWNpdHk6IHsKKyAgICAgICAgICAgICAgICBmbG9hdCBvcGFj
aXR5OworICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPmdldEZsb2F0KHQsICZv
cGFjaXR5KSB8fCBtX2FuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdCh0KSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9hbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShGaW5pc2hlZCwgdCk7CisKKyAg
ICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSAvLyBzd2l0Y2gKKyAg
ICAgICAgfSAvLyBpZiBydW5uaW5nCisgICAgfSAvLyBmb3IgZWFjaCBhbmltYXRpb24KK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGE5NWY2MWM4MWNmNTA5MmI5OWE2
ZGU2ZmUxZjhjZGI1ZmQ1MzZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmgKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsX2gKKyNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsX2gKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ7CitjbGFzcyBUcmFuc2Zv
cm1PcGVyYXRpb25zOworCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwgewor
cHVibGljOgorICAgIHR5cGVkZWYgaW50IElEOworCisgICAgZW51bSBSdW5TdGF0ZSB7CisgICAg
ICAgIC8vIFN0YXJ0IHRpbWUgVEJELgorICAgICAgICBXYWl0aW5nRm9yU3RhcnRUaW1lID0gMSwK
KyAgICAgICAgLy8gU3RhcnQgdGltZSBUQkQuCisgICAgICAgIFdhaXRpbmdGb3JUYXJnZXRBdmFp
bGFiaWxpdHksCisgICAgICAgIC8vIEhhcyBhIHN0YXJ0IHRpbWUgaW4gdGhlIGZ1dHVyZS4KKyAg
ICAgICAgV2FpdGluZ1RvUnVuLAorICAgICAgICAvLyBIYXZlIGEgc3RhcnQgdGltZSBpbiB0aGUg
cGFzdC4KKyAgICAgICAgUnVubmluZywKKyAgICAgICAgUGF1c2VkLAorICAgICAgICBGaW5pc2hl
ZCwKKyAgICAgICAgQWJvcnRlZAorICAgIH07CisKKyAgICBlbnVtIFByb3BlcnR5IHsKKyAgICAg
ICAgVHJhbnNmb3JtID0gMSwKKyAgICAgICAgT3BhY2l0eQorICAgIH07CisKKyAgICBzdHJ1Y3Qg
QW5pbWF0aW9uU3RhdGUgeworICAgICAgICBSdW5TdGF0ZSBydW5TdGF0ZTsKKyAgICAgICAgUHJv
cGVydHkgcHJvcGVydHk7CisgICAgICAgIGludCBpdGVyYXRpb25zOworICAgICAgICBJRCBpZDsK
KyAgICAgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjcmVhdGUoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1l
QmVnaW5UaW1lTXMpOworCisgICAgdm9pZCBhZGQoUGFzc093blB0cjxDQ0FuaW1hdGlvbj4sIGNv
bnN0IEFuaW1hdGlvblN0YXRlJik7CisgICAgdm9pZCBhYm9ydChJRCk7CisgICAgdm9pZCBwYXVz
ZShJRCk7CisgICAgdm9pZCByZXN1bWUoSUQpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIGFyZSBhbnkgY3VycmVudGx5IHJ1bm5pbmcgYW5pbWF0aW9ucy4KKyAgICBib29sIGlzQW5p
bWF0aW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgQ29udHJvbGxlZEFuaW1hdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBDb250cm9sbGVkQW5pbWF0aW9uKFBhc3NPd25QdHI8
Q0NBbmltYXRpb24+IGFuaW0sIGNvbnN0IEFuaW1hdGlvblN0YXRlJiBzdGF0ZSkKKyAgICAgICAg
ICAgIDogbV9hbmltYXRpb24oYW5pbSkKKyAgICAgICAgICAgICwgbV9zdGF0ZShzdGF0ZSkKKyAg
ICAgICAgICAgICwgbV9wYXVzZVRpbWUoMC4wKQorICAgICAgICAgICAgLCBtX3RvdGFsUGF1c2Vk
VGltZSgwLjApCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5Db250cm9sbGVkQW5pbWF0
aW9uKCkgeyB9CisKKyAgICAgICAgUHJvcGVydHkgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnByb3BlcnR5OyB9CisgICAgICAgIElEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5pZDsgfQorCisgICAgICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0OworICAgICAgICBib29s
IGhhc0R1cmF0aW9uKCkgY29uc3Q7CisKKyAgICAgICAgUnVuU3RhdGUgcnVuU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnJ1blN0YXRlOyB9CisgICAgICAgIHZvaWQgc2V0UnVuU3RhdGUo
UnVuU3RhdGUsIGRvdWJsZSB0KTsKKworICAgICAgICB2b2lkIHNldFN0YXJ0VGltZShkb3VibGUg
dCkgeyBtX3N0YXRlLnN0YXJ0VGltZSA9IHQ7IH0KKyAgICAgICAgZG91YmxlIHN0YXJ0VGltZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3RhcnRUaW1lOyB9CisKKyAgICAgICAgYm9vbCBnZXRG
bG9hdChkb3VibGUgdCwgZmxvYXQqIHZhbHVlKTsKKyAgICAgICAgYm9vbCBnZXRUcmFuc2Zvcm1P
cGVyYXRpb25zKGRvdWJsZSB0LCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWx1ZSk7CisKKyAgICAg
ICAgYm9vbCBpc0ZpbmlzaGVkQXQoZG91YmxlIHQpIGNvbnN0OworICAgICAgICBib29sIGlzRmlu
aXNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJ1blN0YXRlID09IEZpbmlzaGVkIHx8IG1f
c3RhdGUucnVuU3RhdGUgPT0gQWJvcnRlZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZG91
YmxlIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSB0KSBjb25zdDsKKworICAgICAg
ICBPd25QdHI8Q0NBbmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgICAgICBBbmltYXRpb25TdGF0
ZSBtX3N0YXRlOworCisgICAgICAgIC8vIFRoZXNlIGFyZSB1c2VkIGluIHRyaW1UaW1lVG9DdXJy
ZW50SXRlcmF0aW9uIHRvIGFjY291bnQgZm9yIHRpbWUKKyAgICAgICAgLy8gc3BlbnQgd2hpbGUg
cGF1c2VkLiBUaGlzIGlzIG5vdCBpbmNsdWRlZCBpbiBBbmltYXRpb25TdGF0ZSBzaW5jZSBpdAor
ICAgICAgICAvLyB0aGVyZSBpcyBhYnNvbHV0ZWx5IG5vIG5lZWQgZm9yIGNsaWVudHMgb2YgdGhp
cyBjb250cm9sbGVyIHRvIGtub3cKKyAgICAgICAgLy8gYWJvdXQgdGhlc2UgdmFsdWVzLgorICAg
ICAgICBkb3VibGUgbV9wYXVzZVRpbWU7CisgICAgICAgIGRvdWJsZSBtX3RvdGFsUGF1c2VkVGlt
ZTsKKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoU2V0PGludD4gUHJvcGVydGllczsKKworICAg
IC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIuCisgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCop
OworCisgICAgdm9pZCBzZXRTdGF0ZShJRCwgUnVuU3RhdGUpOworICAgIHZvaWQgcHJvbW90ZVN0
YXJ0aW5nVG9SdW5uaW5nKGRvdWJsZSB0KTsKKyAgICB2b2lkIHByb21vdGVTY2hlZHVsZWRUb1J1
bm5pbmcoZG91YmxlIHQpOworICAgIHZvaWQgcHJvbW90ZUVucXVldWVkVG9SdW5uaW5nKGRvdWJs
ZSB0KTsKKyAgICB2b2lkIHJlc29sdmVDb25mbGljdHMoZG91YmxlIHQpOworICAgIHZvaWQgcHVy
Z2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKKworICAgIHZvaWQgdGlja0FuaW1hdGlvbnMoZG91Ymxl
IHQpOworCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBWZWN0b3I8T3duUHRyPENvbnRyb2xsZWRBbmltYXRpb24+ID4gbV9hbmltYXRpb25z
OworICAgIGRvdWJsZSBtX2xhc3RUaWNrVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbF9oCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGUyYmY3MDM2YTM1OGZjZjQ5NjJmYzNjM2E3NGQzN2ZhY2Q5ZDE3
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudC5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudF9oCisj
ZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudF9oCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOworY2xh
c3MgSW50U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworCitjbGFzcyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCBm
bG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZs
b2F0KSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiByZW5k
ZXJCb3hCb3JkZXJTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25D
b250cm9sbGVySW1wbERpZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCop
ID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQppbmRleCBkYjk5ODk3YzI1MzdkZjFjOTEwZTAxYTdjZjNkZDZjODNhZGVmZDZmLi5lNWIxMzg1
MDdjMDA5NWYyZjIyZDEyZTFiODI3NWFhYzAwOTE0ODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKQEAgLTU3LDYgKzU3LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9DQ0RhbWFnZVRy
YWNrZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJj
ZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0
LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40OTMxNTc1MTJiNDIxZjNmMTZmNDU2NTVkMDJhY2NmOTJkODg1ZWFh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmgiCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbi5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudC5oIgorCisjaW5j
bHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIER1bW15Q29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQgeworcHVibGljOgorICAgIER1bW15Q29udHJvbGxlckNsaWVu
dCgpIDogbV9vcGFjaXR5KDAuMGYpIHsgfQorICAgIHZpcnR1YWwgfkR1bW15Q29udHJvbGxlckNs
aWVudCgpIHsgfQorCisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9vcGFjaXR5OyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkg
eyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CisgICAgdmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IH0KKyAgICB2aXJ0dWFsIGNvbnN0IElu
dFNpemUmIHJlbmRlckJveEJvcmRlclNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQ29udHJvbGxlckltcGxEaWRBY3RpdmF0ZShDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXIpCisgICAgeworICAgICAgICBtX2Fj
dGl2ZUNvbnRyb2xsZXJzLmFwcGVuZChjb250cm9sbGVyKTsKKyAgICB9CisKKyAgICBWZWN0b3I8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4mIGFjdGl2ZUNvbnRyb2xsZXJzKCkgeyBy
ZXR1cm4gbV9hY3RpdmVDb250cm9sbGVyczsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IG1fb3Bh
Y2l0eTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKKyAgICBJbnRTaXpl
IG1fc2l6ZTsKKyAgICBWZWN0b3I8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKj4gbV9h
Y3RpdmVDb250cm9sbGVyczsKK307CisKK2NsYXNzIER1bW15VHJhbnNmb3JtVHJhbnNpdGlvbiA6
IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgRHVtbXlUcmFuc2Zv
cm1UcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbikKKyAgICAgICAgOiBtX2R1cmF0aW9uKGR1cmF0
aW9uKQorICAgIHsgfQorCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVhbCBib29sIGhhc0R1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25z
KGRvdWJsZSB0LCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8v
IGRvZXMgbm90aGluZyBhdCBhbGwuCisgICAgICAgIHJldHVybiB0ID49IG1fZHVyYXRpb247Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGRvdWJsZSBtX2R1cmF0aW9uOworfTsKKworY2xhc3MgRHVt
bXlGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbiB7CitwdWJsaWM6Cisg
ICAgRHVtbXlGbG9hdFRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uLCBmbG9hdCBmcm9tLCBmbG9h
dCB0bykKKyAgICAgICAgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKQorICAgICAgICAsIG1fZnJvbShm
cm9tKQorICAgICAgICAsIG1fdG8odG8pCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBk
dXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aGFzRHVyYXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGdl
dEZsb2F0KGRvdWJsZSB0LCBmbG9hdCogdmFsdWUpCisgICAgeworICAgICAgICB0IC89IG1fZHVy
YXRpb247CisgICAgICAgIGlmICh0ID49IDEuMCkKKyAgICAgICAgICAgIHQgPSAxLjA7CisgICAg
ICAgICp2YWx1ZSA9ICgxLjAgLSB0KSAqIG1fZnJvbSArIHQgKiBtX3RvOworICAgICAgICByZXR1
cm4gdCA+PSAxLjA7CisgICAgfQorCitwcml2YXRlOgorICAgIGRvdWJsZSBtX2R1cmF0aW9uOwor
ICAgIGZsb2F0IG1fZnJvbTsKKyAgICBmbG9hdCBtX3RvOworfTsKKworY2xhc3MgRHVtbXlGbG9h
dFBhcmFtZXRyaWNBbmltYXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbiB7CitwdWJsaWM6
CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAwLjA7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzRHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBnZXRGbG9hdChkb3VibGUgdCwgZmxvYXQqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHQgKiB0KTsKKyAgICAgICAgcmV0dXJu
IHQgPj0gMS4wOworICAgIH0KK307CisKK3ZvaWQgYWRkQW5pbWF0aW9uKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCogY29udHJvbGxlciwgUGFzc093blB0cjxDQ0FuaW1hdGlvbj4gYW5p
bWF0aW9uLCBpbnQgaWQsIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6UHJvcGVydHkg
cHJvcGVydHksIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6UnVuU3RhdGUgcnVuU3Rh
dGUsIGRvdWJsZSB3aGVuLCBpbnQgaXRlcmF0aW9ucykKK3sKKyAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OkFuaW1hdGlvblN0YXRlIHN0YXRlOworICAgIHN0YXRlLnJ1blN0YXRl
ID0gcnVuU3RhdGU7CisgICAgc3RhdGUuc3RhcnRUaW1lID0gd2hlbjsKKyAgICBzdGF0ZS5pZCA9
IGlkOworICAgIHN0YXRlLnByb3BlcnR5ID0gcHJvcGVydHk7CisgICAgc3RhdGUuaXRlcmF0aW9u
cyA9IGl0ZXJhdGlvbnM7CisgICAgY29udHJvbGxlci0+YWRkKGFuaW1hdGlvbiwgc3RhdGUpOwor
fQorCisvLyBUcmFuc2l0aW9uIG9wYWNpdHkgZnJvbSAwIHRvIDEKK1RFU1QoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgVHJpdmlhbFRyYW5zaXRpb24pCit7CisgICAgRHVtbXlD
b250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgp
LAorICAgICAgICAgICAgICAgICBhZG9wdFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4w
LCAwLjBmLCAxLjBmKSksCisgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmls
aXR5LAorICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgIDEpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0Fu
aW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEuMCk7CisgICAgRVhQRUNUX0VRKDEuMGYsIGR1bW15Lm9wYWNp
dHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmlzQW5pbWF0aW5nKCkpOworfQor
CisvLyBRdWV1ZSB0d28gdHJhbnNpdGlvbnMuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQoreworICAgIER1bW15Q29udHJvbGxlckNsaWVu
dCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250
cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgm
ZHVtbXkpKTsKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAg
ICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwgMS4wZikp
LAorICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwKKyAgICAgICAg
ICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAxKTsKKyAgICBhZGRBbmltYXRpb24oY29u
dHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRU
cmFuc2l0aW9uKDEuMCwgMS4wZiwgMC41ZikpLAorICAgICAgICAgICAgICAgICAyLAorICAgICAg
ICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAg
ICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRh
cmdldEF2YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAg
ICAxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuMCk7CisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAgRVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNp
dHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjApOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmlzQW5pbWF0aW5nKCkpOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFj
aXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4wKTsKKyAgICBFWFBFQ1RfRVEoMC41
ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aXNBbmlt
YXRpbmcoKSk7Cit9CisKKy8vIEludGVycnVwdCBhIHRyYW5zaXRpb24gd2l0aCBhbm90aGVyIHRy
YW5zaXRpb24uCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEludGVy
cnVwdCkKK3sKKyAgICBEdW1teUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgYWRkQW5pbWF0
aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5ldyBEdW1t
eUZsb2F0VHJhbnNpdGlvbigxLjAsIDAuMGYsIDEuMGYpKSwKKyAgICAgICAgICAgICAgICAgMSwK
KyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpPcGFjaXR5
LAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OldhaXRp
bmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAg
ICAgICAgICAgMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmlzQW5pbWF0aW5nKCkpOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAg
ICAgICAgICAgICBhZG9wdFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4wLCAxLjBmLCAw
LjVmKSksCisgICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpXYWl0aW5nRm9yU3RhcnRUaW1lLAorICAgICAgICAgICAg
ICAgICAwLjAsIC8vIHN0YXJ0IHRpbWUgKGlnbm9yZWQpCisgICAgICAgICAgICAgICAgIDEpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41KTsgLy8gc2Vjb25kIGFuaW0gc3RhcnRzIE5PVy4K
KyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBFQ1Rf
RVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSk7
CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmlzQW5pbWF0aW5nKCkpOworfQorCisvLyBTY2hlZHVsZSB0d28gYW5pbWF0
aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVlLgorVEVT
VChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hl
bkFQcm9wZXJ0eUlzQmxvY2tlZCkKK3sKKyAgICBEdW1teUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7
CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
KyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
CisgICAgYWRkQW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFk
b3B0UHRyKG5ldyBEdW1teVRyYW5zZm9ybVRyYW5zaXRpb24oMS4wKSksCisgICAgICAgICAgICAg
ICAgIDEsIC8vIElECisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAg
IDAuMCwKKyAgICAgICAgICAgICAgICAgMSk7CisKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxl
ci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15VHJhbnNmb3JtVHJh
bnNpdGlvbigxLjApKSwKKyAgICAgICAgICAgICAgICAgMiwgLy8gSUQKKyAgICAgICAgICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpUcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2
YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAxKTsK
KworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAgICAgICAgICAgICBh
ZG9wdFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAxLjBmKSksCisgICAg
ICAgICAgICAgICAgIDIsIC8vIElECisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAgICAg
ICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgIDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMC4wKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEuMCk7CisgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5z
aXRpb24geWV0LgorICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQW5pbWF0aW5nKCkpOwor
ICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIC8vIFRoZSB0aGUgZmxv
YXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxLjAgYW5kIHNob3VsZCBi
ZSBkb25lLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4wKTsKKyAgICBFWFBFQ1RfRVEoMS4w
ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aXNBbmlt
YXRpbmcoKSk7Cit9CisKKy8vIFNjaGVkdWxlIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhl
ciB3aXRoIGRpZmZlcmVudCBsZW5ndGhzIGFuZCBhbm90aGVyCisvLyBhbmltYXRpb24gcXVldWVk
IHRvIHN0YXJ0IHdoZW4gdGhlIHNob3J0ZXIgYW5pbWF0aW9uIGZpbmlzaGVzIChzaG91bGQgd2Fp
dAorLy8gZm9yIGJvdGggdG8gZmluaXNoKS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsVGVzdCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5nKQoreworICAgIER1
bW15Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVy
LmdldCgpLAorICAgICAgICAgICAgICAgICBhZG9wdFB0cihuZXcgRHVtbXlUcmFuc2Zvcm1UcmFu
c2l0aW9uKDIuMCkpLAorICAgICAgICAgICAgICAgICAxLCAvLyBJRAorICAgICAgICAgICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OlRyYW5zZm9ybSwKKyAgICAgICAgICAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5LAorICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgIDEpOwor
CisgICAgYWRkQW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFk
b3B0UHRyKG5ldyBEdW1teUZsb2F0VHJhbnNpdGlvbigxLjAsIDAuMGYsIDEuMGYpKSwKKyAgICAg
ICAgICAgICAgICAgMSwgLy8gSUQKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpPcGFjaXR5LAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAg
ICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgMSk7CisgICAgYWRkQW5pbWF0aW9uKGNvbnRy
b2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5ldyBEdW1teUZsb2F0VHJh
bnNpdGlvbigxLjAsIDEuMGYsIDAuNWYpKSwKKyAgICAgICAgICAgICAgICAgMiwgLy8gSUQKKyAg
ICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpPcGFjaXR5LAor
ICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OldhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAg
ICAgICAgMSk7CisKKyAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93
LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICAvLyBUaGUgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIGhhdmUgZmluaXNoZWQgYXQg
dGltZSAxLjAsIGJ1dCB0aGUgZ3JvdXAKKyAgICAvLyBvZiBhbmltYXRpb25zIHdpdGggaWQgMSBk
b24ndCBmaW5pc2ggdW50aWwgdGltZSAyLjAgYmVjYXVzZSBvZiB0aGUgbGVuZ3RoCisgICAgLy8g
b2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjAp
OworICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFydGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHll
dC4KKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBF
Q1RfRVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIC8vIFRoZSB0aGUgc2Vjb25kIG9w
YWNpdHkgYW5pbWF0aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIuMCBhbmQgc2hvdWxkIGJlCisg
ICAgLy8gZG9uZSBieSB0aW1lIDMuMAorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMy4wKTsKKyAg
ICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29u
dHJvbGxlci0+aXNBbmltYXRpbmcoKSk7Cit9CisKKy8vIFNjaGVkdWxlIGFuIGFuaW1hdGlvbiB0
byBzdGFydCBpbiB0aGUgZnV0dXJlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKK3sKKyAgICBEdW1teUNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7CisgICAgYWRkQW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAg
ICAgIGFkb3B0UHRyKG5ldyBEdW1teUZsb2F0VHJhbnNpdGlvbigxLjAsIDAuMGYsIDEuMGYpKSwK
KyAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpPcGFjaXR5LAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OldhaXRpbmdUb1J1biwKKyAgICAgICAgICAgICAgICAgMS4wLCAvLyBz
dGFydCB0aW1lCisgICAgICAgICAgICAgICAgIDEpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBF
WFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEuMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAg
RVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyLjApOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVD
VF9GQUxTRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKK30KKworLy8gU2NoZWR1bGUgYW4g
YW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmlu
ZyBhbmltYXRpb24uCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNj
aGVkdWxlZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uKQoreworICAgIER1bW15
Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQo
KSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDIu
MCwgMC4wZiwgMS4wZikpLAorICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAxKTsKKyAgICBh
ZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIo
bmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEuMCwgMC41ZiwgMC4wZikpLAorICAgICAgICAgICAg
ICAgICAyLCAvLyBJRAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6V2FpdGluZ1RvUnVuLAorICAgICAgICAgICAgICAgICAxLjAsIC8vIHN0YXJ0IHRp
bWUKKyAgICAgICAgICAgICAgICAgMSk7CisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0
aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAu
MCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAgRVhQ
RUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQW5pbWF0aW5nKCkpOworICAgIEVY
UEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDEuMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAg
RVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgyLjApOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVD
VF9GQUxTRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKK30KKworLy8gU2NoZWR1bGUgYW4g
YW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmlu
ZyBhbmltYXRpb24KKy8vIGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVk
IHRvIHN0YXJ0IGxhdGVyLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5R
dWV1ZSkKK3sKKyAgICBEdW1teUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgYWRkQW5pbWF0
aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5ldyBEdW1t
eUZsb2F0VHJhbnNpdGlvbigyLjAsIDAuMGYsIDEuMGYpKSwKKyAgICAgICAgICAgICAgICAgMSwg
Ly8gSUQKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpP
cGFjaXR5LAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgIDAuMCwKKyAg
ICAgICAgICAgICAgICAgMSk7CisgICAgYWRkQW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisg
ICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5ldyBEdW1teUZsb2F0VHJhbnNpdGlvbigyLjAsIDAu
NWYsIDAuMGYpKSwKKyAgICAgICAgICAgICAgICAgMiwgLy8gSUQKKyAgICAgICAgICAgICAgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpPcGFjaXR5LAorICAgICAgICAgICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OldhaXRpbmdUb1J1biwKKyAgICAgICAg
ICAgICAgICAgMS4wLCAvLyBzdGFydCB0aW1lCisgICAgICAgICAgICAgICAgIDEpOworICAgIGFk
ZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAgICAgICAgICAgICBhZG9wdFB0cihu
ZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAwLjc1ZikpLAorICAgICAgICAgICAg
ICAgICAzLCAvLyBJRAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAg
MC4wLAorICAgICAgICAgICAgICAgICAxKTsKKyAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5z
aXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBF
WFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDAuNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAg
RVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmlzQW5pbWF0aW5nKCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4wKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEo
MC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMuMCk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAgRVhQRUNUX0VR
KDAuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSg0LjApOwor
ICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhIGxvb3Bpbmcg
YW5pbWF0aW9uIGxvb3BzIGFuZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMu
CitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5n
KQoreworICAgIER1bW15Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBhZGRBbmltYXRpb24o
Y29udHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15Rmxv
YXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwgMS4wZikpLAorICAgICAgICAgICAgICAgICAxLAorICAg
ICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisg
ICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0Zv
clRhcmdldEF2YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAg
ICAgICAzKTsgLy8gbG9vcCBpdGVyYXRpb25zCisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAu
MCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAgRVhQ
RUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgx
LjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBF
WFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLjc1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAg
ICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgyLjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsK
KyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgyLjc1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygp
KTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgzLjApOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5pc0FuaW1hdGlu
ZygpKTsKKyAgICBFWFBFQ1RfRVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIC8vIEp1
c3QgYmUgZXh0cmEgc3VyZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQuMCk7CisgICAgRVhQ
RUNUX0VRKDEuMGYsIGR1bW15Lm9wYWNpdHkoKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhbiBpbmZp
bml0ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGlsIGFib3J0ZWQuCitU
RVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykK
K3sKKyAgICBEdW1teUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgaW50IGlkID0gMTsKKyAg
ICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQ
dHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwgMS4wZikpLAorICAgICAgICAg
ICAgICAgICBpZCwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpPcGFjaXR5LAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgIDAu
MCwKKyAgICAgICAgICAgICAgICAgLTEpOyAvLyBsb29wIGl0ZXJhdGlvbnMKKworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1h
dGluZygpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQW5p
bWF0aW5nKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlz
QW5pbWF0aW5nKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKwor
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1KTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15
Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1KTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEo
MC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBjb250cm9sbGVyLT5hYm9ydChpZCk7Cisg
ICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmlzQW5pbWF0aW5nKCkpOworICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCBwYXVzaW5nIGFuZCByZXN1
bWluZy4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1
bWUpCit7CisgICAgRHVtbXlDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAgIGludCBpZCA9IDE7
CisgICAgYWRkQW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFk
b3B0UHRyKG5ldyBEdW1teUZsb2F0VHJhbnNpdGlvbigxLjAsIDAuMGYsIDEuMGYpKSwKKyAgICAg
ICAgICAgICAgICAgaWQsCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgICAg
ICAwLjAsCisgICAgICAgICAgICAgICAgIDEpOyAvLyBsb29wIGl0ZXJhdGlvbnMKKworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0Fu
aW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNB
bmltYXRpbmcoKSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAg
ICBjb250cm9sbGVyLT5wYXVzZShpZCk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQu
MCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBbmltYXRpbmcoKSk7CisgICAgRVhQ
RUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBjb250cm9sbGVyLT5yZXN1bWUo
aWQpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15
Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjUpOworICAgIEVYUEVD
VF9GQUxTRShjb250cm9sbGVyLT5pc0FuaW1hdGluZygpKTsKKyAgICBFWFBFQ1RfRVEoMS4wZiwg
ZHVtbXkub3BhY2l0eSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120177</attachid>
            <date>2011-12-21 07:08:31 -0800</date>
            <delta_ts>2012-01-05 09:54:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20111221100828.patch</filename>
            <type>text/plain</type>
            <size>49208</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdjNTJiZjYxMGQyNTMx
NjNjNWYzNzcxYWFhNzZiMWI0ZThlNWJiMC4uOTQzYzEzYzBmZDBkZTVkYjVhMzU0MmJkNDM4NmZm
NjM3ZGNiODZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDExLTEyLTIxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVu
aXQgdGVzdHMgZm9yIHRoZSBjb250cm9sbGVyIGFyZSBpbiBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxUZXN0LmNwcAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q0NBbmltYXRpb246On5DQ0FuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0Zsb2F0QW5pbWF0aW9uOjp+Q0NGbG9hdEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0Zsb2F0QW5pbWF0aW9uOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVHJhbnNmb3Jt
QW5pbWF0aW9uOjp+Q0NUcmFuc2Zvcm1BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
cmFuc2Zvcm1BbmltYXRpb246OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdEFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b1RyYW5zZm9ybUFuaW1hdGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OkFuaW1hdGlvblN0YXRlOjpBbmltYXRpb25TdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OkFjdGl2ZUFuaW1hdGlvbjo6ZHVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpBY3RpdmVBbmltYXRp
b246Omhhc0R1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6QWN0aXZlQW5pbWF0aW9uOjpzZXRSdW5TdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkFjdGl2ZUFuaW1hdGlvbjo6Z2V0
RmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpBY3RpdmVBbmltYXRpb246OmdldFRyYW5zZm9ybU9wZXJhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpBY3RpdmVBbmltYXRpb246Omlz
RmluaXNoZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OkFjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzZXRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnByb21v
dGVTdGFydGluZ1RvUnVubmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OnByb21vdGVTY2hlZHVsZWRUb1J1bm5pbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpwcm9tb3RlRW5xdWV1ZWRUb1J1
bm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpyZXNvbHZlQ29uZmxpY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50Ojp+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YWJv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpw
YXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OkFjdGl2ZUFuaW1hdGlvbjo6QWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6QWN0aXZlQW5pbWF0aW9uOjp+QWN0aXZl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6QWN0aXZlQW5pbWF0aW9uOjpwcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkFjdGl2ZUFuaW1hdGlvbjo6aWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpBY3RpdmVBbmltYXRp
b246OnJ1blN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6QWN0aXZlQW5pbWF0aW9uOjpzZXRTdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpBY3RpdmVBbmltYXRpb246OnN0YXJ0
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OkFjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZCk6CisKIDIwMTEtMTItMTUgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICA8dGFibGU+PHRyPjx0ZD48c3ZnPjxkZXNj
Pjx0ZD4gcGFyc2VzIGluY29ycmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDRl
YzEyZmM4NmNlMmY2MDI1MDk5OGJiNjAyMDEyNGVlNDA3ZjM2Y2QuLjVhZTFhMTM1ZjE5ODdkMDFj
YzgwYzA1ZWRmYTE1YWFhYWRjNGQ4ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzUgQEAKKzIwMTEtMTItMjEgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgYSBiYXNlLWNsYXNzIENDQW5pbWF0aW9u
IHRvIHJlcHJlc2VudCBjb21wb3NpdG9yIGFuaW1hdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMjMzCisKKyAgICAgICAgVW5pdCB0ZXN0IGZv
ciBjb250cm9sbGVyIGlzIGluIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3Bw
CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEdW1t
eUNvbnRyb2xsZXJDbGllbnQ6OkR1bW15Q29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6On5EdW1teUNvbnRyb2xsZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RHVtbXlDb250cm9sbGVyQ2xpZW50OjpvcGFjaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkR1bW15Q29udHJvbGxlckNsaWVudDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpEdW1teUNvbnRyb2xsZXJDbGllbnQ6OnJlbmRlckJveEJvcmRlclNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHVtbXlDb250cm9sbGVyQ2xpZW50OjphbmltYXRpb25Db250cm9sbGVySW1w
bERpZEFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15Q29udHJvbGxlckNsaWVudDo6
YWN0aXZlQ29udHJvbGxlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlUcmFuc2Zvcm1UcmFu
c2l0aW9uOjpEdW1teVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHVt
bXlUcmFuc2Zvcm1UcmFuc2l0aW9uOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEdW1t
eVRyYW5zZm9ybVRyYW5zaXRpb246Omhhc0R1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkR1
bW15VHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpEdW1teUZsb2F0VHJhbnNpdGlvbjo6RHVtbXlGbG9hdFRyYW5zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RHVtbXlGbG9hdFRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkR1bW15RmxvYXRUcmFuc2l0aW9uOjpoYXNEdXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpEdW1teUZsb2F0VHJhbnNpdGlvbjo6Z2V0RmxvYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RHVtbXlGbG9hdFBhcmFtZXRyaWNBbmltYXRpb246OmR1cmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkR1bW15RmxvYXRQYXJhbWV0cmljQW5pbWF0aW9uOjpoYXNEdXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEdW1teUZsb2F0UGFyYW1ldHJpY0FuaW1hdGlvbjo6Z2V0RmxvYXQp
OgorICAgICAgICAoV2ViQ29yZTo6YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRF
U1QpOgorCiAyMDExLTEyLTE1ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIEFkZCBmb3JVc2VPbkFub3RoZXJUaHJlYWQgdG8gV2ViR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwYjQzNjljYmQyYTIzODdk
MGY2NTEyZWIxNzEyZDBhMjQyOGMyZTlhLi42ZGM4N2MyMjEyM2ExN2JkZTU4MmM4NjdkYzc1YTUy
ZTZhZWE3NjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTk1LDYgKzM1OTUsNyBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExh
eWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NBbmltYXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQuY3BwJywKQEAg
LTM2MTIsNiArMzYxMyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclF1YWQuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1h
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjYxN2M5MjNmYTdlZGJmNGMwOGRjNzRiZjc0Y2EwOWJiMzRkMWJl
MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0FuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NBbmltYXRpb25faAorI2RlZmluZSBDQ0FuaW1hdGlvbl9oCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKKworY2xhc3MgQ0NBbmlt
YXRpb24geworcHVibGljOgorICAgIGVudW0gVHlwZSB7IEZsb2F0QW5pbWF0aW9uLCBUcmFuc2Zv
cm1BbmltYXRpb24gfTsKKworICAgIHZpcnR1YWwgfkNDQW5pbWF0aW9uKCkgeyB9CisKKyAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
RHVyYXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7
Cit9OworCitjbGFzcyBDQ0Zsb2F0QW5pbWF0aW9uIDogcHVibGljIENDQW5pbWF0aW9uIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0Zsb2F0QW5pbWF0aW9uKCkgeyB9CisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMgZmluaXNoZWQuCisgICAgdmlydHVhbCBib29sIGdl
dEZsb2F0KGRvdWJsZSB0LCBmbG9hdCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0QW5pbWF0aW9uOyB9Cit9OworCitjbGFzcyBDQ1RyYW5z
Zm9ybUFuaW1hdGlvbiA6IHB1YmxpYyBDQ0FuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q0NUcmFuc2Zvcm1BbmltYXRpb24oKSB7IH0KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IGFuaW1hdGlvbiBpcyBmaW5pc2hlZC4KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0VHJhbnNmb3JtT3Bl
cmF0aW9ucyhkb3VibGUgdCwgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsdWUpID0gMDsKKyAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRyYW5zZm9ybUFuaW1hdGlvbjsgfQor
fTsKKworaW5saW5lIENDRmxvYXRBbmltYXRpb24qIHRvRmxvYXRBbmltYXRpb24oQ0NBbmltYXRp
b24qIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPnR5cGUoKSA9PSAg
Q0NBbmltYXRpb246OkZsb2F0QW5pbWF0aW9uKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0NG
bG9hdEFuaW1hdGlvbio+KG9iamVjdCk7Cit9CisKK2lubGluZSBDQ1RyYW5zZm9ybUFuaW1hdGlv
biogdG9UcmFuc2Zvcm1BbmltYXRpb24oQ0NBbmltYXRpb24qIG9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPnR5cGUoKSA9PSAgQ0NBbmltYXRpb246OlRyYW5zZm9ybUFu
aW1hdGlvbik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENDVHJhbnNmb3JtQW5pbWF0aW9uKj4o
b2JqZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmlt
YXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk4YTdhZWFlOWNjODk3YjRlMGJiNjRiNzRjOTcwYWYy
OGYxMjZhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTAs
MCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgorCisjaW5jbHVkZSAiVHJh
bnNmb3JtT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6QW5pbWF0aW9uU3RhdGU6OkFuaW1hdGlvblN0YXRlKElEIGlk
LCBSdW5TdGF0ZSBydW5TdGF0ZSwgUHJvcGVydHkgcHJvcGVydHksIGludCBpdGVyYXRpb25zLCBk
b3VibGUgc3RhcnRUaW1lKQorICAgIDogaWQoaWQpCisgICAgLCBydW5TdGF0ZShydW5TdGF0ZSkK
KyAgICAsIHByb3BlcnR5KHByb3BlcnR5KQorICAgICwgaXRlcmF0aW9ucyhpdGVyYXRpb25zKQor
ICAgICwgc3RhcnRUaW1lKHN0YXJ0VGltZSkKK3sgfQorCisvLyBzdGF0aWMKK1Bhc3NPd25QdHI8
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIGNsaWVu
dCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbChjbGllbnQpKTsKK30KKworCitDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fbGFzdFRp
Y2tUaW1lKDAuMCkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3sKKyAgICBwcm9tb3RlU3RhcnRp
bmdUb1J1bm5pbmcoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBwcm9tb3RlU2NoZWR1bGVkVG9S
dW5uaW5nKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgcHJvbW90ZUVucXVldWVkVG9SdW5uaW5n
KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgcmVzb2x2ZUNvbmZsaWN0cyhmcmFtZUJlZ2luVGlt
ZVNlY3MpOworICAgIHRpY2tBbmltYXRpb25zKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgcHVy
Z2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKKyAgICBwcm9tb3RlRW5xdWV1ZWRUb1J1bm5pbmcoZnJh
bWVCZWdpblRpbWVTZWNzKTsKKyAgICBtX2xhc3RUaWNrVGltZSA9IGZyYW1lQmVnaW5UaW1lU2Vj
czsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFkZChQYXNzT3du
UHRyPENDQW5pbWF0aW9uPiBhbmltLCBjb25zdCBBbmltYXRpb25TdGF0ZSYgc3RhdGUpCit7Cisg
ICAgbV9hbmltYXRpb25zLmFwcGVuZChhZG9wdFB0cihuZXcgQWN0aXZlQW5pbWF0aW9uKGFuaW0s
IHN0YXRlKSkpOworfQorCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aXNB
Y3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2FuaW1hdGlvbnMuc2l6ZSgpOworfQorCitk
b3VibGUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpBY3RpdmVBbmltYXRpb246OmR1
cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS5pdGVyYXRpb25zICogbV9hbmlt
YXRpb24tPmR1cmF0aW9uKCk7Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsOjpBY3RpdmVBbmltYXRpb246Omhhc0R1cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9hbmltYXRpb24tPmhhc0R1cmF0aW9uKCkgJiYgbV9zdGF0ZS5pdGVyYXRpb25zID4gMDsKK30K
Kwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkFjdGl2ZUFuaW1hdGlvbjo6
c2V0UnVuU3RhdGUoUnVuU3RhdGUgcnVuU3RhdGUsIGRvdWJsZSB0KQoreworICAgIC8vIEZJWE1F
OiBldmVudHVhbGx5IHdlIHdpbGwgd2FudCB0byBub3RpZnkgb2JzZXJ2ZXJzIGhlcmUuCisgICAg
c3dpdGNoIChydW5TdGF0ZSkgeworICAgIGNhc2UgUnVubmluZzoKKyAgICAgICAgaWYgKG1fc3Rh
dGUucnVuU3RhdGUgPT0gUGF1c2VkKQorICAgICAgICAgICAgbV90b3RhbFBhdXNlZFRpbWUgKz0g
dCAtIG1fcGF1c2VUaW1lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdXNlZDoKKyAgICAg
ICAgbV9wYXVzZVRpbWUgPSB0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhaXRpbmdGb3JT
dGFydFRpbWU6CisgICAgY2FzZSBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5OgorICAgIGNh
c2UgV2FpdGluZ1RvUnVuOgorICAgIGNhc2UgRmluaXNoZWQ6CisgICAgY2FzZSBBYm9ydGVkOgor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV9zdGF0ZS5ydW5TdGF0ZSA9IHJ1blN0YXRlOwor
fQorCitib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6QWN0aXZlQW5pbWF0aW9u
OjpnZXRGbG9hdChkb3VibGUgdCwgZmxvYXQqIHZhbHVlKQoreworICAgIHQgPSB0cmltVGltZVRv
Q3VycmVudEl0ZXJhdGlvbih0KTsKKyAgICBDQ0Zsb2F0QW5pbWF0aW9uKiBmbG9hdEFuaW1hdGlv
biA9IHRvRmxvYXRBbmltYXRpb24obV9hbmltYXRpb24uZ2V0KCkpOworICAgIHJldHVybiBmbG9h
dEFuaW1hdGlvbiAmJiBmbG9hdEFuaW1hdGlvbi0+Z2V0RmxvYXQodCwgdmFsdWUpOworfQorCiti
b29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6QWN0aXZlQW5pbWF0aW9uOjpnZXRU
cmFuc2Zvcm1PcGVyYXRpb25zKGRvdWJsZSB0LCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWx1ZSkK
K3sKKyAgICB0ID0gdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24odCk7CisgICAgQ0NUcmFuc2Zv
cm1BbmltYXRpb24qIHRyYW5zZm9ybUFuaW1hdGlvbiA9IHRvVHJhbnNmb3JtQW5pbWF0aW9uKG1f
YW5pbWF0aW9uLmdldCgpKTsKKyAgICByZXR1cm4gdHJhbnNmb3JtQW5pbWF0aW9uICYmIHRyYW5z
Zm9ybUFuaW1hdGlvbi0+Z2V0VHJhbnNmb3JtT3BlcmF0aW9ucyh0LCB2YWx1ZSk7Cit9CisKK2Jv
b2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpBY3RpdmVBbmltYXRpb246OmlzRmlu
aXNoZWRBdChkb3VibGUgdCkgY29uc3QKK3sKKyAgICByZXR1cm4gcnVuU3RhdGUoKSA9PSBSdW5u
aW5nICYmIGhhc0R1cmF0aW9uKCkgJiYgZHVyYXRpb24oKSA8PSB0IC0gc3RhcnRUaW1lKCkgLSBt
X3RvdGFsUGF1c2VkVGltZTsKK30KKworZG91YmxlIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6QWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUg
dCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm5lZCB0aW1lIHNob3VsZCBhbHdheXMgYmUgcmVsYXRp
dmUgdG8gdGhlIHN0YXJ0IHRpbWUgYW5kIHNob3VsZCBzdWJ0cmFjdAorICAgIC8vIGFsbCB0aW1l
IHNwZW50IHBhdXNlZAorICAgIHQgLT0gbV9zdGF0ZS5zdGFydFRpbWUgKyBtX3RvdGFsUGF1c2Vk
VGltZTsKKworICAgIC8vIEFsd2F5cyByZXR1cm4gemVybyBpZiB3ZSBoYXZlIG5vIGl0ZXJhdGlv
bnMuCisgICAgaWYgKCFtX3N0YXRlLml0ZXJhdGlvbnMpCisgICAgICAgIHJldHVybiAwLjA7CisK
KyAgICAvLyBDYW5ub3QgdHJpbSB0aW1lIGlmIHdlIGhhdmVuJ3QgZ290IGEgcmVsaWFibGUgZHVy
YXRpb24uCisgICAgaWYgKCFtX2FuaW1hdGlvbi0+aGFzRHVyYXRpb24oKSkKKyAgICAgICAgcmV0
dXJuIHQ7CisKKyAgICAvLyBJZiBsZXNzIHRoYW4gYW4gaXRlcmF0aW9uIGR1cmF0aW9uLCBqdXN0
IHJldHVybiB0LgorICAgIGlmICh0IDwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpCisgICAgICAg
IHJldHVybiB0OworCisgICAgLy8gSWYgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0b3Rh
bCBkdXJhdGlvbiwgcmV0dXJuIGl0ZXJhdGlvbiBkdXJhdGlvbi4KKyAgICBpZiAoaGFzRHVyYXRp
b24oKSAmJiB0ID49IGR1cmF0aW9uKCkpCisgICAgICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKTsKKworICAgIC8vIEZpbmFsbHksIHJldHVybiB4IHdoZXJlIHQgPSB4ICsgbiAqIG1f
YW5pbWF0aW9uLT5kdXJhdGlvbigpIGZvciBzb21lIHBvc2l0aXZlIGludGVnZXIgbi4KKyAgICBy
ZXR1cm4gZm1vZCh0LCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Cit9CisKK3ZvaWQgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzZXRTdGF0ZShJRCBpZCwgUnVuU3RhdGUgc3RhdGUp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
CisgICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPmlkKCkgPT0gaWQpCisgICAgICAgICAgICBt
X2FuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKHN0YXRlLCBtX2xhc3RUaWNrVGltZSk7CisKKyAg
ICAvLyBJZiBhbnlvbmUncyBmaW5pc2hlZCwgcHVyZ2UgdGhlbSBub3cuCisgICAgcHVyZ2VGaW5p
c2hlZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OnByb21vdGVTdGFydGluZ1RvUnVubmluZyhkb3VibGUgdCkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9h
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IFdhaXRpbmdGb3JTdGFydFRpbWUpIHsKKyAgICAg
ICAgICAgIG1fYW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoUnVubmluZywgdCk7CisgICAgICAg
ICAgICBtX2FuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZSh0KTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnByb21vdGVTY2hlZHVs
ZWRUb1J1bm5pbmcoZG91YmxlIHQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Fu
aW1hdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPnJ1blN0
YXRlKCkgPT0gV2FpdGluZ1RvUnVuICYmIG1fYW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0g
dCkKKyAgICAgICAgICAgIG1fYW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoUnVubmluZywgdCk7
Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpwcm9tb3RlRW5xdWV1
ZWRUb1J1bm5pbmcoZG91YmxlIHQpCit7CisgICAgLy8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHBy
b3BlcnRpZXMuCisgICAgUHJvcGVydGllcyBibG9ja2VkUHJvcGVydGllczsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1f
YW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBSdW5uaW5nIHx8IG1fYW5pbWF0aW9uc1tpXS0+
cnVuU3RhdGUoKSA9PSBGaW5pc2hlZCkKKyAgICAgICAgICAgIGJsb2NrZWRQcm9wZXJ0aWVzLmFk
ZChtX2FuaW1hdGlvbnNbaV0tPnByb3BlcnR5KCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gaWYgaXQncyBlbnF1
ZXVlZAorICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IFdhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkpIHsKKyAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIHByb3Bl
cnRpZXMgZm9yIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBpZCAodGhleSBzaG91bGQgYWxsIGFs
c28gYmUgZW5xdWV1ZWQpCisgICAgICAgICAgICBQcm9wZXJ0aWVzIGVucXVldWVkUHJvcGVydGll
czsKKyAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQobV9hbmltYXRpb25zW2ldLT5w
cm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYW5p
bWF0aW9ucy5zaXplKCk7ICsraikKKyAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25zW2ld
LT5pZCgpID09IG1fYW5pbWF0aW9uc1tqXS0+aWQoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5x
dWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FuaW1hdGlvbnNbal0tPnByb3BlcnR5KCkpOworCisgICAg
ICAgICAgICBib29sIG51bGxJbnRlcnNlY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgZm9yIChQ
cm9wZXJ0aWVzOjppdGVyYXRvciBwSXRlciA9IGVucXVldWVkUHJvcGVydGllcy5iZWdpbigpOyBw
SXRlciAhPSBlbnF1ZXVlZFByb3BlcnRpZXMuZW5kKCk7ICsrcEl0ZXIpCisgICAgICAgICAgICAg
ICAgaWYgKCFibG9ja2VkUHJvcGVydGllcy5hZGQoKnBJdGVyKS5zZWNvbmQpCisgICAgICAgICAg
ICAgICAgICAgIG51bGxJbnRlcnNlY3Rpb24gPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gaWYg
dGhlcmUncyBub3RoaW5nIGluIGNvbW1vbiwgc3RhcnQgdGhlbSB1cC4KKyAgICAgICAgICAgIGlm
IChudWxsSW50ZXJzZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgbV9hbmltYXRpb25zW2ldLT5z
ZXRSdW5TdGF0ZShSdW5uaW5nLCB0KTsKKyAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbnNbaV0t
PnNldFN0YXJ0VGltZSh0KTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7
IGogPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fYW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBtX2FuaW1hdGlvbnNbal0tPmlkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uc1tqXS0+c2V0UnVuU3RhdGUoUnVubmluZywg
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbnNbal0tPnNldFN0YXJ0VGlt
ZSh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OnJlc29sdmVDb25mbGljdHMoZG91YmxlIHQpCit7CisgICAgLy8gRmluZCBhbnkg
YW5pbWF0aW9ucyB0aGF0IGFyZSBhbmltYXRpbmcgdGhlIHNhbWUgcHJvcGVydHkgYW5kIHJlc29s
dmUgdGhlCisgICAgLy8gY29uZmljdC4gV2UgY291bGQgZXZlbnR1YWxseSBibGVuZCwgYnV0IGZv
ciBub3cgd2UnbGwganVzdCBhYm9ydCB0aGUKKyAgICAvLyBwcmV2aW91cyBhbmltYXRpb24gKHdo
ZXJlICdwcmV2aW91cycgbWVhbnM6ICgxKSBoYXMgYSBwcmlvciBzdGFydCB0aW1lIG9yCisgICAg
Ly8gKDIpIGhhcyBhbiBlcXVhbCBzdGFydCB0aW1lLCBidXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1
ZSBlYXJsaWVyLCBpLmUuLAorICAgIC8vIGhhcyBhIGxvd2VyIGluZGV4IGluIG1fYW5pbWF0aW9u
cykuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBSdW5uaW5nKSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FuaW1hdGlvbnMuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25zW2pdLT5ydW5TdGF0
ZSgpID09IFJ1bm5pbmcgJiYgbV9hbmltYXRpb25zW2ldLT5wcm9wZXJ0eSgpID09IG1fYW5pbWF0
aW9uc1tqXS0+cHJvcGVydHkoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRp
b25zW2ldLT5zdGFydFRpbWUoKSA+IG1fYW5pbWF0aW9uc1tqXS0+c3RhcnRUaW1lKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKEFib3J0ZWQs
IHQpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2FuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKEFib3J0ZWQsIHQpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRBbmltYXRpb25zKCkKK3sKKyAgICAv
LyBlYWNoIGl0ZXJhdGlvbiwgbV9hbmltYXRpb25zLnNpemUoKSBkZWNyZWFzZXMgb3IgaSBpbmNy
ZW1lbnRzCisgICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5h
dGlvbi4KKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBtX2FuaW1hdGlvbnMuc2l6
ZSgpKSB7CisgICAgICAgIGJvb2wgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAg
ICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IHRydWU7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5pZCgpID09IG1fYW5pbWF0aW9uc1tq
XS0+aWQoKSAmJiAhbV9hbmltYXRpb25zW2pdLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkKKyAgICAg
ICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGkrKzsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0
aWNrQW5pbWF0aW9ucyhkb3VibGUgdCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpID09IFJ1bm5pbmcpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9hbmltYXRpb25z
W2ldLT5wcm9wZXJ0eSgpKSB7CisKKyAgICAgICAgICAgIGNhc2UgVHJhbnNmb3JtOiB7CisgICAg
ICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICAgICAg
ICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPmdldFRyYW5zZm9ybU9wZXJhdGlvbnModCwgJm9wZXJh
dGlvbnMpIHx8IG1fYW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KHQpKQorICAgICAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKEZpbmlzaGVkLCB0KTsKKworICAg
ICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJlIGlmIGFic29sdXRlIG9yIHJlbGF0aXZlLiBBYnNv
bHV0ZSBmb3Igbm93LgorICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvQXBw
bHk7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBseShGbG9hdFNpemUoKSwgdG9BcHBs
eSk7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybSh0b0FwcGx5KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBP
cGFjaXR5OiB7CisgICAgICAgICAgICAgICAgZmxvYXQgb3BhY2l0eTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9hbmltYXRpb25zW2ldLT5nZXRGbG9hdCh0LCAmb3BhY2l0eSkgfHwgbV9hbmltYXRp
b25zW2ldLT5pc0ZpbmlzaGVkQXQodCkpCisgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9u
c1tpXS0+c2V0UnVuU3RhdGUoRmluaXNoZWQsIHQpOworCisgICAgICAgICAgICAgICAgbV9jbGll
bnQtPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0gLy8gaWYgcnVubmlu
ZworICAgIH0gLy8gZm9yIGVhY2ggYW5pbWF0aW9uCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjE0OTRjNzc1MTkyM2E3MGEyNTNmYWM1MTkwNmNmODdhZWZiODc0Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCkBAIC0wLDAgKzEsMTcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbF9o
CisjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbF9oCisKKyNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0
cml4OworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAw
OworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1w
bERpZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopID0gMDsKK307CisK
K2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBpbnQgSUQ7CisKKyAgICBlbnVtIFJ1blN0YXRlIHsKKyAgICAgICAgLy8gU3RhcnQgdGlt
ZSBUQkQuCisgICAgICAgIFdhaXRpbmdGb3JTdGFydFRpbWUgPSAxLAorICAgICAgICAvLyBTdGFy
dCB0aW1lIFRCRC4KKyAgICAgICAgV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwKKyAgICAg
ICAgLy8gSGFzIGEgc3RhcnQgdGltZSBpbiB0aGUgZnV0dXJlLgorICAgICAgICBXYWl0aW5nVG9S
dW4sCisgICAgICAgIC8vIEhhdmUgYSBzdGFydCB0aW1lIGluIHRoZSBwYXN0LgorICAgICAgICBS
dW5uaW5nLAorICAgICAgICBQYXVzZWQsCisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBBYm9y
dGVkCisgICAgfTsKKworICAgIGVudW0gUHJvcGVydHkgeworICAgICAgICBUcmFuc2Zvcm0gPSAx
LAorICAgICAgICBPcGFjaXR5CisgICAgfTsKKworICAgIC8vIFRoZSBBbmltYXRpb25TdGF0ZSBj
b250YWlucyBhbGwgdGhlIGFuaW1hdGlvbiBtZXRhZGF0YSB0aGF0IHRoZSBtYWluIHRocmVhZCBp
cyBhbGxvd2VkCisgICAgLy8gdG8ga25vdyBhYm91dCBhbmQgc3BlY2lmeS4KKyAgICBzdHJ1Y3Qg
QW5pbWF0aW9uU3RhdGUgeworICAgICAgICBBbmltYXRpb25TdGF0ZShJRCwgUnVuU3RhdGUsIFBy
b3BlcnR5LCBpbnQgaXRlcmF0aW9ucywgZG91YmxlIHN0YXJ0VGltZSk7CisKKyAgICAgICAgSUQg
aWQ7CisgICAgICAgIFJ1blN0YXRlIHJ1blN0YXRlOworICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0
eTsKKyAgICAgICAgaW50IGl0ZXJhdGlvbnM7CisgICAgICAgIGRvdWJsZSBzdGFydFRpbWU7Cisg
ICAgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbD4gY3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOworCisg
ICAgdm9pZCBhbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZVNlY3MpOworCisgICAgdm9pZCBh
ZGQoUGFzc093blB0cjxDQ0FuaW1hdGlvbj4sIGNvbnN0IEFuaW1hdGlvblN0YXRlJik7CisKKyAg
ICAvLyBDb25zdW1lcnMgb2YgdGhlIGNvbnRyb2xsZXIgbWF5IHJlcXVlc3QgdGhhdCBhbiBhbmlt
YXRpb24gYmUgYWJvcnRlZCwgcGF1c2VkIG9yIHJlc3VtZWQsCisgICAgLy8gYnV0IGl0IGlzIG5v
dCBsZWdhbCB0byBzZXQgb3RoZXIgc3RhdGVzIHN1Y2ggYXMgRmluaXNoZWQuCisgICAgdm9pZCBh
Ym9ydChJRCBpZCkgeyBzZXRTdGF0ZShpZCwgQWJvcnRlZCk7IH0KKyAgICB2b2lkIHBhdXNlKElE
IGlkKSB7IHNldFN0YXRlKGlkLCBQYXVzZWQpOyB9CisgICAgdm9pZCByZXN1bWUoSUQgaWQpIHsg
c2V0U3RhdGUoaWQsIFJ1bm5pbmcpOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
YXJlIGFueSBhY3RpdmUgYW5pbWF0aW9ucy4KKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgLy8gQW4gQWN0aXZlQW5pbWF0aW9uLCBhcyBvcHBvc2VkIHRvIGFuIEFu
aW1hdGlvblN0YXRlLCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uCisgICAgLy8gdGhh
dCB0aGUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIG5lZWRzIHRvIGtub3cgYWJvdXQg
YW5pbWF0aW9ucyB0byBwcm9jZXNzIHRoZW0uCisgICAgY2xhc3MgQWN0aXZlQW5pbWF0aW9uIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEFjdGl2ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0
aW9uPiBhbmltLCBjb25zdCBBbmltYXRpb25TdGF0ZSYgc3RhdGUpCisgICAgICAgICAgICA6IG1f
YW5pbWF0aW9uKGFuaW0pCisgICAgICAgICAgICAsIG1fc3RhdGUoc3RhdGUpCisgICAgICAgICAg
ICAsIG1fcGF1c2VUaW1lKDAuMCkKKyAgICAgICAgICAgICwgbV90b3RhbFBhdXNlZFRpbWUoMC4w
KQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+QWN0aXZlQW5pbWF0aW9uKCkgeyB9CisK
KyAgICAgICAgUHJvcGVydHkgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnByb3Bl
cnR5OyB9CisgICAgICAgIElEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pZDsgfQorCisg
ICAgICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0OworICAgICAgICBib29sIGhhc0R1cmF0aW9u
KCkgY29uc3Q7CisKKyAgICAgICAgUnVuU3RhdGUgcnVuU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnJ1blN0YXRlOyB9CisgICAgICAgIHZvaWQgc2V0UnVuU3RhdGUoUnVuU3RhdGUsIGRv
dWJsZSB0KTsKKworICAgICAgICB2b2lkIHNldFN0YXJ0VGltZShkb3VibGUgdCkgeyBtX3N0YXRl
LnN0YXJ0VGltZSA9IHQ7IH0KKyAgICAgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc3RhcnRUaW1lOyB9CisKKyAgICAgICAgYm9vbCBnZXRGbG9hdChkb3VibGUg
dCwgZmxvYXQqIHZhbHVlKTsKKyAgICAgICAgYm9vbCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25zKGRv
dWJsZSB0LCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWx1ZSk7CisKKyAgICAgICAgYm9vbCBpc0Zp
bmlzaGVkQXQoZG91YmxlIHQpIGNvbnN0OworICAgICAgICBib29sIGlzRmluaXNoZWQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnJ1blN0YXRlID09IEZpbmlzaGVkIHx8IG1fc3RhdGUucnVuU3Rh
dGUgPT0gQWJvcnRlZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZG91YmxlIHRyaW1UaW1l
VG9DdXJyZW50SXRlcmF0aW9uKGRvdWJsZSB0KSBjb25zdDsKKworICAgICAgICBPd25QdHI8Q0NB
bmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgICAgICBBbmltYXRpb25TdGF0ZSBtX3N0YXRlOwor
CisgICAgICAgIC8vIFRoZXNlIGFyZSB1c2VkIGluIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9u
IHRvIGFjY291bnQgZm9yIHRpbWUKKyAgICAgICAgLy8gc3BlbnQgd2hpbGUgcGF1c2VkLiBUaGlz
IGlzIG5vdCBpbmNsdWRlZCBpbiBBbmltYXRpb25TdGF0ZSBzaW5jZSBpdAorICAgICAgICAvLyB0
aGVyZSBpcyBhYnNvbHV0ZWx5IG5vIG5lZWQgZm9yIGNsaWVudHMgb2YgdGhpcyBjb250cm9sbGVy
IHRvIGtub3cKKyAgICAgICAgLy8gYWJvdXQgdGhlc2UgdmFsdWVzLgorICAgICAgICBkb3VibGUg
bV9wYXVzZVRpbWU7CisgICAgICAgIGRvdWJsZSBtX3RvdGFsUGF1c2VkVGltZTsKKyAgICB9Owor
CisgICAgdHlwZWRlZiBIYXNoU2V0PGludD4gUHJvcGVydGllczsKKworICAgIC8vIFRoZSBhbmlt
YXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIuCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCopOworCisgICAgdm9p
ZCBzZXRTdGF0ZShJRCwgUnVuU3RhdGUpOworICAgIHZvaWQgcHJvbW90ZVN0YXJ0aW5nVG9SdW5u
aW5nKGRvdWJsZSB0KTsKKyAgICB2b2lkIHByb21vdGVTY2hlZHVsZWRUb1J1bm5pbmcoZG91Ymxl
IHQpOworICAgIHZvaWQgcHJvbW90ZUVucXVldWVkVG9SdW5uaW5nKGRvdWJsZSB0KTsKKyAgICB2
b2lkIHJlc29sdmVDb25mbGljdHMoZG91YmxlIHQpOworICAgIHZvaWQgcHVyZ2VGaW5pc2hlZEFu
aW1hdGlvbnMoKTsKKworICAgIHZvaWQgdGlja0FuaW1hdGlvbnMoZG91YmxlIHQpOworCisgICAg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVudDsKKyAgICBWZWN0
b3I8T3duUHRyPEFjdGl2ZUFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CisgICAgZG91YmxlIG1f
bGFzdFRpY2tUaW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggZGI5OTg5N2MyNTM3ZGYxYzkxMGUwMWE3Y2YzZGQ2YzgzYWRlZmQ2Zi4uZTVi
MTM4NTA3YzAwOTVmMmYyMmQxMmUxYjgyNzVhYWMwMDkxNDgxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1h
Z2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVT
b3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVy
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyUXVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzA1YmUxOTc0YWVjZGE4MmIyZThhMTlkMjk4OTgyMjFkYjhm
MWRjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKQEAgLTAsMCArMSw1MjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbC5oIgorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb24uaCIK
KworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgeworCitjbGFzcyBEdW1teUNvbnRyb2xsZXJDbGllbnQgOiBwdWJsaWMgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBEdW1teUNvbnRyb2xs
ZXJDbGllbnQoKSA6IG1fb3BhY2l0eSgwLjBmKSB7IH0KKyAgICB2aXJ0dWFsIH5EdW1teUNvbnRy
b2xsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCBj
b25zdCBJbnRTaXplJiByZW5kZXJCb3hCb3JkZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAg
ICAgbV9hY3RpdmVDb250cm9sbGVycy5hcHBlbmQoY29udHJvbGxlcik7CisgICAgfQorCisgICAg
VmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9sbGVy
cygpIHsgcmV0dXJuIG1fYWN0aXZlQ29udHJvbGxlcnM7IH0KKworcHJpdmF0ZToKKyAgICBmbG9h
dCBtX29wYWNpdHk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAg
SW50U2l6ZSBtX3NpemU7CisgICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Cit9OworCitjbGFzcyBEdW1teVRyYW5zZm9ybVRyYW5z
aXRpb24gOiBwdWJsaWMgQ0NUcmFuc2Zvcm1BbmltYXRpb24geworcHVibGljOgorICAgIER1bW15
VHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pCisgICAgICAgIDogbV9kdXJhdGlv
bihkdXJhdGlvbikKKyAgICB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNEdXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0VHJhbnNmb3JtT3Bl
cmF0aW9ucyhkb3VibGUgdCwgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsdWUpCisgICAgeworICAg
ICAgICAvLyBkb2VzIG5vdGhpbmcgYXQgYWxsLgorICAgICAgICByZXR1cm4gdCA+PSBtX2R1cmF0
aW9uOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKK307CisKK2Ns
YXNzIER1bW15RmxvYXRUcmFuc2l0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb24geworcHVi
bGljOgorICAgIER1bW15RmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJhdGlvbiwgZmxvYXQgZnJv
bSwgZmxvYXQgdG8pCisgICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgLCBt
X2Zyb20oZnJvbSkKKyAgICAgICAgLCBtX3RvKHRvKQorICAgIHsgfQorCisgICAgdmlydHVhbCBk
b3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVh
bCBib29sIGhhc0R1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBnZXRGbG9hdChkb3VibGUgdCwgZmxvYXQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdCAv
PSBtX2R1cmF0aW9uOworICAgICAgICBpZiAodCA+PSAxLjApCisgICAgICAgICAgICB0ID0gMS4w
OworICAgICAgICAqdmFsdWUgPSAoMS4wIC0gdCkgKiBtX2Zyb20gKyB0ICogbV90bzsKKyAgICAg
ICAgcmV0dXJuIHQgPj0gMS4wOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJh
dGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxvYXQgbV90bzsKK307CisKK2NsYXNzIER1
bW15RmxvYXRQYXJhbWV0cmljQW5pbWF0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb24gewor
cHVibGljOgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMC4w
OyB9CisgICAgdmlydHVhbCBib29sIGhhc0R1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQoZG91YmxlIHQsIGZsb2F0KiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ICogdCk7CisgICAgICAg
IHJldHVybiB0ID49IDEuMDsKKyAgICB9Cit9OworCit2b2lkIGFkZEFuaW1hdGlvbihDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwqIGNvbnRyb2xsZXIsIFBhc3NPd25QdHI8Q0NBbmltYXRp
b24+IGFuaW1hdGlvbiwgaW50IGlkLCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OlBy
b3BlcnR5IHByb3BlcnR5LCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OlJ1blN0YXRl
IHJ1blN0YXRlLCBkb3VibGUgd2hlbiwgaW50IGl0ZXJhdGlvbnMpCit7CisgICAgY29udHJvbGxl
ci0+YWRkKGFuaW1hdGlvbiwgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpBbmltYXRp
b25TdGF0ZShpZCwgcnVuU3RhdGUsIHByb3BlcnR5LCBpdGVyYXRpb25zLCB3aGVuKSk7Cit9CisK
Ky8vIFRyYW5zaXRpb24gb3BhY2l0eSBmcm9tIDAgdG8gMQorVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKK3sKKyAgICBEdW1teUNvbnRy
b2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpjcmVhdGUoJmR1bW15KSk7CisgICAgYWRkQW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisg
ICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5ldyBEdW1teUZsb2F0VHJhbnNpdGlvbigxLjAsIDAu
MGYsIDEuMGYpKSwKKyAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpPcGFjaXR5LAorICAgICAgICAgICAgICAgICBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHks
CisgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgMSk7CisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZl
KCkpOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMS4wKTsKKyAgICBFWFBFQ1RfRVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aXNBY3RpdmUoKSk7Cit9CisKKy8vIFF1ZXVl
IHR3byB0cmFuc2l0aW9ucy4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgVHJpdmlhbFF1ZXVpbmcpCit7CisgICAgRHVtbXlDb250cm9sbGVyQ2xpZW50IGR1bW15Owor
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwor
ICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAgICAgICAgICAgICBhZG9w
dFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAxLjBmKSksCisgICAgICAg
ICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgICAgICAw
LjAsCisgICAgICAgICAgICAgICAgIDEpOworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdl
dCgpLAorICAgICAgICAgICAgICAgICBhZG9wdFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24o
MS4wLCAxLjBmLCAwLjVmKSksCisgICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxh
YmlsaXR5LAorICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgIDEpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5p
c0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEuMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNB
Y3RpdmUoKSk7CisgICAgRVhQRUNUX0VRKDEuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgyLjApOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5
KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsKK30KKworLy8g
SW50ZXJydXB0IGEgdHJhbnNpdGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KK1RFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQoreworICAgIER1bW15
Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQo
KSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEu
MCwgMC4wZiwgMS4wZikpLAorICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJp
bGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAxKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDAuMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNB
Y3RpdmUoKSk7CisgICAgRVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgYWRk
QW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5l
dyBEdW1teUZsb2F0VHJhbnNpdGlvbigxLjAsIDEuMGYsIDAuNWYpKSwKKyAgICAgICAgICAgICAg
ICAgMiwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpP
cGFjaXR5LAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OldhaXRpbmdGb3JTdGFydFRpbWUsCisgICAgICAgICAgICAgICAgIDAuMCwgLy8gc3RhcnQgdGlt
ZSAoaWdub3JlZCkKKyAgICAgICAgICAgICAgICAgMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgorICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41KTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVt
bXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aXNBY3RpdmUoKSk7
Cit9CisKKy8vIFNjaGVkdWxlIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aGVuIG9u
bHkgb25lIHByb3BlcnR5IGlzIGZyZWUuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQoreworICAg
IER1bW15Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxl
ci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15VHJhbnNmb3JtVHJh
bnNpdGlvbigxLjApKSwKKyAgICAgICAgICAgICAgICAgMSwgLy8gSUQKKyAgICAgICAgICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpUcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2
YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAxKTsK
KworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAgICAgICAgICAgICBh
ZG9wdFB0cihuZXcgRHVtbXlUcmFuc2Zvcm1UcmFuc2l0aW9uKDEuMCkpLAorICAgICAgICAgICAg
ICAgICAyLCAvLyBJRAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OlRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgICAg
ICAwLjAsCisgICAgICAgICAgICAgICAgIDEpOworCisgICAgYWRkQW5pbWF0aW9uKGNvbnRyb2xs
ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5ldyBEdW1teUZsb2F0VHJhbnNp
dGlvbigxLjAsIDAuMGYsIDEuMGYpKSwKKyAgICAgICAgICAgICAgICAgMiwgLy8gSUQKKyAgICAg
ICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpPcGFjaXR5LAorICAg
ICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OldhaXRpbmdGb3JU
YXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAg
ICAgMSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9FUSgwLjBm
LCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZl
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4wKTsKKyAgICAvLyBTaG91bGQgbm90IGhh
dmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aXNBY3RpdmUoKSk7CisgICAgRVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNpdHko
KSk7CisgICAgLy8gVGhlIHRoZSBmbG9hdCBhbmltYXRpb24gc2hvdWxkIGhhdmUgc3RhcnRlZCBh
dCB0aW1lIDEuMCBhbmQgc2hvdWxkIGJlIGRvbmUuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
LjApOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9G
QUxTRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsKK30KKworLy8gU2NoZWR1bGUgdHdvIGFuaW1h
dGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYW5kIGFub3RoZXIK
Ky8vIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hvcnRlciBhbmltYXRpb24g
ZmluaXNoZXMgKHNob3VsZCB3YWl0CisvLyBmb3IgYm90aCB0byBmaW5pc2gpLgorVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5p
bVdhaXRpbmcpCit7CisgICAgRHVtbXlDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0
cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgYWRk
QW5pbWF0aW9uKGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5l
dyBEdW1teVRyYW5zZm9ybVRyYW5zaXRpb24oMi4wKSksCisgICAgICAgICAgICAgICAgIDEsIC8v
IElECisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6VHJh
bnNmb3JtLAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgIDAuMCwKKyAg
ICAgICAgICAgICAgICAgMSk7CisKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwK
KyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEuMCwg
MC4wZiwgMS4wZikpLAorICAgICAgICAgICAgICAgICAxLCAvLyBJRAorICAgICAgICAgICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2YWls
YWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAxKTsKKyAg
ICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQ
dHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEuMCwgMS4wZiwgMC41ZikpLAorICAgICAgICAg
ICAgICAgICAyLCAvLyBJRAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAg
ICAgMC4wLAorICAgICAgICAgICAgICAgICAxKTsKKworICAgIC8vIEFuaW1zIHdpdGggaWQgMSBz
aG91bGQgYm90aCBzdGFydCBub3cuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjApOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjBm
LCBkdW1teS5vcGFjaXR5KCkpOworICAgIC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQg
aGF2ZSBmaW5pc2hlZCBhdCB0aW1lIDEuMCwgYnV0IHRoZSBncm91cAorICAgIC8vIG9mIGFuaW1h
dGlvbnMgd2l0aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIuMCBiZWNhdXNlIG9mIHRo
ZSBsZW5ndGgKKyAgICAvLyBvZiB0aGUgdHJhbnNmb3JtIGFuaW1hdGlvbi4KKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDIuMCk7CisgICAgLy8gU2hvdWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZs
b2F0IHRyYW5zaXRpb24geWV0LgorICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZl
KCkpOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgLy8gVGhl
IHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMi4wIGFu
ZCBzaG91bGQgYmUKKyAgICAvLyBkb25lIGJ5IHRpbWUgMy4wCisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgzLjApOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVY
UEVDVF9GQUxTRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsKK30KKworLy8gU2NoZWR1bGUgYW4g
YW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCitURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQoreworICAgIER1bW15Q29udHJv
bGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwKKyAg
ICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4w
ZiwgMS4wZikpLAorICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ1RvUnVuLAorICAgICAgICAgICAgICAg
ICAxLjAsIC8vIHN0YXJ0IHRpbWUKKyAgICAgICAgICAgICAgICAgMSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZlKCkp
OworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDIuMCk7CisgICAgRVhQRUNUX0VRKDEuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmlzQWN0aXZlKCkpOworfQorCisvLyBTY2hlZHVsZSBh
biBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhlIGZ1dHVyZSB0aGF0IGludGVycnVwdHMgYSBydW5u
aW5nIGFuaW1hdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwg
U2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpb24pCit7CisgICAgRHVt
bXlDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdl
dCgpLAorICAgICAgICAgICAgICAgICBhZG9wdFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24o
Mi4wLCAwLjBmLCAxLjBmKSksCisgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAg
ICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxh
YmlsaXR5LAorICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgIDEpOworICAg
IGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAgICAgICAgICAgICBhZG9wdFB0
cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjVmLCAwLjBmKSksCisgICAgICAgICAg
ICAgICAgIDIsIC8vIElECisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpXYWl0aW5nVG9SdW4sCisgICAgICAgICAgICAgICAgIDEuMCwgLy8gc3RhcnQg
dGltZQorICAgICAgICAgICAgICAgICAxKTsKKyAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRyYW5z
aXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsKKyAgICBFWFBF
Q1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAu
NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBY3RpdmUoKSk7CisgICAgRVhQRUNU
X0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4w
KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMCk7
CisgICAgRVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNF
KGNvbnRyb2xsZXItPmlzQWN0aXZlKCkpOworfQorCisvLyBTY2hlZHVsZSBhbiBhbmltYXRpb24g
dG8gc3RhcnQgaW4gdGhlIGZ1dHVyZSB0aGF0IGludGVycnVwdHMgYSBydW5uaW5nIGFuaW1hdGlv
bgorLy8gYW5kIHRoZXJlIGlzIHlldCBhbm90aGVyIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQg
bGF0ZXIuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxl
ZEFuaW1hdGlvbkludGVycnVwdHNSdW5uaW5nQW5pbWF0aW9uV2l0aEFuaW1JblF1ZXVlKQorewor
ICAgIER1bW15Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBhZGRBbmltYXRpb24oY29udHJv
bGxlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRUcmFu
c2l0aW9uKDIuMCwgMC4wZiwgMS4wZikpLAorICAgICAgICAgICAgICAgICAxLCAvLyBJRAorICAg
ICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisg
ICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ0Zv
clRhcmdldEF2YWlsYWJpbGl0eSwKKyAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAg
ICAgICAxKTsKKyAgICBhZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAg
ICAgICAgYWRvcHRQdHIobmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDIuMCwgMC41ZiwgMC4wZikp
LAorICAgICAgICAgICAgICAgICAyLCAvLyBJRAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6V2FpdGluZ1RvUnVuLAorICAgICAgICAgICAgICAgICAx
LjAsIC8vIHN0YXJ0IHRpbWUKKyAgICAgICAgICAgICAgICAgMSk7CisgICAgYWRkQW5pbWF0aW9u
KGNvbnRyb2xsZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgIGFkb3B0UHRyKG5ldyBEdW1teUZs
b2F0VHJhbnNpdGlvbigxLjAsIDAuMGYsIDAuNzVmKSksCisgICAgICAgICAgICAgICAgIDMsIC8v
IElECisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6T3Bh
Y2l0eSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpX
YWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAgICAgICAgICAgICAwLjAsCisgICAg
ICAgICAgICAgICAgIDEpOworICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91
bGQgc3RhcnQgaW1tZWRpYXRlbHkuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjApOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjBm
LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC41KTsKKyAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYs
IGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aXNBY3RpdmUo
KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMy4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQuMCk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsK
K30KKworLy8gVGVzdCB0aGF0IGEgbG9vcGluZyBhbmltYXRpb24gbG9vcHMgYW5kIGZvciB0aGUg
Y29ycmVjdCBudW1iZXIgb2YgaXRlcmF0aW9ucy4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgVHJpdmlhbExvb3BpbmcpCit7CisgICAgRHVtbXlDb250cm9sbGVyQ2xp
ZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAgICAg
ICAgICAgICBhZG9wdFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAxLjBm
KSksCisgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6T3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAg
ICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgIDMpOyAvLyBsb29wIGl0ZXJhdGlvbnMK
KworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIuNzUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMuMCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkpOwor
CisgICAgLy8gSnVzdCBiZSBleHRyYSBzdXJlLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNC4w
KTsKKyAgICBFWFBFQ1RfRVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCB0
aGF0IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwg
YWJvcnRlZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5p
dGVMb29waW5nKQoreworICAgIER1bW15Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKyAgICBpbnQg
aWQgPSAxOworICAgIGFkZEFuaW1hdGlvbihjb250cm9sbGVyLmdldCgpLAorICAgICAgICAgICAg
ICAgICBhZG9wdFB0cihuZXcgRHVtbXlGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAxLjBmKSks
CisgICAgICAgICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6Ok9wYWNpdHksCisgICAgICAgICAgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwKKyAgICAgICAg
ICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAtMSk7IC8vIGxvb3AgaXRlcmF0aW9ucwor
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aXNBY3RpdmUoKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aXNBY3RpdmUoKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwor
CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuMjUpOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXku
b3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3NDE4MjQuNzUpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjc1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFib3J0KGlkKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aXNBY3RpdmUoKSk7CisgICAgRVhQRUNUX0VRKDAuNzVm
LCBkdW1teS5vcGFjaXR5KCkpOworfQorCisvLyBUZXN0IHBhdXNpbmcgYW5kIHJlc3VtaW5nLgor
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBQYXVzZVJlc3VtZSkKK3sK
KyAgICBEdW1teUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgaW50IGlkID0gMTsKKyAgICBh
ZGRBbmltYXRpb24oY29udHJvbGxlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgYWRvcHRQdHIo
bmV3IER1bW15RmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwgMS4wZikpLAorICAgICAgICAgICAg
ICAgICBpZCwKKyAgICAgICAgICAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpPcGFjaXR5LAorICAgICAgICAgICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksCisgICAgICAgICAgICAgICAgIDAuMCwK
KyAgICAgICAgICAgICAgICAgMSk7IC8vIGxvb3AgaXRlcmF0aW9ucworCisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlzQWN0aXZlKCkp
OworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMC41KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIGNvbnRyb2xsZXIt
PnBhdXNlKGlkKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC4wKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVt
bXkub3BhY2l0eSgpKTsKKworICAgIGNvbnRyb2xsZXItPnJlc3VtZShpZCk7CisKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEwMjQuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmlz
QWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXIt
PmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121290</attachid>
            <date>2012-01-05 09:54:15 -0800</date>
            <delta_ts>2012-01-09 15:34:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20120105125414.patch</filename>
            <type>text/plain</type>
            <size>60197</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI4Zjk0M2UxNjc3OWFl
MzdkYzM3MjhjM2NjYjk1MTRkYzg3NmQxMy4uZjYxOTNmOTVlMTkxZjliZDcyODYxNmNmZjk1MWNl
MjUxNTA3NzUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTA1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVB
bmltYXRpb246OnNldFJ1blN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0
aW9uOjppc0ZpbmlzaGVkQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246
OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3Rp
dmVBbmltYXRpb246On5DQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0Fj
dGl2ZUFuaW1hdGlvbjo6dGFyZ2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3Rp
dmVBbmltYXRpb246OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpy
dW5TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXRlcmF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c2V0SXRlcmF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c3RhcnRUaW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzZXRTdGFydFRpbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NBY3RpdmVBbmltYXRpb246OmFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDQ0FuaW1hdGlvbjo6fkNDQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRB
bmltYXRpb246On5DQ0Zsb2F0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRB
bmltYXRpb246OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1BbmltYXRpb246
On5DQ1RyYW5zZm9ybUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFu
aW1hdGlvbjo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpzZXRSdW5TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnByb21vdGVTdGFydGluZ1RvUnVu
bmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnByb21vdGVTY2hlZHVsZWRUb1J1bm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpwcm9tb3RlRW5xdWV1ZWRUb1J1bm5pbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpyZXNvbHZlQ29uZmxp
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50Ojp+Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KToKKwogMjAxMi0wMS0w
NSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgZHVwbGljYXRlIGZpbGUgcmVmZXJlbmNlcyBmcm9tIFdlYkNvcmUueGNvZGVwcm9qCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGQyYzM2ODczM2I4M2U2OTA2NjA3ZjBkNzhkMTcyMTdj
M2VlYWY4YTUuLmVlY2MwYjE3OWE5YjY4Mzc0N2UzMjcxZjJmZjM1YTdhZThmNmY2YmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTItMDEtMDUgIElhbiBW
b2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVh
dGUgYSBiYXNlLWNsYXNzIENDQW5pbWF0aW9uIHRvIHJlcHJlc2VudCBjb21wb3NpdG9yIGFuaW1h
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcz
MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZha2VGbG9hdEFuaW1hdGlvbjo6ZHVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RmFrZUZsb2F0QW5pbWF0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VEVT
VCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6OkZha2VD
b250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250cm9sbGVyQ2xpZW50
Ojp+RmFrZUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xs
ZXJDbGllbnQ6Om9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGll
bnQ6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6
OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVudDo6c2V0
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250cm9sbGVyQ2xpZW50Ojphbmlt
YXRpb25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VD
b250cm9sbGVyQ2xpZW50OjphY3RpdmVDb250cm9sbGVycyk6CisgICAgICAgIChXZWJDb3JlOjpG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZha2VGbG9hdFRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRFU1QpOgorCiAyMDEyLTAxLTA1ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgV2ViU2V0dGluZ3M6OnNldEFjY2VsZXJh
dGVkRHJhd2luZ0VuYWJsZWQgZnJvbSBwdWJsaWMgQVBJLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE2
YjYyOTdlZTU4YzEwOTlkNmY2NmJiODRjM2I3NTY5YTQ4YzNlNTMuLjM5MWM3NjY3MjQ1MDVkYmY3
NmI4ZTBjNGI1ZGQxMWVjMzMzNWExODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1OTQsNiArMzU5
NCwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbi5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDYW52YXNMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmNwcCcsCkBAIC0zNjExLDYgKzM2MTUsOCBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERp
c3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJRdWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjhlODFkNjdmMDljZWVjZmY4MGM4NGMwMzI2NWMwNDI4MTE2YmRi
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaCIKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlIDxjbWF0
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ0FjdGl2ZUFuaW1hdGlvbjo6Q0NBY3RpdmVB
bmltYXRpb24oUGFzc093blB0cjxDQ0FuaW1hdGlvbj4gYW5pbSwgSUQgaWQsIFRhcmdldFByb3Bl
cnR5IHRhcmdldFByb3BlcnR5KQorICAgIDogbV9hbmltYXRpb24oYW5pbSkKKyAgICAsIG1faWQo
aWQpCisgICAgLCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQorICAgICwgbV9ydW5T
dGF0ZShXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KQorICAgICwgbV9pdGVyYXRpb25zKDEp
CisgICAgLCBtX3N0YXJ0VGltZSgwLjApCisgICAgLCBtX3BhdXNlVGltZSgwLjApCisgICAgLCBt
X3RvdGFsUGF1c2VkVGltZSgwLjApCit7Cit9CisKK3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNl
dFJ1blN0YXRlKFJ1blN0YXRlIHJ1blN0YXRlLCBkb3VibGUgdCkKK3sKKyAgICAvLyBGSVhNRTog
ZXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQgdG8gbm90aWZ5IG9ic2VydmVycyBoZXJlLgorICAgIHN3
aXRjaCAocnVuU3RhdGUpIHsKKyAgICBjYXNlIFJ1bm5pbmc6CisgICAgICAgIGlmIChtX3J1blN0
YXRlID09IFBhdXNlZCkKKyAgICAgICAgICAgIG1fdG90YWxQYXVzZWRUaW1lICs9IHQgLSBtX3Bh
dXNlVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXVzZWQ6CisgICAgICAgIG1fcGF1
c2VUaW1lID0gdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXYWl0aW5nRm9yU3RhcnRUaW1l
OgorICAgIGNhc2UgV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eToKKyAgICBjYXNlIFdhaXRp
bmdUb1J1bjoKKyAgICBjYXNlIEZpbmlzaGVkOgorICAgIGNhc2UgQWJvcnRlZDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIG1fcnVuU3RhdGUgPSBydW5TdGF0ZTsKK30KKworYm9vbCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0KSBjb25zdAoreworICAgIGlmIChy
dW5TdGF0ZSgpID09IEZpbmlzaGVkIHx8IHJ1blN0YXRlKCkgPT0gQWJvcnRlZCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gcnVuU3RhdGUoKSA9PSBSdW5uaW5nCisgICAgICAg
ICYmIG1faXRlcmF0aW9ucyA+PSAwCisgICAgICAgICYmIG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0
aW9uLT5kdXJhdGlvbigpIDw9IHQgLSBzdGFydFRpbWUoKSAtIG1fdG90YWxQYXVzZWRUaW1lOwor
fQorCitkb3VibGUgQ0NBY3RpdmVBbmltYXRpb246OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9u
KGRvdWJsZSB0KSBjb25zdAoreworICAgIC8vIElmIHdlJ3JlIHBhdXNlZCwgdGltZSBpcyAnc3R1
Y2snIGF0IHRoZSBwYXVzZSB0aW1lLgorICAgIGlmIChydW5TdGF0ZSgpID09IFBhdXNlZCAmJiB0
ID4gbV9wYXVzZVRpbWUpCisgICAgICAgIHQgPSBtX3BhdXNlVGltZTsKKworICAgIC8vIFJldHVy
bmVkIHRpbWUgc2hvdWxkIGFsd2F5cyBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgdGltZSBhbmQg
c2hvdWxkIHN1YnRyYWN0CisgICAgLy8gYWxsIHRpbWUgc3BlbnQgcGF1c2VkCisgICAgdCAtPSBt
X3N0YXJ0VGltZSArIG1fdG90YWxQYXVzZWRUaW1lOworCisgICAgLy8gWmVybyBpcyBhbHdheXMg
dGhlIHN0YXJ0IG9mIHRoZSBhbmltYXRpb24uCisgICAgaWYgKHQgPD0gMC4wKQorICAgICAgICBy
ZXR1cm4gMC4wOworCisgICAgLy8gQWx3YXlzIHJldHVybiB6ZXJvIGlmIHdlIGhhdmUgbm8gaXRl
cmF0aW9ucy4KKyAgICBpZiAoIW1faXRlcmF0aW9ucykKKyAgICAgICAgcmV0dXJuIDAuMDsKKwor
ICAgIC8vIElmIGxlc3MgdGhhbiBhbiBpdGVyYXRpb24gZHVyYXRpb24sIGp1c3QgcmV0dXJuIHQu
CisgICAgaWYgKHQgPCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHQ7
CisKKyAgICAvLyBJZiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRvdGFsIGR1cmF0aW9u
LCByZXR1cm4gaXRlcmF0aW9uIGR1cmF0aW9uLgorICAgIGlmIChtX2l0ZXJhdGlvbnMgPj0gMCAm
JiB0ID49IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9pdGVyYXRpb25zKQorICAgICAgICBy
ZXR1cm4gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7CisKKyAgICAvLyBGaW5hbGx5LCByZXR1cm4g
eCB3aGVyZSB0ID0geCArIG4gKiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSBmb3Igc29tZSBwb3Np
dGl2ZSBpbnRlZ2VyIG4uCisgICAgcmV0dXJuIGZtb2QodCwgbV9hbmltYXRpb24tPmR1cmF0aW9u
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hZTIxNDkyNzAwMGIxM2VkYjRjNTNkYTk5NDc2M2JiZTlhNzZj
ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ0FjdGl2ZUFuaW1hdGlvbl9oCisjZGVmaW5lIENDQWN0aXZlQW5p
bWF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDQW5pbWF0aW9uOworCisv
LyBBIENDQWN0aXZlQW5pbWF0aW9uLCBjb250YWlucyBhbGwgdGhlIHN0YXRlIHJlcXVpcmVkIHRv
IHBsYXkgYSBDQ0FuaW1hdGlvbi4KKy8vIFNwZWNpZmljYWxseSwgdGhlIGFmZmVjdGVkIHByb3Bl
cnR5LCB0aGUgcnVuIHN0YXRlIChwYXVzZWQsIGZpbmlzaGVkLCBldGMuKSwKKy8vIGxvb3AgY291
bnQsIGxhc3QgcGF1c2UgdGltZSwgYW5kIHRoZSB0b3RhbCB0aW1lIHNwZW50IHBhdXNlZC4KK2Ns
YXNzIENDQWN0aXZlQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGludCBJRDsKKwor
ICAgIGVudW0gUnVuU3RhdGUgeworICAgICAgICAvLyBTdGFydCB0aW1lIFRCRC4KKyAgICAgICAg
V2FpdGluZ0ZvclN0YXJ0VGltZSA9IDEsCisgICAgICAgIC8vIFN0YXJ0IHRpbWUgVEJELgorICAg
ICAgICBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAgICAvLyBIYXMgYSBzdGFy
dCB0aW1lIGluIHRoZSBmdXR1cmUuCisgICAgICAgIFdhaXRpbmdUb1J1biwKKyAgICAgICAgLy8g
SGF2ZSBhIHN0YXJ0IHRpbWUgaW4gdGhlIHBhc3QuCisgICAgICAgIFJ1bm5pbmcsCisgICAgICAg
IFBhdXNlZCwKKyAgICAgICAgRmluaXNoZWQsCisgICAgICAgIEFib3J0ZWQKKyAgICB9OworCisg
ICAgZW51bSBUYXJnZXRQcm9wZXJ0eSB7CisgICAgICAgIFRyYW5zZm9ybSA9IDEsCisgICAgICAg
IE9wYWNpdHkKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRp
b24+IGNyZWF0ZShQYXNzT3duUHRyPENDQW5pbWF0aW9uPiBhbmltLCBJRCBpZCwgVGFyZ2V0UHJv
cGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDQWN0aXZlQW5pbWF0aW9uKGFuaW0sIGlkLCB0YXJnZXRQcm9wZXJ0eSkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkNDQWN0aXZlQW5pbWF0aW9uKCkgeyB9CisKKyAgICBUYXJnZXRQcm9wZXJ0
eSB0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KKyAg
ICBJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIFJ1blN0YXRlIHJ1blN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZTsgfQorICAgIHZvaWQgc2V0UnVuU3RhdGUoUnVu
U3RhdGUsIGRvdWJsZSB0KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0
aGF0IHRoZSBhbmltYXRpb24gd2lsbCBwbGF5LiBJZiB0aGlzCisgICAgLy8gdmFsdWUgaXMgemVy
byB0aGUgYW5pbWF0aW9uIHdpbGwgbm90IHBsYXkuIElmIGl0IGlzIG5lZ2F0aXZlLCB0aGVuCisg
ICAgLy8gdGhlIGFuaW1hdGlvbiB3aWxsIGxvb3AgaW5kZWZpbml0ZWx5LgorICAgIGludCBpdGVy
YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25zOyB9CisgICAgdm9pZCBzZXRJdGVy
YXRpb25zKGludCBuKSB7IG1faXRlcmF0aW9ucyA9IG47IH0KKworICAgIGRvdWJsZSBzdGFydFRp
bWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQorICAgIHZvaWQgc2V0U3RhcnRUaW1l
KGRvdWJsZSB0KSB7IG1fc3RhcnRUaW1lID0gdDsgfQorCisgICAgYm9vbCBpc0ZpbmlzaGVkQXQo
ZG91YmxlIHQpIGNvbnN0OworICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkOyB9CisKKyAgICBD
Q0FuaW1hdGlvbiogYW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hbmltYXRpb24uZ2V0KCk7IH0KKyAg
ICBjb25zdCBDQ0FuaW1hdGlvbiogYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b24uZ2V0KCk7IH0KKworICAgIC8vIFRha2VzIHRoZSBnaXZlbiBhYnNvbHV0ZSB0aW1lLCBhbmQg
dXNpbmcgdGhlIHN0YXJ0IHRpbWUgYW5kIHRoZSBudW1iZXIKKyAgICAvLyBvZiBpdGVyYXRpb25z
LCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1lIGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KKyAg
ICBkb3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIHQpIGNvbnN0OworCitw
cml2YXRlOgorICAgIENDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb24+LCBJ
RCwgVGFyZ2V0UHJvcGVydHkpOworCisgICAgT3duUHRyPENDQW5pbWF0aW9uPiBtX2FuaW1hdGlv
bjsKKworICAgIElEIG1faWQ7CisgICAgVGFyZ2V0UHJvcGVydHkgbV90YXJnZXRQcm9wZXJ0eTsK
KyAgICBSdW5TdGF0ZSBtX3J1blN0YXRlOworICAgIGludCBtX2l0ZXJhdGlvbnM7CisgICAgZG91
YmxlIG1fc3RhcnRUaW1lOworCisgICAgLy8gVGhlc2UgYXJlIHVzZWQgaW4gdHJpbVRpbWVUb0N1
cnJlbnRJdGVyYXRpb24gdG8gYWNjb3VudCBmb3IgdGltZQorICAgIC8vIHNwZW50IHdoaWxlIHBh
dXNlZC4gVGhpcyBpcyBub3QgaW5jbHVkZWQgaW4gQW5pbWF0aW9uU3RhdGUgc2luY2UgaXQKKyAg
ICAvLyB0aGVyZSBpcyBhYnNvbHV0ZWx5IG5vIG5lZWQgZm9yIGNsaWVudHMgb2YgdGhpcyBjb250
cm9sbGVyIHRvIGtub3cKKyAgICAvLyBhYm91dCB0aGVzZSB2YWx1ZXMuCisgICAgZG91YmxlIG1f
cGF1c2VUaW1lOworICAgIGRvdWJsZSBtX3RvdGFsUGF1c2VkVGltZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDQWN0aXZlQW5pbWF0aW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWM1ODliMDYzMTE1OTFjNmRiNDIxZDUwMGYyN2Ew
YzdiODkxM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9u
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgQ0NGbG9hdEFuaW1hdGlvbiogQ0NB
bmltYXRpb246OnRvRmxvYXRBbmltYXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkg
PT0gIENDQW5pbWF0aW9uOjpGbG9hdEFuaW1hdGlvbik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IENDRmxvYXRBbmltYXRpb24qPih0aGlzKTsKK30KKworY29uc3QgQ0NUcmFuc2Zvcm1B
bmltYXRpb24qIENDQW5pbWF0aW9uOjp0b1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHR5cGUoKSA9PSAgQ0NBbmltYXRpb246OlRyYW5zZm9ybUFuaW1hdGlvbik7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uKj4odGhpcyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdhMzBlMmY2YjU5YjRlYjkyZWJlNTEzNTU0NmY1YTlhMmZlMDEwZGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fu
aW1hdGlvbi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NBbmlt
YXRpb25faAorI2RlZmluZSBDQ0FuaW1hdGlvbl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NGbG9hdEFuaW1hdGlvbjsKK2NsYXNzIENDVHJhbnNmb3JtQW5pbWF0aW9uOworY2xh
c3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKKworLy8gQW4gYW5pbWF0aW9uIGlzIGVzc2VudGlhbGx5
IGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUgZ2l2ZW4gYSB0aW1lLgorLy8gVGhlcmUg
YXJlIGN1cnJlbnRseSBvbmx5IHR3byB0eXBlcyBvZiBhbmltYXRpb24sIGZsb2F0IGFuZCB0cmFu
c2Zvcm0uCitjbGFzcyBDQ0FuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsgRmxv
YXRBbmltYXRpb24sIFRyYW5zZm9ybUFuaW1hdGlvbiB9OworCisgICAgdmlydHVhbCB+Q0NBbmlt
YXRpb24oKSB7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworCisgICAgY29uc3QgQ0NGbG9hdEFu
aW1hdGlvbiogdG9GbG9hdEFuaW1hdGlvbigpIGNvbnN0OworICAgIGNvbnN0IENDVHJhbnNmb3Jt
QW5pbWF0aW9uKiB0b1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0OworfTsKKworY2xhc3MgQ0NG
bG9hdEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0FuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q0NGbG9hdEFuaW1hdGlvbigpIHsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBh
bmltYXRpb24gaXMgZmluaXNoZWQuCisgICAgdmlydHVhbCBib29sIGdldFZhbHVlKGRvdWJsZSB0
LCBmbG9hdCogdmFsdWUpIGNvbnN0ID0gMDsKKworICAgIC8vIFBhcnRpYWwgQ0NBbmltYXRpb24g
aW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBG
bG9hdEFuaW1hdGlvbjsgfQorfTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb24gOiBwdWJs
aWMgQ0NBbmltYXRpb24geworcHVibGljOgorICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0
aW9uKCkgeyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBpcyBmaW5p
c2hlZC4KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0VmFsdWUoZG91YmxlIHQsIFRyYW5zZm9ybU9wZXJh
dGlvbnMqIHZhbHVlKSBjb25zdCA9IDA7CisKKyAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGlt
cGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJh
bnNmb3JtQW5pbWF0aW9uOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBDQ0FuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWI1ZjgzMWIzNWY4NGVjZmQ0ZWVk
MjUxMDFkODQzMTYwNmM2ZThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmNwcApAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisKKyNp
bmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIHsKK3R5cGVkZWYgSGFzaFNldDxpbnQ+IFRhcmdldFByb3BlcnRpZXM7Cit9CisK
K1Bhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxD
bGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbChjbGllbnQpKTsKK30KKworQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9
CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphbmltYXRlKGRvdWJsZSBm
cmFtZUJlZ2luVGltZVNlY3MpCit7CisgICAgcHJvbW90ZVN0YXJ0aW5nVG9SdW5uaW5nKGZyYW1l
QmVnaW5UaW1lU2Vjcyk7CisgICAgcHJvbW90ZVNjaGVkdWxlZFRvUnVubmluZyhmcmFtZUJlZ2lu
VGltZVNlY3MpOworICAgIHByb21vdGVFbnF1ZXVlZFRvUnVubmluZyhmcmFtZUJlZ2luVGltZVNl
Y3MpOworICAgIHJlc29sdmVDb25mbGljdHMoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICB0aWNr
QW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHB1cmdlRmluaXNoZWRBbmltYXRp
b25zKCk7CisgICAgcHJvbW90ZUVucXVldWVkVG9SdW5uaW5nKGZyYW1lQmVnaW5UaW1lU2Vjcyk7
Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQoUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKK3sKKyAgICBtX2FjdGl2ZUFuaW1hdGlvbnMuYXBw
ZW5kKGFuaW0pOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUodGhpcyk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpzZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6SUQgaWQs
IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5TdGF0ZSBzdGF0ZSwgZG91YmxlIGN1cnJlbnRUaW1lU2Vj
cykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBpZCkK
KyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoc3RhdGUsIGN1
cnJlbnRUaW1lU2Vjcyk7Cit9CisKK2Jvb2wgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
OjpoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246
OkFib3J0ZWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpwcm9tb3RlU3RhcnRpbmdU
b1J1bm5pbmcoZG91YmxlIHQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGlt
ZSkgeworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZywgdCk7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnNldFN0YXJ0VGltZSh0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnByb21vdGVTY2hlZHVsZWRUb1J1bm5pbmcoZG91
YmxlIHQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRl
KCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdUb1J1biAmJiBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnN0YXJ0VGltZSgpIDw9IHQpCisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCB0KTsKK30KKwordm9p
ZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnByb21vdGVFbnF1ZXVlZFRvUnVubmlu
Zyhkb3VibGUgdCkKK3sKKyAgICAvLyBGaXJzdCBjb2xsZWN0IHJ1bm5pbmcgcHJvcGVydGllcy4K
KyAgICBUYXJnZXRQcm9wZXJ0aWVzIGJsb2NrZWRQcm9wZXJ0aWVzOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpS
dW5uaW5nIHx8IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6RmluaXNoZWQpCisgICAgICAgICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9h
Y3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
IGlmIGl0J3MgZW5xdWV1ZWQKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVu
U3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0
eSkgeworICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgcHJvcGVydGllcyBmb3IgYW5pbWF0aW9u
cyB3aXRoIHRoZSBzYW1lIGlkICh0aGV5IHNob3VsZCBhbGwgYWxzbyBiZSBlbnF1ZXVlZCkKKyAg
ICAgICAgICAgIFRhcmdldFByb3BlcnRpZXMgZW5xdWV1ZWRQcm9wZXJ0aWVzOworICAgICAgICAg
ICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFBy
b3BlcnR5KCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytqKQorICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPmlkKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5pZCgpKQorICAgICAg
ICAgICAgICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tq
XS0+dGFyZ2V0UHJvcGVydHkoKSk7CisKKyAgICAgICAgICAgIGJvb2wgbnVsbEludGVyc2VjdGlv
biA9IHRydWU7CisgICAgICAgICAgICBmb3IgKFRhcmdldFByb3BlcnRpZXM6Oml0ZXJhdG9yIHBJ
dGVyID0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmJlZ2luKCk7IHBJdGVyICE9IGVucXVldWVkUHJvcGVy
dGllcy5lbmQoKTsgKytwSXRlcikKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrZWRQcm9wZXJ0
aWVzLmFkZCgqcEl0ZXIpLnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgbnVsbEludGVyc2Vj
dGlvbiA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gY29t
bW9uLCBzdGFydCB0aGVtIHVwLgorICAgICAgICAgICAgaWYgKG51bGxJbnRlcnNlY3Rpb24pIHsK
KyAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCB0KTsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnNldFN0YXJ0VGltZSh0KTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aWQoKSA9PSBtX2FjdGl2ZUFu
aW1hdGlvbnNbal0tPmlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5p
bWF0aW9uc1tqXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIHQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRTdGFydFRp
bWUodCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpyZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSB0KQoreworICAgIC8vIEZpbmQgYW55
IGFuaW1hdGlvbnMgdGhhdCBhcmUgYW5pbWF0aW5nIHRoZSBzYW1lIHByb3BlcnR5IGFuZCByZXNv
bHZlIHRoZQorICAgIC8vIGNvbmZpY3QuIFdlIGNvdWxkIGV2ZW50dWFsbHkgYmxlbmQsIGJ1dCBm
b3Igbm93IHdlJ2xsIGp1c3QgYWJvcnQgdGhlCisgICAgLy8gcHJldmlvdXMgYW5pbWF0aW9uICh3
aGVyZSAncHJldmlvdXMnIG1lYW5zOiAoMSkgaGFzIGEgcHJpb3Igc3RhcnQgdGltZSBvcgorICAg
IC8vICgyKSBoYXMgYW4gZXF1YWwgc3RhcnQgdGltZSwgYnV0IHdhcyBhZGRlZCB0byB0aGUgcXVl
dWUgZWFybGllciwgaS5lLiwKKyAgICAvLyBoYXMgYSBsb3dlciBpbmRleCBpbiBtX2FjdGl2ZUFu
aW1hdGlvbnMpLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0
YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnJ1blN0YXRlKCkgPT0g
Q0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJn
ZXRQcm9wZXJ0eSgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+dGFyZ2V0UHJvcGVydHkoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5zdGFydFRp
bWUoKSA+IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c3RhcnRUaW1lKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpBYm9ydGVkLCB0KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2
ZUFuaW1hdGlvbjo6QWJvcnRlZCwgdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKQoreworICAgIC8vIGVhY2ggaXRlcmF0aW9u
LCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNlcyBvciBpIGluY3JlbWVudHMKKyAg
ICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAg
IHNpemVfdCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkp
IHsKKyAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOwor
ICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAg
ICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0g
bV9hY3RpdmVBbmltYXRpb25zW2pdLT5pZCgpICYmICFtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmlz
RmluaXNoZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVG
aW5pc2hlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbEFuaW1zV2l0
aFNhbWVJZEFyZUZpbmlzaGVkKQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92
ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAgIH0KK30KKwordm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJsZSB0KQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0g
Q0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0cmltbWVk
ID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbih0KTsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9hY3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0
eSgpKSB7CisKKyAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTog
eworICAgICAgICAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAg
ICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlvbiogdHJhbnNmb3JtQW5pbWF0aW9u
ID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5hbmltYXRpb24oKS0+dG9UcmFuc2Zvcm1BbmltYXRp
b24oKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1BbmltYXRpb24tPmdldFZhbHVlKHRyaW1t
ZWQsICZvcGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5pc0ZpbmlzaGVkQXQodCkpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCB0KTsKKwor
ICAgICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJlIGlmIGFic29sdXRlIG9yIHJlbGF0aXZlLiBB
YnNvbHV0ZSBmb3Igbm93LgorICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRv
QXBwbHk7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBseShGbG9hdFNpemUoKSwgdG9B
cHBseSk7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPnNldFRyYW5zZm9ybSh0b0FwcGx5KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2Fz
ZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eTogeworICAgICAgICAgICAgICAgIGZsb2F0IG9w
YWNpdHk7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbiogZmxvYXRBbmlt
YXRpb24gPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlvbigpLT50b0Zsb2F0QW5pbWF0
aW9uKCk7CisgICAgICAgICAgICAgICAgZmxvYXRBbmltYXRpb24tPmdldFZhbHVlKHRyaW1tZWQs
ICZvcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5p
c0ZpbmlzaGVkQXQodCkpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCB0KTsKKworICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IC8vIHN3aXRjaAorICAgICAg
ICB9IC8vIGlmIHJ1bm5pbmcKKyAgICB9IC8vIGZvciBlYWNoIGFuaW1hdGlvbgorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxMWI4NGNiMjVjYmVlNTUwNDkxYmRiMzBh
NDMyZmI3MTMyOTFlNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaApA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbF9oCisjZGVmaW5lIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbF9o
CisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5p
bWF0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw7CitjbGFzcyBJbnRTaXplOworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Citj
bGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zOworCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGxDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbENsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CisgICAg
dmlydHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0
aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKikgPSAwOworfTsKKworY2xhc3Mg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNyZWF0ZShDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKKworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUg
ZnJhbWVCZWdpblRpbWVTZWNzKTsKKworICAgIHZvaWQgYWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+KTsKKworICAgIC8vIFNldHMgdGhlIHJ1biBzdGF0ZSBvZiBhbGwgYW5pbWF0aW9u
cyB3aXRoIHRoZSBnaXZlbiBJRC4gVGhlIGN1cnJlbnQgdGltZSBpcworICAgIC8vIG5lY2Vzc2Fy
eSBpbiBvcmRlciB0byBtYW5hZ2UgaW50ZXJuYWwgc3RhdGUgcmVsYXRlZCB0byBwYXVzZSAoaG93
IG11Y2gKKyAgICAvLyB0aW1lIGhhcyBiZWVuIHNwZW50IHBhdXNlZCwgZXRjKS4KKyAgICB2b2lk
IHNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpJRCwgQ0NBY3RpdmVBbmltYXRpb246OlJ1
blN0YXRlLCBkb3VibGUgY3VycmVudFRpbWVTZWNzKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGVyZSBhcmUgYW55IGFuaW1hdGlvbnMgdGhhdCBhcmUgbmVpdGhlciBmaW5pc2hlZCBub3Ig
YWJvcnRlZC4KKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbigpIGNvbnN0OworCitwcml2YXRl
OgorICAgIC8vIFRoZSBhbmltYXRvciBpcyBvd25lZCBieSB0aGUgbGF5ZXIuCisgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENs
aWVudCopOworCisgICAgdm9pZCBwcm9tb3RlU3RhcnRpbmdUb1J1bm5pbmcoZG91YmxlIHQpOwor
ICAgIHZvaWQgcHJvbW90ZVNjaGVkdWxlZFRvUnVubmluZyhkb3VibGUgdCk7CisgICAgdm9pZCBw
cm9tb3RlRW5xdWV1ZWRUb1J1bm5pbmcoZG91YmxlIHQpOworICAgIHZvaWQgcmVzb2x2ZUNvbmZs
aWN0cyhkb3VibGUgdCk7CisgICAgdm9pZCBwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpOworCisg
ICAgdm9pZCB0aWNrQW5pbWF0aW9ucyhkb3VibGUgdCk7CisKKyAgICBDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OworICAgIFZlY3RvcjxPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTY3NGJiNmI4NWIwODVjYWJhY2M5ZDlk
NjQ5OTkzZDVkNjJmZTVjZi4uYmY1OTY0MjQ4ZDhkYzYxNGMwNTlhOTUxMTgwYzNkNmFiMzlhM2Rm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02MCw5ICs2MCwxMSBAQAogICAg
ICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMv
QXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMy
RExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmlt
YXRpb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9DQ0xheWVyUXVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyU29y
dGVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNmJiZjI4YzFlN2E3M2Q5MWIw
ZTM0MDQ5OTg2ZjYyMTdjZGMzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTAsMCArMSwxNjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQWN0
aXZlQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbi5oIgorCisjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGYWtlRmxvYXRBbmlt
YXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgdmlydHVhbCBk
b3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiAxLjA7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0VmFsdWUoZG91YmxlIHQsIGZsb2F0KiB2YWx1ZSkgY29uc3QgeyByZXR1cm4gMS4wOyB9Cit9
OworCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRpb24o
aW50IGl0ZXJhdGlvbnMpCit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVy
bihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmltYXRp
b24pLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvUmV0dXJuLT5zZXRJ
dGVyYXRpb25zKGl0ZXJhdGlvbnMpOworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9
CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBUcmltVGltZVplcm9JdGVyYXRpb25zKQor
eworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRp
b24oMCkpOworICAgIEVYUEVDVF9FUSgwLjAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0
aW9uKC0xLjApKTsKKyAgICBFWFBFQ1RfRVEoMC4wLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0
ZXJhdGlvbigwLjApKTsKKyAgICBFWFBFQ1RfRVEoMC4wLCBhbmltLT50cmltVGltZVRvQ3VycmVu
dEl0ZXJhdGlvbigxLjApKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIFRyaW1U
aW1lT25lSXRlcmF0aW9uKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShj
cmVhdGVBY3RpdmVBbmltYXRpb24oMSkpOworICAgIEVYUEVDVF9FUSgwLjAsIGFuaW0tPnRyaW1U
aW1lVG9DdXJyZW50SXRlcmF0aW9uKC0xLjApKTsKKyAgICBFWFBFQ1RfRVEoMC4wLCBhbmltLT50
cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigwLjApKTsKKyAgICBFWFBFQ1RfRVEoMS4wLCBhbmlt
LT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxLjApKTsKKyAgICBFWFBFQ1RfRVEoMS4wLCBh
bmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigyLjApKTsKK30KKworVEVTVChDQ0FjdGl2
ZUFuaW1hdGlvblRlc3QsIFRyaW1UaW1lSW5maW5pdGVJdGVyYXRpb25zKQoreworICAgIE93blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24oLTEpKTsKKyAg
ICBFWFBFQ1RfRVEoMC4wLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigwLjApKTsK
KyAgICBFWFBFQ1RfRVEoMC41LCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigwLjUp
KTsKKyAgICBFWFBFQ1RfRVEoMC4wLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigx
LjApKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlv
bigxLjUpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIFRyaW1UaW1lU3RhcnRU
aW1lKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVB
bmltYXRpb24oMSkpOworICAgIGFuaW0tPnNldFN0YXJ0VGltZSg0LjApOworICAgIEVYUEVDVF9F
USgwLjAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDAuMCkpOworICAgIEVYUEVD
VF9FUSgwLjAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDQuMCkpOworICAgIEVY
UEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDQuNSkpOworICAg
IEVYUEVDVF9FUSgxLjAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDUuMCkpOwor
ICAgIEVYUEVDVF9FUSgxLjAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDYuMCkp
OworfQorCitURVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwgVHJpbVRpbWVQYXVzZVJlc3VtZSkK
K3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0
aW9uKDEpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmlu
ZywgMC4wKTsKKyAgICBFWFBFQ1RfRVEoMC4wLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJh
dGlvbigwLjApKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0
ZXJhdGlvbigwLjUpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
UGF1c2VkLCAwLjUpOworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50
SXRlcmF0aW9uKDEwMjQuMCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpSdW5uaW5nLCAxMDI0LjApOworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1l
VG9DdXJyZW50SXRlcmF0aW9uKDEwMjQuMCkpOworICAgIEVYUEVDVF9FUSgxLjAsIGFuaW0tPnRy
aW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDEwMjQuNSkpOworfQorCitURVNUKENDQWN0aXZlQW5p
bWF0aW9uVGVzdCwgSXNGaW5pc2hlZEF0WmVyb0l0ZXJhdGlvbnMpCit7CisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigwKSk7CisgICAgYW5p
bS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDAuMCk7CisgICAgRVhQ
RUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgtMS4wKSk7CisgICAgRVhQRUNUX1RSVUUoYW5p
bS0+aXNGaW5pc2hlZEF0KDAuMCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRB
dCgxLjApKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWRBdE9u
ZUl0ZXJhdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6UnVubmluZywgMC4wKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0
KC0xLjApKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KDAuMCkpOworICAg
IEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgxLjApKTsKKyAgICBFWFBFQ1RfVFJVRShh
bmltLT5pc0ZpbmlzaGVkQXQoMi4wKSk7Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0
LCBJc0ZpbmlzaGVkQXRJbmZpbml0ZUl0ZXJhdGlvbnMpCit7CisgICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigtMSkpOworICAgIGFuaW0tPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAwLjApOworICAgIEVYUEVDVF9G
QUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMC4wKSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlz
RmluaXNoZWRBdCgwLjUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KDEu
MCkpOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMS41KSk7Cit9CisKK1RF
U1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkQXROb3RSdW5uaW5nKQoreworICAg
IE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24oMCkp
OworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAwLjAp
OworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwLjApKTsKKyAgICBhbmltLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwLjApOworICAgIEVYUEVDVF9G
QUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMC4wKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDAuMCk7CisgICAgRVhQRUNUX0ZB
TFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwLjApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgMC4wKTsKKyAgICBF
WFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KDAuMCkpOworICAgIGFuaW0tPnNldFJ1blN0
YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nVG9SdW4sIDAuMCk7CisgICAgRVhQRUNUX0ZB
TFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwLjApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0Fj
dGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIDAuMCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNG
aW5pc2hlZEF0KDAuMCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpBYm9ydGVkLCAwLjApOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwLjAp
KTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWQpCit7CisgICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigxKSk7
CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDAuMCk7
CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWQoKSk7CisgICAgYW5pbS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC4wKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
YW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMC4wKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+
aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgMC4wKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5p
bS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6V2FpdGluZ1RvUnVuLCAwLjApOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVk
KCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwg
MC4wKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltLT5pc0ZpbmlzaGVkKCkpOworICAgIGFuaW0tPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAwLjApOworICAgIEVYUEVDVF9U
UlVFKGFuaW0tPmlzRmluaXNoZWQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNTU5OWUwNjU3
MWNlZjQ1YjhlYmYzMjY4N2FmYmIwOWY4MDFkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3Qu
Y3BwCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCIKKworI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb24u
aCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgeworCitjbGFzcyBGYWtlQ29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworcHVibGljOgorICAgIEZha2VDb250cm9s
bGVyQ2xpZW50KCkgOiBtX29wYWNpdHkoMC4wZikgeyB9CisgICAgdmlydHVhbCB+RmFrZUNvbnRy
b2xsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9w
YWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgbV9hY3RpdmVDb250cm9s
bGVycy5hcHBlbmQoY29udHJvbGxlcik7CisgICAgfQorCisgICAgVmVjdG9yPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9sbGVycygpIHsgcmV0dXJuIG1fYWN0
aXZlQ29udHJvbGxlcnM7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBtX29wYWNpdHk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAgVmVjdG9yPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Cit9OworCitjbGFzcyBG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbiB7Citw
dWJsaWM6CisgICAgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uKQorICAg
ICAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24pCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0VmFsdWUoZG91YmxlIHQsIFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbHVlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgLy8gZG9lcyBub3RoaW5nIGF0IGFsbC4KKyAgICAgICAgcmV0dXJuIHQg
Pj0gbV9kdXJhdGlvbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fZHVyYXRpb247
Cit9OworCitjbGFzcyBGYWtlRmxvYXRUcmFuc2l0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRp
b24geworcHVibGljOgorICAgIEZha2VGbG9hdFRyYW5zaXRpb24oZG91YmxlIGR1cmF0aW9uLCBm
bG9hdCBmcm9tLCBmbG9hdCB0bykKKyAgICAgICAgOiBtX2R1cmF0aW9uKGR1cmF0aW9uKQorICAg
ICAgICAsIG1fZnJvbShmcm9tKQorICAgICAgICAsIG1fdG8odG8pCisgICAgeyB9CisKKyAgICB2
aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0VmFsdWUoZG91YmxlIHQsIGZsb2F0KiB2YWx1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHQgLz0gbV9kdXJhdGlvbjsKKyAgICAgICAgaWYgKHQgPj0gMS4wKQorICAg
ICAgICAgICAgdCA9IDEuMDsKKyAgICAgICAgKnZhbHVlID0gKDEuMCAtIHQpICogbV9mcm9tICsg
dCAqIG1fdG87CisgICAgICAgIHJldHVybiB0ID49IDEuMDsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgZG91YmxlIG1fZHVyYXRpb247CisgICAgZmxvYXQgbV9mcm9tOworICAgIGZsb2F0IG1fdG87
Cit9OworCisvLyBUZXN0cyB0aGF0IHRyYW5zaXRpb25pbmcgb3BhY2l0eSBmcm9tIDAgdG8gMSB3
b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgVHJpdmlhbFRyYW5zaXRpb24pCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7
CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigK
KyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7
CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAxLjBm
KSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuMCk7CisgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4w
KTsKKyAgICBFWFBFQ1RfRVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCisvLyBUZXN0cyB0aGF0
IHR3byBxdWV1ZWQgYW5pbWF0aW9ucyBhZmZlY3RpbmcgdGhlIHNhbWUgcHJvcGVydHkgcnVuIGlu
IHNlcXVlbmNlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2
aWFsUXVldWluZykKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNv
bnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwgMS4wZikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMS4wZiwgMC41ZikpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
LjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDEuMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMi4wKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwor
fQorCisvLyBUZXN0cyBpbnRlcnJ1cHRpbmcgYSB0cmFuc2l0aW9uIHdpdGggYW5vdGhlciB0cmFu
c2l0aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBJbnRlcnJ1
cHQpCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisgICAgY29udHJvbGxlci0+
YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMS4wLCAwLjBmLCAxLjBmKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLjAsIDEu
MGYsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDAuMCk7
CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDAuNSk7IC8vIHNlY29uZCBhbmltIHN0YXJ0cyBOT1cuCisgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLjBm
LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS41KTsKKyAgICBF
WFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCisvLyBUZXN0cyBzY2hlZHVsaW5nIHR3
byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aGVuIG9ubHkgb25lIHByb3BlcnR5IGlzIGZy
ZWUuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9n
ZXRoZXJXaGVuQVByb3BlcnR5SXNCbG9ja2VkKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50
IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRy
b2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZk
dW1teSkpOworCisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEuMCkpLCAxLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0
aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDEuMCkpLCAy
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MS4wLCAwLjBmLCAxLjBmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDAuMCk7CisgICAgRVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9w
YWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4wKTsKKyAgICAvLyBTaG91bGQgbm90IGhh
dmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZl
IHN0YXJ0ZWQgYXQgdGltZSAxLjAgYW5kIHNob3VsZCBiZSBkb25lLgorICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMi4wKTsKKyAgICBFWFBFQ1RfRVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCisv
LyBUZXN0cyBzY2hlZHVsaW5nIHR3byBhbmltYXRpb25zIHRvIHJ1biB0b2dldGhlciB3aXRoIGRp
ZmZlcmVudCBsZW5ndGhzIGFuZCBhbm90aGVyCisvLyBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0
IHdoZW4gdGhlIHNob3J0ZXIgYW5pbWF0aW9uIGZpbmlzaGVzIChzaG91bGQgd2FpdAorLy8gZm9y
IGJvdGggdG8gZmluaXNoKS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgU2NoZWR1bGVUb2dldGhlcldpdGhBbkFuaW1XYWl0aW5nKQoreworICAgIEZha2VDb250cm9s
bGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIuMCkpLCAxLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMS4w
LCAwLjBmLCAxLjBmKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29u
dHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VG
bG9hdFRyYW5zaXRpb24oMS4wLCAxLjBmLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisKKyAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93
LgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9w
YWNpdHkoKSk7CisgICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBoYXZlIGZpbmlz
aGVkIGF0IHRpbWUgMS4wLCBidXQgdGhlIGdyb3VwCisgICAgLy8gb2YgYW5pbWF0aW9ucyB3aXRo
IGlkIDEgZG9uJ3QgZmluaXNoIHVudGlsIHRpbWUgMi4wIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAor
ICAgIC8vIG9mIHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uLgorICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMi4wKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNp
dGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgxLjBmLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgLy8gVGhl
IHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMi4wIGFu
ZCBzaG91bGQgYmUKKyAgICAvLyBkb25lIGJ5IHRpbWUgMy4wCisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgzLjApOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVY
UEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRl
c3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCitURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQor
eworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgT3duUHRyPENDQWN0aXZl
QW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwgMS4wZikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
V2FpdGluZ1RvUnVuLCAwLjApOworICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMS4wKTsKKyAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMC4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDAuMGYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxLjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDIuMCk7CisgICAgRVhQRUNUX0VRKDEuMGYsIGR1bW15Lm9wYWNp
dHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKK30KKworLy8gVGVzdHMgc2NoZWR1bGluZyBhbiBhbmltYXRpb24gdG8gc3RhcnQgaW4gdGhl
IGZ1dHVyZSB0aGF0J3MgaW50ZXJydXB0aW5nIGEgcnVubmluZyBhbmltYXRpb24uCitURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlZEFuaW1hdGlvbkludGVy
cnVwdHNSdW5uaW5nQW5pbWF0aW9uKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15
OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIo
CisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkp
OworCisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQ
dHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMi4wLCAwLjBmLCAxLjBmKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMS4wLCAwLjVmLCAwLjBmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nVG9SdW4s
IDAuMCk7CisgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxLjApOworICAgIGNvbnRyb2xsZXItPmFk
ZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9u
IHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuMCk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMC41KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xs
ZXItPmFuaW1hdGUoMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgyLjApOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFj
aXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRo
ZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmluZyBhbmltYXRpb24KKy8vIGFuZCB0aGVy
ZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IGxhdGVyLgorVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRl
cnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5RdWV1ZSkKK3sKKyAgICBGYWtlQ29udHJv
bGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlv
bjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIuMCwgMC4wZiwgMS4w
ZikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIuMCwgMC41ZiwgMC4wZikpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6V2FpdGluZ1RvUnVuLCAwLjApOworICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMS4wKTsKKyAg
ICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFk
ZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0
aW9uKDEuMCwgMC4wZiwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsK
KworICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRp
YXRlbHkuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjApOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4wZiwgZHVt
bXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgw
LjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjApOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMuMCk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoNC4wKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVz
dCB0aGF0IGEgbG9vcGluZyBhbmltYXRpb24gbG9vcHMgYW5kIGZvciB0aGUgY29ycmVjdCBudW1i
ZXIgb2YgaXRlcmF0aW9ucy4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVz
dCwgVHJpdmlhbExvb3BpbmcpCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Cisg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAxLjBmKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldEl0ZXJhdGlv
bnMoMyk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAuMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFjaXR5KCkpOwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYs
IGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1KTsKKyAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNU
X0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43
NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwor
ICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDMuMCk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMS4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIC8v
IEp1c3QgYmUgZXh0cmEgc3VyZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDQuMCk7CisgICAg
RVhQRUNUX0VRKDEuMGYsIGR1bW15Lm9wYWNpdHkoKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhbiBp
bmZpbml0ZWx5IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGlsIGFib3J0ZWQu
CitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRlTG9vcGlu
ZykKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBp
ZCA9IDE7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwg
MS4wZikpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+c2V0
SXRlcmF0aW9ucygtMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjBmLCBkdW1teS5vcGFj
aXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEw
NzM3NDE4MjQuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0Ljc1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5v
cGFjaXR5KCkpOworCisgICAgY29udHJvbGxlci0+c2V0UnVuU3RhdGUoaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpBYm9ydGVkLCAwLjc1Zik7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHko
KSk7Cit9CisKKy8vIFRlc3QgdGhhdCBwYXVzaW5nIGFuZCByZXN1bWluZyB3b3JrIGFzIGV4cGVj
dGVkLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBQYXVzZVJlc3Vt
ZSkKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBp
ZCA9IDE7CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRv
cHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMS4wLCAwLjBmLCAxLjBmKSksIGlkLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjAp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMC4wZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDAuNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgY29udHJv
bGxlci0+c2V0UnVuU3RhdGUoaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDAuNWYpOwor
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjApOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXku
b3BhY2l0eSgpKTsKKworICAgIGNvbnRyb2xsZXItPnNldFJ1blN0YXRlKGlkLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgMTAyNC4wZik7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEw
MjQuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxMDI0LjUpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEuMGYsIGR1bW15Lm9wYWNpdHkoKSk7Cit9
CisKKy8vIFRlc3RzIHRoYXQgYWRkaW5nIGFuIGFuaW1hdGlvbiB0byB0aGUgY29udHJvbGxlciBj
YWxscyB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2sgb24gdGhlIGNvbnRyb2xsZXIgY2xpZW50Cisv
LyAoaW4gdGhpcyBjYXNlLCBhZGRpbmcgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIGxpc3Qgb2YgYWN0
aXZlIGNvbnRyb2xsZXIpLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBEaWRBY3RpdmF0ZSkKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBP
d25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAg
ICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7CisKKyAgICBj
b25zdCBpbnQgaWQgPSAxOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEuMCwgMC4wZiwgMS4wZikp
LCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIEVYUEVDVF9FUSgxLCBk
dW1teS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNvbnRyb2xs
ZXIuZ2V0KCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOworfQorCit9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121735</attachid>
            <date>2012-01-09 15:34:31 -0800</date>
            <delta_ts>2012-01-10 10:54:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20120109183429.patch</filename>
            <type>text/plain</type>
            <size>63960</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI4Zjk0M2UxNjc3OWFl
MzdkYzM3MjhjM2NjYjk1MTRkYzg3NmQxMy4uNjEyNmYxOTkyZDUyYmZjOTQwMWIwNmQ5NWEyZjU1
YTRkOTcxNTBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTAxLTA5ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVB
bmltYXRpb246OnNldFJ1blN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0
aW9uOjpncm91cFdpdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246Omlz
RmluaXNoZWRBdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRp
bWVUb0N1cnJlbnRJdGVyYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1h
dGlvbjo6fkNDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5p
bWF0aW9uOjp0YXJnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1h
dGlvbjo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OnJ1blN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpncm91cCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXRlcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c2V0SXRlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0
aXZlQW5pbWF0aW9uOjpzZXRTdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVB
bmltYXRpb246OmlzRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRp
b246OmFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0Fu
aW1hdGlvbkN1cnZlOjp0b0Zsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NBbmltYXRpb25DdXJ2ZTo6dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU6On5DQ0FuaW1hdGlvbkN1cnZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25DdXJ2ZTo6fkNDRmxvYXRBbmltYXRp
b25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0QW5pbWF0aW9uQ3VydmU6OnR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6fkNDVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpoYXNBY3RpdmVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmlt
YXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnJlc29sdmVDb25mbGljdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpwdXJnZUZpbmlzaGVk
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OnRpY2tBbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQ6On5DQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQpOgorCiAyMDEyLTAxLTA1ICBCZW5qYW1pbiBQ
b3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBkdXBsaWNhdGUg
ZmlsZSByZWZlcmVuY2VzIGZyb20gV2ViQ29yZS54Y29kZXByb2oKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggZDJjMzY4NzMzYjgzZTY5MDY2MDdmMGQ3OGQxNzIxN2MzZWVhZjhhNS4uZjVi
ZWE2NWVlYzZlZThmYjc0ZWY1MzgzYmEwMWUxZDE1ZGIyOWQ2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wMS0wOSAgSWFuIFZvbGxpY2sgIDx2b2xs
aWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBhIGJhc2UtY2xh
c3MgQ0NBbmltYXRpb24gdG8gcmVwcmVzZW50IGNvbXBvc2l0b3IgYW5pbWF0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyMzMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgor
ICAgICAgICAqIHRlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmFrZUZsb2F0QW5pbWF0aW9uOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpGYWtlRmxvYXRBbmltYXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKyAgICAgICAg
KiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVudDo6RmFrZUNvbnRyb2xsZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6On5GYWtlQ29udHJv
bGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVudDo6b3Bh
Y2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVudDo6c2V0T3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVudDo6dHJhbnNmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250cm9sbGVyQ2xpZW50OjpzZXRUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6OmFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsRGlkQWN0aXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGll
bnQ6OmFjdGl2ZUNvbnRyb2xsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VUcmFuc2Zvcm1U
cmFuc2l0aW9uOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpG
YWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmFr
ZVRyYW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VG
bG9hdFRyYW5zaXRpb246OkZha2VGbG9hdFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUZs
b2F0VHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIw
MTItMDEtMDUgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbQ2hyb21pdW1dIFJlbW92ZSBXZWJTZXR0aW5nczo6c2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5h
YmxlZCBmcm9tIHB1YmxpYyBBUEkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMTZiNjI5N2VlNThjMTA5
OWQ2ZjY2YmI4NGMzYjc1NjlhNDhjM2U1My4uOGNiZjA4NjM0MTExNGVlMWIwYzE1NjQ5YmNiNWJi
MjUwYWMwNDFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU5NCw2ICszNTk0LDEwIEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmNwcCcsCkBAIC0zNjExLDYgKzM2MTUsOCBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hl
YWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDSW5wdXRIYW5kbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJRdWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjI5NmMwY2RmZWVmMjc3OWYxZmU0NzA1Nzg1OWZiNzg3NmMwMWQ4ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRp
b24uaCIKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPGNt
YXRoPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2
ZUFuaW1hdGlvbihQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGN1cnZlLCBJRCBpZCwgVGFy
Z2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgOiBtX2FuaW1hdGlvbkN1cnZlKGN1cnZl
KQorICAgICwgbV9pZChpZCkKKyAgICAsIG1fZ3JvdXAoaWQpCisgICAgLCBtX3RhcmdldFByb3Bl
cnR5KHRhcmdldFByb3BlcnR5KQorICAgICwgbV9ydW5TdGF0ZShXYWl0aW5nRm9yVGFyZ2V0QXZh
aWxhYmlsaXR5KQorICAgICwgbV9pdGVyYXRpb25zKDEpCisgICAgLCBtX3N0YXJ0VGltZSgwKQor
ICAgICwgbV9wYXVzZVRpbWUoMCkKKyAgICAsIG1fdG90YWxQYXVzZWRUaW1lKDApCit7Cit9CisK
K3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNldFJ1blN0YXRlKFJ1blN0YXRlIHJ1blN0YXRlLCBk
b3VibGUgbm93KQoreworICAgIGlmIChydW5TdGF0ZSA9PSBSdW5uaW5nICYmIG1fcnVuU3RhdGUg
PT0gUGF1c2VkKQorICAgICAgICBtX3RvdGFsUGF1c2VkVGltZSArPSBub3cgLSBtX3BhdXNlVGlt
ZTsKKyAgICBlbHNlIGlmIChydW5TdGF0ZSA9PSBQYXVzZWQpCisgICAgICAgIG1fcGF1c2VUaW1l
ID0gbm93OworICAgIG1fcnVuU3RhdGUgPSBydW5TdGF0ZTsKK30KKwordm9pZCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6Z3JvdXBXaXRoKENDQWN0aXZlQW5pbWF0aW9uKiB0b0FkZCkKK3sKKyAgICB0b0Fk
ZC0+bV9ncm91cCA9IG1fZ3JvdXA7Cit9CisKK2Jvb2wgQ0NBY3RpdmVBbmltYXRpb246OmlzRmlu
aXNoZWRBdChkb3VibGUgbm93KSBjb25zdAoreworICAgIGlmIChtX3J1blN0YXRlID09IEZpbmlz
aGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBSdW5uaW5nCisgICAgICAgICYmIG1faXRlcmF0aW9ucyA+
PSAwCisgICAgICAgICYmIG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9u
KCkgPD0gbm93IC0gc3RhcnRUaW1lKCkgLSBtX3RvdGFsUGF1c2VkVGltZTsKK30KKworZG91Ymxl
IENDQWN0aXZlQW5pbWF0aW9uOjp0cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihkb3VibGUgbm93
KSBjb25zdAoreworICAgIGRvdWJsZSB0cmltbWVkID0gbm93OworCisgICAgLy8gSWYgd2UncmUg
cGF1c2VkLCB0aW1lIGlzICdzdHVjaycgYXQgdGhlIHBhdXNlIHRpbWUuCisgICAgaWYgKG1fcnVu
U3RhdGUgPT0gUGF1c2VkICYmIHRyaW1tZWQgPiBtX3BhdXNlVGltZSkKKyAgICAgICAgdHJpbW1l
ZCA9IG1fcGF1c2VUaW1lOworCisgICAgLy8gUmV0dXJuZWQgdGltZSBzaG91bGQgYWx3YXlzIGJl
IHJlbGF0aXZlIHRvIHRoZSBzdGFydCB0aW1lIGFuZCBzaG91bGQgc3VidHJhY3QKKyAgICAvLyBh
bGwgdGltZSBzcGVudCBwYXVzZWQuCisgICAgdHJpbW1lZCAtPSBtX3N0YXJ0VGltZSArIG1fdG90
YWxQYXVzZWRUaW1lOworCisgICAgLy8gWmVybyBpcyBhbHdheXMgdGhlIHN0YXJ0IG9mIHRoZSBh
bmltYXRpb24uCisgICAgaWYgKHRyaW1tZWQgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAvLyBBbHdheXMgcmV0dXJuIHplcm8gaWYgd2UgaGF2ZSBubyBpdGVyYXRpb25zLgorICAgIGlm
ICghbV9pdGVyYXRpb25zKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIElmIGxlc3MgdGhh
biBhbiBpdGVyYXRpb24gZHVyYXRpb24sIGp1c3QgcmV0dXJuIHRyaW1tZWQuCisgICAgaWYgKHRy
aW1tZWQgPCBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpKQorICAgICAgICByZXR1cm4gdHJp
bW1lZDsKKworICAgIC8vIElmIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdG90YWwgZHVy
YXRpb24sIHJldHVybiBpdGVyYXRpb24gZHVyYXRpb24uCisgICAgaWYgKG1faXRlcmF0aW9ucyA+
PSAwICYmIHRyaW1tZWQgPj0gbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSAqIG1faXRlcmF0
aW9ucykKKyAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCk7CisKKyAg
ICAvLyBGaW5hbGx5LCByZXR1cm4geCB3aGVyZSB0cmltbWVkID0geCArIG4gKiBtX2FuaW1hdGlv
bi0+ZHVyYXRpb24oKSBmb3Igc29tZSBwb3NpdGl2ZSBpbnRlZ2VyIG4uCisgICAgcmV0dXJuIGZt
b2QodHJpbW1lZCwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRlMWExNzA2MGZkNDkyZDQyNDdjODdkYWIwZDE0MzFlZmEyMjM2YmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2
ZUFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEND
QWN0aXZlQW5pbWF0aW9uX2gKKyNkZWZpbmUgQ0NBY3RpdmVBbmltYXRpb25faAorCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKKworLy8gQSBDQ0FjdGl2ZUFu
aW1hdGlvbiwgY29udGFpbnMgYWxsIHRoZSBzdGF0ZSByZXF1aXJlZCB0byBwbGF5IGEgQ0NBbmlt
YXRpb24uCisvLyBTcGVjaWZpY2FsbHksIHRoZSBhZmZlY3RlZCBwcm9wZXJ0eSwgdGhlIHJ1biBz
dGF0ZSAocGF1c2VkLCBmaW5pc2hlZCwgZXRjLiksCisvLyBsb29wIGNvdW50LCBsYXN0IHBhdXNl
IHRpbWUsIGFuZCB0aGUgdG90YWwgdGltZSBzcGVudCBwYXVzZWQuCitjbGFzcyBDQ0FjdGl2ZUFu
aW1hdGlvbiB7CitwdWJsaWM6CisgICAgLy8gQWN0aXZlIGFuaW1hdGlvbnMgYXJlIHRvIGJlIHVu
aXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlaXIgSURzLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkK
KyAgICAvLyBvZiB0aGUgcGFydHkgY3JlYXRpbmcgdGhlIGFuaW1hdGlvbiB0byBzdXJlIHRoYXQg
dGhlIElEcyBhcmUgdW5pcXVlLgorICAgIHR5cGVkZWYgaW50IElEOworCisgICAgLy8gQW5pbWF0
aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0ZXMuIEFuaW1hdGlvbnMgd2Fp
dGluZyBmb3IgdGhlIG5leHQgdGljaworICAgIC8vIHdpbGwgc3RhcnQgdGhlIG5leHQgdGltZSB0
aGUgY29udHJvbGxlciBhbmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKKyAg
ICAvLyBhdmFpbGliaWxpdHkgd2lsbCBydW4gYXMgc29vbiBhcyB0aGVpciB0YXJnZXQgcHJvcGVy
dHkgaXMgZnJlZSAoYW5kIGFsbCB0aGUgYW5pbWF0aW9ucworICAgIC8vIGFuaW1hdGluZyB3aXRo
IGl0IGFyZSBhbHNvIGFibGUgdG8gcnVuKS4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0aGVpciBz
dGFydCB0aW1lIHRvCisgICAgLy8gY29tZSBoYXZlIGJlIHNjaGVkdWxlZCB0byBydW4gYXQgYSBw
YXJ0aWN1bGFyIHBvaW50IGluIHRpbWUuIFdoZW4gdGhpcyB0aW1lIGFycml2ZXMsCisgICAgLy8g
dGhlIGNvbnRyb2xsZXIgd2lsbCBtb3ZlIHRoZSBhbmltYXRpb25zIGludG8gdGhlIFJ1bm5pbmcg
c3RhdGUuIFJ1bm5pbmcgYW5pbWF0aW9ucworICAgIC8vIG1heSB0b2dnbGUgYmV0d2VlbiBSdW5u
aW5nIGFuZCBQYXVzZWQsIGFuZCBtYXkgYmUgc3RvcHBlZCBieSBtb3ZpbmcgaW50byBlaXRoZXIg
dGhlCisgICAgLy8gQWJvcnRlZCBvciBGaW5pc2hlZCBzdGF0ZXMuIEEgRmluaXNoZWQgYW5pbWF0
aW9uIHdhcyBhbGxvd2VkIHRvIHJ1biB0byBjb21wbGV0aW9uLCBidXQKKyAgICAvLyBhbiBBYm9y
dGVkIGFuaW1hdGlvbiB3YXMgbm90LgorICAgIGVudW0gUnVuU3RhdGUgeworICAgICAgICBXYWl0
aW5nRm9yTmV4dFRpY2sgPSAxLAorICAgICAgICBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5
LAorICAgICAgICBXYWl0aW5nRm9yU3RhcnRUaW1lLAorICAgICAgICBSdW5uaW5nLAorICAgICAg
ICBQYXVzZWQsCisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBBYm9ydGVkCisgICAgfTsKKwor
ICAgIGVudW0gVGFyZ2V0UHJvcGVydHkgeworICAgICAgICBUcmFuc2Zvcm0gPSAxLAorICAgICAg
ICBPcGFjaXR5CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgSUQgaWQsIFRh
cmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0FjdGl2ZUFuaW1hdGlvbihjdXJ2ZSwgaWQsIHRhcmdldFByb3BlcnR5KSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB+Q0NBY3RpdmVBbmltYXRpb24oKSB7IH0KKworICAgIFRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRQcm9wZXJ0
eTsgfQorICAgIElEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgUnVuU3RhdGUg
cnVuU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3J1blN0YXRlOyB9CisgICAgdm9pZCBzZXRSdW5T
dGF0ZShSdW5TdGF0ZSwgZG91YmxlIG5vdyk7CisKKyAgICAvLyBBbmltYXRpb25zIHRoYXQgbXVz
dCBiZSBydW4gdG9nZXRoZXIgYXJlIGNhbGxlZCAnZ3JvdXBlZCcuIEdyb3VwZWQgYW5pbWF0aW9u
cyBhcmUgZ3VhcmFudGVlZAorICAgIC8vIHRvIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUgYW5kIG5v
IG90aGVyIGFuaW1hdGlvbnMgbWF5IGFuaW1hdGUgYW55IG9mIHRoZSBncm91cCdzIHRhcmdldAor
ICAgIC8vIHByb3BlcnRpZXMgdW50aWwgYWxsIGFuaW1hdGlvbnMgaW4gdGhlIGdyb3VwIGhhdmUg
ZmluaXNoZWQgYW5pbWF0aW5nLgorICAgIElEIGdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9ncm91
cDsgfQorCisgICAgLy8gVGhlIGdpdmVuIGFuaW1hdGlvbiBpcyBhZGRlZCB0byAndGhpcycgYW5p
bWF0aW9uJ3MgZ3JvdXAuCisgICAgdm9pZCBncm91cFdpdGgoQ0NBY3RpdmVBbmltYXRpb24qKTsK
KworICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBhbmltYXRpb24g
d2lsbCBwbGF5LiBJZiB0aGlzCisgICAgLy8gdmFsdWUgaXMgemVybyB0aGUgYW5pbWF0aW9uIHdp
bGwgbm90IHBsYXkuIElmIGl0IGlzIG5lZ2F0aXZlLCB0aGVuCisgICAgLy8gdGhlIGFuaW1hdGlv
biB3aWxsIGxvb3AgaW5kZWZpbml0ZWx5LgorICAgIGludCBpdGVyYXRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9pdGVyYXRpb25zOyB9CisgICAgdm9pZCBzZXRJdGVyYXRpb25zKGludCBuKSB7IG1f
aXRlcmF0aW9ucyA9IG47IH0KKworICAgIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0VGltZTsgfQorICAgIHZvaWQgc2V0U3RhcnRUaW1lKGRvdWJsZSBzdGFydFRpbWUp
IHsgbV9zdGFydFRpbWUgPSBzdGFydFRpbWU7IH0KKworICAgIGJvb2wgaXNGaW5pc2hlZEF0KGRv
dWJsZSBub3cpIGNvbnN0OworICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cnVuU3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkOyB9CisKKyAgICBD
Q0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3Vy
dmUuZ2V0KCk7IH0KKyAgICBjb25zdCBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KKworICAgIC8vIFRha2Vz
IHRoZSBnaXZlbiBhYnNvbHV0ZSB0aW1lLCBhbmQgdXNpbmcgdGhlIHN0YXJ0IHRpbWUgYW5kIHRo
ZSBudW1iZXIKKyAgICAvLyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1l
IGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KKyAgICBkb3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJ
dGVyYXRpb24oZG91YmxlIHQpIGNvbnN0OworCitwcml2YXRlOgorICAgIENDQWN0aXZlQW5pbWF0
aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4sIElELCBUYXJnZXRQcm9wZXJ0eSk7CisK
KyAgICBPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gbV9hbmltYXRpb25DdXJ2ZTsKKworICAgIElE
IG1faWQ7CisKKyAgICAvLyBUbyBhdm9pZCBjb2xsaXNpb25zLCB0aGUgZ3JvdXAncyBJRCBpcyB0
aGUgSUQgb2Ygb25lIG9mIHRoZSBhbmltYXRpb25zIGluIHRoZSBncm91cAorICAgIC8vICh3aGlj
aCBzaG91bGQgYmUgdW5pcXVlKS4KKyAgICBJRCBtX2dyb3VwOworCisgICAgVGFyZ2V0UHJvcGVy
dHkgbV90YXJnZXRQcm9wZXJ0eTsKKyAgICBSdW5TdGF0ZSBtX3J1blN0YXRlOworICAgIGludCBt
X2l0ZXJhdGlvbnM7CisgICAgZG91YmxlIG1fc3RhcnRUaW1lOworCisgICAgLy8gVGhlc2UgYXJl
IHVzZWQgaW4gdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24gdG8gYWNjb3VudCBmb3IgdGltZQor
ICAgIC8vIHNwZW50IHdoaWxlIHBhdXNlZC4gVGhpcyBpcyBub3QgaW5jbHVkZWQgaW4gQW5pbWF0
aW9uU3RhdGUgc2luY2UgaXQKKyAgICAvLyB0aGVyZSBpcyBhYnNvbHV0ZWx5IG5vIG5lZWQgZm9y
IGNsaWVudHMgb2YgdGhpcyBjb250cm9sbGVyIHRvIGtub3cKKyAgICAvLyBhYm91dCB0aGVzZSB2
YWx1ZXMuCisgICAgZG91YmxlIG1fcGF1c2VUaW1lOworICAgIGRvdWJsZSBtX3RvdGFsUGF1c2Vk
VGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDQWN0aXZl
QW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NThjZGM2YWQ2NjIxNGMwYzZiNGYzMTZmZjc4NzhkNDk3N2QzMTUzMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0
aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqIENDQW5pbWF0aW9uQ3Vy
dmU6OnRvRmxvYXRBbmltYXRpb25DdXJ2ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHR5cGUoKSA9
PSAgQ0NBbmltYXRpb25DdXJ2ZTo6RmxvYXQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqPih0aGlzKTsKK30KKworY29uc3QgQ0NUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSogQ0NBbmltYXRpb25DdXJ2ZTo6dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHR5cGUoKSA9PSAgQ0NBbmltYXRpb25DdXJ2ZTo6VHJh
bnNmb3JtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSo+KHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE2NDg1NGJlYzllOWZiYzIzZTA2YzUyZWVj
MTE3ZTY4MzM2NTcxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaApAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDQW5pbWF0aW9uQ3VydmVfaAorI2RlZmluZSBDQ0Fu
aW1hdGlvbkN1cnZlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0Zsb2F0QW5p
bWF0aW9uQ3VydmU7CitjbGFzcyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOworY2xhc3MgVHJh
bnNmb3JtT3BlcmF0aW9uczsKKworLy8gQW4gYW5pbWF0aW9uIGlzIGVzc2VudGlhbGx5IGEgZnVu
Y3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUgZ2l2ZW4gYSB0aW1lLgorLy8gVGhlcmUgYXJlIGN1
cnJlbnRseSBvbmx5IHR3byB0eXBlcyBvZiBhbmltYXRpb24sIGZsb2F0IGFuZCB0cmFuc2Zvcm0u
CitjbGFzcyBDQ0FuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgeyBGbG9h
dCwgVHJhbnNmb3JtIH07CisKKyAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbkN1cnZlKCkgeyB9CisK
KyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5
cGUgdHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25DdXJ2ZSog
dG9GbG9hdEFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7CisgICAgY29uc3QgQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSogdG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIGNvbnN0OworfTsKKworY2xh
c3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkNDRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMgZmluaXNoZWQuCisgICAgdmlydHVhbCBi
b29sIGdldFZhbHVlKGRvdWJsZSB0LCBmbG9hdCogdmFsdWUpIGNvbnN0ID0gMDsKKworICAgIC8v
IFBhcnRpYWwgQ0NBbmltYXRpb24gaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBGbG9hdDsgfQorfTsKKworY2xhc3MgQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSA6IHB1YmxpYyBDQ0FuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5DQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGFuaW1hdGlvbiBpcyBmaW5pc2hlZC4KKyAgICB2aXJ0dWFsIGJvb2wgZ2V0VmFs
dWUoZG91YmxlIHQsIFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbHVlKSBjb25zdCA9IDA7CisKKyAg
ICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Mzg3
YzZiNTU2MjRjZDI3NDkxNzYwNzQ1OWIxMmM3YjFkMTE1ZDE1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmNwcApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmgiCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXMuIFVzZWQgd2hl
biBkZXRlcmltaW5pbmcgaWYgYW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKKy8vIGF2YWls
aWJpbGl0eSBhcmUgYWJsZSB0byBydW4uCit0eXBlZGVmIEhhc2hTZXQ8aW50PiBUYXJnZXRQcm9w
ZXJ0aWVzOworCitQYXNzT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwoY2xpZW50KSk7Cit9CisKK0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xp
ZW50KQoreworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YW5pbWF0
ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNzKQoreworICAgIHN0YXJ0QW5pbWF0aW9uc1dhaXRp
bmdGb3JOZXh0VGljayhmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHN0YXJ0QW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWUoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFuaW1hdGlv
bnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAg
cmVzb2x2ZUNvbmZsaWN0cyhmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHRpY2tBbmltYXRpb25z
KGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgcHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKKyAg
ICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGZyYW1lQmVnaW5U
aW1lU2Vjcyk7Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQo
UGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbSkKK3sKKyAgICBtX2FjdGl2ZUFuaW1h
dGlvbnMuYXBwZW5kKGFuaW0pOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUodGhpcyk7Cit9CisKK0NDQWN0aXZl
QW5pbWF0aW9uKiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1h
dGlvbihDQ0FjdGl2ZUFuaW1hdGlvbjo6SUQgaWQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVB
bmltYXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOworfQorCitib29sIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9
IENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cp
OworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRpbWUobm93KTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdykKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkK
KyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2
ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnN0YXJ0VGltZSgpIDw9IG5vdykKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7Cit9CisKK3ZvaWQg
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit7CisgICAgLy8gRmlyc3QgY29sbGVjdCBy
dW5uaW5nIHByb3BlcnRpZXMuCisgICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJvcGVydGll
czsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
ICsraSkKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBD
Q0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZyB8fCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0
YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkKQorICAgICAgICAgICAgYmxvY2tl
ZFByb3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICAvLyBpZiBpdCdzIGVucXVldWVkCisgICAgICAgIGlmIChtX2FjdGl2
ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHkpIHsKKyAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIHByb3Bl
cnRpZXMgZm9yIGFuaW1hdGlvbnMgd2l0aCB0aGUgc2FtZSBpZCAodGhleSBzaG91bGQgYWxsIGFs
c28gYmUgZW5xdWV1ZWQpCisgICAgICAgICAgICBUYXJnZXRQcm9wZXJ0aWVzIGVucXVldWVkUHJv
cGVydGllczsKKyAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmlt
YXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGog
PSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikKKyAgICAgICAgICAg
ICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0
aW9uc1tqXS0+Z3JvdXAoKSkKKyAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVz
LmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3BlcnR5KCkpOworCisgICAgICAg
ICAgICBib29sIG51bGxJbnRlcnNlY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgZm9yIChUYXJn
ZXRQcm9wZXJ0aWVzOjppdGVyYXRvciBwSXRlciA9IGVucXVldWVkUHJvcGVydGllcy5iZWdpbigp
OyBwSXRlciAhPSBlbnF1ZXVlZFByb3BlcnRpZXMuZW5kKCk7ICsrcEl0ZXIpCisgICAgICAgICAg
ICAgICAgaWYgKCFibG9ja2VkUHJvcGVydGllcy5hZGQoKnBJdGVyKS5zZWNvbmQpCisgICAgICAg
ICAgICAgICAgICAgIG51bGxJbnRlcnNlY3Rpb24gPSBmYWxzZTsKKworICAgICAgICAgICAgLy8g
aWYgdGhlcmUncyBub3RoaW5nIGluIGNvbW1vbiwgc3RhcnQgdGhlbSB1cC4KKyAgICAgICAgICAg
IGlmIChudWxsSW50ZXJzZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKKyAg
ICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cpOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0
ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpyZXNvbHZl
Q29uZmxpY3RzKGRvdWJsZSBub3cpCit7CisgICAgLy8gRmluZCBhbnkgYW5pbWF0aW9ucyB0aGF0
IGFyZSBhbmltYXRpbmcgdGhlIHNhbWUgcHJvcGVydHkgYW5kIHJlc29sdmUgdGhlCisgICAgLy8g
Y29uZmljdC4gV2UgY291bGQgZXZlbnR1YWxseSBibGVuZCwgYnV0IGZvciBub3cgd2UnbGwganVz
dCBhYm9ydCB0aGUKKyAgICAvLyBwcmV2aW91cyBhbmltYXRpb24gKHdoZXJlICdwcmV2aW91cycg
bWVhbnM6ICgxKSBoYXMgYSBwcmlvciBzdGFydCB0aW1lIG9yCisgICAgLy8gKDIpIGhhcyBhbiBl
cXVhbCBzdGFydCB0aW1lLCBidXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBlYXJsaWVyLCBpLmUu
LAorICAgIC8vIGhhcyBhIGxvd2VyIGluZGV4IGluIG1fYWN0aXZlQW5pbWF0aW9ucykuCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2
ZUFuaW1hdGlvbjo6UnVubmluZykgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAx
OyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZyAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0g
bV9hY3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpID4gbV9hY3RpdmVB
bmltYXRpb25zW2pdLT5zdGFydFRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0
aXZlQW5pbWF0aW9uc1tqXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQs
IG5vdyk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFi
b3J0ZWQsIG5vdyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VG
aW5pc2hlZEFuaW1hdGlvbnMoKQoreworICAgIC8vIGVhY2ggaXRlcmF0aW9uLCBtX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNlcyBvciBpIGluY3JlbWVudHMKKyAgICAvLyBndWFyYW50
ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0aW9uLgorICAgIHNpemVfdCBpID0g
MDsKKyAgICB3aGlsZSAoaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkpIHsKKyAgICAgICAg
Ym9vbCBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgIGFsbEFu
aW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAg
ICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVB
bmltYXRpb25zW2pdLT5ncm91cCgpICYmICFtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPmlzRmluaXNo
ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hl
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbEFuaW1zV2l0aFNhbWVJ
ZEFyZUZpbmlzaGVkKQorICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zLnJlbW92ZShpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAgIH0KK30KKwordm9pZCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKGRvdWJsZSBub3cpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZykgeworICAgICAgICAgICAgZG91YmxlIHRyaW1tZWQgPSBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKG5vdyk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHko
KSkgeworCisgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm06IHsK
KyAgICAgICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAg
ICAgICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlvbkN1cnZlKCktPnRvVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCwgJm9wZXJhdGlvbnMpOworICAgICAgICAgICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmlzRmluaXNoZWRBdChub3cpKQorICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5p
bWF0aW9uOjpGaW5pc2hlZCwgbm93KTsKKworICAgICAgICAgICAgICAgIC8vIERlY2lkZSBoZXJl
IGlmIGFic29sdXRlIG9yIHJlbGF0aXZlLiBBYnNvbHV0ZSBmb3Igbm93LgorICAgICAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvQXBwbHk7CisgICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy5hcHBseShGbG9hdFNpemUoKSwgdG9BcHBseSk7CisgICAgICAgICAgICAgICAgbV9jbGll
bnQtPnNldFRyYW5zZm9ybSh0b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eTog
eworICAgICAgICAgICAgICAgIGZsb2F0IG9wYWNpdHk7CisgICAgICAgICAgICAgICAgY29uc3Qg
Q0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5hbmltYXRpb25DdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAg
ICAgICAgICAgICAgICBmbG9hdEFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkLCAmb3Bh
Y2l0eSk7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5p
c2hlZEF0KG5vdykpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBub3cpOworCisgICAgICAg
ICAgICAgICAgbV9jbGllbnQtPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAg
IH0gLy8gaWYgcnVubmluZworICAgIH0gLy8gZm9yIGVhY2ggYW5pbWF0aW9uCit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTI5YWJiODY0M2MyNmJlMDkxMTNkOThlODQy
YmNmOWU4NWNlNDEwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCkBA
IC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsX2gKKyNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gK
KworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0
eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOwor
ICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1wbERp
ZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopID0gMDsKK307CisKK2Ns
YXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjcmVhdGUoQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGUoZG91
YmxlIGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisKKyAgICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0
aXZlQW5pbWF0aW9uPik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIHdp
dGggdGhlIGdpdmVuIElEIGlmIGl0IGV4aXN0cy4KKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0
QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpJRCk7CisKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlcmUgYXJlIGFueSBhbmltYXRpb25zIHRoYXQgYXJlIG5laXRoZXIgZmluaXNo
ZWQgbm9yIGFib3J0ZWQuCisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRpb24oKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICAvLyBUaGUgYW5pbWF0b3IgaXMgb3duZWQgYnkgdGhlIGxheWVyLgorICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQqKTsKKworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRU
aWNrKGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZShkb3VibGUgbm93KTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJn
ZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdyk7CisgICAgdm9pZCByZXNvbHZlQ29uZmxpY3RzKGRv
dWJsZSBub3cpOworICAgIHZvaWQgcHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKTsKKworICAgIHZv
aWQgdGlja0FuaW1hdGlvbnMoZG91YmxlIG5vdyk7CisKKyAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OworICAgIFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTY3NGJiNmI4NWIwODVjYWJhY2M5ZDlkNjQ5
OTkzZDVkNjJmZTVjZi4uYmY1OTY0MjQ4ZDhkYzYxNGMwNTlhOTUxMTgwYzNkNmFiMzlhM2RmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02MCw5ICs2MCwxMSBAQAogICAgICAg
ICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNz
b2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NBY3RpdmVBbmltYXRp
b25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ0xheWVyUXVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyU29ydGVy
VGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Fj
dGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0Fj
dGl2ZUFuaW1hdGlvblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkM2ZlNzg2ODJmMWU1NTU1OTVhNThl
YTZkNTJkYzdhZGQ5Mzc3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQWN0aXZl
QW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZha2VGbG9hdEFu
aW1hdGlvbiA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIHZp
cnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBnZXRWYWx1ZShkb3VibGUgdCwgZmxvYXQqIHZhbHVlKSBjb25zdCB7IHJldHVybiAxOyB9
Cit9OworCitQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGVBY3RpdmVBbmltYXRp
b24oaW50IGl0ZXJhdGlvbnMpCit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b1Jl
dHVybihDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRBbmlt
YXRpb24pLCAwLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvUmV0dXJuLT5z
ZXRJdGVyYXRpb25zKGl0ZXJhdGlvbnMpOworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7
Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBUcmltVGltZVplcm9JdGVyYXRpb25z
KQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmlt
YXRpb24oMCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJh
dGlvbigtMSkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJh
dGlvbigwKSk7CisgICAgRVhQRUNUX0VRKDAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0
aW9uKDEpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIFRyaW1UaW1lT25lSXRl
cmF0aW9uKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3Rp
dmVBbmltYXRpb24oMSkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVu
dEl0ZXJhdGlvbigtMSkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVu
dEl0ZXJhdGlvbigwKSk7CisgICAgRVhQRUNUX0VRKDEsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50
SXRlcmF0aW9uKDEpKTsKKyAgICBFWFBFQ1RfRVEoMSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJ
dGVyYXRpb24oMikpOworfQorCitURVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwgVHJpbVRpbWVJ
bmZpbml0ZUl0ZXJhdGlvbnMpCit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmlt
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigtMSkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmlt
VGltZVRvQ3VycmVudEl0ZXJhdGlvbigwKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgYW5pbS0+dHJp
bVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMC41KSk7CisgICAgRVhQRUNUX0VRKDAsIGFuaW0tPnRy
aW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDEpKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBhbmltLT50
cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxLjUpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1h
dGlvblRlc3QsIFRyaW1UaW1lU3RhcnRUaW1lKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1h
dGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24oMSkpOworICAgIGFuaW0tPnNldFN0YXJ0
VGltZSg0KTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRp
b24oMCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlv
big0KSk7CisgICAgRVhQRUNUX0VRKDAuNSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRp
b24oNC41KSk7CisgICAgRVhQRUNUX0VRKDEsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0
aW9uKDUpKTsKKyAgICBFWFBFQ1RfRVEoMSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRp
b24oNikpOworfQorCitURVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwgVHJpbVRpbWVQYXVzZVJl
c3VtZSkKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZl
QW5pbWF0aW9uKDEpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
UnVubmluZywgMCk7CisgICAgRVhQRUNUX0VRKDAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRl
cmF0aW9uKDApKTsKKyAgICBFWFBFQ1RfRVEoMC41LCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0
ZXJhdGlvbigwLjUpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6
UGF1c2VkLCAwLjUpOworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50
SXRlcmF0aW9uKDEwMjQpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZywgMTAyNCk7CisgICAgRVhQRUNUX0VRKDAuNSwgYW5pbS0+dHJpbVRpbWVUb0N1
cnJlbnRJdGVyYXRpb24oMTAyNCkpOworICAgIEVYUEVDVF9FUSgxLCBhbmltLT50cmltVGltZVRv
Q3VycmVudEl0ZXJhdGlvbigxMDI0LjUpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRl
c3QsIElzRmluaXNoZWRBdFplcm9JdGVyYXRpb25zKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24oMCkpOworICAgIGFuaW0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
YW5pbS0+aXNGaW5pc2hlZEF0KC0xKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hl
ZEF0KDApKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltLT5pc0ZpbmlzaGVkQXQoMSkpOworfQorCitU
RVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwgSXNGaW5pc2hlZEF0T25lSXRlcmF0aW9uKQorewor
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24o
MSkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAw
KTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KC0xKSk7CisgICAgRVhQRUNU
X0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNG
aW5pc2hlZEF0KDEpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltLT5pc0ZpbmlzaGVkQXQoMikpOwor
fQorCitURVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwgSXNGaW5pc2hlZEF0SW5maW5pdGVJdGVy
YXRpb25zKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3Rp
dmVBbmltYXRpb24oLTEpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZywgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7
CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwLjUpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KDEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNG
aW5pc2hlZEF0KDEuNSkpOworfQorCitURVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwgSXNGaW5p
c2hlZEF0Tm90UnVubmluZykKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0o
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKDApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2
ZUFuaW1hdGlvbjo6UnVubmluZywgMCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hl
ZEF0KDApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2Vk
LCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KDApKTsKKyAgICBhbmlt
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsK
KyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KDApKTsKKyAgICBhbmltLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwg
MCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5pbS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwor
ICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMCkpOworICAgIGFuaW0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgMCk7CisgICAgRVhQRUNUX1RSVUUo
YW5pbS0+aXNGaW5pc2hlZEF0KDApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6QWJvcnRlZCwgMCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZEF0
KDApKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWQpCit7Cisg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigx
KSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDAp
OworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkKCkpOworICAgIGFuaW0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpQYXVzZWQsIDApOworICAgIEVYUEVDVF9GQUxTRShh
bmltLT5pc0ZpbmlzaGVkKCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0Zp
bmlzaGVkKCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNG
aW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2Fp
dGluZ0ZvclN0YXJ0VGltZSwgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWQo
KSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCAw
KTsKKyAgICBFWFBFQ1RfVFJVRShhbmltLT5pc0ZpbmlzaGVkKCkpOworICAgIGFuaW0tPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAwKTsKKyAgICBFWFBFQ1RfVFJVRShh
bmltLT5pc0ZpbmlzaGVkKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTYxODAyZWM4ZWU3MmZk
YmYxNDdmZTllNzQwZmVjZDkyZDk0MWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcApA
QCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgiCisKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUu
aCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgeworCitjbGFzcyBGYWtlQ29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworcHVibGljOgorICAgIEZha2VDb250cm9s
bGVyQ2xpZW50KCkgOiBtX29wYWNpdHkoMCkgeyB9CisgICAgdmlydHVhbCB+RmFrZUNvbnRyb2xs
ZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNp
dHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgbV9hY3RpdmVDb250cm9sbGVy
cy5hcHBlbmQoY29udHJvbGxlcik7CisgICAgfQorCisgICAgVmVjdG9yPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9sbGVycygpIHsgcmV0dXJuIG1fYWN0aXZl
Q29udHJvbGxlcnM7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAgVmVjdG9yPENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Cit9OworCitjbGFzcyBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsK
K3B1YmxpYzoKKyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pCisg
ICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlvbikKKyAgICB7IH0KKworICAgIHZpcnR1YWwgZG91
YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgIHZpcnR1YWwg
Ym9vbCBnZXRWYWx1ZShkb3VibGUgdCwgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsdWUpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBkb2VzIG5vdGhpbmcgYXQgYWxsLgorICAgICAgICByZXR1cm4g
dCA+PSBtX2R1cmF0aW9uOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlv
bjsKK307CisKK2NsYXNzIEZha2VGbG9hdFRyYW5zaXRpb24gOiBwdWJsaWMgQ0NGbG9hdEFuaW1h
dGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlRmxvYXRUcmFuc2l0aW9uKGRvdWJsZSBkdXJh
dGlvbiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgICAgIDogbV9kdXJhdGlvbihkdXJhdGlv
bikKKyAgICAgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAgICAgLCBtX3RvKHRvKQorICAgIHsgfQor
CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9u
OyB9CisgICAgdmlydHVhbCBib29sIGdldFZhbHVlKGRvdWJsZSB0LCBmbG9hdCogdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICB0IC89IG1fZHVyYXRpb247CisgICAgICAgIGlmICh0ID49IDEp
CisgICAgICAgICAgICB0ID0gMTsKKyAgICAgICAgKnZhbHVlID0gKDEgLSB0KSAqIG1fZnJvbSAr
IHQgKiBtX3RvOworICAgICAgICByZXR1cm4gdCA+PSAxOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxvYXQgbV90bzsK
K307CisKKy8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdv
cmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBUcml2aWFsVHJhbnNpdGlvbikKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAor
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsK
KworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgdHdvIHF1ZXVlZCBhbmltYXRp
b25zIGFmZmVjdGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBydW4gaW4gc2VxdWVuY2UuCitURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQoreworICAg
IEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1
bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRo
IGFub3RoZXIgdHJhbnNpdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgSW50ZXJydXB0KQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAw
LjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOworICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgorICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSk7CisgICAgRVhQRUNUX0VRKDAu
NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9u
cyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVlLgorVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQ
cm9wZXJ0eUlzQmxvY2tlZCkKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKwor
ICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gZ3JvdXBNZW1iZXIxKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0
aW9uKDEpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gZ3JvdXBNZW1iZXIyKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUo
YWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAzLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgZ3JvdXBNZW1iZXIxLT5ncm91cFdpdGgoZ3JvdXBN
ZW1iZXIyLmdldCgpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChncm91cE1lbWJlcjEucmVsZWFz
ZSgpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoZ3JvdXBNZW1iZXIyLnJlbGVhc2UoKSk7CisKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIC8vIFNob3VsZCBub3QgaGF2ZSBzdGFy
dGVkIHRoZSBmbG9hdCB0cmFuc2l0aW9uIHlldC4KKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7CisgICAgLy8gVGhlIHRoZSBmbG9hdCBhbmltYXRpb24gc2hvdWxkIGhhdmUgc3RhcnRlZCBh
dCB0aW1lIDEgYW5kIHNob3VsZCBiZSBkb25lLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7
CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgc2NoZWR1bGlu
ZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2l0aCBkaWZmZXJlbnQgbGVuZ3RocyBh
bmQgYW5vdGhlcgorLy8gYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCB3aGVuIHRoZSBzaG9ydGVy
IGFuaW1hdGlvbiBmaW5pc2hlcyAoc2hvdWxkIHdhaXQKKy8vIGZvciBib3RoIHRvIGZpbmlzaCku
CitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlVG9nZXRo
ZXJXaXRoQW5BbmltV2FpdGluZykKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAor
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsK
KworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gZ3JvdXBNZW1iZXIxKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKDIpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybSkpOworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gZ3JvdXBNZW1iZXIyKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworCisgICAgZ3JvdXBNZW1iZXIxLT5ncm91cFdpdGgoZ3JvdXBNZW1iZXIyLmdl
dCgpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChncm91cE1lbWJlcjEucmVsZWFzZSgpKTsKKyAg
ICBjb250cm9sbGVyLT5hZGQoZ3JvdXBNZW1iZXIyLnJlbGVhc2UoKSk7CisKKyAgICBjb250cm9s
bGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisKKyAgICAvLyBBbmltcyB3aXRoIGlkIDEgc2hvdWxkIGJvdGggc3RhcnQgbm93LgorICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAg
IC8vIFRoZSBvcGFjaXR5IGFuaW1hdGlvbiBzaG91bGQgaGF2ZSBmaW5pc2hlZCBhdCB0aW1lIDEs
IGJ1dCB0aGUgZ3JvdXAKKyAgICAvLyBvZiBhbmltYXRpb25zIHdpdGggaWQgMSBkb24ndCBmaW5p
c2ggdW50aWwgdGltZSAyIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aAorICAgIC8vIG9mIHRoZSB0cmFu
c2Zvcm0gYW5pbWF0aW9uLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgLy8gU2hv
dWxkIG5vdCBoYXZlIHN0YXJ0ZWQgdGhlIGZsb2F0IHRyYW5zaXRpb24geWV0LgorICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIC8vIFRoZSB0aGUgc2Vjb25kIG9wYWNpdHkgYW5p
bWF0aW9uIHNob3VsZCBzdGFydCBhdCB0aW1lIDIgYW5kIHNob3VsZCBiZQorICAgIC8vIGRvbmUg
YnkgdGltZSAzCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgzKTsKKyAgICBFWFBFQ1RfRVEoMC41
ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworfQorCisvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0
byBzdGFydCBpbiB0aGUgZnV0dXJlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LCBTY2hlZHVsZUFuaW1hdGlvbikKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBk
dW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9s
bGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVt
bXkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+
c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwor
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHko
KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNp
dHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVt
bXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworfQorCisvLyBUZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFy
dCBpbiB0aGUgZnV0dXJlIHRoYXQncyBpbnRlcnJ1cHRpbmcgYSBydW5uaW5nIGFuaW1hdGlvbi4K
K1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0
aW9uSW50ZXJydXB0c1J1bm5pbmdBbmltYXRpb24pCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGll
bnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29u
dHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUo
JmR1bW15KSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZl
QW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRv
QWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAg
IHRvQWRkLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGlt
ZSwgMCk7CisgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
dG9BZGQucmVsZWFzZSgpKTsKKworICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBz
aG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgyKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworfQorCisvLyBU
ZXN0cyBzY2hlZHVsaW5nIGFuIGFuaW1hdGlvbiB0byBzdGFydCBpbiB0aGUgZnV0dXJlIHRoYXQg
aW50ZXJydXB0cyBhIHJ1bm5pbmcgYW5pbWF0aW9uCisvLyBhbmQgdGhlcmUgaXMgeWV0IGFub3Ro
ZXIgYW5pbWF0aW9uIHF1ZXVlZCB0byBzdGFydCBsYXRlci4KK1RFU1QoQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsVGVzdCwgU2NoZWR1bGVkQW5pbWF0aW9uSW50ZXJydXB0c1J1bm5pbmdB
bmltYXRpb25XaXRoQW5pbUluUXVldWUpCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVt
bXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxl
cigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MiwgMC41ZiwgMCkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIHRvQWRk
LT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSwgMCk7
CisgICAgdG9BZGQtPnNldFN0YXJ0VGltZSgxKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDAuNzVmKSksIDMsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICAvLyBGaXJzdCAycyBvcGFjaXR5IHRy
YW5zaXRpb24gc2hvdWxkIHN0YXJ0IGltbWVkaWF0ZWx5LgorICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMC41KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDMpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDQpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworfQorCisvLyBUZXN0IHRoYXQgYSBsb29waW5nIGFuaW1hdGlvbiBsb29wcyBhbmQgZm9yIHRo
ZSBjb3JyZWN0IG51bWJlciBvZiBpdGVyYXRpb25zLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGxUZXN0LCBUcml2aWFsTG9vcGluZykKK3sKKyAgICBGYWtlQ29udHJvbGxlckNs
aWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBj
b250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0
ZSgmZHVtbXkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3Rp
dmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAw
LCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldEl0
ZXJhdGlvbnMoMyk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9w
YWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVm
LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi4yNSk7CisgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIu
NzUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgzKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgLy8gSnVz
dCBiZSBleHRyYSBzdXJlLgorICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhbiBpbmZpbml0ZWx5
IGxvb3BpbmcgYW5pbWF0aW9uIGRvZXMgaW5kZWVkIGdvIHVudGlsIGFib3J0ZWQuCitURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEluZmluaXRlTG9vcGluZykKK3sKKyAg
ICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnN0IGludCBpZCA9IDE7Cisg
ICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3Jl
YXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldEl0ZXJhdGlvbnMoLTEpOwor
ICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxLjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMS43NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0
eSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC4yNSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwNzM3
NDE4MjQuNzUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQpKTsKKyAgICBjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQpLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6QWJvcnRlZCwgMC43NWYpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3Rp
dmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOwor
fQorCisvLyBUZXN0IHRoYXQgcGF1c2luZyBhbmQgcmVzdW1pbmcgd29yayBhcyBleHBlY3RlZC4K
K1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgUGF1c2VSZXN1bWUpCit7
CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBjb25zdCBpbnQgaWQgPSAx
OworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgaWQsIENDQWN0aXZlQW5pbWF0aW9u
OjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
Z2V0QWN0aXZlQW5pbWF0aW9uKGlkKSk7CisgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0
aW9uKGlkKS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CisK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlv
bihpZCkpOworICAgIGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCktPnNldFJ1blN0
YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAxMDI0KTsKKworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMTAyNC4yNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZl
QW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQuNSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0
eSgpKTsKK30KKworVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBBYm9y
dEFHcm91cGVkQW5pbWF0aW9uKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15Owor
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwor
CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBncm91cE1lbWJlcjEoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAx
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBncm91cE1lbWJlcjIoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihu
ZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLCAxKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisKKyAgICBncm91cE1lbWJlcjEtPmdyb3VwV2l0aChncm91cE1lbWJlcjIuZ2V0
KCkpOworCisgICAgY29udHJvbGxlci0+YWRkKGdyb3VwTWVtYmVyMS5yZWxlYXNlKCkpOworICAg
IGNvbnRyb2xsZXItPmFkZChncm91cE1lbWJlcjIucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xs
ZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDEsIDAuNzVmKSksIDMsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXku
b3BhY2l0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1h
dGlvbigyKSk7CisgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKDIpLT5zZXRSdW5T
dGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgyKTsKKyAgICBFWFBFQ1RfVFJVRSghY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8g
VGVzdHMgdGhhdCBhZGRpbmcgYW4gYW5pbWF0aW9uIHRvIHRoZSBjb250cm9sbGVyIGNhbGxzIHRo
ZSBhcHByb3ByaWF0ZSBjYWxsYmFjayBvbiB0aGUgY29udHJvbGxlciBjbGllbnQKKy8vIChpbiB0
aGlzIGNhc2UsIGFkZGluZyB0aGUgY29udHJvbGxlciB0byB0aGUgbGlzdCBvZiBhY3RpdmUgY29u
dHJvbGxlcikuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIERpZEFj
dGl2YXRlKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgRVhQRUNU
X0VRKHNpemVfdCgwKSwgZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOworCisgICAg
Y29uc3QgaW50IGlkID0gMTsKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgRVhQRUNUX0VRKHNpemVfdCgxKSwg
ZHVtbXkuYWN0aXZlQ29udHJvbGxlcnMoKS5zaXplKCkpOworICAgIEVYUEVDVF9FUShjb250cm9s
bGVyLmdldCgpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpWzBdKTsKK30KKworfSAvLyBuYW1l
c3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121870</attachid>
            <date>2012-01-10 10:54:58 -0800</date>
            <delta_ts>2012-01-18 13:11:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20120110135456.patch</filename>
            <type>text/plain</type>
            <size>63377</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI4Zjk0M2UxNjc3OWFl
MzdkYzM3MjhjM2NjYjk1MTRkYzg3NmQxMy4uZTkyZjBkMDg4NjQxMzQxNjJkMzc1MDU5NGQwNjZl
YmZmOTk4Yjk0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAxLTEwICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbjo6Q0NBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVB
bmltYXRpb246OnNldFJ1blN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0
aW9uOjppc0ZpbmlzaGVkQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246
OnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3Rp
dmVBbmltYXRpb246On5DQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Z3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRp
b246OnRhcmdldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9u
OjpydW5TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6aXRlcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c2V0SXRlcmF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c3RhcnRUaW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzZXRTdGFydFRpbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzRmluaXNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlOjp0b0Zsb2F0QW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZTo6dG9UcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU6
On5DQ0FuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25D
dXJ2ZTo6fkNDRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Zsb2F0
QW5pbWF0aW9uQ3VydmU6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6fkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpoYXNBY3Rp
dmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4dFRpY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnJlc29s
dmVDb25mbGljdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRpb25zKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQ6On5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQpOgorCiAy
MDEyLTAxLTA1ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBkdXBsaWNhdGUgZmlsZSByZWZlcmVuY2VzIGZyb20gV2ViQ29yZS54Y29kZXBy
b2oKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZDJjMzY4NzMzYjgzZTY5MDY2MDdmMGQ3
OGQxNzIxN2MzZWVhZjhhNS4uMmZjYmM4N2FjOGUxNzY4YjRhOWViYzEzOTg3ODY1MTdiMWUwMTFi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wMS0x
MCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBhIGJhc2UtY2xhc3MgQ0NBbmltYXRpb24gdG8gcmVwcmVzZW50IGNvbXBvc2l0
b3IgYW5pbWF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzMyMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmFrZUZsb2F0QW5pbWF0aW9uOjpkdXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGYWtlRmxvYXRBbmltYXRpb246OmdldFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVu
dDo6RmFrZUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xs
ZXJDbGllbnQ6On5GYWtlQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGYWtl
Q29udHJvbGxlckNsaWVudDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJv
bGxlckNsaWVudDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxl
ckNsaWVudDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250cm9sbGVyQ2xp
ZW50OjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGll
bnQ6OmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6OmFjdGl2ZUNvbnRyb2xsZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6ZHVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZha2VGbG9hdFRyYW5zaXRpb246OkZha2VGbG9hdFRyYW5zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDEtMDUgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBXZWJTZXR0aW5nczo6c2V0
QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCBmcm9tIHB1YmxpYyBBUEkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggMTZiNjI5N2VlNThjMTA5OWQ2ZjY2YmI4NGMzYjc1NjlhNDhjM2U1My4uOGNiZjA4NjM0
MTExNGVlMWIwYzE1NjQ5YmNiNWJiMjUwYWMwNDFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU5
NCw2ICszNTk0LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkN1cnZlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDdXN0b21MYXllckRyYXdRdWFkLmNwcCcsCkBA
IC0zNjExLDYgKzM2MTUsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSW5wdXRIYW5kbGVyLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFlNmNjN2E5ZTI0NmVjMGJlZmFh
YTA1ODRmNmQyMjFjNDQ2MjBlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtMCww
ICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oIgorCisjaW5jbHVkZSA8Y21hdGg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NBY3Rp
dmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2
ZT4gY3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQor
ICAgIDogbV9hbmltYXRpb25DdXJ2ZShjdXJ2ZSkKKyAgICAsIG1fZ3JvdXAoZ3JvdXApCisgICAg
LCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQorICAgICwgbV9ydW5TdGF0ZShXYWl0
aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KQorICAgICwgbV9pdGVyYXRpb25zKDEpCisgICAgLCBt
X3N0YXJ0VGltZSgwKQorICAgICwgbV9wYXVzZVRpbWUoMCkKKyAgICAsIG1fdG90YWxQYXVzZWRU
aW1lKDApCit7Cit9CisKK3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNldFJ1blN0YXRlKFJ1blN0
YXRlIHJ1blN0YXRlLCBkb3VibGUgbm93KQoreworICAgIGlmIChydW5TdGF0ZSA9PSBSdW5uaW5n
ICYmIG1fcnVuU3RhdGUgPT0gUGF1c2VkKQorICAgICAgICBtX3RvdGFsUGF1c2VkVGltZSArPSBu
b3cgLSBtX3BhdXNlVGltZTsKKyAgICBlbHNlIGlmIChydW5TdGF0ZSA9PSBQYXVzZWQpCisgICAg
ICAgIG1fcGF1c2VUaW1lID0gbm93OworICAgIG1fcnVuU3RhdGUgPSBydW5TdGF0ZTsKK30KKwor
Ym9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBjb25zdAor
eworICAgIGlmIChtX3J1blN0YXRlID09IEZpbmlzaGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRl
ZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBSdW5u
aW5nCisgICAgICAgICYmIG1faXRlcmF0aW9ucyA+PSAwCisgICAgICAgICYmIG1faXRlcmF0aW9u
cyAqIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkgPD0gdGltZSAtIHN0YXJ0VGltZSgpIC0g
bV90b3RhbFBhdXNlZFRpbWU7Cit9CisKK2RvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRp
bWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKK3sKKyAgICBkb3VibGUgdHJp
bW1lZCA9IG5vdzsKKworICAgIC8vIElmIHdlJ3JlIHBhdXNlZCwgdGltZSBpcyAnc3R1Y2snIGF0
IHRoZSBwYXVzZSB0aW1lLgorICAgIGlmIChtX3J1blN0YXRlID09IFBhdXNlZCAmJiB0cmltbWVk
ID4gbV9wYXVzZVRpbWUpCisgICAgICAgIHRyaW1tZWQgPSBtX3BhdXNlVGltZTsKKworICAgIC8v
IFJldHVybmVkIHRpbWUgc2hvdWxkIGFsd2F5cyBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgdGlt
ZSBhbmQgc2hvdWxkIHN1YnRyYWN0CisgICAgLy8gYWxsIHRpbWUgc3BlbnQgcGF1c2VkLgorICAg
IHRyaW1tZWQgLT0gbV9zdGFydFRpbWUgKyBtX3RvdGFsUGF1c2VkVGltZTsKKworICAgIC8vIFpl
cm8gaXMgYWx3YXlzIHRoZSBzdGFydCBvZiB0aGUgYW5pbWF0aW9uLgorICAgIGlmICh0cmltbWVk
IDw9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQWx3YXlzIHJldHVybiB6ZXJvIGlm
IHdlIGhhdmUgbm8gaXRlcmF0aW9ucy4KKyAgICBpZiAoIW1faXRlcmF0aW9ucykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAvLyBJZiBsZXNzIHRoYW4gYW4gaXRlcmF0aW9uIGR1cmF0aW9uLCBq
dXN0IHJldHVybiB0cmltbWVkLgorICAgIGlmICh0cmltbWVkIDwgbV9hbmltYXRpb25DdXJ2ZS0+
ZHVyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRyaW1tZWQ7CisKKyAgICAvLyBJZiBncmVhdGVy
IHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRvdGFsIGR1cmF0aW9uLCByZXR1cm4gaXRlcmF0aW9uIGR1
cmF0aW9uLgorICAgIGlmIChtX2l0ZXJhdGlvbnMgPj0gMCAmJiB0cmltbWVkID49IG1fYW5pbWF0
aW9uQ3VydmUtPmR1cmF0aW9uKCkgKiBtX2l0ZXJhdGlvbnMpCisgICAgICAgIHJldHVybiBtX2Fu
aW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpOworCisgICAgLy8gRmluYWxseSwgcmV0dXJuIHggd2hl
cmUgdHJpbW1lZCA9IHggKyBuICogbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgZm9yIHNvbWUgcG9z
aXRpdmUgaW50ZWdlciBuLgorICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1fYW5pbWF0aW9uQ3Vy
dmUtPmR1cmF0aW9uKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjIyMjc5NDFhM2NlZDEyZDY1OGQ3NmQ2
MDRlZWU5ZmJhZDBhM2QxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMCwwICsxLDEy
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FjdGl2ZUFuaW1hdGlvbl9oCisjZGVmaW5l
IENDQWN0aXZlQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDQW5p
bWF0aW9uQ3VydmU7CisKKy8vIEEgQ0NBY3RpdmVBbmltYXRpb24sIGNvbnRhaW5zIGFsbCB0aGUg
c3RhdGUgcmVxdWlyZWQgdG8gcGxheSBhIENDQW5pbWF0aW9uQ3VydmUuCisvLyBTcGVjaWZpY2Fs
bHksIHRoZSBhZmZlY3RlZCBwcm9wZXJ0eSwgdGhlIHJ1biBzdGF0ZSAocGF1c2VkLCBmaW5pc2hl
ZCwgZXRjLiksCisvLyBsb29wIGNvdW50LCBsYXN0IHBhdXNlIHRpbWUsIGFuZCB0aGUgdG90YWwg
dGltZSBzcGVudCBwYXVzZWQuCitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbiB7CitwdWJsaWM6Cisg
ICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11c3QgYmUgcnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dy
b3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1lIEdyb3VwSUQKKyAgICAvLyBHcm91cGVkIGFuaW1hdGlv
bnMgYXJlIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIg
YW5pbWF0aW9ucworICAgIC8vIG1heSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQg
cHJvcGVydGllcyB1bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0aGUKKyAgICAvLyBncm91cCBoYXZl
IGZpbmlzaGVkIGFuaW1hdGluZy4gTm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlk
IGFuZCB0YXJnZXQKKyAgICAvLyBwcm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1h
dGlvbi4KKyAgICB0eXBlZGVmIGludCBHcm91cElEOworCisgICAgLy8gQW5pbWF0aW9ucyBiZWdp
biBpbiBvbmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3Ig
dGhlIG5leHQgdGljaworICAgIC8vIHdpbGwgc3RhcnQgdGhlIG5leHQgdGltZSB0aGUgY29udHJv
bGxlciBhbmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKKyAgICAvLyBhdmFp
bGliaWxpdHkgd2lsbCBydW4gYXMgc29vbiBhcyB0aGVpciB0YXJnZXQgcHJvcGVydHkgaXMgZnJl
ZSAoYW5kIGFsbCB0aGUgYW5pbWF0aW9ucworICAgIC8vIGFuaW1hdGluZyB3aXRoIGl0IGFyZSBh
bHNvIGFibGUgdG8gcnVuKS4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0aGVpciBzdGFydCB0aW1l
IHRvCisgICAgLy8gY29tZSBoYXZlIGJlIHNjaGVkdWxlZCB0byBydW4gYXQgYSBwYXJ0aWN1bGFy
IHBvaW50IGluIHRpbWUuIFdoZW4gdGhpcyB0aW1lIGFycml2ZXMsCisgICAgLy8gdGhlIGNvbnRy
b2xsZXIgd2lsbCBtb3ZlIHRoZSBhbmltYXRpb25zIGludG8gdGhlIFJ1bm5pbmcgc3RhdGUuIFJ1
bm5pbmcgYW5pbWF0aW9ucworICAgIC8vIG1heSB0b2dnbGUgYmV0d2VlbiBSdW5uaW5nIGFuZCBQ
YXVzZWQsIGFuZCBtYXkgYmUgc3RvcHBlZCBieSBtb3ZpbmcgaW50byBlaXRoZXIgdGhlCisgICAg
Ly8gQWJvcnRlZCBvciBGaW5pc2hlZCBzdGF0ZXMuIEEgRmluaXNoZWQgYW5pbWF0aW9uIHdhcyBh
bGxvd2VkIHRvIHJ1biB0byBjb21wbGV0aW9uLCBidXQKKyAgICAvLyBhbiBBYm9ydGVkIGFuaW1h
dGlvbiB3YXMgbm90LgorICAgIGVudW0gUnVuU3RhdGUgeworICAgICAgICBXYWl0aW5nRm9yTmV4
dFRpY2sgPSAxLAorICAgICAgICBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAg
ICBXYWl0aW5nRm9yU3RhcnRUaW1lLAorICAgICAgICBSdW5uaW5nLAorICAgICAgICBQYXVzZWQs
CisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBBYm9ydGVkCisgICAgfTsKKworICAgIGVudW0g
VGFyZ2V0UHJvcGVydHkgeworICAgICAgICBUcmFuc2Zvcm0gPSAxLAorICAgICAgICBPcGFjaXR5
CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVh
dGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFy
Z2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpIHsgfQorCisgICAgR3Jv
dXBJRCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0KKyAgICBUYXJnZXRQcm9wZXJ0
eSB0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KKwor
ICAgIFJ1blN0YXRlIHJ1blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZTsgfQorICAg
IHZvaWQgc2V0UnVuU3RhdGUoUnVuU3RhdGUsIGRvdWJsZSBub3cpOworCisgICAgLy8gVGhpcyBp
cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkuIElmIHRo
aXMKKyAgICAvLyB2YWx1ZSBpcyB6ZXJvIHRoZSBhbmltYXRpb24gd2lsbCBub3QgcGxheS4gSWYg
aXQgaXMgbmVnYXRpdmUsIHRoZW4KKyAgICAvLyB0aGUgYW5pbWF0aW9uIHdpbGwgbG9vcCBpbmRl
ZmluaXRlbHkuCisgICAgaW50IGl0ZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdGlv
bnM7IH0KKyAgICB2b2lkIHNldEl0ZXJhdGlvbnMoaW50IG4pIHsgbV9pdGVyYXRpb25zID0gbjsg
fQorCisgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9
CisgICAgdm9pZCBzZXRTdGFydFRpbWUoZG91YmxlIHN0YXJ0VGltZSkgeyBtX3N0YXJ0VGltZSA9
IHN0YXJ0VGltZTsgfQorCisgICAgYm9vbCBpc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0
OworICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmlu
aXNoZWQgfHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkOyB9CisKKyAgICBDQ0FuaW1hdGlvbkN1cnZl
KiBhbmltYXRpb25DdXJ2ZSgpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KKyAg
ICBjb25zdCBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KKworICAgIC8vIFRha2VzIHRoZSBnaXZlbiBhYnNv
bHV0ZSB0aW1lLCBhbmQgdXNpbmcgdGhlIHN0YXJ0IHRpbWUgYW5kIHRoZSBudW1iZXIKKyAgICAv
LyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1lIGluIHRoZSBjdXJyZW50
IGl0ZXJhdGlvbi4KKyAgICBkb3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91Ymxl
IG5vdykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0
cjxDQ0FuaW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOworCisgICAgT3du
UHRyPENDQW5pbWF0aW9uQ3VydmU+IG1fYW5pbWF0aW9uQ3VydmU7CisgICAgR3JvdXBJRCBtX2dy
b3VwOworICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7CisgICAgUnVuU3RhdGUg
bV9ydW5TdGF0ZTsKKyAgICBpbnQgbV9pdGVyYXRpb25zOworICAgIGRvdWJsZSBtX3N0YXJ0VGlt
ZTsKKworICAgIC8vIFRoZXNlIGFyZSB1c2VkIGluIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9u
IHRvIGFjY291bnQgZm9yIHRpbWUKKyAgICAvLyBzcGVudCB3aGlsZSBwYXVzZWQuIFRoaXMgaXMg
bm90IGluY2x1ZGVkIGluIEFuaW1hdGlvblN0YXRlIHNpbmNlIGl0CisgICAgLy8gdGhlcmUgaXMg
YWJzb2x1dGVseSBubyBuZWVkIGZvciBjbGllbnRzIG9mIHRoaXMgY29udHJvbGxlciB0byBrbm93
CisgICAgLy8gYWJvdXQgdGhlc2UgdmFsdWVzLgorICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKKyAg
ICBkb3VibGUgbV90b3RhbFBhdXNlZFRpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBDQ0FjdGl2ZUFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4Y2RjNmFkNjYyMTRjMGM2YjRmMzE2ZmY3ODc4ZDQ5Nzdk
MzE1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCwwICsxLDQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlv
bkN1cnZlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgQ0NGbG9hdEFuaW1hdGlv
bkN1cnZlKiBDQ0FuaW1hdGlvbkN1cnZlOjp0b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKSBjb25zdAor
eworICAgIEFTU0VSVCh0eXBlKCkgPT0gIENDQW5pbWF0aW9uQ3VydmU6OkZsb2F0KTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKj4odGhpcyk7Cit9
CisKK2NvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIENDQW5pbWF0aW9uQ3VydmU6OnRv
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0g
IENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqPih0aGlzKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlOTdl
MzhjMGEyNGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1
cnZlLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FuaW1hdGlv
bkN1cnZlX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25DdXJ2ZV9oCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7CisKKy8vIEFuIGFuaW1hdGlv
biBjdXJ2ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHZhbHVlIGdpdmVuIGEgdGltZS4K
Ky8vIFRoZXJlIGFyZSBjdXJyZW50bHkgb25seSB0d28gdHlwZXMgb2YgY3VydmUsIGZsb2F0IGFu
ZCB0cmFuc2Zvcm0uCitjbGFzcyBDQ0FuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IFR5cGUgeyBGbG9hdCwgVHJhbnNmb3JtIH07CisKKyAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbkN1
cnZlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IENDRmxvYXRBbmlt
YXRpb25DdXJ2ZSogdG9GbG9hdEFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7CisgICAgY29uc3QgQ0NU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIGNvbnN0
OworfTsKKworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9u
Q3VydmUgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsg
fQorCisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QgPSAwOworCisg
ICAgLy8gUGFydGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0OyB9Cit9OworCitjbGFzcyBDQ1RyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAg
IHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KKworICAgIHZpcnR1YWwg
VHJhbnNmb3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QgPSAwOworCisgICAg
Ly8gUGFydGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRyYW5zZm9ybTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmltYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2IyMWJi
NzMzMTUzZmVhMzZiZDg1Y2ZkNTE3MDY3MDc1ZmMyNjg4OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5jcHAKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5oIgorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIEEgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzLiBVc2VkIHdoZW4g
ZGV0ZXJpbWluaW5nIGlmIGFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGFyZ2V0CisvLyBhdmFpbGli
aWxpdHkgYXJlIGFibGUgdG8gcnVuLgordHlwZWRlZiBIYXNoU2V0PGludD4gVGFyZ2V0UHJvcGVy
dGllczsKKworUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbENsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKGNsaWVudCkpOworfQorCitDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3sKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5n
Rm9yTmV4dFRpY2soZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25z
V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHJl
c29sdmVDb25mbGljdHMoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICB0aWNrQW5pbWF0aW9ucyhm
cmFtZUJlZ2luVGltZVNlY3MpOworICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7CisgICAg
c3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGlt
ZVNlY3MpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YWRkKFBh
c3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0pCit7CisgICAgbV9hY3RpdmVBbmltYXRp
b25zLmFwcGVuZChhbmltKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5h
bmltYXRpb25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKHRoaXMpOworfQorCitDQ0FjdGl2ZUFu
aW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmltYXRp
b24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpU
YXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+Z3JvdXAoKSA9PSBncm91cCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdl
dFByb3BlcnR5KCkgPT0gcHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4gbV9hY3RpdmVBbmlt
YXRpb25zW2ldLmdldCgpOworICAgIHJldHVybiAwOworfQorCitib29sIENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAg
ICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSAhPSBDQ0FjdGl2ZUFuaW1h
dGlvbjo6RmluaXNoZWQgJiYgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IEND
QWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwor
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRpbWUobm93KTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6
OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdykKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkKKyAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6V2FpdGluZ0ZvclN0YXJ0VGltZSAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0
YXJ0VGltZSgpIDw9IG5vdykKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0
UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIG5vdyk7Cit9CisKK3ZvaWQgQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFy
Z2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit7CisgICAgLy8gRmlyc3QgY29sbGVjdCBydW5u
aW5nIHByb3BlcnRpZXMuCisgICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJvcGVydGllczsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6UnVubmluZyB8fCBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRl
KCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkKQorICAgICAgICAgICAgYmxvY2tlZFBy
b3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IEND
QWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KSB7CisgICAgICAg
ICAgICAvLyBDb2xsZWN0IGFsbCBwcm9wZXJ0aWVzIGZvciBhbmltYXRpb25zIHdpdGggdGhlIHNh
bWUgZ3JvdXAgaWQgKHRoZXkgc2hvdWxkIGFsbCBhbHNvIGJlIGluIHRoZSBsaXN0IG9mIGFuaW1h
dGlvbnMpLgorICAgICAgICAgICAgVGFyZ2V0UHJvcGVydGllcyBlbnF1ZXVlZFByb3BlcnRpZXM7
CisgICAgICAgICAgICBlbnF1ZXVlZFByb3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7
IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opCisgICAgICAgICAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+Z3JvdXAoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0t
Pmdyb3VwKCkpCisgICAgICAgICAgICAgICAgICAgIGVucXVldWVkUHJvcGVydGllcy5hZGQobV9h
Y3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKTsKKworICAgICAgICAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIGludGVyc2VjdGlvbiBvZiB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIGFm
ZmVjdGVkIGJ5IHRoZSBncm91cCBhbmQgdGhlIGxpc3Qgb2YgY3VycmVudGx5CisgICAgICAgICAg
ICAvLyBibG9ja2VkIHByb3BlcnRpZXMgaXMgbnVsbC4gSW4gYW55IGNhc2UsIHRoZSBncm91cCdz
IHRhcmdldCBwcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIGxpc3QKKyAgICAgICAg
ICAgIC8vIG9mIGJsb2NrZWQgcHJvcGVydGllcy4KKyAgICAgICAgICAgIGJvb2wgbnVsbEludGVy
c2VjdGlvbiA9IHRydWU7CisgICAgICAgICAgICBmb3IgKFRhcmdldFByb3BlcnRpZXM6Oml0ZXJh
dG9yIHBJdGVyID0gZW5xdWV1ZWRQcm9wZXJ0aWVzLmJlZ2luKCk7IHBJdGVyICE9IGVucXVldWVk
UHJvcGVydGllcy5lbmQoKTsgKytwSXRlcikKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrZWRQ
cm9wZXJ0aWVzLmFkZCgqcEl0ZXIpLnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgbnVsbElu
dGVyc2VjdGlvbiA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBJZiB0aGUgaW50ZXJzZWN0aW9u
IGlzIG51bGwsIHRoZW4gd2UgYXJlIGZyZWUgdG8gc3RhcnQgdGhlIGFuaW1hdGlvbnMgaW4gdGhl
IGdyb3VwLgorICAgICAgICAgICAgaWYgKG51bGxJbnRlcnNlY3Rpb24pIHsKKyAgICAgICAgICAg
ICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpSdW5uaW5nLCBub3cpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAx
OyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRp
b25zW2pdLT5ncm91cCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1h
dGlvbnNbal0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRTdGFydFRp
bWUobm93KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OnJlc29sdmVDb25mbGljdHMoZG91YmxlIG5vdykKK3sKKyAgICAvLyBGaW5k
IGFueSBhbmltYXRpb25zIHRoYXQgYXJlIGFuaW1hdGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBhbmQg
cmVzb2x2ZSB0aGUKKyAgICAvLyBjb25maWN0LiBXZSBjb3VsZCBldmVudHVhbGx5IGJsZW5kLCBi
dXQgZm9yIG5vdyB3ZSdsbCBqdXN0IGFib3J0IHRoZQorICAgIC8vIHByZXZpb3VzIGFuaW1hdGlv
biAod2hlcmUgJ3ByZXZpb3VzJyBtZWFuczogKDEpIGhhcyBhIHByaW9yIHN0YXJ0IHRpbWUgb3IK
KyAgICAvLyAoMikgaGFzIGFuIGVxdWFsIHN0YXJ0IHRpbWUsIGJ1dCB3YXMgYWRkZWQgdG8gdGhl
IHF1ZXVlIGVhcmxpZXIsIGkuZS4sCisgICAgLy8gaGFzIGEgbG93ZXIgaW5kZXggaW4gbV9hY3Rp
dmVBbmltYXRpb25zKS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5y
dW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nKSB7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2op
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2pdLT5ydW5TdGF0ZSgp
ID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
dGFyZ2V0UHJvcGVydHkoKSA9PSBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdldFByb3BlcnR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3Rh
cnRUaW1lKCkgPiBtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnN0YXJ0VGltZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2
ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbm93KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgbm93KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjpwdXJnZUZpbmlzaGVkQW5pbWF0aW9ucygpCit7CisgICAgLy8gRWFjaCBp
dGVyYXRpb24sIG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCkgZGVjcmVhc2VzIG9yIGkgaW5jcmVt
ZW50cywKKyAgICAvLyBndWFyYW50ZWVpbmcgcHJvZ3Jlc3MgdG93YXJkcyBsb29wIHRlcm1pbmF0
aW9uLgorICAgIHNpemVfdCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCkpIHsKKyAgICAgICAgYm9vbCBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9
IGZhbHNlOworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkKCkp
IHsKKyAgICAgICAgICAgIGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5z
aXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
Pmdyb3VwKCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5ncm91cCgpICYmICFtX2FjdGl2ZUFu
aW1hdGlvbnNbal0tPmlzRmluaXNoZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBhbGxBbmlt
c1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGFsbEFuaW1zV2l0aFNhbWVJZEFyZUZpbmlzaGVkKQorICAgICAgICAgICAgbV9hY3RpdmVB
bmltYXRpb25zLnJlbW92ZShpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaSsrOworICAg
IH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnRpY2tBbmltYXRp
b25zKGRvdWJsZSBub3cpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZykgeworICAgICAgICAg
ICAgZG91YmxlIHRyaW1tZWQgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRyaW1UaW1lVG9DdXJy
ZW50SXRlcmF0aW9uKG5vdyk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+dGFyZ2V0UHJvcGVydHkoKSkgeworCisgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5p
bWF0aW9uOjpUcmFuc2Zvcm06IHsKKyAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+YW5pbWF0aW9uQ3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOworICAg
ICAgICAgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobm93KSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1h
dGlvbjo6RmluaXNoZWQsIG5vdyk7CisKKyAgICAgICAgICAgICAgICAvLyBEZWNpZGUgaGVyZSBp
ZiBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gQWJzb2x1dGUgZm9yIG5vdy4KKyAgICAgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b0FwcGx5OworICAgICAgICAgICAgICAgIG9wZXJhdGlv
bnMuYXBwbHkoRmxvYXRTaXplKCksIHRvQXBwbHkpOworICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5zZXRUcmFuc2Zvcm0odG9BcHBseSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHk6IHsK
KyAgICAgICAgICAgICAgICBjb25zdCBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUqIGZsb2F0QW5pbWF0
aW9uQ3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlvbkN1cnZlKCktPnRvRmxv
YXRBbmltYXRpb25DdXJ2ZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IG9wYWNpdHkg
PSBmbG9hdEFuaW1hdGlvbkN1cnZlLT5nZXRWYWx1ZSh0cmltbWVkKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5pc0ZpbmlzaGVkQXQobm93KSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6RmluaXNoZWQsIG5vdyk7CisKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0
T3BhY2l0eShvcGFjaXR5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgfSAvLyBzd2l0Y2gKKyAgICAgICAgfSAvLyBpZiBydW5uaW5nCisgICAg
fSAvLyBmb3IgZWFjaCBhbmltYXRpb24KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYWQyMjNkYmE4MjNhMmEwNTdiMTAyZDk2YWE5NWFlYWIyZDUyODY0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxfaAorI2RlZmlu
ZSBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxfaAorCisjaW5jbHVkZSAiY2MvQ0NBY3Rp
dmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw7CitjbGFzcyBJ
bnRTaXplOworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CitjbGFzcyBUcmFuc2Zvcm1PcGVy
YXRpb25zOworCitjbGFzcyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVu
dCgpIHsgfQorCisgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKikgPSAwOworfTsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGw+IGNyZWF0ZShDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQqKTsKKworICAgIHZvaWQgYW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWVTZWNz
KTsKKworICAgIHZvaWQgYWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+KTsKKworICAg
IC8vIFJldHVybnMgdGhlIGFjdGl2ZSBhbmltYXRpb24gaW4gdGhlIGdpdmVuIGdyb3VwLCBhbmlt
YXRpbmcgdGhlIGdpdmVuIHByb3BlcnR5IGlmIHN1Y2ggYW4KKyAgICAvLyBhbmltYXRpb24gZXhp
c3RzLgorICAgIENDQWN0aXZlQW5pbWF0aW9uKiBnZXRBY3RpdmVBbmltYXRpb24oQ0NBY3RpdmVB
bmltYXRpb246Okdyb3VwSUQsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSk7CisK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhbmltYXRpb25zIHRoYXQgYXJl
IG5laXRoZXIgZmluaXNoZWQgbm9yIGFib3J0ZWQuCisgICAgYm9vbCBoYXNBY3RpdmVBbmltYXRp
b24oKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgYW5pbWF0b3IgaXMgb3duZWQgYnkg
dGhlIGxheWVyLgorICAgIGV4cGxpY2l0IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqKTsKKworICAgIHZvaWQgc3RhcnRB
bmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cpOworICAgIHZvaWQgc3RhcnRB
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZShkb3VibGUgbm93KTsKKyAgICB2b2lkIHN0YXJ0
QW5pbWF0aW9uc1dhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHkoZG91YmxlIG5vdyk7CisgICAg
dm9pZCByZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpOworICAgIHZvaWQgcHVyZ2VGaW5pc2hl
ZEFuaW1hdGlvbnMoKTsKKworICAgIHZvaWQgdGlja0FuaW1hdGlvbnMoZG91YmxlIG5vdyk7CisK
KyAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIG1fY2xpZW50OworICAg
IFZlY3RvcjxPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+ID4gbV9hY3RpdmVBbmltYXRpb25zOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZTY3
NGJiNmI4NWIwODVjYWJhY2M5ZDlkNjQ5OTkzZDVkNjJmZTVjZi4uYmY1OTY0MjQ4ZDhkYzYxNGMw
NTlhOTUxMTgwYzNkNmFiMzlhM2RmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBA
IC02MCw5ICs2MCwxMSBAQAogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcs
CiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCisgICAgICAgICAg
ICAndGVzdHMvQ0NBY3RpdmVBbmltYXRpb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNl
ZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250
cm9sbGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVySW1wbFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyUXVhZFRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNlOTNkOTVkZTg2OGEyZjNhMjVhYjAzMDIwZWQyNWMxZDBlYzQ5MGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5j
cHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ0Fu
aW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZha2VGbG9hdEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9u
Q3VydmUgeworcHVibGljOgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3Qg
eyByZXR1cm4gMDsgfQorfTsKKworUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKKyAgICByZXR1cm4gdG9SZXR1
cm4ucmVsZWFzZSgpOworfQorCitURVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwgVHJpbVRpbWVa
ZXJvSXRlcmF0aW9ucykKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVU
b0N1cnJlbnRJdGVyYXRpb24oLTEpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVU
b0N1cnJlbnRJdGVyYXRpb24oMCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRv
Q3VycmVudEl0ZXJhdGlvbigxKSk7Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBU
cmltVGltZU9uZUl0ZXJhdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFu
aW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJp
bVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oLTEpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJp
bVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMCkpOworICAgIEVYUEVDVF9FUSgxLCBhbmltLT50cmlt
VGltZVRvQ3VycmVudEl0ZXJhdGlvbigxKSk7CisgICAgRVhQRUNUX0VRKDEsIGFuaW0tPnRyaW1U
aW1lVG9DdXJyZW50SXRlcmF0aW9uKDIpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRl
c3QsIFRyaW1UaW1lSW5maW5pdGVJdGVyYXRpb25zKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24oLTEpKTsKKyAgICBFWFBFQ1RfRVEo
MCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMCkpOworICAgIEVYUEVDVF9FUSgw
LjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDAuNSkpOworICAgIEVYUEVDVF9F
USgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxKSk7CisgICAgRVhQRUNUX0VR
KDAuNSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMS41KSk7Cit9CisKK1RFU1Qo
Q0NBY3RpdmVBbmltYXRpb25UZXN0LCBUcmltVGltZVN0YXJ0VGltZSkKK3sKKyAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBh
bmltLT5zZXRTdGFydFRpbWUoNCk7CisgICAgRVhQRUNUX0VRKDAsIGFuaW0tPnRyaW1UaW1lVG9D
dXJyZW50SXRlcmF0aW9uKDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1
cnJlbnRJdGVyYXRpb24oNCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9D
dXJyZW50SXRlcmF0aW9uKDQuNSkpOworICAgIEVYUEVDVF9FUSgxLCBhbmltLT50cmltVGltZVRv
Q3VycmVudEl0ZXJhdGlvbig1KSk7CisgICAgRVhQRUNUX0VRKDEsIGFuaW0tPnRyaW1UaW1lVG9D
dXJyZW50SXRlcmF0aW9uKDYpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIFRy
aW1UaW1lUGF1c2VSZXN1bWUpCit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmlt
KGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigxKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OlJ1bm5pbmcsIDApOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGlt
ZVRvQ3VycmVudEl0ZXJhdGlvbigwKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgYW5pbS0+dHJpbVRp
bWVUb0N1cnJlbnRJdGVyYXRpb24oMC41KSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OlBhdXNlZCwgMC41KTsKKyAgICBFWFBFQ1RfRVEoMC41LCBhbmltLT50cmlt
VGltZVRvQ3VycmVudEl0ZXJhdGlvbigxMDI0KSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0t
PnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDEwMjQpKTsKKyAgICBFWFBFQ1RfRVEoMSwgYW5p
bS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMTAyNC41KSk7Cit9CisKK1RFU1QoQ0NBY3Rp
dmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkQXRaZXJvSXRlcmF0aW9ucykKK3sKKyAgICBPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDApKTsKKyAg
ICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgMCk7CisgICAg
RVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgtMSkpOworICAgIEVYUEVDVF9UUlVFKGFu
aW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZEF0
KDEpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWRBdE9uZUl0
ZXJhdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0
aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZywgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgtMSkp
OworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMCkpOworICAgIEVYUEVDVF9U
UlVFKGFuaW0tPmlzRmluaXNoZWRBdCgxKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5p
c2hlZEF0KDIpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWRB
dEluZmluaXRlSXRlcmF0aW9ucykKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFu
aW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKC0xKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDApOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0Zp
bmlzaGVkQXQoMCkpOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMC41KSk7
CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgxKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGFuaW0tPmlzRmluaXNoZWRBdCgxLjUpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlv
blRlc3QsIElzRmluaXNoZWRBdE5vdFJ1bm5pbmcpCit7CisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigwKSk7CisgICAgYW5pbS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDApOworICAgIEVYUEVDVF9UUlVFKGFu
aW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmlt
YXRpb246OlBhdXNlZCwgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgw
KSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JO
ZXh0VGljaywgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7Cisg
ICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRB
dmFpbGFiaWxpdHksIDApOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMCkp
OworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3Rh
cnRUaW1lLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0KDApKTsKKyAg
ICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQsIDApOworICAg
IEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIDApOworICAgIEVYUEVDVF9UUlVFKGFuaW0t
PmlzRmluaXNoZWRBdCgwKSk7Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0Zp
bmlzaGVkKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3Rp
dmVBbmltYXRpb24oMSkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpSdW5uaW5nLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAg
ICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAwKTsKKyAgICBF
WFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKKyAgICBFWFBFQ1RfRkFM
U0UoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgMCk7CisgICAgRVhQRUNUX0ZB
TFNFKGFuaW0tPmlzRmluaXNoZWQoKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOworICAgIEVYUEVDVF9GQUxTRShhbmlt
LT5pc0ZpbmlzaGVkKCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpGaW5pc2hlZCwgMCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAg
ICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwgMCk7CisgICAg
RVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q1
MGQwNmU2MjMxMjE4ZjE0MDIxMmIxZGZlZDZlNzg5NWIwZjUzYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdC5jcHAKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5o
IgorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgImNjL0NDQW5p
bWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBGYWtlQ29udHJvbGxlckNsaWVudCA6IHB1
YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworcHVibGljOgorICAg
IEZha2VDb250cm9sbGVyQ2xpZW50KCkgOiBtX29wYWNpdHkoMCkgeyB9CisgICAgdmlydHVhbCB+
RmFrZUNvbnRyb2xsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAgICAgbV9hY3Rp
dmVDb250cm9sbGVycy5hcHBlbmQoY29udHJvbGxlcik7CisgICAgfQorCisgICAgVmVjdG9yPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9sbGVycygpIHsgcmV0
dXJuIG1fYWN0aXZlQ29udHJvbGxlcnM7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBtX29wYWNp
dHk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAgVmVjdG9yPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxlcnM7Cit9Owor
CitjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUg
ZHVyYXRpb24pIDogbV9kdXJhdGlvbihkdXJhdGlvbikgeyB9CisgICAgdmlydHVhbCBkb3VibGUg
ZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVhbCBUcmFu
c2Zvcm1PcGVyYXRpb25zIGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
ZG91YmxlIG1fZHVyYXRpb247Cit9OworCitjbGFzcyBGYWtlRmxvYXRUcmFuc2l0aW9uIDogcHVi
bGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgRmFrZUZsb2F0VHJhbnNp
dGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0IGZyb20sIGZsb2F0IHRvKQorICAgICAgICA6IG1f
ZHVyYXRpb24oZHVyYXRpb24pCisgICAgICAgICwgbV9mcm9tKGZyb20pCisgICAgICAgICwgbV90
byh0bykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3Vi
bGUgdGltZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRpbWUgLz0gbV9kdXJhdGlvbjsKKyAgICAg
ICAgaWYgKHRpbWUgPj0gMSkKKyAgICAgICAgICAgIHRpbWUgPSAxOworICAgICAgICByZXR1cm4g
KDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxvYXQgbV90bzsK
K307CisKKy8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdv
cmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBUcml2aWFsVHJhbnNpdGlvbikKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsK
KyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAor
ICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsK
KworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQu
cmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgdHdvIHF1ZXVlZCBhbmltYXRp
b25zIGFmZmVjdGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBydW4gaW4gc2VxdWVuY2UuCitURVNUKEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5nKQoreworICAg
IEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29udHJvbGxlci0+YWRkKENDQWN0
aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwg
MCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKwor
ICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1
bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRo
IGFub3RoZXIgdHJhbnNpdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgSW50ZXJydXB0KQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAg
IGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBG
YWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAw
LjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1
blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDApOworICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgorICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSk7CisgICAgRVhQRUNUX0VRKDAu
NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9u
cyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVlLgorVEVTVChD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQ
cm9wZXJ0eUlzQmxvY2tlZCkKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAg
ICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAg
ICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKwor
ICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFu
c2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShh
ZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9u
OjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlv
biB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIC8vIFRoZSB0aGUgZmxv
YXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUg
ZG9uZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVDVF9FUSgxLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVu
IHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYW5kIGFub3RoZXIKKy8vIGFuaW1hdGlv
biBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hvcnRlciBhbmltYXRpb24gZmluaXNoZXMgKHNo
b3VsZCB3YWl0CisvLyBmb3IgYm90aCB0byBmaW5pc2gpLgorVEVTVChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCit7
CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJv
bGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5l
dyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246
Ok9wYWNpdHkpKTsKKworICAgIC8vIEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBu
b3cuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNp
dHkoKSk7CisgICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBoYXZlIGZpbmlzaGVk
IGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAorICAgIC8vIG9mIGFuaW1hdGlvbnMgd2l0aCBpZCAx
IGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBvZiB0aGUgbGVuZ3RoCisgICAgLy8g
b2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsK
KyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQu
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgLy8gVGhlIHRoZSBzZWNvbmQg
b3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJlCisg
ICAgLy8gZG9uZSBieSB0aW1lIDMKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOworICAgIEVY
UEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4g
YW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCitURVNUKENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQoreworICAgIEZha2VDb250cm9s
bGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6
Y3JlYXRlKCZkdW1teSkpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChD
Q0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9u
KDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOwor
ICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJl
bGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVt
bXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVD
VF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0
aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcg
YW5pbWF0aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hl
ZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKK3sKKyAgICBGYWtlQ29u
dHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFu
aW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFr
ZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5n
Rm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRy
b2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0
cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDAuNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBm
dXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmluZyBhbmltYXRpb24KKy8vIGFuZCB0aGVyZSBp
cyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IGxhdGVyLgorVEVTVChDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1
cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5RdWV1ZSkKK3sKKyAgICBGYWtlQ29udHJvbGxl
ckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
PiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNy
ZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6
Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3Rh
cnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXIt
PmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43
NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8vIEZpcnN0IDJz
IG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkp
OworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVB
bmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3Bz
IGFuZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCitURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5nKQoreworICAgIEZha2VD
b250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0
b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFu
c2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0
b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFz
ZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgy
LjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXIt
PmFuaW1hdGUoMi43NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDMpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CisK
KyAgICAvLyBKdXN0IGJlIGV4dHJhIHN1cmUuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSg0KTsK
KyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCB0aGF0IGFu
IGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRl
ZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29w
aW5nKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29uc3QgaW50
IGlkID0gMTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5p
bWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkp
LCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+c2V0SXRlcmF0
aW9ucygtMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAg
ICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNp
dHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBFWFBFQ1RfVFJVRShj
b250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBk
dW1teS5vcGFjaXR5KCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1
KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cisg
ICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMTA3Mzc0MTgyNC43NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
KworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NB
Y3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmlt
YXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OkFib3J0ZWQsIDAuNzVmKTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKK30KKworLy8gVGVzdCB0aGF0IHBhdXNpbmcgYW5kIHJlc3VtaW5nIHdvcmsgYXMg
ZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFBhdXNl
UmVzdW1lKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29uc3Qg
aW50IGlkID0gMTsKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2
ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAg
ICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwg
MC41Zik7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQpOworICAgIEVYUEVDVF9UUlVF
KGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2
ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOworCisgICAgY29u
dHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41KTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1t
eS5vcGFjaXR5KCkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIEFib3J0QUdyb3VwZWRBbmltYXRpb24pCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7CisKKyAgICBjb25zdCBpbnQgaWQgPSAxOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxl
ci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRy
YW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1
bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAu
NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRB
Y3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29u
dHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0
eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2
ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBj
b250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkp
OworfQorCisvLyBUZXN0cyB0aGF0IGFkZGluZyBhbiBhbmltYXRpb24gdG8gdGhlIGNvbnRyb2xs
ZXIgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIG9uIHRoZSBjb250cm9sbGVyIGNsaWVu
dAorLy8gKGluIHRoaXMgY2FzZSwgYWRkaW5nIHRoZSBjb250cm9sbGVyIHRvIHRoZSBsaXN0IG9m
IGFjdGl2ZSBjb250cm9sbGVyKS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
VGVzdCwgRGlkQWN0aXZhdGUpCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7Cisg
ICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAg
ICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisK
KyAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpLnNpemUo
KSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBkdW1teS5hY3RpdmVD
b250cm9sbGVycygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNvbnRyb2xsZXIuZ2V0KCksIGR1
bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOworfQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122977</attachid>
            <date>2012-01-18 13:12:00 -0800</date>
            <delta_ts>2012-01-18 13:48:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20120118161158.patch</filename>
            <type>text/plain</type>
            <size>63575</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGM3ZTc2ZmFmNjk3YzE2
ODk4MzRlMTIyY2MwMzMwMjRhYzcwMjNhNi4uYWI5MDJlMzNiYWQ2YzFkZDExZmFkNzYwNGJmZmEw
YTNhYTNkNjhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTAxLTE4ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIEFkZHMgYSBrZXJuZWwgZm9yIHJ1bm5pbmcgYW5pbWF0aW9ucyBvbiB0
aGUgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAgICB0aHJlYWQuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c2V0UnVuU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzRmluaXNoZWRBdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVy
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6fkNDQWN0aXZl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpncm91cCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6dGFyZ2V0UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OnJ1blN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppdGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDQWN0aXZlQW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3Rp
dmVBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbjo6aXNGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlv
bjo6YW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uQ3VydmU6OnRvRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvbkN1cnZlOjp0b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZTo6fkNDQW5pbWF0aW9uQ3VydmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlOjp+Q0NGbG9hdEFuaW1hdGlv
bkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25DdXJ2ZTo6dHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+Q0NUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjp0eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cmVzb2x2ZUNvbmZsaWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6fkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCk6CisKIDIwMTItMDEtMTggIFBhYmxvIEZsb3Vy
ZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEFkZCBbQ2FsbFdpdGhdIHN1cHBv
cnQgZm9yIGF0dHJpYnV0ZXMgaW4gSlNDL1Y4IGlkbCBjb2RlIGdlbmVyYXRvcnMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IGI2NzhkNmNmYzU5Njc2YTlmZWJiY2Y3Nzk2MWNkNmZkZDMx
NTE2NmYuLmE1YmMwMjY1Y2NlZjUyZTNjYjE0MTI0Yjg3NzU3MGU2NWEyMDYwYjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTItMDEtMTggIElhbiBWb2xs
aWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUg
YSBiYXNlLWNsYXNzIENDQW5pbWF0aW9uIHRvIHJlcHJlc2VudCBjb21wb3NpdG9yIGFuaW1hdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMjMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZha2VGbG9hdEFuaW1hdGlvbjo6ZHVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RmFrZUZsb2F0QW5pbWF0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVBY3RpdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisgICAgICAgICogdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6OkZha2VDb250
cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250cm9sbGVyQ2xpZW50Ojp+
RmFrZUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJD
bGllbnQ6Om9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6
OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6OnRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVudDo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250cm9sbGVyQ2xpZW50OjphbmltYXRp
b25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250
cm9sbGVyQ2xpZW50OjphY3RpdmVDb250cm9sbGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbjo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGYWtlRmxvYXRUcmFuc2l0aW9uOjpGYWtlRmxvYXRUcmFuc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkZha2VGbG9hdFRyYW5zaXRpb246OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZha2VGbG9hdFRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRF
U1QpOgorCiAyMDEyLTAxLTE4ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29t
PgogCiAgICAgICAgIEFjY2Vzc2liaWxpdHk6IENocm9taXVtIG5lZWRzIG1ldGhvZHMgdG8gc2Ny
b2xsIGFuIG9iamVjdCBpbnRvIHZpZXcgb3IgdG8gYSBzcGVjaWZpYyBsb2NhdGlvbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCBjZGRhZTM5NTU3NGUyNjg2ZWE1MGY3Yjg5NTllMzliNWQ5NDAyYTk1Li5m
OTIzOWVmYWM0NDJhNjY4YWZkYWFjNzU3MzhjNjQ0MGFhMGMwYTZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0zNjA1LDYgKzM2MDUsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NB
bmltYXRpb25DdXJ2ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0N1c3RvbUxheWVyRHJhd1F1YWQu
Y3BwJywKQEAgLTM2MjIsNiArMzYyNiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFlNmNjN2E5
ZTI0NmVjMGJlZmFhYTA1ODRmNmQyMjFjNDQ2MjBlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9u
LmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8Y21hdGg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ0NBY3RpdmVBbmltYXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NB
bmltYXRpb25DdXJ2ZT4gY3VydmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdl
dFByb3BlcnR5KQorICAgIDogbV9hbmltYXRpb25DdXJ2ZShjdXJ2ZSkKKyAgICAsIG1fZ3JvdXAo
Z3JvdXApCisgICAgLCBtX3RhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQorICAgICwgbV9y
dW5TdGF0ZShXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KQorICAgICwgbV9pdGVyYXRpb25z
KDEpCisgICAgLCBtX3N0YXJ0VGltZSgwKQorICAgICwgbV9wYXVzZVRpbWUoMCkKKyAgICAsIG1f
dG90YWxQYXVzZWRUaW1lKDApCit7Cit9CisKK3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNldFJ1
blN0YXRlKFJ1blN0YXRlIHJ1blN0YXRlLCBkb3VibGUgbm93KQoreworICAgIGlmIChydW5TdGF0
ZSA9PSBSdW5uaW5nICYmIG1fcnVuU3RhdGUgPT0gUGF1c2VkKQorICAgICAgICBtX3RvdGFsUGF1
c2VkVGltZSArPSBub3cgLSBtX3BhdXNlVGltZTsKKyAgICBlbHNlIGlmIChydW5TdGF0ZSA9PSBQ
YXVzZWQpCisgICAgICAgIG1fcGF1c2VUaW1lID0gbm93OworICAgIG1fcnVuU3RhdGUgPSBydW5T
dGF0ZTsKK30KKworYm9vbCBDQ0FjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0
aW1lKSBjb25zdAoreworICAgIGlmIChtX3J1blN0YXRlID09IEZpbmlzaGVkIHx8IG1fcnVuU3Rh
dGUgPT0gQWJvcnRlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9ydW5T
dGF0ZSA9PSBSdW5uaW5nCisgICAgICAgICYmIG1faXRlcmF0aW9ucyA+PSAwCisgICAgICAgICYm
IG1faXRlcmF0aW9ucyAqIG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkgPD0gdGltZSAtIHN0
YXJ0VGltZSgpIC0gbV90b3RhbFBhdXNlZFRpbWU7Cit9CisKK2RvdWJsZSBDQ0FjdGl2ZUFuaW1h
dGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKK3sKKyAg
ICBkb3VibGUgdHJpbW1lZCA9IG5vdzsKKworICAgIC8vIElmIHdlJ3JlIHBhdXNlZCwgdGltZSBp
cyAnc3R1Y2snIGF0IHRoZSBwYXVzZSB0aW1lLgorICAgIGlmIChtX3J1blN0YXRlID09IFBhdXNl
ZCAmJiB0cmltbWVkID4gbV9wYXVzZVRpbWUpCisgICAgICAgIHRyaW1tZWQgPSBtX3BhdXNlVGlt
ZTsKKworICAgIC8vIFJldHVybmVkIHRpbWUgc2hvdWxkIGFsd2F5cyBiZSByZWxhdGl2ZSB0byB0
aGUgc3RhcnQgdGltZSBhbmQgc2hvdWxkIHN1YnRyYWN0CisgICAgLy8gYWxsIHRpbWUgc3BlbnQg
cGF1c2VkLgorICAgIHRyaW1tZWQgLT0gbV9zdGFydFRpbWUgKyBtX3RvdGFsUGF1c2VkVGltZTsK
KworICAgIC8vIFplcm8gaXMgYWx3YXlzIHRoZSBzdGFydCBvZiB0aGUgYW5pbWF0aW9uLgorICAg
IGlmICh0cmltbWVkIDw9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQWx3YXlzIHJl
dHVybiB6ZXJvIGlmIHdlIGhhdmUgbm8gaXRlcmF0aW9ucy4KKyAgICBpZiAoIW1faXRlcmF0aW9u
cykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBJZiBsZXNzIHRoYW4gYW4gaXRlcmF0aW9u
IGR1cmF0aW9uLCBqdXN0IHJldHVybiB0cmltbWVkLgorICAgIGlmICh0cmltbWVkIDwgbV9hbmlt
YXRpb25DdXJ2ZS0+ZHVyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRyaW1tZWQ7CisKKyAgICAv
LyBJZiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHRvdGFsIGR1cmF0aW9uLCByZXR1cm4g
aXRlcmF0aW9uIGR1cmF0aW9uLgorICAgIGlmIChtX2l0ZXJhdGlvbnMgPj0gMCAmJiB0cmltbWVk
ID49IG1fYW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkgKiBtX2l0ZXJhdGlvbnMpCisgICAgICAg
IHJldHVybiBtX2FuaW1hdGlvbkN1cnZlLT5kdXJhdGlvbigpOworCisgICAgLy8gRmluYWxseSwg
cmV0dXJuIHggd2hlcmUgdHJpbW1lZCA9IHggKyBuICogbV9hbmltYXRpb24tPmR1cmF0aW9uKCkg
Zm9yIHNvbWUgcG9zaXRpdmUgaW50ZWdlciBuLgorICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1f
YW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjIyMjc5NDFhM2Nl
ZDEyZDY1OGQ3NmQ2MDRlZWU5ZmJhZDBhM2QxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FjdGl2ZUFuaW1hdGlv
bl9oCisjZGVmaW5lIENDQWN0aXZlQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7CisKKy8vIEEgQ0NBY3RpdmVBbmltYXRpb24sIGNvbnRh
aW5zIGFsbCB0aGUgc3RhdGUgcmVxdWlyZWQgdG8gcGxheSBhIENDQW5pbWF0aW9uQ3VydmUuCisv
LyBTcGVjaWZpY2FsbHksIHRoZSBhZmZlY3RlZCBwcm9wZXJ0eSwgdGhlIHJ1biBzdGF0ZSAocGF1
c2VkLCBmaW5pc2hlZCwgZXRjLiksCisvLyBsb29wIGNvdW50LCBsYXN0IHBhdXNlIHRpbWUsIGFu
ZCB0aGUgdG90YWwgdGltZSBzcGVudCBwYXVzZWQuCitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbiB7
CitwdWJsaWM6CisgICAgLy8gQW5pbWF0aW9ucyB0aGF0IG11c3QgYmUgcnVuIHRvZ2V0aGVyIGFy
ZSBjYWxsZWQgJ2dyb3VwZWQnIGFuZCBoYXZlIHRoZSBzYW1lIEdyb3VwSUQKKyAgICAvLyBHcm91
cGVkIGFuaW1hdGlvbnMgYXJlIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSBh
bmQgbm8gb3RoZXIgYW5pbWF0aW9ucworICAgIC8vIG1heSBhbmltYXRlIGFueSBvZiB0aGUgZ3Jv
dXAncyB0YXJnZXQgcHJvcGVydGllcyB1bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0aGUKKyAgICAv
LyBncm91cCBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZy4gTm90ZTogYW4gYWN0aXZlIGFuaW1hdGlv
bidzIGdyb3VwIGlkIGFuZCB0YXJnZXQKKyAgICAvLyBwcm9wZXJ0eSB1bmlxdWVseSBpZGVudGlm
eSB0aGF0IGFuaW1hdGlvbi4KKyAgICB0eXBlZGVmIGludCBHcm91cElEOworCisgICAgLy8gQW5p
bWF0aW9ucyBiZWdpbiBpbiBvbmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0ZXMuIEFuaW1hdGlvbnMg
d2FpdGluZyBmb3IgdGhlIG5leHQgdGljaworICAgIC8vIHdpbGwgc3RhcnQgdGhlIG5leHQgdGlt
ZSB0aGUgY29udHJvbGxlciBhbmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQK
KyAgICAvLyBhdmFpbGliaWxpdHkgd2lsbCBydW4gYXMgc29vbiBhcyB0aGVpciB0YXJnZXQgcHJv
cGVydHkgaXMgZnJlZSAoYW5kIGFsbCB0aGUgYW5pbWF0aW9ucworICAgIC8vIGFuaW1hdGluZyB3
aXRoIGl0IGFyZSBhbHNvIGFibGUgdG8gcnVuKS4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0aGVp
ciBzdGFydCB0aW1lIHRvCisgICAgLy8gY29tZSBoYXZlIGJlIHNjaGVkdWxlZCB0byBydW4gYXQg
YSBwYXJ0aWN1bGFyIHBvaW50IGluIHRpbWUuIFdoZW4gdGhpcyB0aW1lIGFycml2ZXMsCisgICAg
Ly8gdGhlIGNvbnRyb2xsZXIgd2lsbCBtb3ZlIHRoZSBhbmltYXRpb25zIGludG8gdGhlIFJ1bm5p
bmcgc3RhdGUuIFJ1bm5pbmcgYW5pbWF0aW9ucworICAgIC8vIG1heSB0b2dnbGUgYmV0d2VlbiBS
dW5uaW5nIGFuZCBQYXVzZWQsIGFuZCBtYXkgYmUgc3RvcHBlZCBieSBtb3ZpbmcgaW50byBlaXRo
ZXIgdGhlCisgICAgLy8gQWJvcnRlZCBvciBGaW5pc2hlZCBzdGF0ZXMuIEEgRmluaXNoZWQgYW5p
bWF0aW9uIHdhcyBhbGxvd2VkIHRvIHJ1biB0byBjb21wbGV0aW9uLCBidXQKKyAgICAvLyBhbiBB
Ym9ydGVkIGFuaW1hdGlvbiB3YXMgbm90LgorICAgIGVudW0gUnVuU3RhdGUgeworICAgICAgICBX
YWl0aW5nRm9yTmV4dFRpY2sgPSAxLAorICAgICAgICBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmls
aXR5LAorICAgICAgICBXYWl0aW5nRm9yU3RhcnRUaW1lLAorICAgICAgICBSdW5uaW5nLAorICAg
ICAgICBQYXVzZWQsCisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBBYm9ydGVkCisgICAgfTsK
KworICAgIGVudW0gVGFyZ2V0UHJvcGVydHkgeworICAgICAgICBUcmFuc2Zvcm0gPSAxLAorICAg
ICAgICBPcGFjaXR5CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBjcmVhdGUoUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJ
RCBncm91cCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBncm91cCwgdGFyZ2V0
UHJvcGVydHkpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpIHsg
fQorCisgICAgR3JvdXBJRCBncm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0KKyAgICBU
YXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJv
cGVydHk7IH0KKworICAgIFJ1blN0YXRlIHJ1blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9ydW5T
dGF0ZTsgfQorICAgIHZvaWQgc2V0UnVuU3RhdGUoUnVuU3RhdGUsIGRvdWJsZSBub3cpOworCisg
ICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxs
IHBsYXkuIElmIHRoaXMKKyAgICAvLyB2YWx1ZSBpcyB6ZXJvIHRoZSBhbmltYXRpb24gd2lsbCBu
b3QgcGxheS4gSWYgaXQgaXMgbmVnYXRpdmUsIHRoZW4KKyAgICAvLyB0aGUgYW5pbWF0aW9uIHdp
bGwgbG9vcCBpbmRlZmluaXRlbHkuCisgICAgaW50IGl0ZXJhdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2l0ZXJhdGlvbnM7IH0KKyAgICB2b2lkIHNldEl0ZXJhdGlvbnMoaW50IG4pIHsgbV9pdGVy
YXRpb25zID0gbjsgfQorCisgICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRUaW1lOyB9CisgICAgdm9pZCBzZXRTdGFydFRpbWUoZG91YmxlIHN0YXJ0VGltZSkgeyBt
X3N0YXJ0VGltZSA9IHN0YXJ0VGltZTsgfQorCisgICAgYm9vbCBpc0ZpbmlzaGVkQXQoZG91Ymxl
IHRpbWUpIGNvbnN0OworICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVu
U3RhdGUgPT0gRmluaXNoZWQgfHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkOyB9CisKKyAgICBDQ0Fu
aW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUu
Z2V0KCk7IH0KKyAgICBjb25zdCBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KKworICAgIC8vIFRha2VzIHRo
ZSBnaXZlbiBhYnNvbHV0ZSB0aW1lLCBhbmQgdXNpbmcgdGhlIHN0YXJ0IHRpbWUgYW5kIHRoZSBu
dW1iZXIKKyAgICAvLyBvZiBpdGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1lIGlu
IHRoZSBjdXJyZW50IGl0ZXJhdGlvbi4KKyAgICBkb3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJdGVy
YXRpb24oZG91YmxlIG5vdykgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0NBY3RpdmVBbmltYXRp
b24oUGFzc093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkp
OworCisgICAgT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IG1fYW5pbWF0aW9uQ3VydmU7CisgICAg
R3JvdXBJRCBtX2dyb3VwOworICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7Cisg
ICAgUnVuU3RhdGUgbV9ydW5TdGF0ZTsKKyAgICBpbnQgbV9pdGVyYXRpb25zOworICAgIGRvdWJs
ZSBtX3N0YXJ0VGltZTsKKworICAgIC8vIFRoZXNlIGFyZSB1c2VkIGluIHRyaW1UaW1lVG9DdXJy
ZW50SXRlcmF0aW9uIHRvIGFjY291bnQgZm9yIHRpbWUKKyAgICAvLyBzcGVudCB3aGlsZSBwYXVz
ZWQuIFRoaXMgaXMgbm90IGluY2x1ZGVkIGluIEFuaW1hdGlvblN0YXRlIHNpbmNlIGl0CisgICAg
Ly8gdGhlcmUgaXMgYWJzb2x1dGVseSBubyBuZWVkIGZvciBjbGllbnRzIG9mIHRoaXMgY29udHJv
bGxlciB0byBrbm93CisgICAgLy8gYWJvdXQgdGhlc2UgdmFsdWVzLgorICAgIGRvdWJsZSBtX3Bh
dXNlVGltZTsKKyAgICBkb3VibGUgbV90b3RhbFBhdXNlZFRpbWU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDQ0FjdGl2ZUFuaW1hdGlvbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlv
bkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQW5pbWF0aW9uQ3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4Y2RjNmFkNjYyMTRjMGM2YjRmMzE2
ZmY3ODc4ZDQ5NzdkMzE1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJj
Yy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgQ0NG
bG9hdEFuaW1hdGlvbkN1cnZlKiBDQ0FuaW1hdGlvbkN1cnZlOjp0b0Zsb2F0QW5pbWF0aW9uQ3Vy
dmUoKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gIENDQW5pbWF0aW9uQ3VydmU6OkZs
b2F0KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZl
Kj4odGhpcyk7Cit9CisKK2NvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIENDQW5pbWF0
aW9uQ3VydmU6OnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSBjb25zdAoreworICAgIEFTU0VS
VCh0eXBlKCkgPT0gIENDQW5pbWF0aW9uQ3VydmU6OlRyYW5zZm9ybSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqPih0aGlzKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRlOTdlMzhjMGEyNGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0FuaW1hdGlvbkN1cnZlLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ0FuaW1hdGlvbkN1cnZlX2gKKyNkZWZpbmUgQ0NBbmltYXRpb25DdXJ2ZV9oCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7CisKKy8v
IEFuIGFuaW1hdGlvbiBjdXJ2ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHZhbHVlIGdp
dmVuIGEgdGltZS4KKy8vIFRoZXJlIGFyZSBjdXJyZW50bHkgb25seSB0d28gdHlwZXMgb2YgY3Vy
dmUsIGZsb2F0IGFuZCB0cmFuc2Zvcm0uCitjbGFzcyBDQ0FuaW1hdGlvbkN1cnZlIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFR5cGUgeyBGbG9hdCwgVHJhbnNmb3JtIH07CisKKyAgICB2aXJ0dWFsIH5D
Q0FuaW1hdGlvbkN1cnZlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0
IENDRmxvYXRBbmltYXRpb25DdXJ2ZSogdG9GbG9hdEFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7Cisg
ICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdG9UcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSgpIGNvbnN0OworfTsKKworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGlj
IENDQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDRmxvYXRBbmltYXRp
b25DdXJ2ZSgpIHsgfQorCisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdCkgY29u
c3QgPSAwOworCisgICAgLy8gUGFydGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAg
ICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0OyB9Cit9OworCitjbGFz
cyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KKwor
ICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3Qg
PSAwOworCisgICAgLy8gUGFydGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFRyYW5zZm9ybTsgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ0NBbmltYXRpb25faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmJjYTljYmQ5MDU1ZTFlYzEzY2MwYTk3NDYzOWM1Zjk3MDg4MDk5MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbC5oIgorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVz
LiBVc2VkIHdoZW4gZGV0ZXJpbWluaW5nIGlmIGFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGFyZ2V0
CisvLyBhdmFpbGliaWxpdHkgYXJlIGFibGUgdG8gcnVuLgordHlwZWRlZiBIYXNoU2V0PGludD4g
VGFyZ2V0UHJvcGVydGllczsKKworUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw+IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbENsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKGNsaWVudCkpOworfQorCitDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQqIGNsaWVudCkKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKK3sKK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lU2VjcykKK3sKKyAgICBzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yTmV4dFRpY2soZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgc3Rh
cnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNl
Y3MpOworICAgIHJlc29sdmVDb25mbGljdHMoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICB0aWNr
QW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHB1cmdlRmluaXNoZWRBbmltYXRp
b25zKCk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShm
cmFtZUJlZ2luVGltZVNlY3MpOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6YWRkKFBhc3NPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0pCit7CisgICAgbV9h
Y3RpdmVBbmltYXRpb25zLmFwcGVuZChhbmltKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5hbmltYXRpb25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKHRoaXMpOworfQor
CitDQ0FjdGl2ZUFuaW1hdGlvbiogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRB
Y3RpdmVBbmltYXRpb24oQ0NBY3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZl
QW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0
aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVy
biBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0uZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQor
Citib29sIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9u
KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5T
dGF0ZSgpICE9IENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnJ1blN0YXRlKCkgIT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5l
eHRUaWNrKGRvdWJsZSBub3cpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNr
KSB7CisgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCBub3cpOworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRp
b25zW2ldLT5zZXRTdGFydFRpbWUobm93KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWUoZG91YmxlIG5vdykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0
aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRU
aW1lICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93KQorICAgICAg
ICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlv
bjo6UnVubmluZywgbm93KTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsOjpzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRv
dWJsZSBub3cpCit7CisgICAgLy8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCisg
ICAgVGFyZ2V0UHJvcGVydGllcyBibG9ja2VkUHJvcGVydGllczsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpS
dW5uaW5nIHx8IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFu
aW1hdGlvbjo6RmluaXNoZWQpCisgICAgICAgICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9h
Y3RpdmVBbmltYXRpb25zW2ldLT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICB9CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5p
bWF0aW9uOjpXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KSB7CisgICAgICAgICAgICAvLyBD
b2xsZWN0IGFsbCBwcm9wZXJ0aWVzIGZvciBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAg
aWQgKHRoZXkgc2hvdWxkIGFsbCBhbHNvIGJlIGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMpLgor
ICAgICAgICAgICAgVGFyZ2V0UHJvcGVydGllcyBlbnF1ZXVlZFByb3BlcnRpZXM7CisgICAgICAg
ICAgICBlbnF1ZXVlZFByb3BlcnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0
UHJvcGVydHkoKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2Fj
dGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3Rp
dmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAo
KSkKKyAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFu
aW1hdGlvbnNbal0tPnRhcmdldFByb3BlcnR5KCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIHByb3Bl
cnRpZXMgYWZmZWN0ZWQgYnkgdGhlIGdyb3VwIGFuZCB0aGUgbGlzdCBvZiBjdXJyZW50bHkKKyAg
ICAgICAgICAgIC8vIGJsb2NrZWQgcHJvcGVydGllcyBpcyBudWxsLiBJbiBhbnkgY2FzZSwgdGhl
IGdyb3VwJ3MgdGFyZ2V0IHByb3BlcnRpZXMgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAor
ICAgICAgICAgICAgLy8gb2YgYmxvY2tlZCBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgYm9vbCBu
dWxsSW50ZXJzZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoVGFyZ2V0UHJvcGVydGll
czo6aXRlcmF0b3IgcEl0ZXIgPSBlbnF1ZXVlZFByb3BlcnRpZXMuYmVnaW4oKTsgcEl0ZXIgIT0g
ZW5xdWV1ZWRQcm9wZXJ0aWVzLmVuZCgpOyArK3BJdGVyKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFibG9ja2VkUHJvcGVydGllcy5hZGQoKnBJdGVyKS5zZWNvbmQpCisgICAgICAgICAgICAgICAg
ICAgIG51bGxJbnRlcnNlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gSWYgdGhlIGludGVyc2VjdGlvbiBpcyBudWxsLCB0aGVuIHdlIGFyZSBmcmVlIHRvIHN0
YXJ0IHRoZSBhbmltYXRpb25zIGluIHRoZSBncm91cC4KKyAgICAgICAgICAgIGlmIChudWxsSW50
ZXJzZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsKKyAgICAgICAgICAgICAg
ICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7
ICsraikgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgbm93KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZl
QW5pbWF0aW9uc1tqXS0+c2V0U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpyZXNvbHZlQ29uZmxpY3RzKGRv
dWJsZSBub3cpCit7CisgICAgLy8gRmluZCBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBhbmltYXRp
bmcgdGhlIHNhbWUgcHJvcGVydHkgYW5kIHJlc29sdmUgdGhlCisgICAgLy8gY29uZmljdC4gV2Ug
Y291bGQgZXZlbnR1YWxseSBibGVuZCwgYnV0IGZvciBub3cgd2UnbGwganVzdCBhYm9ydCB0aGUK
KyAgICAvLyBwcmV2aW91cyBhbmltYXRpb24gKHdoZXJlICdwcmV2aW91cycgbWVhbnM6ICgxKSBo
YXMgYSBwcmlvciBzdGFydCB0aW1lIG9yCisgICAgLy8gKDIpIGhhcyBhbiBlcXVhbCBzdGFydCB0
aW1lLCBidXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBlYXJsaWVyLCBpLmUuLAorICAgIC8vIGhh
cyBhIGxvd2VyIGluZGV4IGluIG1fYWN0aXZlQW5pbWF0aW9ucykuCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6
UnVubmluZykgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3Rp
dmVBbmltYXRpb25zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZl
QW5pbWF0aW9uc1tqXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZyAm
JiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gbV9hY3RpdmVBbmlt
YXRpb25zW2pdLT50YXJnZXRQcm9wZXJ0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnN0YXJ0VGltZSgpID4gbV9hY3RpdmVBbmltYXRpb25zW2pd
LT5zdGFydFRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9u
c1tqXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG5vdyk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG5vdyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1h
dGlvbnMoKQoreworICAgIC8vIEVhY2ggaXRlcmF0aW9uLCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpIGRlY3JlYXNlcyBvciBpIGluY3JlbWVudHMsCisgICAgLy8gZ3VhcmFudGVlaW5nIHByb2dy
ZXNzIHRvd2FyZHMgbG9vcCB0ZXJtaW5hdGlvbi4KKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hp
bGUgKGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgIGJvb2wgYWxsQW5p
bXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1l
SWRBcmVGaW5pc2hlZCA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7
IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBp
ZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tq
XS0+Z3JvdXAoKSAmJiAhbV9hY3RpdmVBbmltYXRpb25zW2pdLT5pc0ZpbmlzaGVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hl
ZCkKKyAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGkrKzsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsOjp0aWNrQW5pbWF0aW9ucyhkb3VibGUgbm93KQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRp
b246OlJ1bm5pbmcpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0cmltbWVkID0gbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbihub3cpOworICAgICAgICAgICAg
c3dpdGNoIChtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpIHsKKworICAg
ICAgICAgICAgY2FzZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOiB7CisgICAgICAgICAg
ICAgICAgY29uc3QgQ0NUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUgPSBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPmFuaW1hdGlvbkN1cnZlKCktPnRvVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMgPSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJp
bW1lZCk7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5p
c2hlZEF0KG5vdykpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBub3cpOworCisgICAgICAg
ICAgICAgICAgLy8gRGVjaWRlIGhlcmUgaWYgYWJzb2x1dGUgb3IgcmVsYXRpdmUuIEFic29sdXRl
IGZvciBub3cuCisgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9BcHBseTsK
KyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGx5KEZsb2F0U2l6ZSgpLCB0b0FwcGx5KTsK
KyAgICAgICAgICAgICAgICBtX2NsaWVudC0+c2V0VHJhbnNmb3JtKHRvQXBwbHkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5OiB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFu
aW1hdGlvbkN1cnZlKiBmbG9hdEFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ld
LT5hbmltYXRpb25DdXJ2ZSgpLT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gZmxvYXRBbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUo
dHJpbW1lZCk7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNG
aW5pc2hlZEF0KG5vdykpCisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tp
XS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBub3cpOworCisgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAg
ICAgIH0gLy8gaWYgcnVubmluZworICAgIH0gLy8gZm9yIGVhY2ggYW5pbWF0aW9uCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFkMjIzZGJhODIzYTJhMDU3YjEwMmQ5
NmFhOTVhZWFiMmQ1Mjg2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5o
CkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsX2gKKyNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
X2gKKworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0
cml4OworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5p
bWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAw
OworICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1w
bERpZEFjdGl2YXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopID0gMDsKK307CisK
K2NsYXNzIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjcmVhdGUoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGUo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisKKyAgICB2b2lkIGFkZChQYXNzT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9u
IGluIHRoZSBnaXZlbiBncm91cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNo
IGFuCisgICAgLy8gYW5pbWF0aW9uIGV4aXN0cy4KKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0
QWN0aXZlQW5pbWF0aW9uKENDQWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHkpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFy
ZSBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgor
ICAgIGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8g
VGhlIGFuaW1hdG9yIGlzIG93bmVkIGJ5IHRoZSBsYXllci4KKyAgICBleHBsaWNpdCBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50Kik7CisKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3Vi
bGUgbm93KTsKKyAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91
YmxlIG5vdyk7CisgICAgdm9pZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxh
YmlsaXR5KGRvdWJsZSBub3cpOworICAgIHZvaWQgcmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbm93
KTsKKyAgICB2b2lkIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIHRpY2tB
bmltYXRpb25zKGRvdWJsZSBub3cpOworCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsQ2xpZW50KiBtX2NsaWVudDsKKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9u
PiA+IG1fYWN0aXZlQW5pbWF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbF9oCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCmluZGV4IDRjMGMwMjNlMWY3ZDk3ZDE3OWQ1MDQ2MTgyN2M5ODJmNjgx
ZDVlYmIuLjNjYjQ5Zjg5MzdhMTJiYTM4ZWYxODYyMDVhM2FlOTJhZTY1OGQ3NDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjAsOSArNjAsMTEgQEAKICAgICAgICAgICAgICd0
ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRV
UkxMb2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXllckNocm9t
aXVtVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0
ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXll
ckl0ZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJRdWFkVGVzdC5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFu
aW1hdGlvblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFu
aW1hdGlvblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlOTNkOTVkZTg2OGEyZjNhMjVhYjAzMDIwZWQy
NWMxZDBlYzQ5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0
aW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDxn
bW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZha2VGbG9hdEFuaW1hdGlv
biA6IHB1YmxpYyBDQ0Zsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIHZpcnR1YWwg
ZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgZmxvYXQg
Z2V0VmFsdWUoZG91YmxlIG5vdykgY29uc3QgeyByZXR1cm4gMDsgfQorfTsKKworUGFzc093blB0
cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25z
KQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVy
YXRpb25zKTsKKyAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOworfQorCitURVNUKENDQWN0
aXZlQW5pbWF0aW9uVGVzdCwgVHJpbVRpbWVaZXJvSXRlcmF0aW9ucykKK3sKKyAgICBPd25QdHI8
Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDApKTsKKyAgICBF
WFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oLTEpKTsKKyAgICBF
WFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMCkpOworICAgIEVY
UEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxKSk7Cit9CisKK1RF
U1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBUcmltVGltZU9uZUl0ZXJhdGlvbikKK3sKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDEpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oLTEpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMCkpOwor
ICAgIEVYUEVDVF9FUSgxLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxKSk7Cisg
ICAgRVhQRUNUX0VRKDEsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDIpKTsKK30K
KworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIFRyaW1UaW1lSW5maW5pdGVJdGVyYXRpb25z
KQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmlt
YXRpb24oLTEpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVy
YXRpb24oMCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRl
cmF0aW9uKDAuNSkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0
ZXJhdGlvbigxKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJ
dGVyYXRpb24oMS41KSk7Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBUcmltVGlt
ZVN0YXJ0VGltZSkKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBhbmltLT5zZXRTdGFydFRpbWUoNCk7CisgICAgRVhQ
RUNUX0VRKDAsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDApKTsKKyAgICBFWFBF
Q1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oNCkpOworICAgIEVYUEVD
VF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDQuNSkpOworICAgIEVY
UEVDVF9FUSgxLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbig1KSk7CisgICAgRVhQ
RUNUX0VRKDEsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDYpKTsKK30KKworVEVT
VChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIFRyaW1UaW1lUGF1c2VSZXN1bWUpCit7CisgICAgT3du
UHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigxKSk7Cisg
ICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDApOworICAg
IEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigwKSk7CisgICAg
RVhQRUNUX0VRKDAuNSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMC41KSk7Cisg
ICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41KTsKKyAg
ICBFWFBFQ1RfRVEoMC41LCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxMDI0KSk7
CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQp
OworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDEw
MjQpKTsKKyAgICBFWFBFQ1RfRVEoMSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24o
MTAyNC41KSk7Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkQXRa
ZXJvSXRlcmF0aW9ucykKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3Jl
YXRlQWN0aXZlQW5pbWF0aW9uKDApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRB
dCgtMSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgRVhQ
RUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZEF0KDEpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1h
dGlvblRlc3QsIElzRmluaXNoZWRBdE9uZUl0ZXJhdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBY3Rp
dmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBhbmltLT5z
ZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgMCk7CisgICAgRVhQRUNUX0ZB
TFNFKGFuaW0tPmlzRmluaXNoZWRBdCgtMSkpOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0Zp
bmlzaGVkQXQoMCkpOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgxKSk7Cisg
ICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZEF0KDIpKTsKK30KKworVEVTVChDQ0FjdGl2
ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWRBdEluZmluaXRlSXRlcmF0aW9ucykKK3sKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKC0xKSk7
CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDApOwor
ICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMCkpOworICAgIEVYUEVDVF9GQUxT
RShhbmltLT5pc0ZpbmlzaGVkQXQoMC41KSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmlu
aXNoZWRBdCgxKSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgxLjUpKTsK
K30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWRBdE5vdFJ1bm5pbmcp
Cit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1h
dGlvbigwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5p
bmcsIDApOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5p
bS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMCk7CisgICAgRVhQRUNU
X0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JOZXh0VGljaywgMCk7CisgICAgRVhQRUNUX0ZBTFNF
KGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVB
bmltYXRpb246OldhaXRpbmdGb3JUYXJnZXRBdmFpbGFiaWxpdHksIDApOworICAgIEVYUEVDVF9G
QUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
YW5pbS0+aXNGaW5pc2hlZEF0KDApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6RmluaXNoZWQsIDApOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRB
dCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQs
IDApOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7Cit9CisKK1RFU1Qo
Q0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkKQoreworICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24oMSkpOworICAgIGFuaW0tPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nLCAwKTsKKyAgICBFWFBFQ1RfRkFM
U0UoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UGF1c2VkLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZCgp
KTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5l
eHRUaWNrLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBh
bmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWls
YWJpbGl0eSwgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWQoKSk7CisgICAg
YW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUs
IDApOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkKCkpOworICAgIGFuaW0tPnNl
dFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgMCk7CisgICAgRVhQRUNUX1RS
VUUoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6QWJvcnRlZCwgMCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q1MGQwNmU2MjMxMjE4ZjE0MDIxMmIxZGZlZDZlNzg5
NWIwZjUzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKQEAgLTAsMCArMSw0NTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIgorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0
aW9ucy5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPGdt
b2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFz
cyBGYWtlQ29udHJvbGxlckNsaWVudCA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxDbGllbnQgeworcHVibGljOgorICAgIEZha2VDb250cm9sbGVyQ2xpZW50KCkgOiBtX29w
YWNpdHkoMCkgeyB9CisgICAgdmlydHVhbCB+RmFrZUNvbnRyb2xsZXJDbGllbnQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0g
b3BhY2l0eTsgfQorICAgIHZpcnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJh
bnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsRGlkQWN0aXZhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9s
bGVyKQorICAgIHsKKyAgICAgICAgbV9hY3RpdmVDb250cm9sbGVycy5hcHBlbmQoY29udHJvbGxl
cik7CisgICAgfQorCisgICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+
JiBhY3RpdmVDb250cm9sbGVycygpIHsgcmV0dXJuIG1fYWN0aXZlQ29udHJvbGxlcnM7IH0KKwor
cHJpdmF0ZToKKyAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV90cmFuc2Zvcm07CisgICAgVmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+
IG1fYWN0aXZlQ29udHJvbGxlcnM7Cit9OworCitjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
biA6IHB1YmxpYyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtl
VHJhbnNmb3JtVHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlvbihkdXJhdGlv
bikgeyB9CisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1
cmF0aW9uOyB9CisgICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdldFZhbHVlKGRvdWJs
ZSB0aW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbnMo
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1fZHVyYXRpb247Cit9OworCitjbGFz
cyBGYWtlRmxvYXRUcmFuc2l0aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7Citw
dWJsaWM6CisgICAgRmFrZUZsb2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0IGZy
b20sIGZsb2F0IHRvKQorICAgICAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24pCisgICAgICAgICwg
bV9mcm9tKGZyb20pCisgICAgICAgICwgbV90byh0bykKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAg
dmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKKyAgICB7CisgICAgICAg
IHRpbWUgLz0gbV9kdXJhdGlvbjsKKyAgICAgICAgaWYgKHRpbWUgPj0gMSkKKyAgICAgICAgICAg
IHRpbWUgPSAxOworICAgICAgICByZXR1cm4gKDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBt
X3RvOworICAgIH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9h
dCBtX2Zyb207CisgICAgZmxvYXQgbV90bzsKK307CisKKy8vIFRlc3RzIHRoYXQgdHJhbnNpdGlv
bmluZyBvcGFjaXR5IGZyb20gMCB0byAxIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKK3sKKyAgICBG
YWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0
VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisK
KyAgICBjb250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVY
UEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRl
c3RzIHRoYXQgdHdvIHF1ZXVlZCBhbmltYXRpb25zIGFmZmVjdGluZyB0aGUgc2FtZSBwcm9wZXJ0
eSBydW4gaW4gc2VxdWVuY2UuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIFRyaXZpYWxRdWV1aW5nKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15Owor
ICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisg
ICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOwor
CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIo
bmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVY
UEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
Mik7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZB
TFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgaW50
ZXJydXB0aW5nIGEgdHJhbnNpdGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KK1RFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQoreworICAgIEZha2VD
b250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6Y3JlYXRlKCZkdW1teSkpOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1h
dGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwg
MSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yTmV4dFRpY2ssIDApOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkp
OworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMg
Tk9XLgorICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEuNSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVz
dHMgc2NoZWR1bGluZyB0d28gYW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9u
ZSBwcm9wZXJ0eSBpcyBmcmVlLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKK3sKKyAgICBGYWtl
Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSks
IDEsIENDQWN0aXZlQW5pbWF0aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5z
aXRpb24oMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJv
bGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9h
dFRyYW5zaXRpb24oMSwgMCwgMSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOwor
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUg
c3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFj
aXR5KCkpOworICAgIC8vIFRoZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0
ZWQgYXQgdGltZSAxIGFuZCBzaG91bGQgYmUgZG9uZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRl
KDIpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxT
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVk
dWxpbmcgdHdvIGFuaW1hdGlvbnMgdG8gcnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0
aHMgYW5kIGFub3RoZXIKKy8vIGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hv
cnRlciBhbmltYXRpb24gZmluaXNoZXMgKHNob3VsZCB3YWl0CisvLyBmb3IgYm90aCB0byBmaW5p
c2gpLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRv
Z2V0aGVyV2l0aEFuQW5pbVdhaXRpbmcpCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVt
bXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxl
cigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15
KSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAu
NWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8vIEFuaW1zIHdp
dGggaWQgMSBzaG91bGQgYm90aCBzdGFydCBub3cuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgw
KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgLy8gVGhlIG9wYWNpdHkgYW5p
bWF0aW9uIHNob3VsZCBoYXZlIGZpbmlzaGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAorICAg
IC8vIG9mIGFuaW1hdGlvbnMgd2l0aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVj
YXVzZSBvZiB0aGUgbGVuZ3RoCisgICAgLy8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgyKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRl
ZCB0aGUgZmxvYXQgdHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkp
OworCisgICAgLy8gVGhlIHRoZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0
IGF0IHRpbWUgMiBhbmQgc2hvdWxkIGJlCisgICAgLy8gZG9uZSBieSB0aW1lIDMKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDMpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkp
OworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9
CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1
cmUuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5p
bWF0aW9uKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgT3duUHRy
PENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246
OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOworICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7Cisg
ICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVyLT5h
bmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVy
LT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1h
dGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAg
IEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8v
IFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhh
dCdzIGludGVycnVwdGluZyBhIHJ1bm5pbmcgYW5pbWF0aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmlu
Z0FuaW1hdGlvbikKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25Q
dHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBD
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNv
bnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSks
IDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRl
KENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+
c2V0U3RhcnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOwor
CisgICAgLy8gRmlyc3QgMnMgb3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlh
dGVseS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRy
b2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3Bh
Y2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
MC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4g
YW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmlu
ZyBhbmltYXRpb24KKy8vIGFuZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVk
IHRvIHN0YXJ0IGxhdGVyLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0
LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5R
dWV1ZSkKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnRyb2xs
ZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDIsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKwor
ICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0
aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3Rh
cnRUaW1lKDEpOworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAg
Y29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9w
YWNpdHkpKTsKKworICAgIC8vIEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3Rh
cnQgaW1tZWRpYXRlbHkuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAs
IGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+
aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7
CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
NCk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9G
QUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3QgdGhh
dCBhIGxvb3BpbmcgYW5pbWF0aW9uIGxvb3BzIGFuZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9m
IGl0ZXJhdGlvbnMuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRy
aXZpYWxMb29waW5nKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAg
T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRl
KGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKKyAgICBj
b250cm9sbGVyLT5hZGQodG9BZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1h
dGUoMCk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkp
OworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFu
aW1hdGUoMS4yNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0
aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDEuNzUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0Fj
dGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgyLjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5v
cGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMi43NSk7CisgICAgRVhQRUNUX1RS
VUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1
ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOworICAgIEVY
UEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNU
X0VRKDEsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICAvLyBKdXN0IGJlIGV4dHJhIHN1cmUuCisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSg0KTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0
eSgpKTsKK30KKworLy8gVGVzdCB0aGF0IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24g
ZG9lcyBpbmRlZWQgZ28gdW50aWwgYWJvcnRlZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgSW5maW5pdGVMb29waW5nKQoreworICAgIEZha2VDb250cm9sbGVyQ2xp
ZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNv
bnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRl
KCZkdW1teSkpOworCisgICAgY29uc3QgaW50IGlkID0gMTsKKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IHRvQWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygtMSk7CisgICAgY29udHJvbGxlci0+YWRk
KHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOwor
ICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBF
WFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgxLjc1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24o
KSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgY29udHJv
bGxlci0+YW5pbWF0ZSgxMDczNzQxODI0LjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVy
LT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFj
aXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSk7CisgICAgRVhQ
RUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
PmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIDAuNzVmKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAg
IEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCB0aGF0IHBh
dXNpbmcgYW5kIHJlc3VtaW5nIHdvcmsgYXMgZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbFRlc3QsIFBhdXNlUmVzdW1lKQoreworICAgIEZha2VDb250cm9sbGVy
Q2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+
IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3Jl
YXRlKCZkdW1teSkpOworCisgICAgY29uc3QgaW50IGlkID0gMTsKKyAgICBjb250cm9sbGVyLT5h
ZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNp
dGlvbigxLCAwLCAxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAg
Y29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7Cisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0
eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihp
ZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3Rp
dmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUo
Q0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41Zik7CisKKyAgICBjb250cm9sbGVyLT5hbmlt
YXRlKDEwMjQpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246
OlJ1bm5pbmcsIDEwMjQpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUo
MTAyNC41KTsKKyAgICBFWFBFQ1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworfQorCitURVNUKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIEFib3J0QUdyb3VwZWRBbmltYXRpb24pCit7
CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBjb25zdCBpbnQgaWQgPSAx
OworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRy
KG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6
VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVh
dGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3Rp
dmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmlt
YXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1
ZikpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5p
bWF0aW9uOjpPcGFjaXR5KSk7CisgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0
aW9uOjpBYm9ydGVkLCAxKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEo
MSwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVY
UEVDVF9UUlVFKCFjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNU
X0VRKDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOworfQorCisvLyBUZXN0cyB0aGF0IGFkZGluZyBh
biBhbmltYXRpb24gdG8gdGhlIGNvbnRyb2xsZXIgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGNhbGxi
YWNrIG9uIHRoZSBjb250cm9sbGVyIGNsaWVudAorLy8gKGluIHRoaXMgY2FzZSwgYWRkaW5nIHRo
ZSBjb250cm9sbGVyIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBjb250cm9sbGVyKS4KK1RFU1QoQ0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgRGlkQWN0aXZhdGUpCit7CisgICAgRmFr
ZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBkdW1t
eS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NB
Y3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigx
LCAwLCAxKSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBFWFBFQ1Rf
RVEoc2l6ZV90KDEpLCBkdW1teS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKGNvbnRyb2xsZXIuZ2V0KCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOwor
fQorCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122985</attachid>
            <date>2012-01-18 13:48:25 -0800</date>
            <delta_ts>2012-01-18 20:18:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73233-20120118164823.patch</filename>
            <type>text/plain</type>
            <size>63557</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJmYjQ4NTdhODRmMjFm
NGM1YWIwZGQzNmE5NTA2ZjJmODZmZTczNy4uZWI3OWEyMDVkODlkNTA0NGZmZTk2NTg1MjEzNWEy
NjI3ZjRiMWZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTAxLTE4ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIGEgYmFzZS1jbGFzcyBDQ0FuaW1hdGlvbiB0byByZXByZXNlbnQgY29tcG9zaXRvciBhbmlt
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MzIzMworCisgICAgICAgIEFkZHMgYSBrZXJuZWwgZm9yIHJ1bm5pbmcgYW5pbWF0aW9ucyBvbiB0
aGUgY2hyb21pdW0gY29tcG9zaXRvcgorICAgICAgICB0aHJlYWQuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpDQ0FjdGl2ZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6c2V0UnVuU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OmlzRmluaXNoZWRBdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1cnJlbnRJdGVy
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZl
QW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6fkNDQWN0aXZl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpncm91cCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6dGFyZ2V0UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OnJ1blN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjppdGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDQWN0aXZlQW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NBY3Rp
dmVBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbjo6aXNGaW5pc2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlv
bjo6YW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQW5pbWF0aW9uQ3VydmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDQW5p
bWF0aW9uQ3VydmU6OnRvRmxvYXRBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0FuaW1hdGlvbkN1cnZlOjp0b1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZTo6fkNDQW5pbWF0aW9uQ3VydmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NGbG9hdEFuaW1hdGlvbkN1cnZlOjp+Q0NGbG9hdEFuaW1hdGlv
bkN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRmxvYXRBbmltYXRpb25DdXJ2ZTo6dHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+Q0NUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjp0eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Q0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmdldEFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6Omhhc0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9u
c1dhaXRpbmdGb3JOZXh0VGljayk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFuaW1h
dGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6cmVzb2x2ZUNvbmZsaWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OnB1cmdlRmluaXNoZWRB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVy
SW1wbDo6dGlja0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbENsaWVudDo6fkNDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbENsaWVudCk6CisKIDIwMTItMDEtMTggIFRpbSBEcmVzc2Vy
ICA8dGRyZXNzZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3Ig
Y2FudmFzLCBwbHVnaW4sIGFuZCB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjIxNWRlMWQyMjc0YjFiNmJkZWRlYjkwZTcx
YWJjM2NlYjhiYjk2Ni4uMWFjNDNjMjUwMjdhYWQ2NzgwZTViMWEzMWJhYTEyMTc1ODg0YmE3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wMS0xOCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIGJhc2UtY2xhc3MgQ0NBbmltYXRpb24gdG8gcmVwcmVzZW50IGNvbXBvc2l0b3Ig
YW5pbWF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMyMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmFrZUZsb2F0QW5pbWF0aW9uOjpkdXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpGYWtlRmxvYXRBbmltYXRpb246OmdldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNsaWVudDo6
RmFrZUNvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJD
bGllbnQ6On5GYWtlQ29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29u
dHJvbGxlckNsaWVudDo6b3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxl
ckNsaWVudDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpGYWtlQ29udHJvbGxlckNs
aWVudDo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZha2VDb250cm9sbGVyQ2xpZW50
OjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RmFrZUNvbnRyb2xsZXJDbGllbnQ6
OmFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RmFrZUNvbnRyb2xsZXJDbGllbnQ6OmFjdGl2ZUNvbnRyb2xsZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RmFrZVRyYW5zZm9ybVRyYW5zaXRpb246OmdldFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZha2VGbG9hdFRyYW5zaXRpb246OkZha2VGbG9hdFRyYW5zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6ZHVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RmFrZUZsb2F0VHJhbnNpdGlvbjo6Z2V0VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6VEVTVCk6CisKIDIwMTItMDEtMTggIFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgY2FudmFzLCBwbHVnaW4sIGFu
ZCB2aWRlbyBkcmF3aW5nIHRvIGJlIG1vcmUgZGF0YS1kcml2ZW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCA1NTNhMzZhOTlmNTFlMGFlMWFkMmQ0ZDZjODEyZTQwY2FjNmVjOTU3Li45ODQ1NzVlZjgwZmJi
NThhMGYwMTU2NTFlMmY1YWVkOGYzZTEzNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjA1LDYg
KzM2MDUsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2
ZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5p
bWF0aW9uQ3VydmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNEcmF3UXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzRHJhd1F1YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwJywKQEAgLTM2MjIsNiAr
MzYyNiw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NJbnB1dEhhbmRsZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRp
b25Db250cm9sbGVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Fj
dGl2ZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFlNmNjN2E5ZTI0NmVjMGJlZmFhYTA1ODRm
NmQyMjFjNDQ2MjBlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQWN0aXZlQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgor
CisjaW5jbHVkZSA8Y21hdGg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NBY3RpdmVBbmlt
YXRpb246OkNDQWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3Vy
dmUsIEdyb3VwSUQgZ3JvdXAsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgIDog
bV9hbmltYXRpb25DdXJ2ZShjdXJ2ZSkKKyAgICAsIG1fZ3JvdXAoZ3JvdXApCisgICAgLCBtX3Rh
cmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5KQorICAgICwgbV9ydW5TdGF0ZShXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KQorICAgICwgbV9pdGVyYXRpb25zKDEpCisgICAgLCBtX3N0YXJ0
VGltZSgwKQorICAgICwgbV9wYXVzZVRpbWUoMCkKKyAgICAsIG1fdG90YWxQYXVzZWRUaW1lKDAp
Cit7Cit9CisKK3ZvaWQgQ0NBY3RpdmVBbmltYXRpb246OnNldFJ1blN0YXRlKFJ1blN0YXRlIHJ1
blN0YXRlLCBkb3VibGUgbm93KQoreworICAgIGlmIChydW5TdGF0ZSA9PSBSdW5uaW5nICYmIG1f
cnVuU3RhdGUgPT0gUGF1c2VkKQorICAgICAgICBtX3RvdGFsUGF1c2VkVGltZSArPSBub3cgLSBt
X3BhdXNlVGltZTsKKyAgICBlbHNlIGlmIChydW5TdGF0ZSA9PSBQYXVzZWQpCisgICAgICAgIG1f
cGF1c2VUaW1lID0gbm93OworICAgIG1fcnVuU3RhdGUgPSBydW5TdGF0ZTsKK30KKworYm9vbCBD
Q0FjdGl2ZUFuaW1hdGlvbjo6aXNGaW5pc2hlZEF0KGRvdWJsZSB0aW1lKSBjb25zdAoreworICAg
IGlmIChtX3J1blN0YXRlID09IEZpbmlzaGVkIHx8IG1fcnVuU3RhdGUgPT0gQWJvcnRlZCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9ydW5TdGF0ZSA9PSBSdW5uaW5nCisg
ICAgICAgICYmIG1faXRlcmF0aW9ucyA+PSAwCisgICAgICAgICYmIG1faXRlcmF0aW9ucyAqIG1f
YW5pbWF0aW9uQ3VydmUtPmR1cmF0aW9uKCkgPD0gdGltZSAtIHN0YXJ0VGltZSgpIC0gbV90b3Rh
bFBhdXNlZFRpbWU7Cit9CisKK2RvdWJsZSBDQ0FjdGl2ZUFuaW1hdGlvbjo6dHJpbVRpbWVUb0N1
cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykgY29uc3QKK3sKKyAgICBkb3VibGUgdHJpbW1lZCA9
IG5vdzsKKworICAgIC8vIElmIHdlJ3JlIHBhdXNlZCwgdGltZSBpcyAnc3R1Y2snIGF0IHRoZSBw
YXVzZSB0aW1lLgorICAgIGlmIChtX3J1blN0YXRlID09IFBhdXNlZCAmJiB0cmltbWVkID4gbV9w
YXVzZVRpbWUpCisgICAgICAgIHRyaW1tZWQgPSBtX3BhdXNlVGltZTsKKworICAgIC8vIFJldHVy
bmVkIHRpbWUgc2hvdWxkIGFsd2F5cyBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgdGltZSBhbmQg
c2hvdWxkIHN1YnRyYWN0CisgICAgLy8gYWxsIHRpbWUgc3BlbnQgcGF1c2VkLgorICAgIHRyaW1t
ZWQgLT0gbV9zdGFydFRpbWUgKyBtX3RvdGFsUGF1c2VkVGltZTsKKworICAgIC8vIFplcm8gaXMg
YWx3YXlzIHRoZSBzdGFydCBvZiB0aGUgYW5pbWF0aW9uLgorICAgIGlmICh0cmltbWVkIDw9IDAp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQWx3YXlzIHJldHVybiB6ZXJvIGlmIHdlIGhh
dmUgbm8gaXRlcmF0aW9ucy4KKyAgICBpZiAoIW1faXRlcmF0aW9ucykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAvLyBJZiBsZXNzIHRoYW4gYW4gaXRlcmF0aW9uIGR1cmF0aW9uLCBqdXN0IHJl
dHVybiB0cmltbWVkLgorICAgIGlmICh0cmltbWVkIDwgbV9hbmltYXRpb25DdXJ2ZS0+ZHVyYXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIHRyaW1tZWQ7CisKKyAgICAvLyBJZiBncmVhdGVyIHRoYW4g
b3IgZXF1YWwgdG8gdGhlIHRvdGFsIGR1cmF0aW9uLCByZXR1cm4gaXRlcmF0aW9uIGR1cmF0aW9u
LgorICAgIGlmIChtX2l0ZXJhdGlvbnMgPj0gMCAmJiB0cmltbWVkID49IG1fYW5pbWF0aW9uQ3Vy
dmUtPmR1cmF0aW9uKCkgKiBtX2l0ZXJhdGlvbnMpCisgICAgICAgIHJldHVybiBtX2FuaW1hdGlv
bkN1cnZlLT5kdXJhdGlvbigpOworCisgICAgLy8gRmluYWxseSwgcmV0dXJuIHggd2hlcmUgdHJp
bW1lZCA9IHggKyBuICogbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgZm9yIHNvbWUgcG9zaXRpdmUg
aW50ZWdlciBuLgorICAgIHJldHVybiBmbW9kKHRyaW1tZWQsIG1fYW5pbWF0aW9uQ3VydmUtPmR1
cmF0aW9uKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FjdGl2ZUFuaW1hdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3Rp
dmVBbmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjIyMjc5NDFhM2NlZDEyZDY1OGQ3NmQ2MDRlZWU5
ZmJhZDBhM2QxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uaApAQCAtMCwwICsxLDEyMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FjdGl2ZUFuaW1hdGlvbl9oCisjZGVmaW5lIENDQWN0
aXZlQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDQW5pbWF0aW9u
Q3VydmU7CisKKy8vIEEgQ0NBY3RpdmVBbmltYXRpb24sIGNvbnRhaW5zIGFsbCB0aGUgc3RhdGUg
cmVxdWlyZWQgdG8gcGxheSBhIENDQW5pbWF0aW9uQ3VydmUuCisvLyBTcGVjaWZpY2FsbHksIHRo
ZSBhZmZlY3RlZCBwcm9wZXJ0eSwgdGhlIHJ1biBzdGF0ZSAocGF1c2VkLCBmaW5pc2hlZCwgZXRj
LiksCisvLyBsb29wIGNvdW50LCBsYXN0IHBhdXNlIHRpbWUsIGFuZCB0aGUgdG90YWwgdGltZSBz
cGVudCBwYXVzZWQuCitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgLy8g
QW5pbWF0aW9ucyB0aGF0IG11c3QgYmUgcnVuIHRvZ2V0aGVyIGFyZSBjYWxsZWQgJ2dyb3VwZWQn
IGFuZCBoYXZlIHRoZSBzYW1lIEdyb3VwSUQKKyAgICAvLyBHcm91cGVkIGFuaW1hdGlvbnMgYXJl
IGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm8gb3RoZXIgYW5pbWF0
aW9ucworICAgIC8vIG1heSBhbmltYXRlIGFueSBvZiB0aGUgZ3JvdXAncyB0YXJnZXQgcHJvcGVy
dGllcyB1bnRpbCBhbGwgYW5pbWF0aW9ucyBpbiB0aGUKKyAgICAvLyBncm91cCBoYXZlIGZpbmlz
aGVkIGFuaW1hdGluZy4gTm90ZTogYW4gYWN0aXZlIGFuaW1hdGlvbidzIGdyb3VwIGlkIGFuZCB0
YXJnZXQKKyAgICAvLyBwcm9wZXJ0eSB1bmlxdWVseSBpZGVudGlmeSB0aGF0IGFuaW1hdGlvbi4K
KyAgICB0eXBlZGVmIGludCBHcm91cElEOworCisgICAgLy8gQW5pbWF0aW9ucyBiZWdpbiBpbiBv
bmUgb2YgdGhlICd3YWl0aW5nJyBzdGF0ZXMuIEFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGhlIG5l
eHQgdGljaworICAgIC8vIHdpbGwgc3RhcnQgdGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlciBh
bmltYXRlcy4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0YXJnZXQKKyAgICAvLyBhdmFpbGliaWxp
dHkgd2lsbCBydW4gYXMgc29vbiBhcyB0aGVpciB0YXJnZXQgcHJvcGVydHkgaXMgZnJlZSAoYW5k
IGFsbCB0aGUgYW5pbWF0aW9ucworICAgIC8vIGFuaW1hdGluZyB3aXRoIGl0IGFyZSBhbHNvIGFi
bGUgdG8gcnVuKS4gQW5pbWF0aW9ucyB3YWl0aW5nIGZvciB0aGVpciBzdGFydCB0aW1lIHRvCisg
ICAgLy8gY29tZSBoYXZlIGJlIHNjaGVkdWxlZCB0byBydW4gYXQgYSBwYXJ0aWN1bGFyIHBvaW50
IGluIHRpbWUuIFdoZW4gdGhpcyB0aW1lIGFycml2ZXMsCisgICAgLy8gdGhlIGNvbnRyb2xsZXIg
d2lsbCBtb3ZlIHRoZSBhbmltYXRpb25zIGludG8gdGhlIFJ1bm5pbmcgc3RhdGUuIFJ1bm5pbmcg
YW5pbWF0aW9ucworICAgIC8vIG1heSB0b2dnbGUgYmV0d2VlbiBSdW5uaW5nIGFuZCBQYXVzZWQs
IGFuZCBtYXkgYmUgc3RvcHBlZCBieSBtb3ZpbmcgaW50byBlaXRoZXIgdGhlCisgICAgLy8gQWJv
cnRlZCBvciBGaW5pc2hlZCBzdGF0ZXMuIEEgRmluaXNoZWQgYW5pbWF0aW9uIHdhcyBhbGxvd2Vk
IHRvIHJ1biB0byBjb21wbGV0aW9uLCBidXQKKyAgICAvLyBhbiBBYm9ydGVkIGFuaW1hdGlvbiB3
YXMgbm90LgorICAgIGVudW0gUnVuU3RhdGUgeworICAgICAgICBXYWl0aW5nRm9yTmV4dFRpY2sg
PSAxLAorICAgICAgICBXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5LAorICAgICAgICBXYWl0
aW5nRm9yU3RhcnRUaW1lLAorICAgICAgICBSdW5uaW5nLAorICAgICAgICBQYXVzZWQsCisgICAg
ICAgIEZpbmlzaGVkLAorICAgICAgICBBYm9ydGVkCisgICAgfTsKKworICAgIGVudW0gVGFyZ2V0
UHJvcGVydHkgeworICAgICAgICBUcmFuc2Zvcm0gPSAxLAorICAgICAgICBPcGFjaXR5CisgICAg
fTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjcmVhdGUoUGFz
c093blB0cjxDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZSwgR3JvdXBJRCBncm91cCwgVGFyZ2V0UHJv
cGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDQWN0aXZlQW5pbWF0aW9uKGN1cnZlLCBncm91cCwgdGFyZ2V0UHJvcGVydHkpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIH5DQ0FjdGl2ZUFuaW1hdGlvbigpIHsgfQorCisgICAgR3JvdXBJRCBn
cm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JvdXA7IH0KKyAgICBUYXJnZXRQcm9wZXJ0eSB0YXJn
ZXRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UHJvcGVydHk7IH0KKworICAgIFJ1
blN0YXRlIHJ1blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9ydW5TdGF0ZTsgfQorICAgIHZvaWQg
c2V0UnVuU3RhdGUoUnVuU3RhdGUsIGRvdWJsZSBub3cpOworCisgICAgLy8gVGhpcyBpcyB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkuIElmIHRoaXMKKyAg
ICAvLyB2YWx1ZSBpcyB6ZXJvIHRoZSBhbmltYXRpb24gd2lsbCBub3QgcGxheS4gSWYgaXQgaXMg
bmVnYXRpdmUsIHRoZW4KKyAgICAvLyB0aGUgYW5pbWF0aW9uIHdpbGwgbG9vcCBpbmRlZmluaXRl
bHkuCisgICAgaW50IGl0ZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdGlvbnM7IH0K
KyAgICB2b2lkIHNldEl0ZXJhdGlvbnMoaW50IG4pIHsgbV9pdGVyYXRpb25zID0gbjsgfQorCisg
ICAgZG91YmxlIHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAg
dm9pZCBzZXRTdGFydFRpbWUoZG91YmxlIHN0YXJ0VGltZSkgeyBtX3N0YXJ0VGltZSA9IHN0YXJ0
VGltZTsgfQorCisgICAgYm9vbCBpc0ZpbmlzaGVkQXQoZG91YmxlIHRpbWUpIGNvbnN0OworICAg
IGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuU3RhdGUgPT0gRmluaXNoZWQg
fHwgbV9ydW5TdGF0ZSA9PSBBYm9ydGVkOyB9CisKKyAgICBDQ0FuaW1hdGlvbkN1cnZlKiBhbmlt
YXRpb25DdXJ2ZSgpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ3VydmUuZ2V0KCk7IH0KKyAgICBjb25z
dCBDQ0FuaW1hdGlvbkN1cnZlKiBhbmltYXRpb25DdXJ2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW9uQ3VydmUuZ2V0KCk7IH0KKworICAgIC8vIFRha2VzIHRoZSBnaXZlbiBhYnNvbHV0ZSB0
aW1lLCBhbmQgdXNpbmcgdGhlIHN0YXJ0IHRpbWUgYW5kIHRoZSBudW1iZXIKKyAgICAvLyBvZiBp
dGVyYXRpb25zLCByZXR1cm5zIHRoZSByZWxhdGl2ZSB0aW1lIGluIHRoZSBjdXJyZW50IGl0ZXJh
dGlvbi4KKyAgICBkb3VibGUgdHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oZG91YmxlIG5vdykg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ0NBY3RpdmVBbmltYXRpb24oUGFzc093blB0cjxDQ0Fu
aW1hdGlvbkN1cnZlPiwgR3JvdXBJRCwgVGFyZ2V0UHJvcGVydHkpOworCisgICAgT3duUHRyPEND
QW5pbWF0aW9uQ3VydmU+IG1fYW5pbWF0aW9uQ3VydmU7CisgICAgR3JvdXBJRCBtX2dyb3VwOwor
ICAgIFRhcmdldFByb3BlcnR5IG1fdGFyZ2V0UHJvcGVydHk7CisgICAgUnVuU3RhdGUgbV9ydW5T
dGF0ZTsKKyAgICBpbnQgbV9pdGVyYXRpb25zOworICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKwor
ICAgIC8vIFRoZXNlIGFyZSB1c2VkIGluIHRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uIHRvIGFj
Y291bnQgZm9yIHRpbWUKKyAgICAvLyBzcGVudCB3aGlsZSBwYXVzZWQuIFRoaXMgaXMgbm90IGlu
Y2x1ZGVkIGluIEFuaW1hdGlvblN0YXRlIHNpbmNlIGl0CisgICAgLy8gdGhlcmUgaXMgYWJzb2x1
dGVseSBubyBuZWVkIGZvciBjbGllbnRzIG9mIHRoaXMgY29udHJvbGxlciB0byBrbm93CisgICAg
Ly8gYWJvdXQgdGhlc2UgdmFsdWVzLgorICAgIGRvdWJsZSBtX3BhdXNlVGltZTsKKyAgICBkb3Vi
bGUgbV90b3RhbFBhdXNlZFRpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBDQ0FjdGl2ZUFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9uQ3VydmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU4Y2RjNmFkNjYyMTRjMGM2YjRmMzE2ZmY3ODc4ZDQ5NzdkMzE1MzAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZl
KiBDQ0FuaW1hdGlvbkN1cnZlOjp0b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKSBjb25zdAoreworICAg
IEFTU0VSVCh0eXBlKCkgPT0gIENDQW5pbWF0aW9uQ3VydmU6OkZsb2F0KTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKj4odGhpcyk7Cit9CisKK2Nv
bnN0IENDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIENDQW5pbWF0aW9uQ3VydmU6OnRvVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUoKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gIENDQW5p
bWF0aW9uQ3VydmU6OlRyYW5zZm9ybSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEND
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqPih0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlOTdlMzhjMGEy
NGU3Nzc4YjhkOTZkYzkwZmVmNmVjOTkzOWJhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0FuaW1hdGlvbkN1cnZlLmgK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0FuaW1hdGlvbkN1cnZl
X2gKKyNkZWZpbmUgQ0NBbmltYXRpb25DdXJ2ZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7CisKKy8vIEFuIGFuaW1hdGlvbiBjdXJ2
ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHZhbHVlIGdpdmVuIGEgdGltZS4KKy8vIFRo
ZXJlIGFyZSBjdXJyZW50bHkgb25seSB0d28gdHlwZXMgb2YgY3VydmUsIGZsb2F0IGFuZCB0cmFu
c2Zvcm0uCitjbGFzcyBDQ0FuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUg
eyBGbG9hdCwgVHJhbnNmb3JtIH07CisKKyAgICB2aXJ0dWFsIH5DQ0FuaW1hdGlvbkN1cnZlKCkg
eyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IENDRmxvYXRBbmltYXRpb25D
dXJ2ZSogdG9GbG9hdEFuaW1hdGlvbkN1cnZlKCkgY29uc3Q7CisgICAgY29uc3QgQ0NUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSogdG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIGNvbnN0OworfTsK
KworY2xhc3MgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkNDRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisg
ICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QgPSAwOworCisgICAgLy8g
UGFydGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0OyB9Cit9OworCitjbGFzcyBDQ1RyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KKworICAgIHZpcnR1YWwgVHJhbnNm
b3JtT3BlcmF0aW9ucyBnZXRWYWx1ZShkb3VibGUgdCkgY29uc3QgPSAwOworCisgICAgLy8gUGFy
dGlhbCBDQ0FuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIFRyYW5zZm9ybTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQ0NBbmltYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJjYTljYmQ5MDU1
ZTFlYzEzY2MwYTk3NDYzOWM1Zjk3MDg4MDk5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbC5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bC5oIgorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIEEgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzLiBVc2VkIHdoZW4gZGV0ZXJp
bWluaW5nIGlmIGFuaW1hdGlvbnMgd2FpdGluZyBmb3IgdGFyZ2V0CisvLyBhdmFpbGliaWxpdHkg
YXJlIGFibGUgdG8gcnVuLgordHlwZWRlZiBIYXNoU2V0PGludD4gVGFyZ2V0UHJvcGVydGllczsK
KworUGFzc093blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bENsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsKGNsaWVudCkpOworfQorCitDQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlckltcGw6OkNDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbChDQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlckltcGxDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sK
K30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmFuaW1hdGUoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lU2VjcykKK3sKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yTmV4
dFRpY2soZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lKGZyYW1lQmVnaW5UaW1lU2Vjcyk7CisgICAgc3RhcnRBbmltYXRpb25zV2FpdGlu
Z0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3MpOworICAgIHJlc29sdmVD
b25mbGljdHMoZnJhbWVCZWdpblRpbWVTZWNzKTsKKyAgICB0aWNrQW5pbWF0aW9ucyhmcmFtZUJl
Z2luVGltZVNlY3MpOworICAgIHB1cmdlRmluaXNoZWRBbmltYXRpb25zKCk7CisgICAgc3RhcnRB
bmltYXRpb25zV2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eShmcmFtZUJlZ2luVGltZVNlY3Mp
OworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6YWRkKFBhc3NPd25Q
dHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0pCit7CisgICAgbV9hY3RpdmVBbmltYXRpb25zLmFw
cGVuZChhbmltKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hbmltYXRp
b25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKHRoaXMpOworfQorCitDQ0FjdGl2ZUFuaW1hdGlv
biogQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpnZXRBY3RpdmVBbmltYXRpb24oQ0NB
Y3RpdmVBbmltYXRpb246Okdyb3VwSUQgZ3JvdXAsIENDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eSBwcm9wZXJ0eSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ncm91cCgpID09IGdyb3VwICYmIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJv
cGVydHkoKSA9PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0uZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitib29sIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6aGFzQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpICE9IENDQWN0aXZl
QW5pbWF0aW9uOjpGaW5pc2hlZCAmJiBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnJ1blN0YXRlKCkg
IT0gQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJBbmltYXRpb25Db250
cm9sbGVySW1wbDo6c3RhcnRBbmltYXRpb25zV2FpdGluZ0Zvck5leHRUaWNrKGRvdWJsZSBub3cp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9
PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrKSB7CisgICAgICAgICAgICBt
X2FjdGl2ZUFuaW1hdGlvbnNbaV0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpSdW5u
aW5nLCBub3cpOworICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRTdGFydFRp
bWUobm93KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OnN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5v
dykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ydW5TdGF0ZSgp
ID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yU3RhcnRUaW1lICYmIG1fYWN0aXZlQW5p
bWF0aW9uc1tpXS0+c3RhcnRUaW1lKCkgPD0gbm93KQorICAgICAgICAgICAgbV9hY3RpdmVBbmlt
YXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywgbm93KTsK
KyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpzdGFydEFu
aW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cpCit7CisgICAg
Ly8gRmlyc3QgY29sbGVjdCBydW5uaW5nIHByb3BlcnRpZXMuCisgICAgVGFyZ2V0UHJvcGVydGll
cyBibG9ja2VkUHJvcGVydGllczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWN0aXZl
QW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25z
W2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpSdW5uaW5nIHx8IG1fYWN0aXZl
QW5pbWF0aW9uc1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQp
CisgICAgICAgICAgICBibG9ja2VkUHJvcGVydGllcy5hZGQobV9hY3RpdmVBbmltYXRpb25zW2ld
LT50YXJnZXRQcm9wZXJ0eSgpKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9hY3RpdmVB
bmltYXRpb25zW2ldLT5ydW5TdGF0ZSgpID09IENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9y
VGFyZ2V0QXZhaWxhYmlsaXR5KSB7CisgICAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBwcm9wZXJ0
aWVzIGZvciBhbmltYXRpb25zIHdpdGggdGhlIHNhbWUgZ3JvdXAgaWQgKHRoZXkgc2hvdWxkIGFs
bCBhbHNvIGJlIGluIHRoZSBsaXN0IG9mIGFuaW1hdGlvbnMpLgorICAgICAgICAgICAgVGFyZ2V0
UHJvcGVydGllcyBlbnF1ZXVlZFByb3BlcnRpZXM7CisgICAgICAgICAgICBlbnF1ZXVlZFByb3Bl
cnRpZXMuYWRkKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+dGFyZ2V0UHJvcGVydHkoKSk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5n
cm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkKKyAgICAgICAgICAgICAg
ICAgICAgZW5xdWV1ZWRQcm9wZXJ0aWVzLmFkZChtX2FjdGl2ZUFuaW1hdGlvbnNbal0tPnRhcmdl
dFByb3BlcnR5KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayB0byBz
ZWUgaWYgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgYWZmZWN0ZWQgYnkg
dGhlIGdyb3VwIGFuZCB0aGUgbGlzdCBvZiBjdXJyZW50bHkKKyAgICAgICAgICAgIC8vIGJsb2Nr
ZWQgcHJvcGVydGllcyBpcyBudWxsLiBJbiBhbnkgY2FzZSwgdGhlIGdyb3VwJ3MgdGFyZ2V0IHBy
b3BlcnRpZXMgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgbGlzdAorICAgICAgICAgICAgLy8gb2Yg
YmxvY2tlZCBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgYm9vbCBudWxsSW50ZXJzZWN0aW9uID0g
dHJ1ZTsKKyAgICAgICAgICAgIGZvciAoVGFyZ2V0UHJvcGVydGllczo6aXRlcmF0b3IgcEl0ZXIg
PSBlbnF1ZXVlZFByb3BlcnRpZXMuYmVnaW4oKTsgcEl0ZXIgIT0gZW5xdWV1ZWRQcm9wZXJ0aWVz
LmVuZCgpOyArK3BJdGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCFibG9ja2VkUHJvcGVydGll
cy5hZGQoKnBJdGVyKS5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIG51bGxJbnRlcnNlY3Rp
b24gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhlIGludGVy
c2VjdGlvbiBpcyBudWxsLCB0aGVuIHdlIGFyZSBmcmVlIHRvIHN0YXJ0IHRoZSBhbmltYXRpb25z
IGluIHRoZSBncm91cC4KKyAgICAgICAgICAgIGlmIChudWxsSW50ZXJzZWN0aW9uKSB7CisgICAg
ICAgICAgICAgICAgbV9hY3RpdmVBbmltYXRpb25zW2ldLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFu
aW1hdGlvbjo6UnVubmluZywgbm93KTsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnNldFN0YXJ0VGltZShub3cpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGog
PSBpICsgMTsgaiA8IG1fYWN0aXZlQW5pbWF0aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRpb25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZl
QW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9hY3Rp
dmVBbmltYXRpb25zW2pdLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywg
bm93KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0
U3RhcnRUaW1lKG5vdyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXJJbXBsOjpyZXNvbHZlQ29uZmxpY3RzKGRvdWJsZSBub3cpCit7CisgICAg
Ly8gRmluZCBhbnkgYW5pbWF0aW9ucyB0aGF0IGFyZSBhbmltYXRpbmcgdGhlIHNhbWUgcHJvcGVy
dHkgYW5kIHJlc29sdmUgdGhlCisgICAgLy8gY29uZmljdC4gV2UgY291bGQgZXZlbnR1YWxseSBi
bGVuZCwgYnV0IGZvciBub3cgd2UnbGwganVzdCBhYm9ydCB0aGUKKyAgICAvLyBwcmV2aW91cyBh
bmltYXRpb24gKHdoZXJlICdwcmV2aW91cycgbWVhbnM6ICgxKSBoYXMgYSBwcmlvciBzdGFydCB0
aW1lIG9yCisgICAgLy8gKDIpIGhhcyBhbiBlcXVhbCBzdGFydCB0aW1lLCBidXQgd2FzIGFkZGVk
IHRvIHRoZSBxdWV1ZSBlYXJsaWVyLCBpLmUuLAorICAgIC8vIGhhcyBhIGxvd2VyIGluZGV4IGlu
IG1fYWN0aXZlQW5pbWF0aW9ucykuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FjdGl2
ZUFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9u
c1tpXS0+cnVuU3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZykgeworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgbV9hY3RpdmVBbmltYXRpb25zLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+cnVu
U3RhdGUoKSA9PSBDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZyAmJiBtX2FjdGl2ZUFuaW1hdGlv
bnNbaV0tPnRhcmdldFByb3BlcnR5KCkgPT0gbV9hY3RpdmVBbmltYXRpb25zW2pdLT50YXJnZXRQ
cm9wZXJ0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1hdGlvbnNb
aV0tPnN0YXJ0VGltZSgpID4gbV9hY3RpdmVBbmltYXRpb25zW2pdLT5zdGFydFRpbWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+c2V0UnVuU3RhdGUo
Q0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG5vdyk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIG5vdyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6cHVyZ2VGaW5pc2hlZEFuaW1hdGlvbnMoKQoreworICAgIC8v
IEVhY2ggaXRlcmF0aW9uLCBtX2FjdGl2ZUFuaW1hdGlvbnMuc2l6ZSgpIGRlY3JlYXNlcyBvciBp
IGluY3JlbWVudHMsCisgICAgLy8gZ3VhcmFudGVlaW5nIHByb2dyZXNzIHRvd2FyZHMgbG9vcCB0
ZXJtaW5hdGlvbi4KKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBtX2FjdGl2ZUFu
aW1hdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgIGJvb2wgYWxsQW5pbXNXaXRoU2FtZUlkQXJlRmlu
aXNoZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5p
c2hlZCgpKSB7CisgICAgICAgICAgICBhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCA9IHRy
dWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBtX2FjdGl2ZUFuaW1h
dGlvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hY3RpdmVBbmltYXRp
b25zW2ldLT5ncm91cCgpID09IG1fYWN0aXZlQW5pbWF0aW9uc1tqXS0+Z3JvdXAoKSAmJiAhbV9h
Y3RpdmVBbmltYXRpb25zW2pdLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
YWxsQW5pbXNXaXRoU2FtZUlkQXJlRmluaXNoZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmIChhbGxBbmltc1dpdGhTYW1lSWRBcmVGaW5pc2hlZCkKKyAgICAgICAgICAgIG1f
YWN0aXZlQW5pbWF0aW9ucy5yZW1vdmUoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGkr
KzsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjp0aWNr
QW5pbWF0aW9ucyhkb3VibGUgbm93KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9h
Y3RpdmVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2FjdGl2ZUFuaW1h
dGlvbnNbaV0tPnJ1blN0YXRlKCkgPT0gQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcpIHsKKyAg
ICAgICAgICAgIGRvdWJsZSB0cmltbWVkID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT50cmltVGlt
ZVRvQ3VycmVudEl0ZXJhdGlvbihub3cpOworICAgICAgICAgICAgc3dpdGNoIChtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPnRhcmdldFByb3BlcnR5KCkpIHsKKworICAgICAgICAgICAgY2FzZSBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtOiB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSogdHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgPSBtX2FjdGl2ZUFu
aW1hdGlvbnNbaV0tPmFuaW1hdGlvbkN1cnZlKCktPnRvVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUo
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMg
PSB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCisgICAg
ICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NBY3Rp
dmVBbmltYXRpb246OkZpbmlzaGVkLCBub3cpOworCisgICAgICAgICAgICAgICAgLy8gRGVjaWRl
IGhlcmUgaWYgYWJzb2x1dGUgb3IgcmVsYXRpdmUuIEFic29sdXRlIGZvciBub3cuCisgICAgICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9BcHBseTsKKyAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLmFwcGx5KEZsb2F0U2l6ZSgpLCB0b0FwcGx5KTsKKyAgICAgICAgICAgICAgICBt
X2NsaWVudC0+c2V0VHJhbnNmb3JtKHRvQXBwbHkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFj
aXR5OiB7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NGbG9hdEFuaW1hdGlvbkN1cnZlKiBmbG9h
dEFuaW1hdGlvbkN1cnZlID0gbV9hY3RpdmVBbmltYXRpb25zW2ldLT5hbmltYXRpb25DdXJ2ZSgp
LT50b0Zsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBv
cGFjaXR5ID0gZmxvYXRBbmltYXRpb25DdXJ2ZS0+Z2V0VmFsdWUodHJpbW1lZCk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG5vdykpCisg
ICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OkZpbmlzaGVkLCBub3cpOworCisgICAgICAgICAgICAgICAgbV9jbGll
bnQtPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIH0gLy8gc3dpdGNoCisgICAgICAgIH0gLy8gaWYgcnVubmlu
ZworICAgIH0gLy8gZm9yIGVhY2ggYW5pbWF0aW9uCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWFkMjIzZGJhODIzYTJhMDU3YjEwMmQ5NmFhOTVhZWFiMmQ1Mjg2NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbC5oCkBAIC0wLDAgKzEsODggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gK
KyNkZWZpbmUgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsX2gKKworI2luY2x1ZGUgImNj
L0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgor
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOwor
Y2xhc3MgSW50U2l6ZTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3MgVHJhbnNm
b3JtT3BlcmF0aW9uczsKKworY2xhc3MgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlcklt
cGxDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgb3BhY2l0eSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Db250cm9sbGVySW1wbERpZEFjdGl2YXRlKENDTGF5
ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCopID0gMDsKK307CisKK2NsYXNzIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NM
YXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjcmVhdGUoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lkIGFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5U
aW1lU2Vjcyk7CisKKyAgICB2b2lkIGFkZChQYXNzT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPik7
CisKKyAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBncm91
cCwgYW5pbWF0aW5nIHRoZSBnaXZlbiBwcm9wZXJ0eSBpZiBzdWNoIGFuCisgICAgLy8gYW5pbWF0
aW9uIGV4aXN0cy4KKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogZ2V0QWN0aXZlQW5pbWF0aW9uKEND
QWN0aXZlQW5pbWF0aW9uOjpHcm91cElELCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVy
dHkpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYW5pbWF0aW9ucyB0
aGF0IGFyZSBuZWl0aGVyIGZpbmlzaGVkIG5vciBhYm9ydGVkLgorICAgIGJvb2wgaGFzQWN0aXZl
QW5pbWF0aW9uKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gVGhlIGFuaW1hdG9yIGlzIG93
bmVkIGJ5IHRoZSBsYXllci4KKyAgICBleHBsaWNpdCBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50Kik7CisKKyAgICB2b2lk
IHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JOZXh0VGljayhkb3VibGUgbm93KTsKKyAgICB2b2lk
IHN0YXJ0QW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWUoZG91YmxlIG5vdyk7CisgICAgdm9p
ZCBzdGFydEFuaW1hdGlvbnNXYWl0aW5nRm9yVGFyZ2V0QXZhaWxhYmlsaXR5KGRvdWJsZSBub3cp
OworICAgIHZvaWQgcmVzb2x2ZUNvbmZsaWN0cyhkb3VibGUgbm93KTsKKyAgICB2b2lkIHB1cmdl
RmluaXNoZWRBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIHRpY2tBbmltYXRpb25zKGRvdWJsZSBu
b3cpOworCisgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBWZWN0b3I8T3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiA+IG1fYWN0aXZlQW5pbWF0
aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmlu
ZGV4IDRjMGMwMjNlMWY3ZDk3ZDE3OWQ1MDQ2MTgyN2M5ODJmNjgxZDVlYmIuLjNjYjQ5Zjg5Mzdh
MTJiYTM4ZWYxODYyMDVhM2FlOTJhZTY1OGQ3NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQpAQCAtNjAsOSArNjAsMTEgQEAKICAgICAgICAgICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxw
ZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAnLAorICAg
ICAgICAgICAgJ3Rlc3RzL0NDQWN0aXZlQW5pbWF0aW9uVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0Rl
bGF5QmFzZWRUaW1lU291cmNlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVS
YXRlQ29udHJvbGxlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllcklt
cGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJRdWFkVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FjdGl2ZUFuaW1hdGlvblRlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNlOTNkOTVkZTg2OGEyZjNhMjVhYjAzMDIwZWQyNWMxZDBlYzQ5MGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQWN0aXZlQW5pbWF0
aW9uVGVzdC5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRl
ICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZha2VGbG9hdEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0Zsb2F0
QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIHZpcnR1YWwgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIG5v
dykgY29uc3QgeyByZXR1cm4gMDsgfQorfTsKKworUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlv
bj4gY3JlYXRlQWN0aXZlQW5pbWF0aW9uKGludCBpdGVyYXRpb25zKQoreworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1cm4oQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0QW5pbWF0aW9uKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICB0b1JldHVybi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKKyAgICByZXR1
cm4gdG9SZXR1cm4ucmVsZWFzZSgpOworfQorCitURVNUKENDQWN0aXZlQW5pbWF0aW9uVGVzdCwg
VHJpbVRpbWVaZXJvSXRlcmF0aW9ucykKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+
IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+
dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oLTEpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+
dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltLT50
cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxKSk7Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRp
b25UZXN0LCBUcmltVGltZU9uZUl0ZXJhdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
YW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oLTEpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
YW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMCkpOworICAgIEVYUEVDVF9FUSgxLCBh
bmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxKSk7CisgICAgRVhQRUNUX0VRKDEsIGFu
aW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDIpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFu
aW1hdGlvblRlc3QsIFRyaW1UaW1lSW5maW5pdGVJdGVyYXRpb25zKQoreworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShjcmVhdGVBY3RpdmVBbmltYXRpb24oLTEpKTsKKyAgICBF
WFBFQ1RfRVEoMCwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMCkpOworICAgIEVY
UEVDVF9FUSgwLjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDAuNSkpOworICAg
IEVYUEVDVF9FUSgwLCBhbmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxKSk7CisgICAg
RVhQRUNUX0VRKDAuNSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMS41KSk7Cit9
CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBUcmltVGltZVN0YXJ0VGltZSkKK3sKKyAg
ICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKDEp
KTsKKyAgICBhbmltLT5zZXRTdGFydFRpbWUoNCk7CisgICAgRVhQRUNUX0VRKDAsIGFuaW0tPnRy
aW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbS0+dHJp
bVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oNCkpOworICAgIEVYUEVDVF9FUSgwLjUsIGFuaW0tPnRy
aW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDQuNSkpOworICAgIEVYUEVDVF9FUSgxLCBhbmltLT50
cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbig1KSk7CisgICAgRVhQRUNUX0VRKDEsIGFuaW0tPnRy
aW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDYpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlv
blRlc3QsIFRyaW1UaW1lUGF1c2VSZXN1bWUpCit7CisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0
aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigxKSk7CisgICAgYW5pbS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDApOworICAgIEVYUEVDVF9FUSgwLCBhbmlt
LT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigwKSk7CisgICAgRVhQRUNUX0VRKDAuNSwgYW5p
bS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMC41KSk7CisgICAgYW5pbS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OlBhdXNlZCwgMC41KTsKKyAgICBFWFBFQ1RfRVEoMC41LCBh
bmltLT50cmltVGltZVRvQ3VycmVudEl0ZXJhdGlvbigxMDI0KSk7CisgICAgYW5pbS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOworICAgIEVYUEVDVF9FUSgw
LjUsIGFuaW0tPnRyaW1UaW1lVG9DdXJyZW50SXRlcmF0aW9uKDEwMjQpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgYW5pbS0+dHJpbVRpbWVUb0N1cnJlbnRJdGVyYXRpb24oMTAyNC41KSk7Cit9CisKK1RF
U1QoQ0NBY3RpdmVBbmltYXRpb25UZXN0LCBJc0ZpbmlzaGVkQXRaZXJvSXRlcmF0aW9ucykKK3sK
KyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9u
KDApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UnVubmluZywg
MCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgtMSkpOworICAgIEVYUEVD
VF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNG
aW5pc2hlZEF0KDEpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElzRmluaXNo
ZWRBdE9uZUl0ZXJhdGlvbikKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW0o
Y3JlYXRlQWN0aXZlQW5pbWF0aW9uKDEpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2
ZUFuaW1hdGlvbjo6UnVubmluZywgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNo
ZWRBdCgtMSkpOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVkQXQoMCkpOworICAg
IEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgxKSk7CisgICAgRVhQRUNUX1RSVUUoYW5p
bS0+aXNGaW5pc2hlZEF0KDIpKTsKK30KKworVEVTVChDQ0FjdGl2ZUFuaW1hdGlvblRlc3QsIElz
RmluaXNoZWRBdEluZmluaXRlSXRlcmF0aW9ucykKK3sKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmlt
YXRpb24+IGFuaW0oY3JlYXRlQWN0aXZlQW5pbWF0aW9uKC0xKSk7CisgICAgYW5pbS0+c2V0UnVu
U3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDApOworICAgIEVYUEVDVF9GQUxTRShh
bmltLT5pc0ZpbmlzaGVkQXQoMCkpOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0ZpbmlzaGVk
QXQoMC41KSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgxKSk7CisgICAg
RVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRBdCgxLjUpKTsKK30KKworVEVTVChDQ0FjdGl2
ZUFuaW1hdGlvblRlc3QsIElzRmluaXNoZWRBdE5vdFJ1bm5pbmcpCit7CisgICAgT3duUHRyPEND
QWN0aXZlQW5pbWF0aW9uPiBhbmltKGNyZWF0ZUFjdGl2ZUFuaW1hdGlvbigwKSk7CisgICAgYW5p
bS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDApOworICAgIEVYUEVD
VF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NB
Y3RpdmVBbmltYXRpb246OlBhdXNlZCwgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmlu
aXNoZWRBdCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246Oldh
aXRpbmdGb3JOZXh0VGljaywgMCk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWRB
dCgwKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdG
b3JUYXJnZXRBdmFpbGFiaWxpdHksIDApOworICAgIEVYUEVDVF9GQUxTRShhbmltLT5pc0Zpbmlz
aGVkQXQoMCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZEF0
KDApKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6RmluaXNoZWQs
IDApOworICAgIEVYUEVDVF9UUlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7CisgICAgYW5pbS0+
c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIDApOworICAgIEVYUEVDVF9U
UlVFKGFuaW0tPmlzRmluaXNoZWRBdCgwKSk7Cit9CisKK1RFU1QoQ0NBY3RpdmVBbmltYXRpb25U
ZXN0LCBJc0ZpbmlzaGVkKQoreworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gYW5pbShj
cmVhdGVBY3RpdmVBbmltYXRpb24oMSkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpSdW5uaW5nLCAwKTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hl
ZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6UGF1c2VkLCAw
KTsKKyAgICBFWFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRS
dW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0Zvck5leHRUaWNrLCAwKTsKKyAgICBF
WFBFQ1RfRkFMU0UoYW5pbS0+aXNGaW5pc2hlZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShD
Q0FjdGl2ZUFuaW1hdGlvbjo6V2FpdGluZ0ZvclRhcmdldEF2YWlsYWJpbGl0eSwgMCk7CisgICAg
RVhQRUNUX0ZBTFNFKGFuaW0tPmlzRmluaXNoZWQoKSk7CisgICAgYW5pbS0+c2V0UnVuU3RhdGUo
Q0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRpbWUsIDApOworICAgIEVYUEVDVF9G
QUxTRShhbmltLT5pc0ZpbmlzaGVkKCkpOworICAgIGFuaW0tPnNldFJ1blN0YXRlKENDQWN0aXZl
QW5pbWF0aW9uOjpGaW5pc2hlZCwgMCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hl
ZCgpKTsKKyAgICBhbmltLT5zZXRSdW5TdGF0ZShDQ0FjdGl2ZUFuaW1hdGlvbjo6QWJvcnRlZCwg
MCk7CisgICAgRVhQRUNUX1RSVUUoYW5pbS0+aXNGaW5pc2hlZCgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2Q1MGQwNmU2MjMxMjE4ZjE0MDIxMmIxZGZlZDZlNzg5NWIwZjUzYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsVGVzdC5jcHAKQEAgLTAsMCArMSw0NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbC5oIgorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
ImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5j
bHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBGYWtlQ29udHJvbGxlckNs
aWVudCA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxDbGllbnQgeworcHVi
bGljOgorICAgIEZha2VDb250cm9sbGVyQ2xpZW50KCkgOiBtX29wYWNpdHkoMCkgeyB9CisgICAg
dmlydHVhbCB+RmFrZUNvbnRyb2xsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIHZp
cnR1YWwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3Jt
OyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsRGlkQWN0aXZhdGUo
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsKiBjb250cm9sbGVyKQorICAgIHsKKyAgICAg
ICAgbV9hY3RpdmVDb250cm9sbGVycy5hcHBlbmQoY29udHJvbGxlcik7CisgICAgfQorCisgICAg
VmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+JiBhY3RpdmVDb250cm9sbGVy
cygpIHsgcmV0dXJuIG1fYWN0aXZlQ29udHJvbGxlcnM7IH0KKworcHJpdmF0ZToKKyAgICBmbG9h
dCBtX29wYWNpdHk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAg
VmVjdG9yPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbCo+IG1fYWN0aXZlQ29udHJvbGxl
cnM7Cit9OworCitjbGFzcyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbiA6IHB1YmxpYyBDQ1RyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBGYWtlVHJhbnNmb3JtVHJhbnNpdGlv
bihkb3VibGUgZHVyYXRpb24pIDogbV9kdXJhdGlvbihkdXJhdGlvbikgeyB9CisgICAgdmlydHVh
bCBkb3VibGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmly
dHVhbCBUcmFuc2Zvcm1PcGVyYXRpb25zIGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgZG91YmxlIG1fZHVyYXRpb247Cit9OworCitjbGFzcyBGYWtlRmxvYXRUcmFuc2l0
aW9uIDogcHVibGljIENDRmxvYXRBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgRmFrZUZs
b2F0VHJhbnNpdGlvbihkb3VibGUgZHVyYXRpb24sIGZsb2F0IGZyb20sIGZsb2F0IHRvKQorICAg
ICAgICA6IG1fZHVyYXRpb24oZHVyYXRpb24pCisgICAgICAgICwgbV9mcm9tKGZyb20pCisgICAg
ICAgICwgbV90byh0bykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBkb3VibGUgZHVyYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgdmlydHVhbCBmbG9hdCBnZXRW
YWx1ZShkb3VibGUgdGltZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRpbWUgLz0gbV9kdXJhdGlv
bjsKKyAgICAgICAgaWYgKHRpbWUgPj0gMSkKKyAgICAgICAgICAgIHRpbWUgPSAxOworICAgICAg
ICByZXR1cm4gKDEgLSB0aW1lKSAqIG1fZnJvbSArIHRpbWUgKiBtX3RvOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBmbG9hdCBtX2Zyb207CisgICAgZmxv
YXQgbV90bzsKK307CisKKy8vIFRlc3RzIHRoYXQgdHJhbnNpdGlvbmluZyBvcGFjaXR5IGZyb20g
MCB0byAxIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGxUZXN0LCBUcml2aWFsVHJhbnNpdGlvbikKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVu
dCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250
cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgm
ZHVtbXkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVB
bmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAx
KSksIDEsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBjb250cm9sbGVyLT5h
ZGQodG9BZGQucmVsZWFzZSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAg
IEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgdHdvIHF1ZXVl
ZCBhbmltYXRpb25zIGFmZmVjdGluZyB0aGUgc2FtZSBwcm9wZXJ0eSBydW4gaW4gc2VxdWVuY2Uu
CitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxRdWV1aW5n
KQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgY29udHJvbGxlci0+
YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5z
aXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworICAgIGNv
bnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgRVhQRUNUX1RSVUUoY29u
dHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5v
cGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMik7CisgICAgRVhQRUNUX0VR
KDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xsZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgaW50ZXJydXB0aW5nIGEgdHJhbnNp
dGlvbiB3aXRoIGFub3RoZXIgdHJhbnNpdGlvbi4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgSW50ZXJydXB0KQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1
bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xs
ZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1t
eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0
UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
ZHVtbXkub3BhY2l0eSgpKTsKKworICAgIE93blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQo
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlv
bigxLCAxLCAwLjVmKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisgICAgdG9B
ZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0aW5nRm9yTmV4dFRpY2ssIDAp
OworICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgwLjUpOyAvLyBzZWNvbmQgYW5pbSBzdGFydHMgTk9XLgorICAgIEVYUEVDVF9U
UlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwg
ZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuNSk7CisgICAgRVhQ
RUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKK30KKworLy8gVGVzdHMgc2NoZWR1bGluZyB0d28g
YW5pbWF0aW9ucyB0byBydW4gdG9nZXRoZXIgd2hlbiBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBmcmVl
LgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0
aGVyV2hlbkFQcm9wZXJ0eUlzQmxvY2tlZCkKK3sKKyAgICBGYWtlQ29udHJvbGxlckNsaWVudCBk
dW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsPiBjb250cm9s
bGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw6OmNyZWF0ZSgmZHVt
bXkpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbigxKSksIDEsIENDQWN0aXZlQW5pbWF0
aW9uOjpUcmFuc2Zvcm0pKTsKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246
OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5zZm9ybVRyYW5zaXRpb24oMSkpLCAyLCBDQ0Fj
dGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZl
QW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwg
MSkpLCAyLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgY29udHJvbGxl
ci0+YW5pbWF0ZSgxKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQg
dHJhbnNpdGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5p
bWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1teS5vcGFjaXR5KCkpOworICAgIC8vIFRo
ZSB0aGUgZmxvYXQgYW5pbWF0aW9uIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYXQgdGltZSAxIGFuZCBz
aG91bGQgYmUgZG9uZS4KKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgdHdvIGFuaW1hdGlv
bnMgdG8gcnVuIHRvZ2V0aGVyIHdpdGggZGlmZmVyZW50IGxlbmd0aHMgYW5kIGFub3RoZXIKKy8v
IGFuaW1hdGlvbiBxdWV1ZWQgdG8gc3RhcnQgd2hlbiB0aGUgc2hvcnRlciBhbmltYXRpb24gZmlu
aXNoZXMgKHNob3VsZCB3YWl0CisvLyBmb3IgYm90aCB0byBmaW5pc2gpLgorVEVTVChDQ0xheWVy
QW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZVRvZ2V0aGVyV2l0aEFuQW5pbVdh
aXRpbmcpCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPEND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1bW15KSk7CisKKyAgICBjb250cm9s
bGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZVRyYW5z
Zm9ybVRyYW5zaXRpb24oMikpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7Cisg
ICAgY29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3
IEZha2VGbG9hdFRyYW5zaXRpb24oMSwgMCwgMSkpLCAxLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3Bh
Y2l0eSkpOworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFk
b3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDEsIDEsIDAuNWYpKSwgMiwgQ0NBY3RpdmVB
bmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8vIEFuaW1zIHdpdGggaWQgMSBzaG91bGQgYm90
aCBzdGFydCBub3cuCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJV
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1
bW15Lm9wYWNpdHkoKSk7CisgICAgLy8gVGhlIG9wYWNpdHkgYW5pbWF0aW9uIHNob3VsZCBoYXZl
IGZpbmlzaGVkIGF0IHRpbWUgMSwgYnV0IHRoZSBncm91cAorICAgIC8vIG9mIGFuaW1hdGlvbnMg
d2l0aCBpZCAxIGRvbid0IGZpbmlzaCB1bnRpbCB0aW1lIDIgYmVjYXVzZSBvZiB0aGUgbGVuZ3Ro
CisgICAgLy8gb2YgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24uCisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgyKTsKKyAgICAvLyBTaG91bGQgbm90IGhhdmUgc3RhcnRlZCB0aGUgZmxvYXQgdHJhbnNp
dGlvbiB5ZXQuCisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgLy8gVGhlIHRo
ZSBzZWNvbmQgb3BhY2l0eSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0IGF0IHRpbWUgMiBhbmQgc2hv
dWxkIGJlCisgICAgLy8gZG9uZSBieSB0aW1lIDMKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMp
OworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxT
RShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVk
dWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUuCitURVNUKENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFNjaGVkdWxlQW5pbWF0aW9uKQoreworICAgIEZh
a2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9u
PiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRU
cmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICB0b0FkZC0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OldhaXRpbmdGb3JTdGFydFRp
bWUsIDApOworICAgIHRvQWRkLT5zZXRTdGFydFRpbWUoMSk7CisgICAgY29udHJvbGxlci0+YWRk
KHRvQWRkLnJlbGVhc2UoKSk7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAg
IEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOwor
ICAgIEVYUEVDVF9FUSgxLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcg
YW4gYW5pbWF0aW9uIHRvIHN0YXJ0IGluIHRoZSBmdXR1cmUgdGhhdCdzIGludGVycnVwdGluZyBh
IHJ1bm5pbmcgYW5pbWF0aW9uLgorVEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxU
ZXN0LCBTY2hlZHVsZWRBbmltYXRpb25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbikKK3sKKyAg
ICBGYWtlQ29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlv
bkNvbnRyb2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29u
dHJvbGxlckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0Fj
dGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIs
IDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIE93blB0cjxD
Q0FjdGl2ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0
cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0
aW9uOjpPcGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9u
OjpXYWl0aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOwor
ICAgIGNvbnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgLy8gRmlyc3QgMnMg
b3BhY2l0eSB0cmFuc2l0aW9uIHNob3VsZCBzdGFydCBpbW1lZGlhdGVseS4KKyAgICBjb250cm9s
bGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFu
aW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250
cm9sbGVyLT5hbmltYXRlKDAuNSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0
aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7Cit9CisKKy8vIFRlc3RzIHNjaGVkdWxpbmcgYW4gYW5pbWF0aW9uIHRvIHN0YXJ0
IGluIHRoZSBmdXR1cmUgdGhhdCBpbnRlcnJ1cHRzIGEgcnVubmluZyBhbmltYXRpb24KKy8vIGFu
ZCB0aGVyZSBpcyB5ZXQgYW5vdGhlciBhbmltYXRpb24gcXVldWVkIHRvIHN0YXJ0IGxhdGVyLgor
VEVTVChDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGxUZXN0LCBTY2hlZHVsZWRBbmltYXRp
b25JbnRlcnJ1cHRzUnVubmluZ0FuaW1hdGlvbldpdGhBbmltSW5RdWV1ZSkKK3sKKyAgICBGYWtl
Q29udHJvbGxlckNsaWVudCBkdW1teTsKKyAgICBPd25QdHI8Q0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsPiBjb250cm9sbGVyKAorICAgICAgICBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ckltcGw6OmNyZWF0ZSgmZHVtbXkpKTsKKworICAgIGNvbnRyb2xsZXItPmFkZChDQ0FjdGl2ZUFu
aW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlRmxvYXRUcmFuc2l0aW9uKDIsIDAsIDEp
KSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIE93blB0cjxDQ0FjdGl2
ZUFuaW1hdGlvbj4gdG9BZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9wdFB0cihuZXcg
RmFrZUZsb2F0VHJhbnNpdGlvbigyLCAwLjVmLCAwKSksIDIsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KSk7CisgICAgdG9BZGQtPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpXYWl0
aW5nRm9yU3RhcnRUaW1lLCAwKTsKKyAgICB0b0FkZC0+c2V0U3RhcnRUaW1lKDEpOworICAgIGNv
bnRyb2xsZXItPmFkZCh0b0FkZC5yZWxlYXNlKCkpOworCisgICAgY29udHJvbGxlci0+YWRkKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMC43NWYpKSwgMywgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKworICAgIC8v
IEZpcnN0IDJzIG9wYWNpdHkgdHJhbnNpdGlvbiBzaG91bGQgc3RhcnQgaW1tZWRpYXRlbHkuCisg
ICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwLjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1bW15Lm9w
YWNpdHkoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9u
KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJv
bGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjVmLCBkdW1teS5v
cGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMyk7CisgICAgRVhQRUNUX1RSVUUo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoNCk7CisgICAgRVhQRUNUX0VR
KDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9sbGVyLT5o
YXNBY3RpdmVBbmltYXRpb24oKSk7Cit9CisKKy8vIFRlc3QgdGhhdCBhIGxvb3BpbmcgYW5pbWF0
aW9uIGxvb3BzIGFuZCBmb3IgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZXJhdGlvbnMuCitURVNU
KENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRlc3QsIFRyaXZpYWxMb29waW5nKQorewor
ICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93blB0cjxDQ0xheWVyQW5pbWF0
aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAgIENDTGF5ZXJBbmltYXRpb25D
b250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiB0b0FkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtl
RmxvYXRUcmFuc2l0aW9uKDEsIDAsIDEpKSwgMSwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkp
KTsKKyAgICB0b0FkZC0+c2V0SXRlcmF0aW9ucygzKTsKKyAgICBjb250cm9sbGVyLT5hZGQodG9B
ZGQucmVsZWFzZSgpKTsKKworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMCk7CisgICAgRVhQRUNU
X1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgw
LCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMS4yNSk7CisgICAg
RVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVD
VF9FUSgwLjI1ZiwgZHVtbXkub3BhY2l0eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEu
NzUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsK
KyAgICBFWFBFQ1RfRVEoMC43NWYsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+
YW5pbWF0ZSgyLjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmlt
YXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNv
bnRyb2xsZXItPmFuaW1hdGUoMi43NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxlci0+aGFz
QWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDMpOworICAgIEVYUEVDVF9GQUxTRShjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDEsIGR1bW15Lm9wYWNp
dHkoKSk7CisKKyAgICAvLyBKdXN0IGJlIGV4dHJhIHN1cmUuCisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSg0KTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVz
dCB0aGF0IGFuIGluZmluaXRlbHkgbG9vcGluZyBhbmltYXRpb24gZG9lcyBpbmRlZWQgZ28gdW50
aWwgYWJvcnRlZC4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsVGVzdCwgSW5m
aW5pdGVMb29waW5nKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAgIE93
blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAgICAg
IENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisgICAg
Y29uc3QgaW50IGlkID0gMTsKKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IHRvQWRkKEND
QWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZha2VGbG9hdFRyYW5zaXRpb24o
MSwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICB0b0FkZC0+
c2V0SXRlcmF0aW9ucygtMSk7CisgICAgY29udHJvbGxlci0+YWRkKHRvQWRkLnJlbGVhc2UoKSk7
CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDApOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xs
ZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgZHVtbXkub3BhY2l0
eSgpKTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEuMjUpOworICAgIEVYUEVDVF9UUlVFKGNv
bnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMC4yNWYsIGR1
bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxLjc1KTsKKyAgICBFWFBF
Q1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VR
KDAuNzVmLCBkdW1teS5vcGFjaXR5KCkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDcz
NzQxODI0LjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRp
b24oKSk7CisgICAgRVhQRUNUX0VRKDAuMjVmLCBkdW1teS5vcGFjaXR5KCkpOworICAgIGNvbnRy
b2xsZXItPmFuaW1hdGUoMTA3Mzc0MTgyNC43NSk7CisgICAgRVhQRUNUX1RSVUUoY29udHJvbGxl
ci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1ZiwgZHVtbXkub3Bh
Y2l0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlv
bihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRB
Y3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3Rh
dGUoQ0NBY3RpdmVBbmltYXRpb246OkFib3J0ZWQsIDAuNzVmKTsKKyAgICBFWFBFQ1RfRkFMU0Uo
Y29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9FUSgwLjc1Ziwg
ZHVtbXkub3BhY2l0eSgpKTsKK30KKworLy8gVGVzdCB0aGF0IHBhdXNpbmcgYW5kIHJlc3VtaW5n
IHdvcmsgYXMgZXhwZWN0ZWQuCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbFRl
c3QsIFBhdXNlUmVzdW1lKQoreworICAgIEZha2VDb250cm9sbGVyQ2xpZW50IGR1bW15OworICAg
IE93blB0cjxDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckltcGw+IGNvbnRyb2xsZXIoCisgICAg
ICAgIENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbDo6Y3JlYXRlKCZkdW1teSkpOworCisg
ICAgY29uc3QgaW50IGlkID0gMTsKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIGlk
LCBDQ0FjdGl2ZUFuaW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0
ZSgwKTsKKyAgICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7
CisgICAgRVhQRUNUX0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5p
bWF0ZSgwLjUpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlv
bigpKTsKKyAgICBFWFBFQ1RfRVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIEVYUEVD
VF9UUlVFKGNvbnRyb2xsZXItPmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRp
b246Ok9wYWNpdHkpKTsKKyAgICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIEND
QWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246
OlBhdXNlZCwgMC41Zik7CisKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEwMjQpOworICAgIEVY
UEVDVF9UUlVFKGNvbnRyb2xsZXItPmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1Rf
RVEoMC41ZiwgZHVtbXkub3BhY2l0eSgpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
PmdldEFjdGl2ZUFuaW1hdGlvbihpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNpdHkpKTsKKyAg
ICBjb250cm9sbGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpP
cGFjaXR5KS0+c2V0UnVuU3RhdGUoQ0NBY3RpdmVBbmltYXRpb246OlJ1bm5pbmcsIDEwMjQpOwor
CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxMDI0LjI1KTsKKyAgICBFWFBFQ1RfVFJVRShjb250
cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1t
eS5vcGFjaXR5KCkpOworICAgIGNvbnRyb2xsZXItPmFuaW1hdGUoMTAyNC41KTsKKyAgICBFWFBF
Q1RfRkFMU0UoY29udHJvbGxlci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOworICAgIEVYUEVDVF9F
USgxLCBkdW1teS5vcGFjaXR5KCkpOworfQorCitURVNUKENDTGF5ZXJBbmltYXRpb25Db250cm9s
bGVySW1wbFRlc3QsIEFib3J0QUdyb3VwZWRBbmltYXRpb24pCit7CisgICAgRmFrZUNvbnRyb2xs
ZXJDbGllbnQgZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1w
bD4gY29udHJvbGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpj
cmVhdGUoJmR1bW15KSk7CisKKyAgICBjb25zdCBpbnQgaWQgPSAxOworICAgIGNvbnRyb2xsZXIt
PmFkZChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGFkb3B0UHRyKG5ldyBGYWtlVHJhbnNmb3Jt
VHJhbnNpdGlvbigxKSksIGlkLCBDQ0FjdGl2ZUFuaW1hdGlvbjo6VHJhbnNmb3JtKSk7CisgICAg
Y29udHJvbGxlci0+YWRkKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoYWRvcHRQdHIobmV3IEZh
a2VGbG9hdFRyYW5zaXRpb24oMiwgMCwgMSkpLCBpZCwgQ0NBY3RpdmVBbmltYXRpb246Ok9wYWNp
dHkpKTsKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShhZG9w
dFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAxLCAwLjc1ZikpLCAyLCBDQ0FjdGl2ZUFu
aW1hdGlvbjo6T3BhY2l0eSkpOworCisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgwKTsKKyAgICBF
WFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNU
X0VRKDAsIGR1bW15Lm9wYWNpdHkoKSk7CisgICAgY29udHJvbGxlci0+YW5pbWF0ZSgxKTsKKyAg
ICBFWFBFQ1RfVFJVRShjb250cm9sbGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQ
RUNUX0VRKDAuNWYsIGR1bW15Lm9wYWNpdHkoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShjb250cm9s
bGVyLT5nZXRBY3RpdmVBbmltYXRpb24oaWQsIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7
CisgICAgY29udHJvbGxlci0+Z2V0QWN0aXZlQW5pbWF0aW9uKGlkLCBDQ0FjdGl2ZUFuaW1hdGlv
bjo6T3BhY2l0eSktPnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpBYm9ydGVkLCAxKTsK
KyAgICBjb250cm9sbGVyLT5hbmltYXRlKDEpOworICAgIEVYUEVDVF9UUlVFKGNvbnRyb2xsZXIt
Pmhhc0FjdGl2ZUFuaW1hdGlvbigpKTsKKyAgICBFWFBFQ1RfRVEoMSwgZHVtbXkub3BhY2l0eSgp
KTsKKyAgICBjb250cm9sbGVyLT5hbmltYXRlKDIpOworICAgIEVYUEVDVF9UUlVFKCFjb250cm9s
bGVyLT5oYXNBY3RpdmVBbmltYXRpb24oKSk7CisgICAgRVhQRUNUX0VRKDAuNzVmLCBkdW1teS5v
cGFjaXR5KCkpOworfQorCisvLyBUZXN0cyB0aGF0IGFkZGluZyBhbiBhbmltYXRpb24gdG8gdGhl
IGNvbnRyb2xsZXIgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrIG9uIHRoZSBjb250cm9s
bGVyIGNsaWVudAorLy8gKGluIHRoaXMgY2FzZSwgYWRkaW5nIHRoZSBjb250cm9sbGVyIHRvIHRo
ZSBsaXN0IG9mIGFjdGl2ZSBjb250cm9sbGVyKS4KK1RFU1QoQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsVGVzdCwgRGlkQWN0aXZhdGUpCit7CisgICAgRmFrZUNvbnRyb2xsZXJDbGllbnQg
ZHVtbXk7CisgICAgT3duUHRyPENDTGF5ZXJBbmltYXRpb25Db250cm9sbGVySW1wbD4gY29udHJv
bGxlcigKKyAgICAgICAgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsOjpjcmVhdGUoJmR1
bW15KSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDApLCBkdW1teS5hY3RpdmVDb250cm9sbGVy
cygpLnNpemUoKSk7CisKKyAgICBjb250cm9sbGVyLT5hZGQoQ0NBY3RpdmVBbmltYXRpb246OmNy
ZWF0ZShhZG9wdFB0cihuZXcgRmFrZUZsb2F0VHJhbnNpdGlvbigxLCAwLCAxKSksIDEsIENDQWN0
aXZlQW5pbWF0aW9uOjpPcGFjaXR5KSk7CisKKyAgICBFWFBFQ1RfRVEoc2l6ZV90KDEpLCBkdW1t
eS5hY3RpdmVDb250cm9sbGVycygpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKGNvbnRyb2xsZXIu
Z2V0KCksIGR1bW15LmFjdGl2ZUNvbnRyb2xsZXJzKClbMF0pOworfQorCit9IC8vIG5hbWVzcGFj
ZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>