<?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>26425</bug_id>
          
          <creation_ts>2009-06-15 17:26:11 -0700</creation_ts>
          <short_desc>Small Refactoring to Consolidate Common GDI Calls</short_desc>
          <delta_ts>2009-06-18 20:49:19 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</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="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>aroben</cc>
    
    <cc>sfalken</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>126091</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-15 17:26:11 -0700</bug_when>
    <thetext>There are a number of places where BITMAPINFO structures and XFORM structures are created.  These are almost always the same, and seem like a good opportunity to abstract these structure filling routines to be shared between the various Windows ports.

This patch adds a new GDIUtilities.h/GDIUtilities.cpp file that contains implementations of routines to:
1.  Construct the typical BITMAPINFO structure we use in various operations.
2.  Clear the data in a BITMAP structure.
3.  Construct a Windows XFORM object from the input matrix components.

After this patch, several methods in GraphicsContextCGWin and GraphicsContextCairoWin can be pushed up to GraphicsContextWin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126093</commentid>
    <comment_count>1</comment_count>
      <attachid>31320</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-15 17:35:21 -0700</bug_when>
    <thetext>Created attachment 31320
Rev 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126096</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-15 17:38:03 -0700</bug_when>
    <thetext>Looks great to me.  The patch is missing the new files, and Adam and Steve are the people you should really ask about windows changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126097</commentid>
    <comment_count>3</comment_count>
      <attachid>31320</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-15 17:38:19 -0700</bug_when>
    <thetext>Comment on attachment 31320
Rev 1.

Missing the added files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126104</commentid>
    <comment_count>4</comment_count>
      <attachid>31325</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-15 18:12:59 -0700</bug_when>
    <thetext>Created attachment 31325
Rev. 2.

Show missing (new) files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126226</commentid>
    <comment_count>5</comment_count>
      <attachid>31325</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-06-16 10:42:32 -0700</bug_when>
    <thetext>Comment on attachment 31325
Rev. 2.

&gt; + #ifndef GdiUtilities_h

This should be GDIUtilities_h. We always match the case of the file name.

In general we&apos;ve tried to resist adding *Utilities files, partly because they can become a catch-all. So I&apos;ve been trying to think about how we could remove the need for such a file here.

&gt; + XFORM makeXFORM(float, float, float, float, float, float);

I think it would be better to add an operator XFORM() to the TransformationMatrix class instead of adding the makeXFORM function. Then we can change the existing code to use TransformationMatrix::translate to convert the rect into a matrix, and convert that to an XFORM. Does that make sense?

&gt; + BITMAPINFO bitmapInfoForSize(const IntSize&amp;, bool invertHeight = false);

Boolean parameters make it hard to read code, and optional boolean parameters make it really easy to make mistakes when the function signature changes. You could replace the optional boolean with a required two-member enum, like this:

enum BitmapOrientation { TopDown, BottomUp };
BITMAPINFO bitmapInfoForSize(const IntSize&amp;, BitmapOrientation).

Or you could just require the caller to negate the height themselves.

Another option, which would allow moving this function out of GDIUtilities (and get us a step closer to removing that file altogether), would be to create a WebCore::BitmapInfo struct that derives from BITMAPINFO. Something like:

struct BitmapInfo : public BITMAPINFO {
    static BitmapInfo create(const IntSize&amp;);
    static BitmapInfo createBottomUp(const IntSize&amp;);
};

&gt; + void fillWithClearColor(HBITMAP);

I&apos;m not sure what to do with this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126249</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-16 11:50:48 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; In general we&apos;ve tried to resist adding *Utilities files, partly because they
&gt; can become a catch-all. So I&apos;ve been trying to think about how we could remove
&gt; the need for such a file here.

Okay
 
&gt; &gt; + XFORM makeXFORM(float, float, float, float, float, float);
&gt; 
&gt; I think it would be better to add an operator XFORM() to the
&gt; TransformationMatrix class instead of adding the makeXFORM function. Then we
&gt; can change the existing code to use TransformationMatrix::translate to convert
&gt; the rect into a matrix, and convert that to an XFORM. Does that make sense?

Yes.  I can do that.
 
&gt; &gt; + BITMAPINFO bitmapInfoForSize(const IntSize&amp;, bool invertHeight = false);
&gt; Another option, which would allow moving this function out of GDIUtilities (and
&gt; get us a step closer to removing that file altogether), would be to create a
&gt; WebCore::BitmapInfo struct that derives from BITMAPINFO. Something like:
&gt; 
&gt; struct BitmapInfo : public BITMAPINFO {
&gt;     static BitmapInfo create(const IntSize&amp;);
&gt;     static BitmapInfo createBottomUp(const IntSize&amp;);
&gt; };

That&apos;s a good idea.  Should this be in its own set of files, or is there someplace  else where this would make sense?
 
&gt; &gt; + void fillWithClearColor(HBITMAP);
&gt; 
&gt; I&apos;m not sure what to do with this one.

The only thing that uses this is GraphicsContextWinXXXX, so I can just make it a method of the class and put it there.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126304</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-06-16 14:43:57 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; + BITMAPINFO bitmapInfoForSize(const IntSize&amp;, bool invertHeight = false);
&gt; &gt; Another option, which would allow moving this function out of GDIUtilities (and
&gt; &gt; get us a step closer to removing that file altogether), would be to create a
&gt; &gt; WebCore::BitmapInfo struct that derives from BITMAPINFO. Something like:
&gt; &gt; 
&gt; &gt; struct BitmapInfo : public BITMAPINFO {
&gt; &gt;     static BitmapInfo create(const IntSize&amp;);
&gt; &gt;     static BitmapInfo createBottomUp(const IntSize&amp;);
&gt; &gt; };
&gt; 
&gt; That&apos;s a good idea.  Should this be in its own set of files, or is there
&gt; someplace  else where this would make sense?

I think having its own files would be best.

&gt; &gt; &gt; + void fillWithClearColor(HBITMAP);
&gt; &gt; 
&gt; &gt; I&apos;m not sure what to do with this one.
&gt; 
&gt; The only thing that uses this is GraphicsContextWinXXXX, so I can just make it
&gt; a method of the class and put it there.

Adding a new function to GraphicsContext.h seems a little ugly for this platform-specific function, especially since the function doesn&apos;t involve the GraphicsContext at all.

It looks like the only caller to fillWithClearColor is getWindowsContext. Can we do some refactoring to share that implementation, so that we don&apos;t need to find a way to share just this one function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126575</commentid>
    <comment_count>8</comment_count>
      <attachid>31453</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 15:39:45 -0700</bug_when>
    <thetext>Created attachment 31453
Rev 3

Revised per Adam Roben&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126576</commentid>
    <comment_count>9</comment_count>
      <attachid>31453</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-06-17 15:44:26 -0700</bug_when>
    <thetext>Comment on attachment 31453
Rev 3

This is looking great.

Since the 4 changes are each pretty self-contained, it would be much better to get them reviewed and landed as separate patches.

I also think the BitmapInfo functions should return a WebCore::BitmapInfo, not a BITMAPINFO.

r- so that these changes can be split up. Thanks for the great work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126583</commentid>
    <comment_count>10</comment_count>
      <attachid>31456</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 16:04:46 -0700</bug_when>
    <thetext>Created attachment 31456
Part 1 (XFORM operator)

Add new XFORM operator to TransformationMatrix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126587</commentid>
    <comment_count>11</comment_count>
      <attachid>31457</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 16:14:14 -0700</bug_when>
    <thetext>Created attachment 31457
Part 2: (BitmapInfo structure)

This patch adds the BitmapInfo structure for later use in some refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126588</commentid>
    <comment_count>12</comment_count>
      <attachid>31456</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-06-17 16:17:37 -0700</bug_when>
    <thetext>Comment on attachment 31456
Part 1 (XFORM operator)

I don&apos;t think there&apos;s value in a patch that only adds the casting operator but doesn&apos;t use it. Can you put the code that uses it in this patch, too? Sorry for being unclear earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126589</commentid>
    <comment_count>13</comment_count>
      <attachid>31457</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-06-17 16:18:00 -0700</bug_when>
    <thetext>Comment on attachment 31457
Part 2: (BitmapInfo structure)

Again, please put the code that uses the new functions in this patch. Sorry for being unclear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126595</commentid>
    <comment_count>14</comment_count>
      <attachid>31463</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 16:35:17 -0700</bug_when>
    <thetext>Created attachment 31463
Part 3: (Use BitmapInfo Structure)

Depends on Patch #2.  Use BitmapInfo structure instead of manual structure assembly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126598</commentid>
    <comment_count>15</comment_count>
      <attachid>31465</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 16:41:50 -0700</bug_when>
    <thetext>Created attachment 31465
Part 1: BitmapInfo Refactoring

Add a new BitmapInfo structure and use to refactor some duplicated code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126599</commentid>
    <comment_count>16</comment_count>
      <attachid>31465</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-06-17 16:45:30 -0700</bug_when>
    <thetext>Comment on attachment 31465
Part 1: BitmapInfo Refactoring

&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,31 @@
&gt; +2009-06-17  Brent Fulgham  &lt;bfulgham@webkit.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Refactor a few common routines in the various Windows ports
&gt; +        and reduce some duplicated code.
&gt; +
&gt; +        Refactor use of BITMAPINFO for the new BitmapInfo structure.

You should mention the Bugzilla URL in your ChangeLog.

&gt; +        BITMAPINFO bitmapInfo = BitmapInfo::create(dstRect.size());

Might as well use BitmapInfo here, too.

You could give BitmapInfo a constructor that initialized bmiHeader.biSize correctly and everything else to 0. That would follow the way ATL&apos;s C++ wrappers work. Or you could leave it like you have it now.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126602</commentid>
    <comment_count>17</comment_count>
      <attachid>31467</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 16:56:46 -0700</bug_when>
    <thetext>Created attachment 31467
Part 2: (Refactor XFORM)

Add new XFORM casting operator to TransformationMatrix, and use it to remove some duplicated code.

Push the concatCTM up from the CG- and Cairo-specific files into the generic GraphicsContextWin file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126618</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 17:34:01 -0700</bug_when>
    <thetext>Part 1 landed in https://trac.webkit.org/changeset/44789.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126619</commentid>
    <comment_count>19</comment_count>
      <attachid>31467</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-06-17 17:35:28 -0700</bug_when>
    <thetext>Comment on attachment 31467
Part 2: (Refactor XFORM)

&gt;          // Apply a translation to our context so that the drawing done will be at (0,0) of the bitmap.
&gt; -        XFORM xform;
&gt; -        xform.eM11 = 1.0f;
&gt; -        xform.eM12 = 0.0f;
&gt; -        xform.eM21 = 0.0f;
&gt; -        xform.eM22 = 1.0f;
&gt; -        xform.eDx = -dstRect.x();
&gt; -        xform.eDy = -dstRect.y();
&gt; +        TransformationMatrix translate(1.0f, 0.0f, 0.0f, 1.0f, -dstRect.x(), -dstRect.y());
&gt; +        XFORM xform = translate;

Maybe this would be better as:

XFORM xform = TransformationMatrix().translate(-dstRect.x(), -dstRect.y());

&gt; -    XFORM xform;
&gt; -    xform.eM11 = size.width();
&gt; -    xform.eM12 = 0.0f;
&gt; -    xform.eM21 = 0.0f;
&gt; -    xform.eM22 = size.height();
&gt; -    xform.eDx = 0.0f;
&gt; -    xform.eDy = 0.0f;
&gt; +
&gt; +    TransformationMatrix scale(size.width(), 0.0f, 0.0f, size.height(), 0.0f, 0.0f);
&gt; +
&gt; +    XFORM xform = scale;

Maybe this would be better as:

XFORM xform = TransformationMatrix().scale(size.width(), size.height());

&gt; -    XFORM xform;
&gt; -    xform.eM11 = cosAngle;
&gt; -    xform.eM12 = -sinAngle;
&gt; -    xform.eM21 = sinAngle;
&gt; -    xform.eM22 = cosAngle;
&gt; -    xform.eDx = 0.0f;
&gt; -    xform.eDy = 0.0f;
&gt; +
&gt; +    TransformationMatrix rotate(cosAngle, -sinAngle, sinAngle, cosAngle, 0.0f, 0.0f);
&gt; +
&gt; +    XFORM xform = rotate;

You could probably use TransformationMatrix::rotate() here, but I don&apos;t know the exactly incantation (probably just TransformationMatrix().rotate(degreesAngle)).

...and so on for the other cases.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126649</commentid>
    <comment_count>20</comment_count>
      <attachid>31486</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-17 21:19:21 -0700</bug_when>
    <thetext>Created attachment 31486
Part 3: (Move common logic to parent)

Add new &apos;flush&apos; method to allow more common logic to be pushed to the parent file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126759</commentid>
    <comment_count>21</comment_count>
      <attachid>31486</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-18 13:42:45 -0700</bug_when>
    <thetext>Comment on attachment 31486
Part 3: (Move common logic to parent)

Assuming you&apos;re sure that the two getWindowsContext implementations are identical, than  this looks great!  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126763</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-18 13:49:43 -0700</bug_when>
    <thetext>Part 2 landed in http://trac.webkit.org/changeset/44793.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126764</commentid>
    <comment_count>23</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-18 13:51:10 -0700</bug_when>
    <thetext>Part 3 landed in http://trac.webkit.org/changeset/44821.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126767</commentid>
    <comment_count>24</comment_count>
      <attachid>31507</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-18 14:07:28 -0700</bug_when>
    <thetext>Created attachment 31507
Part 4: (Final cleanups)

1. Move WinBitmap up so both ports can use it.
2. Use more concise TransformationMatrix syntax as suggested by Adam Roben in his earlier review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126768</commentid>
    <comment_count>25</comment_count>
      <attachid>31507</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-18 14:09:49 -0700</bug_when>
    <thetext>Comment on attachment 31507
Part 4: (Final cleanups)

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126826</commentid>
    <comment_count>26</comment_count>
      <attachid>31522</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-18 17:31:28 -0700</bug_when>
    <thetext>Created attachment 31522
Part 5: (Some missed cleanups)

A handful of changes where the BitmapInfo struct can remove duplicated code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126847</commentid>
    <comment_count>27</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 18:12:47 -0700</bug_when>
    <thetext>Assigned to bfulgham to make it clear who is landing it.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126874</commentid>
    <comment_count>28</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-18 20:49:19 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/44836.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31320</attachid>
            <date>2009-06-15 17:35:21 -0700</date>
            <delta_ts>2009-06-15 18:12:59 -0700</delta_ts>
            <desc>Rev 1.</desc>
            <filename>gdi_refactor.patch</filename>
            <type>text/plain</type>
            <size>15773</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDYtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNvbWUgcmVmYWN0b3JpbmcgdG8gY29uc29saWRhdGUgYSBmZXcgY29tbW9uIEdESQorICAgICAg
ICBvcGVyYXRpb25zIGluIGhlbHBlciByb3V0aW5lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MjQ1LgorCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Z2V0V2luZG93c0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpX
aW5kb3dzQml0bWFwOjpXaW5kb3dzQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNjYWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6dHJhbnNsYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YWxsb2NJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNh
aXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFsbG9jSW1hZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OndyaXRlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpwYWludCk6CisKIDIwMDktMDYtMTUgIEtl
dmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgVGltIEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDQ0Njk2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMwMyw2ICszMzAzLDE0IEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5c
R0RJVXRpbGl0aWVzLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5cR0RJVXRpbGl0aWVzLmgiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cd2luXEtleUV2ZW50V2luLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTE1ODIz
LDYgKzE1ODMxLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JKU09OT2JqZWN0LmNwcCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bnNwZWN0b3JKU09OT2JqZWN0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yUmVzb3VyY2UuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDQ0Njk2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dCaXRtYXBDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktp
dFN5c3RlbUludGVyZmFjZS5oPgorI2luY2x1ZGUgIkdESVV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CkBAIC04NSwxOCArODYsNyBAQCBIREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29u
dGV4dChjCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBDcmVhdGUgYSBiaXRt
YXAgREMgaW4gd2hpY2ggdG8gZHJhdy4KLSAgICAgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvOwot
ICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUgICAgICAgICAgPSBzaXplb2YoQklU
TUFQSU5GT0hFQURFUik7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggICAg
ICAgICA9IGRzdFJlY3Qud2lkdGgoKTsgCi0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJp
SGVpZ2h0ICAgICAgICA9IGRzdFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpUGxhbmVzICAgICAgICA9IDE7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpQml0Q291bnQgICAgICA9IDMyOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNv
bXByZXNzaW9uICAgPSBCSV9SR0I7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6
ZUltYWdlICAgICA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJN
ZXRlciA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9
IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCAgICAgICA9IDA7Ci0g
ICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50ICA9IDA7CisgICAgICAg
IEJJVE1BUElORk8gYml0bWFwSW5mbyA9IGJpdG1hcEluZm9Gb3JTaXplKGRzdFJlY3Quc2l6ZSgp
KTsKIAogICAgICAgICB2b2lkKiBwaXhlbHMgPSAwOwogICAgICAgICBIQklUTUFQIGJpdG1hcCA9
IDo6Q3JlYXRlRElCU2VjdGlvbihOVUxMLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZw
aXhlbHMsIDAsIDApOwpAQCAtMTA3LDI0ICs5NywxNCBAQCBIREMgR3JhcGhpY3NDb250ZXh0Ojpn
ZXRXaW5kb3dzQ29udGV4dChjCiAgICAgICAgIDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBiaXRt
YXApOwogCiAgICAgICAgIC8vIEZpbGwgb3VyIGJ1ZmZlciB3aXRoIGNsZWFyIGlmIHdlJ3JlIGdv
aW5nIHRvIGFscGhhIGJsZW5kLgotICAgICAgICBpZiAoc3VwcG9ydEFscGhhQmxlbmQpIHsKLSAg
ICAgICAgICAgIEJJVE1BUCBibXBJbmZvOwotICAgICAgICAgICAgR2V0T2JqZWN0KGJpdG1hcCwg
c2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7Ci0gICAgICAgICAgICBpbnQgYnVmZmVyU2l6ZSA9
IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsKLSAgICAgICAgICAgIG1l
bXNldChibXBJbmZvLmJtQml0cywgMCwgYnVmZmVyU2l6ZSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKHN1cHBvcnRBbHBoYUJsZW5kKQorICAgICAgICAgICBmaWxsV2l0aENsZWFyQ29sb3IoYml0
bWFwKTsKIAogICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIGRvIHdvcmxkIHRyYW5zZm9ybXMu
CiAgICAgICAgIFNldEdyYXBoaWNzTW9kZShiaXRtYXBEQywgR01fQURWQU5DRUQpOwogCiAgICAg
ICAgIC8vIEFwcGx5IGEgdHJhbnNsYXRpb24gdG8gb3VyIGNvbnRleHQgc28gdGhhdCB0aGUgZHJh
d2luZyBkb25lIHdpbGwgYmUgYXQgKDAsMCkgb2YgdGhlIGJpdG1hcC4KLSAgICAgICAgWEZPUk0g
eGZvcm07Ci0gICAgICAgIHhmb3JtLmVNMTEgPSAxLjBmOwotICAgICAgICB4Zm9ybS5lTTEyID0g
MC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMSA9IDAuMGY7Ci0gICAgICAgIHhmb3JtLmVNMjIgPSAx
LjBmOwotICAgICAgICB4Zm9ybS5lRHggPSAtZHN0UmVjdC54KCk7Ci0gICAgICAgIHhmb3JtLmVE
eSA9IC1kc3RSZWN0LnkoKTsKKyAgICAgICAgWEZPUk0geGZvcm0gPSBtYWtlWEZPUk0oMS4wZiwg
MC4wZiwgMC4wZiwgMS4wZiwgLWRzdFJlY3QueCgpLCAtZHN0UmVjdC55KCkpOwogICAgICAgICA6
OlNldFdvcmxkVHJhbnNmb3JtKGJpdG1hcERDLCAmeGZvcm0pOwogCiAgICAgICAgIHJldHVybiBi
aXRtYXBEQzsKQEAgLTE3NCwxOCArMTU0LDcgQEAgR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0
bWFwOjpXaW5kb3dzQgogICAgIDogbV9oZGMoMCkKICAgICAsIG1fc2l6ZShzaXplKQogewotICAg
IEJJVE1BUElORk8gYml0bWFwSW5mbzsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUg
PSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlX
aWR0aCA9IG1fc2l6ZS53aWR0aCgpOyAKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdo
dCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9
IDE7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCA9IDMyOwotICAgIGJpdG1h
cEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7Ci0gICAgYml0bWFwSW5mby5i
bWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWFBl
bHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlZUGVsc1Blck1ldGVy
ID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOwotICAgIGJpdG1h
cEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50ID0gMDsKKyAgICBCSVRNQVBJTkZPIGJpdG1h
cEluZm8gPSBiaXRtYXBJbmZvRm9yU2l6ZShtX3NpemUpOwogCiAgICAgbV9iaXRtYXAgPSBDcmVh
dGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZtX2JpdG1hcEJ1ZmZlciksIDAsIDApOwogICAgIGlmICghbV9iaXRtYXAp
CkBAIC0yMzQsMTMgKzIwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Ojpjb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0ID0gdHJh
bnNmb3JtOwotICAgIFhGT1JNIHhmb3JtOwotICAgIHhmb3JtLmVNMTEgPSBtYXQuYTsKLSAgICB4
Zm9ybS5lTTEyID0gbWF0LmI7Ci0gICAgeGZvcm0uZU0yMSA9IG1hdC5jOwotICAgIHhmb3JtLmVN
MjIgPSBtYXQuZDsKLSAgICB4Zm9ybS5lRHggPSBtYXQudHg7Ci0gICAgeGZvcm0uZUR5ID0gbWF0
LnR5OworICAgIFhGT1JNIHhmb3JtID0gbWFrZVhGT1JNKG1hdC5hLCBtYXQuYiwgbWF0LmMsIG1h
dC5kLCBtYXQudHgsIG1hdC50eSk7CiAKICAgICBNb2RpZnlXb3JsZFRyYW5zZm9ybShtX2hkYywg
Jnhmb3JtLCBNV1RfTEVGVE1VTFRJUExZKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAJKHJl
dmlzaW9uIDQ0Njk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KKyNpbmNsdWRlICJHRElV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWly
by5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNTksMzIgKzYwLDYgQEAgc3RhdGljIGNh
aXJvX3QqIGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIRAogICAgIHJldHVybiBjb250ZXh0OwogfQog
Ci1zdGF0aWMgQklUTUFQSU5GTyBiaXRtYXBJbmZvRm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQotewotICAgIEJJVE1BUElORk8gYml0bWFwSW5mbzsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaVNpemUgICAgICAgICAgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlXaWR0aCAgICAgICAgID0gc2l6ZS53aWR0aCgpOyAKLSAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCAgICAgICAgPSBzaXplLmhlaWdodCgpOwotICAgIGJp
dG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzICAgICAgICA9IDE7Ci0gICAgYml0bWFwSW5mby5i
bWlIZWFkZXIuYmlCaXRDb3VudCAgICAgID0gMzI7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIu
YmlDb21wcmVzc2lvbiAgID0gQklfUkdCOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6
ZUltYWdlICAgICA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1ldGVy
ID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCAgICAgICA9IDA7Ci0gICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgID0gMDsKLQotICAgIHJldHVybiBiaXRtYXBJbmZv
OwotfQotCi1zdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCi17
Ci0gICAgQklUTUFQIGJtcEluZm87Ci0gICAgR2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGJtcElu
Zm8pLCAmYm1wSW5mbyk7Ci0gICAgaW50IGJ1ZmZlclNpemUgPSBibXBJbmZvLmJtV2lkdGhCeXRl
cyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0gICAgbWVtc2V0KGJtcEluZm8uYm1CaXRzLCAwLCBidWZm
ZXJTaXplKTsKLX0KLQogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGRjLCBi
b29sIGhhc0FscGhhKQogICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZSgpKQogICAgICwgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCkBA
IC0xMzEsMTMgKzEwNiw3IEBAIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0
KGMKICAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGJpdG1hcERDLCBHTV9BRFZBTkNFRCk7CiAKICAg
ICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0byBvdXIgY29udGV4dCBzbyB0aGF0IHRoZSBk
cmF3aW5nIGRvbmUgd2lsbCBiZSBhdCAoMCwwKSBvZiB0aGUgYml0bWFwLgotICAgICAgICBYRk9S
TSB4Zm9ybTsKLSAgICAgICAgeGZvcm0uZU0xMSA9IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVNMTIg
PSAwLjBmOwotICAgICAgICB4Zm9ybS5lTTIxID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMiA9
IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVEeCA9IC1kc3RSZWN0LngoKTsKLSAgICAgICAgeGZvcm0u
ZUR5ID0gLWRzdFJlY3QueSgpOworICAgICAgICBYRk9STSB4Zm9ybSA9IG1ha2VYRk9STSgxLjBm
LCAwLjBmLCAwLjBmLCAxLjBmLCAtZHN0UmVjdC54KCksIC1kc3RSZWN0LnkoKSk7CiAgICAgICAg
IDo6U2V0V29ybGRUcmFuc2Zvcm0oYml0bWFwREMsICZ4Zm9ybSk7CiAKICAgICAgICAgcmV0dXJu
IGJpdG1hcERDOwpAQCAtMTk2LDE1ICsxNjUsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJl
bGVhc2VXaW5kb3dzQ29udAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7CisgICAg
aWYgKCFtX2hkYykKKyAgICAgICAgcmV0dXJuOworCiAgICAgY29uc3QgY2Fpcm9fbWF0cml4X3Qq
IG1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2Fpcm9fbWF0cml4X3QqPigmdHJhbnNm
b3JtKTsKIAotICAgIFhGT1JNIHhmb3JtOwotICAgIHhmb3JtLmVNMTEgPSBtYXRyaXgtPnh4Owot
ICAgIHhmb3JtLmVNMTIgPSBtYXRyaXgtPnh5OwotICAgIHhmb3JtLmVNMjEgPSBtYXRyaXgtPnl4
OwotICAgIHhmb3JtLmVNMjIgPSBtYXRyaXgtPnl5OwotICAgIHhmb3JtLmVEeCA9IG1hdHJpeC0+
eDA7Ci0gICAgeGZvcm0uZUR5ID0gbWF0cml4LT55MDsKKyAgICBYRk9STSB4Zm9ybSA9IG1ha2VY
Rk9STShtYXRyaXgtPnh4LCBtYXRyaXgtPnh5LCBtYXRyaXgtPnl4LCBtYXRyaXgtPnl5LCBtYXRy
aXgtPngwLCBtYXRyaXgtPnkwKTsKIAogICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAm
eGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA0NDY5
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJHRElVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtODUsMTMgKzg2LDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNjYQogewogICAgIGlmICghbV9oZGMp
CiAgICAgICAgIHJldHVybjsKLSAgICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gc2l6
ZS53aWR0aCgpOwotICAgIHhmb3JtLmVNMTIgPSAwLjBmOwotICAgIHhmb3JtLmVNMjEgPSAwLjBm
OwotICAgIHhmb3JtLmVNMjIgPSBzaXplLmhlaWdodCgpOwotICAgIHhmb3JtLmVEeCA9IDAuMGY7
Ci0gICAgeGZvcm0uZUR5ID0gMC4wZjsKKworICAgIFhGT1JNIHhmb3JtID0gbWFrZVhGT1JNKHNp
emUud2lkdGgoKSwgMC4wZiwgMC4wZiwgc2l6ZS5oZWlnaHQoKSwgMC4wZiwgMC4wZik7CiAgICAg
TW9kaWZ5V29ybGRUcmFuc2Zvcm0obV9oZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7CiB9
CiAKQEAgLTEwMiwxMyArOTgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6cm90CiAgICAgZmxvYXQgcmFkaWFuc0FuZ2xlID0gZGVncmVlc0FuZ2xlICogZGVnMnJhZDsK
ICAgICBmbG9hdCBjb3NBbmdsZSA9IGNvc2YocmFkaWFuc0FuZ2xlKTsKICAgICBmbG9hdCBzaW5B
bmdsZSA9IHNpbmYocmFkaWFuc0FuZ2xlKTsKLSAgICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5l
TTExID0gY29zQW5nbGU7Ci0gICAgeGZvcm0uZU0xMiA9IC1zaW5BbmdsZTsKLSAgICB4Zm9ybS5l
TTIxID0gc2luQW5nbGU7Ci0gICAgeGZvcm0uZU0yMiA9IGNvc0FuZ2xlOwotICAgIHhmb3JtLmVE
eCA9IDAuMGY7Ci0gICAgeGZvcm0uZUR5ID0gMC4wZjsKKworICAgIFhGT1JNIHhmb3JtID0gbWFr
ZVhGT1JNKGNvc0FuZ2xlLCAtc2luQW5nbGUsIHNpbkFuZ2xlLCBjb3NBbmdsZSwgMC4wZiwgMC4w
Zik7CiAgICAgTW9kaWZ5V29ybGRUcmFuc2Zvcm0obV9oZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxU
SVBMWSk7CiB9CiAKQEAgLTExNiwxMyArMTA3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnRyYQogewogICAgIGlmICghbV9oZGMpCiAgICAgICAgIHJldHVybjsKLSAg
ICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gMS4wZjsKLSAgICB4Zm9ybS5lTTEyID0g
MC4wZjsKLSAgICB4Zm9ybS5lTTIxID0gMC4wZjsKLSAgICB4Zm9ybS5lTTIyID0gMS4wZjsKLSAg
ICB4Zm9ybS5lRHggPSB4OwotICAgIHhmb3JtLmVEeSA9IHk7CisKKyAgICBYRk9STSB4Zm9ybSA9
IG1ha2VYRk9STSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmLCB4LCB5KTsKICAgICBNb2RpZnlXb3Js
ZFRyYW5zZm9ybShtX2hkYywgJnhmb3JtLCBNV1RfTEVGVE1VTFRJUExZKTsKIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAkocmV2aXNpb24gNDQ2OTYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCisjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJSZXRhaW5QdHIuaCIK
QEAgLTQ0LDE2ICs0NSwxMCBAQCB2b2lkIGRlYWxsb2NDb250ZXh0KENHQ29udGV4dFJlZiB0YXJn
ZXQpCiAKIEhCSVRNQVAgYWxsb2NJbWFnZShIREMgZGMsIEludFNpemUgc2l6ZSwgQ0dDb250ZXh0
UmVmICp0YXJnZXRSZWYpCiB7Ci0gICAgSEJJVE1BUCBoYm1wOwotICAgIEJJVE1BUElORk8gYm1w
SW5mbyA9IHswfTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQ
SU5GT0hFQURFUik7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IHNpemUud2lkdGgo
KTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAg
Ym1wSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJp
Qml0Q291bnQgPSAzMjsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklf
UkdCOworICAgIEJJVE1BUElORk8gYm1wSW5mbyA9IGJpdG1hcEluZm9Gb3JTaXplKHNpemUpOwor
CiAgICAgTFBWT0lEIGJpdHM7Ci0gICAgaGJtcCA9IENyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJ
bmZvLCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApOworICAgIEhCSVRNQVAgaGJtcCA9IENy
ZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDAp
OwogCiAgICAgaWYgKCF0YXJnZXRSZWYpCiAgICAgICAgIHJldHVybiBoYm1wOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAkocmV2aXNpb24gNDQ2OTYp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKIAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJSZXRhaW5Q
dHIuaCIKQEAgLTQ5LDE1ICs1MCw3IEBAIHZvaWQgZGVhbGxvY0NvbnRleHQoQ2Fpcm9Db250ZXh0
UmVmIHRhcmcKIAogSEJJVE1BUCBhbGxvY0ltYWdlKEhEQyBkYywgSW50U2l6ZSBzaXplLCBDYWly
b0NvbnRleHRSZWYqIHRhcmdldFJlZikKIHsKLSAgICBCSVRNQVBJTkZPIGJtcEluZm8gPSB7MH07
Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIp
OwotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgYm1w
SW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSBzaXplLmhlaWdodCgpOyAvLyBNdXN0IGJlIHBvc2l0
aXZlIQotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBibXBJbmZvLmJt
aUhlYWRlci5iaUJpdENvdW50ID0gMzI7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlDb21wcmVz
c2lvbiA9IEJJX1JHQjsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOyAvLyB1
bnVzZWQKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9ydGFudCA9IDA7CisgICAgQklU
TUFQSU5GTyBibXBJbmZvID0gYml0bWFwSW5mb0ZvclNpemUoc2l6ZSk7CiAKICAgICBMUFZPSUQg
Yml0czsKICAgICBIQklUTUFQIGhibXAgPSBDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1wSW5mbywg
RElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2lu
L1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1Bh
c3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiA0NDY5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2lu
L1Bhc3RlYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkdESVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTIwMSwx
MyArMjAyLDggQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAg
IEhCSVRNQVAgcmVzdWx0Qml0bWFwID0gQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcChkYywgaW1hZ2Ut
PndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CiAgICAgSEJJVE1BUCBvbGRCaXRtYXAgPSAoSEJJ
VE1BUClTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLCByZXN1bHRCaXRtYXApOwogCi0gICAgQklU
TUFQSU5GTyBibUluZm8gPSB7MH07Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXpl
b2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaVdpZHRoID0gaW1h
Z2UtPndpZHRoKCk7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IGltYWdlLT5oZWln
aHQoKTsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBibUluZm8uYm1p
SGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Np
b24gPSBCSV9SR0I7CisgICAgQklUTUFQSU5GTyBibUluZm8gPSBiaXRtYXBJbmZvRm9yU2l6ZShp
bWFnZS0+c2l6ZSgpKTsKKwogICAgIEhCSVRNQVAgY29yZUJpdG1hcCA9IENyZWF0ZURJQlNlY3Rp
b24oZGMsICZibUluZm8sIERJQl9SR0JfQ09MT1JTLCAwLCAwLCAwKTsKICAgICBIQklUTUFQIG9s
ZFNvdXJjZSA9IChIQklUTUFQKVNlbGVjdE9iamVjdChzb3VyY2VEQywgY29yZUJpdG1hcCk7CiAg
ICAgaW1hZ2UtPmdldEhCSVRNQVAoY29yZUJpdG1hcCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDQ0Njk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAt
NDUxLDE4ICs0NTIsNyBAQCB2b2lkIFBvcHVwTWVudTo6cGFpbnQoY29uc3QgSW50UmVjdCYgZGFt
CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX2JtcCkgewotICAgICAgICBCSVRNQVBJTkZP
IGJpdG1hcEluZm87Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSAgICAgICAg
ICA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlXaWR0aCAgICAgICAgID0gY2xpZW50UmVjdCgpLndpZHRoKCk7IAotICAgICAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCAgICAgICAgPSAtY2xpZW50UmVjdCgpLmhlaWdodCgp
OwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyAgICAgICAgPSAxOwotICAg
ICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ICAgICAgPSAzMjsKLSAgICAgICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiAgID0gQklfUkdCOwotICAgICAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFnZSAgICAgPSAwOwotICAgICAgICBiaXRtYXBJ
bmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJt
aUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUNsclVzZWQgICAgICAgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNs
ckltcG9ydGFudCAgPSAwOworICAgICAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm8gPSBiaXRtYXBJ
bmZvRm9yU2l6ZShjbGllbnRSZWN0KCkuc2l6ZSgpLCB0cnVlKTsKIAogICAgICAgICB2b2lkKiBw
aXhlbHMgPSAwOwogICAgICAgICBtX2JtcCA9IDo6Q3JlYXRlRElCU2VjdGlvbihtX0RDLCAmYml0
bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApOwo=
</data>
<flag name="review"
          id="16003"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31325</attachid>
            <date>2009-06-15 18:12:59 -0700</date>
            <delta_ts>2009-06-17 15:39:45 -0700</delta_ts>
            <desc>Rev. 2.</desc>
            <filename>gdi_refactor.patch</filename>
            <type>text/plain</type>
            <size>20400</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMDktMDYtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNvbWUgcmVmYWN0b3JpbmcgdG8gY29uc29saWRhdGUgYSBmZXcgY29tbW9uIEdESQorICAgICAg
ICBvcGVyYXRpb25zIGluIGhlbHBlciByb3V0aW5lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MjQ1LgorCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Z2V0V2luZG93c0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpX
aW5kb3dzQml0bWFwOjpXaW5kb3dzQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNjYWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6dHJhbnNsYXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YWxsb2NJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNh
aXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFsbG9jSW1hZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OndyaXRlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpwYWludCk6CisKIDIwMDktMDYtMTUgIEtl
dmluIE1jQ3VsbG91Z2ggIDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgVGltIEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDQ0NzAwKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMwMyw2ICszMzAzLDE0IEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5c
R0RJVXRpbGl0aWVzLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5cR0RJVXRpbGl0aWVzLmgiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cd2luXEtleUV2ZW50V2luLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
R1dpbi5jcHAJKHJldmlzaW9uIDQ0Njk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CiAjaW5jbHVk
ZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2luY2x1
ZGUgIkdESVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNHLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC04NSwxOCArODYsNyBAQCBIREMg
R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjCiAgICAgICAgICAgICByZXR1cm4g
MDsKIAogICAgICAgICAvLyBDcmVhdGUgYSBiaXRtYXAgREMgaW4gd2hpY2ggdG8gZHJhdy4KLSAg
ICAgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaVNpemUgICAgICAgICAgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgICAgIGJp
dG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggICAgICAgICA9IGRzdFJlY3Qud2lkdGgoKTsgCi0g
ICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ICAgICAgICA9IGRzdFJlY3QuaGVp
Z2h0KCk7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzICAgICAgICA9IDE7
Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgICAgICA9IDMyOwotICAg
ICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uICAgPSBCSV9SR0I7Ci0gICAg
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlICAgICA9IDA7Ci0gICAgICAgIGJp
dG1hcEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7Ci0gICAgICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpQ2xyVXNlZCAgICAgICA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpQ2xySW1wb3J0YW50ICA9IDA7CisgICAgICAgIEJJVE1BUElORk8gYml0bWFwSW5mbyA9IGJp
dG1hcEluZm9Gb3JTaXplKGRzdFJlY3Quc2l6ZSgpKTsKIAogICAgICAgICB2b2lkKiBwaXhlbHMg
PSAwOwogICAgICAgICBIQklUTUFQIGJpdG1hcCA9IDo6Q3JlYXRlRElCU2VjdGlvbihOVUxMLCAm
Yml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApOwpAQCAtMTA3LDI0ICs5
NywxNCBAQCBIREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjCiAgICAgICAg
IDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBiaXRtYXApOwogCiAgICAgICAgIC8vIEZpbGwgb3Vy
IGJ1ZmZlciB3aXRoIGNsZWFyIGlmIHdlJ3JlIGdvaW5nIHRvIGFscGhhIGJsZW5kLgotICAgICAg
ICBpZiAoc3VwcG9ydEFscGhhQmxlbmQpIHsKLSAgICAgICAgICAgIEJJVE1BUCBibXBJbmZvOwot
ICAgICAgICAgICAgR2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7
Ci0gICAgICAgICAgICBpbnQgYnVmZmVyU2l6ZSA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1w
SW5mby5ibUhlaWdodDsKLSAgICAgICAgICAgIG1lbXNldChibXBJbmZvLmJtQml0cywgMCwgYnVm
ZmVyU2l6ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRBbHBoYUJsZW5kKQorICAg
ICAgICAgICBmaWxsV2l0aENsZWFyQ29sb3IoYml0bWFwKTsKIAogICAgICAgICAvLyBNYWtlIHN1
cmUgd2UgY2FuIGRvIHdvcmxkIHRyYW5zZm9ybXMuCiAgICAgICAgIFNldEdyYXBoaWNzTW9kZShi
aXRtYXBEQywgR01fQURWQU5DRUQpOwogCiAgICAgICAgIC8vIEFwcGx5IGEgdHJhbnNsYXRpb24g
dG8gb3VyIGNvbnRleHQgc28gdGhhdCB0aGUgZHJhd2luZyBkb25lIHdpbGwgYmUgYXQgKDAsMCkg
b2YgdGhlIGJpdG1hcC4KLSAgICAgICAgWEZPUk0geGZvcm07Ci0gICAgICAgIHhmb3JtLmVNMTEg
PSAxLjBmOwotICAgICAgICB4Zm9ybS5lTTEyID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMSA9
IDAuMGY7Ci0gICAgICAgIHhmb3JtLmVNMjIgPSAxLjBmOwotICAgICAgICB4Zm9ybS5lRHggPSAt
ZHN0UmVjdC54KCk7Ci0gICAgICAgIHhmb3JtLmVEeSA9IC1kc3RSZWN0LnkoKTsKKyAgICAgICAg
WEZPUk0geGZvcm0gPSBtYWtlWEZPUk0oMS4wZiwgMC4wZiwgMC4wZiwgMS4wZiwgLWRzdFJlY3Qu
eCgpLCAtZHN0UmVjdC55KCkpOwogICAgICAgICA6OlNldFdvcmxkVHJhbnNmb3JtKGJpdG1hcERD
LCAmeGZvcm0pOwogCiAgICAgICAgIHJldHVybiBiaXRtYXBEQzsKQEAgLTE3NCwxOCArMTU0LDcg
QEAgR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpXaW5kb3dzQgogICAgIDogbV9oZGMo
MCkKICAgICAsIG1fc2l6ZShzaXplKQogewotICAgIEJJVE1BUElORk8gYml0bWFwSW5mbzsKLSAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7
Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IG1fc2l6ZS53aWR0aCgpOyAKLSAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlCaXRDb3VudCA9IDMyOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Np
b24gPSBCSV9SR0I7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOwot
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlZUGVsc1Blck1ldGVyID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaUNsclVzZWQgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0
YW50ID0gMDsKKyAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm8gPSBiaXRtYXBJbmZvRm9yU2l6ZSht
X3NpemUpOwogCiAgICAgbV9iaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZv
LCBESUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2JpdG1hcEJ1ZmZl
ciksIDAsIDApOwogICAgIGlmICghbV9iaXRtYXApCkBAIC0yMzQsMTMgKzIwMyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb24KICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0ID0gdHJhbnNmb3JtOwotICAgIFhGT1JNIHhmb3JtOwot
ICAgIHhmb3JtLmVNMTEgPSBtYXQuYTsKLSAgICB4Zm9ybS5lTTEyID0gbWF0LmI7Ci0gICAgeGZv
cm0uZU0yMSA9IG1hdC5jOwotICAgIHhmb3JtLmVNMjIgPSBtYXQuZDsKLSAgICB4Zm9ybS5lRHgg
PSBtYXQudHg7Ci0gICAgeGZvcm0uZUR5ID0gbWF0LnR5OworICAgIFhGT1JNIHhmb3JtID0gbWFr
ZVhGT1JNKG1hdC5hLCBtYXQuYiwgbWF0LmMsIG1hdC5kLCBtYXQudHgsIG1hdC50eSk7CiAKICAg
ICBNb2RpZnlXb3JsZFRyYW5zZm9ybShtX2hkYywgJnhmb3JtLCBNV1RfTEVGVE1VTFRJUExZKTsK
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENh
aXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDQ0Njk2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSA8
Y2Fpcm8td2luMzIuaD4KKyNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpAQCAtNTksMzIgKzYwLDYgQEAgc3RhdGljIGNhaXJvX3QqIGNyZWF0ZUNhaXJvQ29udGV4dFdp
dGhIRAogICAgIHJldHVybiBjb250ZXh0OwogfQogCi1zdGF0aWMgQklUTUFQSU5GTyBiaXRtYXBJ
bmZvRm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIEJJVE1BUElORk8gYml0bWFw
SW5mbzsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUgICAgICAgICAgPSBzaXplb2Yo
QklUTUFQSU5GT0hFQURFUik7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0aCAgICAg
ICAgID0gc2l6ZS53aWR0aCgpOyAKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCAg
ICAgICAgPSBzaXplLmhlaWdodCgpOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVz
ICAgICAgICA9IDE7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCAgICAgID0g
MzI7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiAgID0gQklfUkdCOwot
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlICAgICA9IDA7Ci0gICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xy
VXNlZCAgICAgICA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQg
ID0gMDsKLQotICAgIHJldHVybiBiaXRtYXBJbmZvOwotfQotCi1zdGF0aWMgdm9pZCBmaWxsV2l0
aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCi17Ci0gICAgQklUTUFQIGJtcEluZm87Ci0gICAg
R2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7Ci0gICAgaW50IGJ1
ZmZlclNpemUgPSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0gICAg
bWVtc2V0KGJtcEluZm8uYm1CaXRzLCAwLCBidWZmZXJTaXplKTsKLX0KLQogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGRjLCBib29sIGhhc0FscGhhKQogICAgIDogbV9jb21t
b24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQogICAgICwgbV9kYXRhKG5ldyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpCkBAIC0xMzEsMTMgKzEwNiw3IEBAIEhEQyBHcmFw
aGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGMKICAgICAgICAgU2V0R3JhcGhpY3NNb2Rl
KGJpdG1hcERDLCBHTV9BRFZBTkNFRCk7CiAKICAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlv
biB0byBvdXIgY29udGV4dCBzbyB0aGF0IHRoZSBkcmF3aW5nIGRvbmUgd2lsbCBiZSBhdCAoMCww
KSBvZiB0aGUgYml0bWFwLgotICAgICAgICBYRk9STSB4Zm9ybTsKLSAgICAgICAgeGZvcm0uZU0x
MSA9IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVNMTIgPSAwLjBmOwotICAgICAgICB4Zm9ybS5lTTIx
ID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMiA9IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVEeCA9
IC1kc3RSZWN0LngoKTsKLSAgICAgICAgeGZvcm0uZUR5ID0gLWRzdFJlY3QueSgpOworICAgICAg
ICBYRk9STSB4Zm9ybSA9IG1ha2VYRk9STSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmLCAtZHN0UmVj
dC54KCksIC1kc3RSZWN0LnkoKSk7CiAgICAgICAgIDo6U2V0V29ybGRUcmFuc2Zvcm0oYml0bWFw
REMsICZ4Zm9ybSk7CiAKICAgICAgICAgcmV0dXJuIGJpdG1hcERDOwpAQCAtMTk2LDE1ICsxNjUs
MTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udAogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7CisgICAgaWYgKCFtX2hkYykKKyAgICAgICAgcmV0dXJu
OworCiAgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QqIG1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2Fpcm9fbWF0cml4X3QqPigmdHJhbnNmb3JtKTsKIAotICAgIFhGT1JNIHhmb3JtOwot
ICAgIHhmb3JtLmVNMTEgPSBtYXRyaXgtPnh4OwotICAgIHhmb3JtLmVNMTIgPSBtYXRyaXgtPnh5
OwotICAgIHhmb3JtLmVNMjEgPSBtYXRyaXgtPnl4OwotICAgIHhmb3JtLmVNMjIgPSBtYXRyaXgt
Pnl5OwotICAgIHhmb3JtLmVEeCA9IG1hdHJpeC0+eDA7Ci0gICAgeGZvcm0uZUR5ID0gbWF0cml4
LT55MDsKKyAgICBYRk9STSB4Zm9ybSA9IG1ha2VYRk9STShtYXRyaXgtPnh4LCBtYXRyaXgtPnh5
LCBtYXRyaXgtPnl4LCBtYXRyaXgtPnl5LCBtYXRyaXgtPngwLCBtYXRyaXgtPnkwKTsKIAogICAg
IE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA0NDY5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5o
IgogI2VuZGlmCiAKKyNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGF0aC5oIgpAQCAtODUsMTMgKzg2LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OnNjYQogewogICAgIGlmICghbV9oZGMpCiAgICAgICAgIHJldHVybjsKLSAgICBYRk9S
TSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gc2l6ZS53aWR0aCgpOwotICAgIHhmb3JtLmVNMTIg
PSAwLjBmOwotICAgIHhmb3JtLmVNMjEgPSAwLjBmOwotICAgIHhmb3JtLmVNMjIgPSBzaXplLmhl
aWdodCgpOwotICAgIHhmb3JtLmVEeCA9IDAuMGY7Ci0gICAgeGZvcm0uZUR5ID0gMC4wZjsKKwor
ICAgIFhGT1JNIHhmb3JtID0gbWFrZVhGT1JNKHNpemUud2lkdGgoKSwgMC4wZiwgMC4wZiwgc2l6
ZS5oZWlnaHQoKSwgMC4wZiwgMC4wZik7CiAgICAgTW9kaWZ5V29ybGRUcmFuc2Zvcm0obV9oZGMs
ICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7CiB9CiAKQEAgLTEwMiwxMyArOTgsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAgICAgZmxvYXQgcmFkaWFuc0Fu
Z2xlID0gZGVncmVlc0FuZ2xlICogZGVnMnJhZDsKICAgICBmbG9hdCBjb3NBbmdsZSA9IGNvc2Yo
cmFkaWFuc0FuZ2xlKTsKICAgICBmbG9hdCBzaW5BbmdsZSA9IHNpbmYocmFkaWFuc0FuZ2xlKTsK
LSAgICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gY29zQW5nbGU7Ci0gICAgeGZvcm0u
ZU0xMiA9IC1zaW5BbmdsZTsKLSAgICB4Zm9ybS5lTTIxID0gc2luQW5nbGU7Ci0gICAgeGZvcm0u
ZU0yMiA9IGNvc0FuZ2xlOwotICAgIHhmb3JtLmVEeCA9IDAuMGY7Ci0gICAgeGZvcm0uZUR5ID0g
MC4wZjsKKworICAgIFhGT1JNIHhmb3JtID0gbWFrZVhGT1JNKGNvc0FuZ2xlLCAtc2luQW5nbGUs
IHNpbkFuZ2xlLCBjb3NBbmdsZSwgMC4wZiwgMC4wZik7CiAgICAgTW9kaWZ5V29ybGRUcmFuc2Zv
cm0obV9oZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7CiB9CiAKQEAgLTExNiwxMyArMTA3
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnRyYQogewogICAgIGlm
ICghbV9oZGMpCiAgICAgICAgIHJldHVybjsKLSAgICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5l
TTExID0gMS4wZjsKLSAgICB4Zm9ybS5lTTEyID0gMC4wZjsKLSAgICB4Zm9ybS5lTTIxID0gMC4w
ZjsKLSAgICB4Zm9ybS5lTTIyID0gMS4wZjsKLSAgICB4Zm9ybS5lRHggPSB4OwotICAgIHhmb3Jt
LmVEeSA9IHk7CisKKyAgICBYRk9STSB4Zm9ybSA9IG1ha2VYRk9STSgxLjBmLCAwLjBmLCAwLjBm
LCAxLjBmLCB4LCB5KTsKICAgICBNb2RpZnlXb3JsZFRyYW5zZm9ybShtX2hkYywgJnhmb3JtLCBN
V1RfTEVGVE1VTFRJUExZKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFn
ZUNHV2luLmNwcAkocmV2aXNpb24gNDQ2OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFn
SW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJEcmFnSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiR0RJ
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJSZXRhaW5QdHIuaCIKQEAgLTQ0LDE2ICs0NSwxMCBAQCB2b2lkIGRl
YWxsb2NDb250ZXh0KENHQ29udGV4dFJlZiB0YXJnZXQpCiAKIEhCSVRNQVAgYWxsb2NJbWFnZShI
REMgZGMsIEludFNpemUgc2l6ZSwgQ0dDb250ZXh0UmVmICp0YXJnZXRSZWYpCiB7Ci0gICAgSEJJ
VE1BUCBoYm1wOwotICAgIEJJVE1BUElORk8gYm1wSW5mbyA9IHswfTsKLSAgICBibXBJbmZvLmJt
aUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYm1wSW5mby5i
bWlIZWFkZXIuYmlXaWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5i
aUhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMg
PSAxOwotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBibXBJbmZv
LmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOworICAgIEJJVE1BUElORk8gYm1wSW5m
byA9IGJpdG1hcEluZm9Gb3JTaXplKHNpemUpOworCiAgICAgTFBWT0lEIGJpdHM7Ci0gICAgaGJt
cCA9IENyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJmJpdHMs
IDAsIDApOworICAgIEhCSVRNQVAgaGJtcCA9IENyZWF0ZURJQlNlY3Rpb24oZGMsICZibXBJbmZv
LCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApOwogCiAgICAgaWYgKCF0YXJnZXRSZWYpCiAg
ICAgICAgIHJldHVybiBoYm1wOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
Q2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFn
ZUNhaXJvV2luLmNwcAkocmV2aXNpb24gNDQ2OTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9E
cmFnSW1hZ2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJEcmFnSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVk
ZSAiR0RJVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJSZXRhaW5QdHIuaCIKQEAgLTQ5LDE1ICs1MCw3IEBAIHZv
aWQgZGVhbGxvY0NvbnRleHQoQ2Fpcm9Db250ZXh0UmVmIHRhcmcKIAogSEJJVE1BUCBhbGxvY0lt
YWdlKEhEQyBkYywgSW50U2l6ZSBzaXplLCBDYWlyb0NvbnRleHRSZWYqIHRhcmdldFJlZikKIHsK
LSAgICBCSVRNQVBJTkZPIGJtcEluZm8gPSB7MH07Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlT
aXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJp
V2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSBz
aXplLmhlaWdodCgpOyAvLyBNdXN0IGJlIHBvc2l0aXZlIQotICAgIGJtcEluZm8uYm1pSGVhZGVy
LmJpUGxhbmVzID0gMTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMzI7Ci0g
ICAgYm1wSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKLSAgICBibXBJbmZv
LmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOyAvLyB1bnVzZWQKLSAgICBibXBJbmZvLmJtaUhlYWRl
ci5iaUNsckltcG9ydGFudCA9IDA7CisgICAgQklUTUFQSU5GTyBibXBJbmZvID0gYml0bWFwSW5m
b0ZvclNpemUoc2l6ZSk7CiAKICAgICBMUFZPSUQgYml0czsKICAgICBIQklUTUFQIGhibXAgPSBD
cmVhdGVESUJTZWN0aW9uKGRjLCAmYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAw
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0dESVV0aWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0dESVV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdESVV0aWxpdGllcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0JJVE1BUElORk8gYml0bWFwSW5mb0ZvclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBp
bnZlcnRIZWlnaHQpCit7CisgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvOworICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpU2l6ZSAgICAgICAgICA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsK
KyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoICAgICAgICAgPSBzaXplLndpZHRoKCk7
IAorICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ICAgICAgICA9IChpbnZlcnRIZWln
aHQpID8gLXNpemUuaGVpZ2h0KCkgOiBzaXplLmhlaWdodCgpOworICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpUGxhbmVzICAgICAgICA9IDE7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlC
aXRDb3VudCAgICAgID0gMzI7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lv
biAgID0gQklfUkdCOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlICAgICA9
IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKKyAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOworICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpQ2xyVXNlZCAgICAgICA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIu
YmlDbHJJbXBvcnRhbnQgID0gMDsKKworICAgIHJldHVybiBiaXRtYXBJbmZvOworfQorCit2b2lk
IGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKK3sKKyAgICBCSVRNQVAgYm1wSW5m
bzsKKyAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKKyAg
ICBpbnQgYnVmZmVyU2l6ZSA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdo
dDsKKyAgICBtZW1zZXQoYm1wSW5mby5ibUJpdHMsIDAsIGJ1ZmZlclNpemUpOworfQorCitYRk9S
TSBtYWtlWEZPUk0oZmxvYXQgZU0xMSwgZmxvYXQgZU0xMiwgZmxvYXQgZU0yMSwgZmxvYXQgZU0y
MiwgZmxvYXQgZUR4LCBmbG9hdCBlRHkpCit7CisgICAgWEZPUk0geGZvcm07CisgICAgeGZvcm0u
ZU0xMSA9IGVNMTE7CisgICAgeGZvcm0uZU0xMiA9IGVNMTI7CisgICAgeGZvcm0uZU0yMSA9IGVN
MjE7CisgICAgeGZvcm0uZU0yMiA9IGVNMjI7CisgICAgeGZvcm0uZUR4ID0gZUR4OworICAgIHhm
b3JtLmVEeSA9IGVEeTsKKworICAgIHJldHVybiB4Zm9ybTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vR0RJVXRpbGl0aWVzLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9HRElVdGlsaXRpZXMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdkaVV0aWxp
dGllc19oCisjZGVmaW5lIEdkaVV0aWxpdGllc19oCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JJVE1BUElORk8g
Yml0bWFwSW5mb0ZvclNpemUoY29uc3QgSW50U2l6ZSYsIGJvb2wgaW52ZXJ0SGVpZ2h0ID0gZmFs
c2UpOwordm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCk7CitYRk9STSBtYWtlWEZPUk0o
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEdkaVV0aWxpdGllc19oCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2aXNpb24gNDQ2OTYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJLVVJMLmgi
CkBAIC0yMDEsMTMgKzIwMiw4IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBu
b2RlLCAKICAgICBIQklUTUFQIHJlc3VsdEJpdG1hcCA9IENyZWF0ZUNvbXBhdGlibGVCaXRtYXAo
ZGMsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwogICAgIEhCSVRNQVAgb2xkQml0
bWFwID0gKEhCSVRNQVApU2VsZWN0T2JqZWN0KGNvbXBhdGlibGVEQywgcmVzdWx0Qml0bWFwKTsK
IAotICAgIEJJVE1BUElORk8gYm1JbmZvID0gezB9OwotICAgIGJtSW5mby5ibWlIZWFkZXIuYmlT
aXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgIGJtSW5mby5ibWlIZWFkZXIuYmlX
aWR0aCA9IGltYWdlLT53aWR0aCgpOwotICAgIGJtSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSBp
bWFnZS0+aGVpZ2h0KCk7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7Ci0gICAg
Ym1JbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMzI7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5i
aUNvbXByZXNzaW9uID0gQklfUkdCOworICAgIEJJVE1BUElORk8gYm1JbmZvID0gYml0bWFwSW5m
b0ZvclNpemUoaW1hZ2UtPnNpemUoKSk7CisKICAgICBIQklUTUFQIGNvcmVCaXRtYXAgPSBDcmVh
dGVESUJTZWN0aW9uKGRjLCAmYm1JbmZvLCBESUJfUkdCX0NPTE9SUywgMCwgMCwgMCk7CiAgICAg
SEJJVE1BUCBvbGRTb3VyY2UgPSAoSEJJVE1BUClTZWxlY3RPYmplY3Qoc291cmNlREMsIGNvcmVC
aXRtYXApOwogICAgIGltYWdlLT5nZXRIQklUTUFQKGNvcmVCaXRtYXApOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA0NDY5NikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdESVV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKQEAgLTQ1MSwxOCArNDUyLDcgQEAgdm9pZCBQb3B1cE1lbnU6OnBhaW50KGNvbnN0IElu
dFJlY3QmIGRhbQogICAgICAgICB9CiAgICAgfQogICAgIGlmICghbV9ibXApIHsKLSAgICAgICAg
QklUTUFQSU5GTyBiaXRtYXBJbmZvOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNp
emUgICAgICAgICAgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpV2lkdGggICAgICAgICA9IGNsaWVudFJlY3QoKS53aWR0aCgpOyAKLSAg
ICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgICAgICAgID0gLWNsaWVudFJlY3Qo
KS5oZWlnaHQoKTsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgICAgICAg
ID0gMTsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCAgICAgID0gMzI7
Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24gICA9IEJJX1JHQjsK
LSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgICAgID0gMDsKLSAgICAg
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKLSAgICAgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlZUGVsc1Blck1ldGVyID0gMDsKLSAgICAgICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlDbHJVc2VkICAgICAgID0gMDsKLSAgICAgICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlDbHJJbXBvcnRhbnQgID0gMDsKKyAgICAgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZv
ID0gYml0bWFwSW5mb0ZvclNpemUoY2xpZW50UmVjdCgpLnNpemUoKSwgdHJ1ZSk7CiAKICAgICAg
ICAgdm9pZCogcGl4ZWxzID0gMDsKICAgICAgICAgbV9ibXAgPSA6OkNyZWF0ZURJQlNlY3Rpb24o
bV9EQywgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31453</attachid>
            <date>2009-06-17 15:39:45 -0700</date>
            <delta_ts>2009-06-17 16:04:54 -0700</delta_ts>
            <desc>Rev 3</desc>
            <filename>gdi_refactor.patch</filename>
            <type>text/plain</type>
            <size>32135</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIGEgZmV3IGNvbW1vbiByb3V0aW5lcyBpbiB0aGUgdmFyaW91cyBXaW5kb3dzIHBv
cnRzCisgICAgICAgIGFuZCByZWR1Y2Ugc29tZSBkdXBsaWNhdGVkIGNvZGUuCisKKyAgICAgICAg
KDEpIEFkZHMgYSAnZmx1c2gnIG1ldGhvZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dCBzbyB0aGF0
CisgICAgICAgICAgICB0aGUgZ2V0V2luZG93c0NvbnRleHQgbWV0aG9kIGNhbiBjb25zb2xpZGF0
ZWQgaW50byB0aGUKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFdpbi5jcHAgZmlsZS4KKyAg
ICAgICAgKDIpIE1vdmUgV2luZG93c0JpdG1hcCBjbGFzcyB0byBHcmFwaGljc0NvbnRleHRXaW4s
IHNpbmNlIGl0CisgICAgICAgICAgICBpcyBlcXVhbGx5IHVzZWZ1bCBpbiBib3RoIENHIGFuZCBD
YWlybyBwb3J0cy4KKyAgICAgICAgKDMpIENyZWF0ZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBYRk9S
TSBjYXN0aW5nIG9wZXJhdG9yLCBhbmQKKyAgICAgICAgICAgIHN3aXRjaCB2YXJpb3VzIFhGT1JN
IHN0cnVjdHVyZSB1c2VzIHRvIHV0aWxpemUgaXQuCisgICAgICAgICg0KSBQdXNoIGNvbmNhdENU
TSBjYWxsIHRvIEdyYXBoaWNzQ29udGV4dFdpbiBub3cgdGhhdCB0aGUKKyAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGNhbiBkaXJlY3RseSBjcmVhdGUgWEZPUk0gKHJhdGhlcgorICAg
ICAgICAgICAgdGhhbiBjb252ZXJ0aW5nIHRvIENHQWZmaW5lVHJhbnNmb3JtL2NhaXJvX21hdHJp
eF90IGZpcnN0LikKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBB
ZGQgbmV3IEJpdG1hcEluZm8gc3RydWN0dXJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmZsdXNoKTogTmV3IG1ldGhv
ZAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OmZsdXNoKTogTmV3IG1ldGhvZAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2gpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZmlsbFdpdGhDbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5XaW5kb3dzQml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlV2luZG93c0JpdG1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2NhbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp0cmFuc2xhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb25j
YXRDVE0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1h
dHJpeFdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXg6Om9wZXJhdG9yIFhGT1JNKTogTmV3IG9wZXJhdG9yCisgICAgICAgICogcGxhdGZvcm0vd2lu
L0JpdG1hcEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJpdG1hcEluZm9Gb3JT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEluZm86OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcCk6CisgICAgICAgICogcGxhdGZvcm0v
d2luL0JpdG1hcEluZm8uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFn
ZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFsbG9jSW1hZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjphbGxv
Y0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6cGFp
bnQpOgorCiAyMDA5LTA2LTE3ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBGaXggY2hyb21pdW0gd2luZG93cyBidWlsZC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDQ3ODEpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIxOSw2ICsxNzIxOSwx
NCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cd2luXEJpdG1hcEluZm8uY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxCaXRtYXBJ
bmZvLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cd2luXEJTdHJpbmcuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+
DQpAQCAtMTgzNTEsNiArMTgzNTksMTAgQEAKIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJ
CTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cVHJh
bnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJ
CTxGaWxlDQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cVW5p
c2NyaWJlQ29udHJvbGxlci5jcHAiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgJKHJldmlzaW9uIDQ0NzgxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGVDYWlyby5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgSERDIGZvciBmb3JtIGNv
bnRyb2xzIHRvIGRyYXcgaW4gdGhlIHJpZ2h0IHBsYWNlLgogICAgIHZvaWQgc2F2ZSgpOwogICAg
IHZvaWQgcmVzdG9yZSgpOworICAgIHZvaWQgZmx1c2goKTsKICAgICB2b2lkIGNsaXAoY29uc3Qg
RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKICAgICB2b2lkIHNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpOwpAQCAtNzgsNiArNzksNyBAQCBwdWJsaWM6CiAgICAgLy8gT24g
ZXZlcnl0aGluZyBlbHNlLCB3ZSBkbyBub3RoaW5nLgogICAgIHZvaWQgc2F2ZSgpIHt9CiAgICAg
dm9pZCByZXN0b3JlKCkge30KKyAgICB2b2lkIGZsdXNoKCkge30KICAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0Jikge30KICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpIHt9CiAgICAgdm9p
ZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSB7fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlQ0cuaAkocmV2aXNpb24gNDQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDYgKzUwLDcgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90aGluZyBvbiBN
YWMuCiAgICAgdm9pZCBzYXZlKCkge30KICAgICB2b2lkIHJlc3RvcmUoKSB7fQorICAgIHZvaWQg
Zmx1c2goKSB7fQogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSB7fQogICAgIHZvaWQg
Y2xpcChjb25zdCBQYXRoJikge30KICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIHt9
CkBAIC02NCw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRv
IHVwZGF0ZSB0aGUgSERDIGZvciBmb3JtIGNvbnRyb2xzIHRvIGRyYXcgaW4gdGhlIHJpZ2h0IHBs
YWNlLgogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOworICAgIHZvaWQgZmx1
c2goKTsKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwKGNv
bnN0IFBhdGgmKTsKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybWF0aW9uTWF0cml4LmgJKHJldmlzaW9uIDQ0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwMyw2ICszMDMsMTAgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIHd4R3JhcGhpY3NNYXRy
aXgoKSBjb25zdDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIG9wZXJhdG9yIFhG
T1JNKCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICAvLyBtdWx0aXBseSBwYXNzZWQg
MkQgcG9pbnQgYnkgbWF0cml4IChhc3N1bWUgej0wKQogICAgIHZvaWQgbXVsdFZlY01hdHJpeChk
b3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSYgZHN0WCwgZG91YmxlJiBkc3RZKSBjb25zdDsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDQ0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2
NCArNzcsNiBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjCiAKIC8v
IEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5kb3dzQ29udGV4dCBhbmQgY3Jl
YXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8gc3VpdGFibGUgZm9yIGFsbCBj
bGllbnRzPwotSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50
UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCwgYm9vbCBtYXlDcmVhdGVCaXRt
YXApCi17Ci0gICAgLy8gRklYTUU6IFNob3VsZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hl
biBhIHNoYWRvdyBpcyBzZXQ/Ci0gICAgaWYgKG1heUNyZWF0ZUJpdG1hcCAmJiBpblRyYW5zcGFy
ZW5jeUxheWVyKCkpIHsKLSAgICAgICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgYml0bWFwIERDIGluIHdoaWNoIHRv
IGRyYXcuCi0gICAgICAgIEJJVE1BUElORk8gYml0bWFwSW5mbzsKLSAgICAgICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlTaXplICAgICAgICAgID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwot
ICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoICAgICAgICAgPSBkc3RSZWN0Lndp
ZHRoKCk7IAotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCAgICAgICAgPSBk
c3RSZWN0LmhlaWdodCgpOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyAg
ICAgICAgPSAxOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ICAgICAg
PSAzMjsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiAgID0gQklf
UkdCOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFnZSAgICAgPSAwOwot
ICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgICAgICAgPSAwOwotICAgICAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaUNsckltcG9ydGFudCAgPSAwOwotCi0gICAgICAgIHZvaWQqIHBpeGVscyA9
IDA7Ci0gICAgICAgIEhCSVRNQVAgYml0bWFwID0gOjpDcmVhdGVESUJTZWN0aW9uKE5VTEwsICZi
aXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCk7Ci0gICAgICAgIGlmICgh
Yml0bWFwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgSERDIGJpdG1hcERDID0g
OjpDcmVhdGVDb21wYXRpYmxlREMobV9kYXRhLT5tX2hkYyk7Ci0gICAgICAgIDo6U2VsZWN0T2Jq
ZWN0KGJpdG1hcERDLCBiaXRtYXApOwotCi0gICAgICAgIC8vIEZpbGwgb3VyIGJ1ZmZlciB3aXRo
IGNsZWFyIGlmIHdlJ3JlIGdvaW5nIHRvIGFscGhhIGJsZW5kLgotICAgICAgICBpZiAoc3VwcG9y
dEFscGhhQmxlbmQpIHsKLSAgICAgICAgICAgIEJJVE1BUCBibXBJbmZvOwotICAgICAgICAgICAg
R2V0T2JqZWN0KGJpdG1hcCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7Ci0gICAgICAgICAg
ICBpbnQgYnVmZmVyU2l6ZSA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdo
dDsKLSAgICAgICAgICAgIG1lbXNldChibXBJbmZvLmJtQml0cywgMCwgYnVmZmVyU2l6ZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIGRvIHdvcmxkIHRyYW5zZm9y
bXMuCi0gICAgICAgIFNldEdyYXBoaWNzTW9kZShiaXRtYXBEQywgR01fQURWQU5DRUQpOwotCi0g
ICAgICAgIC8vIEFwcGx5IGEgdHJhbnNsYXRpb24gdG8gb3VyIGNvbnRleHQgc28gdGhhdCB0aGUg
ZHJhd2luZyBkb25lIHdpbGwgYmUgYXQgKDAsMCkgb2YgdGhlIGJpdG1hcC4KLSAgICAgICAgWEZP
Uk0geGZvcm07Ci0gICAgICAgIHhmb3JtLmVNMTEgPSAxLjBmOwotICAgICAgICB4Zm9ybS5lTTEy
ID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMSA9IDAuMGY7Ci0gICAgICAgIHhmb3JtLmVNMjIg
PSAxLjBmOwotICAgICAgICB4Zm9ybS5lRHggPSAtZHN0UmVjdC54KCk7Ci0gICAgICAgIHhmb3Jt
LmVEeSA9IC1kc3RSZWN0LnkoKTsKLSAgICAgICAgOjpTZXRXb3JsZFRyYW5zZm9ybShiaXRtYXBE
QywgJnhmb3JtKTsKLQotICAgICAgICByZXR1cm4gYml0bWFwREM7Ci0gICAgfQotCi0gICAgQ0dD
b250ZXh0Rmx1c2gocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIG1fZGF0YS0+c2F2ZSgpOwotICAg
IHJldHVybiBtX2RhdGEtPm1faGRjOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFz
ZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3Vw
cG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQogewogICAgIGlmIChtYXlDcmVh
dGVCaXRtYXAgJiYgaGRjICYmIGluVHJhbnNwYXJlbmN5TGF5ZXIoKSkgewpAQCAtMTcwLDUyICsx
MTIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250CiAgICAgbV9k
YXRhLT5yZXN0b3JlKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6V2lu
ZG93c0JpdG1hcChIREMgaGRjLCBJbnRTaXplIHNpemUpCi0gICAgOiBtX2hkYygwKQotICAgICwg
bV9zaXplKHNpemUpCi17Ci0gICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvOwotICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsKLSAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoID0gbV9zaXplLndpZHRoKCk7IAotICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpSGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENv
dW50ID0gMzI7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JH
QjsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFnZSA9IDA7Ci0gICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xy
VXNlZCA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgPSAwOwot
Ci0gICAgbV9iaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdC
X0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2JpdG1hcEJ1ZmZlciksIDAsIDAp
OwotICAgIGlmICghbV9iaXRtYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGRjID0gQ3Jl
YXRlQ29tcGF0aWJsZURDKGhkYyk7Ci0gICAgU2VsZWN0T2JqZWN0KG1faGRjLCBtX2JpdG1hcCk7
Ci0KLSAgICBCSVRNQVAgYm1wSW5mbzsKLSAgICBHZXRPYmplY3QobV9iaXRtYXAsIHNpemVvZihi
bXBJbmZvKSwgJmJtcEluZm8pOwotICAgIG1fYnl0ZXNQZXJSb3cgPSBibXBJbmZvLmJtV2lkdGhC
eXRlczsKLSAgICBtX2JpdG1hcEJ1ZmZlckxlbmd0aCA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICog
Ym1wSW5mby5ibUhlaWdodDsKLQotICAgIFNldEdyYXBoaWNzTW9kZShtX2hkYywgR01fQURWQU5D
RUQpOwotfQotCi1HcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5XaW5kb3dzQml0bWFw
KCkKLXsKLSAgICBpZiAoIW1fYml0bWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZWxldGVE
QyhtX2hkYyk7Ci0gICAgRGVsZXRlT2JqZWN0KG1fYml0bWFwKTsKLX0KLQotR3JhcGhpY3NDb250
ZXh0OjpXaW5kb3dzQml0bWFwKiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVdpbmRvd3NCaXRtYXAo
SW50U2l6ZSBzaXplKQotewotICAgIHJldHVybiBuZXcgV2luZG93c0JpdG1hcChtX2RhdGEtPm1f
aGRjLCBzaXplKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFw
KFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiAgICAgUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gZGV2aWNlUkdCKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNy
ZWF0ZURldmljZVJHQigpKTsKQEAgLTIyOCwyMyArMTI0LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdXaW5kb3dzQml0bWFwKAogICAgIENHQ29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1f
Y2dDb250ZXh0LCBDR1JlY3RNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgp
LndpZHRoKCksIGltYWdlLT5zaXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNvbmNhdENUTShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIGlmICghbV9oZGMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdCA9IHRyYW5zZm9ybTsKLSAg
ICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gbWF0LmE7Ci0gICAgeGZvcm0uZU0xMiA9
IG1hdC5iOwotICAgIHhmb3JtLmVNMjEgPSBtYXQuYzsKLSAgICB4Zm9ybS5lTTIyID0gbWF0LmQ7
Ci0gICAgeGZvcm0uZUR4ID0gbWF0LnR4OwotICAgIHhmb3JtLmVEeSA9IG1hdC50eTsKLQotICAg
IE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTM2Miw0ICsyNDEsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgQ0dDb250ZXh0UmVz
dG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OmZsdXNoKCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChtX2NnQ29udGV4dCk7Cit9CisK
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENh
aXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDQ0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSwzMiArNTksNiBAQCBzdGF0aWMgY2Fpcm9fdCogY3JlYXRlQ2Fpcm9Db250
ZXh0V2l0aEhECiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLXN0YXRpYyBCSVRNQVBJTkZPIGJp
dG1hcEluZm9Gb3JTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgQklUTUFQSU5GTyBi
aXRtYXBJbmZvOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSAgICAgICAgICA9IHNp
emVvZihCSVRNQVBJTkZPSEVBREVSKTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRo
ICAgICAgICAgPSBzaXplLndpZHRoKCk7IAotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpSGVp
Z2h0ICAgICAgICA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlQ
bGFuZXMgICAgICAgID0gMTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ICAg
ICAgPSAzMjsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uICAgPSBCSV9S
R0I7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgICAgID0gMDsKLSAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIu
YmlDbHJVc2VkICAgICAgID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9y
dGFudCAgPSAwOwotCi0gICAgcmV0dXJuIGJpdG1hcEluZm87Ci19Ci0KLXN0YXRpYyB2b2lkIGZp
bGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKLXsKLSAgICBCSVRNQVAgYm1wSW5mbzsK
LSAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKLSAgICBp
bnQgYnVmZmVyU2l6ZSA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhlaWdodDsK
LSAgICBtZW1zZXQoYm1wSW5mby5ibUJpdHMsIDAsIGJ1ZmZlclNpemUpOwotfQotCiBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgOiBt
X2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCiAgICAgLCBtX2RhdGEobmV3
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKQEAgLTEwNSw1MyArNzksNiBAQCBHcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgZGMsCiAgICAgfQogfQogCi1IREMgR3Jh
cGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBi
b29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKLXsKLSAgICAvLyBG
SVhNRTogU2hvdWxkIGEgYml0bWFwIGJlIGNyZWF0ZWQgYWxzbyB3aGVuIGEgc2hhZG93IGlzIHNl
dD8KLSAgICBpZiAobWF5Q3JlYXRlQml0bWFwICYmIGluVHJhbnNwYXJlbmN5TGF5ZXIoKSkgewot
ICAgICAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQot
ICAgICAgICAvLyBDcmVhdGUgYSBiaXRtYXAgREMgaW4gd2hpY2ggdG8gZHJhdy4KLSAgICAgICAg
QklUTUFQSU5GTyBiaXRtYXBJbmZvID0gYml0bWFwSW5mb0ZvclNpemUoZHN0UmVjdC5zaXplKCkp
OwotCi0gICAgICAgIHZvaWQqIHBpeGVscyA9IDA7Ci0gICAgICAgIEhCSVRNQVAgYml0bWFwID0g
OjpDcmVhdGVESUJTZWN0aW9uKE5VTEwsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBp
eGVscywgMCwgMCk7Ci0gICAgICAgIGlmICghYml0bWFwKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAgICAgSERDIGJpdG1hcERDID0gOjpDcmVhdGVDb21wYXRpYmxlREMobV9kYXRhLT5t
X2hkYyk7Ci0gICAgICAgIDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBiaXRtYXApOwotCi0gICAg
ICAgIC8vIEZpbGwgb3VyIGJ1ZmZlciB3aXRoIGNsZWFyIGlmIHdlJ3JlIGdvaW5nIHRvIGFscGhh
IGJsZW5kLgotICAgICAgICBpZiAoc3VwcG9ydEFscGhhQmxlbmQpCi0gICAgICAgICAgIGZpbGxX
aXRoQ2xlYXJDb2xvcihiaXRtYXApOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjYW4gZG8g
d29ybGQgdHJhbnNmb3Jtcy4KLSAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGJpdG1hcERDLCBHTV9B
RFZBTkNFRCk7Ci0KLSAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0byBvdXIgY29udGV4
dCBzbyB0aGF0IHRoZSBkcmF3aW5nIGRvbmUgd2lsbCBiZSBhdCAoMCwwKSBvZiB0aGUgYml0bWFw
LgotICAgICAgICBYRk9STSB4Zm9ybTsKLSAgICAgICAgeGZvcm0uZU0xMSA9IDEuMGY7Ci0gICAg
ICAgIHhmb3JtLmVNMTIgPSAwLjBmOwotICAgICAgICB4Zm9ybS5lTTIxID0gMC4wZjsKLSAgICAg
ICAgeGZvcm0uZU0yMiA9IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVEeCA9IC1kc3RSZWN0LngoKTsK
LSAgICAgICAgeGZvcm0uZUR5ID0gLWRzdFJlY3QueSgpOwotICAgICAgICA6OlNldFdvcmxkVHJh
bnNmb3JtKGJpdG1hcERDLCAmeGZvcm0pOwotCi0gICAgICAgIHJldHVybiBiaXRtYXBEQzsKLSAg
ICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb193aW4zMl9zdXJmYWNl
X2NyZWF0ZShtX2RhdGEtPm1faGRjKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2Up
OwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLQotICAgIG1fZGF0YS0+c2F2
ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVj
dCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCwgYm9vbCBtYXlDcmVhdGVCaXRtYXApCiB7CiAgICAg
aWYgKCFtYXlDcmVhdGVCaXRtYXAgfHwgIWhkYyB8fCAhaW5UcmFuc3BhcmVuY3lMYXllcigpKSB7
CkBAIC0xOTQsMjEgKzEyMSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnQKICAgICA6OkRlbGV0ZU9iamVjdChiaXRtYXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pCi17Ci0gICAgY29uc3QgY2Fpcm9fbWF0cml4X3QqIG1hdHJpeCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2Fpcm9fbWF0cml4X3QqPigmdHJhbnNmb3JtKTsKLQotICAgIFhG
T1JNIHhmb3JtOwotICAgIHhmb3JtLmVNMTEgPSBtYXRyaXgtPnh4OwotICAgIHhmb3JtLmVNMTIg
PSBtYXRyaXgtPnh5OwotICAgIHhmb3JtLmVNMjEgPSBtYXRyaXgtPnl4OwotICAgIHhmb3JtLmVN
MjIgPSBtYXRyaXgtPnl5OwotICAgIHhmb3JtLmVEeCA9IG1hdHJpeC0+eDA7Ci0gICAgeGZvcm0u
ZUR5ID0gbWF0cml4LT55MDsKLQotICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZv
cm0sIE1XVF9MRUZUTVVMVElQTFkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6c3luY0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKQogewogICAg
IGlmICghY3IpCkBAIC0yMjAsNCArMTMyLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpzeW4KICAgICBTZXRHcmFwaGljc01vZGUobV9oZGMsIEdNX0FEVkFOQ0VEKTsg
Ly8gV2UgbmVlZCB0aGlzIGNhbGwgZm9yIHRoZW1lcyB0byBob25vciB3b3JsZCB0cmFuc2Zvcm1z
LgogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQorewor
ICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRl
KG1faGRjKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UpOworICAgIGNhaXJvX3N1
cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA0
NDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJCaXRt
YXBJbmZvLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTQzLDYgKzQ0LDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHUmVzb3VyY2VJbWFnZTsKIAorc3RhdGljIHZv
aWQgZmlsbFdpdGhDbGVhckNvbG9yKEhCSVRNQVAgYml0bWFwKQoreworICAgIEJJVE1BUCBibXBJ
bmZvOworICAgIEdldE9iamVjdChiaXRtYXAsIHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOwor
ICAgIGludCBidWZmZXJTaXplID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVp
Z2h0OworICAgIG1lbXNldChibXBJbmZvLmJtQml0cywgMCwgYnVmZmVyU2l6ZSk7Cit9CisKIGJv
b2wgR3JhcGhpY3NDb250ZXh0OjppblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLT5tX3RyYW5zcGFyZW5jeUNvdW50OyB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKGJvb2wgaW5jbHVkZSkKQEAgLTU1LDYgKzY0LDgw
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRJbmNsdWRlQ2hpbGQKICAgICByZXR1cm4g
bV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3M7CiB9CiAKK0dyYXBoaWNzQ29udGV4
dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcChIREMgaGRjLCBJbnRTaXplIHNpemUpCisg
ICAgOiBtX2hkYygwKQorICAgICwgbV9zaXplKHNpemUpCit7CisgICAgQklUTUFQSU5GTyBiaXRt
YXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKG1fc2l6ZSk7CisKKyAgICBtX2JpdG1hcCA9IENy
ZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJm1fYml0bWFwQnVmZmVyKSwgMCwgMCk7CisgICAgaWYgKCFtX2JpdG1h
cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oZGMgPSBDcmVhdGVDb21wYXRpYmxlREMoaGRj
KTsKKyAgICBTZWxlY3RPYmplY3QobV9oZGMsIG1fYml0bWFwKTsKKworICAgIEJJVE1BUCBibXBJ
bmZvOworICAgIEdldE9iamVjdChtX2JpdG1hcCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7
CisgICAgbV9ieXRlc1BlclJvdyA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzOworICAgIG1fYml0bWFw
QnVmZmVyTGVuZ3RoID0gYm1wSW5mby5ibVdpZHRoQnl0ZXMgKiBibXBJbmZvLmJtSGVpZ2h0Owor
CisgICAgU2V0R3JhcGhpY3NNb2RlKG1faGRjLCBHTV9BRFZBTkNFRCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dDo6V2luZG93c0JpdG1hcDo6fldpbmRvd3NCaXRtYXAoKQoreworICAgIGlmICghbV9i
aXRtYXApCisgICAgICAgIHJldHVybjsKKworICAgIERlbGV0ZURDKG1faGRjKTsKKyAgICBEZWxl
dGVPYmplY3QobV9iaXRtYXApOworfQorCitHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXAq
IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlV2luZG93c0JpdG1hcChJbnRTaXplIHNpemUpCit7Cisg
ICAgcmV0dXJuIG5ldyBXaW5kb3dzQml0bWFwKG1fZGF0YS0+bV9oZGMsIHNpemUpOworfQorCitI
REMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RS
ZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIGEgYml0bWFwIGJlIGNyZWF0ZWQgYWxzbyB3aGVuIGEgc2hhZG93
IGlzIHNldD8KKyAgICBpZiAobWF5Q3JlYXRlQml0bWFwICYmIGluVHJhbnNwYXJlbmN5TGF5ZXIo
KSkgeworICAgICAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKworICAgICAgICAvLyBDcmVhdGUgYSBiaXRtYXAgREMgaW4gd2hpY2ggdG8gZHJhdy4KKyAg
ICAgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKGRzdFJlY3Qu
c2l6ZSgpKTsKKworICAgICAgICB2b2lkKiBwaXhlbHMgPSAwOworICAgICAgICBIQklUTUFQIGJp
dG1hcCA9IDo6Q3JlYXRlRElCU2VjdGlvbihOVUxMLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xP
UlMsICZwaXhlbHMsIDAsIDApOworICAgICAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgICAgIHJl
dHVybiAwOworCisgICAgICAgIEhEQyBiaXRtYXBEQyA9IDo6Q3JlYXRlQ29tcGF0aWJsZURDKG1f
ZGF0YS0+bV9oZGMpOworICAgICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywgYml0bWFwKTsK
KworICAgICAgICAvLyBGaWxsIG91ciBidWZmZXIgd2l0aCBjbGVhciBpZiB3ZSdyZSBnb2luZyB0
byBhbHBoYSBibGVuZC4KKyAgICAgICAgaWYgKHN1cHBvcnRBbHBoYUJsZW5kKQorICAgICAgICAg
ICBmaWxsV2l0aENsZWFyQ29sb3IoYml0bWFwKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2Ug
Y2FuIGRvIHdvcmxkIHRyYW5zZm9ybXMuCisgICAgICAgIFNldEdyYXBoaWNzTW9kZShiaXRtYXBE
QywgR01fQURWQU5DRUQpOworCisgICAgICAgIC8vIEFwcGx5IGEgdHJhbnNsYXRpb24gdG8gb3Vy
IGNvbnRleHQgc28gdGhhdCB0aGUgZHJhd2luZyBkb25lIHdpbGwgYmUgYXQgKDAsMCkgb2YgdGhl
IGJpdG1hcC4KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRlKDEuMGYsIDAu
MGYsIDAuMGYsIDEuMGYsIC1kc3RSZWN0LngoKSwgLWRzdFJlY3QueSgpKTsKKyAgICAgICAgWEZP
Uk0geGZvcm0gPSB0cmFuc2xhdGU7CisKKyAgICAgICAgOjpTZXRXb3JsZFRyYW5zZm9ybShiaXRt
YXBEQywgJnhmb3JtKTsKKworICAgICAgICByZXR1cm4gYml0bWFwREM7CisgICAgfQorCisgICAg
bV9kYXRhLT5mbHVzaCgpOworICAgIG1fZGF0YS0+c2F2ZSgpOworICAgIHJldHVybiBtX2RhdGEt
Pm1faGRjOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2F2ZSgp
CiB7CiAgICAgaWYgKCFtX2hkYykKQEAgLTg1LDEzICsxNjgsMTAgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OnNjYQogewogICAgIGlmICghbV9oZGMpCiAgICAgICAgIHJl
dHVybjsKLSAgICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gc2l6ZS53aWR0aCgpOwot
ICAgIHhmb3JtLmVNMTIgPSAwLjBmOwotICAgIHhmb3JtLmVNMjEgPSAwLjBmOwotICAgIHhmb3Jt
LmVNMjIgPSBzaXplLmhlaWdodCgpOwotICAgIHhmb3JtLmVEeCA9IDAuMGY7Ci0gICAgeGZvcm0u
ZUR5ID0gMC4wZjsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlKHNpemUud2lkdGgo
KSwgMC4wZiwgMC4wZiwgc2l6ZS5oZWlnaHQoKSwgMC4wZiwgMC4wZik7CisKKyAgICBYRk9STSB4
Zm9ybSA9IHNjYWxlOwogICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1X
VF9MRUZUTVVMVElQTFkpOwogfQogCkBAIC0xMDIsMTMgKzE4MiwxMCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAgICAgZmxvYXQgcmFkaWFuc0FuZ2xlID0gZGVn
cmVlc0FuZ2xlICogZGVnMnJhZDsKICAgICBmbG9hdCBjb3NBbmdsZSA9IGNvc2YocmFkaWFuc0Fu
Z2xlKTsKICAgICBmbG9hdCBzaW5BbmdsZSA9IHNpbmYocmFkaWFuc0FuZ2xlKTsKLSAgICBYRk9S
TSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gY29zQW5nbGU7Ci0gICAgeGZvcm0uZU0xMiA9IC1z
aW5BbmdsZTsKLSAgICB4Zm9ybS5lTTIxID0gc2luQW5nbGU7Ci0gICAgeGZvcm0uZU0yMiA9IGNv
c0FuZ2xlOwotICAgIHhmb3JtLmVEeCA9IDAuMGY7Ci0gICAgeGZvcm0uZUR5ID0gMC4wZjsKKwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0ZShjb3NBbmdsZSwgLXNpbkFuZ2xlLCBzaW5B
bmdsZSwgY29zQW5nbGUsIDAuMGYsIDAuMGYpOworCisgICAgWEZPUk0geGZvcm0gPSByb3RhdGU7
CiAgICAgTW9kaWZ5V29ybGRUcmFuc2Zvcm0obV9oZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBM
WSk7CiB9CiAKQEAgLTExNiwxMyArMTkzLDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjp0cmEKIHsKICAgICBpZiAoIW1faGRjKQogICAgICAgICByZXR1cm47Ci0gICAg
WEZPUk0geGZvcm07Ci0gICAgeGZvcm0uZU0xMSA9IDEuMGY7Ci0gICAgeGZvcm0uZU0xMiA9IDAu
MGY7Ci0gICAgeGZvcm0uZU0yMSA9IDAuMGY7Ci0gICAgeGZvcm0uZU0yMiA9IDEuMGY7Ci0gICAg
eGZvcm0uZUR4ID0geDsKLSAgICB4Zm9ybS5lRHkgPSB5OworCisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNsYXRlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYsIHgsIHkpOworCisgICAgWEZP
Uk0geGZvcm0gPSB0cmFuc2xhdGU7CisgICAgTW9kaWZ5V29ybGRUcmFuc2Zvcm0obV9oZGMsICZ4
Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpjb25jYXRDVE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSkKK3sKKyAgICBpZiAoIW1faGRjKQorICAgICAgICByZXR1cm47CisKKyAgICBYRk9STSB4Zm9y
bSA9IHRyYW5zZm9ybTsKKwogICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0s
IE1XVF9MRUZUTVVMVElQTFkpOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRy
aXhXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBYRk9STSgp
IGNvbnN0Cit7CisgICAgWEZPUk0geGZvcm07CisgICAgeGZvcm0uZU0xMSA9IGEoKTsKKyAgICB4
Zm9ybS5lTTEyID0gYigpOworICAgIHhmb3JtLmVNMjEgPSBjKCk7CisgICAgeGZvcm0uZU0yMiA9
IGQoKTsKKyAgICB4Zm9ybS5lRHggPSBlKCk7CisgICAgeGZvcm0uZUR5ID0gZigpOworCisgICAg
cmV0dXJuIHhmb3JtOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9CaXRtYXBJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9CaXRtYXBJbmZvLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0JpdG1hcEluZm8uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVu
dCBGdWxnaGFtCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQklUTUFQSU5GTyBiaXRtYXBJbmZvRm9yU2l6ZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvOworICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpU2l6ZSAgICAgICAgICA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsKKyAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoICAgICAgICAgPSB3aWR0aDsKKyAgICBiaXRtYXBJ
bmZvLmJtaUhlYWRlci5iaUhlaWdodCAgICAgICAgPSBoZWlnaHQ7CisgICAgYml0bWFwSW5mby5i
bWlIZWFkZXIuYmlQbGFuZXMgICAgICAgID0gMTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5i
aUJpdENvdW50ICAgICAgPSAzMjsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNz
aW9uICAgPSBCSV9SR0I7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgICAg
ID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOworICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7CisgICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlDbHJVc2VkICAgICAgID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUNsckltcG9ydGFudCAgPSAwOworCisgICAgcmV0dXJuIGJpdG1hcEluZm87Cit9CisKK0JJ
VE1BUElORk8gQml0bWFwSW5mbzo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICBy
ZXR1cm4gYml0bWFwSW5mb0ZvclNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30K
KworQklUTUFQSU5GTyBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgcmV0dXJuIGJpdG1hcEluZm9Gb3JTaXplKHNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9CaXRtYXBJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQml0bWFwSW5mby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQml0
bWFwSW5mby5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBCcmVudCBGdWxnaGFtCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQml0bWFwSW5mb19oCisjZGVmaW5lIEJpdG1hcEluZm9faAorCisj
aW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgIkludFNpemUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdHJ1Y3QgQml0bWFwSW5mbyA6IHB1YmxpYyBCSVRNQVBJTkZPIHsKKyAgICBz
dGF0aWMgQklUTUFQSU5GTyBjcmVhdGUoY29uc3QgSW50U2l6ZSYpOworICAgIHN0YXRpYyBCSVRN
QVBJTkZPIGNyZWF0ZUJvdHRvbVVwKGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJpdG1hcEluZm9faApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAkocmV2aXNpb24gNDQ3ODEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKIAorI2lu
Y2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC00NCwxNiArNDUsMTAg
QEAgdm9pZCBkZWFsbG9jQ29udGV4dChDR0NvbnRleHRSZWYgdGFyZ2V0KQogCiBIQklUTUFQIGFs
bG9jSW1hZ2UoSERDIGRjLCBJbnRTaXplIHNpemUsIENHQ29udGV4dFJlZiAqdGFyZ2V0UmVmKQog
ewotICAgIEhCSVRNQVAgaGJtcDsKLSAgICBCSVRNQVBJTkZPIGJtcEluZm8gPSB7MH07Ci0gICAg
Ym1wSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAg
IGJtcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgYm1wSW5mby5i
bWlIZWFkZXIuYmlIZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIGJtcEluZm8uYm1pSGVhZGVy
LmJpUGxhbmVzID0gMTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMzI7Ci0g
ICAgYm1wSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKKyAgICBCSVRNQVBJ
TkZPIGJtcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoc2l6ZSk7CisKICAgICBMUFZPSUQgYml0
czsKLSAgICBoYm1wID0gQ3JlYXRlRElCU2VjdGlvbihkYywgJmJtcEluZm8sIERJQl9SR0JfQ09M
T1JTLCAmYml0cywgMCwgMCk7CisgICAgSEJJVE1BUCBoYm1wID0gQ3JlYXRlRElCU2VjdGlvbihk
YywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCk7CiAKICAgICBpZiAoIXRh
cmdldFJlZikKICAgICAgICAgcmV0dXJuIGhibXA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA0NDc4MSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogCisj
aW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTQ5LDE1ICs1MCw3
IEBAIHZvaWQgZGVhbGxvY0NvbnRleHQoQ2Fpcm9Db250ZXh0UmVmIHRhcmcKIAogSEJJVE1BUCBh
bGxvY0ltYWdlKEhEQyBkYywgSW50U2l6ZSBzaXplLCBDYWlyb0NvbnRleHRSZWYqIHRhcmdldFJl
ZikKIHsKLSAgICBCSVRNQVBJTkZPIGJtcEluZm8gPSB7MH07Ci0gICAgYm1wSW5mby5ibWlIZWFk
ZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgIGJtcEluZm8uYm1pSGVh
ZGVyLmJpV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlIZWln
aHQgPSBzaXplLmhlaWdodCgpOyAvLyBNdXN0IGJlIHBvc2l0aXZlIQotICAgIGJtcEluZm8uYm1p
SGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0g
MzI7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKLSAgICBi
bXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOyAvLyB1bnVzZWQKLSAgICBibXBJbmZvLmJt
aUhlYWRlci5iaUNsckltcG9ydGFudCA9IDA7CisgICAgQklUTUFQSU5GTyBibXBJbmZvID0gQml0
bWFwSW5mbzo6Y3JlYXRlKHNpemUpOwogCiAgICAgTFBWT0lEIGJpdHM7CiAgICAgSEJJVE1BUCBo
Ym1wID0gQ3JlYXRlRElCU2VjdGlvbihkYywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmYml0
cywgMCwgMCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2
aXNpb24gNDQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlBhc3RlYm9hcmQuaCIKIAorI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRl
ICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKQEAgLTIwMSwxMyArMjAyLDggQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIEhCSVRNQVAgcmVzdWx0Qml0bWFwID0gQ3JlYXRlQ29t
cGF0aWJsZUJpdG1hcChkYywgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CiAgICAg
SEJJVE1BUCBvbGRCaXRtYXAgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLCBy
ZXN1bHRCaXRtYXApOwogCi0gICAgQklUTUFQSU5GTyBibUluZm8gPSB7MH07Ci0gICAgYm1JbmZv
LmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYm1JbmZv
LmJtaUhlYWRlci5iaVdpZHRoID0gaW1hZ2UtPndpZHRoKCk7Ci0gICAgYm1JbmZvLmJtaUhlYWRl
ci5iaUhlaWdodCA9IGltYWdlLT5oZWlnaHQoKTsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpUGxh
bmVzID0gMTsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBibUlu
Zm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgQklUTUFQSU5GTyBibUlu
Zm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoaW1hZ2UtPnNpemUoKSk7CisKICAgICBIQklUTUFQIGNv
cmVCaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1JbmZvLCBESUJfUkdCX0NPTE9SUywg
MCwgMCwgMCk7CiAgICAgSEJJVE1BUCBvbGRTb3VyY2UgPSAoSEJJVE1BUClTZWxlY3RPYmplY3Qo
c291cmNlREMsIGNvcmVCaXRtYXApOwogICAgIGltYWdlLT5nZXRIQklUTUFQKGNvcmVCaXRtYXAp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA0NDc4
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQb3B1
cE1lbnUuaCIKIAorI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgpAQCAt
NDUxLDE4ICs0NTIsNyBAQCB2b2lkIFBvcHVwTWVudTo6cGFpbnQoY29uc3QgSW50UmVjdCYgZGFt
CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFtX2JtcCkgewotICAgICAgICBCSVRNQVBJTkZP
IGJpdG1hcEluZm87Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSAgICAgICAg
ICA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlXaWR0aCAgICAgICAgID0gY2xpZW50UmVjdCgpLndpZHRoKCk7IAotICAgICAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCAgICAgICAgPSAtY2xpZW50UmVjdCgpLmhlaWdodCgp
OwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyAgICAgICAgPSAxOwotICAg
ICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ICAgICAgPSAzMjsKLSAgICAgICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiAgID0gQklfUkdCOwotICAgICAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFnZSAgICAgPSAwOwotICAgICAgICBiaXRtYXBJ
bmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJt
aUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUNsclVzZWQgICAgICAgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNs
ckltcG9ydGFudCAgPSAwOworICAgICAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm8gPSBCaXRtYXBJ
bmZvOjpjcmVhdGVCb3R0b21VcChjbGllbnRSZWN0KCkuc2l6ZSgpKTsKIAogICAgICAgICB2b2lk
KiBwaXhlbHMgPSAwOwogICAgICAgICBtX2JtcCA9IDo6Q3JlYXRlRElCU2VjdGlvbihtX0RDLCAm
Yml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApOwo=
</data>
<flag name="review"
          id="16109"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31456</attachid>
            <date>2009-06-17 16:04:46 -0700</date>
            <delta_ts>2009-06-17 16:56:46 -0700</delta_ts>
            <desc>Part 1 (XFORM operator)</desc>
            <filename>add_xform.patch</filename>
            <type>text/plain</type>
            <size>3979</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIGEgZmV3IGNvbW1vbiByb3V0aW5lcyBpbiB0aGUgdmFyaW91cyBXaW5kb3dzIHBv
cnRzCisgICAgICAgIGFuZCByZWR1Y2Ugc29tZSBkdXBsaWNhdGVkIGNvZGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQyNS4KKworICAgICAgICBD
cmVhdGUgVHJhbnNmb3JtYXRpb25NYXRyaXggWEZPUk0gY2FzdGluZyBvcGVyYXRvciwgYW5kCisg
ICAgICAgIHN3aXRjaCB2YXJpb3VzIFhGT1JNIHN0cnVjdHVyZSB1c2VzIHRvIHV0aWxpemUgaXQu
CisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3Ig
WEZPUk0pOiBOZXcgb3BlcmF0b3IKKwogMjAwOS0wNi0xNyAgRGF2aWQgTGV2aW4gIDxsZXZpbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIHdpbmRvd3MgYnVpbGQuCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQ0NzgxKQorKysg
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTgzNTEsNiArMTgzNTksMTAgQEAKIAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxl
DQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cVHJhbnNmb3Jt
YXRpb25NYXRyaXhXaW4uY3BwIg0KKwkJCQkJCT4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxl
DQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cVW5pc2NyaWJl
Q29udHJvbGxlci5jcHAiDQogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oCShyZXZpc2lvbiA0NDc4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDMsNiArMzAzLDEwIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciB3eEdyYXBoaWNzTWF0cml4KCkg
Y29uc3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICBvcGVyYXRvciBYRk9STSgp
IGNvbnN0OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgLy8gbXVsdGlwbHkgcGFzc2VkIDJEIHBv
aW50IGJ5IG1hdHJpeCAoYXNzdW1lIHo9MCkKICAgICB2b2lkIG11bHRWZWNNYXRyaXgoZG91Ymxl
IHgsIGRvdWJsZSB5LCBkb3VibGUmIGRzdFgsIGRvdWJsZSYgZHN0WSkgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRp
b25NYXRyaXhXaW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybWF0aW9u
TWF0cml4OjpvcGVyYXRvciBYRk9STSgpIGNvbnN0Cit7CisgICAgWEZPUk0geGZvcm07CisgICAg
eGZvcm0uZU0xMSA9IGEoKTsKKyAgICB4Zm9ybS5lTTEyID0gYigpOworICAgIHhmb3JtLmVNMjEg
PSBjKCk7CisgICAgeGZvcm0uZU0yMiA9IGQoKTsKKyAgICB4Zm9ybS5lRHggPSBlKCk7CisgICAg
eGZvcm0uZUR5ID0gZigpOworCisgICAgcmV0dXJuIHhmb3JtOworfQorCit9Cg==
</data>
<flag name="review"
          id="16111"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31457</attachid>
            <date>2009-06-17 16:14:14 -0700</date>
            <delta_ts>2009-06-17 16:41:50 -0700</delta_ts>
            <desc>Part 2: (BitmapInfo structure)</desc>
            <filename>add_bitmapinfo.patch</filename>
            <type>text/plain</type>
            <size>5979</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIGEgZmV3IGNvbW1vbiByb3V0aW5lcyBpbiB0aGUgdmFyaW91cyBXaW5kb3dzIHBv
cnRzCisgICAgICAgIGFuZCByZWR1Y2Ugc29tZSBkdXBsaWNhdGVkIGNvZGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQyNS4KKworICAgICAgICBD
cmVhdGUgbmV3IEJpdG1hcEluZm8gc3RydWN0dXJlIGZvciB1c2UgaW4gbGF0ZXIgcmVmYWN0b3Jp
bmcuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Yml0bWFwSW5mb0ZvclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW5mbzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5oOiBBZGRlZC4KIDIwMDktMDYtMTcgIERhdmlk
IExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBjaHJvbWl1bSB3aW5k
b3dzIGJ1aWxkLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZp
c2lvbiA0NDc4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTE3MjE5LDYgKzE3MjE5LDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxl
Pg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5cQml0bWFw
SW5mby5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cd2luXEJpdG1hcEluZm8uaCINCisJCQkJCT4NCisJCQkJPC9G
aWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5cQlN0
cmluZy5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9CaXRtYXBJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9C
aXRtYXBJbmZvLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0JpdG1h
cEluZm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBCcmVudCBGdWxnaGFtCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQml0bWFwSW5mbyBiaXRtYXBJbmZvRm9yU2l6ZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgQml0bWFwSW5mbyBiaXRtYXBJbmZvOworICAgIGJp
dG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSAgICAgICAgICA9IHNpemVvZihCSVRNQVBJTkZPSEVB
REVSKTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoICAgICAgICAgPSB3aWR0aDsg
CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgICAgICAgID0gaGVpZ2h0OworICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzICAgICAgICA9IDE7CisgICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlCaXRDb3VudCAgICAgID0gMzI7CisgICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlDb21wcmVzc2lvbiAgID0gQklfUkdCOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJp
U2l6ZUltYWdlICAgICA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1l
dGVyID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwor
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCAgICAgICA9IDA7CisgICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgID0gMDsKKworICAgIHJldHVybiBiaXRtYXBJ
bmZvOworfQorCitCaXRtYXBJbmZvIEJpdG1hcEluZm86OmNyZWF0ZShjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgcmV0dXJuIGJpdG1hcEluZm9Gb3JTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7Cit9CisKK0JpdG1hcEluZm8gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgIHJldHVybiBiaXRtYXBJbmZvRm9yU2l6ZShzaXplLndp
ZHRoKCksIC1zaXplLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQml0bWFwSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vd2luL0JpdG1hcEluZm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd2luL0JpdG1hcEluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbQorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpdG1hcEluZm9faAorI2RlZmluZSBCaXRt
YXBJbmZvX2gKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICJJbnRTaXplLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEJpdG1hcEluZm8gOiBwdWJsaWMgQklUTUFQ
SU5GTyB7CisgICAgc3RhdGljIEJpdG1hcEluZm8gY3JlYXRlKGNvbnN0IEludFNpemUmKTsKKyAg
ICBzdGF0aWMgQml0bWFwSW5mbyBjcmVhdGVCb3R0b21VcChjb25zdCBJbnRTaXplJik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCaXRtYXBJbmZvX2gK
</data>
<flag name="review"
          id="16112"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31463</attachid>
            <date>2009-06-17 16:35:17 -0700</date>
            <delta_ts>2009-06-17 16:41:50 -0700</delta_ts>
            <desc>Part 3: (Use BitmapInfo Structure)</desc>
            <filename>refactor_bitmap.patch</filename>
            <type>text/plain</type>
            <size>9874</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIGEgZmV3IGNvbW1vbiByb3V0aW5lcyBpbiB0aGUgdmFyaW91cyBXaW5kb3dzIHBv
cnRzCisgICAgICAgIGFuZCByZWR1Y2Ugc29tZSBkdXBsaWNhdGVkIGNvZGUuCisKKyAgICAgICAg
UmVmYWN0b3IgdXNlIG9mIEJJVE1BUElORk8gZm9yIHRoZSBuZXcgQml0bWFwSW5mbyBzdHJ1Y3R1
cmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dX
aW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
YWlyb1dpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0
aW9uTWF0cml4V2luLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6b3BlcmF0b3IgWEZPUk0pOiBOZXcgb3BlcmF0b3IKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWxsb2NJbWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmFsbG9jSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJk
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UG9wdXBNZW51OjpwYWludCk6CisKIDIwMDktMDYtMTcgIERhdmlkIExldmluICA8bGV2aW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBjaHJvbWl1bSB3aW5kb3dzIGJ1aWxkLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAkocmV2aXNpb24gNDQ3ODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
IAorI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogI2luY2x1ZGUgIlBhdGguaCIKIApAQCAtODUsMTggKzg2LDcgQEAgSERDIEdyYXBoaWNz
Q29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoYwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAgICAgLy8gQ3JlYXRlIGEgYml0bWFwIERDIGluIHdoaWNoIHRvIGRyYXcuCi0gICAgICAgIEJJ
VE1BUElORk8gYml0bWFwSW5mbzsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXpl
ICAgICAgICAgID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgICAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaVdpZHRoICAgICAgICAgPSBkc3RSZWN0LndpZHRoKCk7IAotICAgICAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCAgICAgICAgPSBkc3RSZWN0LmhlaWdodCgpOwot
ICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyAgICAgICAgPSAxOwotICAgICAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ICAgICAgPSAzMjsKLSAgICAgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiAgID0gQklfUkdCOwotICAgICAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFnZSAgICAgPSAwOwotICAgICAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5i
aUNsclVzZWQgICAgICAgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNscklt
cG9ydGFudCAgPSAwOworICAgICAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZv
OjpjcmVhdGUoZHN0UmVjdC5zaXplKCkpOwogCiAgICAgICAgIHZvaWQqIHBpeGVscyA9IDA7CiAg
ICAgICAgIEhCSVRNQVAgYml0bWFwID0gOjpDcmVhdGVESUJTZWN0aW9uKE5VTEwsICZiaXRtYXBJ
bmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywgMCwgMCk7CkBAIC0xNzQsMTggKzE2NCw4IEBA
IEdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0IKICAgICA6IG1faGRjKDAp
CiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87Ci0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwot
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBtX3NpemUud2lkdGgoKTsgCi0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpQml0Q291bnQgPSAzMjsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9u
ID0gQklfUkdCOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlID0gMDsKLSAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlDbHJVc2VkID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9ydGFu
dCA9IDA7CisgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRlKG1f
c2l6ZSk7CisKIAogICAgIG1fYml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5m
bywgRElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9iaXRtYXBCdWZm
ZXIpLCAwLCAwKTsKICAgICBpZiAoIW1fYml0bWFwKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAko
cmV2aXNpb24gNDQ3ODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2luY2x1
ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2lu
Y2x1ZGUgIlBhdGguaCIKIApAQCAtNTksMjQgKzYwLDYgQEAgc3RhdGljIGNhaXJvX3QqIGNyZWF0
ZUNhaXJvQ29udGV4dFdpdGhIRAogICAgIHJldHVybiBjb250ZXh0OwogfQogCi1zdGF0aWMgQklU
TUFQSU5GTyBiaXRtYXBJbmZvRm9yU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIEJJ
VE1BUElORk8gYml0bWFwSW5mbzsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUgICAg
ICAgICAgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlXaWR0aCAgICAgICAgID0gc2l6ZS53aWR0aCgpOyAKLSAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaUhlaWdodCAgICAgICAgPSBzaXplLmhlaWdodCgpOwotICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpUGxhbmVzICAgICAgICA9IDE7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlC
aXRDb3VudCAgICAgID0gMzI7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lv
biAgID0gQklfUkdCOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlICAgICA9
IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKLSAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpQ2xyVXNlZCAgICAgICA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIu
YmlDbHJJbXBvcnRhbnQgID0gMDsKLQotICAgIHJldHVybiBiaXRtYXBJbmZvOwotfQotCiBzdGF0
aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCiB7CiAgICAgQklUTUFQ
IGJtcEluZm87CkBAIC0xMTMsNyArOTYsNyBAQCBIREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5k
b3dzQ29udGV4dChjCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBDcmVhdGUg
YSBiaXRtYXAgREMgaW4gd2hpY2ggdG8gZHJhdy4KLSAgICAgICAgQklUTUFQSU5GTyBiaXRtYXBJ
bmZvID0gYml0bWFwSW5mb0ZvclNpemUoZHN0UmVjdC5zaXplKCkpOworICAgICAgICBCSVRNQVBJ
TkZPIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoZHN0UmVjdC5zaXplKCkpOwogCiAg
ICAgICAgIHZvaWQqIHBpeGVscyA9IDA7CiAgICAgICAgIEhCSVRNQVAgYml0bWFwID0gOjpDcmVh
dGVESUJTZWN0aW9uKE5VTEwsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywg
MCwgMCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCShyZXZp
c2lvbiA0NDc4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkRyYWdJbWFnZS5oIgogCisjaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKQEAgLTQ0LDE2ICs0NSwxMCBAQCB2b2lkIGRlYWxsb2NDb250ZXh0KENHQ29udGV4
dFJlZiB0YXJnZXQpCiAKIEhCSVRNQVAgYWxsb2NJbWFnZShIREMgZGMsIEludFNpemUgc2l6ZSwg
Q0dDb250ZXh0UmVmICp0YXJnZXRSZWYpCiB7Ci0gICAgSEJJVE1BUCBoYm1wOwotICAgIEJJVE1B
UElORk8gYm1wSW5mbyA9IHswfTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXpl
b2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IHNp
emUud2lkdGgoKTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IHNpemUuaGVpZ2h0
KCk7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwotICAgIGJtcEluZm8uYm1p
SGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNz
aW9uID0gQklfUkdCOworICAgIEJJVE1BUElORk8gYm1wSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0
ZShzaXplKTsKKwogICAgIExQVk9JRCBiaXRzOwotICAgIGhibXAgPSBDcmVhdGVESUJTZWN0aW9u
KGRjLCAmYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKTsKKyAgICBIQklUTUFQ
IGhibXAgPSBDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1wSW5mbywgRElCX1JHQl9DT0xPUlMsICZi
aXRzLCAwLCAwKTsKIAogICAgIGlmICghdGFyZ2V0UmVmKQogICAgICAgICByZXR1cm4gaGJtcDsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlz
aW9uIDQ0Nzg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAKKyNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIgpAQCAtNDksMTUgKzUwLDcgQEAgdm9pZCBkZWFsbG9jQ29udGV4dChDYWlyb0Nv
bnRleHRSZWYgdGFyZwogCiBIQklUTUFQIGFsbG9jSW1hZ2UoSERDIGRjLCBJbnRTaXplIHNpemUs
IENhaXJvQ29udGV4dFJlZiogdGFyZ2V0UmVmKQogewotICAgIEJJVE1BUElORk8gYm1wSW5mbyA9
IHswfTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hF
QURFUik7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IHNpemUud2lkdGgoKTsKLSAg
ICBibXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IHNpemUuaGVpZ2h0KCk7IC8vIE11c3QgYmUg
cG9zaXRpdmUhCi0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwotICAgIGJtcElu
Zm8uYm1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNv
bXByZXNzaW9uID0gQklfUkdCOwotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCA9IDA7
IC8vIHVudXNlZAotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50ID0gMDsKKyAg
ICBCSVRNQVBJTkZPIGJtcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoc2l6ZSk7CiAKICAgICBM
UFZPSUQgYml0czsKICAgICBIQklUTUFQIGhibXAgPSBDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1w
SW5mbywgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
d2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiA0NDc4NikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogCisjaW5jbHVk
ZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDbGlwYm9h
cmRVdGlsaXRpZXNXaW4uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMjAxLDEzICsyMDIs
OCBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgSEJJVE1B
UCByZXN1bHRCaXRtYXAgPSBDcmVhdGVDb21wYXRpYmxlQml0bWFwKGRjLCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpKTsKICAgICBIQklUTUFQIG9sZEJpdG1hcCA9IChIQklUTUFQKVNl
bGVjdE9iamVjdChjb21wYXRpYmxlREMsIHJlc3VsdEJpdG1hcCk7CiAKLSAgICBCSVRNQVBJTkZP
IGJtSW5mbyA9IHswfTsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRN
QVBJTkZPSEVBREVSKTsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBpbWFnZS0+d2lk
dGgoKTsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ID0gaW1hZ2UtPmhlaWdodCgpOwot
ICAgIGJtSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwotICAgIGJtSW5mby5ibWlIZWFkZXIu
YmlCaXRDb3VudCA9IDMyOwotICAgIGJtSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJ
X1JHQjsKKyAgICBCSVRNQVBJTkZPIGJtSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShpbWFnZS0+
c2l6ZSgpKTsKKwogICAgIEhCSVRNQVAgY29yZUJpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oZGMs
ICZibUluZm8sIERJQl9SR0JfQ09MT1JTLCAwLCAwLCAwKTsKICAgICBIQklUTUFQIG9sZFNvdXJj
ZSA9IChIQklUTUFQKVNlbGVjdE9iamVjdChzb3VyY2VEQywgY29yZUJpdG1hcCk7CiAgICAgaW1h
Z2UtPmdldEhCSVRNQVAoY29yZUJpdG1hcCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Q
b3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5jcHAJKHJldmlzaW9uIDQ0Nzg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9w
dXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgogCisjaW5jbHVkZSAiQml0bWFwSW5m
by5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5j
bHVkZSAiRm9udFNlbGVjdG9yLmgiCkBAIC00NTEsMTggKzQ1Miw3IEBAIHZvaWQgUG9wdXBNZW51
OjpwYWludChjb25zdCBJbnRSZWN0JiBkYW0KICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIW1f
Ym1wKSB7Ci0gICAgICAgIEJJVE1BUElORk8gYml0bWFwSW5mbzsKLSAgICAgICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlTaXplICAgICAgICAgID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwot
ICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoICAgICAgICAgPSBjbGllbnRSZWN0
KCkud2lkdGgoKTsgCi0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ICAgICAg
ICA9IC1jbGllbnRSZWN0KCkuaGVpZ2h0KCk7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpUGxhbmVzICAgICAgICA9IDE7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0
Q291bnQgICAgICA9IDMyOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNz
aW9uICAgPSBCSV9SR0I7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdl
ICAgICA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9
IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0g
ICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCAgICAgICA9IDA7Ci0gICAgICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50ICA9IDA7CisgICAgICAgIEJJVE1B
UElORk8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKGNsaWVudFJlY3Qo
KS5zaXplKCkpOwogCiAgICAgICAgIHZvaWQqIHBpeGVscyA9IDA7CiAgICAgICAgIG1fYm1wID0g
OjpDcmVhdGVESUJTZWN0aW9uKG1fREMsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBp
eGVscywgMCwgMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31465</attachid>
            <date>2009-06-17 16:41:50 -0700</date>
            <delta_ts>2009-06-17 17:34:11 -0700</delta_ts>
            <desc>Part 1: BitmapInfo Refactoring</desc>
            <filename>refactor_bitmap.patch</filename>
            <type>text/plain</type>
            <size>15248</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIGEgZmV3IGNvbW1vbiByb3V0aW5lcyBpbiB0aGUgdmFyaW91cyBXaW5kb3dzIHBv
cnRzCisgICAgICAgIGFuZCByZWR1Y2Ugc29tZSBkdXBsaWNhdGVkIGNvZGUuCisKKyAgICAgICAg
UmVmYWN0b3IgdXNlIG9mIEJJVE1BUElORk8gZm9yIHRoZSBuZXcgQml0bWFwSW5mbyBzdHJ1Y3R1
cmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Yml0bWFwSW5mb0ZvclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW5mbzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS93aW4vQml0bWFwSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IgWEZPUk0p
OiBOZXcgb3BlcmF0b3IKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YWxsb2NJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFsbG9jSW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1
cE1lbnVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpwYWludCk6CisKIDIw
MDktMDYtMTcgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZp
eCBjaHJvbWl1bSB3aW5kb3dzIGJ1aWxkLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiA0NDc4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MjE5LDYgKzE3MjE5LDE0IEBACiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVx3aW5cQml0bWFwSW5mby5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cd2luXEJpdG1hcEluZm8uaCINCisJ
CQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVx3aW5cQlN0cmluZy5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q0dXaW4uY3BwCShyZXZpc2lvbiA0NDc4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
CisjaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCkBAIC04NSwxOCArODYsNyBAQCBIREMgR3JhcGhpY3ND
b250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAg
ICAgICAvLyBDcmVhdGUgYSBiaXRtYXAgREMgaW4gd2hpY2ggdG8gZHJhdy4KLSAgICAgICAgQklU
TUFQSU5GTyBiaXRtYXBJbmZvOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUg
ICAgICAgICAgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpV2lkdGggICAgICAgICA9IGRzdFJlY3Qud2lkdGgoKTsgCi0gICAgICAgIGJp
dG1hcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ICAgICAgICA9IGRzdFJlY3QuaGVpZ2h0KCk7Ci0g
ICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzICAgICAgICA9IDE7Ci0gICAgICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgICAgICA9IDMyOwotICAgICAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uICAgPSBCSV9SR0I7Ci0gICAgICAgIGJpdG1h
cEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlICAgICA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVh
ZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJp
Q2xyVXNlZCAgICAgICA9IDA7Ci0gICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1w
b3J0YW50ICA9IDA7CisgICAgICAgIEJJVE1BUElORk8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86
OmNyZWF0ZShkc3RSZWN0LnNpemUoKSk7CiAKICAgICAgICAgdm9pZCogcGl4ZWxzID0gMDsKICAg
ICAgICAgSEJJVE1BUCBiaXRtYXAgPSA6OkNyZWF0ZURJQlNlY3Rpb24oTlVMTCwgJmJpdG1hcElu
Zm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKTsKQEAgLTE3NCwxOCArMTY0LDggQEAg
R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpXaW5kb3dzQgogICAgIDogbV9oZGMoMCkK
ICAgICAsIG1fc2l6ZShzaXplKQogewotICAgIEJJVE1BUElORk8gYml0bWFwSW5mbzsKLSAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0g
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IG1fc2l6ZS53aWR0aCgpOyAKLSAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIu
YmlCaXRDb3VudCA9IDMyOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24g
PSBCSV9SR0I7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOwotICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlZUGVsc1Blck1ldGVyID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUNsclVzZWQgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50
ID0gMDsKKyAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUobV9z
aXplKTsKKwogCiAgICAgbV9iaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZv
LCBESUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2JpdG1hcEJ1ZmZl
ciksIDAsIDApOwogICAgIGlmICghbV9iaXRtYXApCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCShy
ZXZpc2lvbiA0NDc4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dENhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCisjaW5jbHVk
ZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiUGF0aC5oIgogCkBAIC01OSwyNCArNjAsNiBAQCBzdGF0aWMgY2Fpcm9fdCogY3JlYXRl
Q2Fpcm9Db250ZXh0V2l0aEhECiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLXN0YXRpYyBCSVRN
QVBJTkZPIGJpdG1hcEluZm9Gb3JTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgQklU
TUFQSU5GTyBiaXRtYXBJbmZvOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSAgICAg
ICAgICA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaVdpZHRoICAgICAgICAgPSBzaXplLndpZHRoKCk7IAotICAgIGJpdG1hcEluZm8uYm1pSGVh
ZGVyLmJpSGVpZ2h0ICAgICAgICA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlQbGFuZXMgICAgICAgID0gMTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJp
dENvdW50ICAgICAgPSAzMjsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9u
ICAgPSBCSV9SR0I7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgICAgID0g
MDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJp
dG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5mby5i
bWlIZWFkZXIuYmlDbHJVc2VkICAgICAgID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5i
aUNsckltcG9ydGFudCAgPSAwOwotCi0gICAgcmV0dXJuIGJpdG1hcEluZm87Ci19Ci0KIHN0YXRp
YyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKIHsKICAgICBCSVRNQVAg
Ym1wSW5mbzsKQEAgLTExMyw3ICs5Niw3IEBAIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRv
d3NDb250ZXh0KGMKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIC8vIENyZWF0ZSBh
IGJpdG1hcCBEQyBpbiB3aGljaCB0byBkcmF3LgotICAgICAgICBCSVRNQVBJTkZPIGJpdG1hcElu
Zm8gPSBiaXRtYXBJbmZvRm9yU2l6ZShkc3RSZWN0LnNpemUoKSk7CisgICAgICAgIEJJVE1BUElO
Rk8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShkc3RSZWN0LnNpemUoKSk7CiAKICAg
ICAgICAgdm9pZCogcGl4ZWxzID0gMDsKICAgICAgICAgSEJJVE1BUCBiaXRtYXAgPSA6OkNyZWF0
ZURJQlNlY3Rpb24oTlVMTCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAw
LCAwKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0JpdG1hcEluZm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0JpdG1hcEluZm8uY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQml0bWFwSW5mby5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCaXRt
YXBJbmZvIGJpdG1hcEluZm9Gb3JTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBC
aXRtYXBJbmZvIGJpdG1hcEluZm87CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplICAg
ICAgICAgID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOworICAgIGJpdG1hcEluZm8uYm1pSGVh
ZGVyLmJpV2lkdGggICAgICAgICA9IHdpZHRoOyAKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5i
aUhlaWdodCAgICAgICAgPSBoZWlnaHQ7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFu
ZXMgICAgICAgID0gMTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ICAgICAg
PSAzMjsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uICAgPSBCSV9SR0I7
CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgICAgID0gMDsKKyAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOworICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlD
bHJVc2VkICAgICAgID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9ydGFu
dCAgPSAwOworCisgICAgcmV0dXJuIGJpdG1hcEluZm87Cit9CisKK0JpdG1hcEluZm8gQml0bWFw
SW5mbzo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICByZXR1cm4gYml0bWFwSW5m
b0ZvclNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKK30KKworQml0bWFwSW5mbyBC
aXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgcmV0
dXJuIGJpdG1hcEluZm9Gb3JTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9CaXRt
YXBJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vQml0bWFwSW5mby5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQml0bWFwSW5mby5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBG
dWxnaGFtCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQml0bWFwSW5mb19oCisjZGVmaW5lIEJpdG1hcEluZm9faAorCisjaW5jbHVkZSA8d2luZG93
cy5oPgorI2luY2x1ZGUgIkludFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgQml0bWFwSW5mbyA6IHB1YmxpYyBCSVRNQVBJTkZPIHsKKyAgICBzdGF0aWMgQml0bWFwSW5m
byBjcmVhdGUoY29uc3QgSW50U2l6ZSYpOworICAgIHN0YXRpYyBCaXRtYXBJbmZvIGNyZWF0ZUJv
dHRvbVVwKGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEJpdG1hcEluZm9faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFn
ZUNHV2luLmNwcAkocmV2aXNpb24gNDQ3ODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFn
SW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKIAorI2luY2x1ZGUgIkJpdG1hcElu
Zm8uaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC00NCwxNiArNDUsMTAgQEAgdm9pZCBkZWFsbG9j
Q29udGV4dChDR0NvbnRleHRSZWYgdGFyZ2V0KQogCiBIQklUTUFQIGFsbG9jSW1hZ2UoSERDIGRj
LCBJbnRTaXplIHNpemUsIENHQ29udGV4dFJlZiAqdGFyZ2V0UmVmKQogewotICAgIEhCSVRNQVAg
aGJtcDsKLSAgICBCSVRNQVBJTkZPIGJtcEluZm8gPSB7MH07Ci0gICAgYm1wSW5mby5ibWlIZWFk
ZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgIGJtcEluZm8uYm1pSGVh
ZGVyLmJpV2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlIZWln
aHQgPSBzaXplLmhlaWdodCgpOwotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsK
LSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMzI7Ci0gICAgYm1wSW5mby5ibWlI
ZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKKyAgICBCSVRNQVBJTkZPIGJtcEluZm8gPSBC
aXRtYXBJbmZvOjpjcmVhdGUoc2l6ZSk7CisKICAgICBMUFZPSUQgYml0czsKLSAgICBoYm1wID0g
Q3JlYXRlRElCU2VjdGlvbihkYywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmYml0cywgMCwg
MCk7CisgICAgSEJJVE1BUCBoYm1wID0gQ3JlYXRlRElCU2VjdGlvbihkYywgJmJtcEluZm8sIERJ
Ql9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCk7CiAKICAgICBpZiAoIXRhcmdldFJlZikKICAgICAg
ICAgcmV0dXJuIGhibXA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWly
b1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fp
cm9XaW4uY3BwCShyZXZpc2lvbiA0NDc4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJ
bWFnZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogCisjaW5jbHVkZSAiQml0bWFw
SW5mby5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTQ5LDE1ICs1MCw3IEBAIHZvaWQgZGVhbGxv
Y0NvbnRleHQoQ2Fpcm9Db250ZXh0UmVmIHRhcmcKIAogSEJJVE1BUCBhbGxvY0ltYWdlKEhEQyBk
YywgSW50U2l6ZSBzaXplLCBDYWlyb0NvbnRleHRSZWYqIHRhcmdldFJlZikKIHsKLSAgICBCSVRN
QVBJTkZPIGJtcEluZm8gPSB7MH07Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6
ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBz
aXplLndpZHRoKCk7Ci0gICAgYm1wSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSBzaXplLmhlaWdo
dCgpOyAvLyBNdXN0IGJlIHBvc2l0aXZlIQotICAgIGJtcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVz
ID0gMTsKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMzI7Ci0gICAgYm1wSW5m
by5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKLSAgICBibXBJbmZvLmJtaUhlYWRl
ci5iaUNsclVzZWQgPSAwOyAvLyB1bnVzZWQKLSAgICBibXBJbmZvLmJtaUhlYWRlci5iaUNscklt
cG9ydGFudCA9IDA7CisgICAgQklUTUFQSU5GTyBibXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRl
KHNpemUpOwogCiAgICAgTFBWT0lEIGJpdHM7CiAgICAgSEJJVE1BUCBoYm1wID0gQ3JlYXRlRElC
U2VjdGlvbihkYywgJmJtcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmYml0cywgMCwgMCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2aXNpb24gNDQ3ODYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhc3RlYm9h
cmQuaCIKIAorI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAj
aW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzV2luLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
QEAgLTIwMSwxMyArMjAyLDggQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5v
ZGUsIAogICAgIEhCSVRNQVAgcmVzdWx0Qml0bWFwID0gQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcChk
YywgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CiAgICAgSEJJVE1BUCBvbGRCaXRt
YXAgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QoY29tcGF0aWJsZURDLCByZXN1bHRCaXRtYXApOwog
Ci0gICAgQklUTUFQSU5GTyBibUluZm8gPSB7MH07Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaVNp
emUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaVdp
ZHRoID0gaW1hZ2UtPndpZHRoKCk7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IGlt
YWdlLT5oZWlnaHQoKTsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBi
bUluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBibUluZm8uYm1pSGVhZGVyLmJp
Q29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgQklUTUFQSU5GTyBibUluZm8gPSBCaXRtYXBJbmZv
OjpjcmVhdGUoaW1hZ2UtPnNpemUoKSk7CisKICAgICBIQklUTUFQIGNvcmVCaXRtYXAgPSBDcmVh
dGVESUJTZWN0aW9uKGRjLCAmYm1JbmZvLCBESUJfUkdCX0NPTE9SUywgMCwgMCwgMCk7CiAgICAg
SEJJVE1BUCBvbGRTb3VyY2UgPSAoSEJJVE1BUClTZWxlY3RPYmplY3Qoc291cmNlREMsIGNvcmVC
aXRtYXApOwogICAgIGltYWdlLT5nZXRIQklUTUFQKGNvcmVCaXRtYXApOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA0NDc4NikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKIAorI2lu
Y2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgpAQCAtNDUxLDE4ICs0NTIsNyBA
QCB2b2lkIFBvcHVwTWVudTo6cGFpbnQoY29uc3QgSW50UmVjdCYgZGFtCiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKCFtX2JtcCkgewotICAgICAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87Ci0g
ICAgICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSAgICAgICAgICA9IHNpemVvZihCSVRN
QVBJTkZPSEVBREVSKTsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0aCAgICAg
ICAgID0gY2xpZW50UmVjdCgpLndpZHRoKCk7IAotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUhlaWdodCAgICAgICAgPSAtY2xpZW50UmVjdCgpLmhlaWdodCgpOwotICAgICAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyAgICAgICAgPSAxOwotICAgICAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaUJpdENvdW50ICAgICAgPSAzMjsKLSAgICAgICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlDb21wcmVzc2lvbiAgID0gQklfUkdCOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaVNpemVJbWFnZSAgICAgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5i
aVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxz
UGVyTWV0ZXIgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgICAg
ICAgPSAwOwotICAgICAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9ydGFudCAgPSAw
OworICAgICAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0
b21VcChjbGllbnRSZWN0KCkuc2l6ZSgpKTsKIAogICAgICAgICB2b2lkKiBwaXhlbHMgPSAwOwog
ICAgICAgICBtX2JtcCA9IDo6Q3JlYXRlRElCU2VjdGlvbihtX0RDLCAmYml0bWFwSW5mbywgRElC
X1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApOwo=
</data>
<flag name="review"
          id="16120"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31467</attachid>
            <date>2009-06-17 16:56:46 -0700</date>
            <delta_ts>2009-06-17 21:19:21 -0700</delta_ts>
            <desc>Part 2: (Refactor XFORM)</desc>
            <filename>refactor_xform.patch</filename>
            <type>text/plain</type>
            <size>9682</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIGEgZmV3IGNvbW1vbiByb3V0aW5lcyBpbiB0aGUgdmFyaW91cyBXaW5kb3dzIHBv
cnRzCisgICAgICAgIGFuZCByZWR1Y2Ugc29tZSBkdXBsaWNhdGVkIGNvZGUuCisKKyAgICAgICAg
KDEpIENyZWF0ZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBYRk9STSBjYXN0aW5nIG9wZXJhdG9yLCBh
bmQKKyAgICAgICAgICAgIHN3aXRjaCB2YXJpb3VzIFhGT1JNIHN0cnVjdHVyZSB1c2VzIHRvIHV0
aWxpemUgaXQuCisgICAgICAgICgyKSBQdXNoIGNvbmNhdENUTSBjYWxsIHRvIEdyYXBoaWNzQ29u
dGV4dFdpbiBub3cgdGhhdCB0aGUKKyAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNh
biBkaXJlY3RseSBjcmVhdGUgWEZPUk0gKHJhdGhlcgorICAgICAgICAgICAgdGhhbiBjb252ZXJ0
aW5nIHRvIENHQWZmaW5lVHJhbnNmb3JtL2NhaXJvX21hdHJpeF90IGZpcnN0LikKKworICAgICAg
ICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgbmV3IEJpdG1hcEluZm8gc3Ry
dWN0dXJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
YXRpb25NYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDYWlyb1dpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvciBYRk9STSk6IE5ldyBv
cGVyYXRvcgorCiAyMDA5LTA2LTE3ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBGaXggY2hyb21pdW0gd2luZG93cyBidWlsZC4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDQ3ODEpCisrKyBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODM1MSw2ICsxODM1
OSwxMCBAQAogCQkJCQkJPg0KIAkJCQkJPC9GaWxlPg0KIAkJCQkJPEZpbGUNCisJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxUcmFuc2Zvcm1hdGlvbk1hdHJpeFdp
bi5jcHAiDQorCQkJCQkJPg0KKwkJCQkJPC9GaWxlPg0KKwkJCQkJPEZpbGUNCiAJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxVbmlzY3JpYmVDb250cm9sbGVyLmNw
cCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJ
KHJldmlzaW9uIDQ0Nzg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw2ICszMDMsMTAg
QEAgcHVibGljOgogICAgIG9wZXJhdG9yIHd4R3JhcGhpY3NNYXRyaXgoKSBjb25zdDsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIG9wZXJhdG9yIFhGT1JNKCkgY29uc3Q7CisjZW5k
aWYKKwogcHJpdmF0ZToKICAgICAvLyBtdWx0aXBseSBwYXNzZWQgMkQgcG9pbnQgYnkgbWF0cml4
IChhc3N1bWUgej0wKQogICAgIHZvaWQgbXVsdFZlY01hdHJpeChkb3VibGUgeCwgZG91YmxlIHks
IGRvdWJsZSYgZHN0WCwgZG91YmxlJiBkc3RZKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJl
dmlzaW9uIDQ0Nzg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTMgKzEwOCw4IEBAIEhEQyBH
cmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGMKICAgICAgICAgU2V0R3JhcGhpY3NN
b2RlKGJpdG1hcERDLCBHTV9BRFZBTkNFRCk7CiAKICAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xh
dGlvbiB0byBvdXIgY29udGV4dCBzbyB0aGF0IHRoZSBkcmF3aW5nIGRvbmUgd2lsbCBiZSBhdCAo
MCwwKSBvZiB0aGUgYml0bWFwLgotICAgICAgICBYRk9STSB4Zm9ybTsKLSAgICAgICAgeGZvcm0u
ZU0xMSA9IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVNMTIgPSAwLjBmOwotICAgICAgICB4Zm9ybS5l
TTIxID0gMC4wZjsKLSAgICAgICAgeGZvcm0uZU0yMiA9IDEuMGY7Ci0gICAgICAgIHhmb3JtLmVE
eCA9IC1kc3RSZWN0LngoKTsKLSAgICAgICAgeGZvcm0uZUR5ID0gLWRzdFJlY3QueSgpOworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGUoMS4wZiwgMC4wZiwgMC4wZiwgMS4w
ZiwgLWRzdFJlY3QueCgpLCAtZHN0UmVjdC55KCkpOworICAgICAgICBYRk9STSB4Zm9ybSA9IHRy
YW5zbGF0ZTsKICAgICAgICAgOjpTZXRXb3JsZFRyYW5zZm9ybShiaXRtYXBEQywgJnhmb3JtKTsK
IAogICAgICAgICByZXR1cm4gYml0bWFwREM7CkBAIC0yMjgsMjMgKzIwMyw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCgKICAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
bV9kYXRhLT5tX2NnQ29udGV4dCwgQ0dSZWN0TWFrZShwb2ludC54KCksIHBvaW50LnkoKSwgaW1h
Z2UtPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpKSwgY2dJbWFnZS5nZXQo
KSk7ICAgCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb25jYXRD
VE0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAoIW1f
aGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXQgPSB0cmFu
c2Zvcm07Ci0gICAgWEZPUk0geGZvcm07Ci0gICAgeGZvcm0uZU0xMSA9IG1hdC5hOwotICAgIHhm
b3JtLmVNMTIgPSBtYXQuYjsKLSAgICB4Zm9ybS5lTTIxID0gbWF0LmM7Ci0gICAgeGZvcm0uZU0y
MiA9IG1hdC5kOwotICAgIHhmb3JtLmVEeCA9IG1hdC50eDsKLSAgICB4Zm9ybS5lRHkgPSBtYXQu
dHk7Ci0KLSAgICBNb2RpZnlXb3JsZFRyYW5zZm9ybShtX2hkYywgJnhmb3JtLCBNV1RfTEVGVE1V
TFRJUExZKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
Q29sb3ImIGNvbG9yKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA0NDc4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMx
LDEzICsxMTQsMTAgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoYwog
ICAgICAgICBTZXRHcmFwaGljc01vZGUoYml0bWFwREMsIEdNX0FEVkFOQ0VEKTsKIAogICAgICAg
ICAvLyBBcHBseSBhIHRyYW5zbGF0aW9uIHRvIG91ciBjb250ZXh0IHNvIHRoYXQgdGhlIGRyYXdp
bmcgZG9uZSB3aWxsIGJlIGF0ICgwLDApIG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIFhGT1JNIHhm
b3JtOwotICAgICAgICB4Zm9ybS5lTTExID0gMS4wZjsKLSAgICAgICAgeGZvcm0uZU0xMiA9IDAu
MGY7Ci0gICAgICAgIHhmb3JtLmVNMjEgPSAwLjBmOwotICAgICAgICB4Zm9ybS5lTTIyID0gMS4w
ZjsKLSAgICAgICAgeGZvcm0uZUR4ID0gLWRzdFJlY3QueCgpOwotICAgICAgICB4Zm9ybS5lRHkg
PSAtZHN0UmVjdC55KCk7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0ZSgx
LjBmLCAwLjBmLCAwLjBmLCAxLjBmLCAtZHN0UmVjdC54KCksIC1kc3RSZWN0LnkoKSk7CisKKyAg
ICAgICAgWEZPUk0geGZvcm0gPSB0cmFuc2xhdGU7CisKICAgICAgICAgOjpTZXRXb3JsZFRyYW5z
Zm9ybShiaXRtYXBEQywgJnhmb3JtKTsKIAogICAgICAgICByZXR1cm4gYml0bWFwREM7CkBAIC0x
OTQsMjEgKzE3NCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQK
ICAgICA6OkRlbGV0ZU9iamVjdChiaXRtYXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCi17Ci0gICAgY29uc3QgY2Fpcm9fbWF0cml4X3QqIG1hdHJpeCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2Fpcm9fbWF0cml4X3QqPigmdHJhbnNmb3JtKTsKLQotICAgIFhGT1JNIHhm
b3JtOwotICAgIHhmb3JtLmVNMTEgPSBtYXRyaXgtPnh4OwotICAgIHhmb3JtLmVNMTIgPSBtYXRy
aXgtPnh5OwotICAgIHhmb3JtLmVNMjEgPSBtYXRyaXgtPnl4OwotICAgIHhmb3JtLmVNMjIgPSBt
YXRyaXgtPnl5OwotICAgIHhmb3JtLmVEeCA9IG1hdHJpeC0+eDA7Ci0gICAgeGZvcm0uZUR5ID0g
bWF0cml4LT55MDsKLQotICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1X
VF9MRUZUTVVMVElQTFkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6c3luY0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNyKQogewogICAgIGlmICgh
Y3IpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9uIDQ0Nzg2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUs
MTMgKzg1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzY2EKIHsK
ICAgICBpZiAoIW1faGRjKQogICAgICAgICByZXR1cm47Ci0gICAgWEZPUk0geGZvcm07Ci0gICAg
eGZvcm0uZU0xMSA9IHNpemUud2lkdGgoKTsKLSAgICB4Zm9ybS5lTTEyID0gMC4wZjsKLSAgICB4
Zm9ybS5lTTIxID0gMC4wZjsKLSAgICB4Zm9ybS5lTTIyID0gc2l6ZS5oZWlnaHQoKTsKLSAgICB4
Zm9ybS5lRHggPSAwLjBmOwotICAgIHhmb3JtLmVEeSA9IDAuMGY7CisKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBzY2FsZShzaXplLndpZHRoKCksIDAuMGYsIDAuMGYsIHNpemUuaGVpZ2h0KCks
IDAuMGYsIDAuMGYpOworCisgICAgWEZPUk0geGZvcm0gPSBzY2FsZTsKICAgICBNb2RpZnlXb3Js
ZFRyYW5zZm9ybShtX2hkYywgJnhmb3JtLCBNV1RfTEVGVE1VTFRJUExZKTsKIH0KIApAQCAtMTAy
LDEzICs5OSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAg
ICAgZmxvYXQgcmFkaWFuc0FuZ2xlID0gZGVncmVlc0FuZ2xlICogZGVnMnJhZDsKICAgICBmbG9h
dCBjb3NBbmdsZSA9IGNvc2YocmFkaWFuc0FuZ2xlKTsKICAgICBmbG9hdCBzaW5BbmdsZSA9IHNp
bmYocmFkaWFuc0FuZ2xlKTsKLSAgICBYRk9STSB4Zm9ybTsKLSAgICB4Zm9ybS5lTTExID0gY29z
QW5nbGU7Ci0gICAgeGZvcm0uZU0xMiA9IC1zaW5BbmdsZTsKLSAgICB4Zm9ybS5lTTIxID0gc2lu
QW5nbGU7Ci0gICAgeGZvcm0uZU0yMiA9IGNvc0FuZ2xlOwotICAgIHhmb3JtLmVEeCA9IDAuMGY7
Ci0gICAgeGZvcm0uZUR5ID0gMC4wZjsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0
ZShjb3NBbmdsZSwgLXNpbkFuZ2xlLCBzaW5BbmdsZSwgY29zQW5nbGUsIDAuMGYsIDAuMGYpOwor
CisgICAgWEZPUk0geGZvcm0gPSByb3RhdGU7CiAgICAgTW9kaWZ5V29ybGRUcmFuc2Zvcm0obV9o
ZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7CiB9CiAKQEAgLTExNiwxMyArMTEwLDIwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp0cmEKIHsKICAgICBpZiAoIW1f
aGRjKQogICAgICAgICByZXR1cm47Ci0gICAgWEZPUk0geGZvcm07Ci0gICAgeGZvcm0uZU0xMSA9
IDEuMGY7Ci0gICAgeGZvcm0uZU0xMiA9IDAuMGY7Ci0gICAgeGZvcm0uZU0yMSA9IDAuMGY7Ci0g
ICAgeGZvcm0uZU0yMiA9IDEuMGY7Ci0gICAgeGZvcm0uZUR4ID0geDsKLSAgICB4Zm9ybS5lRHkg
PSB5OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRlKDEuMGYsIDAuMGYsIDAu
MGYsIDEuMGYsIHgsIHkpOworCisgICAgWEZPUk0geGZvcm0gPSB0cmFuc2xhdGU7CisgICAgTW9k
aWZ5V29ybGRUcmFuc2Zvcm0obV9oZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjb25jYXRDVE0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBpZiAoIW1faGRjKQorICAgICAg
ICByZXR1cm47CisKKyAgICBYRk9STSB4Zm9ybSA9IHRyYW5zZm9ybTsKKwogICAgIE1vZGlmeVdv
cmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZUTVVMVElQTFkpOwogfQogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3Jt
YXRpb25NYXRyaXhXaW4uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvciBYRk9STSgpIGNvbnN0Cit7CisgICAgWEZPUk0geGZvcm07Cisg
ICAgeGZvcm0uZU0xMSA9IGEoKTsKKyAgICB4Zm9ybS5lTTEyID0gYigpOworICAgIHhmb3JtLmVN
MjEgPSBjKCk7CisgICAgeGZvcm0uZU0yMiA9IGQoKTsKKyAgICB4Zm9ybS5lRHggPSBlKCk7Cisg
ICAgeGZvcm0uZUR5ID0gZigpOworCisgICAgcmV0dXJuIHhmb3JtOworfQorCit9Cg==
</data>
<flag name="review"
          id="16122"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31486</attachid>
            <date>2009-06-17 21:19:21 -0700</date>
            <delta_ts>2009-06-18 13:47:59 -0700</delta_ts>
            <desc>Part 3: (Move common logic to parent)</desc>
            <filename>push.patch</filename>
            <type>text/plain</type>
            <size>10876</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgc29tZSBjb21tb24gZnVuY3Rpb25zIG91dCBvZiBwbGF0Zm9ybSBmaWxlcyBhbmQgaW50
bworICAgICAgICB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQyNS4KKyAgICAgICAgQWRkIGEgbmV3
IHBsYXRmb3JtIGNvbnRleHQgbWV0aG9kIChmbHVzaCkgc28gdGhhdCB0aGUKKyAgICAgICAgZ2V0
V2luZG93c0NvbnRleHQgbWV0aG9kIGNhbiBiZSBjb25zb2xpZGF0ZWQgaW50byB0aGUgY29tbW9u
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFdpbi5jcHAgZmlsZS4KKyAgICAgICAgIAorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNhaXJvLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OmZsdXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDRy5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDogUmVtb3ZlCisgICAgICAgICAgZ2V0V2luZG93Q29u
dGV4dCBtZXRob2QuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENhaXJvV2luLmNwcDogUmVtb3ZlCisgICAgICAgICAgZ2V0V2luZG93Q29udGV4dCBtZXRo
b2QgYW5kIGZpbGxXaXRoQ2xlYXJDb2xvciBtZXRob2RzLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bFdpdGhDbGVhckNvbG9yKTogTW92ZWQgZnJvbSAqQ2Fpcm9XaW4uY3BwCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KTogTW92ZWQKKyAgICAgICAg
ICBmcm9tICpDYWlyb1dpbi5jcHAKKwogMjAwOS0wNi0xNyAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ2Fpcm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgJKHJldmlzaW9uIDQ0
NzkxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDYWlyby5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHB1
YmxpYzoKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgSERDIGZvciBm
b3JtIGNvbnRyb2xzIHRvIGRyYXcgaW4gdGhlIHJpZ2h0IHBsYWNlLgogICAgIHZvaWQgc2F2ZSgp
OwogICAgIHZvaWQgcmVzdG9yZSgpOworICAgIHZvaWQgZmx1c2goKTsKICAgICB2b2lkIGNsaXAo
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKICAgICB2b2lk
IHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwpAQCAtNzgsNiArNzksNyBAQCBwdWJsaWM6CiAgICAg
Ly8gT24gZXZlcnl0aGluZyBlbHNlLCB3ZSBkbyBub3RoaW5nLgogICAgIHZvaWQgc2F2ZSgpIHt9
CiAgICAgdm9pZCByZXN0b3JlKCkge30KKyAgICB2b2lkIGZsdXNoKCkge30KICAgICB2b2lkIGNs
aXAoY29uc3QgRmxvYXRSZWN0Jikge30KICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpIHt9CiAg
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSB7fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlQ0cuaAkocmV2aXNpb24gNDQ3OTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgZG8gbm90aGlu
ZyBvbiBNYWMuCiAgICAgdm9pZCBzYXZlKCkge30KICAgICB2b2lkIHJlc3RvcmUoKSB7fQorICAg
IHZvaWQgZmx1c2goKSB7fQogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSB7fQogICAg
IHZvaWQgY2xpcChjb25zdCBQYXRoJikge30KICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYpIHt9CkBAIC02NCw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBu
ZWVkIHRvIHVwZGF0ZSB0aGUgSERDIGZvciBmb3JtIGNvbnRyb2xzIHRvIGRyYXcgaW4gdGhlIHJp
Z2h0IHBsYWNlLgogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOworICAgIHZv
aWQgZmx1c2goKTsKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBj
bGlwKGNvbnN0IFBhdGgmKTsKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENHV2luLmNwcAkocmV2aXNpb24gNDQ3OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDQ4
ICs3OCw2IEBAIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMKIAogLy8g
RklYTUU6IElzIGl0IHBvc3NpYmxlIHRvIG1lcmdlIGdldFdpbmRvd3NDb250ZXh0IGFuZCBjcmVh
dGVXaW5kb3dzQml0bWFwIGludG8gYSBzaW5nbGUgQVBJCiAvLyBzdWl0YWJsZSBmb3IgYWxsIGNs
aWVudHM/Ci1IREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRS
ZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1h
cCkKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGEgYml0bWFwIGJlIGNyZWF0ZWQgYWxzbyB3aGVu
IGEgc2hhZG93IGlzIHNldD8KLSAgICBpZiAobWF5Q3JlYXRlQml0bWFwICYmIGluVHJhbnNwYXJl
bmN5TGF5ZXIoKSkgewotICAgICAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLQotICAgICAgICAvLyBDcmVhdGUgYSBiaXRtYXAgREMgaW4gd2hpY2ggdG8g
ZHJhdy4KLSAgICAgICAgQml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3JlYXRl
KGRzdFJlY3Quc2l6ZSgpKTsKLQotICAgICAgICB2b2lkKiBwaXhlbHMgPSAwOwotICAgICAgICBI
QklUTUFQIGJpdG1hcCA9IDo6Q3JlYXRlRElCU2VjdGlvbihOVUxMLCAmYml0bWFwSW5mbywgRElC
X1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApOwotICAgICAgICBpZiAoIWJpdG1hcCkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIEhEQyBiaXRtYXBEQyA9IDo6Q3JlYXRlQ29tcGF0
aWJsZURDKG1fZGF0YS0+bV9oZGMpOwotICAgICAgICA6OlNlbGVjdE9iamVjdChiaXRtYXBEQywg
Yml0bWFwKTsKLQotICAgICAgICAvLyBGaWxsIG91ciBidWZmZXIgd2l0aCBjbGVhciBpZiB3ZSdy
ZSBnb2luZyB0byBhbHBoYSBibGVuZC4KLSAgICAgICAgaWYgKHN1cHBvcnRBbHBoYUJsZW5kKSB7
Ci0gICAgICAgICAgICBCSVRNQVAgYm1wSW5mbzsKLSAgICAgICAgICAgIEdldE9iamVjdChiaXRt
YXAsIHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOwotICAgICAgICAgICAgaW50IGJ1ZmZlclNp
emUgPSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0gICAgICAgICAg
ICBtZW1zZXQoYm1wSW5mby5ibUJpdHMsIDAsIGJ1ZmZlclNpemUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiBkbyB3b3JsZCB0cmFuc2Zvcm1zLgotICAgICAgICBT
ZXRHcmFwaGljc01vZGUoYml0bWFwREMsIEdNX0FEVkFOQ0VEKTsKLQotICAgICAgICAvLyBBcHBs
eSBhIHRyYW5zbGF0aW9uIHRvIG91ciBjb250ZXh0IHNvIHRoYXQgdGhlIGRyYXdpbmcgZG9uZSB3
aWxsIGJlIGF0ICgwLDApIG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zbGF0ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmLCAtZHN0UmVjdC54KCksIC1kc3RS
ZWN0LnkoKSk7Ci0gICAgICAgIFhGT1JNIHhmb3JtID0gdHJhbnNsYXRlOwotICAgICAgICA6OlNl
dFdvcmxkVHJhbnNmb3JtKGJpdG1hcERDLCAmeGZvcm0pOwotCi0gICAgICAgIHJldHVybiBiaXRt
YXBEQzsKLSAgICB9Ci0KLSAgICBDR0NvbnRleHRGbHVzaChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7Ci19Ci0KIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50
UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCwgYm9vbCBtYXlDcmVhdGVCaXRt
YXApCiB7CiAgICAgaWYgKG1heUNyZWF0ZUJpdG1hcCAmJiBoZGMgJiYgaW5UcmFuc3BhcmVuY3lM
YXllcigpKSB7CkBAIC0zMTksNCArMjc3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yTWlzc3BlbAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCit7CisgICAgQ0dD
b250ZXh0Rmx1c2gobV9jZ0NvbnRleHQpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3Bw
CShyZXZpc2lvbiA0NDc5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW5j
bHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAj
aW5jbHVkZSAiUGF0aC5oIgogCkBAIC02MCwxNCArNTksNiBAQCBzdGF0aWMgY2Fpcm9fdCogY3Jl
YXRlQ2Fpcm9Db250ZXh0V2l0aEhECiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLXN0YXRpYyB2
b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKLXsKLSAgICBCSVRNQVAgYm1w
SW5mbzsKLSAgICBHZXRPYmplY3QoYml0bWFwLCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsK
LSAgICBpbnQgYnVmZmVyU2l6ZSA9IGJtcEluZm8uYm1XaWR0aEJ5dGVzICogYm1wSW5mby5ibUhl
aWdodDsKLSAgICBtZW1zZXQoYm1wSW5mby5ibUJpdHMsIDAsIGJ1ZmZlclNpemUpOwotfQotCiBH
cmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCiAg
ICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCiAgICAgLCBtX2Rh
dGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSkKQEAgLTg4LDUwICs3OSw2IEBA
IEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYywKICAgICB9CiB9CiAKLUhE
QyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJl
Y3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQsIGJvb2wgbWF5Q3JlYXRlQml0bWFwKQotewotICAg
IC8vIEZJWE1FOiBTaG91bGQgYSBiaXRtYXAgYmUgY3JlYXRlZCBhbHNvIHdoZW4gYSBzaGFkb3cg
aXMgc2V0PwotICAgIGlmIChtYXlDcmVhdGVCaXRtYXAgJiYgaW5UcmFuc3BhcmVuY3lMYXllcigp
KSB7Ci0gICAgICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgIC8vIENyZWF0ZSBhIGJpdG1hcCBEQyBpbiB3aGljaCB0byBkcmF3LgotICAg
ICAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoZHN0UmVjdC5z
aXplKCkpOwotCi0gICAgICAgIHZvaWQqIHBpeGVscyA9IDA7Ci0gICAgICAgIEhCSVRNQVAgYml0
bWFwID0gOjpDcmVhdGVESUJTZWN0aW9uKE5VTEwsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9S
UywgJnBpeGVscywgMCwgMCk7Ci0gICAgICAgIGlmICghYml0bWFwKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICAgICAgSERDIGJpdG1hcERDID0gOjpDcmVhdGVDb21wYXRpYmxlREMobV9k
YXRhLT5tX2hkYyk7Ci0gICAgICAgIDo6U2VsZWN0T2JqZWN0KGJpdG1hcERDLCBiaXRtYXApOwot
Ci0gICAgICAgIC8vIEZpbGwgb3VyIGJ1ZmZlciB3aXRoIGNsZWFyIGlmIHdlJ3JlIGdvaW5nIHRv
IGFscGhhIGJsZW5kLgotICAgICAgICBpZiAoc3VwcG9ydEFscGhhQmxlbmQpCi0gICAgICAgICAg
IGZpbGxXaXRoQ2xlYXJDb2xvcihiaXRtYXApOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBj
YW4gZG8gd29ybGQgdHJhbnNmb3Jtcy4KLSAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGJpdG1hcERD
LCBHTV9BRFZBTkNFRCk7Ci0KLSAgICAgICAgLy8gQXBwbHkgYSB0cmFuc2xhdGlvbiB0byBvdXIg
Y29udGV4dCBzbyB0aGF0IHRoZSBkcmF3aW5nIGRvbmUgd2lsbCBiZSBhdCAoMCwwKSBvZiB0aGUg
Yml0bWFwLgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGUoMS4wZiwgMC4w
ZiwgMC4wZiwgMS4wZiwgLWRzdFJlY3QueCgpLCAtZHN0UmVjdC55KCkpOwotCi0gICAgICAgIFhG
T1JNIHhmb3JtID0gdHJhbnNsYXRlOwotCi0gICAgICAgIDo6U2V0V29ybGRUcmFuc2Zvcm0oYml0
bWFwREMsICZ4Zm9ybSk7Ci0KLSAgICAgICAgcmV0dXJuIGJpdG1hcERDOwotICAgIH0KLQotICAg
IGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRlKG1f
ZGF0YS0+bV9oZGMpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZSk7Ci0gICAgY2Fp
cm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotCi0gICAgbV9kYXRhLT5zYXZlKCk7Ci0KLSAg
ICByZXR1cm4gbV9kYXRhLT5tX2hkYzsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVh
c2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1
cHBvcnRBbHBoYUJsZW5kLCBib29sIG1heUNyZWF0ZUJpdG1hcCkKIHsKICAgICBpZiAoIW1heUNy
ZWF0ZUJpdG1hcCB8fCAhaGRjIHx8ICFpblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKQEAgLTE4NSw0
ICsxMzIsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN5bgogICAg
IFNldEdyYXBoaWNzTW9kZShtX2hkYywgR01fQURWQU5DRUQpOyAvLyBXZSBuZWVkIHRoaXMgY2Fs
bCBmb3IgdGhlbWVzIHRvIGhvbm9yIHdvcmxkIHRyYW5zZm9ybXMuCiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCit7CisgICAgY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlID0gY2Fpcm9fd2luMzJfc3VyZmFjZV9jcmVhdGUobV9oZGMpOworICAgIGNhaXJv
X3N1cmZhY2VfZmx1c2goc3VyZmFjZSk7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZh
Y2UpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9uIDQ0NzkzKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNhaXJvLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGF0aC5oIgpAQCAtNDMsNiArNDQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBTVkdSZXNvdXJjZUltYWdlOwogCitzdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29s
b3IoSEJJVE1BUCBiaXRtYXApCit7CisgICAgQklUTUFQIGJtcEluZm87CisgICAgR2V0T2JqZWN0
KGJpdG1hcCwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7CisgICAgaW50IGJ1ZmZlclNpemUg
PSBibXBJbmZvLmJtV2lkdGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7CisgICAgbWVtc2V0KGJt
cEluZm8uYm1CaXRzLCAwLCBidWZmZXJTaXplKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQ6
OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPm1fdHJhbnNwYXJl
bmN5Q291bnQ7IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEluY2x1ZGVDaGls
ZFdpbmRvd3MoYm9vbCBpbmNsdWRlKQpAQCAtNTUsNiArNjQsNDUgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQ6OnNob3VsZEluY2x1ZGVDaGlsZAogICAgIHJldHVybiBtX2RhdGEtPm1fc2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93czsKIH0KIAorSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0Nv
bnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCwgYm9v
bCBtYXlDcmVhdGVCaXRtYXApCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBhIGJpdG1hcCBiZSBj
cmVhdGVkIGFsc28gd2hlbiBhIHNoYWRvdyBpcyBzZXQ/CisgICAgaWYgKG1heUNyZWF0ZUJpdG1h
cCAmJiBpblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKKyAgICAgICAgaWYgKGRzdFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgYml0bWFw
IERDIGluIHdoaWNoIHRvIGRyYXcuCisgICAgICAgIEJpdG1hcEluZm8gYml0bWFwSW5mbyA9IEJp
dG1hcEluZm86OmNyZWF0ZShkc3RSZWN0LnNpemUoKSk7CisKKyAgICAgICAgdm9pZCogcGl4ZWxz
ID0gMDsKKyAgICAgICAgSEJJVE1BUCBiaXRtYXAgPSA6OkNyZWF0ZURJQlNlY3Rpb24oTlVMTCwg
JmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCAmcGl4ZWxzLCAwLCAwKTsKKyAgICAgICAgaWYg
KCFiaXRtYXApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBIREMgYml0bWFwREMg
PSA6OkNyZWF0ZUNvbXBhdGlibGVEQyhtX2RhdGEtPm1faGRjKTsKKyAgICAgICAgOjpTZWxlY3RP
YmplY3QoYml0bWFwREMsIGJpdG1hcCk7CisKKyAgICAgICAgLy8gRmlsbCBvdXIgYnVmZmVyIHdp
dGggY2xlYXIgaWYgd2UncmUgZ29pbmcgdG8gYWxwaGEgYmxlbmQuCisgICAgICAgIGlmIChzdXBw
b3J0QWxwaGFCbGVuZCkKKyAgICAgICAgICAgZmlsbFdpdGhDbGVhckNvbG9yKGJpdG1hcCk7CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNhbiBkbyB3b3JsZCB0cmFuc2Zvcm1zLgorICAgICAg
ICBTZXRHcmFwaGljc01vZGUoYml0bWFwREMsIEdNX0FEVkFOQ0VEKTsKKworICAgICAgICAvLyBB
cHBseSBhIHRyYW5zbGF0aW9uIHRvIG91ciBjb250ZXh0IHNvIHRoYXQgdGhlIGRyYXdpbmcgZG9u
ZSB3aWxsIGJlIGF0ICgwLDApIG9mIHRoZSBiaXRtYXAuCisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zbGF0ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmLCAtZHN0UmVjdC54KCksIC1k
c3RSZWN0LnkoKSk7CisgICAgICAgIFhGT1JNIHhmb3JtID0gdHJhbnNsYXRlOworCisgICAgICAg
IDo6U2V0V29ybGRUcmFuc2Zvcm0oYml0bWFwREMsICZ4Zm9ybSk7CisKKyAgICAgICAgcmV0dXJu
IGJpdG1hcERDOworICAgIH0KKworICAgIG1fZGF0YS0+Zmx1c2goKTsKKyAgICBtX2RhdGEtPnNh
dmUoKTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX2hkYzsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnNhdmUoKQogewogICAgIGlmICghbV9oZGMpCg==
</data>
<flag name="review"
          id="16138"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31507</attachid>
            <date>2009-06-18 14:07:28 -0700</date>
            <delta_ts>2009-06-18 17:31:28 -0700</delta_ts>
            <desc>Part 4: (Final cleanups)</desc>
            <filename>part4.patch</filename>
            <type>text/plain</type>
            <size>6327</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDgyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpbmFsIGNsZWFudXBzIGluIHRoaXMgcmVmYWN0b3Jpbmc6CisgICAgICAgICgxKSBNb3ZlIFdp
bmRvd3NCaXRtYXAgaW1wbGVtZW50YXRpb24gZnJvbSBDRy1zcGVjaWZpYyBmaWxlIHRvCisgICAg
ICAgICAgICB0aGUgcGxhdGZvcm0tY29tbW9uIEdyYXBoaWNzQ29udGV4dFdpbi5jcHAsIHNpbmNl
IGl0IGlzCisgICAgICAgICAgICBlcXVhbGx5IHVzZWZ1bCBvbiBib3RoIHBsYXRmb3Jtcy4KKyAg
ICAgICAgKDIpIFJldmlzZSB0aGUgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9naWMgYXMgc3VnZ2Vz
dGVkIGJ5CisgICAgICAgICAgICBBZGFtIFJvYmVuIGluIGhpcyByZXZpZXcgY29tbWVudHMgdG8g
UGFydCAjMiBvZiB0aGlzCisgICAgICAgICAgICByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXApOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjp+V2luZG93
c0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVdpbmRv
d3NCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6Y29uY2F0Q1RNKToKKwogMjAwOS0wNi0xNyAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiA0NDgyMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCkBAIC0xMTMsNDEgKzExMiw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKICAgICBtX2RhdGEtPnJlc3Rv
cmUoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpXaW5kb3dzQml0bWFw
KEhEQyBoZGMsIEludFNpemUgc2l6ZSkKLSAgICA6IG1faGRjKDApCi0gICAgLCBtX3NpemUoc2l6
ZSkKLXsKLSAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUobV9z
aXplKTsKLQotICAgIG1fYml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywg
RElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9iaXRtYXBCdWZmZXIp
LCAwLCAwKTsKLSAgICBpZiAoIW1fYml0bWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hk
YyA9IENyZWF0ZUNvbXBhdGlibGVEQyhoZGMpOwotICAgIFNlbGVjdE9iamVjdChtX2hkYywgbV9i
aXRtYXApOwotCi0gICAgQklUTUFQIGJtcEluZm87Ci0gICAgR2V0T2JqZWN0KG1fYml0bWFwLCBz
aXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKLSAgICBtX2J5dGVzUGVyUm93ID0gYm1wSW5mby5i
bVdpZHRoQnl0ZXM7Ci0gICAgbV9iaXRtYXBCdWZmZXJMZW5ndGggPSBibXBJbmZvLmJtV2lkdGhC
eXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7Ci0KLSAgICBTZXRHcmFwaGljc01vZGUobV9oZGMsIEdN
X0FEVkFOQ0VEKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjp+V2luZG93
c0JpdG1hcCgpCi17Ci0gICAgaWYgKCFtX2JpdG1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RGVsZXRlREMobV9oZGMpOwotICAgIERlbGV0ZU9iamVjdChtX2JpdG1hcCk7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dDo6V2luZG93c0JpdG1hcCogR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dz
Qml0bWFwKEludFNpemUgc2l6ZSkKLXsKLSAgICByZXR1cm4gbmV3IFdpbmRvd3NCaXRtYXAobV9k
YXRhLT5tX2hkYywgc2l6ZSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93
c0JpdG1hcChXaW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewog
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGRldmljZVJHQihBZG9wdENGLCBDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9uIDQ0ODIxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNDEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnNo
b3VsZEluY2x1ZGVDaGlsZAogICAgIHJldHVybiBtX2RhdGEtPm1fc2hvdWxkSW5jbHVkZUNoaWxk
V2luZG93czsKIH0KIAorR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpXaW5kb3dzQml0
bWFwKEhEQyBoZGMsIEludFNpemUgc2l6ZSkKKyAgICA6IG1faGRjKDApCisgICAgLCBtX3NpemUo
c2l6ZSkKK3sKKyAgICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUo
bV9zaXplKTsKKworICAgIG1fYml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5m
bywgRElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9iaXRtYXBCdWZm
ZXIpLCAwLCAwKTsKKyAgICBpZiAoIW1fYml0bWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2hkYyA9IENyZWF0ZUNvbXBhdGlibGVEQyhoZGMpOworICAgIFNlbGVjdE9iamVjdChtX2hkYywg
bV9iaXRtYXApOworCisgICAgQklUTUFQIGJtcEluZm87CisgICAgR2V0T2JqZWN0KG1fYml0bWFw
LCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKKyAgICBtX2J5dGVzUGVyUm93ID0gYm1wSW5m
by5ibVdpZHRoQnl0ZXM7CisgICAgbV9iaXRtYXBCdWZmZXJMZW5ndGggPSBibXBJbmZvLmJtV2lk
dGhCeXRlcyAqIGJtcEluZm8uYm1IZWlnaHQ7CisKKyAgICBTZXRHcmFwaGljc01vZGUobV9oZGMs
IEdNX0FEVkFOQ0VEKTsKK30KKworR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjp+V2lu
ZG93c0JpdG1hcCgpCit7CisgICAgaWYgKCFtX2JpdG1hcCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRGVsZXRlREMobV9oZGMpOworICAgIERlbGV0ZU9iamVjdChtX2JpdG1hcCk7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcCogR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5k
b3dzQml0bWFwKEludFNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFdpbmRvd3NCaXRtYXAo
bV9kYXRhLT5tX2hkYywgc2l6ZSk7Cit9CisKIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRv
d3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQs
IGJvb2wgbWF5Q3JlYXRlQml0bWFwKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgYSBiaXRtYXAg
YmUgY3JlYXRlZCBhbHNvIHdoZW4gYSBzaGFkb3cgaXMgc2V0PwpAQCAtOTAsOCArMTI1LDcgQEAg
SERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoYwogICAgICAgICBTZXRHcmFw
aGljc01vZGUoYml0bWFwREMsIEdNX0FEVkFOQ0VEKTsKIAogICAgICAgICAvLyBBcHBseSBhIHRy
YW5zbGF0aW9uIHRvIG91ciBjb250ZXh0IHNvIHRoYXQgdGhlIGRyYXdpbmcgZG9uZSB3aWxsIGJl
IGF0ICgwLDApIG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zbGF0ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmLCAtZHN0UmVjdC54KCksIC1kc3RSZWN0Lnko
KSk7Ci0gICAgICAgIFhGT1JNIHhmb3JtID0gdHJhbnNsYXRlOworICAgICAgICBYRk9STSB4Zm9y
bSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC1kc3RSZWN0LngoKSwgLWRzdFJl
Y3QueSgpKTsKIAogICAgICAgICA6OlNldFdvcmxkVHJhbnNmb3JtKGJpdG1hcERDLCAmeGZvcm0p
OwogCkBAIC0xMzQsOSArMTY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OnNjYQogICAgIGlmICghbV9oZGMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHNjYWxlKHNpemUud2lkdGgoKSwgMC4wZiwgMC4wZiwgc2l6ZS5oZWlnaHQo
KSwgMC4wZiwgMC4wZik7Ci0KLSAgICBYRk9STSB4Zm9ybSA9IHNjYWxlOworICAgIFhGT1JNIHhm
b3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS5zY2FsZShzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpOwogICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZU
TVVMVElQTFkpOwogfQogCkBAIC0xNDQsMTMgKzE3Niw3IEBAIHN0YXRpYyBjb25zdCBkb3VibGUg
ZGVnMnJhZCA9IDAuMDE3NDUzMjkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OnJvdGF0ZShmbG9hdCBkZWdyZWVzQW5nbGUpCiB7Ci0gICAgZmxvYXQgcmFkaWFuc0FuZ2xl
ID0gZGVncmVlc0FuZ2xlICogZGVnMnJhZDsKLSAgICBmbG9hdCBjb3NBbmdsZSA9IGNvc2YocmFk
aWFuc0FuZ2xlKTsKLSAgICBmbG9hdCBzaW5BbmdsZSA9IHNpbmYocmFkaWFuc0FuZ2xlKTsKLQot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0ZShjb3NBbmdsZSwgLXNpbkFuZ2xlLCBzaW5B
bmdsZSwgY29zQW5nbGUsIDAuMGYsIDAuMGYpOwotCi0gICAgWEZPUk0geGZvcm0gPSByb3RhdGU7
CisgICAgWEZPUk0geGZvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnJvdGF0ZShkZWdyZWVz
QW5nbGUpOwogICAgIE1vZGlmeVdvcmxkVHJhbnNmb3JtKG1faGRjLCAmeGZvcm0sIE1XVF9MRUZU
TVVMVElQTFkpOwogfQogCkBAIC0xNTksOSArMTg1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnRyYQogICAgIGlmICghbV9oZGMpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBm
LCB4LCB5KTsKLQotICAgIFhGT1JNIHhmb3JtID0gdHJhbnNsYXRlOworICAgIFhGT1JNIHhmb3Jt
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKS50cmFuc2xhdGUoeCwgeSk7CiAgICAgTW9kaWZ5V29y
bGRUcmFuc2Zvcm0obV9oZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7CiB9CiAKQEAgLTE3
MSw3ICsxOTUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y29uCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFhGT1JNIHhmb3JtID0gdHJhbnNmb3JtOwotCiAgICAgTW9k
aWZ5V29ybGRUcmFuc2Zvcm0obV9oZGMsICZ4Zm9ybSwgTVdUX0xFRlRNVUxUSVBMWSk7CiB9CiAK
</data>
<flag name="review"
          id="16154"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31522</attachid>
            <date>2009-06-18 17:31:28 -0700</date>
            <delta_ts>2009-06-18 17:50:24 -0700</delta_ts>
            <desc>Part 5: (Some missed cleanups)</desc>
            <filename>part5.patch</filename>
            <type>text/plain</type>
            <size>7706</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDgzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDYtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQyNQorICAgICAgICBG
aW5hbCByZWZhY3RvcmluZ3MsIHBpY2tpbmcgdXAgYSBmZXcgcGxhY2VzIHdoZXJlIEJpdG1hcElu
Zm8KKyAgICAgICAgY291bGQgYmUgdXNlZC4KKworICAgICAgICAqIHBhZ2Uvd2luL0ZyYW1lQ0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVjdCk6CisgICAgICAgICogcGxh
dGZvcm0vd2luL0N1cnNvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6OkN1cnNv
cik6CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQb3B1cE1lbnU6OnBhaW50KToKKwogMjAwOS0wNi0xOCAgUGV0ZXIgS2FzdGluZyAg
PHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkIGJ1c3RhZ2UuCkluZGV4
OiBXZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS93aW4vRnJhbWVDR1dpbi5jcHAJKHJldmlzaW9uIDQ0ODIxKQorKysgV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBzdGF0
aWMgSEJJVE1BUCBpbWFnZUZyb21SZWN0KGNvbnN0IEZyYW1lCiAgICAgSERDIGhkYyA9IENyZWF0
ZUNvbXBhdGlibGVEQygwKTsKICAgICBpbnQgdyA9IGlyLndpZHRoKCk7CiAgICAgaW50IGggPSBp
ci5oZWlnaHQoKTsKLSAgICBCSVRNQVBJTkZPIGJtcCA9IHsgeyBzaXplb2YoQklUTUFQSU5GT0hF
QURFUiksIHcsIGgsIDEsIDMyIH0gfTsKKyAgICBCaXRtYXBJbmZvIGJtcCA9IEJpdG1hcEluZm86
OmNyZWF0ZShJbnRTaXplKHcsIGgpKTsKIAogICAgIEhCSVRNQVAgaGJtcCA9IENyZWF0ZURJQlNl
Y3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xPUlMsIHN0YXRpY19jYXN0PHZvaWQqKj4oJmJpdHMp
LCAwLCAwKTsKICAgICBIQklUTUFQIGhibXBPbGQgPSBzdGF0aWNfY2FzdDxIQklUTUFQPihTZWxl
Y3RPYmplY3QoaGRjLCBoYm1wKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAJ
KHJldmlzaW9uIDQ0ODIxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkN1cnNvci5oIgogCisjaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKIApAQCAtNTQsMTMgKzU1LDggQEAgc3RhdGlj
IGlubGluZSBib29sIHN1cHBvcnRzQWxwaGFDdXJzb3JzKAogQ3Vyc29yOjpDdXJzb3IoSW1hZ2Uq
IGltZywgY29uc3QgSW50UG9pbnQmIGhvdHNwb3QpIAogeyAKICAgICBzdGF0aWMgYm9vbCBkb0Fs
cGhhID0gc3VwcG9ydHNBbHBoYUN1cnNvcnMoKTsKLSAgICBCSVRNQVBJTkZPIGN1cnNvckltYWdl
ID0gezB9OwotICAgIGN1cnNvckltYWdlLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQ
SU5GT0hFQURFUik7Ci0gICAgY3Vyc29ySW1hZ2UuYm1pSGVhZGVyLmJpV2lkdGggPSBpbWctPndp
ZHRoKCk7Ci0gICAgY3Vyc29ySW1hZ2UuYm1pSGVhZGVyLmJpSGVpZ2h0ID0gaW1nLT5oZWlnaHQo
KTsKLSAgICBjdXJzb3JJbWFnZS5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwotICAgIGN1cnNvcklt
YWdlLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMzI7Ci0gICAgY3Vyc29ySW1hZ2UuYm1pSGVhZGVy
LmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgQml0bWFwSW5mbyBjdXJzb3JJbWFnZSA9IEJp
dG1hcEluZm86OmNyZWF0ZShJbnRTaXplKGltZy0+d2lkdGgoKSwgaW1nLT5oZWlnaHQoKSkpOwor
CiAgICAgSERDIGRjID0gR2V0REMoMCk7CiAgICAgSERDIHdvcmtpbmdEQyA9IENyZWF0ZUNvbXBh
dGlibGVEQyhkYyk7CiAgICAgaWYgKGRvQWxwaGEpIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNDQ4MjEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNyArNDUyLDcgQEAgdm9p
ZCBQb3B1cE1lbnU6OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbQogICAgICAgICB9CiAgICAgfQog
ICAgIGlmICghbV9ibXApIHsKLSAgICAgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvID0gQml0bWFw
SW5mbzo6Y3JlYXRlQm90dG9tVXAoY2xpZW50UmVjdCgpLnNpemUoKSk7CisgICAgICAgIEJpdG1h
cEluZm8gYml0bWFwSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKGNsaWVudFJlY3Qo
KS5zaXplKCkpOwogCiAgICAgICAgIHZvaWQqIHBpeGVscyA9IDA7CiAgICAgICAgIG1fYm1wID0g
OjpDcmVhdGVESUJTZWN0aW9uKG1fREMsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBp
eGVscywgMCwgMCk7CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNDQ4MzIpCisrKyBXZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA5LTA2LTE4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBzb21lIGJvaWxlcnBsYXRlIHVzaW5nIHRoZSBC
aXRtYXBJbmZvIHN0cnVjdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI2NDI1CisKKyAgICAgICAgKiBXZWJJY29uRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoY3JlYXRlRElCKToKKyAgICAgICAgKiBXZWJLaXQudmNwcm9qL1dlYktpdC5zbG46CisgICAg
ICAgICogV2ViTm9kZUhpZ2hsaWdodC5jcHA6CisgICAgICAgIChXZWJOb2RlSGlnaGxpZ2h0Ojp1
cGRhdGUpOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6ZW5zdXJl
QmFja2luZ1N0b3JlKToKKwogMjAwOS0wNi0xNyAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIENvbnNvbGlkYXRlIFdlYktpdCBDT00gaW50ZXJmYWNlcy4K
SW5kZXg6IFdlYktpdC93aW4vV2ViSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvd2luL1dlYkljb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ0ODIxKQorKysgV2ViS2l0L3dp
bi9XZWJJY29uRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25DZW50
ZXIuaCIKICNwcmFnbWEgd2FybmluZyhwdXNoLCAwKQorI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFw
SW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQlN0cmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+CkBAIC0yNjIs
MTggKzI2MywxMCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkljb25EYXRhYmFzCiAK
IEhCSVRNQVAgY3JlYXRlRElCKExQU0laRSBzaXplKQogewotICAgIEhCSVRNQVAgcmVzdWx0Owot
Ci0gICAgQklUTUFQSU5GTyBibUluZm8gPSB7MH07Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaVNp
emUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaVdp
ZHRoID0gc2l6ZS0+Y3g7Ci0gICAgYm1JbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IHNpemUtPmN5
OwotICAgIGJtSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOwotICAgIGJtSW5mby5ibWlIZWFk
ZXIuYmlCaXRDb3VudCA9IDMyOwotICAgIGJtSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9
IEJJX1JHQjsKKyAgICBCaXRtYXBJbmZvIGJtSW5mbyA9IEJpdG1hcEluZm86OmNyZWF0ZShJbnRT
aXplKCpzaXplKSk7CiAKICAgICBIREMgZGMgPSBHZXREQygwKTsKLSAgICByZXN1bHQgPSBDcmVh
dGVESUJTZWN0aW9uKGRjLCAmYm1JbmZvLCBESUJfUkdCX0NPTE9SUywgMCwgMCwgMCk7CisgICAg
SEJJVE1BUCByZXN1bHQgPSBDcmVhdGVESUJTZWN0aW9uKGRjLCAmYm1JbmZvLCBESUJfUkdCX0NP
TE9SUywgMCwgMCwgMCk7CiAgICAgUmVsZWFzZURDKDAsIGRjKTsKIAogICAgIHJldHVybiByZXN1
bHQ7CkluZGV4OiBXZWJLaXQvd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAJKHJldmlzaW9uIDQ0ODIxKQorKysgV2Vi
S2l0L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogCiAjaW5jbHVkZSAiV2ViVmlldy5oIgogI3ByYWdtYSB3YXJuaW5nKHB1c2gsIDApCisj
aW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CkBAIC0xNDYsMTggKzE0Nyw3IEBAIHZvaWQgV2ViTm9k
ZUhpZ2hsaWdodDo6dXBkYXRlKCkKICAgICBzaXplLmN4ID0gd2ViVmlld1JlY3QucmlnaHQgLSB3
ZWJWaWV3UmVjdC5sZWZ0OwogICAgIHNpemUuY3kgPSB3ZWJWaWV3UmVjdC5ib3R0b20gLSB3ZWJW
aWV3UmVjdC50b3A7CiAKLSAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87Ci0gICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlTaXplICAgICAgICAgID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwot
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggICAgICAgICA9IHNpemUuY3g7Ci0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgICAgICAgID0gLXNpemUuY3k7Ci0gICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgICAgICAgID0gMTsKLSAgICBiaXRtYXBJbmZvLmJt
aUhlYWRlci5iaUJpdENvdW50ICAgICAgPSAzMjsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5i
aUNvbXByZXNzaW9uICAgPSBCSV9SR0I7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXpl
SW1hZ2UgICAgID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIg
PSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJVc2VkICAgICAgID0gMDsKLSAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaUNsckltcG9ydGFudCAgPSAwOworICAgIEJpdG1hcEluZm8gYml0bWFwSW5m
byA9IEJpdG1hcEluZm86OmNyZWF0ZUJvdHRvbVVwKEludFNpemUoc2l6ZSkpOwogCiAgICAgdm9p
ZCogcGl4ZWxzID0gMDsKICAgICBPd25QdHI8SEJJVE1BUD4gaGJtcCg6OkNyZWF0ZURJQlNlY3Rp
b24oaGRjLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsICZwaXhlbHMsIDAsIDApKTsKSW5k
ZXg6IFdlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAkocmV2aXNpb24gNDQ4MjEpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAjcHJhZ21hIHdhcm5pbmcoIHB1c2gsIDAgKQog
I2luY2x1ZGUgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudS5oPgpAQCAtNjg3LDE4ICs2ODgsNyBAQCBi
b29sIFdlYlZpZXc6OmVuc3VyZUJhY2tpbmdTdG9yZSgpCiAKICAgICAgICAgbV9iYWNraW5nU3Rv
cmVTaXplLmN4ID0gd2lkdGg7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlU2l6ZS5jeSA9IGhlaWdo
dDsKLSAgICAgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvOwotICAgICAgICBiaXRtYXBJbmZvLmJt
aUhlYWRlci5iaVNpemUgICAgICAgICAgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAg
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggICAgICAgICA9IHdpZHRoOyAKLSAgICAg
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgICAgICAgID0gLWhlaWdodDsKLSAgICAg
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgICAgICAgID0gMTsKLSAgICAgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCAgICAgID0gMzI7Ci0gICAgICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24gICA9IEJJX1JHQjsKLSAgICAgICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgICAgID0gMDsKLSAgICAgICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIu
YmlZUGVsc1Blck1ldGVyID0gMDsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJV
c2VkICAgICAgID0gMDsKLSAgICAgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRh
bnQgID0gMDsKKyAgICAgICAgQml0bWFwSW5mbyBiaXRtYXBJbmZvID0gQml0bWFwSW5mbzo6Y3Jl
YXRlQm90dG9tVXAoSW50U2l6ZShtX2JhY2tpbmdTdG9yZVNpemUpKTsKIAogICAgICAgICB2b2lk
KiBwaXhlbHMgPSBOVUxMOwogICAgICAgICBtX2JhY2tpbmdTdG9yZUJpdG1hcC5zZXQoOjpDcmVh
dGVESUJTZWN0aW9uKE5VTEwsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgJnBpeGVscywg
TlVMTCwgMCkpOwo=
</data>
<flag name="review"
          id="16164"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>