<?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>130917</bug_id>
          
          <creation_ts>2014-03-28 16:41:15 -0700</creation_ts>
          <short_desc>Add variant of phone number parsing that use DocumentMarker in the current selection</short_desc>
          <delta_ts>2014-03-31 14:54:51 -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>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>995489</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-28 16:41:15 -0700</bug_when>
    <thetext>Convert phone number parsing to use DocumentMarkers rather than DOM mutation.

For now we&apos;ll also only scan in selections instead of doing detection during parsing, to avoid a PLT regression.

&lt;rdar://problem/16379566&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995493</commentid>
    <comment_count>1</comment_count>
      <attachid>228091</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-28 16:48:32 -0700</bug_when>
    <thetext>Created attachment 228091
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995496</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-28 16:49:40 -0700</bug_when>
    <thetext>Attachment 228091 did not pass style-queue:


ERROR: Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2370:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2371:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2380:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 3 in 8 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>995504</commentid>
    <comment_count>3</comment_count>
      <attachid>228091</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-03-28 17:00:47 -0700</bug_when>
    <thetext>Comment on attachment 228091
Patch v1

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

&gt; Source/WebCore/editing/Editor.cpp:3319
&gt; +#if ENABLE(TELEPHONE_NUMBER_DETECTION)

Did this ENABLE flag already exist?

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2370
&gt; +//static inline bool disallowTelephoneNumberParsing(const Node&amp; node)

We don&apos;t usually leave commented out code in the tree.

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2388
&gt; +    UNUSED_PARAM(node);
&gt; +    return false;

Please make sure this won&apos;t break iOS.

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2390
&gt; +//    const ContainerNode* currentNode = &amp;node;

Ditto

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1254
&gt; +    // FIXME: This is placeholder UI for development of the feature.

Not a useful comment in the context of the open source project.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1273
&gt; +    outline.addRoundedRect(markerRect, FloatSize(4, 4));
&gt; +    ctx-&gt;setFillColor(Color(150, 150, 150, 255), ColorSpaceDeviceRGB);

Maybe pull constants out so they can have names?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995543</commentid>
    <comment_count>4</comment_count>
      <attachid>228091</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-28 19:53:30 -0700</bug_when>
    <thetext>Comment on attachment 228091
Patch v1

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

&gt; Source/WebCore/editing/Editor.cpp:3344
&gt; +    clearDataDetectedTelephoneNumbers();

Will this also get called when the selection changes to &quot;no selection&quot;?

&gt; Source/WebCore/editing/Editor.h:474
&gt; +    void startTelephoneNumberScan();

I don&apos;t think startTelephoneNumberScan() is a great name. How about scanSelectionForTelephoneNumbers().

&gt;&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2388
&gt;&gt; +    return false;
&gt; 
&gt; Please make sure this won&apos;t break iOS.

You should keep all this code in, as it it is still need on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995556</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-28 22:13:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt;&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2388
&gt; &gt;&gt; +    return false;
&gt; &gt; 
&gt; &gt; Please make sure this won&apos;t break iOS.
&gt; 
&gt; You should keep all this code in, as it it is still need on iOS.

This is why I pulled the patch from review myself, as I had misunderstood the split.  New patch will come tomorrow resolving that and other feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995558</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-28 22:15:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 228091 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=228091&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:3319
&gt; &gt; +#if ENABLE(TELEPHONE_NUMBER_DETECTION)
&gt; 
&gt; Did this ENABLE flag already exist?

Yes, and is used to guard this feature throughout WebCore.

&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:1254
&gt; &gt; +    // FIXME: This is placeholder UI for development of the feature.
&gt; 
&gt; Not a useful comment in the context of the open source project.

Features are developed in the open source project often (always) with intermittent states of incompletion, and I&apos;ve found such comments to be useful in the past.

&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:1273
&gt; &gt; +    outline.addRoundedRect(markerRect, FloatSize(4, 4));
&gt; &gt; +    ctx-&gt;setFillColor(Color(150, 150, 150, 255), ColorSpaceDeviceRGB);
&gt; 
&gt; Maybe pull constants out so they can have names?

I suppose one reason I hadn&apos;t considered that is because &quot;This is placeholder UI&quot; and is not long for this world?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995929</commentid>
    <comment_count>7</comment_count>
      <attachid>228184</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-31 11:51:06 -0700</bug_when>
    <thetext>Created attachment 228184
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995950</commentid>
    <comment_count>8</comment_count>
      <attachid>228189</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-31 12:45:16 -0700</bug_when>
    <thetext>Created attachment 228189
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995992</commentid>
    <comment_count>9</comment_count>
      <attachid>228189</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-03-31 14:05:54 -0700</bug_when>
    <thetext>Comment on attachment 228189
Patch v3 

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

&gt; Source/WebCore/dom/DocumentMarker.h:78
&gt;          // FIXME: iOS has its own dictation marks. iOS should use OpenSource&apos;s.

This comment wording seems a little strange nowadays.

&gt; Source/WebCore/editing/Editor.cpp:3353
&gt; +    // FIXME: This won&apos;t work if a phone number spans multiple chunks of text from the perspective of the TextIterator
&gt; +    // (By a style change, image, line break, etc.)
&gt; +    // For that we&apos;ll need to scan the plain text string then do more complicated things during the TextIterator pass.

For the real thing, numbers that can cross multiple text nodes, we could use the same model that text searching does, with a rotating window.

&gt; Source/WebCore/editing/Editor.cpp:3355
&gt; +        // TextIterator currently never returns a Range that spans multiple Nodes.

Not just currently. This is guaranteed by TextIterator.

&gt; Source/WebCore/editing/Editor.cpp:3383
&gt; +        range.ownerDocument().markers().addMarkerToNode(range.startContainer(), range.startOffset() + scannerPosition + relativeStartPosition, relativeEndPosition - relativeStartPosition + 1, DocumentMarker::TelephoneNumber);

This code is assuming that range.startContainer is a text node. We should probably check that explicitly. The code will do something crazy otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996000</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-31 14:16:35 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 228189 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=228189&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarker.h:78
&gt; &gt;          // FIXME: iOS has its own dictation marks. iOS should use OpenSource&apos;s.
&gt; 
&gt; This comment wording seems a little strange nowadays.

Indeed, will at least update it.

&gt; &gt; Source/WebCore/editing/Editor.cpp:3355
&gt; &gt; +        // TextIterator currently never returns a Range that spans multiple Nodes.
&gt; 
&gt; Not just currently. This is guaranteed by TextIterator.

That&apos;s good to know.  Nobody else I&apos;d asked was able to state it as fact like you just did.  :)

&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:3383
&gt; &gt; +        range.ownerDocument().markers().addMarkerToNode(range.startContainer(), range.startOffset() + scannerPosition + relativeStartPosition, relativeEndPosition - relativeStartPosition + 1, DocumentMarker::TelephoneNumber);
&gt; 
&gt; This code is assuming that range.startContainer is a text node. We should probably check that explicitly. The code will do something crazy otherwise.

Good call, wild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996001</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-31 14:17:08 -0700</bug_when>
    <thetext>
&gt; &gt; &gt; Source/WebCore/editing/Editor.cpp:3383
&gt; Good call, wild.

s/wild/willdo/ (DYAC!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996017</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-03-31 14:54:51 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/166532</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228091</attachid>
            <date>2014-03-28 16:48:32 -0700</date>
            <delta_ts>2014-03-31 11:51:06 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14856</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNjVlMzNkLi5kYzE1M2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTQtMDMtMjggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbnZlcnQgcGhvbmUgbnVtYmVyIHBhcnNpbmcgdG8gdXNlIERvY3VtZW50TWFya2VycyBy
YXRoZXIgdGhhbiBET00gbXV0YXRpb24KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE2Mzc5NTY2
PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDkxNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZG9tL0RvY3Vt
ZW50TWFya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6QWxsTWFya2Vy
czo6QWxsTWFya2Vycyk6IEFkZCBhIG5ldyBUZWxlcGhvbmVOdW1iZXIgZG9jdW1lbnQgbWFya2Vy
IHR5cGUuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzdGFydFRlbGVwaG9uZU51bWJlclNjYW4pOiBUZXh0SXRlcmF0ZSBvdmVyIHRoZSBz
ZWxlY3RlZCByYW5nZSBsb29raW5nIGZvciBudW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKTogU2NhbiB0aGUgZ2l2ZW4gcmFuZ2Ug
Zm9yIGEgdGVsZXBob25lIG51bWJlciwKKyAgICAgICAgICBhZGRpbmcgdGhlIERvY3VtZW50TWFy
a2VyIHRvIGFueSB0aGF0IGFyZSBmb3VuZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2xl
YXJEYXRhRGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5oOgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNob3VsZFBhcnNlVGVsZXBob25lTnVtYmVyc0luTm9kZSk6IFRvIGRpc2Fi
bGUgdGhlIHBhcnNpbmcgdmVyc2lvbiBvZiB0aGUgZmVhdHVyZSwKKyAgICAgICAgICBhbHdheXMg
cmV0dXJuIGZhbHNlIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpkaXNhbGxvd1RlbGVwaG9uZU51
bWJlclBhcnNpbmcpOiBEZWxldGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRUZWxlcGhvbmVO
dW1iZXJNYXJrZXIpOiBQbGFjZWhvbGRlciBVSSBmb3IgZmVhdHVyZSBkZXZlbG9wbWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorCisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFya2VyVHlwZXNGcm9tKToKKwogMjAx
NC0wMy0yOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFJlYWxseSBkcm9wIGFsbCBsb2NrcyBpbiBuZXN0ZWQgcnVuIGxvb3Ag
b24gaU9TIGlmIFdlYlRocmVhZCBpcyBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5oCmluZGV4IDQ4MGVkYmYuLmU5ZWU3NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5oCkBAIC03MSwxMCArNzEsMTMgQEAgcHVibGljOgogICAgICAgICAvLyBUaGlzIG1hcmtlciBp
bmRpY2F0ZXMgdGhhdCB0aGUgcmFuZ2Ugb2YgdGV4dCBzcGFubmVkIGJ5IHRoZSBtYXJrZXIgaXMg
ZW50ZXJlZCBieSB2b2ljZSBkaWN0YXRpb24sCiAgICAgICAgIC8vIGFuZCBpdCBoYXMgYWx0ZXJu
YXRpdmUgdGV4dC4KICAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzID0gMSA8PCA5LAorI2lm
IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyAgICAgICAgVGVsZXBob25lTnVt
YmVyID0gMSA8PCAxMAorI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICAvLyBGSVhN
RTogaU9TIGhhcyBpdHMgb3duIGRpY3RhdGlvbiBtYXJrcy4gaU9TIHNob3VsZCB1c2UgT3BlblNv
dXJjZSdzLgotICAgICAgICBEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzID0gMSA8PCAx
MCwKLSAgICAgICAgRGljdGF0aW9uUmVzdWx0ID0gMSA8PCAxMSwKKyAgICAgICAgRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlcyA9IDEgPDwgMTEsCisgICAgICAgIERpY3RhdGlvblJlc3Vs
dCA9IDEgPDwgMTIsCiAjZW5kaWYKICAgICB9OwogCkBAIC05OCw5ICsxMDEsOSBAQCBwdWJsaWM6
CiAgICAgcHVibGljOgogICAgICAgICBBbGxNYXJrZXJzKCkKICNpZiAhUExBVEZPUk0oSU9TKQot
ICAgICAgICAgICAgOiBNYXJrZXJUeXBlcyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0TWF0Y2gg
fCBSZXBsYWNlbWVudCB8IENvcnJlY3Rpb25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJlY3Rpb24g
fCBBdXRvY29ycmVjdGVkIHwgU3BlbGxDaGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRBdXRvY29y
cmVjdGlvbiB8IERpY3RhdGlvbkFsdGVybmF0aXZlcykKKyAgICAgICAgICAgIDogTWFya2VyVHlw
ZXMoU3BlbGxpbmcgfCBHcmFtbWFyIHwgVGV4dE1hdGNoIHwgUmVwbGFjZW1lbnQgfCBDb3JyZWN0
aW9uSW5kaWNhdG9yIHwgUmVqZWN0ZWRDb3JyZWN0aW9uIHwgQXV0b2NvcnJlY3RlZCB8IFNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24gfCBEZWxldGVkQXV0b2NvcnJlY3Rpb24gfCBEaWN0YXRpb25BbHRl
cm5hdGl2ZXMgfCBUZWxlcGhvbmVOdW1iZXIpCiAjZWxzZQotICAgICAgICAgICAgOiBNYXJrZXJU
eXBlcyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0TWF0Y2ggfCBSZXBsYWNlbWVudCB8IENvcnJl
Y3Rpb25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJlY3Rpb24gfCBBdXRvY29ycmVjdGVkIHwgU3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRBdXRvY29ycmVjdGlvbiB8IERpY3RhdGlvbkFs
dGVybmF0aXZlcyB8IERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgfCBEaWN0YXRpb25S
ZXN1bHQpCisgICAgICAgICAgICA6IE1hcmtlclR5cGVzKFNwZWxsaW5nIHwgR3JhbW1hciB8IFRl
eHRNYXRjaCB8IFJlcGxhY2VtZW50IHwgQ29ycmVjdGlvbkluZGljYXRvciB8IFJlamVjdGVkQ29y
cmVjdGlvbiB8IEF1dG9jb3JyZWN0ZWQgfCBTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRGVsZXRl
ZEF1dG9jb3JyZWN0aW9uIHwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzIHwgVGVsZXBob25lTnVtYmVy
IHwgRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyB8IERpY3RhdGlvblJlc3VsdCkKICNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQogICAgICAgICB7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAppbmRleCBhMDVlNGEwLi40NDkwNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCkBAIC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAiUmFu
Z2UuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgpAQCAtNzgsNiArNzksNyBA
QAogI2luY2x1ZGUgIlNwZWxsQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJUZWxl
cGhvbmVOdW1iZXJEZXRlY3Rvci5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0
Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgpAQCAtMzMx
Myw2ICszMzE1LDExIEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mLCBGcmFtZVNlbGVjdGlvbjo6CiAKICAgICBpZiAoY2xpZW50
KCkpCiAgICAgICAgIGNsaWVudCgpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKCZtX2ZyYW1l
KTsKKworI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyAgICBzdGFydFRl
bGVwaG9uZU51bWJlclNjYW4oKTsKKyNlbmRpZgorCiAgICAgc2V0U3RhcnROZXdLaWxsUmluZ1Nl
cXVlbmNlKHRydWUpOwogCiAgICAgaWYgKG1fZWRpdG9yVUlVcGRhdGVUaW1lci5pc0FjdGl2ZSgp
KQpAQCAtMzMyNSw2ICszMzMyLDY3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBGcmFtZVNlbGVjdGlvbjo6CiAgICAgbV9l
ZGl0b3JVSVVwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAorI2lmIEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikKK3ZvaWQgRWRpdG9yOjpzdGFydFRlbGVwaG9uZU51bWJl
clNjYW4oKQoreworICAgIGlmICghVGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6OmlzU3VwcG9ydGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9mcmFtZS5kb2N1bWVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjbGVhckRhdGFEZXRlY3RlZFRlbGVwaG9uZU51bWJlcnMoKTsK
KworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRS
YW5nZS0+c3RhcnRPZmZzZXQoKSA9PSBzZWxlY3RlZFJhbmdlLT5lbmRPZmZzZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29yayBpZiBhIHBob25lIG51
bWJlciBzcGFucyBtdWx0aXBsZSBjaHVua3Mgb2YgdGV4dCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBv
ZiB0aGUgVGV4dEl0ZXJhdG9yCisgICAgLy8gKEJ5IGEgc3R5bGUgY2hhbmdlLCBpbWFnZSwgbGlu
ZSBicmVhaywgZXRjLikKKyAgICAvLyBGb3IgdGhhdCB3ZSdsbCBuZWVkIHRvIHNjYW4gdGhlIHBs
YWluIHRleHQgc3RyaW5nIHRoZW4gZG8gbW9yZSBjb21wbGljYXRlZCB0aGluZ3MgZHVyaW5nIHRo
ZSBUZXh0SXRlcmF0b3IgcGFzcy4KKyAgICBmb3IgKFRleHRJdGVyYXRvciB0ZXh0Q2h1bmsoc2Vs
ZWN0ZWRSYW5nZS5nZXQoKSk7ICF0ZXh0Q2h1bmsuYXRFbmQoKTsgdGV4dENodW5rLmFkdmFuY2Uo
KSkgeworICAgICAgICAvLyBUZXh0SXRlcmF0b3Igc2hvdWxkIG5ldmVyIHJldHVybiBhIFJhbmdl
IHRoYXQgc3BhbnMgbXVsdGlwbGUgTm9kZXMuCisgICAgICAgIEFTU0VSVCh0ZXh0Q2h1bmsucmFu
Z2UoKS0+c3RhcnRDb250YWluZXIoKSA9PSB0ZXh0Q2h1bmsucmFuZ2UoKS0+ZW5kQ29udGFpbmVy
KCkpOworCisgICAgICAgIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoKnRleHRDaHVuay5y
YW5nZSgpLCB0ZXh0Q2h1bmsudGV4dCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgRWRpdG9yOjpzY2Fu
UmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nVmlldyYg
c3RyaW5nVmlldykKK3sKKyAgICAvLyByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gYW5kIHJlbGF0aXZl
RW5kUG9zaXRpb24gYXJlIHRoZSBlbmRwb2ludHMgb2YgdGhlIHBob25lIG51bWJlciByYW5nZSwK
KyAgICAvLyByZWxhdGl2ZSB0byB0aGUgc2Nhbm5lclBvc2l0aW9uCisgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RyaW5nVmlldy5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBzY2FubmVyUG9zaXRpb24g
PSAwOworICAgIGludCByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gPSAwOworICAgIGludCByZWxhdGl2
ZUVuZFBvc2l0aW9uID0gMDsKKworICAgIGF1dG8gY2hhcmFjdGVycyA9IHN0cmluZ1ZpZXcudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisKKyAgICB3aGlsZSAoc2Nhbm5lclBvc2l0aW9uIDwgbGVu
Z3RoICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjpmaW5kKCZjaGFyYWN0ZXJzW3NjYW5uZXJQ
b3NpdGlvbl0sIGxlbmd0aCAtIHNjYW5uZXJQb3NpdGlvbiwgJnJlbGF0aXZlU3RhcnRQb3NpdGlv
biwgJnJlbGF0aXZlRW5kUG9zaXRpb24pKSB7CisgICAgICAgIC8vIFRoZSBjb252ZW50aW9uIGlu
IHRoZSBEYXRhIERldGVjdG9ycyBmcmFtZXdvcmsgaXMgdGhhdCB0aGUgZW5kIHBvc2l0aW9uIGlz
IHRoZSBmaXJzdCBjaGFyYWN0ZXIgTk9UIGluIHRoZSBwaG9uZSBudW1iZXIKKyAgICAgICAgLy8g
KHRoYXQgaXMsIHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIGlzIHJlbGF0aXZlRW5kUG9zaXRpb24g
LSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24pLiBTbyBzdWJzdHJhY3QgMSB0byBnZXQgdGhlIHNhbWUK
KyAgICAgICAgLy8gY29udmVudGlvbiBhcyB0aGUgb2xkIFdlYkNvcmUgcGhvbmUgbnVtYmVyIHBh
cnNlciAoc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUgY29kZSBpcyBzdGlsbCB2YWxpZCBpZiB3ZSB3
YW50IHRvIGdvIGJhY2sKKyAgICAgICAgLy8gdG8gdGhlIG9sZCBwYXJzZXIpLgorICAgICAgICAt
LXJlbGF0aXZlRW5kUG9zaXRpb247CisKKyAgICAgICAgQVNTRVJUKHNjYW5uZXJQb3NpdGlvbiAr
IHJlbGF0aXZlRW5kUG9zaXRpb24gPCBsZW5ndGgpOworCisgICAgICAgIHJhbmdlLm93bmVyRG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyVG9Ob2RlKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCks
IHJhbmdlLnN0YXJ0T2Zmc2V0KCkgKyBzY2FubmVyUG9zaXRpb24gKyByZWxhdGl2ZVN0YXJ0UG9z
aXRpb24sIHJlbGF0aXZlRW5kUG9zaXRpb24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gKyAxLCBE
b2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKKworICAgICAgICBzY2FubmVyUG9zaXRp
b24gKz0gcmVsYXRpdmVFbmRQb3NpdGlvbiArIDE7CisgICAgfQorfQorCit2b2lkIEVkaXRvcjo6
Y2xlYXJEYXRhRGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJzKCkKK3sKKyAgICBtX2ZyYW1lLmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVO
dW1iZXIpOworCisgICAgLy8gRklYTUU6IERvIG90aGVyIFVJIGNsZWFudXAgaGVyZSBvbmNlIHdl
IGhhdmUgb3RoZXIgVUkuCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9E
RVRFQ1RJT04pCisKIHZvaWQgRWRpdG9yOjp1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCkK
IHsKICAgICBpZiAoIW1fZWRpdG9yVUlVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgKaW5kZXggZGE0M2FiYi4uNTdhZWZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCkBAIC00NzAsNiArNDcwLDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIHVuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKIAorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RF
VEVDVElPTikKKyAgICB2b2lkIHN0YXJ0VGVsZXBob25lTnVtYmVyU2NhbigpOworICAgIHZvaWQg
c2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYsIGNvbnN0IFN0cmluZ1ZpZXcmKTsK
KyAgICB2b2lkIGNsZWFyRGF0YURldGVjdGVkVGVsZXBob25lTnVtYmVycygpOworI2VuZGlmCisK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gYWRqdXN0ZWRT
ZWxlY3Rpb25SYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAKaW5kZXggMGU0ZWJmYi4uNDU0YzBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yMzY3LDI3ICsyMzY3LDMzIEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpsaW5raWZ5UGhvbmVOdW1iZXJzKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQogfQogCiAvLyBMb29rcyBhdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBlbGVtZW50IHRv
IGRldGVybWluZSB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBlbGVtZW50IHdoaWNoIGRpc2FsbG93
cyBwYXJzaW5nIHBob25lIG51bWJlcnMuCi1zdGF0aWMgaW5saW5lIGJvb2wgZGlzYWxsb3dUZWxl
cGhvbmVOdW1iZXJQYXJzaW5nKGNvbnN0IE5vZGUmIG5vZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUu
aXNMaW5rKCkKLSAgICAgICAgfHwgbm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9E
RQotICAgICAgICB8fCBub2RlLmhhc1RhZ05hbWUoc2NyaXB0VGFnKQotICAgICAgICB8fCAobm9k
ZS5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQotICAgICAgICB8fCBub2RlLmhhc1RhZ05hbWUoc3R5bGVUYWcpCi0gICAgICAgIHx8
IG5vZGUuaGFzVGFnTmFtZSh0dFRhZykKLSAgICAgICAgfHwgbm9kZS5oYXNUYWdOYW1lKHByZVRh
ZykKLSAgICAgICAgfHwgbm9kZS5oYXNUYWdOYW1lKGNvZGVUYWcpOwotfQorLy9zdGF0aWMgaW5s
aW5lIGJvb2wgZGlzYWxsb3dUZWxlcGhvbmVOdW1iZXJQYXJzaW5nKGNvbnN0IE5vZGUmIG5vZGUp
CisvL3sKKy8vICAgIHJldHVybiBub2RlLmlzTGluaygpCisvLyAgICAgICAgfHwgbm9kZS5ub2Rl
VHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERQorLy8gICAgICAgIHx8IG5vZGUuaGFzVGFnTmFt
ZShzY3JpcHRUYWcpCisvLyAgICAgICAgfHwgKG5vZGUuaXNIVE1MRWxlbWVudCgpICYmIHRvSFRN
TEVsZW1lbnQobm9kZSkuaXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKy8vICAgICAgICB8fCBub2Rl
Lmhhc1RhZ05hbWUoc3R5bGVUYWcpCisvLyAgICAgICAgfHwgbm9kZS5oYXNUYWdOYW1lKHR0VGFn
KQorLy8gICAgICAgIHx8IG5vZGUuaGFzVGFnTmFtZShwcmVUYWcpCisvLyAgICAgICAgfHwgbm9k
ZS5oYXNUYWdOYW1lKGNvZGVUYWcpOworLy99CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQ
YXJzZVRlbGVwaG9uZU51bWJlcnNJbk5vZGUoY29uc3QgQ29udGFpbmVyTm9kZSYgbm9kZSkKIHsK
LSAgICBjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50Tm9kZSA9ICZub2RlOwotICAgIGRvIHsK
LSAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgZGlzYWxsb3dUZWxl
cGhvbmVOdW1iZXJQYXJzaW5nKCpjdXJyZW50Tm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICB9IHdoaWxlIChjdXJyZW50Tm9kZSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gRklYTUU6
IERhdGEgZGV0ZWN0aW5nIGZvciB0ZWxlcGhvbmUgbnVtYmVycyBkdXJpbmcgRG9jdW1lbnQgcGFy
c2luZyBpcyBjdXJyZW50bHkgZGlzYWJsZWQKKyAgICAvLyB1bnRpbCBhIFBMVCBwZXJmb3JtYW5j
ZSByZWdyZXNzaW9uIGNhbiBiZSByZXNvbHZlZC4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNjM3OTYx
ND4KKworICAgIFVOVVNFRF9QQVJBTShub2RlKTsKKyAgICByZXR1cm4gZmFsc2U7CisKKy8vICAg
IGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnROb2RlID0gJm5vZGU7CisvLyAgICBkbyB7Cisv
LyAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgZGlzYWxsb3dUZWxl
cGhvbmVOdW1iZXJQYXJzaW5nKCpjdXJyZW50Tm9kZSkpCisvLyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKy8vICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCk7
CisvLyAgICB9IHdoaWxlIChjdXJyZW50Tm9kZSk7CisvLyAgICByZXR1cm4gdHJ1ZTsKIH0KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXgg
MmEzZTEzYS4uNTY2ZGNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcApAQCAtMTI0OCw2ICsxMjQ4LDMzIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRU
ZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAg
ICB9CiB9CiAKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCit2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50VGVsZXBob25lTnVtYmVyTWFya2VyKEdyYXBoaWNzQ29udGV4dCog
Y3R4LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBwbGFjZWhvbGRlciBVSSBmb3IgZGV2ZWxvcG1lbnQgb2YgdGhlIGZlYXR1
cmUuCisKKyAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4obWFya2VyLT5zdGFy
dE9mZnNldCgpIC0gbV9zdGFydCwgMCk7CisgICAgaW50IGVuZFBvc2l0aW9uID0gc3RkOjptaW48
aW50PihtYXJrZXItPmVuZE9mZnNldCgpIC0gbV9zdGFydCwgbV9sZW4pOworCisgICAgaWYgKG1f
dHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQorICAgICAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6
bWluPGludD4oZW5kUG9zaXRpb24sIG1fdHJ1bmNhdGlvbik7CisKKyAgICBpbnQgZGVsdGFZID0g
cmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlv
bkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9w
KCk7CisgICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOworICAgIEZsb2F0UG9p
bnQgc3RhcnRQb2ludChib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKKyAg
ICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpOworCisgICAgSW50
UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JU
ZXh0KHJ1biwgc3RhcnRQb2ludCwgc2VsSGVpZ2h0LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
bikpOworCisgICAgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihtYXJrZXIsIHN0eWxl
LCBmb250KTsKKworICAgIFBhdGggb3V0bGluZTsKKyAgICBvdXRsaW5lLmFkZFJvdW5kZWRSZWN0
KG1hcmtlclJlY3QsIEZsb2F0U2l6ZSg0LCA0KSk7CisgICAgY3R4LT5zZXRGaWxsQ29sb3IoQ29s
b3IoMTUwLCAxNTAsIDE1MCwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY3R4LT5m
aWxsUGF0aChvdXRsaW5lKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9E
RVRFQ1RJT04pCisKIHZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVu
dE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgLy8gUmVwbGFjZW1lbnQgbWFya2VycyBhcmUgbm90
IGFjdHVhbGx5IGRyYXduLCBidXQgdGhlaXIgcmVjdHMgbmVlZCB0byBiZSBjb21wdXRlZCBmb3Ig
aGl0IHRlc3RpbmcuCkBAIC0xMjkzLDYgKzEzMjAsOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQm
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOgorI2lmIEVOQUJMRShU
RUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyAgICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXI6OlRlbGVwaG9uZU51bWJlcjoKKyNlbmRpZgogICAgICAgICAgICAgICAgIGlmICghYmFja2dy
b3VuZCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMzMxLDYgKzEzNjEsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3Vt
ZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAg
ICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6CiAgICAgICAgICAgICAgICAg
Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihtYXJrZXIsIHN0eWxlLCBmb250KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJ
T04pCisgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXI6Cisg
ICAgICAgICAgICAgICAgcGFpbnRUZWxlcGhvbmVOdW1iZXJNYXJrZXIocHQsIGJveE9yaWdpbiwg
bWFya2VyLCBzdHlsZSwgZm9udCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4
IDU3NzUyMWEuLjkzNTkyODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaApAQCAtMTczLDYgKzE3MywxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFpbnRTZWxlY3Rp
b24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBDb2xvciB0ZXh0Q29sb3IpOwogICAgIHZvaWQgcGFp
bnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jiwg
Ym9vbCBncmFtbWFyKTsKICAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25z
dCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKworI2lmIEVOQUJMRShURUxFUEhPTkVfTlVN
QkVSX0RFVEVDVElPTikKKyAgICB2b2lkIHBhaW50VGVsZXBob25lTnVtYmVyTWFya2VyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIq
LCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKKyNlbmRpZgorCiAgICAgdm9pZCBj
b21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CiAKICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlv
ciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKaW5kZXggM2FmZmM3Yi4uY2ZlODE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcApAQCAtMjQ1LDYgKzI0NSwxMCBAQCBzdGF0aWMgYm9vbCBtYXJrZXJUeXBlc0Zyb20oY29u
c3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZQogICAgICAg
ICByZXN1bHQgPSAgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbjsKICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtYXJrZXJUeXBlLCAiRGljdGF0aW9uQWx0ZXJuYXRp
dmVzIikpCiAgICAgICAgIHJlc3VsdCA9ICBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVzOworI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShtYXJrZXJUeXBlLCAiVGVsZXBob25lTnVtYmVyIikpCisg
ICAgICAgIHJlc3VsdCA9ICBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyOworI2VuZGlm
CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
</data>
<flag name="review"
          id="252356"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228184</attachid>
            <date>2014-03-31 11:51:06 -0700</date>
            <delta_ts>2014-03-31 12:45:16 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14264</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNjVlMzNkLi5hNzlmMzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTQtMDMtMzEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCB2YXJpYW50IG9mIHBob25lIG51bWJlciBwYXJzaW5nIHRoYXQgdXNlIERvY3VtZW50
TWFya2VyIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTYzNzk1NjY+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
OTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBk
b20vRG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpB
bGxNYXJrZXJzOjpBbGxNYXJrZXJzKTogQWRkIGEgbmV3IFRlbGVwaG9uZU51bWJlciBkb2N1bWVu
dCBtYXJrZXIgdHlwZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogVGV4dEl0
ZXJhdGUgb3ZlciB0aGUgc2VsZWN0ZWQgcmFuZ2UgbG9va2luZyBmb3IgbnVtYmVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyk6IFNjYW4g
dGhlIGdpdmVuIHJhbmdlIGZvciBhIHRlbGVwaG9uZSBudW1iZXIsCisgICAgICAgICAgYWRkaW5n
IHRoZSBEb2N1bWVudE1hcmtlciB0byBhbnkgdGhhdCBhcmUgZm91bmQuCisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNsZWFyRGF0YURldGVjdGVkVGVsZXBob25lTnVtYmVycyk6CisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDoKKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFy
YWN0ZXJCdWZmZXJGb3JJbkJvZHkpOiBPbmx5IGxpbmtpZnkgb24gaU9TLgorCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnRUZWxlcGhvbmVOdW1iZXJNYXJrZXIpOiBQbGFjZWhvbGRlciBVSSB3aGlsZSB0
aGUgZmVhdHVyZSBpcyBkZXZlbG9wZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
OjpwYWludERvY3VtZW50TWFya2Vycyk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaDoKKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1hcmtlclR5cGVzRnJvbSk6CisKIDIwMTQtMDMtMjggIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZWFsbHkgZHJvcCBh
bGwgbG9ja3MgaW4gbmVzdGVkIHJ1biBsb29wIG9uIGlPUyBpZiBXZWJUaHJlYWQgaXMgZW5hYmxl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAppbmRleCA0ODBlZGJmLi5lOWVlNzYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaApAQCAtNzEsMTAgKzcxLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgLy8gVGhpcyBtYXJrZXIgaW5kaWNhdGVzIHRoYXQgdGhlIHJhbmdlIG9mIHRl
eHQgc3Bhbm5lZCBieSB0aGUgbWFya2VyIGlzIGVudGVyZWQgYnkgdm9pY2UgZGljdGF0aW9uLAog
ICAgICAgICAvLyBhbmQgaXQgaGFzIGFsdGVybmF0aXZlIHRleHQuCiAgICAgICAgIERpY3RhdGlv
bkFsdGVybmF0aXZlcyA9IDEgPDwgOSwKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRF
Q1RJT04pCisgICAgICAgIFRlbGVwaG9uZU51bWJlciA9IDEgPDwgMTAKKyNlbmRpZgogI2lmIFBM
QVRGT1JNKElPUykKICAgICAgICAgLy8gRklYTUU6IGlPUyBoYXMgaXRzIG93biBkaWN0YXRpb24g
bWFya3MuIGlPUyBzaG91bGQgdXNlIE9wZW5Tb3VyY2Uncy4KLSAgICAgICAgRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlcyA9IDEgPDwgMTAsCi0gICAgICAgIERpY3RhdGlvblJlc3VsdCA9
IDEgPDwgMTEsCisgICAgICAgIERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgPSAxIDw8
IDExLAorICAgICAgICBEaWN0YXRpb25SZXN1bHQgPSAxIDw8IDEyLAogI2VuZGlmCiAgICAgfTsK
IApAQCAtOTgsOSArMTAxLDkgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAgQWxsTWFy
a2VycygpCiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgICAgIDogTWFya2VyVHlwZXMoU3Bl
bGxpbmcgfCBHcmFtbWFyIHwgVGV4dE1hdGNoIHwgUmVwbGFjZW1lbnQgfCBDb3JyZWN0aW9uSW5k
aWNhdG9yIHwgUmVqZWN0ZWRDb3JyZWN0aW9uIHwgQXV0b2NvcnJlY3RlZCB8IFNwZWxsQ2hlY2tp
bmdFeGVtcHRpb24gfCBEZWxldGVkQXV0b2NvcnJlY3Rpb24gfCBEaWN0YXRpb25BbHRlcm5hdGl2
ZXMpCisgICAgICAgICAgICA6IE1hcmtlclR5cGVzKFNwZWxsaW5nIHwgR3JhbW1hciB8IFRleHRN
YXRjaCB8IFJlcGxhY2VtZW50IHwgQ29ycmVjdGlvbkluZGljYXRvciB8IFJlamVjdGVkQ29ycmVj
dGlvbiB8IEF1dG9jb3JyZWN0ZWQgfCBTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRGVsZXRlZEF1
dG9jb3JyZWN0aW9uIHwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzIHwgVGVsZXBob25lTnVtYmVyKQog
I2Vsc2UKLSAgICAgICAgICAgIDogTWFya2VyVHlwZXMoU3BlbGxpbmcgfCBHcmFtbWFyIHwgVGV4
dE1hdGNoIHwgUmVwbGFjZW1lbnQgfCBDb3JyZWN0aW9uSW5kaWNhdG9yIHwgUmVqZWN0ZWRDb3Jy
ZWN0aW9uIHwgQXV0b2NvcnJlY3RlZCB8IFNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEZWxldGVk
QXV0b2NvcnJlY3Rpb24gfCBEaWN0YXRpb25BbHRlcm5hdGl2ZXMgfCBEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzIHwgRGljdGF0aW9uUmVzdWx0KQorICAgICAgICAgICAgOiBNYXJrZXJU
eXBlcyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0TWF0Y2ggfCBSZXBsYWNlbWVudCB8IENvcnJl
Y3Rpb25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJlY3Rpb24gfCBBdXRvY29ycmVjdGVkIHwgU3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRBdXRvY29ycmVjdGlvbiB8IERpY3RhdGlvbkFs
dGVybmF0aXZlcyB8IFRlbGVwaG9uZU51bWJlciB8IERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5h
dGl2ZXMgfCBEaWN0YXRpb25SZXN1bHQpCiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICAgICAg
ICAgewogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYTA1ZTRhMC4u
NTE3YzVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjYsNiArNjYsNyBAQAog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVtb3ZlRm9ybWF0
Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2wuaCIKQEAgLTc4LDYgKzc5LDcgQEAKICNpbmNsdWRlICJTcGVsbENoZWNrZXIuaCIK
ICNpbmNsdWRlICJTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiVGVsZXBob25lTnVtYmVyRGV0ZWN0b3IuaCIKICNpbmNs
dWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJU
ZXh0Q2hlY2tpbmdIZWxwZXIuaCIKQEAgLTMzMTMsNiArMzMxNSwxMSBAQCB2b2lkIEVkaXRvcjo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgRnJhbWVT
ZWxlY3Rpb246OgogCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbigmbV9mcmFtZSk7CisKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1MpCisgICAgc2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKTsKKyNlbmRpZgorCiAgICAgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVl
bmNlKHRydWUpOwogCiAgICAgaWYgKG1fZWRpdG9yVUlVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQpA
QCAtMzMyNSw2ICszMzMyLDY3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBGcmFtZVNlbGVjdGlvbjo6CiAgICAgbV9lZGl0
b3JVSVVwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAorI2lmIEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPUykKK3ZvaWQgRWRpdG9yOjpzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCit7CisgICAgaWYgKCFUZWxlcGhvbmVOdW1i
ZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2ZyYW1lLmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsZWFyRGF0YURldGVj
dGVkVGVsZXBob25lTnVtYmVycygpOworCisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2Vs
ZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpID09IHNlbGVjdGVkUmFu
Z2UtPmVuZE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyB3
b24ndCB3b3JrIGlmIGEgcGhvbmUgbnVtYmVyIHNwYW5zIG11bHRpcGxlIGNodW5rcyBvZiB0ZXh0
IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBUZXh0SXRlcmF0b3IKKyAgICAvLyAoQnkgYSBz
dHlsZSBjaGFuZ2UsIGltYWdlLCBsaW5lIGJyZWFrLCBldGMuKQorICAgIC8vIEZvciB0aGF0IHdl
J2xsIG5lZWQgdG8gc2NhbiB0aGUgcGxhaW4gdGV4dCBzdHJpbmcgdGhlbiBkbyBtb3JlIGNvbXBs
aWNhdGVkIHRoaW5ncyBkdXJpbmcgdGhlIFRleHRJdGVyYXRvciBwYXNzLgorICAgIGZvciAoVGV4
dEl0ZXJhdG9yIHRleHRDaHVuayhzZWxlY3RlZFJhbmdlLmdldCgpKTsgIXRleHRDaHVuay5hdEVu
ZCgpOyB0ZXh0Q2h1bmsuYWR2YW5jZSgpKSB7CisgICAgICAgIC8vIFRleHRJdGVyYXRvciBjdXJy
ZW50bHkgbmV2ZXIgcmV0dXJucyBhIFJhbmdlIHRoYXQgc3BhbnMgbXVsdGlwbGUgTm9kZXMuCisg
ICAgICAgIC8vIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMgb25seSB3b3JrcyB3aXRoIHRo
YXQgaW52YXJpYW50LgorICAgICAgICBBU1NFUlQodGV4dENodW5rLnJhbmdlKCktPnN0YXJ0Q29u
dGFpbmVyKCkgPT0gdGV4dENodW5rLnJhbmdlKCktPmVuZENvbnRhaW5lcigpKTsKKworICAgICAg
ICBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKCp0ZXh0Q2h1bmsucmFuZ2UoKSwgdGV4dENo
dW5rLnRleHQoKSk7CisgICAgfQorfQorCit2b2lkIEVkaXRvcjo6c2NhblJhbmdlRm9yVGVsZXBo
b25lTnVtYmVycyhSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcpCit7
CisgICAgLy8gcmVsYXRpdmVTdGFydFBvc2l0aW9uIGFuZCByZWxhdGl2ZUVuZFBvc2l0aW9uIGFy
ZSB0aGUgZW5kcG9pbnRzIG9mIHRoZSBwaG9uZSBudW1iZXIgcmFuZ2UsCisgICAgLy8gcmVsYXRp
dmUgdG8gdGhlIHNjYW5uZXJQb3NpdGlvbgorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ1Zp
ZXcubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgc2Nhbm5lclBvc2l0aW9uID0gMDsKKyAgICBpbnQg
cmVsYXRpdmVTdGFydFBvc2l0aW9uID0gMDsKKyAgICBpbnQgcmVsYXRpdmVFbmRQb3NpdGlvbiA9
IDA7CisKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBzdHJpbmdWaWV3LnVwY29udmVydGVkQ2hhcmFj
dGVycygpOworCisgICAgd2hpbGUgKHNjYW5uZXJQb3NpdGlvbiA8IGxlbmd0aCAmJiBUZWxlcGhv
bmVOdW1iZXJEZXRlY3Rvcjo6ZmluZCgmY2hhcmFjdGVyc1tzY2FubmVyUG9zaXRpb25dLCBsZW5n
dGggLSBzY2FubmVyUG9zaXRpb24sICZyZWxhdGl2ZVN0YXJ0UG9zaXRpb24sICZyZWxhdGl2ZUVu
ZFBvc2l0aW9uKSkgeworICAgICAgICAvLyBUaGUgY29udmVudGlvbiBpbiB0aGUgRGF0YSBEZXRl
Y3RvcnMgZnJhbWV3b3JrIGlzIHRoYXQgdGhlIGVuZCBwb3NpdGlvbiBpcyB0aGUgZmlyc3QgY2hh
cmFjdGVyIE5PVCBpbiB0aGUgcGhvbmUgbnVtYmVyCisgICAgICAgIC8vICh0aGF0IGlzLCB0aGUg
bGVuZ3RoIG9mIHRoZSByYW5nZSBpcyByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVTdGFy
dFBvc2l0aW9uKS4gU28gc3Vic3RyYWN0IDEgdG8gZ2V0IHRoZSBzYW1lCisgICAgICAgIC8vIGNv
bnZlbnRpb24gYXMgdGhlIG9sZCBXZWJDb3JlIHBob25lIG51bWJlciBwYXJzZXIgKHNvIHRoYXQg
dGhlIHJlc3Qgb2YgdGhlIGNvZGUgaXMgc3RpbGwgdmFsaWQgaWYgd2Ugd2FudCB0byBnbyBiYWNr
CisgICAgICAgIC8vIHRvIHRoZSBvbGQgcGFyc2VyKS4KKyAgICAgICAgLS1yZWxhdGl2ZUVuZFBv
c2l0aW9uOworCisgICAgICAgIEFTU0VSVChzY2FubmVyUG9zaXRpb24gKyByZWxhdGl2ZUVuZFBv
c2l0aW9uIDwgbGVuZ3RoKTsKKworICAgICAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlclRvTm9kZShyYW5nZS5zdGFydENvbnRhaW5lcigpLCByYW5nZS5zdGFydE9m
ZnNldCgpICsgc2Nhbm5lclBvc2l0aW9uICsgcmVsYXRpdmVTdGFydFBvc2l0aW9uLCByZWxhdGl2
ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVTdGFydFBvc2l0aW9uICsgMSwgRG9jdW1lbnRNYXJrZXI6
OlRlbGVwaG9uZU51bWJlcik7CisKKyAgICAgICAgc2Nhbm5lclBvc2l0aW9uICs9IHJlbGF0aXZl
RW5kUG9zaXRpb24gKyAxOworICAgIH0KK30KKwordm9pZCBFZGl0b3I6OmNsZWFyRGF0YURldGVj
dGVkVGVsZXBob25lTnVtYmVycygpCit7CisgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJz
KCkucmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKKworICAg
IC8vIEZJWE1FOiBEbyBvdGhlciBVSSBjbGVhbnVwIGhlcmUgb25jZSB3ZSBoYXZlIG90aGVyIFVJ
LgorfQorI2VuZGlmIC8vIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBM
QVRGT1JNKElPUykKKwogdm9pZCBFZGl0b3I6OnVwZGF0ZUVkaXRvclVJTm93SWZTY2hlZHVsZWQo
KQogewogICAgIGlmICghbV9lZGl0b3JVSVVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAppbmRleCBkYTQzYWJiLi41NTc5YWY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmgKQEAgLTQ3MCw2ICs0NzAsMTIgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwogCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TKQorICAgIHZvaWQgc2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKTsKKyAgICB2b2lkIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMo
UmFuZ2UmLCBjb25zdCBTdHJpbmdWaWV3Jik7CisgICAgdm9pZCBjbGVhckRhdGFEZXRlY3RlZFRl
bGVwaG9uZU51bWJlcnMoKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAg
IFBhc3NSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDBlNGViZmIuLjQw
MTQ0ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcApAQCAtMjMwNSw3ICsyMzA1LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3ND
aGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIH0KIAogLy8gRklYTUU6IEV4dHJhY3Qg
dGhlIGZvbGxvd2luZyBpT1Mtc3BlY2lmaWMgY29kZSBpbnRvIGEgc2VwYXJhdGUgZmlsZS4KLSNp
ZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCisjaWYgRU5BQkxFKFRFTEVQSE9O
RV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1MpCiAvLyBGcm9tIHRoZSBzdHJpbmcg
NDA4OTk2MTAxMCwgY3JlYXRlcyBhIGxpbmsgb2YgdGhlIGZvcm0gPGEgaHJlZj0idGVsOjQwODk5
NjEwMTAiPjQwODk5NjEwMTA8L2E+IGFuZCBpbnNlcnRzIGl0Lgogdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6Omluc2VydFBob25lTnVtYmVyTGluayhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKQEAgLTIz
ODksNyArMjM4OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRQYXJzZVRlbGVwaG9uZU51
bWJlcnNJbk5vZGUoY29uc3QgQ29udGFpbmVyTm9kZSYgbm9kZSkKICAgICB9IHdoaWxlIChjdXJy
ZW50Tm9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUo
VEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKElPUykKIAogdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tl
bkJ1ZmZlciYgYnVmZmVyKQogewpAQCAtMjU2Niw3ICsyNTY2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHkoRXh0ZXJuYWxDaGFyYWN0ZXJU
b2tlbkJ1ZmYKIHsKICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMoKTsKICAgICBTdHJpbmcgY2hhcmFjdGVycyA9IGJ1ZmZlci50YWtlUmVtYWluaW5nKCk7
Ci0jaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQorI2lmIEVOQUJMRShURUxF
UEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9TKQogICAgIGlmICghaXNQYXJz
aW5nRnJhZ21lbnQoKSAmJiBtX3RyZWUuaXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgp
ICYmIHNob3VsZFBhcnNlVGVsZXBob25lTnVtYmVyc0luTm9kZSgqbV90cmVlLmN1cnJlbnROb2Rl
KCkpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1cHBvcnRlZCgpKQogICAgICAgICBs
aW5raWZ5UGhvbmVOdW1iZXJzKGNoYXJhY3RlcnMpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCAyYTNlMTNhLi41NjZkY2ViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0xMjQ4LDYgKzEy
NDgsMzMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGlj
c0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShU
RUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZWxl
cGhvbmVOdW1iZXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBGb250JiBmb250KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHBsYWNlaG9s
ZGVyIFVJIGZvciBkZXZlbG9wbWVudCBvZiB0aGUgZmVhdHVyZS4KKworICAgIGludCBzdGFydFBv
c2l0aW9uID0gc3RkOjptYXg8aW50PihtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAw
KTsKKyAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxpbnQ+KG1hcmtlci0+ZW5kT2Zmc2V0
KCkgLSBtX3N0YXJ0LCBtX2xlbik7CisKKyAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5j
YXRpb24pCisgICAgICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW48aW50PihlbmRQb3NpdGlvbiwg
bV90cnVuY2F0aW9uKTsKKworICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigpLnN0eWxlKCkuaXNG
bGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90
dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKKyAgICBpbnQgc2VsSGVpZ2h0
ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CisgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KGJveE9yaWdp
bi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOworICAgIFRleHRSdW4gcnVuID0gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CisKKyAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzdGFydFBvaW50LCBz
ZWxIZWlnaHQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSk7CisKKyAgICBjb21wdXRlUmVj
dEZvclJlcGxhY2VtZW50TWFya2VyKG1hcmtlciwgc3R5bGUsIGZvbnQpOworCisgICAgUGF0aCBv
dXRsaW5lOworICAgIG91dGxpbmUuYWRkUm91bmRlZFJlY3QobWFya2VyUmVjdCwgRmxvYXRTaXpl
KDQsIDQpKTsKKyAgICBjdHgtPnNldEZpbGxDb2xvcihDb2xvcigxNTAsIDE1MCwgMTUwLCAyNTUp
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjdHgtPmZpbGxQYXRoKG91dGxpbmUpOworfQor
I2VuZGlmIC8vIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKwogdm9pZCBJbmxp
bmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2Vy
KiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKIHsK
ICAgICAvLyBSZXBsYWNlbWVudCBtYXJrZXJzIGFyZSBub3QgYWN0dWFsbHkgZHJhd24sIGJ1dCB0
aGVpciByZWN0cyBuZWVkIHRvIGJlIGNvbXB1dGVkIGZvciBoaXQgdGVzdGluZy4KQEAgLTEyOTMs
NiArMTMyMCw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3Jh
cGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERvY3Vt
ZW50TWFya2VyOjpUZXh0TWF0Y2g6CisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNU
SU9OKQorICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyOgor
I2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKCFiYWNrZ3JvdW5kKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMzEsNiArMTM2MSwx
MSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29u
dGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICBjYXNlIERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudDoKICAgICAgICAgICAgICAgICBjb21wdXRlUmVjdEZvclJlcGxhY2Vt
ZW50TWFya2VyKG1hcmtlciwgc3R5bGUsIGZvbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwor
I2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyAgICAgICAgICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcjoKKyAgICAgICAgICAgICAgICBwYWludFRl
bGVwaG9uZU51bWJlck1hcmtlcihwdCwgYm94T3JpZ2luLCBtYXJrZXIsIHN0eWxlLCBmb250KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggNTc3NTIxYS4uOTM1OTI4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xNzMsNiArMTczLDEx
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9u
dCYsIENvbG9yIHRleHRDb2xvcik7CiAgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIq
LCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOwogICAgIHZv
aWQgcGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2lu
dCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
Rm9udCYpOworCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQorICAgIHZv
aWQgcGFpbnRUZWxlcGhvbmVOdW1iZXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udCYpOworI2VuZGlmCisKICAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1l
bnRNYXJrZXIoRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQm
KTsKIAogICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAzYWZmYzdiLi5jZmU4
MTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0yNDUsNiArMjQ1LDEw
IEBAIHN0YXRpYyBib29sIG1hcmtlclR5cGVzRnJvbShjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUs
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlCiAgICAgICAgIHJlc3VsdCA9ICBEb2N1bWVudE1h
cmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKG1hcmtlclR5cGUsICJEaWN0YXRpb25BbHRlcm5hdGl2ZXMiKSkKICAgICAgICAgcmVzdWx0
ID0gIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM7CisjaWYgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQorICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG1hcmtlclR5cGUsICJUZWxlcGhvbmVOdW1iZXIiKSkKKyAgICAgICAgcmVzdWx0ID0gIERvY3Vt
ZW50TWFya2VyOjpUZWxlcGhvbmVOdW1iZXI7CisjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228189</attachid>
            <date>2014-03-31 12:45:16 -0700</date>
            <delta_ts>2014-03-31 14:05:54 -0700</delta_ts>
            <desc>Patch v3 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14313</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MDg2ZTNkLi41NDc0MmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTQtMDMtMzEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCB2YXJpYW50IG9mIHBob25lIG51bWJlciBwYXJzaW5nIHRoYXQgdXNlIERvY3VtZW50
TWFya2VyIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTYzNzk1NjY+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
OTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBk
b20vRG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpB
bGxNYXJrZXJzOjpBbGxNYXJrZXJzKTogQWRkIGEgbmV3IFRlbGVwaG9uZU51bWJlciBkb2N1bWVu
dCBtYXJrZXIgdHlwZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogVGV4dEl0
ZXJhdGUgb3ZlciB0aGUgc2VsZWN0ZWQgcmFuZ2UgbG9va2luZyBmb3IgbnVtYmVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyk6IFNjYW4g
dGhlIGdpdmVuIHJhbmdlIGZvciBhIHRlbGVwaG9uZSBudW1iZXIsCisgICAgICAgICAgYWRkaW5n
IHRoZSBEb2N1bWVudE1hcmtlciB0byBhbnkgdGhhdCBhcmUgZm91bmQuCisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNsZWFyRGF0YURldGVjdGVkVGVsZXBob25lTnVtYmVycyk6CisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDoKKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFy
YWN0ZXJCdWZmZXJGb3JJbkJvZHkpOiBPbmx5IGxpbmtpZnkgb24gaU9TLgorCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnRUZWxlcGhvbmVOdW1iZXJNYXJrZXIpOiBQbGFjZWhvbGRlciBVSSB3aGlsZSB0
aGUgZmVhdHVyZSBpcyBkZXZlbG9wZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
OjpwYWludERvY3VtZW50TWFya2Vycyk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaDoKKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1hcmtlclR5cGVzRnJvbSk6CisKIDIwMTQtMDMtMzEgIEJldGggRGFraW4gIDxiZGFraW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJhZGlvIGJ1dHRvbnMgYW5kIGNoZWNrYm94ZXMgc2hvdWxk
IHNoYXJlIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgKaW5kZXggNDgwZWRiZi4u
MDlhOTY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgKQEAgLTcxLDEwICs3MSwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFRoaXMgbWFya2VyIGluZGljYXRlcyB0aGF0IHRoZSBy
YW5nZSBvZiB0ZXh0IHNwYW5uZWQgYnkgdGhlIG1hcmtlciBpcyBlbnRlcmVkIGJ5IHZvaWNlIGRp
Y3RhdGlvbiwKICAgICAgICAgLy8gYW5kIGl0IGhhcyBhbHRlcm5hdGl2ZSB0ZXh0LgogICAgICAg
ICBEaWN0YXRpb25BbHRlcm5hdGl2ZXMgPSAxIDw8IDksCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9O
VU1CRVJfREVURUNUSU9OKQorICAgICAgICBUZWxlcGhvbmVOdW1iZXIgPSAxIDw8IDEwCisjZW5k
aWYKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIC8vIEZJWE1FOiBpT1MgaGFzIGl0cyBvd24g
ZGljdGF0aW9uIG1hcmtzLiBpT1Mgc2hvdWxkIHVzZSBPcGVuU291cmNlJ3MuCi0gICAgICAgIERp
Y3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgPSAxIDw8IDEwLAotICAgICAgICBEaWN0YXRp
b25SZXN1bHQgPSAxIDw8IDExLAorICAgICAgICBEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzID0gMSA8PCAxMSwKKyAgICAgICAgRGljdGF0aW9uUmVzdWx0ID0gMSA8PCAxMiwKICNlbmRp
ZgogICAgIH07CiAKQEAgLTk4LDkgKzEwMSwxMyBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAg
ICAgICBBbGxNYXJrZXJzKCkKICNpZiAhUExBVEZPUk0oSU9TKQorI2lmICFFTkFCTEUoVEVMRVBI
T05FX05VTUJFUl9ERVRFQ1RJT04pCiAgICAgICAgICAgICA6IE1hcmtlclR5cGVzKFNwZWxsaW5n
IHwgR3JhbW1hciB8IFRleHRNYXRjaCB8IFJlcGxhY2VtZW50IHwgQ29ycmVjdGlvbkluZGljYXRv
ciB8IFJlamVjdGVkQ29ycmVjdGlvbiB8IEF1dG9jb3JyZWN0ZWQgfCBTcGVsbENoZWNraW5nRXhl
bXB0aW9uIHwgRGVsZXRlZEF1dG9jb3JyZWN0aW9uIHwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzKQog
I2Vsc2UKLSAgICAgICAgICAgIDogTWFya2VyVHlwZXMoU3BlbGxpbmcgfCBHcmFtbWFyIHwgVGV4
dE1hdGNoIHwgUmVwbGFjZW1lbnQgfCBDb3JyZWN0aW9uSW5kaWNhdG9yIHwgUmVqZWN0ZWRDb3Jy
ZWN0aW9uIHwgQXV0b2NvcnJlY3RlZCB8IFNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEZWxldGVk
QXV0b2NvcnJlY3Rpb24gfCBEaWN0YXRpb25BbHRlcm5hdGl2ZXMgfCBEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzIHwgRGljdGF0aW9uUmVzdWx0KQorICAgICAgICAgICAgOiBNYXJrZXJU
eXBlcyhTcGVsbGluZyB8IEdyYW1tYXIgfCBUZXh0TWF0Y2ggfCBSZXBsYWNlbWVudCB8IENvcnJl
Y3Rpb25JbmRpY2F0b3IgfCBSZWplY3RlZENvcnJlY3Rpb24gfCBBdXRvY29ycmVjdGVkIHwgU3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbiB8IERlbGV0ZWRBdXRvY29ycmVjdGlvbiB8IERpY3RhdGlvbkFs
dGVybmF0aXZlcyB8IFRlbGVwaG9uZU51bWJlcikKKyNlbmRpZiAvLyAhRU5BQkxFKFRFTEVQSE9O
RV9OVU1CRVJfREVURUNUSU9OKQorI2Vsc2UKKyAgICAgICAgICAgIDogTWFya2VyVHlwZXMoU3Bl
bGxpbmcgfCBHcmFtbWFyIHwgVGV4dE1hdGNoIHwgUmVwbGFjZW1lbnQgfCBDb3JyZWN0aW9uSW5k
aWNhdG9yIHwgUmVqZWN0ZWRDb3JyZWN0aW9uIHwgQXV0b2NvcnJlY3RlZCB8IFNwZWxsQ2hlY2tp
bmdFeGVtcHRpb24gfCBEZWxldGVkQXV0b2NvcnJlY3Rpb24gfCBEaWN0YXRpb25BbHRlcm5hdGl2
ZXMgfCBUZWxlcGhvbmVOdW1iZXIgfCBEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzIHwg
RGljdGF0aW9uUmVzdWx0KQogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAgICAgICAgIHsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDgzNDRhMDIuLmU1ODk5YTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9h
cmQuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbW92ZUZvcm1hdENvbW1hbmQu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9s
LmgiCkBAIC03OCw2ICs3OSw3IEBACiAjaW5jbHVkZSAiU3BlbGxDaGVja2VyLmgiCiAjaW5jbHVk
ZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgorI2luY2x1ZGUgIlRlbGVwaG9uZU51bWJlckRldGVjdG9yLmgiCiAjaW5jbHVkZSAiVGV4
dC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNr
aW5nSGVscGVyLmgiCkBAIC0zMzE0LDYgKzMzMTYsMTEgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIEZyYW1lU2VsZWN0aW9u
OjoKIAogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oJm1fZnJhbWUpOworCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVU
RUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TKQorICAgIHNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVO
dW1iZXJzKCk7CisjZW5kaWYKKwogICAgIHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVl
KTsKIAogICAgIGlmIChtX2VkaXRvclVJVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKQEAgLTMzMjYs
NiArMzMzMyw2NyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgRnJhbWVTZWxlY3Rpb246OgogICAgIG1fZWRpdG9yVUlVcGRh
dGVUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJF
Ul9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1MpCit2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlv
bkZvclRlbGVwaG9uZU51bWJlcnMoKQoreworICAgIGlmICghVGVsZXBob25lTnVtYmVyRGV0ZWN0
b3I6OmlzU3VwcG9ydGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9mcmFtZS5k
b2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGVhckRhdGFEZXRlY3RlZFRlbGVw
aG9uZU51bWJlcnMoKTsKKworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGVkUmFu
Z2UgfHwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSA9PSBzZWxlY3RlZFJhbmdlLT5lbmRP
ZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29y
ayBpZiBhIHBob25lIG51bWJlciBzcGFucyBtdWx0aXBsZSBjaHVua3Mgb2YgdGV4dCBmcm9tIHRo
ZSBwZXJzcGVjdGl2ZSBvZiB0aGUgVGV4dEl0ZXJhdG9yCisgICAgLy8gKEJ5IGEgc3R5bGUgY2hh
bmdlLCBpbWFnZSwgbGluZSBicmVhaywgZXRjLikKKyAgICAvLyBGb3IgdGhhdCB3ZSdsbCBuZWVk
IHRvIHNjYW4gdGhlIHBsYWluIHRleHQgc3RyaW5nIHRoZW4gZG8gbW9yZSBjb21wbGljYXRlZCB0
aGluZ3MgZHVyaW5nIHRoZSBUZXh0SXRlcmF0b3IgcGFzcy4KKyAgICBmb3IgKFRleHRJdGVyYXRv
ciB0ZXh0Q2h1bmsoc2VsZWN0ZWRSYW5nZS5nZXQoKSk7ICF0ZXh0Q2h1bmsuYXRFbmQoKTsgdGV4
dENodW5rLmFkdmFuY2UoKSkgeworICAgICAgICAvLyBUZXh0SXRlcmF0b3IgY3VycmVudGx5IG5l
dmVyIHJldHVybnMgYSBSYW5nZSB0aGF0IHNwYW5zIG11bHRpcGxlIE5vZGVzLgorICAgICAgICAv
LyBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzIG9ubHkgd29ya3Mgd2l0aCB0aGF0IGludmFy
aWFudC4KKyAgICAgICAgQVNTRVJUKHRleHRDaHVuay5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigp
ID09IHRleHRDaHVuay5yYW5nZSgpLT5lbmRDb250YWluZXIoKSk7CisKKyAgICAgICAgc2NhblJh
bmdlRm9yVGVsZXBob25lTnVtYmVycygqdGV4dENodW5rLnJhbmdlKCksIHRleHRDaHVuay50ZXh0
KCkpOworICAgIH0KK30KKwordm9pZCBFZGl0b3I6OnNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJl
cnMoUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3KQoreworICAgIC8v
IHJlbGF0aXZlU3RhcnRQb3NpdGlvbiBhbmQgcmVsYXRpdmVFbmRQb3NpdGlvbiBhcmUgdGhlIGVu
ZHBvaW50cyBvZiB0aGUgcGhvbmUgbnVtYmVyIHJhbmdlLAorICAgIC8vIHJlbGF0aXZlIHRvIHRo
ZSBzY2FubmVyUG9zaXRpb24KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdWaWV3Lmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHNjYW5uZXJQb3NpdGlvbiA9IDA7CisgICAgaW50IHJlbGF0aXZl
U3RhcnRQb3NpdGlvbiA9IDA7CisgICAgaW50IHJlbGF0aXZlRW5kUG9zaXRpb24gPSAwOworCisg
ICAgYXV0byBjaGFyYWN0ZXJzID0gc3RyaW5nVmlldy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
KworICAgIHdoaWxlIChzY2FubmVyUG9zaXRpb24gPCBsZW5ndGggJiYgVGVsZXBob25lTnVtYmVy
RGV0ZWN0b3I6OmZpbmQoJmNoYXJhY3RlcnNbc2Nhbm5lclBvc2l0aW9uXSwgbGVuZ3RoIC0gc2Nh
bm5lclBvc2l0aW9uLCAmcmVsYXRpdmVTdGFydFBvc2l0aW9uLCAmcmVsYXRpdmVFbmRQb3NpdGlv
bikpIHsKKyAgICAgICAgLy8gVGhlIGNvbnZlbnRpb24gaW4gdGhlIERhdGEgRGV0ZWN0b3JzIGZy
YW1ld29yayBpcyB0aGF0IHRoZSBlbmQgcG9zaXRpb24gaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBO
T1QgaW4gdGhlIHBob25lIG51bWJlcgorICAgICAgICAvLyAodGhhdCBpcywgdGhlIGxlbmd0aCBv
ZiB0aGUgcmFuZ2UgaXMgcmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZlU3RhcnRQb3NpdGlv
bikuIFNvIHN1YnN0cmFjdCAxIHRvIGdldCB0aGUgc2FtZQorICAgICAgICAvLyBjb252ZW50aW9u
IGFzIHRoZSBvbGQgV2ViQ29yZSBwaG9uZSBudW1iZXIgcGFyc2VyIChzbyB0aGF0IHRoZSByZXN0
IG9mIHRoZSBjb2RlIGlzIHN0aWxsIHZhbGlkIGlmIHdlIHdhbnQgdG8gZ28gYmFjaworICAgICAg
ICAvLyB0byB0aGUgb2xkIHBhcnNlcikuCisgICAgICAgIC0tcmVsYXRpdmVFbmRQb3NpdGlvbjsK
KworICAgICAgICBBU1NFUlQoc2Nhbm5lclBvc2l0aW9uICsgcmVsYXRpdmVFbmRQb3NpdGlvbiA8
IGxlbmd0aCk7CisKKyAgICAgICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRN
YXJrZXJUb05vZGUocmFuZ2Uuc3RhcnRDb250YWluZXIoKSwgcmFuZ2Uuc3RhcnRPZmZzZXQoKSAr
IHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiwgcmVsYXRpdmVFbmRQb3Np
dGlvbiAtIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiArIDEsIERvY3VtZW50TWFya2VyOjpUZWxlcGhv
bmVOdW1iZXIpOworCisgICAgICAgIHNjYW5uZXJQb3NpdGlvbiArPSByZWxhdGl2ZUVuZFBvc2l0
aW9uICsgMTsKKyAgICB9Cit9CisKK3ZvaWQgRWRpdG9yOjpjbGVhckRhdGFEZXRlY3RlZFRlbGVw
aG9uZU51bWJlcnMoKQoreworICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLnJlbW92
ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7CisKKyAgICAvLyBGSVhN
RTogRG8gb3RoZXIgVUkgY2xlYW51cCBoZXJlIG9uY2Ugd2UgaGF2ZSBvdGhlciBVSS4KK30KKyNl
bmRpZiAvLyBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJ
T1MpCisKIHZvaWQgRWRpdG9yOjp1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCkKIHsKICAg
ICBpZiAoIW1fZWRpdG9yVUlVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmgKaW5kZXggNGM5ZWUwNy4uOTIyZmNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBA
IC00NzMsNiArNDczLDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tl
ckVuYWJsZWQoKSBjb25zdDsKIAorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElP
TikgJiYgIVBMQVRGT1JNKElPUykKKyAgICB2b2lkIHNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVO
dW1iZXJzKCk7CisgICAgdm9pZCBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKFJhbmdlJiwg
Y29uc3QgU3RyaW5nVmlldyYpOworICAgIHZvaWQgY2xlYXJEYXRhRGV0ZWN0ZWRUZWxlcGhvbmVO
dW1iZXJzKCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKICAgICBQYXNzUmVm
UHRyPFJhbmdlPiBhZGp1c3RlZFNlbGVjdGlvblJhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAwZTRlYmZiLi40MDE0NGY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAg
LTIzMDUsNyArMjMwNSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVy
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB9CiAKIC8vIEZJWE1FOiBFeHRyYWN0IHRoZSBmb2xs
b3dpbmcgaU9TLXNwZWNpZmljIGNvZGUgaW50byBhIHNlcGFyYXRlIGZpbGUuCi0jaWYgRU5BQkxF
KFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikgJiYgUExBVEZPUk0oSU9TKQogLy8gRnJvbSB0aGUgc3RyaW5nIDQwODk5NjEw
MTAsIGNyZWF0ZXMgYSBsaW5rIG9mIHRoZSBmb3JtIDxhIGhyZWY9InRlbDo0MDg5OTYxMDEwIj40
MDg5OTYxMDEwPC9hPiBhbmQgaW5zZXJ0cyBpdC4KIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNl
cnRQaG9uZU51bWJlckxpbmsoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CkBAIC0yMzg5LDcgKzIz
ODksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkUGFyc2VUZWxlcGhvbmVOdW1iZXJzSW5O
b2RlKGNvbnN0IENvbnRhaW5lck5vZGUmIG5vZGUpCiAgICAgfSB3aGlsZSAoY3VycmVudE5vZGUp
OwogICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFRFTEVQSE9O
RV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1MpCiAKIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIm
IGJ1ZmZlcikKIHsKQEAgLTI1NjYsNyArMjU2Niw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzQ2hhcmFjdGVyQnVmZmVyRm9ySW5Cb2R5KEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZm
CiB7CiAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7
CiAgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBidWZmZXIudGFrZVJlbWFpbmluZygpOwotI2lmIEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKElPUykKICAgICBpZiAoIWlzUGFyc2luZ0ZyYWdt
ZW50KCkgJiYgbV90cmVlLmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBzaG91
bGRQYXJzZVRlbGVwaG9uZU51bWJlcnNJbk5vZGUoKm1fdHJlZS5jdXJyZW50Tm9kZSgpKSAmJiBU
ZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKSkKICAgICAgICAgbGlua2lmeVBo
b25lTnVtYmVycyhjaGFyYWN0ZXJzKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggMmEzZTEzYS4uNTY2ZGNlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMTI0OCw2ICsxMjQ4LDMzIEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0
KiBwdCwgY29uc3QgRmxvYXRQb2ludCYKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGVsZXBob25lTnVt
YmVyTWFya2VyKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBwbGFjZWhvbGRlciBVSSBm
b3IgZGV2ZWxvcG1lbnQgb2YgdGhlIGZlYXR1cmUuCisKKyAgICBpbnQgc3RhcnRQb3NpdGlvbiA9
IHN0ZDo6bWF4PGludD4obWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgMCk7CisgICAg
aW50IGVuZFBvc2l0aW9uID0gc3RkOjptaW48aW50PihtYXJrZXItPmVuZE9mZnNldCgpIC0gbV9z
dGFydCwgbV9sZW4pOworCisgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQor
ICAgICAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPGludD4oZW5kUG9zaXRpb24sIG1fdHJ1bmNh
dGlvbik7CisKKyAgICBpbnQgZGVsdGFZID0gcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExp
bmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDog
bG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CisgICAgaW50IHNlbEhlaWdodCA9IHNlbGVj
dGlvbkhlaWdodCgpOworICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChib3hPcmlnaW4ueCgpLCBi
b3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKKyAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRS
dW4oc3R5bGUsIGZvbnQpOworCisgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc3RhcnRQb2ludCwgc2VsSGVpZ2h0
LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpOworCisgICAgY29tcHV0ZVJlY3RGb3JSZXBs
YWNlbWVudE1hcmtlcihtYXJrZXIsIHN0eWxlLCBmb250KTsKKworICAgIFBhdGggb3V0bGluZTsK
KyAgICBvdXRsaW5lLmFkZFJvdW5kZWRSZWN0KG1hcmtlclJlY3QsIEZsb2F0U2l6ZSg0LCA0KSk7
CisgICAgY3R4LT5zZXRGaWxsQ29sb3IoQ29sb3IoMTUwLCAxNTAsIDE1MCwgMjU1KSwgQ29sb3JT
cGFjZURldmljZVJHQik7CisgICAgY3R4LT5maWxsUGF0aChvdXRsaW5lKTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCisKIHZvaWQgSW5saW5lVGV4dEJv
eDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2Vy
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgLy8g
UmVwbGFjZW1lbnQgbWFya2VycyBhcmUgbm90IGFjdHVhbGx5IGRyYXduLCBidXQgdGhlaXIgcmVj
dHMgbmVlZCB0byBiZSBjb21wdXRlZCBmb3IgaGl0IHRlc3RpbmcuCkBAIC0xMjkzLDYgKzEzMjAs
OSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29u
dGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtl
cjo6VGV4dE1hdGNoOgorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyAg
ICAgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcjoKKyNlbmRpZgog
ICAgICAgICAgICAgICAgIGlmICghYmFja2dyb3VuZCkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzMxLDYgKzEzNjEsMTEgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqIHB0
LCBjb25zdCBGbG9hdFBvaW50JgogICAgICAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQ6CiAgICAgICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtl
cihtYXJrZXIsIHN0eWxlLCBmb250KTsKICAgICAgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFC
TEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCisgICAgICAgICAgICBjYXNlIERvY3VtZW50
TWFya2VyOjpUZWxlcGhvbmVOdW1iZXI6CisgICAgICAgICAgICAgICAgcGFpbnRUZWxlcGhvbmVO
dW1iZXJNYXJrZXIocHQsIGJveE9yaWdpbiwgbWFya2VyLCBzdHlsZSwgZm9udCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IDU3NzUyMWEuLjkzNTkyODcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTczLDYgKzE3MywxMSBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBDb2xv
ciB0ZXh0Q29sb3IpOwogICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKICAgICB2b2lkIHBhaW50
VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsK
KworI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKKyAgICB2b2lkIHBhaW50
VGVsZXBob25lTnVtYmVyTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZv
bnQmKTsKKyNlbmRpZgorCiAgICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2Vy
KERvY3VtZW50TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jik7CiAKICAg
ICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggM2FmZmM3Yi4uY2ZlODE2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjQ1LDYgKzI0NSwxMCBAQCBzdGF0
aWMgYm9vbCBtYXJrZXJUeXBlc0Zyb20oY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZQogICAgICAgICByZXN1bHQgPSAgRG9jdW1lbnRNYXJrZXI6OkRl
bGV0ZWRBdXRvY29ycmVjdGlvbjsKICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtYXJr
ZXJUeXBlLCAiRGljdGF0aW9uQWx0ZXJuYXRpdmVzIikpCiAgICAgICAgIHJlc3VsdCA9ICBEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOworI2lmIEVOQUJMRShURUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtYXJrZXJU
eXBlLCAiVGVsZXBob25lTnVtYmVyIikpCisgICAgICAgIHJlc3VsdCA9ICBEb2N1bWVudE1hcmtl
cjo6VGVsZXBob25lTnVtYmVyOworI2VuZGlmCiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAK
</data>
<flag name="review"
          id="252473"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>