<?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>167259</bug_id>
          
          <creation_ts>2017-01-20 15:06:48 -0800</creation_ts>
          <short_desc>[WebGL] Do not allow GPU muxing on some old Mac hardware</short_desc>
          <delta_ts>2017-01-22 10:53:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1268606</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-20 15:06:48 -0800</bug_when>
    <thetext>[WebGL] Do not allow GPU muxing on particular old Mac hardware</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268610</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-20 15:10:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/30060378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268611</commentid>
    <comment_count>2</comment_count>
      <attachid>299394</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-20 15:14:34 -0800</bug_when>
    <thetext>Created attachment 299394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268618</commentid>
    <comment_count>3</comment_count>
      <attachid>299396</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-20 15:34:49 -0800</bug_when>
    <thetext>Created attachment 299396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268632</commentid>
    <comment_count>4</comment_count>
      <attachid>299394</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-20 16:01:52 -0800</bug_when>
    <thetext>Comment on attachment 299394
Patch

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

I suggest crunching the code down a little. The three functions with the AGC prefixes are doing more than they need to for our simple purposes. In fact, the code is simple enough that I’m not sure we need a separate GPUUtilsMac.mm source file, once we remove the unneeded parts.

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.cpp:57
&gt; +    agc-&gt;service = serviceObject;

This field seems to be write-only. We should not store a pointer to the serviceObject since we are releasing it in this function. Luckily no one ever looks at the contents of the field!

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.cpp:73
&gt; +    kern_return_t kernResult;
&gt; +
&gt; +    kernResult = IOConnectCallScalarMethod(agc-&gt;dataPort, kAGCOpen, nullptr, 0, nullptr, nullptr);
&gt; +    return kernResult == KERN_SUCCESS;

No need for the local variable.

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.cpp:81
&gt; +    kern_return_t kernResult;
&gt; +
&gt; +    kernResult = IOConnectCallScalarMethod(agc-&gt;dataPort, kAGCClose, nullptr, 0, nullptr, nullptr);
&gt; +    return kernResult == KERN_SUCCESS;

No need for the local variable.

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.h:37
&gt; +bool AGCAttach(mach_port_t, AGCConnectRef_t, IONotificationPortRef, IOServiceInterestCallback, void *arg);

Seems like this should just return an io_connect_t rather than a boolean. No need for AGCConnect_t.

Also, since we aren’t passing anything other than null for any of the arguments, I suggest making a version of this function for our WebKit purposes that does not take any arguments.

    io_connect_t AGCAttach();

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.h:38
&gt; +bool AGCOpen(AGCConnectRef_t);

Should just take io_connect_t.

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.h:39
&gt; +bool AGCClose(AGCConnectRef_t);

Should just take io_connect_t dataPort. No need for boolean result.

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:83
&gt;  #if !PLATFORM(IOS)

Should be #if PLATFORM(MAC)

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:86
&gt; +AGCConnect_t agc_connect;
&gt; +AGCConnectRef_t agc = &amp;agc_connect;

I see no reason these should be global variables.

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:121
&gt; +    int names[2] = { CTL_HW, HW_NCPU };
&gt; +    int cpuCount;
&gt; +    size_t cpuCountLength = sizeof(cpuCount);
&gt; +    sysctl(names, 2, &amp;cpuCount, &amp;cpuCountLength, nullptr, 0);
&gt; +    return cpuCount &lt;= 4;

It’s non-obvious why a cpuCount &lt;= 4 check is the correct thing to do here. Would it be practical to add a comment about why this is correct?

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:130
&gt; +    static int canMux = -1;
&gt; +    if (canMux == -1)
&gt; +        canMux = hasMuxableGPU() &amp;&amp; !hasGPUThatShouldNotMux();
&gt; +
&gt; +    ASSERT(!canMux || canMux == 1);

Here’s a way to write this in C++ without using the magic -1 int:

    static bool canMux = hasMuxableGPU() &amp;&amp; !hasGPUThatShouldNotMux();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268633</commentid>
    <comment_count>5</comment_count>
      <attachid>299396</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-01-20 16:02:12 -0800</bug_when>
    <thetext>Comment on attachment 299396
Patch

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

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.cpp:45
&gt; +    kern_return_t kernResult;
&gt; +    io_service_t serviceObject;
&gt; +    io_iterator_t iterator;

Declare these at first use.

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.cpp:64
&gt; +        (void) IOServiceAddInterestNotification(notifyPort, serviceObject, kIOGeneralInterest, callback, myarg, &amp;ignored);

No space after )

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.cpp:74
&gt; +    kern_return_t kernResult;
&gt; +
&gt; +    kernResult = IOConnectCallScalarMethod(agc-&gt;dataPort, kAGCOpen, nullptr, 0, nullptr, nullptr);

Put on one line.

&gt; Source/WebCore/platform/graphics/mac/GPUUtilsMac.cpp:82
&gt; +    kern_return_t kernResult;
&gt; +
&gt; +    kernResult = IOConnectCallScalarMethod(agc-&gt;dataPort, kAGCClose, nullptr, 0, nullptr, nullptr);

Ditto.

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:95
&gt; +    if (!AGCAttach(masterPort, agc, nullptr, nullptr, nullptr)) {

How expensive is this call?

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:121
&gt; +    return cpuCount &lt;= 4;

Is there no more specific way to detect this hardware?

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:126
&gt; +    static int canMux = -1;

The cool kids are using std::optional&lt;bool&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268659</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-20 17:02:05 -0800</bug_when>
    <thetext>Thanks for the feedback. The code came from the OpenGL team. You&apos;re right that we can do away with the separate file, as well as squish everything into smaller functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268675</commentid>
    <comment_count>7</comment_count>
      <attachid>299410</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-20 17:30:39 -0800</bug_when>
    <thetext>Created attachment 299410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268756</commentid>
    <comment_count>8</comment_count>
      <attachid>299410</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-01-21 09:30:51 -0800</bug_when>
    <thetext>Comment on attachment 299410
Patch

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

Thanks. Looks great the way you reworked it. One tiny additional suggestion for refinement:

&gt; Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:120
&gt; +    mach_port_t masterPort;
&gt; +
&gt; +    if (IOMasterPort(MACH_PORT_NULL, &amp;masterPort) != KERN_SUCCESS)
&gt; +        return false;

I suggest putting this inside the attachToAppleGraphicsControl function instead of passing an argument to the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268899</commentid>
    <comment_count>9</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-22 10:53:01 -0800</bug_when>
    <thetext>Committed r211028: &lt;http://trac.webkit.org/changeset/211028&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299394</attachid>
            <date>2017-01-20 15:14:34 -0800</date>
            <delta_ts>2017-01-20 17:30:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167259-20170121101237.patch</filename>
            <type>text/plain</type>
            <size>15087</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwOTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FkYTk1MTk2OGRjNzk0
YzBmYzU3ZWViOGQ5OGNmNzI5NjEyZDgxNi4uNTY3N2E3NGZkNzgxZDM2M2ExZjVhODU3MGU1N2Ux
NDMxNTEzMWFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE3LTAxLTIwICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR0xdIERvIG5vdCBhbGxv
dyBHUFUgbXV4aW5nIG9uIHNvbWUgb2xkIE1hYyBoYXJkd2FyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MjU5CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMDA2MDM3OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTb21lIG9sZCBNYWNib29rIFBybyBtb2RlbHMgc2hvdWxkIG5ldmVyIHVzZSB0aGUK
KyAgICAgICAgaW50ZWdyYXRlZCBHUFUgZm9yIFdlYkdMLCBiZWNhdXNlIHRoZXkgYXJlIHVuc3Rh
YmxlCisgICAgICAgIHdoZW4gc3dhcHBpbmcgYmV0d2VlbiB0aGF0IGFuZCB0aGUgZGlzY3JldGUg
R1BVLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHkgdGhpcyBoYXJkd2FyZSBjb25maWd1cmF0aW9u
IGlzbid0IGluIG91cgorICAgICAgICB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLCBzbyBpdCB3YXMg
Y29uZmlybWVkIG1hbnVhbGx5LgorICAgICAgICBNZWFud2hpbGUsIG91ciBleGlzdGluZyB0ZXN0
cyBtYWtlIHN1cmUgdGhpcyBwYXRjaAorICAgICAgICBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIGVs
c2V3aGVyZS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOiBBZGQgbmV3IGZpbGUuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR1BVVXRpbHNNYWMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEFHQ0F0dGFjaCk6IEF0dGFjaCB0byB0aGUgR1BVLgorICAgICAgICAoQUdDT3Blbik6Cisg
ICAgICAgIChBR0NDbG9zZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQVVV0
aWxzTWFjLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omhhc011eGFibGVHUFUpOiBDaGVj
ayB0aGF0IHRoZSBkZXZpY2UgaGFzIG11bHRpcGxlCisgICAgICAgIEdQVXMsIGFuZCBpZiB0aGUg
aW50ZWdyYXRlZCBjYXJkIGlzIGEgcGFydGljdWxhciBtb2RlbC4KKyAgICAgICAgKFdlYkNvcmU6
Omhhc0dQVVRoYXRTaG91bGROb3RNdXgpOgorICAgICAgICAoV2ViQ29yZTo6aGFzTXV4Q2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbEZvcm1hdCk6CisKIDIwMTctMDEtMTgg
IFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIxMDg0OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNGM1
MWUyYWE5MDY2NDU4MmFhNDIyMzY3NDU0NTEzOTkxMjRhMTFmMC4uZTU5MGFlMjJiODgyOTdlMmMz
YTJkNGJmNWUyZDFhOTJhOWFiN2QwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTQz
MSw2ICs0MzEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDYWNoZU1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HUFVVdGlsc01hYy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0MGY5YmZiYWQ2M2M1NGJiNmNhOTI1MDM4
ZTMxZjZhYjBmOWZmN2YwLi42ZjRkZWE3ZGJlNjEzMjA3ZjAwODg5NWUwYTA3NTNhYzE1YTU5OTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMzgwLDYgKzEzODAsOCBAQAogCQkzMUMwRkYzRTBFNENFRkFDMDA3RDZGRTUgLyog
SlNXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzFDMEZGM0EwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0
aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGM0YwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0
VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxQzBGRjNCMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdFRyYW5zaXRpb25F
dmVudC5jcHAgKi87IH07CiAJCTMxQzBGRjQwMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdFRy
YW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzFDMEZGM0MwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50
LmggKi87IH07CisJCTMxQzQ5RjQ4MUUzMUExMTIwMDlGNTEwRiAvKiBHUFVVdGlsc01hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDNDlGNDcxRTMx
QTExMjAwOUY1MTBGIC8qIEdQVVV0aWxzTWFjLmggKi87IH07CisJCTMxQzQ5RjRBMUUzMUE1OEQw
MDlGNTEwRiAvKiBHUFVVdGlsc01hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMUM0OUY0OTFFMzFBNThEMDA5RjUxMEYgLyogR1BVVXRpbHNNYWMu
Y3BwICovOyB9OwogCQkzMUQ1OTFCMzE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQ1OTFCMTE2
Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0QyOUQxQUI0RkJERTAwNzJFODE3IC8qIEFu
aW1hdGlvblRyaWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0RGNDMx
REExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4
dGVuZGVkQ29sb3IuY3BwICovOyB9OwpAQCAtODUzMCw2ICs4NTMyLDggQEAKIAkJMzFDMEZGM0Ew
RTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRBbmltYXRpb25FdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYzQjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRU
cmFuc2l0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMUMwRkYzQzBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFDNDlGNDcxRTMxQTExMjAwOUY1MTBG
IC8qIEdQVVV0aWxzTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVV0
aWxzTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxQzQ5RjQ5MUUzMUE1OEQw
MDlGNTEwRiAvKiBHUFVVdGlsc01hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHUFVVdGlsc01hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
RDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVu
ZGVkQ29sb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5k
ZWRDb2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTYyMyw2ICsyMTYy
Nyw4IEBACiAJCQkJQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuY3BwICovLAogCQkJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggKi8sCiAJCQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBo
UGFnZU1hYy5jcHAgKi8sCisJCQkJMzFDNDlGNDcxRTMxQTExMjAwOUY1MTBGIC8qIEdQVVV0aWxz
TWFjLmggKi8sCisJCQkJMzFDNDlGNDkxRTMxQTU4RDAwOUY1MTBGIC8qIEdQVVV0aWxzTWFjLmNw
cCAqLywKIAkJCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RN
YWMubW0gKi8sCiAJCQkJQjI3N0I0MDMwQjIyRjM3QzAwMDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4
dE1hYy5tbSAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5tbSAq
LywKQEAgLTI1NTgyLDYgKzI1NTg4LDcgQEAKIAkJCQk5M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcg
LyogRXhjZXB0aW9uT3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBF
OEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLywKKwkJCQkzMUM0OUY0
ODFFMzFBMTEyMDA5RjUxMEYgLyogR1BVVXRpbHNNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZF
NjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBF
eHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDA3NCw2ICszMDA4MSw3
IEBACiAJCQkJQkMwNkVEMDYwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDY0ODlEMjUxNjZGRkNGMTAwN0MwMzFCIC8q
IEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NjM3NjMwQjFF
MjZGREY2MDA4Q0Q0NkQgLyogQ1BVVGltZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzFD
NDlGNEExRTMxQTU4RDAwOUY1MTBGIC8qIEdQVVV0aWxzTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUQ2Rjc5NjBEMTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdFOUUwQTFBODNFMzAwN0ZCOEM1IC8qIEpT
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4M0UzNTlBMzFCQjEw
MzFEMDAyQ0VCOTggLyogSlNIVE1MVGltZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR1BVVXRpbHNNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQVVV0aWxzTWFjLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ZWIxN2Q2Y2Q4ZTRjMDA1ODU3NmZhZmQ1MGQxMjIyZjgyZmU0NzIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQ
VVV0aWxzTWFjLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdQVVV0aWxzTWFjLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Cisj
aW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KKyNpbmNsdWRlIDxJT0tpdC9JT01lc3NhZ2UuaD4K
KworZW51bSB7CisgICAga0FHQ09wZW4sCisgICAga0FHQ0Nsb3NlCit9OworCitib29sIEFHQ0F0
dGFjaChtYWNoX3BvcnRfdCBtYXN0ZXJQb3J0LCBBR0NDb25uZWN0UmVmX3QgYWdjLCBJT05vdGlm
aWNhdGlvblBvcnRSZWYgbm90aWZ5UG9ydCwgSU9TZXJ2aWNlSW50ZXJlc3RDYWxsYmFjayBjYWxs
YmFjaywgdm9pZCAqbXlhcmcpCit7CisgICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OworICAg
IGlvX3NlcnZpY2VfdCBzZXJ2aWNlT2JqZWN0OworICAgIGlvX2l0ZXJhdG9yX3QgaXRlcmF0b3I7
CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGNsYXNzVG9NYXRjaCA9IElPU2VydmljZU1hdGNoaW5nKCJB
cHBsZUdyYXBoaWNzQ29udHJvbCIpOworICAgIGlmICghY2xhc3NUb01hdGNoKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoKGtlcm5SZXN1bHQgPSBJT1NlcnZpY2VHZXRNYXRjaGlu
Z1NlcnZpY2VzKG1hc3RlclBvcnQsIGNsYXNzVG9NYXRjaCwgJml0ZXJhdG9yKSkgIT0gS0VSTl9T
VUNDRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzZXJ2aWNlT2JqZWN0ID0gSU9J
dGVyYXRvck5leHQoaXRlcmF0b3IpOworICAgIElPT2JqZWN0UmVsZWFzZShpdGVyYXRvcik7Cisg
ICAgaWYgKCFzZXJ2aWNlT2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJT09i
amVjdFJldGFpbihzZXJ2aWNlT2JqZWN0KTsKKyAgICBhZ2MtPnNlcnZpY2UgPSBzZXJ2aWNlT2Jq
ZWN0OworCisgICAga2VyblJlc3VsdCA9IElPU2VydmljZU9wZW4oc2VydmljZU9iamVjdCwgbWFj
aF90YXNrX3NlbGYoKSwgMCwgJmFnYy0+ZGF0YVBvcnQpOworICAgIGlmIChrZXJuUmVzdWx0ID09
IEtFUk5fU1VDQ0VTUyAmJiBjYWxsYmFjayAmJiBub3RpZnlQb3J0KSB7CisgICAgICAgIGlvX2l0
ZXJhdG9yX3QgaWdub3JlZCA9IElPX09CSkVDVF9OVUxMOworICAgICAgICAodm9pZCkgSU9TZXJ2
aWNlQWRkSW50ZXJlc3ROb3RpZmljYXRpb24obm90aWZ5UG9ydCwgc2VydmljZU9iamVjdCwga0lP
R2VuZXJhbEludGVyZXN0LCBjYWxsYmFjaywgbXlhcmcsICZpZ25vcmVkKTsKKyAgICB9CisgICAg
SU9PYmplY3RSZWxlYXNlKHNlcnZpY2VPYmplY3QpOworICAgIHJldHVybiBrZXJuUmVzdWx0ID09
IEtFUk5fU1VDQ0VTUzsKK30KKworYm9vbCBBR0NPcGVuKEFHQ0Nvbm5lY3RSZWZfdCBhZ2MpCit7
CisgICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OworCisgICAga2VyblJlc3VsdCA9IElPQ29u
bmVjdENhbGxTY2FsYXJNZXRob2QoYWdjLT5kYXRhUG9ydCwga0FHQ09wZW4sIG51bGxwdHIsIDAs
IG51bGxwdHIsIG51bGxwdHIpOworICAgIHJldHVybiBrZXJuUmVzdWx0ID09IEtFUk5fU1VDQ0VT
UzsKK30KKworYm9vbCBBR0NDbG9zZShBR0NDb25uZWN0UmVmX3QgYWdjKQoreworICAgIGtlcm5f
cmV0dXJuX3Qga2VyblJlc3VsdDsKKworICAgIGtlcm5SZXN1bHQgPSBJT0Nvbm5lY3RDYWxsU2Nh
bGFyTWV0aG9kKGFnYy0+ZGF0YVBvcnQsIGtBR0NDbG9zZSwgbnVsbHB0ciwgMCwgbnVsbHB0ciwg
bnVsbHB0cik7CisgICAgcmV0dXJuIGtlcm5SZXN1bHQgPT0gS0VSTl9TVUNDRVNTOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQVVV0aWxzTWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR1BVVXRpbHNNYWMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42ZTE4Nzg1M2Y2ZGZlY2RkY2UwZDU4OTRhOTI0NDllZTI5YzkzNGI3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQVVV0
aWxzTWFjLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SU9LaXQvSU9UeXBlcy5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW9fc2Vy
dmljZV90IHNlcnZpY2U7CisgICAgaW9fY29ubmVjdF90IGRhdGFQb3J0OworfSBBR0NDb25uZWN0
X3Q7CisKK3R5cGVkZWYgQUdDQ29ubmVjdF90ICpBR0NDb25uZWN0UmVmX3Q7CisKK2Jvb2wgQUdD
QXR0YWNoKG1hY2hfcG9ydF90LCBBR0NDb25uZWN0UmVmX3QsIElPTm90aWZpY2F0aW9uUG9ydFJl
ZiwgSU9TZXJ2aWNlSW50ZXJlc3RDYWxsYmFjaywgdm9pZCAqYXJnKTsKK2Jvb2wgQUdDT3BlbihB
R0NDb25uZWN0UmVmX3QpOworYm9vbCBBR0NDbG9zZShBR0NDb25uZWN0UmVmX3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCmluZGV4IDQwZDc4ZGM3NThhMWY2MDQ1OTE1ODA1ZWNjNmQ2MGNlNDNi
MTkxMDEuLjk1NTUxMDNkMGMzYTE0NTQ0OTMwYTM2YTIzYzA5OWZlN2IwZDkwNWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0KQEAgLTQ4LDEyICs0OCwxNCBAQAogI2ltcG9ydCA8T3BlbkdMRVMv
RUFHTERyYXdhYmxlLmg+CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNlbHNl
CisjaW5jbHVkZSAiR1BVVXRpbHNNYWMuaCIKICNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVuZGVyZXJz
Lmg+CiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZW5kaWYKICNpbmNsdWRlICJXZWJHTExheWVy
LmgiCiAjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgiCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogI2luY2x1ZGUgPHN5c2V4aXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC03OSw2ICs4MSw1NiBAQCBw
dWJsaWM6CiB9OwogCiAjaWYgIVBMQVRGT1JNKElPUykKKworQUdDQ29ubmVjdF90IGFnY19jb25u
ZWN0OworQUdDQ29ubmVjdFJlZl90IGFnYyA9ICZhZ2NfY29ubmVjdDsKKworc3RhdGljIGJvb2wg
aGFzTXV4YWJsZUdQVSgpCit7CisgICAgbWFjaF9wb3J0X3QgbWFzdGVyUG9ydDsKKworICAgIGlm
IChJT01hc3RlclBvcnQoTUFDSF9QT1JUX05VTEwsICZtYXN0ZXJQb3J0KSAhPSBLRVJOX1NVQ0NF
U1MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghQUdDQXR0YWNoKG1hc3RlclBv
cnQsIGFnYywgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpIHsKKyAgICAgICAgSU9TZXJ2aWNl
Q2xvc2UoYWdjLT5kYXRhUG9ydCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIHJlc3VsdDsKKyAgICBpZiAoQUdDT3BlbihhZ2MpKSB7CisgICAgICAgIEFHQ0Nsb3Nl
KGFnYyk7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3Vs
dCA9IGZhbHNlOworCisgICAgSU9TZXJ2aWNlQ2xvc2UoYWdjLT5kYXRhUG9ydCk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCisvLyBUaGlzIGlzIGRldGVjdGluZyBNYWMgaGFyZHdhcmUgd2l0
aCBhbiBJbnRlbCBnNTc1IEdQVSwgd2hpY2gKKy8vIHdlIGRvbid0IHdhbnQgdG8gbWFrZSBhdmFp
bGFibGUgdG8gbXV4aW5nLgorLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS8zMDA2MDM3OD4KK3N0YXRp
YyBib29sIGhhc0dQVVRoYXRTaG91bGROb3RNdXgoKQoreworICAgIGludCBuYW1lc1syXSA9IHsg
Q1RMX0hXLCBIV19OQ1BVIH07CisgICAgaW50IGNwdUNvdW50OworICAgIHNpemVfdCBjcHVDb3Vu
dExlbmd0aCA9IHNpemVvZihjcHVDb3VudCk7CisgICAgc3lzY3RsKG5hbWVzLCAyLCAmY3B1Q291
bnQsICZjcHVDb3VudExlbmd0aCwgbnVsbHB0ciwgMCk7CisgICAgcmV0dXJuIGNwdUNvdW50IDw9
IDQ7Cit9CisKK3N0YXRpYyBib29sIGhhc011eENhcGFiaWxpdHkoKQoreworICAgIHN0YXRpYyBp
bnQgY2FuTXV4ID0gLTE7CisgICAgaWYgKGNhbk11eCA9PSAtMSkKKyAgICAgICAgY2FuTXV4ID0g
aGFzTXV4YWJsZUdQVSgpICYmICFoYXNHUFVUaGF0U2hvdWxkTm90TXV4KCk7CisKKyAgICBBU1NF
UlQoIWNhbk11eCB8fCBjYW5NdXggPT0gMSk7CisgICAgcmV0dXJuIGNhbk11eDsKK30KKwogc3Rh
dGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiYg
YXR0cmlicywgaW50IGNvbG9yQml0cywgaW50IGRlcHRoQml0cywgYm9vbCBhY2NlbGVyYXRlZCwg
Ym9vbCBzdXBlcnNhbXBsZSwgYm9vbCBjbG9zZXN0LCBib29sIGFudGlhbGlhcywgYm9vbCBhbGxv
d09mZmxpbmUsIGJvb2wgdXNlR0xFUzMpCiB7CiAgICAgYXR0cmlicy5jbGVhcigpOwpAQCAtOTIs
NyArMTQ0LDcgQEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9y
bWF0QXR0cmlidXRlPiYgYXR0cmlicywgaW50IGNvbG9yQmkKICAgICAvLyBhbGxvd2luZyB1cyB0
byByZXF1ZXN0IHRoZSBpbnRlZ3JhdGVkIGdyYXBoaWNzIG9uIGEgZHVhbCBHUFUKICAgICAvLyBz
eXN0ZW0sIGFuZCBub3QgZm9yY2UgdGhlIGRpc2NyZXRlIEdQVS4KICAgICAvLyBTZWUgaHR0cHM6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL3RlY2hub3Rlcy90bjIyMjkvX2luZGV4
Lmh0bWwKLSAgICBpZiAoYWxsb3dPZmZsaW5lKQorICAgIGlmIChhbGxvd09mZmxpbmUgJiYgaGFz
TXV4Q2FwYWJpbGl0eSgpKQogICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQWxsb3dPZmZs
aW5lUmVuZGVyZXJzKTsKIAogICAgIGlmIChhY2NlbGVyYXRlZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299396</attachid>
            <date>2017-01-20 15:34:49 -0800</date>
            <delta_ts>2017-01-20 17:30:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167259-20170121103253.patch</filename>
            <type>text/plain</type>
            <size>15149</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwOTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FkYTk1MTk2OGRjNzk0
YzBmYzU3ZWViOGQ5OGNmNzI5NjEyZDgxNi4uNTY3N2E3NGZkNzgxZDM2M2ExZjVhODU3MGU1N2Ux
NDMxNTEzMWFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE3LTAxLTIwICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR0xdIERvIG5vdCBhbGxv
dyBHUFUgbXV4aW5nIG9uIHNvbWUgb2xkIE1hYyBoYXJkd2FyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MjU5CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMDA2MDM3OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTb21lIG9sZCBNYWNib29rIFBybyBtb2RlbHMgc2hvdWxkIG5ldmVyIHVzZSB0aGUK
KyAgICAgICAgaW50ZWdyYXRlZCBHUFUgZm9yIFdlYkdMLCBiZWNhdXNlIHRoZXkgYXJlIHVuc3Rh
YmxlCisgICAgICAgIHdoZW4gc3dhcHBpbmcgYmV0d2VlbiB0aGF0IGFuZCB0aGUgZGlzY3JldGUg
R1BVLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHkgdGhpcyBoYXJkd2FyZSBjb25maWd1cmF0aW9u
IGlzbid0IGluIG91cgorICAgICAgICB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLCBzbyBpdCB3YXMg
Y29uZmlybWVkIG1hbnVhbGx5LgorICAgICAgICBNZWFud2hpbGUsIG91ciBleGlzdGluZyB0ZXN0
cyBtYWtlIHN1cmUgdGhpcyBwYXRjaAorICAgICAgICBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIGVs
c2V3aGVyZS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOiBBZGQgbmV3IGZpbGUuCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR1BVVXRpbHNNYWMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEFHQ0F0dGFjaCk6IEF0dGFjaCB0byB0aGUgR1BVLgorICAgICAgICAoQUdDT3Blbik6Cisg
ICAgICAgIChBR0NDbG9zZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQVVV0
aWxzTWFjLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omhhc011eGFibGVHUFUpOiBDaGVj
ayB0aGF0IHRoZSBkZXZpY2UgaGFzIG11bHRpcGxlCisgICAgICAgIEdQVXMsIGFuZCBpZiB0aGUg
aW50ZWdyYXRlZCBjYXJkIGlzIGEgcGFydGljdWxhciBtb2RlbC4KKyAgICAgICAgKFdlYkNvcmU6
Omhhc0dQVVRoYXRTaG91bGROb3RNdXgpOgorICAgICAgICAoV2ViQ29yZTo6aGFzTXV4Q2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbEZvcm1hdCk6CisKIDIwMTctMDEtMTgg
IFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIxMDg0OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNGM1
MWUyYWE5MDY2NDU4MmFhNDIyMzY3NDU0NTEzOTkxMjRhMTFmMC4uZTU5MGFlMjJiODgyOTdlMmMz
YTJkNGJmNWUyZDFhOTJhOWFiN2QwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTQz
MSw2ICs0MzEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDYWNoZU1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HUFVVdGlsc01hYy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0MGY5YmZiYWQ2M2M1NGJiNmNhOTI1MDM4
ZTMxZjZhYjBmOWZmN2YwLi42ZjRkZWE3ZGJlNjEzMjA3ZjAwODg5NWUwYTA3NTNhYzE1YTU5OTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMzgwLDYgKzEzODAsOCBAQAogCQkzMUMwRkYzRTBFNENFRkFDMDA3RDZGRTUgLyog
SlNXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzFDMEZGM0EwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0
aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGM0YwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0
VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxQzBGRjNCMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdFRyYW5zaXRpb25F
dmVudC5jcHAgKi87IH07CiAJCTMxQzBGRjQwMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdFRy
YW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzFDMEZGM0MwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50
LmggKi87IH07CisJCTMxQzQ5RjQ4MUUzMUExMTIwMDlGNTEwRiAvKiBHUFVVdGlsc01hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDNDlGNDcxRTMx
QTExMjAwOUY1MTBGIC8qIEdQVVV0aWxzTWFjLmggKi87IH07CisJCTMxQzQ5RjRBMUUzMUE1OEQw
MDlGNTEwRiAvKiBHUFVVdGlsc01hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMUM0OUY0OTFFMzFBNThEMDA5RjUxMEYgLyogR1BVVXRpbHNNYWMu
Y3BwICovOyB9OwogCQkzMUQ1OTFCMzE2Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQ1OTFCMTE2
Njk3QTZDMDBFNkJGMDIgLyogUGx1Z0luQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0QyOUQxQUI0RkJERTAwNzJFODE3IC8qIEFu
aW1hdGlvblRyaWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFEQ0RGNDMx
REExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4
dGVuZGVkQ29sb3IuY3BwICovOyB9OwpAQCAtODUzMCw2ICs4NTMyLDggQEAKIAkJMzFDMEZGM0Ew
RTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRBbmltYXRpb25FdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYzQjBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRU
cmFuc2l0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMUMwRkYzQzBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFDNDlGNDcxRTMxQTExMjAwOUY1MTBG
IC8qIEdQVVV0aWxzTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVV0
aWxzTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxQzQ5RjQ5MUUzMUE1OEQw
MDlGNTEwRiAvKiBHUFVVdGlsc01hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHUFVVdGlsc01hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
RDU5MUIxMTY2OTdBNkMwMEU2QkYwMiAvKiBQbHVnSW5DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGx1Z0luQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxRENEMjlDMUFCNEZCREUwMDcyRTgxNyAvKiBBbmltYXRpb25UcmlnZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblRyaWdnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEQ0RGNDExREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVu
ZGVkQ29sb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5k
ZWRDb2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTYyMyw2ICsyMTYy
Nyw4IEBACiAJCQkJQjJBRkZDNzUwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuY3BwICovLAogCQkJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmggKi8sCiAJCQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBo
UGFnZU1hYy5jcHAgKi8sCisJCQkJMzFDNDlGNDcxRTMxQTExMjAwOUY1MTBGIC8qIEdQVVV0aWxz
TWFjLmggKi8sCisJCQkJMzFDNDlGNDkxRTMxQTU4RDAwOUY1MTBGIC8qIEdQVVV0aWxzTWFjLmNw
cCAqLywKIAkJCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RN
YWMubW0gKi8sCiAJCQkJQjI3N0I0MDMwQjIyRjM3QzAwMDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4
dE1hYy5tbSAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5tbSAq
LywKQEAgLTI1NTgyLDYgKzI1NTg4LDcgQEAKIAkJCQk5M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcg
LyogRXhjZXB0aW9uT3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBF
OEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLywKKwkJCQkzMUM0OUY0
ODFFMzFBMTEyMDA5RjUxMEYgLyogR1BVVXRpbHNNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTZF
NjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBF
eHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDA3NCw2ICszMDA4MSw3
IEBACiAJCQkJQkMwNkVEMDYwQkZENUJBRTAwODU2RTlEIC8qIEpTSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDY0ODlEMjUxNjZGRkNGMTAwN0MwMzFCIC8q
IEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NjM3NjMwQjFF
MjZGREY2MDA4Q0Q0NkQgLyogQ1BVVGltZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzFD
NDlGNEExRTMxQTU4RDAwOUY1MTBGIC8qIEdQVVV0aWxzTWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUQ2Rjc5NjBEMTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdFOUUwQTFBODNFMzAwN0ZCOEM1IC8qIEpT
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4M0UzNTlBMzFCQjEw
MzFEMDAyQ0VCOTggLyogSlNIVE1MVGltZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR1BVVXRpbHNNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQVVV0aWxzTWFjLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNjg4MzdkMzE3MDgzNzc0NGMzNDkzMzIzODMwZTA1NGI1ZGY5NzdjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dQ
VVV0aWxzTWFjLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdQVVV0aWxzTWFjLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KKyNpbmNsdWRl
IDxJT0tpdC9JT01lc3NhZ2UuaD4KKworZW51bSB7CisgICAga0FHQ09wZW4sCisgICAga0FHQ0Ns
b3NlCit9OworCitib29sIEFHQ0F0dGFjaChtYWNoX3BvcnRfdCBtYXN0ZXJQb3J0LCBBR0NDb25u
ZWN0UmVmX3QgYWdjLCBJT05vdGlmaWNhdGlvblBvcnRSZWYgbm90aWZ5UG9ydCwgSU9TZXJ2aWNl
SW50ZXJlc3RDYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqbXlhcmcpCit7CisgICAga2Vybl9yZXR1
cm5fdCBrZXJuUmVzdWx0OworICAgIGlvX3NlcnZpY2VfdCBzZXJ2aWNlT2JqZWN0OworICAgIGlv
X2l0ZXJhdG9yX3QgaXRlcmF0b3I7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGNsYXNzVG9NYXRjaCA9
IElPU2VydmljZU1hdGNoaW5nKCJBcHBsZUdyYXBoaWNzQ29udHJvbCIpOworICAgIGlmICghY2xh
c3NUb01hdGNoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoKGtlcm5SZXN1bHQg
PSBJT1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2VzKG1hc3RlclBvcnQsIGNsYXNzVG9NYXRjaCwg
Jml0ZXJhdG9yKSkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBzZXJ2aWNlT2JqZWN0ID0gSU9JdGVyYXRvck5leHQoaXRlcmF0b3IpOworICAgIElPT2JqZWN0
UmVsZWFzZShpdGVyYXRvcik7CisgICAgaWYgKCFzZXJ2aWNlT2JqZWN0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBJT09iamVjdFJldGFpbihzZXJ2aWNlT2JqZWN0KTsKKyAgICBhZ2Mt
PnNlcnZpY2UgPSBzZXJ2aWNlT2JqZWN0OworCisgICAga2VyblJlc3VsdCA9IElPU2VydmljZU9w
ZW4oc2VydmljZU9iamVjdCwgbWFjaF90YXNrX3NlbGYoKSwgMCwgJmFnYy0+ZGF0YVBvcnQpOwor
ICAgIGlmIChrZXJuUmVzdWx0ID09IEtFUk5fU1VDQ0VTUyAmJiBjYWxsYmFjayAmJiBub3RpZnlQ
b3J0KSB7CisgICAgICAgIGlvX2l0ZXJhdG9yX3QgaWdub3JlZCA9IElPX09CSkVDVF9OVUxMOwor
ICAgICAgICAodm9pZCkgSU9TZXJ2aWNlQWRkSW50ZXJlc3ROb3RpZmljYXRpb24obm90aWZ5UG9y
dCwgc2VydmljZU9iamVjdCwga0lPR2VuZXJhbEludGVyZXN0LCBjYWxsYmFjaywgbXlhcmcsICZp
Z25vcmVkKTsKKyAgICB9CisgICAgSU9PYmplY3RSZWxlYXNlKHNlcnZpY2VPYmplY3QpOworICAg
IHJldHVybiBrZXJuUmVzdWx0ID09IEtFUk5fU1VDQ0VTUzsKK30KKworYm9vbCBBR0NPcGVuKEFH
Q0Nvbm5lY3RSZWZfdCBhZ2MpCit7CisgICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OworCisg
ICAga2VyblJlc3VsdCA9IElPQ29ubmVjdENhbGxTY2FsYXJNZXRob2QoYWdjLT5kYXRhUG9ydCwg
a0FHQ09wZW4sIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIpOworICAgIHJldHVybiBrZXJu
UmVzdWx0ID09IEtFUk5fU1VDQ0VTUzsKK30KKworYm9vbCBBR0NDbG9zZShBR0NDb25uZWN0UmVm
X3QgYWdjKQoreworICAgIGtlcm5fcmV0dXJuX3Qga2VyblJlc3VsdDsKKworICAgIGtlcm5SZXN1
bHQgPSBJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0aG9kKGFnYy0+ZGF0YVBvcnQsIGtBR0NDbG9zZSwg
bnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgcmV0dXJuIGtlcm5SZXN1bHQgPT0g
S0VSTl9TVUNDRVNTOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HUFVVdGlsc01hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dQVVV0aWxzTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVhYTk1NjE2YTRiZjE3
ZjQyZjE4ZjU0YzI1OTlhYjNjNmZhNzEyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HUFVVdGlsc01hYy5oCkBAIC0wLDAgKzEsNDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2luY2x1
ZGUgPElPS2l0L0lPVHlwZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGlvX3NlcnZpY2Vf
dCBzZXJ2aWNlOworICAgIGlvX2Nvbm5lY3RfdCBkYXRhUG9ydDsKK30gQUdDQ29ubmVjdF90Owor
Cit0eXBlZGVmIEFHQ0Nvbm5lY3RfdCAqQUdDQ29ubmVjdFJlZl90OworCitib29sIEFHQ0F0dGFj
aChtYWNoX3BvcnRfdCwgQUdDQ29ubmVjdFJlZl90LCBJT05vdGlmaWNhdGlvblBvcnRSZWYsIElP
U2VydmljZUludGVyZXN0Q2FsbGJhY2ssIHZvaWQgKmFyZyk7Citib29sIEFHQ09wZW4oQUdDQ29u
bmVjdFJlZl90KTsKK2Jvb2wgQUdDQ2xvc2UoQUdDQ29ubmVjdFJlZl90KTsKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW0KaW5kZXggNDBkNzhkYzc1OGExZjYwNDU5MTU4MDVlY2M2ZDYw
Y2U0M2IxOTEwMS4uOTU1NTEwM2QwYzNhMTQ1NDQ5MzBhMzZhMjNjMDk5ZmU3YjBkOTA1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAtNDgsMTIgKzQ4LDE0IEBACiAjaW1wb3J0IDxPcGVu
R0xFUy9FQUdMRHJhd2FibGUuaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgog
I2Vsc2UKKyNpbmNsdWRlICJHUFVVdGlsc01hYy5oIgogI2luY2x1ZGUgPE9wZW5HTC9DR0xSZW5k
ZXJlcnMuaD4KICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbmRpZgogI2luY2x1ZGUgIldlYkdM
TGF5ZXIuaCIKICNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjaW5jbHVkZSA8c3lz
ZXhpdHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTc5LDYgKzgxLDU2
IEBAIHB1YmxpYzoKIH07CiAKICNpZiAhUExBVEZPUk0oSU9TKQorCitBR0NDb25uZWN0X3QgYWdj
X2Nvbm5lY3Q7CitBR0NDb25uZWN0UmVmX3QgYWdjID0gJmFnY19jb25uZWN0OworCitzdGF0aWMg
Ym9vbCBoYXNNdXhhYmxlR1BVKCkKK3sKKyAgICBtYWNoX3BvcnRfdCBtYXN0ZXJQb3J0OworCisg
ICAgaWYgKElPTWFzdGVyUG9ydChNQUNIX1BPUlRfTlVMTCwgJm1hc3RlclBvcnQpICE9IEtFUk5f
U1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFBR0NBdHRhY2gobWFz
dGVyUG9ydCwgYWdjLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSkgeworICAgICAgICBJT1Nl
cnZpY2VDbG9zZShhZ2MtPmRhdGFQb3J0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChBR0NPcGVuKGFnYykpIHsKKyAgICAgICAgQUdD
Q2xvc2UoYWdjKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cmVzdWx0ID0gZmFsc2U7CisKKyAgICBJT1NlcnZpY2VDbG9zZShhZ2MtPmRhdGFQb3J0KTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFRoaXMgaXMgZGV0ZWN0aW5nIE1hYyBoYXJkd2Fy
ZSB3aXRoIGFuIEludGVsIGc1NzUgR1BVLCB3aGljaAorLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtl
IGF2YWlsYWJsZSB0byBtdXhpbmcuCisvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzMwMDYwMzc4Pgor
c3RhdGljIGJvb2wgaGFzR1BVVGhhdFNob3VsZE5vdE11eCgpCit7CisgICAgaW50IG5hbWVzWzJd
ID0geyBDVExfSFcsIEhXX05DUFUgfTsKKyAgICBpbnQgY3B1Q291bnQ7CisgICAgc2l6ZV90IGNw
dUNvdW50TGVuZ3RoID0gc2l6ZW9mKGNwdUNvdW50KTsKKyAgICBzeXNjdGwobmFtZXMsIDIsICZj
cHVDb3VudCwgJmNwdUNvdW50TGVuZ3RoLCBudWxscHRyLCAwKTsKKyAgICByZXR1cm4gY3B1Q291
bnQgPD0gNDsKK30KKworc3RhdGljIGJvb2wgaGFzTXV4Q2FwYWJpbGl0eSgpCit7CisgICAgc3Rh
dGljIGludCBjYW5NdXggPSAtMTsKKyAgICBpZiAoY2FuTXV4ID09IC0xKQorICAgICAgICBjYW5N
dXggPSBoYXNNdXhhYmxlR1BVKCkgJiYgIWhhc0dQVVRoYXRTaG91bGROb3RNdXgoKTsKKworICAg
IEFTU0VSVCghY2FuTXV4IHx8IGNhbk11eCA9PSAxKTsKKyAgICByZXR1cm4gY2FuTXV4OworfQor
CiBzdGF0aWMgdm9pZCBzZXRQaXhlbEZvcm1hdChWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGU+JiBhdHRyaWJzLCBpbnQgY29sb3JCaXRzLCBpbnQgZGVwdGhCaXRzLCBib29sIGFjY2VsZXJh
dGVkLCBib29sIHN1cGVyc2FtcGxlLCBib29sIGNsb3Nlc3QsIGJvb2wgYW50aWFsaWFzLCBib29s
IGFsbG93T2ZmbGluZSwgYm9vbCB1c2VHTEVTMykKIHsKICAgICBhdHRyaWJzLmNsZWFyKCk7CkBA
IC05Miw3ICsxNDQsNyBAQCBzdGF0aWMgdm9pZCBzZXRQaXhlbEZvcm1hdChWZWN0b3I8Q0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGU+JiBhdHRyaWJzLCBpbnQgY29sb3JCaQogICAgIC8vIGFsbG93aW5n
IHVzIHRvIHJlcXVlc3QgdGhlIGludGVncmF0ZWQgZ3JhcGhpY3Mgb24gYSBkdWFsIEdQVQogICAg
IC8vIHN5c3RlbSwgYW5kIG5vdCBmb3JjZSB0aGUgZGlzY3JldGUgR1BVLgogICAgIC8vIFNlZSBo
dHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvdGVjaG5vdGVzL3RuMjIyOS9f
aW5kZXguaHRtbAotICAgIGlmIChhbGxvd09mZmxpbmUpCisgICAgaWYgKGFsbG93T2ZmbGluZSAm
JiBoYXNNdXhDYXBhYmlsaXR5KCkpCiAgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFBbGxv
d09mZmxpbmVSZW5kZXJlcnMpOwogCiAgICAgaWYgKGFjY2VsZXJhdGVkKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299410</attachid>
            <date>2017-01-20 17:30:39 -0800</date>
            <delta_ts>2017-01-20 17:34:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167259-20170121122844.patch</filename>
            <type>text/plain</type>
            <size>5619</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwOTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FkYTk1MTk2OGRjNzk0
YzBmYzU3ZWViOGQ5OGNmNzI5NjEyZDgxNi4uNmEyNGMzNDk1MTZhN2IxZDQ5OTVmNjQyN2M3NTEx
YTA5YzRiM2NlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE3LTAxLTIwICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR0xdIERvIG5vdCBhbGxv
dyBHUFUgbXV4aW5nIG9uIHNvbWUgb2xkIE1hYyBoYXJkd2FyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MjU5CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMDA2MDM3OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTb21lIG9sZCBNYWNib29rIFBybyBtb2RlbHMgc2hvdWxkIG5ldmVyIHVzZSB0aGUK
KyAgICAgICAgaW50ZWdyYXRlZCBHUFUgZm9yIFdlYkdMLCBiZWNhdXNlIHRoZXkgYXJlIHVuc3Rh
YmxlCisgICAgICAgIHdoZW4gc3dhcHBpbmcgYmV0d2VlbiB0aGF0IGFuZCB0aGUgZGlzY3JldGUg
R1BVLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHkgdGhpcyBoYXJkd2FyZSBjb25maWd1cmF0aW9u
IGlzbid0IGluIG91cgorICAgICAgICB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLCBzbyBpdCB3YXMg
Y29uZmlybWVkIG1hbnVhbGx5LgorICAgICAgICBNZWFud2hpbGUsIG91ciBleGlzdGluZyB0ZXN0
cyBtYWtlIHN1cmUgdGhpcyBwYXRjaAorICAgICAgICBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIGVs
c2V3aGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaFRvQXBwbGVHcmFwaGljc0NvbnRy
b2wpOiBIZWxwZXIgZnVuY3Rpb24KKyAgICAgICAgdG8gZ2V0IGEgbWFjaCBwb3J0IHRoYXQgdGFs
a3MgdG8gQXBwbGUncyBHcmFwaGljcyBDb250cm9sCisgICAgICAgIHN5c3RlbS4KKyAgICAgICAg
KFdlYkNvcmU6Omhhc011eENhcGFiaWxpdHkpOiBEZWNpZGVzIHdoZXRoZXIgYSBzeXN0ZW0KKyAg
ICAgICAgY2FuIGRvIGxpdmUgR1BVIHN3aXRjaGluZywgYmFzZWQgb24gd2hldGhlciBvciBub3Qg
aXQKKyAgICAgICAgaGFzIGEgbXV4YWJsZSBHUFUsIGFuZCBpZiB0aGF0IEdQVSBpcyBub3QgdGhl
IG9sZCBoYXJkd2FyZQorICAgICAgICB3ZSBrbm93IGlzIHByb2JsZW1hdGljLgorICAgICAgICAo
V2ViQ29yZTo6aGFzTXV4YWJsZUdQVSk6IEhlbHBlciB0byByZXR1cm4gdGhlIHN0YXRpYyBoYXNN
dXhDYXBhYmlsaXR5IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxGb3JtYXQpOiBP
bmx5IHJlcXVlc3QgdGhlIGludGVncmF0ZWQgY2FyZCB3aGVuIHRoZQorICAgICAgICBHUFUgaXMg
bXV4YWJsZS4KKwogMjAxNy0wMS0xOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjEwODQ4LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCmluZGV4IDQwZDc4ZGM3NThhMWY2MDQ1OTE1ODA1ZWNjNmQ2MGNlNDNiMTkx
MDEuLmMxOGZlOTlmYzc3YmYyZTk5YjFjYWZkM2ViZGY4YzlkYWJkMjIyMDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMubW0KQEAgLTQxLDYgKzQxLDEzIEBACiAjaW5jbHVkZSAiSFRNTENhbnZhc0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJXZWJHTExheWVyLmgiCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKKyNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5o
PgorI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CiAjaWYgUExBVEZPUk0oSU9TKQogI2ltcG9ydCAiT3BlbkdMRVNTUEkuaCIKICNpbXBvcnQgPE9w
ZW5HTEVTL0VTMi9nbGV4dC5oPgpAQCAtNDgsMTQgKzU1LDEwIEBACiAjaW1wb3J0IDxPcGVuR0xF
Uy9FQUdMRHJhd2FibGUuaD4KICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2Vs
c2UKKyNpbmNsdWRlIDxJT0tpdC9JT0tpdExpYi5oPgogI2luY2x1ZGUgPE9wZW5HTC9DR0xSZW5k
ZXJlcnMuaD4KICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbmRpZgotI2luY2x1ZGUgIldlYkdM
TGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaCIKLSNpbmNsdWRlIDxzeXNleGl0cy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OCw3ICs4MSw4MCBA
QCBwdWJsaWM6CiAgICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpIHsgfQogfTsKIAotI2lm
ICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQorCitlbnVtIHsKKyAgICBrQUdDT3Bl
biwKKyAgICBrQUdDQ2xvc2UKK307CisKK3N0YXRpYyBpb19jb25uZWN0X3QgYXR0YWNoVG9BcHBs
ZUdyYXBoaWNzQ29udHJvbChtYWNoX3BvcnRfdCBtYXN0ZXJQb3J0KQoreworICAgIENGRGljdGlv
bmFyeVJlZiBjbGFzc1RvTWF0Y2ggPSBJT1NlcnZpY2VNYXRjaGluZygiQXBwbGVHcmFwaGljc0Nv
bnRyb2wiKTsKKyAgICBpZiAoIWNsYXNzVG9NYXRjaCkKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9S
VF9OVUxMOworCisgICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OworICAgIGlvX2l0ZXJhdG9y
X3QgaXRlcmF0b3I7CisgICAgaWYgKChrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlR2V0TWF0Y2hpbmdT
ZXJ2aWNlcyhtYXN0ZXJQb3J0LCBjbGFzc1RvTWF0Y2gsICZpdGVyYXRvcikpICE9IEtFUk5fU1VD
Q0VTUykKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOworCisgICAgaW9fc2VydmljZV90
IHNlcnZpY2VPYmplY3QgPSBJT0l0ZXJhdG9yTmV4dChpdGVyYXRvcik7CisgICAgSU9PYmplY3RS
ZWxlYXNlKGl0ZXJhdG9yKTsKKyAgICBpZiAoIXNlcnZpY2VPYmplY3QpCisgICAgICAgIHJldHVy
biBNQUNIX1BPUlRfTlVMTDsKKworICAgIGlvX2Nvbm5lY3RfdCBkYXRhUG9ydDsKKyAgICBJT09i
amVjdFJldGFpbihzZXJ2aWNlT2JqZWN0KTsKKyAgICBrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlT3Bl
bihzZXJ2aWNlT2JqZWN0LCBtYWNoX3Rhc2tfc2VsZigpLCAwLCAmZGF0YVBvcnQpOworICAgIElP
T2JqZWN0UmVsZWFzZShzZXJ2aWNlT2JqZWN0KTsKKworICAgIHJldHVybiAoa2VyblJlc3VsdCA9
PSBLRVJOX1NVQ0NFU1MpID8gZGF0YVBvcnQgOiBNQUNIX1BPUlRfTlVMTDsKK30KKworc3RhdGlj
IGJvb2wgaGFzTXV4Q2FwYWJpbGl0eSgpCit7CisgICAgbWFjaF9wb3J0X3QgbWFzdGVyUG9ydDsK
KworICAgIGlmIChJT01hc3RlclBvcnQoTUFDSF9QT1JUX05VTEwsICZtYXN0ZXJQb3J0KSAhPSBL
RVJOX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlvX2Nvbm5lY3RfdCBk
YXRhUG9ydCA9IGF0dGFjaFRvQXBwbGVHcmFwaGljc0NvbnRyb2wobWFzdGVyUG9ydCk7CisKKyAg
ICBpZiAoZGF0YVBvcnQgPT0gTUFDSF9QT1JUX05VTEwpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0aG9kKGRh
dGFQb3J0LCBrQUdDT3BlbiwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cikgPT0gS0VSTl9T
VUNDRVNTKSB7CisgICAgICAgIElPQ29ubmVjdENhbGxTY2FsYXJNZXRob2QoZGF0YVBvcnQsIGtB
R0NDbG9zZSwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworCisgICAgSU9TZXJ2
aWNlQ2xvc2UoZGF0YVBvcnQpOworCisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAvLyBUaGlz
IGlzIGRldGVjdGluZyBNYWMgaGFyZHdhcmUgd2l0aCBhbiBJbnRlbCBnNTc1IEdQVSwgd2hpY2gK
KyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byBtdXhpbmcuCisg
ICAgICAgIC8vIEJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gQXBwbGUncyBPcGVuR0wgdGVhbSwg
c3VjaCBkZXZpY2VzCisgICAgICAgIC8vIGhhdmUgZm91ciBvciBmZXdlciBwcm9jZXNzb3JzLgor
ICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzAwNjAzNzg+CisgICAgICAgIGludCBuYW1lc1sy
XSA9IHsgQ1RMX0hXLCBIV19OQ1BVIH07CisgICAgICAgIGludCBjcHVDb3VudDsKKyAgICAgICAg
c2l6ZV90IGNwdUNvdW50TGVuZ3RoID0gc2l6ZW9mKGNwdUNvdW50KTsKKyAgICAgICAgc3lzY3Rs
KG5hbWVzLCAyLCAmY3B1Q291bnQsICZjcHVDb3VudExlbmd0aCwgbnVsbHB0ciwgMCk7CisgICAg
ICAgIHJlc3VsdCA9IGNwdUNvdW50ID4gNDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgYm9vbCBoYXNNdXhhYmxlR1BVKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjYW5N
dXggPSBoYXNNdXhDYXBhYmlsaXR5KCk7CisgICAgcmV0dXJuIGNhbk11eDsKK30KKwogc3RhdGlj
IHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiYgYXR0
cmlicywgaW50IGNvbG9yQml0cywgaW50IGRlcHRoQml0cywgYm9vbCBhY2NlbGVyYXRlZCwgYm9v
bCBzdXBlcnNhbXBsZSwgYm9vbCBjbG9zZXN0LCBib29sIGFudGlhbGlhcywgYm9vbCBhbGxvd09m
ZmxpbmUsIGJvb2wgdXNlR0xFUzMpCiB7CiAgICAgYXR0cmlicy5jbGVhcigpOwpAQCAtOTIsNyAr
MTY4LDcgQEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlPiYgYXR0cmlicywgaW50IGNvbG9yQmkKICAgICAvLyBhbGxvd2luZyB1cyB0byBy
ZXF1ZXN0IHRoZSBpbnRlZ3JhdGVkIGdyYXBoaWNzIG9uIGEgZHVhbCBHUFUKICAgICAvLyBzeXN0
ZW0sIGFuZCBub3QgZm9yY2UgdGhlIGRpc2NyZXRlIEdQVS4KICAgICAvLyBTZWUgaHR0cHM6Ly9k
ZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL3RlY2hub3Rlcy90bjIyMjkvX2luZGV4Lmh0
bWwKLSAgICBpZiAoYWxsb3dPZmZsaW5lKQorICAgIGlmIChhbGxvd09mZmxpbmUgJiYgaGFzTXV4
YWJsZUdQVSgpKQogICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQWxsb3dPZmZsaW5lUmVu
ZGVyZXJzKTsKIAogICAgIGlmIChhY2NlbGVyYXRlZCkK
</data>
<flag name="review"
          id="321358"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>