<?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>62213</bug_id>
          
          <creation_ts>2011-06-07 07:57:08 -0700</creation_ts>
          <short_desc>Create local CG context for Mac UI elements when Skia is renderer</short_desc>
          <delta_ts>2011-06-09 12:07:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cary Clark">caryclark</reporter>
          <assigned_to name="Cary Clark">caryclark</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>mark</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>416507</commentid>
    <comment_count>0</comment_count>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-07 07:57:08 -0700</bug_when>
    <thetext>Create local CG context for Mac UI elements when Skia is renderer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416526</commentid>
    <comment_count>1</comment_count>
      <attachid>96248</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-07 08:44:23 -0700</bug_when>
    <thetext>Created attachment 96248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416542</commentid>
    <comment_count>2</comment_count>
      <attachid>96248</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-07 09:01:31 -0700</bug_when>
    <thetext>Comment on attachment 96248
Patch

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

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:40
&gt; +    CGContextRef cgContext = this-&gt;cgContext();

Were this free, I would have just used cgContext() everywhere in the function, so the name is misleading here, since cgContext() sounds like a no-work direct-access function.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:61
&gt; +CGContextRef LocalCurrentGraphicsContext::cgContext()

You might want to name this createCGContext to note that it&apos;s creating one.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:64
&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();

We should probably rename this similarly.  Otherwise callers will think that calling cgContext is free()... which it&apos;s not IIRC.  I should have picked on you about that before.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:952
&gt; +#if USE(SKIA)
&gt; +    gfx::SkiaBitLocker bitLocker(imageBuffer-&gt;context()-&gt;platformContext()-&gt;canvas());
&gt; +    CGContextRef cgContext = bitLocker.cgContext();
&gt; +#else
&gt; +    CGContextRef cgContext = imageBuffer-&gt;context()-&gt;platformContext();
&gt; +#endif

This is really ugly.  We need a better way to get these bit-locked contexts out of a platform context.

I think these changes would all be better if we put them in some sort of local unconditional RAII object which was not named bitlocker, but optionally used a bitlocker on Skia and otherwise was just a raw pointer.  These #if USE(SKIA) are super-ugly.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:1066
&gt; +#if USE(SKIA)
&gt; +        context = bitLocker.cgContext();
&gt; +#endif

This is confusing that we grab a new cgContext every time.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:1303
&gt; +#if USE(SKIA)
&gt; +    CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB();
&gt; +#else
&gt;      CGColorSpaceRef cspace = deviceRGBColorSpaceRef();
&gt; +#endif

This was a big perf win when we added deviceRGBColorSpaceRef.  I&apos;m not sure you want to remove it for the skia case.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:1770
&gt; -        wkDrawMediaUIPart(btn-&gt;displayType(), mediaControllerTheme(), paintInfo.context-&gt;platformContext(), r, getMediaUIPartStateFlags(node));
&gt; +        wkDrawMediaUIPart(btn-&gt;displayType(), mediaControllerTheme(), localContext.cgContext(), r, getMediaUIPartStateFlags(node));

You&apos;re changing the use of this LocalCurrentGraphicsContext, giving it two purposes here.  1.  To do what I mention above, about the local to help hide the SKIA ifdef 2. to do what it already does which is set the current graphics context for the scope.

I&apos;m not sure it&apos;s OK to entangle the two like that.  This code clearly wants a helper graphics context holder to abstract the bitlocking.  It&apos;s possible that LocalCurrentGraphicsContext could do that as well, but it&apos;s certainly not its real job, and re-using it as such just makes the code confusing.

So your local helper.... What shall it be named?
BitLocker?  PaintLock?  What sort of name would make sense that CG would take one too?  or would make clear that it&apos;s used to abstract away how to access the underlying CGContext to allow sharing of this code between CG and Skia?

As is this patch is just makign the code ugly and will make others who hack on this file very sad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416543</commentid>
    <comment_count>3</comment_count>
      <attachid>96248</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-07 09:03:19 -0700</bug_when>
    <thetext>Comment on attachment 96248
Patch

To make clear what LocalCurrentGraphicsContext does.  It it a way of setting the [NSGraphicsContext currentContext] which is used by AppKit and other high-level drawing functions above CG.  We have to do that locally before calling up into AppKit, or AppKit gets confused and draws to the wrong place.  We *only* need LocalCurrentGraphicsContext in those cases and should never use it where not absolutely necessary (as iirc it&apos;s expensive/slow).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416701</commentid>
    <comment_count>4</comment_count>
      <attachid>96276</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-07 12:02:06 -0700</bug_when>
    <thetext>Created attachment 96276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416804</commentid>
    <comment_count>5</comment_count>
      <attachid>96276</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-07 14:54:34 -0700</bug_when>
    <thetext>Comment on attachment 96276
Patch

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

Now that I&apos;m writing all this, I realizing how confusing this is.

create methods are normally paired with ref pointers for memory management.  But that&apos;s not how bitlocker works, is it?  It throws away the previous context when a new one is created?

I think I need to stare at bitlocker again.  I think that&apos;s the real problem with the naming and memory managmenet confusion.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h:57
&gt; +    CGContextRef createCGContext() { return m_skiaBitLocker.cgContext(); }

We should add a comment that cgCongtext on SkiaBitLocker does a create.  Otherwise it&apos;s confusing as to why this method is named create if both variants just provide direct access.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:39
&gt; +    CGContextRef cgContext = this-&gt;createCGContext();

this-&gt; isn&apos;t needed anymore

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:63
&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();

Again a &quot;why this is create&quot; comment is needed, or we need to rename SkiaBitLocker to follow The Create Rule:
http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:72
&gt; +        : m_skiaBitLocker(graphicsContext-&gt;canvas())

funny indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417176</commentid>
    <comment_count>6</comment_count>
      <attachid>96276</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-08 04:51:14 -0700</bug_when>
    <thetext>Comment on attachment 96276
Patch

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

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:63
&gt;&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();
&gt; 
&gt; Again a &quot;why this is create&quot; comment is needed, or we need to rename SkiaBitLocker to follow The Create Rule:
&gt; http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html

Perhaps updateCGContext() would be a better choice, with a comment that in the case of !USE(SKIA), the CGContext never changes and &apos;update&apos; is a no-op.

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:72
&gt;&gt; +        : m_skiaBitLocker(graphicsContext-&gt;canvas())
&gt; 
&gt; funny indent.

Fixed in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417200</commentid>
    <comment_count>7</comment_count>
      <attachid>96412</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-08 06:08:11 -0700</bug_when>
    <thetext>Created attachment 96412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417341</commentid>
    <comment_count>8</comment_count>
      <attachid>96412</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-08 10:45:30 -0700</bug_when>
    <thetext>Comment on attachment 96412
Patch

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

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:64
&gt; +    // this synchronizes the CGContext to reflect the current SkCanvas state
&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();

Capital and period.  It more than just updates the state, it creates a new CGContext, doesn&apos;t it?  It of course owns the CGContext.

I&apos;m trying to convey two points here.  1.  that there is a large cost to calling bitlocker::cgContext, and 2. that callers don&apos;t need to own the pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417343</commentid>
    <comment_count>9</comment_count>
      <attachid>96412</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-08 10:48:07 -0700</bug_when>
    <thetext>Comment on attachment 96412
Patch

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

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:64

&gt; 
&gt; Capital and period.  It more than just updates the state, it creates a new CGContext, doesn&apos;t it?  It of course owns the CGContext.
&gt; 
&gt; I&apos;m trying to convey two points here.  1.  that there is a large cost to calling bitlocker::cgContext, and 2. that callers don&apos;t need to own the pointer.

We could split these out into two methods.  one ensureCGContext() which creates a new one.  and cgContext() which just gives you access.

right now with cgContext() doing both, things are very confusing.

We could also make it so that there is only ever one cgContext per bitlocker, and if you need to create a new one, you create a new bitlocker.  BUt the current system is too confusing to use, as demonstrated by this patch and my continued confusion. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417414</commentid>
    <comment_count>10</comment_count>
      <attachid>96412</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-08 12:37:21 -0700</bug_when>
    <thetext>Comment on attachment 96412
Patch

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

I spoke with Cary over the phone and he explained better what we&apos;re doing here.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h:58
&gt; +    // this synchronizes the CGContext to reflect the current SkCanvas state
&gt; +    CGContextRef createCGContext() { return m_skiaBitLocker.cgContext(); }

OK, so I was wrong to tell you to make this createCGContext().  As you previously noted, the &quot;creation&quot; is not the importnat part of this call. 

I would name that back to cgContext() (like your second patch) and just make a note that m_skiaBitLocker.cgContext() may not always return the *same* CGContext object, but it will always represent the same bit, freshly synced with the Skia context.

It&apos;s important to comment on this in some way, as otherwise future hackers here may get confused. :)

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:40
&gt; +    CGContextRef cgContext = createCGContext();
&gt; +    if (cgContext == [[NSGraphicsContext currentContext] graphicsPort]) {

Hmmm... Isn&apos;t this gonna get us in trouble?  If we&apos;re getting multiple different CGContexts to represent the same skia bits, this comparison could fail at times we don&apos;t expect it to?

&gt;&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:64
&gt;&gt;&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();
&gt;&gt; 
&gt;&gt; Capital and period.  It more than just updates the state, it creates a new CGContext, doesn&apos;t it?  It of course owns the CGContext.
&gt;&gt; 
&gt;&gt; I&apos;m trying to convey two points here.  1.  that there is a large cost to calling bitlocker::cgContext, and 2. that callers don&apos;t need to own the pointer.
&gt; 
&gt; 

This comment is good, btw.  That&apos;s the side-effect of calling this method, which is good to document.  BUt the other thing we need to document is that the cgContext returned is not guarenteed to be the same every time.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:72
&gt; +CoreGraphicsContainer::CoreGraphicsContainer(PlatformGraphicsContext* graphicsContext) 

I might have made this take a GraphicsContext instead, just to make the callers have to do one less pointer indirection.

&gt; Source/WebCore/rendering/RenderThemeMac.mm:1053
&gt; +        context = cgContextContainer.createCGContext();
&gt;          CGContextDrawShading(context, mainShading.get());

This is one example of why it&apos;s strange to not use a sync method.

Why not just change all calls to context to be contextContainer.context() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417417</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-08 12:40:25 -0700</bug_when>
    <thetext>I think this is still a little strange, but I think we can move forward with this per our discussion on the phone.

I&apos;m happy to discuss further over irc, email or phone.  I look forward to seeing Skia on the Mac. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418023</commentid>
    <comment_count>12</comment_count>
      <attachid>96590</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-09 08:02:07 -0700</bug_when>
    <thetext>Created attachment 96590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418024</commentid>
    <comment_count>13</comment_count>
      <attachid>96412</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-09 08:06:23 -0700</bug_when>
    <thetext>Comment on attachment 96412
Patch

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

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h:58
&gt;&gt; +    CGContextRef createCGContext() { return m_skiaBitLocker.cgContext(); }
&gt; 
&gt; OK, so I was wrong to tell you to make this createCGContext().  As you previously noted, the &quot;creation&quot; is not the importnat part of this call. 
&gt; 
&gt; I would name that back to cgContext() (like your second patch) and just make a note that m_skiaBitLocker.cgContext() may not always return the *same* CGContext object, but it will always represent the same bit, freshly synced with the Skia context.
&gt; 
&gt; It&apos;s important to comment on this in some way, as otherwise future hackers here may get confused. :)

Done.

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:40
&gt;&gt; +    if (cgContext == [[NSGraphicsContext currentContext] graphicsPort]) {
&gt; 
&gt; Hmmm... Isn&apos;t this gonna get us in trouble?  If we&apos;re getting multiple different CGContexts to represent the same skia bits, this comparison could fail at times we don&apos;t expect it to?

I agree that this is a concern. I think it is correct to save and restore the current state if the context changes. As written, every time the constructor is called, the context has changed. However, in the future, if it is necessary to optimize the conversion code to speed it up, this should be considered very carefully.

I don&apos;t know what else to do to improve this for now. Do you have any ideas?

&gt;&gt;&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:64
&gt;&gt;&gt;&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();
&gt;&gt;&gt; 
&gt;&gt;&gt; Capital and period.  It more than just updates the state, it creates a new CGContext, doesn&apos;t it?  It of course owns the CGContext.
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m trying to convey two points here.  1.  that there is a large cost to calling bitlocker::cgContext, and 2. that callers don&apos;t need to own the pointer.
&gt;&gt; 
&gt;&gt; 
&gt; 
&gt; This comment is good, btw.  That&apos;s the side-effect of calling this method, which is good to document.  BUt the other thing we need to document is that the cgContext returned is not guarenteed to be the same every time.

Done.

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:72
&gt;&gt; +CoreGraphicsContainer::CoreGraphicsContainer(PlatformGraphicsContext* graphicsContext) 
&gt; 
&gt; I might have made this take a GraphicsContext instead, just to make the callers have to do one less pointer indirection.

Done.

&gt;&gt; Source/WebCore/rendering/RenderThemeMac.mm:1053
&gt;&gt;          CGContextDrawShading(context, mainShading.get());
&gt; 
&gt; This is one example of why it&apos;s strange to not use a sync method.
&gt; 
&gt; Why not just change all calls to context to be contextContainer.context() ?

Done (if I understand your suggestion correctly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418146</commentid>
    <comment_count>14</comment_count>
      <attachid>96590</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-09 11:43:43 -0700</bug_when>
    <thetext>Comment on attachment 96590
Patch

Seems OK.  Adam pointed out we could also call the cgContext method refreshCGContext() (either on these local classes or on bitlocker).  That would allow us to have a separate cgContext() method which did not refresh but only returned the last context (or errored if there was none).  refreshContext() could still return the context pointer of course.

Anyway, this looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418154</commentid>
    <comment_count>15</comment_count>
      <attachid>96590</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-09 11:51:57 -0700</bug_when>
    <thetext>Comment on attachment 96590
Patch

Clearing flags on attachment: 96590

Committed r88469: &lt;http://trac.webkit.org/changeset/88469&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418155</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-09 11:52:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418158</commentid>
    <comment_count>17</comment_count>
      <attachid>96590</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-09 11:52:49 -0700</bug_when>
    <thetext>Comment on attachment 96590
Patch

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

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h:42
&gt; +    CGContextRef cgContext();

Should be const.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h:51
&gt; +class ContextContainer {

This name is too generic. I don&apos;t know what a ContextContainer is.

&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:66
&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();

Who owns this context? Does it need to be released?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418170</commentid>
    <comment_count>18</comment_count>
      <attachid>96590</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-06-09 12:07:29 -0700</bug_when>
    <thetext>Comment on attachment 96590
Patch

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

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h:42
&gt;&gt; +    CGContextRef cgContext();
&gt; 
&gt; Should be const.

The local m_skiaBitLocker state is changed by cgContext(). Since it acts as a cache, it could be mutable, but leaving it un-const signals that the cgContext function does work.

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h:51
&gt;&gt; +class ContextContainer {
&gt; 
&gt; This name is too generic. I don&apos;t know what a ContextContainer is.

I had named it CGContextContainer. I may have misunderstood Eric&apos;s feedback to name it ContextContainer.

&gt;&gt; Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm:66
&gt;&gt; +    CGContextRef cgContext = m_skiaBitLocker.cgContext();
&gt; 
&gt; Who owns this context? Does it need to be released?

m_skiaBitLocker manages the CGContextRef and releases it when it goes out of scope.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96248</attachid>
            <date>2011-06-07 08:44:23 -0700</date>
            <delta_ts>2011-06-07 12:02:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62213-20110607114421.patch</filename>
            <type>text/plain</type>
            <size>18627</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MjM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDYtMDcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgbG9jYWwgQ0cgY29udGV4dCBmb3IgTWFjIFVJIGVs
ZW1lbnRzIHdoZW4gU2tpYSBpcyByZW5kZXJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMTMKKworICAgICAgICBXaGVuIGJ1aWxkaW5nIE1hYyBD
aHJvbWUgdXNpbmcgU2tpYSBhcyB0aGUgV2ViS2l0IHJlbmRlcmVyLAorICAgICAgICBhZGQgc3Rh
dGUgdG8gTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHRvIGNvbnZlcnQgdGhlIFNrQ2FudmFz
CisgICAgICAgIGNvbnRleHQgcGFzc2VkIGJ5IFdlYktpdCBpbnRvIHRoZSBDR0NvbnRleHQgbmVl
ZGVkIGJ5IFVJCisgICAgICAgIHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMuICBU
aGUgZGVmaW5lIHR5cG8gaW4gcXVlc3Rpb24gaXMKKyAgICAgICAgbm90IHlldCBlbmFibGVkLCBz
byB0aGlzIGNoYW5nZSBoYXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBpbXBhY3QuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IEFkZCBTa2lhQml0TG9ja2VyIHRvIGNyZWF0ZSBhbmQgcmVsZWFzZSB0aGUgY29udmVydGVkIENH
Q29udGV4dC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQubW06CisgICAgICAgIChXZWJDb3JlOjpMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQ6
OkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIFdoZW4gYnVpbGRpbmcgd2l0
aCBTa2lhLCBjcmVhdGUgdGhlIENHQ29udGV4dCBiZWZvcmUgcGFzc2luZyBpdCBvbi4KKworICAg
ICAgICAoV2ViQ29yZTo6TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0OjpjZ0NvbnRleHQpOgor
ICAgICAgICBHZXQgdGhlIENHQ29udGV4dCBmcm9tIHRoZSBTa2lhQml0TG9ja2VyLCBvciB0aGUg
c2F2ZWQgY29udGV4dCwKKyAgICAgICAgYXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcik6CisgICAgICAgIEdldCB0aGUgQ0dDb250ZXh0IGZy
b20gU2tpYSBjb252ZXJzaW9uIG9yIG5hdGl2ZSwgYXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgSW4g
cGFpbnRQcm9ncmVzc0JhciBhbmQgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cywgdGhlcmUg
aXMKKyAgICAgICAgbm8gTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHRvIGhhbmcgb2ZmLCBz
byBjcmVhdGUgYSAKKyAgICAgICAgU2tpYUJpdExvY2tlciBpbnN0ZWFkLgorCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyk6Cisg
ICAgICAgIERpdHRvLiBBbHNvIGNyZWF0ZSBhIGNvbG9yc3BhY2UgYXMgbmVlZGVkLiAKKworICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAg
ICBVc2UgU2tpYUJpdExvY2tlciBmcm9tIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCwgY3Jl
YXRlCisgICAgICAgIGNvbG9yIHNwYWNlIGFzIG5lZWRlZC4KKworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVBsYXlCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTbGlkZXJU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVJld2lu
ZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVJl
dHVyblRvUmVhbHRpbWVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZCk6CisgICAgICAg
IERpdHRvLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUN1
cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlh
VGltZVJlbWFpbmluZyk6CisgICAgICAgIEdldCB0aGUgU2tpYUJpdExvY2tlciBjb252ZXJzaW9u
IGJ5IGFkZGluZyBhIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRh
aW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgorICAgICAgICBHZXQgQ0dDb250ZXh0IGZyb20gTG9jYWxD
VXJyZW50R3JhcGhpY3NDb250ZXh0LgorCiAyMDExLTA2LTAzICBZdXJ5IFNlbWlraGF0c2t5ICA8
eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xvY2Fs
Q3VycmVudEdyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA4ODIzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTksNiArMTksMTAgQEAKIAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
CisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAic2tpYS9leHQvc2tpYV91dGlsc19tYWMuaCIKKyNl
bmRpZgorCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBOU0dyYXBoaWNzQ29udGV4dDsKICNlbHNl
CkBAIC0zNiwxMCArNDAsMTMgQEAgY2xhc3MgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHsK
IHB1YmxpYzoKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQpOwogICAgIH5Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQoKTsK
LQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQoKTsKIHByaXZhdGU6CiAgICAgR3JhcGhpY3ND
b250ZXh0KiBtX3NhdmVkR3JhcGhpY3NDb250ZXh0OwogICAgIE5TR3JhcGhpY3NDb250ZXh0KiBt
X3NhdmVkTlNHcmFwaGljc0NvbnRleHQ7CisjaWYgVVNFKFNLSUEpCisgICAgZ2Z4OjpTa2lhQml0
TG9ja2VyIG1fc2tpYUJpdExvY2tlcjsKKyNlbmRpZgogfTsKIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0Lm1tCShyZXZpc2lvbiA4ODIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzLDIw
ICsyMywyOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPEFwcEtp
dC9OU0dyYXBoaWNzQ29udGV4dC5oPgogCisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAicGxhdGZv
cm1fY2FudmFzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0OjpMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQp
CisjaWYgVVNFKFNLSUEpCisgICAgOiBtX3NraWFCaXRMb2NrZXIoZ3JhcGhpY3NDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpCisjZW5kaWYKIHsKICAgICBtX3NhdmVkR3JhcGhp
Y3NDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0OwogICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgp
OwotICAgIAotICAgIGlmIChncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpID09IFtb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pIHsKKyAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gdGhpcy0+Y2dDb250ZXh0KCk7CisgICAgaWYgKGNnQ29u
dGV4dCA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRd
KSB7CiAgICAgICAgIG1fc2F2ZWROU0dyYXBoaWNzQ29udGV4dCA9IDA7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCiAgICAgbV9zYXZlZE5TR3JhcGhpY3NDb250ZXh0ID0gW1tOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gcmV0YWluXTsKLSAgICBOU0dyYXBoaWNzQ29udGV4
dCogbmV3Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3Jh
cGhpY3NQb3J0OmdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgZmxpcHBlZDpZRVNd
OworICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuZXdDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0
IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y2dDb250ZXh0IGZsaXBwZWQ6WUVTXTsK
ICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmV3Q29udGV4dF07CiB9
CiAKQEAgLTUwLDQgKzU4LDE0IEBAIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dDo6fkxvY2Fs
Q3VycmUKICAgICB9CiB9CiAKK0NHQ29udGV4dFJlZiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQ6OmNnQ29udGV4dCgpCit7CisjaWYgVVNFKFNLSUEpCisgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IG1fc2tpYUJpdExvY2tlci5jZ0NvbnRleHQoKTsKKyNlbHNlCisgICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IG1fc2F2ZWRHcmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OworI2VuZGlmCisgICAgcmV0dXJuIGNnQ29udGV4dDsKK30KKwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gODgyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTcyMSw3ICs3MjEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5k
aWNhCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250
ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3Q2Fwc0xvY2tJ
bmRpY2F0b3IocGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICB3
a0RyYXdDYXBzTG9ja0luZGljYXRvcihsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIpOwogICAg
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTk0NCw3ICs5NDQsMTMgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgSElUaGVtZURyYXdUcmFjaygmdHJhY2tJbmZvLCAwLCBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwga0hJVGhlbWVPcmllbnRh
dGlvbk5vcm1hbCk7CisjaWYgVVNFKFNLSUEpCisgICAgZ2Z4OjpTa2lhQml0TG9ja2VyIGJpdExv
Y2tlcihpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkp
OworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBiaXRMb2NrZXIuY2dDb250ZXh0KCk7Cisj
ZWxzZQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorICAgIEhJVGhlbWVEcmF3VHJhY2soJnRyYWNr
SW5mbywgMCwgY2dDb250ZXh0LCBrSElUaGVtZU9yaWVudGF0aW9uTm9ybWFsKTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwog
CkBAIC0xMDE1LDE0ICsxMDIxLDIzIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxp
c3RCdXR0b24KICAgICBpZiAoci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorI2lmIFVT
RShTS0lBKQorICAgIGdmeDo6U2tpYUJpdExvY2tlciBiaXRMb2NrZXIocGFpbnRJbmZvLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBiaXRMb2NrZXIuY2dDb250ZXh0KCk7CisjZWxzZQogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCiAKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0
KTsKIAogICAgIFJvdW5kZWRJbnRSZWN0IGJvcmRlciA9IG8tPnN0eWxlKCktPmdldFJvdW5kZWRC
b3JkZXJGb3Iocik7CiAgICAgaW50IHJhZGl1cyA9IGJvcmRlci5yYWRpaSgpLnRvcExlZnQoKS53
aWR0aCgpOwogCisjaWYgVVNFKFNLSUEpCisgICAgQ0dDb2xvclNwYWNlUmVmIGNzcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworI2Vsc2UKICAgICBDR0NvbG9yU3BhY2VSZWYg
Y3NwYWNlID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOworI2VuZGlmCiAKICAgICBGbG9hdFJl
Y3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBm
KTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRv
cEdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKQEAgLTEwNDYsNiArMTA2MSw5IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKKyNpZiBVU0UoU0tJQSkKKyAgICAgICAgY29u
dGV4dCA9IGJpdExvY2tlci5jZ0NvbnRleHQoKTsKKyNlbmRpZgogICAgICAgICBDR0NvbnRleHRE
cmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5nZXQoKSk7CiAgICAgfQogICAgIApAQCAt
MTA1Myw2ICsxMDcxLDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRv
bgogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5m
by5jb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCB0b3BHcmFk
aWVudCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoUm91
bmRlZEludFJlY3QoZW5jbG9zaW5nSW50UmVjdCh0b3BHcmFkaWVudCksIGJvcmRlci5yYWRpaSgp
LnRvcExlZnQoKSwgYm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKSwgSW50U2l6ZSgpLCBJbnRTaXpl
KCkpKTsKKyNpZiBVU0UoU0tJQSkKKyAgICAgICAgY29udGV4dCA9IGJpdExvY2tlci5jZ0NvbnRl
eHQoKTsKKyNlbmRpZgogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0b3BT
aGFkaW5nLmdldCgpKTsKICAgICB9CiAgICAgCkBAIC0xMDYwLDYgKzEwODEsOSBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdHRvbUdyYWRpZW50KTsKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVkSW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGJvdHRvbUdyYWRpZW50KSwgSW50U2l6ZSgpLCBJbnRTaXplKCksIGJvcmRlci5yYWRp
aSgpLmJvdHRvbUxlZnQoKSwgYm9yZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKSkpOworI2lmIFVT
RShTS0lBKQorICAgICAgICBjb250ZXh0ID0gYml0TG9ja2VyLmNnQ29udGV4dCgpOworI2VuZGlm
CiAgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIGJvdHRvbVNoYWRpbmcuZ2V0
KCkpOwogICAgIH0KIApAQCAtMTA2Nyw2ICsxMDkxLDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCByKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0
Q2xpcChib3JkZXIpOworI2lmIFVTRShTS0lBKQorICAgICAgICBjb250ZXh0ID0gYml0TG9ja2Vy
LmNnQ29udGV4dCgpOworI2VuZGlmCiAgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRl
eHQsIGxlZnRTaGFkaW5nLmdldCgpKTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29u
dGV4dCwgcmlnaHRTaGFkaW5nLmdldCgpKTsKICAgICB9CkBAIC0xMjY4LDggKzEyOTUsMTIgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZQogICAgIH0KIAogICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQp
OwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gbG9jYWxDb250ZXh0LmNnQ29u
dGV4dCgpOworI2lmIFVTRShTS0lBKQorICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBDR0Nv
bG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKKyNlbHNlCiAgICAgQ0dDb2xvclNwYWNlUmVmIGNz
cGFjZSA9IGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsKKyNlbmRpZgogCiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3VuZHMpOwpAQCAtMTI4NCw2ICsxMzE1LDkgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZQogCiAgICAgSW50U2l6ZSBy
YWRpdXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKICAgICBwYWludEluZm8uY29udGV4dC0+
YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGJvdW5kcywgcmFkaXVzLCByYWRpdXMs
IHJhZGl1cywgcmFkaXVzKSk7CisjaWYgVVNFKFNLSUEpCisgICAgY29udGV4dCA9IGxvY2FsQ29u
dGV4dC5jZ0NvbnRleHQoKTsKKyNlbmRpZgogICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRl
eHQsIG1haW5TaGFkaW5nLmdldCgpKTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzIw
LDcgKzE3NTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhRnVsbHNjcmVlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1l
ZGlhRnVsbHNjcmVlbkJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9k
ZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhRnVsbHNjcmVlbkJ1dHRvbiwgbWVkaWFD
b250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJ
UGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTczMyw3
ICsxNzY3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0bwogCiAg
ICAgaWYgKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxN
ZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCo+KG5vZGUpKSB7CiAgICAgICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAg
ICAgICB3a0RyYXdNZWRpYVVJUGFydChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVk
aWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRu
LT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dD
b250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTc0OCw3ICsxNzgyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRNZWRpYVBsYXlCdXR0bwogCiAgICAgaWYgKE1lZGlhQ29udHJvbFBsYXlCdXR0b25F
bGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCo+
KG5vZGUpKSB7CiAgICAgICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRl
eHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChidG4tPmRp
c3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAg
ICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xs
ZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3Rh
dGVGbGFncyhub2RlKSk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE3NjAsNyAr
MTc5NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTZWVrQmFja0IKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2Fs
Q29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFT
ZWVrQmFja0J1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwor
ICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2Vla0JhY2tCdXR0b24sIG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIGxvY2FsQ29udGV4dC5jZ0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0
ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3NzEsNyArMTgwNSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTZWVrRm9yd2EKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrRm9y
d2FyZEJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAg
IHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2Vla0ZvcndhcmRCdXR0b24sIG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIGxvY2FsQ29udGV4dC5jZ0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0
ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3OTQsOSArMTgyOCwx
NSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhCiAgICAgaWYgKGlz
bmFuKGR1cmF0aW9uKSkKICAgICAgICAgZHVyYXRpb24gPSAwOwogIAorI2lmIFVTRShTS0lBKQor
ICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNv
bnRleHQpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gbG9jYWxDb250ZXh0LmNnQ29udGV4
dCgpOworI2Vsc2UKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEZsb2F0UmVjdCB1bnpvb21l
ZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludElu
Zm8sIHIpOwotICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2sobWVkaWFDb250cm9sbGVyVGhlbWUo
KSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIAor
ICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2sobWVkaWFDb250cm9sbGVyVGhlbWUoKSwgY29udGV4
dCwgdW56b29tZWRSZWN0LCAKICAgICAgICAgdGltZUxvYWRlZCwgY3VycmVudFRpbWUsIGR1cmF0
aW9uLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTE4MDgsNyArMTg0OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFT
bGlkZXJUaHUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVk
aWFVSVBhcnQoTWVkaWFTbGlkZXJUaHVtYiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJ
bmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxh
Z3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIG1lZGlh
Q29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jZ0NvbnRleHQoKSwgciwgZ2V0TWVkaWFV
SVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCkBAIC0x
ODE5LDcgKzE4NTksNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhUmV3aW5kQnV0
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJ
UGFydChNZWRpYVJld2luZEJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mo
bm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhUmV3aW5kQnV0dG9uLCBtZWRpYUNv
bnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQ
YXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xODMwLDcg
KzE4NzAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhUmV0dXJuVG9SCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQg
bG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChN
ZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZs
YWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVJldHVyblRvUmVhbHRpbWVC
dXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jZ0NvbnRleHQoKSwg
ciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTE4NDUsNyArMTg4NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFU
b2dnbGVDbG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVk
aWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVG
bGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBt
ZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIsIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0x
ODU3LDcgKzE4OTcsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhQ29udHJvbHNC
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0
KE1lZGlhVGltZWxpbmVDb250YWluZXIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdz
KG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVRpbWVsaW5lQ29udGFpbmVyLCBt
ZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIsIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0x
ODY3LDkgKzE5MDcsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUN1cnJlbnRU
aQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgTG9jYWxDdXJy
ZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7
CiAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1
cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVk
aWFDdXJyZW50VGltZURpc3BsYXksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgdW56b29tZWRSZWN0LCBnZXRNZWRpYVVJUGFydFN0
YXRlRmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVE
aXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCks
IHVuem9vbWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTE4NzksOSArMTkyMCwxMCBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lZGlhVGltZVJlbWFpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56
b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKLSAgICB3
a0RyYXdNZWRpYVVJUGFydChNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5LCBtZWRpYUNvbnRyb2xs
ZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVk
UmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJ
UGFydChNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBs
b2NhbENvbnRleHQuY2dDb250ZXh0KCksIHVuem9vbWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0
ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4OTIsNyArMTkzNCw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1bWVT
bGlkZXJDb250YWluZXIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsK
KyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lciwgbWVkaWFD
b250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJ
UGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTkwMyw3
ICsxOTQ1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9j
YWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRp
YVZvbHVtZVNsaWRlciwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwor
ICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyLCBtZWRpYUNvbnRyb2xsZXJU
aGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVG
bGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIApAQCAtMTkxNCw3ICsxOTU2
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVZvbHVt
ZVNsaWRlclRodW1iLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7Cisg
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYiwgbWVkaWFDb250cm9s
bGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0
YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96276</attachid>
            <date>2011-06-07 12:02:06 -0700</date>
            <delta_ts>2011-06-08 06:08:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62213-20110607150204.patch</filename>
            <type>text/plain</type>
            <size>19027</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MjM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDYtMDcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgbG9jYWwgQ0cgY29udGV4dCBmb3IgTWFjIFVJIGVs
ZW1lbnRzIHdoZW4gU2tpYSBpcyByZW5kZXJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMTMKKworICAgICAgICBXaGVuIGJ1aWxkaW5nIE1hYyBD
aHJvbWUgdXNpbmcgU2tpYSBhcyB0aGUgV2ViS2l0IHJlbmRlcmVyLAorICAgICAgICBhZGQgc3Rh
dGUgdG8gTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHRvIGNvbnZlcnQgdGhlIFNrQ2FudmFz
CisgICAgICAgIGNvbnRleHQgcGFzc2VkIGJ5IFdlYktpdCBpbnRvIHRoZSBDR0NvbnRleHQgbmVl
ZGVkIGJ5IFVJCisgICAgICAgIHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMuICBU
aGUgZGVmaW5lIHR5cG8gaW4gcXVlc3Rpb24gaXMKKyAgICAgICAgbm90IHlldCBlbmFibGVkLCBz
byB0aGlzIGNoYW5nZSBoYXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBpbXBhY3QuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IEFkZCBTa2lhQml0TG9ja2VyIHRvIGNyZWF0ZSBhbmQgcmVsZWFzZSB0aGUgY29udmVydGVkIENH
Q29udGV4dC4KKyAgICAgICAgQWRkIENvcmVHcmFwaGljc0NvbnRhaW5lciwgYSBjbGFzcyBmb3Ig
U2tpYSB0byBjcmVhdGUgYW5kIHJlbGVhc2UKKyAgICAgICAgdGhlIGNvbnZlcnRlZCBDR0NvbnRl
eHQuIElmIFNraWEgaXMgbm90IHVzZWQsIHRoZSBjbGFzcyBoYXMgbm8gZWZmZWN0LgorCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dDo6TG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgV2hlbiBidWlsZGluZyB3aXRoIFNraWEsIGNyZWF0ZSB0
aGUgQ0dDb250ZXh0IGJlZm9yZSBwYXNzaW5nIGl0IG9uLgorCisgICAgICAgIChXZWJDb3JlOjpM
b2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQ6OmNnQ29udGV4dCk6CisgICAgICAgIEdldCB0aGUg
Q0dDb250ZXh0IGZyb20gdGhlIFNraWFCaXRMb2NrZXIsIG9yIHRoZSBzYXZlZCBjb250ZXh0LAor
ICAgICAgICBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbToKKyAgICAgICAgR2V0IHRoZSBDR0NvbnRleHQgZnJvbSBTa2lhIGNvbnZlcnNpb24g
b3IgbmF0aXZlLCBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgVXNlIHRoZSBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgaWYgdGhlcmUgaXMgb25lLiBPdGhlcndpc2UsCisgICAgICAgIGFkZCBh
IENvcmVHcmFwaGljc0NvbnRhaW5lciB0byBob3VzZSB0aGUgU2tDYW52YXMgdG8gQ0dDb250ZXh0
IGNvbnZlcnNpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludENh
cHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWlu
dFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0QnV0dG9uR3JhZGllbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhVG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50TWVkaWFDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVRpbWVSZW1haW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRodW1iKToKKwogMjAxMS0wNi0wMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQuaAkocmV2aXNpb24gODgyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDgg
KzE3LDEzIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKKyNp
ZiBVU0UoU0tJQSkKKyNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0aWxzX21hYy5oIgorI2VuZGlm
CisKICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIE5TR3JhcGhpY3NDb250ZXh0OwogI2Vsc2UKQEAg
LTI3LDggKzMyLDYgQEAgY2xhc3MgTlNHcmFwaGljc0NvbnRleHQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIAogLy8gVGhpcyBjbGFzcyBhdXRv
bWF0aWNhbGx5IHNhdmVzIGFuZCByZXN0b3JlcyB0aGUgY3VycmVudCBOU0dyYXBoaWNzQ29udGV4
dCBmb3IKIC8vIGZ1bmN0aW9ucyB3aGljaCBjYWxsIG91dCBpbnRvIEFwcEtpdCBhbmQgcmVseSBv
biB0aGUgY3VycmVudENvbnRleHQgYmVpbmcgc2V0CiBjbGFzcyBMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQgewpAQCAtMzYsMTAgKzM5LDM0IEBAIGNsYXNzIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KTsKICAgICB+TG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0KCk7Ci0KKyAgICBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0KCk7CiBwcml2YXRl
OgogICAgIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZEdyYXBoaWNzQ29udGV4dDsKICAgICBOU0dy
YXBoaWNzQ29udGV4dCogbV9zYXZlZE5TR3JhcGhpY3NDb250ZXh0OworI2lmIFVTRShTS0lBKQor
ICAgIGdmeDo6U2tpYUJpdExvY2tlciBtX3NraWFCaXRMb2NrZXI7CisjZW5kaWYKK307CisKK2Ns
YXNzIENvcmVHcmFwaGljc0NvbnRhaW5lciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29y
ZUdyYXBoaWNzQ29udGFpbmVyKTsKK3B1YmxpYzoKKyNpZiBVU0UoU0tJQSkKKyAgICBDb3JlR3Jh
cGhpY3NDb250YWluZXIoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKKworICAgIENHQ29udGV4
dFJlZiBjcmVhdGVDR0NvbnRleHQoKSB7IHJldHVybiBtX3NraWFCaXRMb2NrZXIuY2dDb250ZXh0
KCk7IH0KKyNlbHNlCisgICAgQ29yZUdyYXBoaWNzQ29udGFpbmVyKFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQpCisgICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3Jh
cGhpY3NDb250ZXh0KSB7IH0KKyAgICAKKyAgICBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0
KCkgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQ7IH0KKyNlbmRpZgorcHJpdmF0ZToKKyNpZiBV
U0UoU0tJQSkKKyAgICBnZng6OlNraWFCaXRMb2NrZXIgbV9za2lhQml0TG9ja2VyOworI2Vsc2UK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7CisjZW5kaWYK
IH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbQkocmV2aXNpb24gODgyMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyMyArMjAsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKIAotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPEFwcEtpdC9OU0dyYXBoaWNzQ29udGV4dC5oPgog
CisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAicGxhdGZvcm1fY2FudmFzLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0OjpMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQpCisjaWYgVVNFKFNLSUEpCisgICAgOiBt
X3NraWFCaXRMb2NrZXIoZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCkpCisjZW5kaWYKIHsKICAgICBtX3NhdmVkR3JhcGhpY3NDb250ZXh0ID0gZ3JhcGhpY3NDb250
ZXh0OwogICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgIAotICAgIGlmIChncmFwaGlj
c0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpID09IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdIGdyYXBoaWNzUG9ydF0pIHsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
dGhpcy0+Y3JlYXRlQ0dDb250ZXh0KCk7CisgICAgaWYgKGNnQ29udGV4dCA9PSBbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKSB7CiAgICAgICAgIG1fc2F2
ZWROU0dyYXBoaWNzQ29udGV4dCA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAg
ICAgbV9zYXZlZE5TR3JhcGhpY3NDb250ZXh0ID0gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gcmV0YWluXTsKLSAgICBOU0dyYXBoaWNzQ29udGV4dCogbmV3Q29udGV4dCA9IFtO
U0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmdyYXBoaWNz
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgZmxpcHBlZDpZRVNdOworICAgIE5TR3JhcGhpY3ND
b250ZXh0KiBuZXdDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdp
dGhHcmFwaGljc1BvcnQ6Y2dDb250ZXh0IGZsaXBwZWQ6WUVTXTsKICAgICBbTlNHcmFwaGljc0Nv
bnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmV3Q29udGV4dF07CiB9CiAKQEAgLTUwLDQgKzU3LDI0
IEBAIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dDo6fkxvY2FsQ3VycmUKICAgICB9CiB9CiAK
K0NHQ29udGV4dFJlZiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUNHQ29udGV4
dCgpCit7CisjaWYgVVNFKFNLSUEpCisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IG1fc2tp
YUJpdExvY2tlci5jZ0NvbnRleHQoKTsKKyNlbHNlCisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IG1fc2F2ZWRHcmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCisg
ICAgcmV0dXJuIGNnQ29udGV4dDsKK30KKworI2lmIFVTRShTS0lBKQorQ29yZUdyYXBoaWNzQ29u
dGFpbmVyOjpDb3JlR3JhcGhpY3NDb250YWluZXIoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCkgCisgICAgICAgIDogbV9za2lhQml0TG9ja2VyKGdyYXBoaWNzQ29udGV4
dC0+Y2FudmFzKCkpCit7Cit9CisjZW5kaWYKKworCisKKwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gODgyMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTcyMSw3ICs3MjEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNh
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3Q2Fwc0xvY2tJbmRp
Y2F0b3IocGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICB3a0Ry
YXdDYXBzTG9ja0luZGljYXRvcihsb2NhbENvbnRleHQuY3JlYXRlQ0dDb250ZXh0KCksIHIpOwog
ICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTk0NCw3ICs5NDQsOSBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKFJlCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBISVRoZW1lRHJhd1RyYWNrKCZ0cmFja0luZm8sIDAs
IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBrSElUaGVtZU9yaWVu
dGF0aW9uTm9ybWFsKTsKKyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0Q29udGFp
bmVyKGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0Nv
bnRleHRSZWYgY2dDb250ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVyLmNyZWF0ZUNHQ29udGV4dCgp
OworICAgIEhJVGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwgY2dDb250ZXh0LCBrSElUaGVt
ZU9yaWVudGF0aW9uTm9ybWFsKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCkBAIC0xMDE1LDcgKzEwMTcsOCBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgaWYgKHIuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIg
Y2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjZ0NvbnRleHRDb250YWluZXIuY3JlYXRlQ0dD
b250ZXh0KCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBh
aW50SW5mby5jb250ZXh0KTsKIApAQCAtMTA0Niw2ICsxMDQ5LDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LCByKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5k
ZWRSZWN0Q2xpcChib3JkZXIpOworICAgICAgICBjb250ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVy
LmNyZWF0ZUNHQ29udGV4dCgpOwogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBtYWluU2hhZGluZy5nZXQoKSk7CiAgICAgfQogICAgIApAQCAtMTA1Myw2ICsxMDU3LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICAg
ICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCB0b3BHcmFkaWVudCk7CiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoUm91bmRlZEludFJlY3QoZW5jbG9z
aW5nSW50UmVjdCh0b3BHcmFkaWVudCksIGJvcmRlci5yYWRpaSgpLnRvcExlZnQoKSwgYm9yZGVy
LnJhZGlpKCkudG9wUmlnaHQoKSwgSW50U2l6ZSgpLCBJbnRTaXplKCkpKTsKKyAgICAgICAgY29u
dGV4dCA9IGNnQ29udGV4dENvbnRhaW5lci5jcmVhdGVDR0NvbnRleHQoKTsKICAgICAgICAgQ0dD
b250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgdG9wU2hhZGluZy5nZXQoKSk7CiAgICAgfQogICAg
IApAQCAtMTA2MCw2ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlz
dEJ1dHRvbgogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBh
aW50SW5mby5jb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBi
b3R0b21HcmFkaWVudCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVj
dENsaXAoUm91bmRlZEludFJlY3QoZW5jbG9zaW5nSW50UmVjdChib3R0b21HcmFkaWVudCksIElu
dFNpemUoKSwgSW50U2l6ZSgpLCBib3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCksIGJvcmRlci5y
YWRpaSgpLmJvdHRvbVJpZ2h0KCkpKTsKKyAgICAgICAgY29udGV4dCA9IGNnQ29udGV4dENvbnRh
aW5lci5jcmVhdGVDR0NvbnRleHQoKTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29u
dGV4dCwgYm90dG9tU2hhZGluZy5nZXQoKSk7CiAgICAgfQogCkBAIC0xMDY3LDYgKzEwNzMsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJvcmRlcik7CisgICAgICAgIGNvbnRleHQgPSBj
Z0NvbnRleHRDb250YWluZXIuY3JlYXRlQ0dDb250ZXh0KCk7CiAgICAgICAgIENHQ29udGV4dERy
YXdTaGFkaW5nKGNvbnRleHQsIGxlZnRTaGFkaW5nLmdldCgpKTsKICAgICAgICAgQ0dDb250ZXh0
RHJhd1NoYWRpbmcoY29udGV4dCwgcmlnaHRTaGFkaW5nLmdldCgpKTsKICAgICB9CkBAIC0xMjY4
LDcgKzEyNzUsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKFJlCiAg
ICAgfQogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWlu
dEluZm8uY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBsb2Nh
bENvbnRleHQuY3JlYXRlQ0dDb250ZXh0KCk7CiAgICAgQ0dDb2xvclNwYWNlUmVmIGNzcGFjZSA9
IGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwpAQCAtMTI4NCw2ICsxMjkxLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZQogCiAgICAgSW50U2l6ZSBy
YWRpdXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKICAgICBwYWludEluZm8uY29udGV4dC0+
YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGJvdW5kcywgcmFkaXVzLCByYWRpdXMs
IHJhZGl1cywgcmFkaXVzKSk7CisgICAgY29udGV4dCA9IGxvY2FsQ29udGV4dC5jcmVhdGVDR0Nv
bnRleHQoKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5n
ZXQoKSk7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcyMCw3ICsxNzI4LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUZ1bGxzY3JlZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUZ1bGxzY3JlZW5CdXR0
b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdN
ZWRpYVVJUGFydChNZWRpYUZ1bGxzY3JlZW5CdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCks
IGxvY2FsQ29udGV4dC5jcmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZs
YWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzMsNyArMTc0MSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFNdXRlQnV0dG8KIAogICAgIGlmIChNZWRp
YUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9s
TXV0ZUJ1dHRvbkVsZW1lbnQqPihub2RlKSkgewogICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICAgICAgd2tEcmF3
TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3Rh
dGVGbGFncyhub2RlKSk7CisgICAgICAgIHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+ZGlzcGxheVR5
cGUoKSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNyZWF0ZUNHQ29udGV4
dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogCiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE3NDgsNyArMTc1Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVkaWFQbGF5QnV0dG8KIAogICAgIGlmIChNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVu
dCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqPihub2Rl
KSkgewogICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKLSAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5
VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgICAg
IHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+ZGlzcGxheVR5cGUoKSwgbWVkaWFDb250cm9sbGVyVGhl
bWUoKSwgbG9jYWxDb250ZXh0LmNyZWF0ZUNHQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0
YXRlRmxhZ3Mobm9kZSkpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNzYwLDcg
KzE3NjgsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2Vla0JhY2tCCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2Nh
bENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlh
U2Vla0JhY2tCdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsK
KyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNlZWtCYWNrQnV0dG9uLCBtZWRpYUNvbnRyb2xs
ZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY3JlYXRlQ0dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQ
YXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzcxLDcg
KzE3NzksNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2Nh
bENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlh
U2Vla0ZvcndhcmRCdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUp
KTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNlZWtGb3J3YXJkQnV0dG9uLCBtZWRpYUNv
bnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY3JlYXRlQ0dDb250ZXh0KCksIHIsIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0x
Nzk0LDkgKzE4MDIsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRy
YQogICAgIGlmIChpc25hbihkdXJhdGlvbikpCiAgICAgICAgIGR1cmF0aW9uID0gMDsKICAKKyAg
ICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjZ0Nv
bnRleHRDb250YWluZXIuY3JlYXRlQ0dDb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IHVu
em9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBh
aW50SW5mbywgcik7Ci0gICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhtZWRpYUNvbnRyb2xsZXJU
aGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVj
dCwgCisgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBj
b250ZXh0LCB1bnpvb21lZFJlY3QsIAogICAgICAgICB0aW1lTG9hZGVkLCBjdXJyZW50VGltZSwg
ZHVyYXRpb24sIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTgwOCw3ICsxODE4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZWRpYVNsaWRlclRodQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0Ry
YXdNZWRpYVVJUGFydChNZWRpYVNsaWRlclRodW1iLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3Rh
dGVGbGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTbGlkZXJUaHVtYiwg
bWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNyZWF0ZUNHQ29udGV4dCgpLCBy
LCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
ICAgICAKQEAgLTE4MTksNyArMTgyOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVk
aWFSZXdpbmRCdXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdr
RHJhd01lZGlhVUlQYXJ0KE1lZGlhUmV3aW5kQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgp
LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0
U3RhdGVGbGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFSZXdpbmRCdXR0
b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jcmVhdGVDR0NvbnRleHQo
KSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTE4MzAsNyArMTg0MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVk
aWFSZXR1cm5Ub1IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdr
RHJhd01lZGlhVUlQYXJ0KE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiwgbWVkaWFDb250cm9s
bGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRN
ZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlh
UmV0dXJuVG9SZWFsdGltZUJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250
ZXh0LmNyZWF0ZUNHQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTg0NSw3ICsxODU1LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVRvZ2dsZUNsbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5j
b250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlh
Q29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
ciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFy
dChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4
dC5jcmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE4NTcsNyArMTg2Nyw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50TWVkaWFDb250cm9sc0IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lbGluZUNvbnRhaW5lciwgbWVk
aWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQ
YXJ0KE1lZGlhVGltZWxpbmVDb250YWluZXIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2Fs
Q29udGV4dC5jcmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5v
ZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4NjcsOSArMTg3NywxMCBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhQ3VycmVudFRpCiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0
Q29udGFpbmVyKHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAg
ICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJl
bnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFD
dXJyZW50VGltZURpc3BsYXksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgdW56b29tZWRSZWN0LCBnZXRNZWRpYVVJUGFydFN0YXRl
RmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVEaXNw
bGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBjZ0NvbnRleHRDb250YWluZXIuY3JlYXRlQ0dD
b250ZXh0KCksIHVuem9vbWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4NzksOSArMTg5MCwxMCBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lZGlhVGltZVJlbWFpCiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0Q29udGFp
bmVyKHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxv
YXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250
ZXh0KG8sIHBhaW50SW5mbywgcik7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVt
YWluaW5nRGlzcGxheSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFn
cyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxh
eSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgY2dDb250ZXh0Q29udGFpbmVyLmNyZWF0ZUNHQ29u
dGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xODkyLDcgKzE5MDQsNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRl
eHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyLCBt
ZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFV
SVBhcnQoTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCks
IGxvY2FsQ29udGV4dC5jcmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZs
YWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE5MDMsNyArMTkxNSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1bWVTbGlk
ZXIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdN
ZWRpYVVJUGFydChNZWRpYVZvbHVtZVNsaWRlciwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9j
YWxDb250ZXh0LmNyZWF0ZUNHQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mo
bm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKQEAgLTE5MTQsNyArMTkyNiw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHdr
RHJhd01lZGlhVUlQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIsIG1lZGlhQ29udHJvbGxlclRo
ZW1lKCksIGxvY2FsQ29udGV4dC5jcmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRT
dGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96412</attachid>
            <date>2011-06-08 06:08:11 -0700</date>
            <delta_ts>2011-06-09 08:06:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62213-20110608090809.patch</filename>
            <type>text/plain</type>
            <size>19183</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MjM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDYtMDcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgbG9jYWwgQ0cgY29udGV4dCBmb3IgTWFjIFVJIGVs
ZW1lbnRzIHdoZW4gU2tpYSBpcyByZW5kZXJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMTMKKworICAgICAgICBXaGVuIGJ1aWxkaW5nIE1hYyBD
aHJvbWUgdXNpbmcgU2tpYSBhcyB0aGUgV2ViS2l0IHJlbmRlcmVyLAorICAgICAgICBhZGQgc3Rh
dGUgdG8gTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHRvIGNvbnZlcnQgdGhlIFNrQ2FudmFz
CisgICAgICAgIGNvbnRleHQgcGFzc2VkIGJ5IFdlYktpdCBpbnRvIHRoZSBDR0NvbnRleHQgbmVl
ZGVkIGJ5IFVJCisgICAgICAgIHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMuICBU
aGUgZGVmaW5lIHR5cG8gaW4gcXVlc3Rpb24gaXMKKyAgICAgICAgbm90IHlldCBlbmFibGVkLCBz
byB0aGlzIGNoYW5nZSBoYXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBpbXBhY3QuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IEFkZCBTa2lhQml0TG9ja2VyIHRvIGNyZWF0ZSBhbmQgcmVsZWFzZSB0aGUgY29udmVydGVkIENH
Q29udGV4dC4KKyAgICAgICAgQWRkIENvcmVHcmFwaGljc0NvbnRhaW5lciwgYSBjbGFzcyBmb3Ig
U2tpYSB0byBjcmVhdGUgYW5kIHJlbGVhc2UKKyAgICAgICAgdGhlIGNvbnZlcnRlZCBDR0NvbnRl
eHQuIElmIFNraWEgaXMgbm90IHVzZWQsIHRoZSBjbGFzcyBoYXMgbm8gZWZmZWN0LgorCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dDo6TG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgV2hlbiBidWlsZGluZyB3aXRoIFNraWEsIGNyZWF0ZSB0
aGUgQ0dDb250ZXh0IGJlZm9yZSBwYXNzaW5nIGl0IG9uLgorCisgICAgICAgIChXZWJDb3JlOjpM
b2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQ6OmNnQ29udGV4dCk6CisgICAgICAgIEdldCB0aGUg
Q0dDb250ZXh0IGZyb20gdGhlIFNraWFCaXRMb2NrZXIsIG9yIHRoZSBzYXZlZCBjb250ZXh0LAor
ICAgICAgICBhcyBhcHByb3ByaWF0ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbToKKyAgICAgICAgR2V0IHRoZSBDR0NvbnRleHQgZnJvbSBTa2lhIGNvbnZlcnNpb24g
b3IgbmF0aXZlLCBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgVXNlIHRoZSBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgaWYgdGhlcmUgaXMgb25lLiBPdGhlcndpc2UsCisgICAgICAgIGFkZCBh
IENvcmVHcmFwaGljc0NvbnRhaW5lciB0byBob3VzZSB0aGUgU2tDYW52YXMgdG8gQ0dDb250ZXh0
IGNvbnZlcnNpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludENh
cHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWlu
dFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0QnV0dG9uR3JhZGllbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhVG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50TWVkaWFDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVRpbWVSZW1haW5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRodW1iKToKKwogMjAxMS0wNi0wMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQuaAkocmV2aXNpb24gODgyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDgg
KzE3LDEzIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKKyNp
ZiBVU0UoU0tJQSkKKyNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0aWxzX21hYy5oIgorI2VuZGlm
CisKICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIE5TR3JhcGhpY3NDb250ZXh0OwogI2Vsc2UKQEAg
LTI3LDggKzMyLDYgQEAgY2xhc3MgTlNHcmFwaGljc0NvbnRleHQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIAogLy8gVGhpcyBjbGFzcyBhdXRv
bWF0aWNhbGx5IHNhdmVzIGFuZCByZXN0b3JlcyB0aGUgY3VycmVudCBOU0dyYXBoaWNzQ29udGV4
dCBmb3IKIC8vIGZ1bmN0aW9ucyB3aGljaCBjYWxsIG91dCBpbnRvIEFwcEtpdCBhbmQgcmVseSBv
biB0aGUgY3VycmVudENvbnRleHQgYmVpbmcgc2V0CiBjbGFzcyBMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQgewpAQCAtMzYsMTAgKzM5LDM3IEBAIGNsYXNzIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KTsKICAgICB+TG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0KCk7Ci0KKyAgICBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0KCk7CiBwcml2YXRl
OgogICAgIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZEdyYXBoaWNzQ29udGV4dDsKICAgICBOU0dy
YXBoaWNzQ29udGV4dCogbV9zYXZlZE5TR3JhcGhpY3NDb250ZXh0OworI2lmIFVTRShTS0lBKQor
ICAgIGdmeDo6U2tpYUJpdExvY2tlciBtX3NraWFCaXRMb2NrZXI7CisjZW5kaWYKK307CisKK2Ns
YXNzIENvcmVHcmFwaGljc0NvbnRhaW5lciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29y
ZUdyYXBoaWNzQ29udGFpbmVyKTsKK3B1YmxpYzoKKyNpZiBVU0UoU0tJQSkKKyAgICBDb3JlR3Jh
cGhpY3NDb250YWluZXIoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKKyAgICAKKyAgICAvLyB0
aGlzIHN5bmNocm9uaXplcyB0aGUgQ0dDb250ZXh0IHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgU2tD
YW52YXMgc3RhdGUKKyAgICBDR0NvbnRleHRSZWYgY3JlYXRlQ0dDb250ZXh0KCkgeyByZXR1cm4g
bV9za2lhQml0TG9ja2VyLmNnQ29udGV4dCgpOyB9CisjZWxzZQorICAgIENvcmVHcmFwaGljc0Nv
bnRhaW5lcihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KQorICAgICAg
ICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKKyAgICB7CisgICAgfQorCisg
ICAgQ0dDb250ZXh0UmVmIGNyZWF0ZUNHQ29udGV4dCgpIHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250
ZXh0OyB9CisjZW5kaWYKK3ByaXZhdGU6CisjaWYgVVNFKFNLSUEpCisgICAgZ2Z4OjpTa2lhQml0
TG9ja2VyIG1fc2tpYUJpdExvY2tlcjsKKyNlbHNlCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIG1fZ3JhcGhpY3NDb250ZXh0OworI2VuZGlmCiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQubW0JKHJldmlzaW9uIDg4MjM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjAsMjMg
KzIwLDMwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
IDxBcHBLaXQvTlNHcmFwaGljc0NvbnRleHQuaD4KIAorI2lmIFVTRShTS0lBKQorI2luY2x1ZGUg
InBsYXRmb3JtX2NhbnZhcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dDo6TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0KQorI2lmIFVTRShTS0lBKQorICAgIDogbV9za2lhQml0TG9ja2VyKGdyYXBoaWNzQ29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKQorI2VuZGlmCiB7CiAgICAgbV9zYXZl
ZEdyYXBoaWNzQ29udGV4dCA9IGdyYXBoaWNzQ29udGV4dDsKICAgICBncmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKLSAgICAKLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKSB7
CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNyZWF0ZUNHQ29udGV4dCgpOworICAgIGlm
IChjZ0NvbnRleHQgPT0gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhp
Y3NQb3J0XSkgewogICAgICAgICBtX3NhdmVkTlNHcmFwaGljc0NvbnRleHQgPSAwOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAogICAgIG1fc2F2ZWROU0dyYXBoaWNzQ29udGV4dCA9IFtb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIHJldGFpbl07Ci0gICAgTlNHcmFwaGlj
c0NvbnRleHQqIG5ld0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
V2l0aEdyYXBoaWNzUG9ydDpncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIGZsaXBw
ZWQ6WUVTXTsKKyAgICBOU0dyYXBoaWNzQ29udGV4dCogbmV3Q29udGV4dCA9IFtOU0dyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmNnQ29udGV4dCBmbGlwcGVk
OllFU107CiAgICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Om5ld0NvbnRl
eHRdOwogfQogCkBAIC01MCw0ICs1NywyNSBAQCBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQ6
On5Mb2NhbEN1cnJlCiAgICAgfQogfQogCitDR0NvbnRleHRSZWYgTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGVDR0NvbnRleHQoKQoreworI2lmIFVTRShTS0lBKQorICAgIC8vIHRo
aXMgc3luY2hyb25pemVzIHRoZSBDR0NvbnRleHQgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBTa0Nh
bnZhcyBzdGF0ZQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBtX3NraWFCaXRMb2NrZXIu
Y2dDb250ZXh0KCk7CisjZWxzZQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBtX3NhdmVk
R3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorICAgIHJldHVybiBj
Z0NvbnRleHQ7Cit9CisKKyNpZiBVU0UoU0tJQSkKK0NvcmVHcmFwaGljc0NvbnRhaW5lcjo6Q29y
ZUdyYXBoaWNzQ29udGFpbmVyKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQpIAorICAgIDogbV9za2lhQml0TG9ja2VyKGdyYXBoaWNzQ29udGV4dC0+Y2FudmFzKCkpCit7
Cit9CisjZW5kaWYKKworCisKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gODgyMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyMSw3ICs3MjEsNyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3Q2Fwc0xvY2tJbmRpY2F0b3IocGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICB3a0RyYXdDYXBzTG9ja0luZGlj
YXRvcihsb2NhbENvbnRleHQuY3JlYXRlQ0dDb250ZXh0KCksIHIpOwogICAgIAogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTk0NCw3ICs5NDQsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFByb2dyZXNzQmFyKFJlCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBISVRoZW1lRHJhd1RyYWNrKCZ0cmFja0luZm8sIDAsIGltYWdlQnVmZmVyLT5j
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBrSElUaGVtZU9yaWVudGF0aW9uTm9ybWFsKTsK
KyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKGltYWdlQnVmZmVy
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVyLmNyZWF0ZUNHQ29udGV4dCgpOworICAgIEhJVGhlbWVE
cmF3VHJhY2soJnRyYWNrSW5mbywgMCwgY2dDb250ZXh0LCBrSElUaGVtZU9yaWVudGF0aW9uTm9y
bWFsKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJ
bmZvLmNvbnRleHQpOwogCkBAIC0xMDE1LDcgKzEwMTcsOCBAQCB2b2lkIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgaWYgKHIuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0Q29udGFp
bmVyKHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBjZ0NvbnRleHRDb250YWluZXIuY3JlYXRlQ0dDb250ZXh0KCk7CiAKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0
KTsKIApAQCAtMTA0Niw2ICsxMDQ5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51
TGlzdEJ1dHRvbgogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LCByKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3Jk
ZXIpOworICAgICAgICBjb250ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVyLmNyZWF0ZUNHQ29udGV4
dCgpOwogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5n
ZXQoKSk7CiAgICAgfQogICAgIApAQCAtMTA1Myw2ICsxMDU3LDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LCB0b3BHcmFkaWVudCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoUm91bmRlZEludFJlY3QoZW5jbG9zaW5nSW50UmVjdCh0b3BH
cmFkaWVudCksIGJvcmRlci5yYWRpaSgpLnRvcExlZnQoKSwgYm9yZGVyLnJhZGlpKCkudG9wUmln
aHQoKSwgSW50U2l6ZSgpLCBJbnRTaXplKCkpKTsKKyAgICAgICAgY29udGV4dCA9IGNnQ29udGV4
dENvbnRhaW5lci5jcmVhdGVDR0NvbnRleHQoKTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRp
bmcoY29udGV4dCwgdG9wU2hhZGluZy5nZXQoKSk7CiAgICAgfQogICAgIApAQCAtMTA2MCw2ICsx
MDY1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0
KTsKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7
CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoUm91bmRlZElu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChib3R0b21HcmFkaWVudCksIEludFNpemUoKSwgSW50U2l6
ZSgpLCBib3JkZXIucmFkaWkoKS5ib3R0b21MZWZ0KCksIGJvcmRlci5yYWRpaSgpLmJvdHRvbVJp
Z2h0KCkpKTsKKyAgICAgICAgY29udGV4dCA9IGNnQ29udGV4dENvbnRhaW5lci5jcmVhdGVDR0Nv
bnRleHQoKTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgYm90dG9tU2hh
ZGluZy5nZXQoKSk7CiAgICAgfQogCkBAIC0xMDY3LDYgKzEwNzMsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQsIHIpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91
bmRlZFJlY3RDbGlwKGJvcmRlcik7CisgICAgICAgIGNvbnRleHQgPSBjZ0NvbnRleHRDb250YWlu
ZXIuY3JlYXRlQ0dDb250ZXh0KCk7CiAgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRl
eHQsIGxlZnRTaGFkaW5nLmdldCgpKTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29u
dGV4dCwgcmlnaHRTaGFkaW5nLmdldCgpKTsKICAgICB9CkBAIC0xMjY4LDcgKzEyNzUsNyBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKFJlCiAgICAgfQogCiAgICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBsb2NhbENvbnRleHQuY3JlYXRl
Q0dDb250ZXh0KCk7CiAgICAgQ0dDb2xvclNwYWNlUmVmIGNzcGFjZSA9IGRldmljZVJHQkNvbG9y
U3BhY2VSZWYoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
cGFpbnRJbmZvLmNvbnRleHQpOwpAQCAtMTI4NCw2ICsxMjkxLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZQogCiAgICAgSW50U2l6ZSByYWRpdXModHJhY2tSYWRp
dXMsIHRyYWNrUmFkaXVzKTsKICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RD
bGlwKFJvdW5kZWRJbnRSZWN0KGJvdW5kcywgcmFkaXVzLCByYWRpdXMsIHJhZGl1cywgcmFkaXVz
KSk7CisgICAgY29udGV4dCA9IGxvY2FsQ29udGV4dC5jcmVhdGVDR0NvbnRleHQoKTsKICAgICBD
R0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5nZXQoKSk7CiAgICAgCiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcyMCw3ICsxNzI4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRNZWRpYUZ1bGxzY3JlZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsK
LSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUZ1bGxzY3JlZW5CdXR0b24sIG1lZGlhQ29udHJv
bGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0
TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRp
YUZ1bGxzY3JlZW5CdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5j
cmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE3MzMsNyArMTc0MSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFNdXRlQnV0dG8KIAogICAgIGlmIChNZWRpYUNvbnRyb2xNdXRlQnV0
dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1l
bnQqPihub2RlKSkgewogICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxD
b250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRu
LT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7
CisgICAgICAgIHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+ZGlzcGxheVR5cGUoKSwgbWVkaWFDb250
cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNyZWF0ZUNHQ29udGV4dCgpLCByLCBnZXRNZWRp
YVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogCiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAg
LTE3NDgsNyArMTc1Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFQbGF5QnV0
dG8KIAogICAgIGlmIChNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGlj
X2Nhc3Q8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqPihub2RlKSkgewogICAgICAgICBM
b2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0
KTsKLSAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNv
bnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIs
IGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgICAgIHdrRHJhd01lZGlhVUlQ
YXJ0KGJ0bi0+ZGlzcGxheVR5cGUoKSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250
ZXh0LmNyZWF0ZUNHQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkp
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNzYwLDcgKzE3NjgsNyBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2Vla0JhY2tCCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJ
bmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2Vla0JhY2tCdXR0b24s
IG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRp
YVVJUGFydChNZWRpYVNlZWtCYWNrQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2Nh
bENvbnRleHQuY3JlYXRlQ0dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhu
b2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzcxLDcgKzE3NzksNyBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJ
bmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdN
ZWRpYVVJUGFydChNZWRpYVNlZWtGb3J3YXJkQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgp
LCBsb2NhbENvbnRleHQuY3JlYXRlQ0dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVG
bGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzk0LDkgKzE4MDIsMTEg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYQogICAgIGlmIChpc25h
bihkdXJhdGlvbikpCiAgICAgICAgIGR1cmF0aW9uID0gMDsKICAKKyAgICBDb3JlR3JhcGhpY3ND
b250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjZ0NvbnRleHRDb250YWluZXIu
Y3JlYXRlQ0dDb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdl
dFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7Ci0g
ICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgCisgICAgd2tEcmF3
TWVkaWFTbGlkZXJUcmFjayhtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBjb250ZXh0LCB1bnpvb21l
ZFJlY3QsIAogICAgICAgICB0aW1lTG9hZGVkLCBjdXJyZW50VGltZSwgZHVyYXRpb24sIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTgw
OCw3ICsxODE4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQg
bG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChN
ZWRpYVNsaWRlclRodW1iLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7
CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTbGlkZXJUaHVtYiwgbWVkaWFDb250cm9sbGVy
VGhlbWUoKSwgbG9jYWxDb250ZXh0LmNyZWF0ZUNHQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFy
dFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKQEAgLTE4MTks
NyArMTgyOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXdpbmRCdXQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0
KE1lZGlhUmV3aW5kQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2Rl
KSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFSZXdpbmRCdXR0b24sIG1lZGlhQ29udHJv
bGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jcmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFV
SVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4MzAs
NyArMTg0MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXR1cm5Ub1IKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0
KE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRl
RmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhUmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNyZWF0ZUNHQ29u
dGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtMTg0NSw3ICsxODU1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYVRvZ2dsZUNsbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3
a0RyYXdNZWRpYVVJUGFydChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxlclRoZW1l
KCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBh
cnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChidG4tPmRpc3BsYXlU
eXBlKCksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jcmVhdGVDR0NvbnRl
eHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTE4NTcsNyArMTg2Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVkaWFDb250cm9sc0IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tE
cmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lbGluZUNvbnRhaW5lciwgbWVkaWFDb250cm9sbGVyVGhl
bWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJ
UGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVGltZWxp
bmVDb250YWluZXIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jcmVhdGVD
R0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKQEAgLTE4NjcsOSArMTg3NywxMCBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lZGlhQ3VycmVudFRpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IHVu
em9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBh
aW50SW5mbywgcik7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFDdXJyZW50VGltZURpc3Bs
YXksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgdW56b29tZWRSZWN0LCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwor
ICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LCBtZWRpYUNvbnRy
b2xsZXJUaGVtZSgpLCBjZ0NvbnRleHRDb250YWluZXIuY3JlYXRlQ0dDb250ZXh0KCksIHVuem9v
bWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTE4NzksOSArMTg5MCwxMCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lZGlhVGltZVJlbWFpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBDb3JlR3JhcGhpY3NDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IHVuem9vbWVk
UmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5m
bywgcik7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheSwg
bWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAg
d2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheSwgbWVkaWFDb250cm9s
bGVyVGhlbWUoKSwgY2dDb250ZXh0Q29udGFpbmVyLmNyZWF0ZUNHQ29udGV4dCgpLCB1bnpvb21l
ZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCkBAIC0xODkyLDcgKzE5MDQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
ZGlhVm9sdW1lU2xpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJh
d01lZGlhVUlQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyLCBtZWRpYUNvbnRyb2xsZXJU
aGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlh
VUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1
bWVTbGlkZXJDb250YWluZXIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5j
cmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE5MDMsNyArMTkxNSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4
dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1bWVTbGlkZXIsIG1lZGlhQ29udHJv
bGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0
TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRp
YVZvbHVtZVNsaWRlciwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNyZWF0
ZUNHQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KICAgICAKQEAgLTE5MTQsNyArMTkyNiw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFWb2x1bWVTbGkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4
dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYiwgbWVkaWFD
b250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBy
LCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0
KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29u
dGV4dC5jcmVhdGVDR0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUp
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96590</attachid>
            <date>2011-06-09 08:02:07 -0700</date>
            <delta_ts>2011-06-09 12:07:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62213-20110609110206.patch</filename>
            <type>text/plain</type>
            <size>18983</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MjM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDYtMDcgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgbG9jYWwgQ0cgY29udGV4dCBmb3IgTWFjIFVJIGVs
ZW1lbnRzIHdoZW4gU2tpYSBpcyByZW5kZXJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyMTMKKworICAgICAgICBXaGVuIGJ1aWxkaW5nIE1hYyBD
aHJvbWUgdXNpbmcgU2tpYSBhcyB0aGUgV2ViS2l0IHJlbmRlcmVyLAorICAgICAgICBhZGQgc3Rh
dGUgdG8gTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHRvIGNvbnZlcnQgdGhlIFNrQ2FudmFz
CisgICAgICAgIGNvbnRleHQgcGFzc2VkIGJ5IFdlYktpdCBpbnRvIHRoZSBDR0NvbnRleHQgbmVl
ZGVkIGJ5IFVJCisgICAgICAgIHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMuICBU
aGUgZGVmaW5lIHR5cG8gaW4gcXVlc3Rpb24gaXMKKyAgICAgICAgbm90IHlldCBlbmFibGVkLCBz
byB0aGlzIGNoYW5nZSBoYXMgbm8gZnVuY3Rpb25hbAorICAgICAgICBpbXBhY3QuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
IEFkZCBTa2lhQml0TG9ja2VyIHRvIGNyZWF0ZSBhbmQgcmVsZWFzZSB0aGUgY29udmVydGVkIENH
Q29udGV4dC4KKyAgICAgICAgQWRkIENvbnRleHRDb250YWluZXIsIGEgY2xhc3MgZm9yIFNraWEg
dG8gY3JlYXRlIGFuZCByZWxlYXNlCisgICAgICAgIHRoZSBjb252ZXJ0ZWQgQ0dDb250ZXh0LiBJ
ZiBTa2lhIGlzIG5vdCB1c2VkLCB0aGUgY2xhc3MgaGFzIG5vIGVmZmVjdC4KKworICAgICAgICAq
IHBsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW06CisgICAgICAgIChX
ZWJDb3JlOjpMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQ6OkxvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIFdoZW4gYnVpbGRpbmcgd2l0aCBTa2lhLCBjcmVhdGUgdGhlIENH
Q29udGV4dCBiZWZvcmUgcGFzc2luZyBpdCBvbi4KKworICAgICAgICAoV2ViQ29yZTo6TG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0OjpjZ0NvbnRleHQpOgorICAgICAgICBHZXQgdGhlIENHQ29u
dGV4dCBmcm9tIHRoZSBTa2lhQml0TG9ja2VyLCBvciB0aGUgc2F2ZWQgY29udGV4dCwKKyAgICAg
ICAgYXMgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW06CisgICAgICAgIEdldCB0aGUgQ0dDb250ZXh0IGZyb20gU2tpYSBjb252ZXJzaW9uIG9yIG5h
dGl2ZSwgYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIFVzZSB0aGUgTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0IGlmIHRoZXJlIGlzIG9uZS4gT3RoZXJ3aXNlLAorICAgICAgICBhZGQgYSBDb250
ZXh0Q29udGFpbmVyIHRvIGhvdXNlIHRoZSBTa0NhbnZhcyB0byBDR0NvbnRleHQgY29udmVyc2lv
bi4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRp
Y2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NC
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0
b25HcmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xp
ZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFG
dWxsc2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lZGlhTXV0ZUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYVBsYXlCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVkaWFTZWVrQmFja0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVJld2luZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0
aW9uc0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRp
YUNvbnRyb2xzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
OjpwYWludE1lZGlhVGltZVJlbWFpbmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgor
CiAyMDExLTA2LTAzICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5o
CShyZXZpc2lvbiA4ODIzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Mb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcsOCArMTcsMTMgQEAK
ICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAorI2lmIFVTRShTS0lB
KQorI2luY2x1ZGUgInNraWEvZXh0L3NraWFfdXRpbHNfbWFjLmgiCisjZW5kaWYKKwogI2lmZGVm
IF9fT0JKQ19fCiBAY2xhc3MgTlNHcmFwaGljc0NvbnRleHQ7CiAjZWxzZQpAQCAtMjcsOCArMzIs
NiBAQCBjbGFzcyBOU0dyYXBoaWNzQ29udGV4dDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgCiAvLyBUaGlzIGNsYXNzIGF1dG9tYXRpY2FsbHkg
c2F2ZXMgYW5kIHJlc3RvcmVzIHRoZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0IGZvcgogLy8g
ZnVuY3Rpb25zIHdoaWNoIGNhbGwgb3V0IGludG8gQXBwS2l0IGFuZCByZWx5IG9uIHRoZSBjdXJy
ZW50Q29udGV4dCBiZWluZyBzZXQKIGNsYXNzIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCB7
CkBAIC0zNiwxMCArMzksMzggQEAgY2xhc3MgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHsK
IHB1YmxpYzoKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQpOwogICAgIH5Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQoKTsK
LQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQoKTsKIHByaXZhdGU6CiAgICAgR3JhcGhpY3ND
b250ZXh0KiBtX3NhdmVkR3JhcGhpY3NDb250ZXh0OwogICAgIE5TR3JhcGhpY3NDb250ZXh0KiBt
X3NhdmVkTlNHcmFwaGljc0NvbnRleHQ7CisjaWYgVVNFKFNLSUEpCisgICAgZ2Z4OjpTa2lhQml0
TG9ja2VyIG1fc2tpYUJpdExvY2tlcjsKKyNlbmRpZgorfTsKKworY2xhc3MgQ29udGV4dENvbnRh
aW5lciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29udGV4dENvbnRhaW5lcik7CitwdWJs
aWM6CisjaWYgVVNFKFNLSUEpCisgICAgQ29udGV4dENvbnRhaW5lcihHcmFwaGljc0NvbnRleHQq
KTsKKyAgICAKKyAgICAvLyBUaGlzIHN5bmNocm9uaXplcyB0aGUgQ0dDb250ZXh0IHRvIHJlZmxl
Y3QgdGhlIGN1cnJlbnQgU2tDYW52YXMgc3RhdGUuCisgICAgLy8gVGhlIGltcGxlbWVudGF0aW9u
IG1heSBub3QgcmV0dXJuIHRoZSBzYW1lIENHQ29udGV4dCBlYWNoIHRpbWUuCisgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQoKSB7IHJldHVybiBtX3NraWFCaXRMb2NrZXIuY2dDb250ZXh0KCk7IH0K
KyNlbHNlCisgICAgQ29udGV4dENvbnRhaW5lcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCkKKyAgICAgICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpKQorICAgIHsKKyAgICB9CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCgp
IHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250ZXh0OyB9CisjZW5kaWYKK3ByaXZhdGU6CisjaWYgVVNF
KFNLSUEpCisgICAgZ2Z4OjpTa2lhQml0TG9ja2VyIG1fc2tpYUJpdExvY2tlcjsKKyNlbHNlCisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OworI2VuZGlmCiB9
OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0JKHJldmlzaW9uIDg4MjM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0xvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjAsMjMgKzIwLDMxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDxBcHBLaXQvTlNHcmFwaGljc0NvbnRleHQuaD4KIAor
I2lmIFVTRShTS0lBKQorI2luY2x1ZGUgInBsYXRmb3JtX2NhbnZhcy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dFNraWEuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dDo6TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0KEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KQorI2lmIFVTRShTS0lBKQorICAgIDogbV9z
a2lhQml0TG9ja2VyKGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
KQorI2VuZGlmCiB7CiAgICAgbV9zYXZlZEdyYXBoaWNzQ29udGV4dCA9IGdyYXBoaWNzQ29udGV4
dDsKICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAKLSAgICBpZiAoZ3JhcGhpY3ND
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XSBncmFwaGljc1BvcnRdKSB7CisKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
dGhpcy0+Y2dDb250ZXh0KCk7CisgICAgaWYgKGNnQ29udGV4dCA9PSBbW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKSB7CiAgICAgICAgIG1fc2F2ZWROU0dy
YXBoaWNzQ29udGV4dCA9IDA7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgbV9z
YXZlZE5TR3JhcGhpY3NDb250ZXh0ID0gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0gcmV0YWluXTsKLSAgICBOU0dyYXBoaWNzQ29udGV4dCogbmV3Q29udGV4dCA9IFtOU0dyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmdyYXBoaWNzQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCkgZmxpcHBlZDpZRVNdOworICAgIE5TR3JhcGhpY3NDb250ZXh0
KiBuZXdDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFw
aGljc1BvcnQ6Y2dDb250ZXh0IGZsaXBwZWQ6WUVTXTsKICAgICBbTlNHcmFwaGljc0NvbnRleHQg
c2V0Q3VycmVudENvbnRleHQ6bmV3Q29udGV4dF07CiB9CiAKQEAgLTUwLDQgKzU4LDIzIEBAIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dDo6fkxvY2FsQ3VycmUKICAgICB9CiB9CiAKK0NHQ29u
dGV4dFJlZiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQ6OmNnQ29udGV4dCgpCit7CisjaWYg
VVNFKFNLSUEpCisgICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgdGhlIENHQ29udGV4dCB0byByZWZs
ZWN0IHRoZSBjdXJyZW50IFNrQ2FudmFzIHN0YXRlLgorICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlv
biBtYXkgbm90IHJldHVybiB0aGUgc2FtZSBDR0NvbnRleHQgZWFjaCB0aW1lLgorICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBtX3NraWFCaXRMb2NrZXIuY2dDb250ZXh0KCk7CisjZWxzZQor
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBtX3NhdmVkR3JhcGhpY3NDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorICAgIHJldHVybiBjZ0NvbnRleHQ7Cit9CisKKyNpZiBV
U0UoU0tJQSkKK0NvbnRleHRDb250YWluZXI6OkNvbnRleHRDb250YWluZXIoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQpIAorICAgIDogbV9za2lhQml0TG9ja2VyKGdyYXBoaWNzQ29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKQoreworfQorI2VuZGlmCisKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9u
IDg4MjM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC03MjEsNyArNzIxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRDYXBzTG9ja0luZGljYQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdr
RHJhd0NhcHNMb2NrSW5kaWNhdG9yKHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgcik7CisgICAgd2tEcmF3Q2Fwc0xvY2tJbmRpY2F0b3IobG9jYWxDb250ZXh0LmNnQ29udGV4
dCgpLCByKTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC05NDQsNyArOTQ0LDkgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogICAgIGlmICghaW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSElUaGVtZURyYXdUcmFjaygmdHJh
Y2tJbmZvLCAwLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwga0hJ
VGhlbWVPcmllbnRhdGlvbk5vcm1hbCk7CisgICAgQ29udGV4dENvbnRhaW5lciBjZ0NvbnRleHRD
b250YWluZXIoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IGNnQ29udGV4dENvbnRhaW5lci5jb250ZXh0KCk7CisgICAgSElUaGVtZURyYXdUcmFj
aygmdHJhY2tJbmZvLCAwLCBjZ0NvbnRleHQsIGtISVRoZW1lT3JpZW50YXRpb25Ob3JtYWwpOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29u
dGV4dCk7CiAKQEAgLTEwMTUsNyArMTAxNyw4IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b24KICAgICBpZiAoci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIENvbnRleHRDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5m
by5jb250ZXh0KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGNnQ29udGV4dENvbnRhaW5l
ci5jb250ZXh0KCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKIApAQCAtMTA0Niw2ICsxMDQ5LDcgQEAgdm9pZCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJv
dW5kZWRSZWN0Q2xpcChib3JkZXIpOworICAgICAgICBjb250ZXh0ID0gY2dDb250ZXh0Q29udGFp
bmVyLmNvbnRleHQoKTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbWFp
blNoYWRpbmcuZ2V0KCkpOwogICAgIH0KICAgICAKQEAgLTEwNTMsNiArMTA1Nyw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgdG9wR3JhZGllbnQpOwogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QodG9wR3JhZGllbnQpLCBib3JkZXIucmFkaWkoKS50b3BMZWZ0KCksIGJvcmRlci5yYWRp
aSgpLnRvcFJpZ2h0KCksIEludFNpemUoKSwgSW50U2l6ZSgpKSk7CisgICAgICAgIGNvbnRleHQg
PSBjZ0NvbnRleHRDb250YWluZXIuY29udGV4dCgpOwogICAgICAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nLmdldCgpKTsKICAgICB9CiAgICAgCkBAIC0xMDYwLDYg
KzEwNjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRl
eHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdHRvbUdyYWRpZW50
KTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVk
SW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGJvdHRvbUdyYWRpZW50KSwgSW50U2l6ZSgpLCBJbnRT
aXplKCksIGJvcmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKSwgYm9yZGVyLnJhZGlpKCkuYm90dG9t
UmlnaHQoKSkpOworICAgICAgICBjb250ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVyLmNvbnRleHQo
KTsKICAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgYm90dG9tU2hhZGluZy5n
ZXQoKSk7CiAgICAgfQogCkBAIC0xMDY3LDYgKzEwNzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGNvbnRleHQsIHIpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJl
Y3RDbGlwKGJvcmRlcik7CisgICAgICAgIGNvbnRleHQgPSBjZ0NvbnRleHRDb250YWluZXIuY29u
dGV4dCgpOwogICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBsZWZ0U2hhZGlu
Zy5nZXQoKSk7CiAgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHJpZ2h0U2hh
ZGluZy5nZXQoKSk7CiAgICAgfQpAQCAtMTI2OCw3ICsxMjc1LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZQogICAgIH0KIAogICAgIExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gbG9jYWxDb250ZXh0LmNnQ29udGV4dCgpOwogICAgIENH
Q29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CiAKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsK
QEAgLTEyODQsNiArMTI5MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJh
Y2soUmUKIAogICAgIEludFNpemUgcmFkaXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1cyk7CiAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVkSW50UmVjdChi
b3VuZHMsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMsIHJhZGl1cykpOworICAgIGNvbnRleHQgPSBs
b2NhbENvbnRleHQuY2dDb250ZXh0KCk7CiAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4
dCwgbWFpblNoYWRpbmcuZ2V0KCkpOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MjAs
NyArMTcyOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFGdWxsc2NyZWUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVk
aWFGdWxsc2NyZWVuQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2Rl
KSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFGdWxsc2NyZWVuQnV0dG9uLCBtZWRpYUNv
bnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQ
YXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNzMzLDcg
KzE3NDEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvCiAKICAg
ICBpZiAoTWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1l
ZGlhQ29udHJvbE11dGVCdXR0b25FbGVtZW50Kj4obm9kZSkpIHsKICAgICAgICAgTG9jYWxDdXJy
ZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAg
ICAgIHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+ZGlzcGxheVR5cGUoKSwgbWVkaWFDb250cm9sbGVy
VGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRp
YVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChidG4t
PmRpc3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jZ0Nv
bnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKIAogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xNzQ4LDcgKzE3NTYsNyBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lZGlhUGxheUJ1dHRvCiAKICAgICBpZiAoTWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Kj4o
bm9kZSkpIHsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgICAgIHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+ZGlz
cGxheVR5cGUoKSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAg
ICAgICB3a0RyYXdNZWRpYVVJUGFydChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIGxvY2FsQ29udGV4dC5jZ0NvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0
ZUZsYWdzKG5vZGUpKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTc2MCw3ICsx
NzY4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNlZWtCYWNrQgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxD
b250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNl
ZWtCYWNrQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7Cisg
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrQmFja0J1dHRvbiwgbWVkaWFDb250cm9sbGVy
VGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRl
RmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTc3MSw3ICsxNzc5LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNlZWtGb3J3YQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNlZWtGb3J3
YXJkQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAg
d2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbiwgbWVkaWFDb250cm9sbGVy
VGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRl
RmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTc5NCw5ICsxODAyLDEx
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTbGlkZXJUcmEKICAgICBpZiAoaXNu
YW4oZHVyYXRpb24pKQogICAgICAgICBkdXJhdGlvbiA9IDA7CiAgCisgICAgQ29udGV4dENvbnRh
aW5lciBjZ0NvbnRleHRDb250YWluZXIocGFpbnRJbmZvLmNvbnRleHQpOworICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVyLmNvbnRleHQoKTsKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKICAgICBG
bG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENv
bnRleHQobywgcGFpbnRJbmZvLCByKTsKLSAgICB3a0RyYXdNZWRpYVNsaWRlclRyYWNrKG1lZGlh
Q29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
dW56b29tZWRSZWN0LCAKKyAgICB3a0RyYXdNZWRpYVNsaWRlclRyYWNrKG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIGNvbnRleHQsIHVuem9vbWVkUmVjdCwgCiAgICAgICAgIHRpbWVMb2FkZWQsIGN1
cnJlbnRUaW1lLCBkdXJhdGlvbiwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xODA4LDcgKzE4MTgsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lZGlhU2xpZGVyVGh1CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQp
OwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVk
aWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNs
aWRlclRodW1iLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0
KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogICAgIApAQCAtMTgxOSw3ICsxODI5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYVJld2luZEJ1dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0g
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFSZXdpbmRCdXR0b24sIG1lZGlhQ29udHJvbGxlclRo
ZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFV
SVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVJld2lu
ZEJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29udGV4dCgp
LCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApAQCAtMTgzMCw3ICsxODQwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRp
YVJldHVyblRvUgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tE
cmF3TWVkaWFVSVBhcnQoTWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLCBtZWRpYUNvbnRyb2xs
ZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRl
eHQuY2dDb250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCkBAIC0xODQ1LDcgKzE4NTUsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lZGlhVG9nZ2xlQ2xvCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQp
OwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+ZGlzcGxheVR5cGUoKSwgbWVkaWFDb250cm9s
bGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRN
ZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+
ZGlzcGxheVR5cGUoKSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29u
dGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogCiAgICAgcmV0dXJu
IGZhbHNlOwogfQpAQCAtMTg1Nyw3ICsxODY3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYUNvbnRyb2xzQgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3
a0RyYXdNZWRpYVVJUGFydChNZWRpYVRpbWVsaW5lQ29udGFpbmVyLCBtZWRpYUNvbnRyb2xsZXJU
aGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlh
VUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1l
bGluZUNvbnRhaW5lciwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgbG9jYWxDb250ZXh0LmNnQ29u
dGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtMTg2Nyw5ICsxODc3LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVkaWFDdXJyZW50VGkKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIENvbnRleHRDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5jb250
ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5m
by5jb250ZXh0KTsKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0
QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKLSAgICB3a0RyYXdNZWRp
YVVJUGFydChNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwg
cGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFD
dXJyZW50VGltZURpc3BsYXksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGNnQ29udGV4dENvbnRh
aW5lci5jb250ZXh0KCksIHVuem9vbWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5v
ZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4NzksOSArMTg5MCwxMCBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhVGltZVJlbWFpCiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBDb250ZXh0Q29udGFpbmVyIGNnQ29udGV4dENvbnRh
aW5lcihwYWludEluZm8uY29udGV4dCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVj
dCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywg
cik7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheSwgbWVk
aWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgd2tE
cmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheSwgbWVkaWFDb250cm9sbGVy
VGhlbWUoKSwgY2dDb250ZXh0Q29udGFpbmVyLmNvbnRleHQoKSwgdW56b29tZWRSZWN0LCBnZXRN
ZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAt
MTg5Miw3ICsxOTA0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNs
aQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFy
dChNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lciwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRl
RmxhZ3Mobm9kZSkpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyQ29u
dGFpbmVyLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCks
IHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC0xOTAzLDcgKzE5MTUsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlh
Vm9sdW1lU2xpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01l
ZGlhVUlQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVG
bGFncyhub2RlKSk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFWb2x1bWVTbGlkZXIsIG1l
ZGlhQ29udHJvbGxlclRoZW1lKCksIGxvY2FsQ29udGV4dC5jZ0NvbnRleHQoKSwgciwgZ2V0TWVk
aWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgCkBA
IC0xOTE0LDcgKzE5MjYsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhVm9sdW1l
U2xpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQ
YXJ0KE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZs
YWdzKG5vZGUpKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVZvbHVtZVNsaWRlclRodW1i
LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBsb2NhbENvbnRleHQuY2dDb250ZXh0KCksIHIsIGdl
dE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAg
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>