<?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>60897</bug_id>
          
          <creation_ts>2011-05-16 09:46:26 -0700</creation_ts>
          <short_desc>[Qt] Implement toImageData() in QtWebKit Bridge</short_desc>
          <delta_ts>2011-05-22 09:57:14 -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 Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrew Wason">rectalogic</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>404530</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-05-16 09:46:26 -0700</bug_when>
    <thetext>I think it would be useful to have a toImageData() method on the Qt bridge image proxy object, in addition to the existing assignToHTMLImageElement(). This would also allow applications to work around bug #60770 and bug #59972 by using an ImageData with Canvas putImageData() or gl.texImage2D()

I will attach an implementation shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404535</commentid>
    <comment_count>1</comment_count>
      <attachid>93655</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-05-16 09:52:11 -0700</bug_when>
    <thetext>Created attachment 93655
implement toImageData() in Qt bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404538</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-16 09:53:18 -0700</bug_when>
    <thetext>Attachment 93655 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/bridge/qt/qt_pixmapruntime.cpp:103:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404553</commentid>
    <comment_count>3</comment_count>
      <attachid>93660</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-05-16 10:11:38 -0700</bug_when>
    <thetext>Created attachment 93660
implement toImageData() in Qt bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405631</commentid>
    <comment_count>4</comment_count>
      <attachid>93660</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-18 04:16:23 -0700</bug_when>
    <thetext>Comment on attachment 93660
implement toImageData() in Qt bridge 

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

&gt; Source/WebCore/bridge/qt/qt_pixmapruntime.cpp:100
&gt; +    void copyPixels(QImage image, int width, int height, unsigned char* destPixels)

This code looks very inefective.

What about using QImage::convertToFormat() to always convert to QImage::Format_ARGB32, and then do the byte shifting? Qt already has optimized color conversions fonctions for plenty of formats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405633</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-18 04:20:50 -0700</bug_when>
    <thetext>I like the idea of this feature, I think ImageData is pretty useful.

No&apos;am is rewriting the bridge at the moment (see the mailing list). Please sync with him before updating the patch.

I don&apos;t like color conversion done like that in WebKit when you can do so much better with SIMD inside Qt.

Please profile the conversion. Functions like QImage::pixel() are not an option when we have to act on every pixel of the image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405896</commentid>
    <comment_count>6</comment_count>
      <attachid>93954</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-05-18 11:38:36 -0700</bug_when>
    <thetext>Created attachment 93954
QImage conversion performance testing

(In reply to comment #4)
&gt; 
&gt; What about using QImage::convertToFormat() to always convert to QImage::Format_ARGB32,
&gt; and then do the byte shifting? Qt already has optimized color conversions fonctions
&gt; for plenty of formats.

I had considered that (and also looked at QGLWidget::convertToGLFormat() which converts to RGBA), but was trying to avoid a full intermediate copy of the image bits by converting them directly into the ImageData ByteArray. My use case is thousands of relatively large images (1920x1080).

I tried to find a way to use the internal optimized image conversion routines, but they&apos;re all private.

You are right QImage::pixel() is a performance killer though. I&apos;m attaching a simple app to compare the performance for each format of using convertToFormat() vs. directly copying/converting. For the formats I&apos;m handling directly, convertToFormat() is about 1.5X slower. For the formats where I fall back to QImage::pixel(), convertToFormat() is about 2-3X faster. Here are the results when I run it:

$ ./imageconvert 
format 1 convertDirect=13432740 convertWithCopy=4496240 direct/copy=2.987550
format 2 convertDirect=13330259 convertWithCopy=4649569 direct/copy=2.866988
format 3 convertDirect=12529513 convertWithCopy=4600696 direct/copy=2.723395
format 4 convertDirect=2837000 convertWithCopy=4375153 direct/copy=0.648434
format 5 convertDirect=2891826 convertWithCopy=4293214 direct/copy=0.673581
format 6 convertDirect=12443809 convertWithCopy=12101966 direct/copy=1.028247
format 7 convertDirect=15110204 convertWithCopy=5870940 direct/copy=2.573728
format 8 convertDirect=19884922 convertWithCopy=9334570 direct/copy=2.130245
format 9 convertDirect=17433956 convertWithCopy=7134872 direct/copy=2.443485
format 10 convertDirect=18181269 convertWithCopy=8235076 direct/copy=2.207784
format 11 convertDirect=15399767 convertWithCopy=6015450 direct/copy=2.560036
format 12 convertDirect=16741198 convertWithCopy=7187635 direct/copy=2.329166
format 13 convertDirect=1690568 convertWithCopy=4665468 direct/copy=0.362358
format 14 convertDirect=14963419 convertWithCopy=5687373 direct/copy=2.630990
format 15 convertDirect=16249964 convertWithCopy=6523285 direct/copy=2.491071

So perhaps copyPixels() could continue to handle Format_RGB32, Format_ARGB32, Format_RGB888 directly, and for the fallback case use convertToFormat() instead of QImage::pixel(). i.e. avoid the intermediate copy for these 3 formats which are pretty simple to convert to RGBA instead of always converting to Format_ARGB32 first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405971</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-18 13:02:39 -0700</bug_when>
    <thetext>Results on ARMv7: 
format 1 convertDirect=82860000 convertWithCopy=42430000 direct/copy=1.952864
format 2 convertDirect=82870000 convertWithCopy=42170000 direct/copy=1.965141
format 3 convertDirect=79000000 convertWithCopy=39900000 direct/copy=1.979950
format 4 convertDirect=12770000 convertWithCopy=34490000 direct/copy=0.370252
format 5 convertDirect=12770000 convertWithCopy=32280000 direct/copy=0.395601
format 6 convertDirect=75750000 convertWithCopy=39210000 direct/copy=1.931905
format 7 convertDirect=85550000 convertWithCopy=40820000 direct/copy=2.095786
format 8 convertDirect=95210000 convertWithCopy=47490000 direct/copy=2.004843
format 9 convertDirect=88930000 convertWithCopy=65640000 direct/copy=1.354814
format 10 convertDirect=89970000 convertWithCopy=44380000 direct/copy=2.027265
format 11 convertDirect=89660000 convertWithCopy=42900000 direct/copy=2.089977
format 12 convertDirect=89980000 convertWithCopy=43230000 direct/copy=2.081425
format 13 convertDirect=8290000 convertWithCopy=32760000 direct/copy=0.253053
format 14 convertDirect=88630000 convertWithCopy=41860000 direct/copy=2.117296
format 15 convertDirect=89670000 convertWithCopy=42890000 direct/copy=2.090697</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406524</commentid>
    <comment_count>8</comment_count>
      <attachid>94090</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-05-19 11:02:48 -0700</bug_when>
    <thetext>Created attachment 94090
implement toImageData() in Qt bridge

(In reply to comment #5)
&gt; No&apos;am is rewriting the bridge at the moment (see the mailing list).
&gt; Please sync with him before updating the patch.

He said to go ahead with the patch and he will merge later.

&gt; I don&apos;t like color conversion done like that in WebKit when you can do so much better
&gt; with SIMD inside Qt.

Patch is updated to do a direct copy for RGB888, ARGB32 and RGB32 and for all other cases convertToFormat(ARGB32) and then copy from that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407564</commentid>
    <comment_count>9</comment_count>
      <attachid>94090</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-21 14:58:40 -0700</bug_when>
    <thetext>Comment on attachment 94090
implement toImageData() in Qt bridge

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

I was gonna r+, cq-, but I just noticed the doc is missing.
Please update the documentation since this is a public API.

&gt; Source/WebCore/bridge/qt/qt_pixmapruntime.cpp:28
&gt; +#include &quot;JSImageData.h&quot;

We need that one?

&gt; Source/WebKit/qt/tests/hybridPixmap/test.html:23
&gt; +                        myWidget.compare(data[i  ], 0xaa); // R

No space after the i, No need to align the columns in the source.

&gt; Source/WebKit/qt/tests/hybridPixmap/widget.h:48
&gt; +    Q_INVOKABLE QImage abcImage(int format);

Why not put this as a public slot like the others?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407579</commentid>
    <comment_count>10</comment_count>
      <attachid>94330</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-05-21 17:29:31 -0700</bug_when>
    <thetext>Created attachment 94330
implement toImageData() in Qt bridge 

(In reply to comment #9)
&gt; (From update of attachment 94090 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94090&amp;action=review
&gt; 
&gt; I was gonna r+, cq-, but I just noticed the doc is missing.
&gt; Please update the documentation since this is a public API.

Added docs.

&gt; &gt; Source/WebCore/bridge/qt/qt_pixmapruntime.cpp:28
&gt; &gt; +#include &quot;JSImageData.h&quot;
&gt; 
&gt; We need that one?

It&apos;s needed for the declaration of WebCore::toJS(..., WebCore::ImageData*)

&gt; 
&gt; &gt; Source/WebKit/qt/tests/hybridPixmap/test.html:23
&gt; &gt; +                        myWidget.compare(data[i  ], 0xaa); // R
&gt; 
&gt; No space after the i, No need to align the columns in the source.
&gt; 
&gt; &gt; Source/WebKit/qt/tests/hybridPixmap/widget.h:48
&gt; &gt; +    Q_INVOKABLE QImage abcImage(int format);
&gt; 
&gt; Why not put this as a public slot like the others?

OK, fixed both those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407631</commentid>
    <comment_count>11</comment_count>
      <attachid>94330</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-22 07:29:11 -0700</bug_when>
    <thetext>Comment on attachment 94330
implement toImageData() in Qt bridge 

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

&gt; Source/WebCore/bridge/qt/qt_pixmapruntime.cpp:100
&gt; +    void copyPixels(QImage image, int width, int height, unsigned char* destPixels)

const QImage &amp;image.
By convention, we pass non-basic types as const reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407634</commentid>
    <comment_count>12</comment_count>
      <attachid>94342</attachid>
    <who name="Andrew Wason">rectalogic</who>
    <bug_when>2011-05-22 07:57:57 -0700</bug_when>
    <thetext>Created attachment 94342
implement toImageData() in Qt bridge 

(In reply to comment #11)
&gt; 
&gt; const QImage &amp;image.
&gt; By convention, we pass non-basic types as const reference.

Changed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407638</commentid>
    <comment_count>13</comment_count>
      <attachid>94342</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-05-22 08:34:00 -0700</bug_when>
    <thetext>Comment on attachment 94342
implement toImageData() in Qt bridge 

Let&apos;s go. Hopefully No&apos;am will not kill me for breaking his refactoring :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407665</commentid>
    <comment_count>14</comment_count>
      <attachid>94342</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-22 09:57:08 -0700</bug_when>
    <thetext>Comment on attachment 94342
implement toImageData() in Qt bridge 

Clearing flags on attachment: 94342

Committed r87032: &lt;http://trac.webkit.org/changeset/87032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407666</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-22 09:57:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93655</attachid>
            <date>2011-05-16 09:52:11 -0700</date>
            <delta_ts>2011-05-16 10:11:38 -0700</delta_ts>
            <desc>implement toImageData() in Qt bridge</desc>
            <filename>toimagedata.diff</filename>
            <type>text/plain</type>
            <size>9778</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NTc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDUtMTYgIEFuZHJldyBX
YXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRvSW1hZ2VEYXRhKCkgaW4gUXRX
ZWJLaXQgQnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MDg5NworCisgICAgICAgIFRlc3RzIGFyZSBpbiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwCisKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHA6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpuYW1lKToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6Omludm9rZSk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpjb3B5
UGl4ZWxzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwQ2xhc3M6Om1ldGhvZHNO
YW1lZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjpnZXRQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgIEFkZCB0b0ltYWdlRGF0YSgpIHRvIFF0IEJyaWRnZSwgYWx0
ZXJuYXRpdmUgdG8KKyAgICAgICAgIGFzc2lnblRvSFRNTEltYWdlRWxlbWVudCgpLgorCiAyMDEx
LTA1LTE2ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIFdpbmRvd3MgYnVpbGQgZml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gODY1MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDEzICsyMSwxOCBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNIVE1M
SW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTdGlsbEltYWdl
UXQuaCIKKyNpbmNsdWRlIDxRdEVuZGlhbj4KICNpbmNsdWRlIDxRQnVmZmVyPgogI2luY2x1ZGUg
PFFCeXRlQXJyYXk+CisjaW5jbHVkZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNs
dWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgPFFWYXJpYW50PgpAQCAtNzksNiArODQsNTcgQEAgcHVi
bGljOgogCiB9OwogCitjbGFzcyBRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kIDogcHVibGljIFF0
UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5h
bWUoKSB7IHJldHVybiAidG9JbWFnZURhdGEiOyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0
YXRlKiBleGVjLCBRdFBpeG1hcEluc3RhbmNlKiBpbnN0YW5jZSkKKyAgICB7CisgICAgICAgIGlu
dCB3aWR0aCA9IGluc3RhbmNlLT53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gaW5zdGFu
Y2UtPmhlaWdodCgpOworICAgICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBieXRlQXJyYXkgPSBCeXRl
QXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICBjb3B5UGl4ZWxzKGlu
c3RhbmNlLT50b0ltYWdlKCksIHdpZHRoLCBoZWlnaHQsIGJ5dGVBcnJheS0+ZGF0YSgpKTsKKyAg
ICAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYnl0ZUFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
Yywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLCBpbWFnZURhdGEuZ2V0KCkpOworICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCBjb3B5
UGl4ZWxzKFFJbWFnZSBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFy
KiBkZXN0UGl4ZWxzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbWFnZS5mb3JtYXQoKSkgewor
ICAgICAgICAgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjoKKyAgICAgICAgICAgIGNhc2Ug
UUltYWdlOjpGb3JtYXRfQVJHQjMyOgorICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVpbnQzMiogc2Nh
bkxpbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBxdWludDMyKj4oaW1hZ2Uuc2Nhbkxp
bmUoeSkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFSZ2IgcGl4ZWwgPSBzY2FuTGluZVt4XTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHFUb0JpZ0VuZGlhbjxxdWludDMyPigocGl4ZWwgPDwg
OCkgfCBxQWxwaGEocGl4ZWwpLCBkZXN0UGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RQaXhlbHMgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUUltYWdlOjpGb3Jt
YXRfUkdCODg4OgorICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdWNoYXIqIHNjYW5MaW5lID0gaW1hZ2Uu
c2NhbkxpbmUoeSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gKihz
Y2FuTGluZSsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9ICoo
c2NhbkxpbmUrKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAq
KHNjYW5MaW5lKyspOworICAgICAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0g
MHhGRjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFS
Z2IgcGl4ZWwgPSBpbWFnZS5waXhlbCh4LCB5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHFU
b0JpZ0VuZGlhbjxxdWludDMyPigocGl4ZWwgPDwgOCkgfCBxQWxwaGEocGl4ZWwpLCBkZXN0UGl4
ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQaXhlbHMgKz0gNDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK307CisKIC8vIHRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gSFRN
TCBpbWFnZSBlbGVtZW50IGFzIGEgcGFyYW1ldGVyLCBtYWtlcyBpdCBkaXNwbGF5IHRoZSBwaXht
YXAvaW1hZ2UgZnJvbSBRdAogY2xhc3MgUXRQaXhtYXBBc3NpZ25Ub0VsZW1lbnRNZXRob2QgOiBw
dWJsaWMgUXRQaXhtYXBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKQEAgLTEzNiw2ICsxOTIsNyBA
QCBjbGFzcyBRdFBpeG1hcFRvU3RyaW5nTWV0aG9kIDogcHVibGljIFF0CiAKIHN0cnVjdCBRdFBp
eG1hcE1ldGFEYXRhIHsKICAgICBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZCB0b0RhdGFVcmxNZXRo
b2Q7CisgICAgUXRQaXhtYXBUb0ltYWdlRGF0YU1ldGhvZCB0b0ltYWdlRGF0YU1ldGhvZDsKICAg
ICBRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1ldGhvZCBhc3NpZ25Ub0VsZW1lbnRNZXRob2Q7CiAg
ICAgUXRQaXhtYXBUb1N0cmluZ01ldGhvZCB0b1N0cmluZ01ldGhvZDsKICAgICBRdFBpeG1hcEhl
aWdodEZpZWxkIGhlaWdodEZpZWxkOwpAQCAtMTk4LDYgKzI1NSw4IEBAIE1ldGhvZExpc3QgUXRQ
aXhtYXBDbGFzczo6bWV0aG9kc05hbWVkKGMKICAgICBNZXRob2RMaXN0IG1ldGhvZHM7CiAgICAg
aWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkKICAgICAg
ICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS50b0RhdGFVcmxNZXRob2QpOwor
ICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBUb0ltYWdlRGF0YU1ldGhvZDo6bmFt
ZSgpKQorICAgICAgICBtZXRob2RzLmFwcGVuZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvSW1hZ2VE
YXRhTWV0aG9kKTsKICAgICBlbHNlIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwQXNzaWduVG9F
bGVtZW50TWV0aG9kOjpuYW1lKCkpCiAgICAgICAgIG1ldGhvZHMuYXBwZW5kKCZxdF9waXhtYXBf
bWV0YURhdGEuYXNzaWduVG9FbGVtZW50TWV0aG9kKTsKICAgICBlbHNlIGlmIChpZGVudGlmaWVy
ID09IFF0UGl4bWFwVG9TdHJpbmdNZXRob2Q6Om5hbWUoKSkKQEAgLTIxNyw2ICsyNzYsNyBAQCBG
aWVsZCogUXRQaXhtYXBDbGFzczo6ZmllbGROYW1lZChjb25zdCBJCiB2b2lkIFF0UGl4bWFwSW5z
dGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBhcnIpCiB7CiAgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBU
b0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywg
VVN0cmluZyhRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpuYW1lKCkpKSk7CiAgICAgYXJyLmFk
ZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBBc3NpZ25Ub0VsZW1lbnRNZXRob2Q6
Om5hbWUoKSkpKTsKICAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1h
cFRvU3RyaW5nTWV0aG9kOjpuYW1lKCkpKSk7CiAgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMs
IFVTdHJpbmcoUXRQaXhtYXBXaWR0aEZpZWxkOjpuYW1lKCkpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
ZwkocmV2aXNpb24gODY1NzgpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTA1LTE2ICBBbmRyZXcgV2Fzb24gIDxyZWN0
YWxvZ2ljQHJlY3RhbG9naWMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcGxlbWVudCB0b0ltYWdlRGF0YSgpIGluIFF0V2ViS2l0IEJyaWRn
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA4OTcK
KworICAgICAgICAqIHRlc3RzL2h5YnJpZFBpeG1hcC90ZXN0Lmh0bWw6CisgICAgICAgICogdGVz
dHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHA6CisgICAgICAgIChXaWRnZXQ6OldpZGdldCk6Cisg
ICAgICAgIChXaWRnZXQ6OmFiY0ltYWdlKToKKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXhtYXAv
d2lkZ2V0Lmg6CisgICAgICAgICBBZGQgdGVzdHMgZm9yIHRvSW1hZ2VEYXRhKCkgZmVhdHVyZS4K
KwogMjAxMS0wNS0xNiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IFBhcnRpYWwgcmV2ZXJ0IG9mIHI4NjUzNy4gIEZ1bGxTY3JlZW5WaWRlb1F0LmggY2FuJ3QgZGVw
ZW5kIG9uIE93blB0ci5oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1h
cC90ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC90ZXN0cy9oeWJyaWRQ
aXhtYXAvdGVzdC5odG1sCShyZXZpc2lvbiA4NjUxNykKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVz
dHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNCw4ICs0LDQyIEBA
CiAgICAgICAgICAgICBpbWcgeyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXN0eWxlOiBncm9vdmV9
CiAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICBmdW5jdGlv
biB0ZXN0SW1hZ2VEYXRhKCkgeworICAgICAgICAgICAgICAgIHZhciBvYmogPSBteVdpZGdldC5p
bWFnZTsKKyAgICAgICAgICAgICAgICB2YXIgcHhtID0gbXlXaWRnZXQucGl4bWFwOworCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUltYWdlRGF0YVNpemUobywgaW1hZ2VEYXRhKSB7
CisgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUoaW1hZ2VEYXRhLmhlaWdodCwg
by5oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGltYWdlRGF0
YS53aWR0aCwgby53aWR0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv
bXBhcmVJbWFnZURhdGFTaXplKG9iaiwgb2JqLnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAgICAg
ICAgIGNvbXBhcmVJbWFnZURhdGFTaXplKHB4bSwgcHhtLnRvSW1hZ2VEYXRhKCkpOworCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUltYWdlRGF0YVBpeGVsKG8sIGltYWdlRGF0YSkg
eworICAgICAgICAgICAgICAgICAgICBjb21wYXJlSW1hZ2VEYXRhU2l6ZShvLCBpbWFnZURhdGEp
OworICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgcGl4ZWxzIGFyZSAweEFBQkJDQ0ZG
CisgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gNCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShkYXRhW2kgIF0sIDB4YWEp
OyAvLyBSCisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGRhdGFbaSsx
XSwgMHhiYik7IC8vIEcKKyAgICAgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUo
ZGF0YVtpKzJdLCAweGNjKTsgLy8gQgorICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQu
Y29tcGFyZShkYXRhW2krM10sIDB4ZmYpOyAvLyBBCisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG9iakFSR0IzMiA9IG15V2lkZ2V0
LmFiY0ltYWdlKDUpOworICAgICAgICAgICAgICAgIGNvbXBhcmVJbWFnZURhdGFQaXhlbChvYmpB
UkdCMzIsIG9iakFSR0IzMi50b0ltYWdlRGF0YSgpKTsKKyAgICAgICAgICAgICAgICB2YXIgb2Jq
UkdCMzIgPSBteVdpZGdldC5hYmNJbWFnZSg0KTsKKyAgICAgICAgICAgICAgICBjb21wYXJlSW1h
Z2VEYXRhUGl4ZWwob2JqUkdCMzIsIG9ialJHQjMyLnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAg
ICAgICAgIHZhciBvYmpSR0I4ODggPSBteVdpZGdldC5hYmNJbWFnZSgxMyk7CisgICAgICAgICAg
ICAgICAgY29tcGFyZUltYWdlRGF0YVBpeGVsKG9ialJHQjg4OCwgb2JqUkdCODg4LnRvSW1hZ2VE
YXRhKCkpOworICAgICAgICAgICAgICAgIHZhciBvYmpSR0I0NDQgPSBteVdpZGdldC5hYmNJbWFn
ZSgxNCk7CisgICAgICAgICAgICAgICAgY29tcGFyZUltYWdlRGF0YVBpeGVsKG9ialJHQjQ0NCwg
b2JqUkdCNDQ0LnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBm
dW5jdGlvbiBzdGFydFRlc3QoKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlc3RJ
bWFnZURhdGEoKTsKKwogICAgICAgICAgICAgICAgIHZhciBvYmogPSBteVdpZGdldC5pbWFnZTsK
ICAgICAgICAgICAgICAgICB2YXIgcHhtID0gbXlXaWRnZXQucGl4bWFwOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAJKHJldmlzaW9u
IDg2NTE3KQorKysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsMTEgQEAKIAogV2lkZ2V0OjpXaWRnZXQoUVdp
ZGdldCogcGFyZW50KSA6CiAgICAgUVdpZGdldChwYXJlbnQpLAotICAgIHVpKG5ldyBVaTo6V2lk
Z2V0KQorICAgIHVpKG5ldyBVaTo6V2lkZ2V0KSwKKyAgICBhYmNGaWxsZWRJbWFnZSgzMiwgMzIs
IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMikKIHsKICAgICB1aS0+c2V0dXBVaSh0aGlzKTsKKyAgICBh
YmNGaWxsZWRJbWFnZS5maWxsKHFSZ2JhKDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZmYpKTsKIH0KIAog
dm9pZCBXaWRnZXQ6OnJlZnJlc2hKUygpCkBAIC04MCw2ICs4MiwxMSBAQCBRSW1hZ2UgV2lkZ2V0
OjppbWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIGltZzsKIH0KIAorUUltYWdlIFdpZGdldDo6YWJj
SW1hZ2UoaW50IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWJjRmlsbGVkSW1hZ2UuY29udmVydFRv
Rm9ybWF0KHN0YXRpY19jYXN0PFFJbWFnZTo6Rm9ybWF0Pihmb3JtYXQpKTsKK30KKwogV2lkZ2V0
Ojp+V2lkZ2V0KCkKIHsKICAgICBkZWxldGUgdWk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24gODY1MTcpCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgUVBpeG1hcCBwaXhtYXAoKSBjb25zdDsKICAgICB2
b2lkIHNldEltYWdlKGNvbnN0IFFJbWFnZSYpOwogICAgIFFJbWFnZSBpbWFnZSgpIGNvbnN0Owor
ICAgIFFfSU5WT0tBQkxFIFFJbWFnZSBhYmNJbWFnZShpbnQgZm9ybWF0KTsKIAogcHJpdmF0ZSBz
bG90czoKICAgICB2b2lkIHJlZnJlc2hKUygpOwpAQCAtNjcsNiArNjgsNyBAQCBwcm90ZWN0ZWQ6
CiAKIHByaXZhdGU6CiAgICAgVWk6OldpZGdldCogdWk7CisgICAgUUltYWdlIGFiY0ZpbGxlZElt
YWdlOwogfTsKIAogI2VuZGlmIC8vIHdpZGdldF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93660</attachid>
            <date>2011-05-16 10:11:38 -0700</date>
            <delta_ts>2011-05-19 11:02:48 -0700</delta_ts>
            <desc>implement toImageData() in Qt bridge </desc>
            <filename>toImageData.diff</filename>
            <type>text/plain</type>
            <size>9654</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NTc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDUtMTYgIEFuZHJldyBX
YXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRvSW1hZ2VEYXRhKCkgaW4gUXRX
ZWJLaXQgQnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MDg5NworCisgICAgICAgIFRlc3RzIGFyZSBpbiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwCisKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHA6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpuYW1lKToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6Omludm9rZSk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpjb3B5
UGl4ZWxzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwQ2xhc3M6Om1ldGhvZHNO
YW1lZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjpnZXRQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgIEFkZCB0b0ltYWdlRGF0YSgpIHRvIFF0IEJyaWRnZSwgYWx0
ZXJuYXRpdmUgdG8KKyAgICAgICAgIGFzc2lnblRvSFRNTEltYWdlRWxlbWVudCgpLgorCiAyMDEx
LTA1LTE2ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIFdpbmRvd3MgYnVpbGQgZml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gODY1MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDEzICsyMSwxOCBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNIVE1M
SW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTdGlsbEltYWdl
UXQuaCIKKyNpbmNsdWRlIDxRdEVuZGlhbj4KICNpbmNsdWRlIDxRQnVmZmVyPgogI2luY2x1ZGUg
PFFCeXRlQXJyYXk+CisjaW5jbHVkZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNs
dWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgPFFWYXJpYW50PgpAQCAtNzksNiArODQsNTcgQEAgcHVi
bGljOgogCiB9OwogCitjbGFzcyBRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kIDogcHVibGljIFF0
UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5h
bWUoKSB7IHJldHVybiAidG9JbWFnZURhdGEiOyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0
YXRlKiBleGVjLCBRdFBpeG1hcEluc3RhbmNlKiBpbnN0YW5jZSkKKyAgICB7CisgICAgICAgIGlu
dCB3aWR0aCA9IGluc3RhbmNlLT53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gaW5zdGFu
Y2UtPmhlaWdodCgpOworICAgICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBieXRlQXJyYXkgPSBCeXRl
QXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICBjb3B5UGl4ZWxzKGlu
c3RhbmNlLT50b0ltYWdlKCksIHdpZHRoLCBoZWlnaHQsIGJ5dGVBcnJheS0+ZGF0YSgpKTsKKyAg
ICAgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYnl0ZUFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
Yywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLCBpbWFnZURhdGEuZ2V0KCkpOworICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCBjb3B5
UGl4ZWxzKFFJbWFnZSBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFy
KiBkZXN0UGl4ZWxzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbWFnZS5mb3JtYXQoKSkgewor
ICAgICAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjMyOgorICAgICAgICBjYXNlIFFJbWFnZTo6
Rm9ybWF0X0FSR0IzMjoKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5
KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBxdWludDMyKiBzY2FuTGluZSA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPGNvbnN0IHF1aW50MzIqPihpbWFnZS5zY2FuTGluZSh5KSk7CisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIFFSZ2IgcGl4ZWwgPSBzY2FuTGluZVt4XTsKKyAgICAgICAgICAgICAgICAgICAgcVRv
QmlnRW5kaWFuPHF1aW50MzI+KChwaXhlbCA8PCA4KSB8IHFBbHBoYShwaXhlbCksIGRlc3RQaXhl
bHMpOworICAgICAgICAgICAgICAgICAgICBkZXN0UGl4ZWxzICs9IDQ7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUUlt
YWdlOjpGb3JtYXRfUkdCODg4OgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IHVjaGFyKiBzY2FuTGluZSA9IGltYWdl
LnNjYW5MaW5lKHkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykgeworICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAqKHNjYW5MaW5l
KyspOworICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAqKHNjYW5MaW5lKysp
OworICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAqKHNjYW5MaW5lKyspOwor
ICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAweEZGOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAg
ICAgICAgICBRUmdiIHBpeGVsID0gaW1hZ2UucGl4ZWwoeCwgeSk7CisgICAgICAgICAgICAgICAg
ICAgIHFUb0JpZ0VuZGlhbjxxdWludDMyPigocGl4ZWwgPDwgOCkgfCBxQWxwaGEocGl4ZWwpLCBk
ZXN0UGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBpeGVscyArPSA0OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorfTsKKwogLy8gdGhpcyBmdW5jdGlvbiByZWNlaXZlcyBhbiBIVE1MIGltYWdlIGVs
ZW1lbnQgYXMgYSBwYXJhbWV0ZXIsIG1ha2VzIGl0IGRpc3BsYXkgdGhlIHBpeG1hcC9pbWFnZSBm
cm9tIFF0CiBjbGFzcyBRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1ldGhvZCA6IHB1YmxpYyBRdFBp
eG1hcFJ1bnRpbWVNZXRob2QgewogcHVibGljOgpAQCAtMTM2LDYgKzE5Miw3IEBAIGNsYXNzIFF0
UGl4bWFwVG9TdHJpbmdNZXRob2QgOiBwdWJsaWMgUXQKIAogc3RydWN0IFF0UGl4bWFwTWV0YURh
dGEgewogICAgIFF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kIHRvRGF0YVVybE1ldGhvZDsKKyAgICBR
dFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kIHRvSW1hZ2VEYXRhTWV0aG9kOwogICAgIFF0UGl4bWFw
QXNzaWduVG9FbGVtZW50TWV0aG9kIGFzc2lnblRvRWxlbWVudE1ldGhvZDsKICAgICBRdFBpeG1h
cFRvU3RyaW5nTWV0aG9kIHRvU3RyaW5nTWV0aG9kOwogICAgIFF0UGl4bWFwSGVpZ2h0RmllbGQg
aGVpZ2h0RmllbGQ7CkBAIC0xOTgsNiArMjU1LDggQEAgTWV0aG9kTGlzdCBRdFBpeG1hcENsYXNz
OjptZXRob2RzTmFtZWQoYwogICAgIE1ldGhvZExpc3QgbWV0aG9kczsKICAgICBpZiAoaWRlbnRp
ZmllciA9PSBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZDo6bmFtZSgpKQogICAgICAgICBtZXRob2Rz
LmFwcGVuZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvRGF0YVVybE1ldGhvZCk7CisgICAgZWxzZSBp
ZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpuYW1lKCkpCisgICAg
ICAgIG1ldGhvZHMuYXBwZW5kKCZxdF9waXhtYXBfbWV0YURhdGEudG9JbWFnZURhdGFNZXRob2Qp
OwogICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBBc3NpZ25Ub0VsZW1lbnRNZXRo
b2Q6Om5hbWUoKSkKICAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS5h
c3NpZ25Ub0VsZW1lbnRNZXRob2QpOwogICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXht
YXBUb1N0cmluZ01ldGhvZDo6bmFtZSgpKQpAQCAtMjE3LDYgKzI3Niw3IEBAIEZpZWxkKiBRdFBp
eG1hcENsYXNzOjpmaWVsZE5hbWVkKGNvbnN0IEkKIHZvaWQgUXRQaXhtYXBJbnN0YW5jZTo6Z2V0
UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycikKIHsK
ICAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvRGF0YVVybE1l
dGhvZDo6bmFtZSgpKSkpOworICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0
UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6Om5hbWUoKSkpKTsKICAgICBhcnIuYWRkKElkZW50aWZp
ZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1ldGhvZDo6bmFtZSgpKSkp
OwogICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwVG9TdHJpbmdN
ZXRob2Q6Om5hbWUoKSkpKTsKICAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhR
dFBpeG1hcFdpZHRoRmllbGQ6Om5hbWUoKSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lv
biA4NjU3OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUtMTYgIEFuZHJldyBXYXNvbiAgPHJlY3RhbG9naWNAcmVj
dGFsb2dpYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW1wbGVtZW50IHRvSW1hZ2VEYXRhKCkgaW4gUXRXZWJLaXQgQnJpZGdlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDg5NworCisgICAgICAg
ICogdGVzdHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbDoKKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQ
aXhtYXAvd2lkZ2V0LmNwcDoKKyAgICAgICAgKFdpZGdldDo6V2lkZ2V0KToKKyAgICAgICAgKFdp
ZGdldDo6YWJjSW1hZ2UpOgorICAgICAgICAqIHRlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaDoK
KyAgICAgICAgIEFkZCB0ZXN0cyBmb3IgdG9JbWFnZURhdGEoKSBmZWF0dXJlLgorCiAyMDExLTA1
LTE2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGFydGlhbCBy
ZXZlcnQgb2Ygcjg2NTM3LiAgRnVsbFNjcmVlblZpZGVvUXQuaCBjYW4ndCBkZXBlbmQgb24gT3du
UHRyLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90ZXN0
Lmh0bWwJKHJldmlzaW9uIDg2NTE3KQorKysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9oeWJyaWRQ
aXhtYXAvdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00LDggKzQsNDIgQEAKICAgICAgICAg
ICAgIGltZyB7IGRpc3BsYXk6IGJsb2NrOyBib3JkZXItc3R5bGU6IGdyb292ZX0KICAgICAgICAg
PC9zdHlsZT4KICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RJbWFn
ZURhdGEoKSB7CisgICAgICAgICAgICAgICAgdmFyIG9iaiA9IG15V2lkZ2V0LmltYWdlOworICAg
ICAgICAgICAgICAgIHZhciBweG0gPSBteVdpZGdldC5waXhtYXA7CisKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbiBjb21wYXJlSW1hZ2VEYXRhU2l6ZShvLCBpbWFnZURhdGEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShpbWFnZURhdGEuaGVpZ2h0LCBvLmhlaWdodCk7
CisgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUoaW1hZ2VEYXRhLndpZHRoLCBv
LndpZHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29tcGFyZUltYWdl
RGF0YVNpemUob2JqLCBvYmoudG9JbWFnZURhdGEoKSk7CisgICAgICAgICAgICAgICAgY29tcGFy
ZUltYWdlRGF0YVNpemUocHhtLCBweG0udG9JbWFnZURhdGEoKSk7CisKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbiBjb21wYXJlSW1hZ2VEYXRhUGl4ZWwobywgaW1hZ2VEYXRhKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbXBhcmVJbWFnZURhdGFTaXplKG8sIGltYWdlRGF0YSk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBwaXhlbHMgYXJlIDB4QUFCQkNDRkYKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGRhdGEgPSBpbWFnZURhdGEuZGF0YTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSA0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGRhdGFbaSAgXSwgMHhhYSk7IC8vIFIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUoZGF0YVtpKzFdLCAweGJiKTsg
Ly8gRworICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShkYXRhW2krMl0s
IDB4Y2MpOyAvLyBCCisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGRh
dGFbaSszXSwgMHhmZik7IC8vIEEKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgb2JqQVJHQjMyID0gbXlXaWRnZXQuYWJjSW1hZ2Uo
NSk7CisgICAgICAgICAgICAgICAgY29tcGFyZUltYWdlRGF0YVBpeGVsKG9iakFSR0IzMiwgb2Jq
QVJHQjMyLnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAgICAgICAgIHZhciBvYmpSR0IzMiA9IG15
V2lkZ2V0LmFiY0ltYWdlKDQpOworICAgICAgICAgICAgICAgIGNvbXBhcmVJbWFnZURhdGFQaXhl
bChvYmpSR0IzMiwgb2JqUkdCMzIudG9JbWFnZURhdGEoKSk7CisgICAgICAgICAgICAgICAgdmFy
IG9ialJHQjg4OCA9IG15V2lkZ2V0LmFiY0ltYWdlKDEzKTsKKyAgICAgICAgICAgICAgICBjb21w
YXJlSW1hZ2VEYXRhUGl4ZWwob2JqUkdCODg4LCBvYmpSR0I4ODgudG9JbWFnZURhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgdmFyIG9ialJHQjQ0NCA9IG15V2lkZ2V0LmFiY0ltYWdlKDE0KTsKKyAg
ICAgICAgICAgICAgICBjb21wYXJlSW1hZ2VEYXRhUGl4ZWwob2JqUkdCNDQ0LCBvYmpSR0I0NDQu
dG9JbWFnZURhdGEoKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZ1bmN0aW9uIHN0
YXJ0VGVzdCgpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVzdEltYWdlRGF0YSgp
OworCiAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IG15V2lkZ2V0LmltYWdlOwogICAgICAgICAg
ICAgICAgIHZhciBweG0gPSBteVdpZGdldC5waXhtYXA7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gODY1MTcpCisr
KyBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw5ICsyNywxMSBAQAogCiBXaWRnZXQ6OldpZGdldChRV2lkZ2V0KiBwYXJl
bnQpIDoKICAgICBRV2lkZ2V0KHBhcmVudCksCi0gICAgdWkobmV3IFVpOjpXaWRnZXQpCisgICAg
dWkobmV3IFVpOjpXaWRnZXQpLAorICAgIGFiY0ZpbGxlZEltYWdlKDMyLCAzMiwgUUltYWdlOjpG
b3JtYXRfQVJHQjMyKQogewogICAgIHVpLT5zZXR1cFVpKHRoaXMpOworICAgIGFiY0ZpbGxlZElt
YWdlLmZpbGwocVJnYmEoMHhhYSwgMHhiYiwgMHhjYywgMHhmZikpOwogfQogCiB2b2lkIFdpZGdl
dDo6cmVmcmVzaEpTKCkKQEAgLTgwLDYgKzgyLDExIEBAIFFJbWFnZSBXaWRnZXQ6OmltYWdlKCkg
Y29uc3QKICAgICByZXR1cm4gaW1nOwogfQogCitRSW1hZ2UgV2lkZ2V0OjphYmNJbWFnZShpbnQg
Zm9ybWF0KQoreworICAgIHJldHVybiBhYmNGaWxsZWRJbWFnZS5jb252ZXJ0VG9Gb3JtYXQoc3Rh
dGljX2Nhc3Q8UUltYWdlOjpGb3JtYXQ+KGZvcm1hdCkpOworfQorCiBXaWRnZXQ6On5XaWRnZXQo
KQogewogICAgIGRlbGV0ZSB1aTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL3dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHli
cmlkUGl4bWFwL3dpZGdldC5oCShyZXZpc2lvbiA4NjUxNykKKysrIFNvdXJjZS9XZWJLaXQvcXQv
dGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3
IEBAIHB1YmxpYzoKICAgICBRUGl4bWFwIHBpeG1hcCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SW1h
Z2UoY29uc3QgUUltYWdlJik7CiAgICAgUUltYWdlIGltYWdlKCkgY29uc3Q7CisgICAgUV9JTlZP
S0FCTEUgUUltYWdlIGFiY0ltYWdlKGludCBmb3JtYXQpOwogCiBwcml2YXRlIHNsb3RzOgogICAg
IHZvaWQgcmVmcmVzaEpTKCk7CkBAIC02Nyw2ICs2OCw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0
ZToKICAgICBVaTo6V2lkZ2V0KiB1aTsKKyAgICBRSW1hZ2UgYWJjRmlsbGVkSW1hZ2U7CiB9Owog
CiAjZW5kaWYgLy8gd2lkZ2V0X2gK
</data>
<flag name="review"
          id="86867"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>93954</attachid>
            <date>2011-05-18 11:38:36 -0700</date>
            <delta_ts>2011-05-18 11:38:36 -0700</delta_ts>
            <desc>QImage conversion performance testing</desc>
            <filename>imageconvert.cpp</filename>
            <type>text/plain</type>
            <size>3635</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPFF0RW5kaWFuPgojaW5jbHVkZSA8UUNvcmVBcHBs
aWNhdGlvbj4KI2luY2x1ZGUgPFFJbWFnZT4KCgojZGVmaW5lIElURVJBVElPTlMgNTAwCgp2b2lk
IGNvbnZlcnRXaXRoQ29weShRSW1hZ2UmIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVu
c2lnbmVkIGNoYXIqIGJ1ZmZlcikKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJVEVSQVRJT05T
OyBpKyspIHsKICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0UGl4ZWxzID0gYnVmZmVyOwogICAg
ICAgIFFJbWFnZSBhcmdiSW1hZ2UoaW1hZ2UuY29udmVydFRvRm9ybWF0KFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMikpOwogICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKICAg
ICAgICAgICAgY29uc3QgcXVpbnQzMiogc2NhbkxpbmUgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHF1aW50MzIqPihhcmdiSW1hZ2Uuc2NhbkxpbmUoeSkpOwogICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKICAgICAgICAgICAgICAgIFFSZ2IgcGl4ZWwgPSBzY2Fu
TGluZVt4XTsKICAgICAgICAgICAgICAgIHFUb0JpZ0VuZGlhbjxxdWludDMyPigocGl4ZWwgPDwg
OCkgfCBxQWxwaGEocGl4ZWwpLCBkZXN0UGl4ZWxzKTsKICAgICAgICAgICAgICAgIGRlc3RQaXhl
bHMgKz0gNDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBjb252ZXJ0RGly
ZWN0KFFJbWFnZSYgaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciog
YnVmZmVyKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IElURVJBVElPTlM7IGkrKykgewogICAg
ICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RQaXhlbHMgPSBidWZmZXI7CgogICAgICAgIHN3aXRjaCAo
aW1hZ2UuZm9ybWF0KCkpIHsKICAgICAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjMyOgogICAg
ICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfQVJHQjMyOgogICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBxdWludDMyKiBzY2Fu
TGluZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgcXVpbnQzMio+KGltYWdlLnNjYW5MaW5lKHkp
KTsKICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewogICAg
ICAgICAgICAgICAgICAgIFFSZ2IgcGl4ZWwgPSBzY2FuTGluZVt4XTsKICAgICAgICAgICAgICAg
ICAgICBxVG9CaWdFbmRpYW48cXVpbnQzMj4oKHBpeGVsIDw8IDgpIHwgcUFscGhhKHBpeGVsKSwg
ZGVzdFBpeGVscyk7CiAgICAgICAgICAgICAgICAgICAgZGVzdFBpeGVscyArPSA0OwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug
UUltYWdlOjpGb3JtYXRfUkdCODg4OgogICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCB1Y2hhciogc2NhbkxpbmUgPSBpbWFn
ZS5zY2FuTGluZSh5KTsKICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykgewogICAgICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9ICooc2NhbkxpbmUr
Kyk7CiAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gKihzY2FuTGluZSsrKTsK
ICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAqKHNjYW5MaW5lKyspOwogICAg
ICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9IDB4RkY7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewogICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgUVJn
YiBwaXhlbCA9IGltYWdlLnBpeGVsKHgsIHkpOwogICAgICAgICAgICAgICAgICAgIHFUb0JpZ0Vu
ZGlhbjxxdWludDMyPigocGl4ZWwgPDwgOCkgfCBxQWxwaGEocGl4ZWwpLCBkZXN0UGl4ZWxzKTsK
ICAgICAgICAgICAgICAgICAgICBkZXN0UGl4ZWxzICs9IDQ7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFp
bihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgICBRQ29yZUFwcGxpY2F0aW9uIGFwcChhcmdj
LCBhcmd2KTsKCiAgICBzdGF0aWMgUUltYWdlOjpGb3JtYXQgZm9ybWF0c1tdID0gewogICAgICAg
IFFJbWFnZTo6Rm9ybWF0X01vbm8sCiAgICAgICAgUUltYWdlOjpGb3JtYXRfTW9ub0xTQiwKICAg
ICAgICBRSW1hZ2U6OkZvcm1hdF9JbmRleGVkOCwKICAgICAgICBRSW1hZ2U6OkZvcm1hdF9SR0Iz
MiwKICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIsCiAgICAgICAgUUltYWdlOjpGb3JtYXRf
QVJHQjMyX1ByZW11bHRpcGxpZWQsCiAgICAgICAgUUltYWdlOjpGb3JtYXRfUkdCMTYsCiAgICAg
ICAgUUltYWdlOjpGb3JtYXRfQVJHQjg1NjVfUHJlbXVsdGlwbGllZCwKICAgICAgICBRSW1hZ2U6
OkZvcm1hdF9SR0I2NjYsCiAgICAgICAgUUltYWdlOjpGb3JtYXRfQVJHQjY2NjZfUHJlbXVsdGlw
bGllZCwKICAgICAgICBRSW1hZ2U6OkZvcm1hdF9SR0I1NTUsCiAgICAgICAgUUltYWdlOjpGb3Jt
YXRfQVJHQjg1NTVfUHJlbXVsdGlwbGllZCwKICAgICAgICBRSW1hZ2U6OkZvcm1hdF9SR0I4ODgs
CiAgICAgICAgUUltYWdlOjpGb3JtYXRfUkdCNDQ0LAogICAgICAgIFFJbWFnZTo6Rm9ybWF0X0FS
R0I0NDQ0X1ByZW11bHRpcGxpZWQsCiAgICB9OwogICAgY29uc3QgaW50IHdpZHRoID0gMTkyMDsK
ICAgIGNvbnN0IGludCBoZWlnaHQgPSAxMDgwOwogICAgdW5zaWduZWQgY2hhciBidWZmZXJbd2lk
dGggKiBoZWlnaHQgKiA0XTsKCiAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IHNpemVv
Zihmb3JtYXRzKSAvIHNpemVvZihRSW1hZ2U6OkZvcm1hdCk7IGYrKykgewogICAgICAgIFFJbWFn
ZTo6Rm9ybWF0IGZvcm1hdCA9IGZvcm1hdHNbZl07CiAgICAgICAgUUltYWdlIGltYWdlKHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCk7CgogICAgICAgIGNsb2NrX3Qgc3RhcnRDbG9jayA9IGNsb2NrKCk7
CiAgICAgICAgY29udmVydFdpdGhDb3B5KGltYWdlLCB3aWR0aCwgaGVpZ2h0LCBidWZmZXIpOwog
ICAgICAgIGNsb2NrX3QgZWxhcHNlZENvcHkgPSBjbG9jaygpIC0gc3RhcnRDbG9jazsKCiAgICAg
ICAgc3RhcnRDbG9jayA9IGNsb2NrKCk7CiAgICAgICAgY29udmVydERpcmVjdChpbWFnZSwgd2lk
dGgsIGhlaWdodCwgYnVmZmVyKTsKICAgICAgICBjbG9ja190IGVsYXBzZWREaXJlY3QgPSBjbG9j
aygpIC0gc3RhcnRDbG9jazsKCiAgICAgICAgcHJpbnRmKCJmb3JtYXQgJWQgY29udmVydERpcmVj
dD0lbGQgY29udmVydFdpdGhDb3B5PSVsZCBkaXJlY3QvY29weT0lbGZcbiIsCiAgICAgICAgICAg
ICAgIGZvcm1hdCwgZWxhcHNlZERpcmVjdCwgZWxhcHNlZENvcHksCiAgICAgICAgICAgICAgIGVs
YXBzZWREaXJlY3QgLyAoZG91YmxlKWVsYXBzZWRDb3B5KTsKICAgIH0KfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94090</attachid>
            <date>2011-05-19 11:02:48 -0700</date>
            <delta_ts>2011-05-21 17:29:31 -0700</delta_ts>
            <desc>implement toImageData() in Qt bridge</desc>
            <filename>newtoimd.diff</filename>
            <type>text/plain</type>
            <size>9397</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2ODU0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDUtMTkgIEFuZHJldyBX
YXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQgdG9JbWFnZURhdGEoKSBp
biBRdFdlYktpdCBCcmlkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwODk3CisKKyAgICAgICAgVGVzdHMgYXJlIGluIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAKKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6Om5hbWUp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBUb0ltYWdlRGF0YU1ldGhvZDo6aW52
b2tlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6
OmNvcHlQaXhlbHMpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBDbGFzczo6bWV0
aG9kc05hbWVkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6Omdl
dFByb3BlcnR5TmFtZXMpOgorICAgICAgICAgQWRkIHRvSW1hZ2VEYXRhKCkgdG8gUXQgQnJpZGdl
LCBhbHRlcm5hdGl2ZSB0bworICAgICAgICAgYXNzaWduVG9IVE1MSW1hZ2VFbGVtZW50KCkuCisK
IDIwMTEtMDUtMTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiA4NjUxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MTMgKzIxLDE4IEBACiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkhUTUxJ
bWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgog
I2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgor
I2luY2x1ZGUgPFF0RW5kaWFuPgogI2luY2x1ZGUgPFFCdWZmZXI+CiAjaW5jbHVkZSA8UUJ5dGVB
cnJheT4KKyNpbmNsdWRlIDxRQ29sb3I+CiAjaW5jbHVkZSA8UUltYWdlPgogI2luY2x1ZGUgPFFQ
aXhtYXA+CiAjaW5jbHVkZSA8UVZhcmlhbnQ+CkBAIC03OSw2ICs4NCw1MSBAQCBwdWJsaWM6CiAK
IH07CiAKK2NsYXNzIFF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2QgOiBwdWJsaWMgUXRQaXhtYXBS
dW50aW1lTWV0aG9kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsg
cmV0dXJuICJ0b0ltYWdlRGF0YSI7IH0KKyAgICBKU1ZhbHVlIGludm9rZShFeGVjU3RhdGUqIGV4
ZWMsIFF0UGl4bWFwSW5zdGFuY2UqIGluc3RhbmNlKQorICAgIHsKKyAgICAgICAgaW50IHdpZHRo
ID0gaW5zdGFuY2UtPndpZHRoKCk7CisgICAgICAgIGludCBoZWlnaHQgPSBpbnN0YW5jZS0+aGVp
Z2h0KCk7CisgICAgICAgIFJlZlB0cjxCeXRlQXJyYXk+IGJ5dGVBcnJheSA9IEJ5dGVBcnJheTo6
Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgICAgIGNvcHlQaXhlbHMoaW5zdGFuY2Ut
PnRvSW1hZ2UoKSwgd2lkdGgsIGhlaWdodCwgYnl0ZUFycmF5LT5kYXRhKCkpOworICAgICAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpLCBieXRlQXJyYXkpOworICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0
aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSks
IGltYWdlRGF0YS5nZXQoKSk7CisgICAgfQorcHJpdmF0ZToKKyAgICB2b2lkIGNvcHlQaXhlbHMo
UUltYWdlIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIGRlc3RQ
aXhlbHMpCisgICAgeworICAgICAgICBzd2l0Y2ggKGltYWdlLmZvcm1hdCgpKSB7CisgICAgICAg
IGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCODg4OgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgIGNvbnN0IHVjaGFyKiBzY2FuTGlu
ZSA9IGltYWdlLnNjYW5MaW5lKHkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAq
KHNjYW5MaW5lKyspOworICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAqKHNj
YW5MaW5lKyspOworICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAqKHNjYW5M
aW5lKyspOworICAgICAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAweEZGOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5jb252ZXJ0VG9Gb3JtYXQoUUlt
YWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaAorICAgICAg
ICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjMyOgorICAgICAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMjoKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBxdWludDMyKiBzY2FuTGluZSA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPGNvbnN0IHF1aW50MzIqPihpbWFnZS5zY2FuTGluZSh5KSk7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAg
IFFSZ2IgcGl4ZWwgPSBzY2FuTGluZVt4XTsKKyAgICAgICAgICAgICAgICAgICAgcVRvQmlnRW5k
aWFuPHF1aW50MzI+KChwaXhlbCA8PCA4KSB8IHFBbHBoYShwaXhlbCksIGRlc3RQaXhlbHMpOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0UGl4ZWxzICs9IDQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9Owor
CiAvLyB0aGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIEhUTUwgaW1hZ2UgZWxlbWVudCBhcyBhIHBh
cmFtZXRlciwgbWFrZXMgaXQgZGlzcGxheSB0aGUgcGl4bWFwL2ltYWdlIGZyb20gUXQKIGNsYXNz
IFF0UGl4bWFwQXNzaWduVG9FbGVtZW50TWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1l
dGhvZCB7CiBwdWJsaWM6CkBAIC0xMzYsNiArMTg2LDcgQEAgY2xhc3MgUXRQaXhtYXBUb1N0cmlu
Z01ldGhvZCA6IHB1YmxpYyBRdAogCiBzdHJ1Y3QgUXRQaXhtYXBNZXRhRGF0YSB7CiAgICAgUXRQ
aXhtYXBUb0RhdGFVcmxNZXRob2QgdG9EYXRhVXJsTWV0aG9kOworICAgIFF0UGl4bWFwVG9JbWFn
ZURhdGFNZXRob2QgdG9JbWFnZURhdGFNZXRob2Q7CiAgICAgUXRQaXhtYXBBc3NpZ25Ub0VsZW1l
bnRNZXRob2QgYXNzaWduVG9FbGVtZW50TWV0aG9kOwogICAgIFF0UGl4bWFwVG9TdHJpbmdNZXRo
b2QgdG9TdHJpbmdNZXRob2Q7CiAgICAgUXRQaXhtYXBIZWlnaHRGaWVsZCBoZWlnaHRGaWVsZDsK
QEAgLTE5OCw2ICsyNDksOCBAQCBNZXRob2RMaXN0IFF0UGl4bWFwQ2xhc3M6Om1ldGhvZHNOYW1l
ZChjCiAgICAgTWV0aG9kTGlzdCBtZXRob2RzOwogICAgIGlmIChpZGVudGlmaWVyID09IFF0UGl4
bWFwVG9EYXRhVXJsTWV0aG9kOjpuYW1lKCkpCiAgICAgICAgIG1ldGhvZHMuYXBwZW5kKCZxdF9w
aXhtYXBfbWV0YURhdGEudG9EYXRhVXJsTWV0aG9kKTsKKyAgICBlbHNlIGlmIChpZGVudGlmaWVy
ID09IFF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6Om5hbWUoKSkKKyAgICAgICAgbWV0aG9kcy5h
cHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS50b0ltYWdlRGF0YU1ldGhvZCk7CiAgICAgZWxzZSBp
ZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1ldGhvZDo6bmFtZSgpKQog
ICAgICAgICBtZXRob2RzLmFwcGVuZCgmcXRfcGl4bWFwX21ldGFEYXRhLmFzc2lnblRvRWxlbWVu
dE1ldGhvZCk7CiAgICAgZWxzZSBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFRvU3RyaW5nTWV0
aG9kOjpuYW1lKCkpCkBAIC0yMTcsNiArMjcwLDcgQEAgRmllbGQqIFF0UGl4bWFwQ2xhc3M6OmZp
ZWxkTmFtZWQoY29uc3QgSQogdm9pZCBRdFBpeG1hcEluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVz
KEV4ZWNTdGF0ZSpleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyKQogewogICAgIGFyci5hZGQo
SWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kOjpuYW1lKCkp
KSk7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBUb0ltYWdl
RGF0YU1ldGhvZDo6bmFtZSgpKSkpOwogICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLCBVU3Ry
aW5nKFF0UGl4bWFwQXNzaWduVG9FbGVtZW50TWV0aG9kOjpuYW1lKCkpKSk7CiAgICAgYXJyLmFk
ZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBUb1N0cmluZ01ldGhvZDo6bmFtZSgp
KSkpOwogICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwV2lkdGhG
aWVsZDo6bmFtZSgpKSkpOwpJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2ODU0KQorKysg
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxMS0wNS0xOSAgQW5kcmV3IFdhc29uICA8cmVjdGFsb2dpY0ByZWN0YWxvZ2ljLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIElt
cGxlbWVudCB0b0ltYWdlRGF0YSgpIGluIFF0V2ViS2l0IEJyaWRnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA4OTcKKworICAgICAgICAqIHRlc3Rz
L2h5YnJpZFBpeG1hcC90ZXN0Lmh0bWw6CisgICAgICAgICogdGVzdHMvaHlicmlkUGl4bWFwL3dp
ZGdldC5jcHA6CisgICAgICAgIChXaWRnZXQ6OldpZGdldCk6CisgICAgICAgIChXaWRnZXQ6OmFi
Y0ltYWdlKToKKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0Lmg6CisgICAgICAg
ICBBZGQgdGVzdHMgZm9yIFF0IGJyaWRnZSB0b0ltYWdlRGF0YSgpIGZlYXR1cmUuCisKIDIwMTEt
MDUtMTkgIFpzb2x0IEZlaMOpciAgPGg0OTAyNjdAc3R1ZC51LXN6ZWdlZC5odT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC90ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdGVzdC5odG1sCShyZXZpc2lvbiA4NjUxNykKKysrIFNv
dXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtNCw4ICs0LDQyIEBACiAgICAgICAgICAgICBpbWcgeyBkaXNwbGF5OiBibG9jazsgYm9y
ZGVyLXN0eWxlOiBncm9vdmV9CiAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgIDxzY3JpcHQ+Cisg
ICAgICAgICAgICBmdW5jdGlvbiB0ZXN0SW1hZ2VEYXRhKCkgeworICAgICAgICAgICAgICAgIHZh
ciBvYmogPSBteVdpZGdldC5pbWFnZTsKKyAgICAgICAgICAgICAgICB2YXIgcHhtID0gbXlXaWRn
ZXQucGl4bWFwOworCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUltYWdlRGF0YVNp
emUobywgaW1hZ2VEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUo
aW1hZ2VEYXRhLmhlaWdodCwgby5oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBteVdpZGdl
dC5jb21wYXJlKGltYWdlRGF0YS53aWR0aCwgby53aWR0aCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNvbXBhcmVJbWFnZURhdGFTaXplKG9iaiwgb2JqLnRvSW1hZ2VEYXRh
KCkpOworICAgICAgICAgICAgICAgIGNvbXBhcmVJbWFnZURhdGFTaXplKHB4bSwgcHhtLnRvSW1h
Z2VEYXRhKCkpOworCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUltYWdlRGF0YVBp
eGVsKG8sIGltYWdlRGF0YSkgeworICAgICAgICAgICAgICAgICAgICBjb21wYXJlSW1hZ2VEYXRh
U2l6ZShvLCBpbWFnZURhdGEpOworICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgcGl4
ZWxzIGFyZSAweEFBQkJDQ0ZGCisgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gaW1hZ2VE
YXRhLmRhdGE7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5s
ZW5ndGg7IGkgKz0gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFy
ZShkYXRhW2kgIF0sIDB4YWEpOyAvLyBSCisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdl
dC5jb21wYXJlKGRhdGFbaSsxXSwgMHhiYik7IC8vIEcKKyAgICAgICAgICAgICAgICAgICAgICAg
IG15V2lkZ2V0LmNvbXBhcmUoZGF0YVtpKzJdLCAweGNjKTsgLy8gQgorICAgICAgICAgICAgICAg
ICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShkYXRhW2krM10sIDB4ZmYpOyAvLyBBCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG9i
akFSR0IzMiA9IG15V2lkZ2V0LmFiY0ltYWdlKDUpOworICAgICAgICAgICAgICAgIGNvbXBhcmVJ
bWFnZURhdGFQaXhlbChvYmpBUkdCMzIsIG9iakFSR0IzMi50b0ltYWdlRGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICB2YXIgb2JqUkdCMzIgPSBteVdpZGdldC5hYmNJbWFnZSg0KTsKKyAgICAgICAg
ICAgICAgICBjb21wYXJlSW1hZ2VEYXRhUGl4ZWwob2JqUkdCMzIsIG9ialJHQjMyLnRvSW1hZ2VE
YXRhKCkpOworICAgICAgICAgICAgICAgIHZhciBvYmpSR0I4ODggPSBteVdpZGdldC5hYmNJbWFn
ZSgxMyk7CisgICAgICAgICAgICAgICAgY29tcGFyZUltYWdlRGF0YVBpeGVsKG9ialJHQjg4OCwg
b2JqUkdCODg4LnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAgICAgICAgIHZhciBvYmpSR0I0NDQg
PSBteVdpZGdldC5hYmNJbWFnZSgxNCk7CisgICAgICAgICAgICAgICAgY29tcGFyZUltYWdlRGF0
YVBpeGVsKG9ialJHQjQ0NCwgb2JqUkdCNDQ0LnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBmdW5jdGlvbiBzdGFydFRlc3QoKQogICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRlc3RJbWFnZURhdGEoKTsKKwogICAgICAgICAgICAgICAgIHZhciBvYmog
PSBteVdpZGdldC5pbWFnZTsKICAgICAgICAgICAgICAgICB2YXIgcHhtID0gbXlXaWRnZXQucGl4
bWFwOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dp
ZGdldC5jcHAJKHJldmlzaW9uIDg2NTE3KQorKysgU291cmNlL1dlYktpdC9xdC90ZXN0cy9oeWJy
aWRQaXhtYXAvd2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsMTEgQEAKIAog
V2lkZ2V0OjpXaWRnZXQoUVdpZGdldCogcGFyZW50KSA6CiAgICAgUVdpZGdldChwYXJlbnQpLAot
ICAgIHVpKG5ldyBVaTo6V2lkZ2V0KQorICAgIHVpKG5ldyBVaTo6V2lkZ2V0KSwKKyAgICBhYmNG
aWxsZWRJbWFnZSgzMiwgMzIsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMikKIHsKICAgICB1aS0+c2V0
dXBVaSh0aGlzKTsKKyAgICBhYmNGaWxsZWRJbWFnZS5maWxsKHFSZ2JhKDB4YWEsIDB4YmIsIDB4
Y2MsIDB4ZmYpKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnJlZnJlc2hKUygpCkBAIC04MCw2ICs4Miwx
MSBAQCBRSW1hZ2UgV2lkZ2V0OjppbWFnZSgpIGNvbnN0CiAgICAgcmV0dXJuIGltZzsKIH0KIAor
UUltYWdlIFdpZGdldDo6YWJjSW1hZ2UoaW50IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gYWJjRmls
bGVkSW1hZ2UuY29udmVydFRvRm9ybWF0KHN0YXRpY19jYXN0PFFJbWFnZTo6Rm9ybWF0Pihmb3Jt
YXQpKTsKK30KKwogV2lkZ2V0Ojp+V2lkZ2V0KCkKIHsKICAgICBkZWxldGUgdWk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24g
ODY1MTcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgUVBpeG1hcCBwaXht
YXAoKSBjb25zdDsKICAgICB2b2lkIHNldEltYWdlKGNvbnN0IFFJbWFnZSYpOwogICAgIFFJbWFn
ZSBpbWFnZSgpIGNvbnN0OworICAgIFFfSU5WT0tBQkxFIFFJbWFnZSBhYmNJbWFnZShpbnQgZm9y
bWF0KTsKIAogcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIHJlZnJlc2hKUygpOwpAQCAtNjcsNiAr
NjgsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgVWk6OldpZGdldCogdWk7CisgICAg
UUltYWdlIGFiY0ZpbGxlZEltYWdlOwogfTsKIAogI2VuZGlmIC8vIHdpZGdldF9oCg==
</data>
<flag name="review"
          id="87351"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94330</attachid>
            <date>2011-05-21 17:29:31 -0700</date>
            <delta_ts>2011-05-22 07:57:57 -0700</delta_ts>
            <desc>implement toImageData() in Qt bridge </desc>
            <filename>tid.diff</filename>
            <type>text/plain</type>
            <size>11495</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MDIzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDUtMjEgIEFuZHJldyBX
YXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQgdG9JbWFnZURhdGEoKSBp
biBRdFdlYktpdCBCcmlkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwODk3CisKKyAgICAgICAgVGVzdHMgYXJlIGluIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAKKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6Om5hbWUp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBUb0ltYWdlRGF0YU1ldGhvZDo6aW52
b2tlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6
OmNvcHlQaXhlbHMpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBDbGFzczo6bWV0
aG9kc05hbWVkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6Omdl
dFByb3BlcnR5TmFtZXMpOgorICAgICAgICAgQWRkIHRvSW1hZ2VEYXRhKCkgdG8gUXQgQnJpZGdl
LCBhbHRlcm5hdGl2ZSB0bworICAgICAgICAgYXNzaWduVG9IVE1MSW1hZ2VFbGVtZW50KCkuCisK
IDIwMTEtMDUtMjEgIEplcmVteSBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gODY4NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDEzICsyMSwxOCBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNIVE1MSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0xvY2su
aCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQu
aCIKKyNpbmNsdWRlIDxRdEVuZGlhbj4KICNpbmNsdWRlIDxRQnVmZmVyPgogI2luY2x1ZGUgPFFC
eXRlQXJyYXk+CisjaW5jbHVkZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNsdWRl
IDxRUGl4bWFwPgogI2luY2x1ZGUgPFFWYXJpYW50PgpAQCAtNzksNiArODQsNTEgQEAgcHVibGlj
OgogCiB9OwogCitjbGFzcyBRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kIDogcHVibGljIFF0UGl4
bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUo
KSB7IHJldHVybiAidG9JbWFnZURhdGEiOyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0YXRl
KiBleGVjLCBRdFBpeG1hcEluc3RhbmNlKiBpbnN0YW5jZSkKKyAgICB7CisgICAgICAgIGludCB3
aWR0aCA9IGluc3RhbmNlLT53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gaW5zdGFuY2Ut
PmhlaWdodCgpOworICAgICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBieXRlQXJyYXkgPSBCeXRlQXJy
YXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICBjb3B5UGl4ZWxzKGluc3Rh
bmNlLT50b0ltYWdlKCksIHdpZHRoLCBoZWlnaHQsIGJ5dGVBcnJheS0+ZGF0YSgpKTsKKyAgICAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSwgYnl0ZUFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLCBpbWFnZURhdGEuZ2V0KCkpOworICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCBjb3B5UGl4
ZWxzKFFJbWFnZSBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBk
ZXN0UGl4ZWxzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbWFnZS5mb3JtYXQoKSkgeworICAg
ICAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODoKKyAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1Y2hhciogc2Nh
bkxpbmUgPSBpbWFnZS5zY2FuTGluZSh5KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKysp
ID0gKihzY2FuTGluZSsrKTsKKyAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0g
KihzY2FuTGluZSsrKTsKKyAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gKihz
Y2FuTGluZSsrKTsKKyAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gMHhGRjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGltYWdlID0gaW1hZ2UuY29udmVydFRvRm9ybWF0
KFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2gKKyAg
ICAgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjoKKyAgICAgICAgY2FzZSBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzI6CisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgcXVpbnQzMiogc2NhbkxpbmUgPSByZWludGVycHJl
dF9jYXN0X3B0cjxjb25zdCBxdWludDMyKj4oaW1hZ2Uuc2NhbkxpbmUoeSkpOworICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICAgICAgICAg
ICAgICBRUmdiIHBpeGVsID0gc2NhbkxpbmVbeF07CisgICAgICAgICAgICAgICAgICAgIHFUb0Jp
Z0VuZGlhbjxxdWludDMyPigocGl4ZWwgPDwgOCkgfCBxQWxwaGEocGl4ZWwpLCBkZXN0UGl4ZWxz
KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBpeGVscyArPSA0OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
fTsKKwogLy8gdGhpcyBmdW5jdGlvbiByZWNlaXZlcyBhbiBIVE1MIGltYWdlIGVsZW1lbnQgYXMg
YSBwYXJhbWV0ZXIsIG1ha2VzIGl0IGRpc3BsYXkgdGhlIHBpeG1hcC9pbWFnZSBmcm9tIFF0CiBj
bGFzcyBRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1ldGhvZCA6IHB1YmxpYyBRdFBpeG1hcFJ1bnRp
bWVNZXRob2QgewogcHVibGljOgpAQCAtMTM2LDYgKzE4Niw3IEBAIGNsYXNzIFF0UGl4bWFwVG9T
dHJpbmdNZXRob2QgOiBwdWJsaWMgUXQKIAogc3RydWN0IFF0UGl4bWFwTWV0YURhdGEgewogICAg
IFF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kIHRvRGF0YVVybE1ldGhvZDsKKyAgICBRdFBpeG1hcFRv
SW1hZ2VEYXRhTWV0aG9kIHRvSW1hZ2VEYXRhTWV0aG9kOwogICAgIFF0UGl4bWFwQXNzaWduVG9F
bGVtZW50TWV0aG9kIGFzc2lnblRvRWxlbWVudE1ldGhvZDsKICAgICBRdFBpeG1hcFRvU3RyaW5n
TWV0aG9kIHRvU3RyaW5nTWV0aG9kOwogICAgIFF0UGl4bWFwSGVpZ2h0RmllbGQgaGVpZ2h0Rmll
bGQ7CkBAIC0xOTgsNiArMjQ5LDggQEAgTWV0aG9kTGlzdCBRdFBpeG1hcENsYXNzOjptZXRob2Rz
TmFtZWQoYwogICAgIE1ldGhvZExpc3QgbWV0aG9kczsKICAgICBpZiAoaWRlbnRpZmllciA9PSBR
dFBpeG1hcFRvRGF0YVVybE1ldGhvZDo6bmFtZSgpKQogICAgICAgICBtZXRob2RzLmFwcGVuZCgm
cXRfcGl4bWFwX21ldGFEYXRhLnRvRGF0YVVybE1ldGhvZCk7CisgICAgZWxzZSBpZiAoaWRlbnRp
ZmllciA9PSBRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpuYW1lKCkpCisgICAgICAgIG1ldGhv
ZHMuYXBwZW5kKCZxdF9waXhtYXBfbWV0YURhdGEudG9JbWFnZURhdGFNZXRob2QpOwogICAgIGVs
c2UgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBBc3NpZ25Ub0VsZW1lbnRNZXRob2Q6Om5hbWUo
KSkKICAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS5hc3NpZ25Ub0Vs
ZW1lbnRNZXRob2QpOwogICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBUb1N0cmlu
Z01ldGhvZDo6bmFtZSgpKQpAQCAtMjE3LDYgKzI3MCw3IEBAIEZpZWxkKiBRdFBpeG1hcENsYXNz
OjpmaWVsZE5hbWVkKGNvbnN0IEkKIHZvaWQgUXRQaXhtYXBJbnN0YW5jZTo6Z2V0UHJvcGVydHlO
YW1lcyhFeGVjU3RhdGUqZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycikKIHsKICAgICBhcnIu
YWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvRGF0YVVybE1ldGhvZDo6bmFt
ZSgpKSkpOworICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwVG9J
bWFnZURhdGFNZXRob2Q6Om5hbWUoKSkpKTsKICAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywg
VVN0cmluZyhRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1ldGhvZDo6bmFtZSgpKSkpOwogICAgIGFy
ci5hZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwVG9TdHJpbmdNZXRob2Q6Om5h
bWUoKSkpKTsKICAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFdp
ZHRoRmllbGQ6Om5hbWUoKSkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NzAyMykK
KysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTEtMDUtMjEgIEFuZHJldyBXYXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBJbXBsZW1lbnQgdG9JbWFnZURhdGEoKSBpbiBRdFdlYktpdCBCcmlkZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODk3CisKKyAgICAgICAgKiBk
b2NzL3F0d2Via2l0LWJyaWRnZS5xZG9jOgorICAgICAgICAqIGRvY3Mvd2Via2l0c25pcHBldHMv
cXR3ZWJraXRfYnJpZGdlX3NuaXBwZXRzLmNwcDoKKyAgICAgICAgKHdyYXBJbkZ1bmN0aW9uKToK
KyAgICAgICAgIERvY3VtZW50IFF0IGJyaWRnZSB0b0ltYWdlRGF0YSgpIGZlYXR1cmUuCisgICAg
ICAgICogdGVzdHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbDoKKyAgICAgICAgKiB0ZXN0cy9oeWJy
aWRQaXhtYXAvd2lkZ2V0LmNwcDoKKyAgICAgICAgKFdpZGdldDo6V2lkZ2V0KToKKyAgICAgICAg
KFdpZGdldDo6YWJjSW1hZ2UpOgorICAgICAgICAqIHRlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQu
aDoKKyAgICAgICAgIEFkZCB0ZXN0cyBmb3IgUXQgYnJpZGdlIHRvSW1hZ2VEYXRhKCkgZmVhdHVy
ZS4KKwogMjAxMS0wNS0yMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNlL1dlYktpdC9x
dC9kb2NzL3F0d2Via2l0LWJyaWRnZS5xZG9jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvZG9jcy9xdHdlYmtpdC1icmlkZ2UucWRvYwkocmV2aXNpb24gODY4NjEpCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L2RvY3MvcXR3ZWJraXQtYnJpZGdlLnFkb2MJKHdvcmtpbmcgY29weSkKQEAgLTM2
Myw2ICszNjMsNyBAQAogICAgIGJ5IGFzc2lnbmluZyBpdCB0byBhbiBleGlzdGluZyBcY3s8aW1n
Pn0gZWxlbWVudCB3aXRoIFxje2Fzc2lnblRvSFRNTEltYWdlRWxlbWVudCgpfS4gSXQgY2FuIGFs
c28gdXNlIHRoZSBcY3t0b0RhdGFVUkwoKX0gZnVuY3Rpb24sCiAgICAgd2hpY2ggYWxsb3dzIHVz
aW5nIHRoZSBwaXhtYXAgYXMgdGhlIFxje3NyY30gYXR0cmlidXRlIG9mIGFuIGltYWdlIG9yIGFz
IGEgXGN7YmFja2dyb3VuZC1pbWFnZX0gVVJMLiBOb3RlIHRoYXQgdGhlIFxje3RvRGF0YVVSTCgp
fQogICAgIGZ1bmN0aW9uIGlzIGNvc3RseSBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9u
LgorICAgIEl0IGNhbiBhbHNvIHVzZSB0aGUgXGN7dG9JbWFnZURhdGEoKX0gZnVuY3Rpb24gdG8g
Y29udmVydCB0aGUgcGl4bWFwIHRvIGEgSmF2YVNjcmlwdCBcY3tJbWFnZURhdGF9IG9iamVjdC4K
IAogICAgIEV4YW1wbGUgY29kZToKIApJbmRleDogU291cmNlL1dlYktpdC9xdC9kb2NzL3dlYmtp
dHNuaXBwZXRzL3F0d2Via2l0X2JyaWRnZV9zbmlwcGV0cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9kb2NzL3dlYmtpdHNuaXBwZXRzL3F0d2Via2l0X2JyaWRnZV9zbmlwcGV0
cy5jcHAJKHJldmlzaW9uIDg2ODYxKQorKysgU291cmNlL1dlYktpdC9xdC9kb2NzL3dlYmtpdHNu
aXBwZXRzL3F0d2Via2l0X2JyaWRnZV9zbmlwcGV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
LDYgKzE1LDcgQEAgdm9pZCB3cmFwSW5GdW5jdGlvbigpCiAgICAgICAgIGhlaWdodDogLi4uLAog
ICAgICAgICB0b0RhdGFVUkw6IGZ1bmN0aW9uKCkgeyAuLi4gfSwKICAgICAgICAgYXNzaWduVG9I
VE1MSW1hZ2VFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50KSB7IC4uLiB9CisgICAgICAgIHRvSW1h
Z2VEYXRhOiBmdW5jdGlvbigpIHsgLi4uIH0KICAgICB9CiAgICAgLy8hIFsxXQogI2VuZGlmCkBA
IC00MSwxMSArNDIsMTQgQEAgdm9pZCB3cmFwSW5GdW5jdGlvbigpCiAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gbG9hZEltYWdlKCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIG15T2JqZWN0Lm15UGl4bWFwLmFzc2lnblRvSFRNTEltYWdlRWxlbWVudChkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaW1hZ2VFbGVtZW50IikpOworICAgICAgICAgICAgICAgICAgICB2YXIg
Y29udGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXNFbGVtZW50IikuZ2V0Q29u
dGV4dCgiMmQiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5wdXRJbWFnZURhdGEobXlP
YmplY3QubXlQaXhtYXAudG9JbWFnZURhdGEoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgPC9zY3JpcHQ+CiAgICAgICAgIDwvaGVhZD4KICAgICAgICAgPGJvZHkgb25sb2FkPSJs
b2FkSW1hZ2UoKSI+CiAgICAgICAgICAgICA8aW1nIGlkPSJpbWFnZUVsZW1lbnQiIHdpZHRoPSIz
MDAiIGhlaWdodD0iMjAwIiAvPgorICAgICAgICAgICAgPGNhbnZhcyBpZD0iY2FudmFzRWxlbWVu
dCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIyMDAiIC8+CiAgICAgICAgIDwvYm9keT4KICAgICA8L2h0
bWw+CiAvLyEgWzNdCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90
ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXht
YXAvdGVzdC5odG1sCShyZXZpc2lvbiA4Njg2MSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMv
aHlicmlkUGl4bWFwL3Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNCw4ICs0LDQyIEBACiAg
ICAgICAgICAgICBpbWcgeyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXN0eWxlOiBncm9vdmV9CiAg
ICAgICAgIDwvc3R5bGU+CiAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICBmdW5jdGlvbiB0
ZXN0SW1hZ2VEYXRhKCkgeworICAgICAgICAgICAgICAgIHZhciBvYmogPSBteVdpZGdldC5pbWFn
ZTsKKyAgICAgICAgICAgICAgICB2YXIgcHhtID0gbXlXaWRnZXQucGl4bWFwOworCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUltYWdlRGF0YVNpemUobywgaW1hZ2VEYXRhKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUoaW1hZ2VEYXRhLmhlaWdodCwgby5o
ZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGltYWdlRGF0YS53
aWR0aCwgby53aWR0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbXBh
cmVJbWFnZURhdGFTaXplKG9iaiwgb2JqLnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAgICAgICAg
IGNvbXBhcmVJbWFnZURhdGFTaXplKHB4bSwgcHhtLnRvSW1hZ2VEYXRhKCkpOworCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUltYWdlRGF0YVBpeGVsKG8sIGltYWdlRGF0YSkgewor
ICAgICAgICAgICAgICAgICAgICBjb21wYXJlSW1hZ2VEYXRhU2l6ZShvLCBpbWFnZURhdGEpOwor
ICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgcGl4ZWxzIGFyZSAweEFBQkJDQ0ZGCisg
ICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gNCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShkYXRhW2ldLCAweGFhKTsgLy8g
UgorICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShkYXRhW2krMV0sIDB4
YmIpOyAvLyBHCisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGRhdGFb
aSsyXSwgMHhjYyk7IC8vIEIKKyAgICAgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBh
cmUoZGF0YVtpKzNdLCAweGZmKTsgLy8gQQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBvYmpBUkdCMzIgPSBteVdpZGdldC5hYmNJ
bWFnZSg1KTsKKyAgICAgICAgICAgICAgICBjb21wYXJlSW1hZ2VEYXRhUGl4ZWwob2JqQVJHQjMy
LCBvYmpBUkdCMzIudG9JbWFnZURhdGEoKSk7CisgICAgICAgICAgICAgICAgdmFyIG9ialJHQjMy
ID0gbXlXaWRnZXQuYWJjSW1hZ2UoNCk7CisgICAgICAgICAgICAgICAgY29tcGFyZUltYWdlRGF0
YVBpeGVsKG9ialJHQjMyLCBvYmpSR0IzMi50b0ltYWdlRGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICB2YXIgb2JqUkdCODg4ID0gbXlXaWRnZXQuYWJjSW1hZ2UoMTMpOworICAgICAgICAgICAgICAg
IGNvbXBhcmVJbWFnZURhdGFQaXhlbChvYmpSR0I4ODgsIG9ialJHQjg4OC50b0ltYWdlRGF0YSgp
KTsKKyAgICAgICAgICAgICAgICB2YXIgb2JqUkdCNDQ0ID0gbXlXaWRnZXQuYWJjSW1hZ2UoMTQp
OworICAgICAgICAgICAgICAgIGNvbXBhcmVJbWFnZURhdGFQaXhlbChvYmpSR0I0NDQsIG9ialJH
QjQ0NC50b0ltYWdlRGF0YSgpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZnVuY3Rp
b24gc3RhcnRUZXN0KCkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXN0SW1hZ2VE
YXRhKCk7CisKICAgICAgICAgICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CiAgICAg
ICAgICAgICAgICAgdmFyIHB4bSA9IG15V2lkZ2V0LnBpeG1hcDsKIApJbmRleDogU291cmNlL1dl
YktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCShyZXZpc2lvbiA4Njg2
MSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDExIEBACiAKIFdpZGdldDo6V2lkZ2V0KFFXaWRnZXQq
IHBhcmVudCkgOgogICAgIFFXaWRnZXQocGFyZW50KSwKLSAgICB1aShuZXcgVWk6OldpZGdldCkK
KyAgICB1aShuZXcgVWk6OldpZGdldCksCisgICAgYWJjRmlsbGVkSW1hZ2UoMzIsIDMyLCBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzIpCiB7CiAgICAgdWktPnNldHVwVWkodGhpcyk7CisgICAgYWJjRmls
bGVkSW1hZ2UuZmlsbChxUmdiYSgweGFhLCAweGJiLCAweGNjLCAweGZmKSk7CiB9CiAKIHZvaWQg
V2lkZ2V0OjpyZWZyZXNoSlMoKQpAQCAtODAsNiArODIsMTEgQEAgUUltYWdlIFdpZGdldDo6aW1h
Z2UoKSBjb25zdAogICAgIHJldHVybiBpbWc7CiB9CiAKK1FJbWFnZSBXaWRnZXQ6OmFiY0ltYWdl
KGludCBmb3JtYXQpCit7CisgICAgcmV0dXJuIGFiY0ZpbGxlZEltYWdlLmNvbnZlcnRUb0Zvcm1h
dChzdGF0aWNfY2FzdDxRSW1hZ2U6OkZvcm1hdD4oZm9ybWF0KSk7Cit9CisKIFdpZGdldDo6fldp
ZGdldCgpCiB7CiAgICAgZGVsZXRlIHVpOwpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvd2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC90ZXN0
cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgJKHJldmlzaW9uIDg2ODYxKQorKysgU291cmNlL1dlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYg
KzU2LDcgQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgaW1hZ2VTbG90KGNvbnN0IFFJbWFnZSYp
OwogICAgIHZvaWQgcGl4bWFwU2xvdChjb25zdCBRUGl4bWFwJik7CiAgICAgdm9pZCByYW5kb21T
bG90KGNvbnN0IFFQaXhtYXAmKTsKKyAgICBRSW1hZ2UgYWJjSW1hZ2UoaW50IGZvcm1hdCk7CiAK
IHNpZ25hbHM6CiAgICAgdm9pZCB0ZXN0Q29tcGxldGUoKTsKQEAgLTY3LDYgKzY4LDcgQEAgcHJv
dGVjdGVkOgogCiBwcml2YXRlOgogICAgIFVpOjpXaWRnZXQqIHVpOworICAgIFFJbWFnZSBhYmNG
aWxsZWRJbWFnZTsKIH07CiAKICNlbmRpZiAvLyB3aWRnZXRfaAo=
</data>
<flag name="review"
          id="87622"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="87632"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94342</attachid>
            <date>2011-05-22 07:57:57 -0700</date>
            <delta_ts>2011-05-22 09:57:08 -0700</delta_ts>
            <desc>implement toImageData() in Qt bridge </desc>
            <filename>passbyref.diff</filename>
            <type>text/plain</type>
            <size>11544</size>
            <attacher name="Andrew Wason">rectalogic</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MDIzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDUtMjEgIEFuZHJldyBX
YXNvbiAgPHJlY3RhbG9naWNAcmVjdGFsb2dpYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQgdG9JbWFnZURhdGEoKSBp
biBRdFdlYktpdCBCcmlkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwODk3CisKKyAgICAgICAgVGVzdHMgYXJlIGluIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAKKworICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6Om5hbWUp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBUb0ltYWdlRGF0YU1ldGhvZDo6aW52
b2tlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2Q6
OmNvcHlQaXhlbHMpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBDbGFzczo6bWV0
aG9kc05hbWVkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6Omdl
dFByb3BlcnR5TmFtZXMpOgorICAgICAgICAgQWRkIHRvSW1hZ2VEYXRhKCkgdG8gUXQgQnJpZGdl
LCBhbHRlcm5hdGl2ZSB0bworICAgICAgICAgYXNzaWduVG9IVE1MSW1hZ2VFbGVtZW50KCkuCisK
IDIwMTEtMDUtMjEgIEplcmVteSBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gODY4NjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDEzICsyMSwxOCBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNIVE1MSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0xvY2su
aCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQu
aCIKKyNpbmNsdWRlIDxRdEVuZGlhbj4KICNpbmNsdWRlIDxRQnVmZmVyPgogI2luY2x1ZGUgPFFC
eXRlQXJyYXk+CisjaW5jbHVkZSA8UUNvbG9yPgogI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNsdWRl
IDxRUGl4bWFwPgogI2luY2x1ZGUgPFFWYXJpYW50PgpAQCAtNzksNiArODQsNTIgQEAgcHVibGlj
OgogCiB9OwogCitjbGFzcyBRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kIDogcHVibGljIFF0UGl4
bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUo
KSB7IHJldHVybiAidG9JbWFnZURhdGEiOyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0YXRl
KiBleGVjLCBRdFBpeG1hcEluc3RhbmNlKiBpbnN0YW5jZSkKKyAgICB7CisgICAgICAgIGludCB3
aWR0aCA9IGluc3RhbmNlLT53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gaW5zdGFuY2Ut
PmhlaWdodCgpOworICAgICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBieXRlQXJyYXkgPSBCeXRlQXJy
YXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgICAgICBjb3B5UGl4ZWxzKGluc3Rh
bmNlLT50b0ltYWdlKCksIHdpZHRoLCBoZWlnaHQsIGJ5dGVBcnJheS0+ZGF0YSgpKTsKKyAgICAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSwgYnl0ZUFycmF5KTsKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLCBpbWFnZURhdGEuZ2V0KCkpOworICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCBjb3B5UGl4
ZWxzKGNvbnN0IFFJbWFnZSYgc291cmNlSW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5z
aWduZWQgY2hhciogZGVzdFBpeGVscykKKyAgICB7CisgICAgICAgIFFJbWFnZSBpbWFnZShzb3Vy
Y2VJbWFnZSk7CisgICAgICAgIHN3aXRjaCAoaW1hZ2UuZm9ybWF0KCkpIHsKKyAgICAgICAgY2Fz
ZSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg6CisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgdWNoYXIqIHNjYW5MaW5lID0g
aW1hZ2Uuc2NhbkxpbmUoeSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKSB7CisgICAgICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9ICooc2Nh
bkxpbmUrKyk7CisgICAgICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9ICooc2Nhbkxp
bmUrKyk7CisgICAgICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9ICooc2NhbkxpbmUr
Kyk7CisgICAgICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9IDB4RkY7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpbWFnZSA9IGltYWdlLmNvbnZlcnRUb0Zvcm1hdChRSW1hZ2U6
OkZvcm1hdF9BUkdCMzIpOworICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoCisgICAgICAgIGNh
c2UgUUltYWdlOjpGb3JtYXRfUkdCMzI6CisgICAgICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfQVJH
QjMyOgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAg
ICAgICAgICAgICAgIGNvbnN0IHF1aW50MzIqIHNjYW5MaW5lID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8Y29uc3QgcXVpbnQzMio+KGltYWdlLnNjYW5MaW5lKHkpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgUVJn
YiBwaXhlbCA9IHNjYW5MaW5lW3hdOworICAgICAgICAgICAgICAgICAgICBxVG9CaWdFbmRpYW48
cXVpbnQzMj4oKHBpeGVsIDw8IDgpIHwgcUFscGhhKHBpeGVsKSwgZGVzdFBpeGVscyk7CisgICAg
ICAgICAgICAgICAgICAgIGRlc3RQaXhlbHMgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK307CisKIC8v
IHRoaXMgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gSFRNTCBpbWFnZSBlbGVtZW50IGFzIGEgcGFyYW1l
dGVyLCBtYWtlcyBpdCBkaXNwbGF5IHRoZSBwaXhtYXAvaW1hZ2UgZnJvbSBRdAogY2xhc3MgUXRQ
aXhtYXBBc3NpZ25Ub0VsZW1lbnRNZXRob2QgOiBwdWJsaWMgUXRQaXhtYXBSdW50aW1lTWV0aG9k
IHsKIHB1YmxpYzoKQEAgLTEzNiw2ICsxODcsNyBAQCBjbGFzcyBRdFBpeG1hcFRvU3RyaW5nTWV0
aG9kIDogcHVibGljIFF0CiAKIHN0cnVjdCBRdFBpeG1hcE1ldGFEYXRhIHsKICAgICBRdFBpeG1h
cFRvRGF0YVVybE1ldGhvZCB0b0RhdGFVcmxNZXRob2Q7CisgICAgUXRQaXhtYXBUb0ltYWdlRGF0
YU1ldGhvZCB0b0ltYWdlRGF0YU1ldGhvZDsKICAgICBRdFBpeG1hcEFzc2lnblRvRWxlbWVudE1l
dGhvZCBhc3NpZ25Ub0VsZW1lbnRNZXRob2Q7CiAgICAgUXRQaXhtYXBUb1N0cmluZ01ldGhvZCB0
b1N0cmluZ01ldGhvZDsKICAgICBRdFBpeG1hcEhlaWdodEZpZWxkIGhlaWdodEZpZWxkOwpAQCAt
MTk4LDYgKzI1MCw4IEBAIE1ldGhvZExpc3QgUXRQaXhtYXBDbGFzczo6bWV0aG9kc05hbWVkKGMK
ICAgICBNZXRob2RMaXN0IG1ldGhvZHM7CiAgICAgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBU
b0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkKICAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1h
cF9tZXRhRGF0YS50b0RhdGFVcmxNZXRob2QpOworICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgPT0g
UXRQaXhtYXBUb0ltYWdlRGF0YU1ldGhvZDo6bmFtZSgpKQorICAgICAgICBtZXRob2RzLmFwcGVu
ZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvSW1hZ2VEYXRhTWV0aG9kKTsKICAgICBlbHNlIGlmIChp
ZGVudGlmaWVyID09IFF0UGl4bWFwQXNzaWduVG9FbGVtZW50TWV0aG9kOjpuYW1lKCkpCiAgICAg
ICAgIG1ldGhvZHMuYXBwZW5kKCZxdF9waXhtYXBfbWV0YURhdGEuYXNzaWduVG9FbGVtZW50TWV0
aG9kKTsKICAgICBlbHNlIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwVG9TdHJpbmdNZXRob2Q6
Om5hbWUoKSkKQEAgLTIxNyw2ICsyNzEsNyBAQCBGaWVsZCogUXRQaXhtYXBDbGFzczo6ZmllbGRO
YW1lZChjb25zdCBJCiB2b2lkIFF0UGl4bWFwSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhl
Y1N0YXRlKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnIpCiB7CiAgICAgYXJyLmFkZChJZGVu
dGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkpKTsK
KyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvSW1hZ2VEYXRh
TWV0aG9kOjpuYW1lKCkpKSk7CiAgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmco
UXRQaXhtYXBBc3NpZ25Ub0VsZW1lbnRNZXRob2Q6Om5hbWUoKSkpKTsKICAgICBhcnIuYWRkKElk
ZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvU3RyaW5nTWV0aG9kOjpuYW1lKCkpKSk7
CiAgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBXaWR0aEZpZWxk
OjpuYW1lKCkpKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gODcwMjMpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisy
MDExLTA1LTIxICBBbmRyZXcgV2Fzb24gIDxyZWN0YWxvZ2ljQHJlY3RhbG9naWMuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVt
ZW50IHRvSW1hZ2VEYXRhKCkgaW4gUXRXZWJLaXQgQnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDg5NworCisgICAgICAgICogZG9jcy9xdHdl
YmtpdC1icmlkZ2UucWRvYzoKKyAgICAgICAgKiBkb2NzL3dlYmtpdHNuaXBwZXRzL3F0d2Via2l0
X2JyaWRnZV9zbmlwcGV0cy5jcHA6CisgICAgICAgICh3cmFwSW5GdW5jdGlvbik6CisgICAgICAg
ICBEb2N1bWVudCBRdCBicmlkZ2UgdG9JbWFnZURhdGEoKSBmZWF0dXJlLgorICAgICAgICAqIHRl
c3RzL2h5YnJpZFBpeG1hcC90ZXN0Lmh0bWw6CisgICAgICAgICogdGVzdHMvaHlicmlkUGl4bWFw
L3dpZGdldC5jcHA6CisgICAgICAgIChXaWRnZXQ6OldpZGdldCk6CisgICAgICAgIChXaWRnZXQ6
OmFiY0ltYWdlKToKKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0Lmg6CisgICAg
ICAgICBBZGQgdGVzdHMgZm9yIFF0IGJyaWRnZSB0b0ltYWdlRGF0YSgpIGZlYXR1cmUuCisKIDIw
MTEtMDUtMjAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvZG9jcy9x
dHdlYmtpdC1icmlkZ2UucWRvYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L2RvY3Mv
cXR3ZWJraXQtYnJpZGdlLnFkb2MJKHJldmlzaW9uIDg2ODYxKQorKysgU291cmNlL1dlYktpdC9x
dC9kb2NzL3F0d2Via2l0LWJyaWRnZS5xZG9jCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNiArMzYz
LDcgQEAKICAgICBieSBhc3NpZ25pbmcgaXQgdG8gYW4gZXhpc3RpbmcgXGN7PGltZz59IGVsZW1l
bnQgd2l0aCBcY3thc3NpZ25Ub0hUTUxJbWFnZUVsZW1lbnQoKX0uIEl0IGNhbiBhbHNvIHVzZSB0
aGUgXGN7dG9EYXRhVVJMKCl9IGZ1bmN0aW9uLAogICAgIHdoaWNoIGFsbG93cyB1c2luZyB0aGUg
cGl4bWFwIGFzIHRoZSBcY3tzcmN9IGF0dHJpYnV0ZSBvZiBhbiBpbWFnZSBvciBhcyBhIFxje2Jh
Y2tncm91bmQtaW1hZ2V9IFVSTC4gTm90ZSB0aGF0IHRoZSBcY3t0b0RhdGFVUkwoKX0KICAgICBm
dW5jdGlvbiBpcyBjb3N0bHkgYW5kIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4KKyAgICBJ
dCBjYW4gYWxzbyB1c2UgdGhlIFxje3RvSW1hZ2VEYXRhKCl9IGZ1bmN0aW9uIHRvIGNvbnZlcnQg
dGhlIHBpeG1hcCB0byBhIEphdmFTY3JpcHQgXGN7SW1hZ2VEYXRhfSBvYmplY3QuCiAKICAgICBF
eGFtcGxlIGNvZGU6CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvZG9jcy93ZWJraXRzbmlwcGV0
cy9xdHdlYmtpdF9icmlkZ2Vfc25pcHBldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvZG9jcy93ZWJraXRzbmlwcGV0cy9xdHdlYmtpdF9icmlkZ2Vfc25pcHBldHMuY3BwCShy
ZXZpc2lvbiA4Njg2MSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvZG9jcy93ZWJraXRzbmlwcGV0cy9x
dHdlYmtpdF9icmlkZ2Vfc25pcHBldHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw3
IEBAIHZvaWQgd3JhcEluRnVuY3Rpb24oKQogICAgICAgICBoZWlnaHQ6IC4uLiwKICAgICAgICAg
dG9EYXRhVVJMOiBmdW5jdGlvbigpIHsgLi4uIH0sCiAgICAgICAgIGFzc2lnblRvSFRNTEltYWdl
RWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkgeyAuLi4gfQorICAgICAgICB0b0ltYWdlRGF0YTog
ZnVuY3Rpb24oKSB7IC4uLiB9CiAgICAgfQogICAgIC8vISBbMV0KICNlbmRpZgpAQCAtNDEsMTEg
KzQyLDE0IEBAIHZvaWQgd3JhcEluRnVuY3Rpb24oKQogICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IGxvYWRJbWFnZSgpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBteU9i
amVjdC5teVBpeG1hcC5hc3NpZ25Ub0hUTUxJbWFnZUVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImltYWdlRWxlbWVudCIpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzRWxlbWVudCIpLmdldENvbnRleHQoIjJk
Iik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucHV0SW1hZ2VEYXRhKG15T2JqZWN0Lm15
UGl4bWFwLnRvSW1hZ2VEYXRhKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIDwv
c2NyaXB0PgogICAgICAgICA8L2hlYWQ+CiAgICAgICAgIDxib2R5IG9ubG9hZD0ibG9hZEltYWdl
KCkiPgogICAgICAgICAgICAgPGltZyBpZD0iaW1hZ2VFbGVtZW50IiB3aWR0aD0iMzAwIiBoZWln
aHQ9IjIwMCIgLz4KKyAgICAgICAgICAgIDxjYW52YXMgaWQ9ImNhbnZhc0VsZW1lbnQiIHdpZHRo
PSIzMDAiIGhlaWdodD0iMjAwIiAvPgogICAgICAgICA8L2JvZHk+CiAgICAgPC9odG1sPgogLy8h
IFszXQpJbmRleDogU291cmNlL1dlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdGVzdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Rlc3Qu
aHRtbAkocmV2aXNpb24gODY4NjEpCisrKyBTb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBp
eG1hcC90ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQsOCArNCw0MiBAQAogICAgICAgICAg
ICAgaW1nIHsgZGlzcGxheTogYmxvY2s7IGJvcmRlci1zdHlsZTogZ3Jvb3ZlfQogICAgICAgICA8
L3N0eWxlPgogICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdEltYWdl
RGF0YSgpIHsKKyAgICAgICAgICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAg
ICAgICAgICAgICAgdmFyIHB4bSA9IG15V2lkZ2V0LnBpeG1hcDsKKworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIGNvbXBhcmVJbWFnZURhdGFTaXplKG8sIGltYWdlRGF0YSkgeworICAgICAgICAg
ICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGltYWdlRGF0YS5oZWlnaHQsIG8uaGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShpbWFnZURhdGEud2lkdGgsIG8u
d2lkdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb21wYXJlSW1hZ2VE
YXRhU2l6ZShvYmosIG9iai50b0ltYWdlRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBjb21wYXJl
SW1hZ2VEYXRhU2l6ZShweG0sIHB4bS50b0ltYWdlRGF0YSgpKTsKKworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIGNvbXBhcmVJbWFnZURhdGFQaXhlbChvLCBpbWFnZURhdGEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcGFyZUltYWdlRGF0YVNpemUobywgaW1hZ2VEYXRhKTsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBpeGVscyBhcmUgMHhBQUJCQ0NGRgorICAgICAgICAg
ICAgICAgICAgICB2YXIgZGF0YSA9IGltYWdlRGF0YS5kYXRhOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUoZGF0YVtpXSwgMHhhYSk7IC8vIFIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUoZGF0YVtpKzFdLCAweGJiKTsgLy8g
RworICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShkYXRhW2krMl0sIDB4
Y2MpOyAvLyBCCisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGRhdGFb
aSszXSwgMHhmZik7IC8vIEEKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2YXIgb2JqQVJHQjMyID0gbXlXaWRnZXQuYWJjSW1hZ2UoNSk7
CisgICAgICAgICAgICAgICAgY29tcGFyZUltYWdlRGF0YVBpeGVsKG9iakFSR0IzMiwgb2JqQVJH
QjMyLnRvSW1hZ2VEYXRhKCkpOworICAgICAgICAgICAgICAgIHZhciBvYmpSR0IzMiA9IG15V2lk
Z2V0LmFiY0ltYWdlKDQpOworICAgICAgICAgICAgICAgIGNvbXBhcmVJbWFnZURhdGFQaXhlbChv
YmpSR0IzMiwgb2JqUkdCMzIudG9JbWFnZURhdGEoKSk7CisgICAgICAgICAgICAgICAgdmFyIG9i
alJHQjg4OCA9IG15V2lkZ2V0LmFiY0ltYWdlKDEzKTsKKyAgICAgICAgICAgICAgICBjb21wYXJl
SW1hZ2VEYXRhUGl4ZWwob2JqUkdCODg4LCBvYmpSR0I4ODgudG9JbWFnZURhdGEoKSk7CisgICAg
ICAgICAgICAgICAgdmFyIG9ialJHQjQ0NCA9IG15V2lkZ2V0LmFiY0ltYWdlKDE0KTsKKyAgICAg
ICAgICAgICAgICBjb21wYXJlSW1hZ2VEYXRhUGl4ZWwob2JqUkdCNDQ0LCBvYmpSR0I0NDQudG9J
bWFnZURhdGEoKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZ1bmN0aW9uIHN0YXJ0
VGVzdCgpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVzdEltYWdlRGF0YSgpOwor
CiAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IG15V2lkZ2V0LmltYWdlOwogICAgICAgICAgICAg
ICAgIHZhciBweG0gPSBteVdpZGdldC5waXhtYXA7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
dGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gODY4NjEpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw5ICsyNywxMSBAQAogCiBXaWRnZXQ6OldpZGdldChRV2lkZ2V0KiBwYXJlbnQp
IDoKICAgICBRV2lkZ2V0KHBhcmVudCksCi0gICAgdWkobmV3IFVpOjpXaWRnZXQpCisgICAgdWko
bmV3IFVpOjpXaWRnZXQpLAorICAgIGFiY0ZpbGxlZEltYWdlKDMyLCAzMiwgUUltYWdlOjpGb3Jt
YXRfQVJHQjMyKQogewogICAgIHVpLT5zZXR1cFVpKHRoaXMpOworICAgIGFiY0ZpbGxlZEltYWdl
LmZpbGwocVJnYmEoMHhhYSwgMHhiYiwgMHhjYywgMHhmZikpOwogfQogCiB2b2lkIFdpZGdldDo6
cmVmcmVzaEpTKCkKQEAgLTgwLDYgKzgyLDExIEBAIFFJbWFnZSBXaWRnZXQ6OmltYWdlKCkgY29u
c3QKICAgICByZXR1cm4gaW1nOwogfQogCitRSW1hZ2UgV2lkZ2V0OjphYmNJbWFnZShpbnQgZm9y
bWF0KQoreworICAgIHJldHVybiBhYmNGaWxsZWRJbWFnZS5jb252ZXJ0VG9Gb3JtYXQoc3RhdGlj
X2Nhc3Q8UUltYWdlOjpGb3JtYXQ+KGZvcm1hdCkpOworfQorCiBXaWRnZXQ6On5XaWRnZXQoKQog
ewogICAgIGRlbGV0ZSB1aTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4
bWFwL3dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL3dpZGdldC5oCShyZXZpc2lvbiA4Njg2MSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvdGVz
dHMvaHlicmlkUGl4bWFwL3dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBA
IHB1YmxpYyBzbG90czoKICAgICB2b2lkIGltYWdlU2xvdChjb25zdCBRSW1hZ2UmKTsKICAgICB2
b2lkIHBpeG1hcFNsb3QoY29uc3QgUVBpeG1hcCYpOwogICAgIHZvaWQgcmFuZG9tU2xvdChjb25z
dCBRUGl4bWFwJik7CisgICAgUUltYWdlIGFiY0ltYWdlKGludCBmb3JtYXQpOwogCiBzaWduYWxz
OgogICAgIHZvaWQgdGVzdENvbXBsZXRlKCk7CkBAIC02Nyw2ICs2OCw3IEBAIHByb3RlY3RlZDoK
IAogcHJpdmF0ZToKICAgICBVaTo6V2lkZ2V0KiB1aTsKKyAgICBRSW1hZ2UgYWJjRmlsbGVkSW1h
Z2U7CiB9OwogCiAjZW5kaWYgLy8gd2lkZ2V0X2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>