<?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>134386</bug_id>
          
          <creation_ts>2014-06-26 22:41:22 -0700</creation_ts>
          <short_desc>Fire connected/disconnected events for Gamepads</short_desc>
          <delta_ts>2014-07-10 14:48:36 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>134669</dependson>
    
    <dependson>134670</dependson>
          <blocked>134076</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>syoichi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1018883</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-06-26 22:41:22 -0700</bug_when>
    <thetext>Fire connected/disconnected events for Gamepads

GamepadManager is already a great chokepoint for this.

We&apos;ll likely DOMWindow register itself for the events whenever the appropriate event listeners are added/removed from the window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020715</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-06 17:15:47 -0700</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=134670 to move the integer index into PlatformGamepad

Filed https://bugs.webkit.org/show_bug.cgi?id=134669 to have DOMWindows register themselves with the GamepadManager whenever they are actually interested in gamepad events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020730</commentid>
    <comment_count>2</comment_count>
      <attachid>234472</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-06 17:37:44 -0700</bug_when>
    <thetext>Created attachment 234472
Patch v1

This patch relies on the ones in 134699 and 134670, so it probably won&apos;t apply on the bots.  I&apos;m just attaching it for posterity (for now)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021362</commentid>
    <comment_count>3</comment_count>
      <attachid>234638</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-09 07:33:39 -0700</bug_when>
    <thetext>Created attachment 234638
Patch v1a - Rebased, ready to EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021445</commentid>
    <comment_count>4</comment_count>
      <attachid>234638</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-07-09 14:36:28 -0700</bug_when>
    <thetext>Comment on attachment 234638
Patch v1a - Rebased, ready to EWS

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

&gt; Source/WebCore/ChangeLog:20
&gt; +        * Modules/gamepad/GamepadManager.cpp:
&gt; +        (WebCore::navigatorGamepadFromDOMWindow): Handling converting a possibly-null Navigator into
&gt; +          a possibly null NavigatorGamepad.
&gt; +        (WebCore::GamepadManager::platformGamepadConnected): Notify blind Navigator/DOMWindows of all
&gt; +          previously attached Gamepads, then notify everybody of this new gamepad.
&gt; +        (WebCore::GamepadManager::platformGamepadDisconnected): Handle dispatching the disconnected
&gt; +          event to all registered DOMWindows.
&gt; +        (WebCore::GamepadManager::platformGamepadInputActivity): Notify blind Navigator/DOMWindows of all
&gt; +          attached Gamepads.
&gt; +        (WebCore::GamepadManager::makeGamepadVisible): Handles notifying setting up a new gamepads
&gt; +          with all NavigatorGamepads as well as dispatching the connected even to DOMWindows.

Nit on your indentation there.

&gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:74
&gt; +    // Notify everyone of this new gamepad

Nit: missing .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021490</commentid>
    <comment_count>5</comment_count>
      <attachid>234672</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-09 17:21:01 -0700</bug_when>
    <thetext>Created attachment 234672
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021572</commentid>
    <comment_count>6</comment_count>
      <attachid>234672</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-09 23:09:22 -0700</bug_when>
    <thetext>Comment on attachment 234672
Patch v2

Clearing flags on attachment: 234672

Committed r170957: &lt;http://trac.webkit.org/changeset/170957&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021573</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-09 23:09:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021631</commentid>
    <comment_count>8</comment_count>
      <attachid>234672</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-07-10 09:27:53 -0700</bug_when>
    <thetext>Comment on attachment 234672
Patch v2

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

&gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:65
&gt; +        if (!gamepad || gamepad == &amp;platformGamepad)

When will gamepad be null here?

&gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:81
&gt; +    Vector&lt;DOMWindow*&gt; domWindowVector;
&gt; +    copyToVector(m_domWindows, domWindowVector);

It seems like this would be much more clear if we used WeakPtrs here.  There lifetimes are really hard to follow.

&gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:94
&gt; +        NavigatorGamepad* navigator = navigatorGamepadFromDOMWindow(window);
&gt; +        if (!navigator)
&gt; +            continue;
&gt; +

I think you should have a comment explaining when the navigator can be null, and what the consequences are.

&gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:99
&gt; +        RefPtr&lt;Gamepad&gt; gamepad = navigator-&gt;gamepadAtIndex(platformGamepad.index());

This should pass the platformGamepad itself, in which case, it could return a Ref&lt;Gamepad&gt;

&gt; Source/WebCore/Modules/gamepad/NavigatorGamepad.cpp:75
&gt; +Gamepad* NavigatorGamepad::gamepadAtIndex(unsigned index)

Can this take a PlatformGamepad&amp; instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021708</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-10 14:48:36 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 234672 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234672&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:65
&gt; &gt; +        if (!gamepad || gamepad == &amp;platformGamepad)
&gt; 
&gt; When will gamepad be null here?

Gamepads have the unfortunate characteristic of existing in a sparse array.

The scenario being the user connects a gamepad which becomes index 0, then the user connects a gamepad which becomes index 1, then the user disconnected that first gamepad.

Now the array is of size 2 and contains { nullptr, gamepad(1) }

&gt; 
&gt; &gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:81
&gt; &gt; +    Vector&lt;DOMWindow*&gt; domWindowVector;
&gt; &gt; +    copyToVector(m_domWindows, domWindowVector);
&gt; 
&gt; It seems like this would be much more clear if we used WeakPtrs here.  There lifetimes are really hard to follow.

I think this is a great idea - Until we looked at this this morning I wasn&apos;t aware that we&apos;d finally gotten an established WeakPtr pattern in WebCore.

&gt; &gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:94
&gt; &gt; +        NavigatorGamepad* navigator = navigatorGamepadFromDOMWindow(window);
&gt; &gt; +        if (!navigator)
&gt; &gt; +            continue;
&gt; &gt; +
&gt; 
&gt; I think you should have a comment explaining when the navigator can be null, and what the consequences are.

Sure.

&gt; &gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:99
&gt; &gt; +        RefPtr&lt;Gamepad&gt; gamepad = navigator-&gt;gamepadAtIndex(platformGamepad.index());
&gt; 
&gt; This should pass the platformGamepad itself, in which case, it could return a Ref&lt;Gamepad&gt;
&gt; 
&gt; &gt; Source/WebCore/Modules/gamepad/NavigatorGamepad.cpp:75
&gt; &gt; +Gamepad* NavigatorGamepad::gamepadAtIndex(unsigned index)
&gt; 
&gt; Can this take a PlatformGamepad&amp; instead?

These seem like fine ideas.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234472</attachid>
            <date>2014-07-06 17:37:44 -0700</date>
            <delta_ts>2014-07-09 07:33:39 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10723</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYmQ2ODYyLi4yNGZkZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzQg
QEAKIDIwMTQtMDctMDYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEZpcmUgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCBldmVudHMgZm9yIEdhbWVwYWRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Mzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChObyBlZmZlY3QgaW4gYSBjdXJyZW50bHkgdGVzdGVkIGNvbmZpZykKKworICAgICAgICAqIE1v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXZp
Z2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyk6IEhhbmRsaW5nIGNvbnZlcnRpbmcgYSBwb3NzaWJs
eS1udWxsIE5hdmlnYXRvciBpbnRvCisgICAgICAgICAgYSBwb3NzaWJseSBudWxsIE5hdmlnYXRv
ckdhbWVwYWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1l
cGFkQ29ubmVjdGVkKTogTm90aWZ5IGJsaW5kIE5hdmlnYXRvci9ET01XaW5kb3dzIG9mIGFsbAor
ICAgICAgICAgIHByZXZpb3VzbHkgYXR0YWNoZWQgR2FtZXBhZHMsIHRoZW4gbm90aWZ5IGV2ZXJ5
Ym9keSBvZiB0aGlzIG5ldyBnYW1lcGFkLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6OnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCk6IEhhbmRsZSBkaXNwYXRjaGluZyB0aGUg
ZGlzY29ubmVjdGVkCisgICAgICAgICAgZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgRE9NV2luZG93
cy4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWRJbnB1
dEFjdGl2aXR5KTogTm90aWZ5IGJsaW5kIE5hdmlnYXRvci9ET01XaW5kb3dzIG9mIGFsbAorICAg
ICAgICAgIGF0dGFjaGVkIEdhbWVwYWRzLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6IEhhbmRsZXMgbm90aWZ5aW5nIHNldHRpbmcgdXAgYSBu
ZXcgZ2FtZXBhZHMKKyAgICAgICAgICB3aXRoIGFsbCBOYXZpZ2F0b3JHYW1lcGFkcyBhcyB3ZWxs
IGFzIGRpc3BhdGNoaW5nIHRoZSBjb25uZWN0ZWQgZXZlbiB0byBET01XaW5kb3dzLgorICAgICAg
ICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6OnJlZ2lzdGVyRE9NV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjp1bnJlZ2lzdGVyRE9NV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZHNWaXNpYmlsZVRvQmxpbmROYXZp
Z2F0b3JzKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFn
ZXIuaDoKKworICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRBdEluZGV4KToKKyAg
ICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oOgorCisyMDE0LTA3LTA2
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwogICAgICAgICBET01XaW5kb3dz
IHNob3VsZCByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggdGhlIEdhbWVwYWRNYW5hZ2VyIHdoZW4g
dGhleSBoYXZlIGV2ZW50IGxpc3RlbmVycwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjY5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCmluZGV4IDI2NTMxMjQuLjRmMTU3YjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcApA
QCAtMjcsNyArMjcsMTAgQEAKIAogI2lmIEVOQUJMRShHQU1FUEFEKQogCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJHYW1lcGFkLmgiCisj
aW5jbHVkZSAiR2FtZXBhZEV2ZW50LmgiCiAjaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvckdhbWVwYWQuaCIKQEAgLTM1
LDYgKzM4LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIE5hdmlnYXRvckdh
bWVwYWQqIG5hdmlnYXRvckdhbWVwYWRGcm9tRE9NV2luZG93KERPTVdpbmRvdyogd2luZG93KQor
eworICAgIE5hdmlnYXRvciogbmF2aWdhdG9yID0gd2luZG93LT5uYXZpZ2F0b3IoKTsKKyAgICBp
ZiAoIW5hdmlnYXRvcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTmF2
aWdhdG9yR2FtZXBhZDo6ZnJvbShuYXZpZ2F0b3IpOworfQorCiBHYW1lcGFkTWFuYWdlciYgR2Ft
ZXBhZE1hbmFnZXI6OnNoYXJlZCgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVw
YWRNYW5hZ2VyPiBzaGFyZWRNYW5hZ2VyOwpAQCAtNDgsNDUgKzYwLDk1IEBAIEdhbWVwYWRNYW5h
Z2VyOjpHYW1lcGFkTWFuYWdlcigpCiAKIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2Ft
ZXBhZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKIHsKLSAgICBm
b3IgKGF1dG8mIG5hdmlnYXRvciA6IG1fbmF2aWdhdG9ycykgewotICAgICAgICBpZiAoIW1fZ2Ft
ZXBhZEJsaW5kTmF2aWdhdG9ycy5jb250YWlucyhuYXZpZ2F0b3IpKQotICAgICAgICAgICAgbmF2
aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKHBsYXRmb3JtR2FtZXBhZCk7CisgICAgLy8gTm90aWZ5
IGJsaW5kIE5hdmlnYXRvcnMgYW5kIFdpbmRvd3MgYWJvdXQgYWxsIGdhbWVwYWRzIGV4Y2VwdCBm
b3IgdGhpcyBvbmUuCisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpz
aGFyZWQoKS5wbGF0Zm9ybUdhbWVwYWRzKCkpIHsKKyAgICAgICAgaWYgKCFnYW1lcGFkIHx8IGdh
bWVwYWQgPT0gJnBsYXRmb3JtR2FtZXBhZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIC8vIEZJWE1FOiBGaXJlIGNvbm5lY3RlZCBldmVudCB0byBhbGwgcGFnZXMgd2l0aCBsaXN0
ZW5lcnMuCisgICAgICAgIG1ha2VHYW1lcGFkVmlzaWJsZSgqZ2FtZXBhZCwgbV9nYW1lcGFkQmxp
bmROYXZpZ2F0b3JzLCBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3MpOwogICAgIH0KIAotICAgIG1h
a2VHYW1lcGFkc1Zpc2liaWxlVG9CbGluZE5hdmlnYXRvcnMoKTsKKyAgICBtX2dhbWVwYWRCbGlu
ZE5hdmlnYXRvcnMuY2xlYXIoKTsKKyAgICBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3MuY2xlYXIo
KTsKKworICAgIC8vIE5vdGlmeSBldmVyeW9uZSBvZiB0aGlzIG5ldyBnYW1lcGFkCisgICAgbWFr
ZUdhbWVwYWRWaXNpYmxlKHBsYXRmb3JtR2FtZXBhZCwgbV9uYXZpZ2F0b3JzLCBtX2RvbVdpbmRv
d3MpOwogfQogCiB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0
ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiB7Ci0gICAgZm9yIChhdXRvJiBu
YXZpZ2F0b3IgOiBtX25hdmlnYXRvcnMpIHsKLSAgICAgICAgaWYgKCFtX2dhbWVwYWRCbGluZE5h
dmlnYXRvcnMuY29udGFpbnMobmF2aWdhdG9yKSkKLSAgICAgICAgICAgIG5hdmlnYXRvci0+Z2Ft
ZXBhZERpc2Nvbm5lY3RlZChwbGF0Zm9ybUdhbWVwYWQpOworICAgIFZlY3RvcjxET01XaW5kb3cq
PiBkb21XaW5kb3dWZWN0b3I7CisgICAgY29weVRvVmVjdG9yKG1fZG9tV2luZG93cywgZG9tV2lu
ZG93VmVjdG9yKTsKKworICAgIEhhc2hTZXQ8TmF2aWdhdG9yR2FtZXBhZCo+IG5vdGlmaWVkTmF2
aWdhdG9yczsKIAotICAgICAgICAvLyBGSVhNRTogRmlyZSBkaXNjb25uZWN0ZWQgZXZlbnQgdG8g
YWxsIHBhZ2VzIHdpdGggbGlzdGVuZXJzLgorICAgIC8vIEhhbmRsZSB0aGUgZGlzY29ubmVjdCBm
b3IgYWxsIERPTVdpbmRvd3Mgd2l0aCBldmVudCBsaXN0ZW5lcnMgYW5kIHRoZWlyIE5hdmlnYXRv
cnMuCisgICAgZm9yIChhdXRvKiB3aW5kb3cgOiBkb21XaW5kb3dWZWN0b3IpIHsKKyAgICAgICAg
Ly8gRXZlbnQgZGlzcGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMgd2luZG93IGdvIGF3YXkuCisg
ICAgICAgIGlmICghbV9kb21XaW5kb3dzLmNvbnRhaW5zKHdpbmRvdykpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBOYXZpZ2F0b3JHYW1lcGFkKiBuYXZpZ2F0b3IgPSBuYXZpZ2F0
b3JHYW1lcGFkRnJvbURPTVdpbmRvdyh3aW5kb3cpOworICAgICAgICBpZiAoIW5hdmlnYXRvcikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIElmIHRoaXMgTmF2aWdhdG9yIGhh
c24ndCBzZWVuIGdhbWVwYWRzIHlldCB0aGVuIGl0cyBXaW5kb3cgc2hvdWxkIG5vdCBnZXQgdGhl
IGRpc2Nvbm5lY3QgZXZlbnQuCisgICAgICAgIGlmIChtX2dhbWVwYWRCbGluZE5hdmlnYXRvcnMu
Y29udGFpbnMobmF2aWdhdG9yKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJl
ZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gbmF2aWdhdG9yLT5nYW1lcGFkQXRJbmRleChwbGF0Zm9y
bUdhbWVwYWQuaW5kZXgoKSk7CisgICAgICAgIEFTU0VSVChnYW1lcGFkKTsKKworICAgICAgICBu
YXZpZ2F0b3ItPmdhbWVwYWREaXNjb25uZWN0ZWQocGxhdGZvcm1HYW1lcGFkKTsKKyAgICAgICAg
bm90aWZpZWROYXZpZ2F0b3JzLmFkZChuYXZpZ2F0b3IpOworCisgICAgICAgIHdpbmRvdy0+ZGlz
cGF0Y2hFdmVudChHYW1lcGFkRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZ2FtZXBhZGRpc2Nv
bm5lY3RlZEV2ZW50LCBnYW1lcGFkLmdldCgpKSwgd2luZG93LT5kb2N1bWVudCgpKTsKKyAgICB9
CisKKyAgICAvLyBOb3RpZnkgYWxsIHRoZSBOYXZpZ2F0b3JzIHRoYXQgaGF2ZW4ndCBhbHJlYWR5
IGJlZW4gbm90aWZpZWQuCisgICAgZm9yIChhdXRvKiBuYXZpZ2F0b3IgOiBtX25hdmlnYXRvcnMp
IHsKKyAgICAgICAgaWYgKCFub3RpZmllZE5hdmlnYXRvcnMuY29udGFpbnMobmF2aWdhdG9yKSkK
KyAgICAgICAgICAgIG5hdmlnYXRvci0+Z2FtZXBhZERpc2Nvbm5lY3RlZChwbGF0Zm9ybUdhbWVw
YWQpOwogICAgIH0KIH0KIAogdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkSW5w
dXRBY3Rpdml0eSgpCiB7Ci0gICAgbWFrZUdhbWVwYWRzVmlzaWJpbGVUb0JsaW5kTmF2aWdhdG9y
cygpOworICAgIGlmIChtX2dhbWVwYWRCbGluZE5hdmlnYXRvcnMuaXNFbXB0eSgpICYmIG1fZ2Ft
ZXBhZEJsaW5kRE9NV2luZG93cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoYXV0byogZ2FtZXBhZCA6IEdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkucGxhdGZvcm1HYW1l
cGFkcygpKQorICAgICAgICBtYWtlR2FtZXBhZFZpc2libGUoKmdhbWVwYWQsIG1fZ2FtZXBhZEJs
aW5kTmF2aWdhdG9ycywgbV9nYW1lcGFkQmxpbmRET01XaW5kb3dzKTsKKworICAgIG1fZ2FtZXBh
ZEJsaW5kTmF2aWdhdG9ycy5jbGVhcigpOworICAgIG1fZ2FtZXBhZEJsaW5kRE9NV2luZG93cy5j
bGVhcigpOwogfQogCi12b2lkIEdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZHNWaXNpYmlsZVRv
QmxpbmROYXZpZ2F0b3JzKCkKK3ZvaWQgR2FtZXBhZE1hbmFnZXI6Om1ha2VHYW1lcGFkVmlzaWJs
ZShQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwgSGFzaFNldDxOYXZpZ2F0b3JHYW1l
cGFkKj4mIG5hdmlnYXRvclNldCwgSGFzaFNldDxET01XaW5kb3cqPiYgZG9tV2luZG93U2V0KQog
ewotICAgIGZvciAoYXV0byYgbmF2aWdhdG9yIDogbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBIZXJlIHdlIG5vdGlmeSBhIGJsaW5kIE5hdmlnYXRvciBvZiBl
YWNoIGV4aXN0aW5nIGdhbWVwYWQuCi0gICAgICAgIC8vIEJ1dCB3ZSBhbHNvIG5lZWQgdG8gZmly
ZSB0aGUgY29ubmVjdGVkIGV2ZW50IHRvIGl0cyBjb3JyZXNwb25kaW5nIERPTVdpbmRvdyBvYmpl
Y3RzLgotICAgICAgICBhdXRvJiBwbGF0Zm9ybUdhbWVwYWRzID0gR2FtZXBhZFByb3ZpZGVyOjpz
aGFyZWQoKS5wbGF0Zm9ybUdhbWVwYWRzKCk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBwbGF0
Zm9ybUdhbWVwYWRzLnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICAgICAgaWYgKHBsYXRmb3JtR2FtZXBhZHNbaV0pCi0gICAgICAg
ICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKCpwbGF0Zm9ybUdhbWVwYWRzW2ld
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAobmF2aWdhdG9yU2V0LmlzRW1wdHkoKSAmJiBk
b21XaW5kb3dTZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBtX2dhbWVwYWRC
bGluZE5hdmlnYXRvcnMuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8qIG5hdmlnYXRvciA6IG5hdmln
YXRvclNldCkKKyAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKHBsYXRmb3JtR2Ft
ZXBhZCk7CisKKyAgICBWZWN0b3I8RE9NV2luZG93Kj4gZG9tV2luZG93VmVjdG9yOworICAgIGNv
cHlUb1ZlY3Rvcihkb21XaW5kb3dTZXQsIGRvbVdpbmRvd1ZlY3Rvcik7CisKKyAgICBmb3IgKGF1
dG8qIHdpbmRvdyA6IGRvbVdpbmRvd1ZlY3RvcikgeworICAgICAgICAvLyBFdmVudCBkaXNwYXRj
aCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdheS4KKyAgICAgICAgaWYgKCFtX2Rv
bVdpbmRvd3MuY29udGFpbnMod2luZG93KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIE5hdmlnYXRvckdhbWVwYWQqIG5hdmlnYXRvciA9IG5hdmlnYXRvckdhbWVwYWRGcm9tRE9N
V2luZG93KHdpbmRvdyk7CisgICAgICAgIGlmICghbmF2aWdhdG9yKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQgPSBuYXZpZ2F0b3ItPmdh
bWVwYWRBdEluZGV4KHBsYXRmb3JtR2FtZXBhZC5pbmRleCgpKTsKKyAgICAgICAgQVNTRVJUKGdh
bWVwYWQpOworCisgICAgICAgIHdpbmRvdy0+ZGlzcGF0Y2hFdmVudChHYW1lcGFkRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZ2FtZXBhZGNvbm5lY3RlZEV2ZW50LCBnYW1lcGFkLmdldCgpKSwg
d2luZG93LT5kb2N1bWVudCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnJl
Z2lzdGVyTmF2aWdhdG9yKE5hdmlnYXRvckdhbWVwYWQqIG5hdmlnYXRvcikKQEAgLTExOCw2ICsx
ODAsMTggQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6cmVnaXN0ZXJET01XaW5kb3coRE9NV2luZG93
KiB3aW5kb3cpCiAgICAgQVNTRVJUKCFtX2RvbVdpbmRvd3MuY29udGFpbnMod2luZG93KSk7CiAg
ICAgbV9kb21XaW5kb3dzLmFkZCh3aW5kb3cpOwogCisgICAgLy8gQW55dGltZSB3ZSByZWdpc3Rl
ciBhIERPTVdpbmRvdywgd2Ugc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoYXQgaXRzIE5hdmln
YXRvckdhbWVwYWQgaXMgcmVnaXN0ZXJlZC4KKyAgICBOYXZpZ2F0b3JHYW1lcGFkKiBuYXZpZ2F0
b3IgPSBuYXZpZ2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyh3aW5kb3cpOworICAgIEFTU0VSVChu
YXZpZ2F0b3IpOworCisgICAgaWYgKG1fbmF2aWdhdG9ycy5hZGQobmF2aWdhdG9yKS5pc05ld0Vu
dHJ5KQorICAgICAgICBtX2dhbWVwYWRCbGluZE5hdmlnYXRvcnMuYWRkKG5hdmlnYXRvcik7CisK
KyAgICAvLyBJZiB0aGlzIERPTVdpbmRvdydzIE5hdmlnYXRvckdhbWVwYWQgd2FzIGFscmVhZHkg
cmVnaXN0ZXJlZCBidXQgd2FzIHN0aWxsIGJsaW5kLAorICAgIC8vIHRoZW4gdGhpcyBET01XaW5k
b3cgc2hvdWxkIGJlIGJsaW5kLgorICAgIGlmIChtX2dhbWVwYWRCbGluZE5hdmlnYXRvcnMuY29u
dGFpbnMobmF2aWdhdG9yKSkKKyAgICAgICAgbV9nYW1lcGFkQmxpbmRET01XaW5kb3dzLmFkZCh3
aW5kb3cpOworCiAgICAgbWF5YmVTdGFydE1vbml0b3JpbmdHYW1lcGFkcygpOwogfQogCkBAIC0x
MjcsNiArMjAxLDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6dW5yZWdpc3RlckRPTVdpbmRvdyhE
T01XaW5kb3cqIHdpbmRvdykKIAogICAgIEFTU0VSVChtX2RvbVdpbmRvd3MuY29udGFpbnMod2lu
ZG93KSk7CiAgICAgbV9kb21XaW5kb3dzLnJlbW92ZSh3aW5kb3cpOworICAgIG1fZ2FtZXBhZEJs
aW5kRE9NV2luZG93cy5yZW1vdmUod2luZG93KTsKIAogICAgIG1heWJlU3RvcE1vbml0b3JpbmdH
YW1lcGFkcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBh
ZE1hbmFnZXIuaAppbmRleCA1MzUzNTIwLi4xMDQ2MGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcgKzU4LDggQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBHYW1lcGFkTWFuYWdlcigpOwogCi0gICAgdm9pZCBtYWtlR2FtZXBhZHNWaXNp
YmlsZVRvQmxpbmROYXZpZ2F0b3JzKCk7CisgICAgdm9pZCBtYWtlR2FtZXBhZFZpc2libGUoUGxh
dGZvcm1HYW1lcGFkJiwgSGFzaFNldDxOYXZpZ2F0b3JHYW1lcGFkKj4mLCBIYXNoU2V0PERPTVdp
bmRvdyo+Jik7CisgICAgdm9pZCBkaXNwYXRjaEdhbWVwYWRFdmVudChjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgZXZlbnROYW1lLCBQbGF0Zm9ybUdhbWVwYWQmKTsKIAogICAgIHZvaWQgbWF5YmVT
dGFydE1vbml0b3JpbmdHYW1lcGFkcygpOwogICAgIHZvaWQgbWF5YmVTdG9wTW9uaXRvcmluZ0dh
bWVwYWRzKCk7CkBAIC02Nyw2ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxOYXZpZ2F0
b3JHYW1lcGFkKj4gbV9uYXZpZ2F0b3JzOwogICAgIEhhc2hTZXQ8TmF2aWdhdG9yR2FtZXBhZCo+
IG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9yczsKICAgICBIYXNoU2V0PERPTVdpbmRvdyo+IG1fZG9t
V2luZG93czsKKyAgICBIYXNoU2V0PERPTVdpbmRvdyo+IG1fZ2FtZXBhZEJsaW5kRE9NV2luZG93
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcAppbmRleCBiODliOTFlLi41OGE3
Y2NiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRv
ckdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0
b3JHYW1lcGFkLmNwcApAQCAtNzIsNiArNzIsMTMgQEAgTmF2aWdhdG9yR2FtZXBhZCogTmF2aWdh
dG9yR2FtZXBhZDo6ZnJvbShOYXZpZ2F0b3IqIG5hdmlnYXRvcikKICAgICByZXR1cm4gc3VwcGxl
bWVudDsKIH0KIAorR2FtZXBhZCogTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZEF0SW5kZXgodW5z
aWduZWQgaW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IG1fZ2FtZXBhZHMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9nYW1lcGFkc1tpbmRleF0uZ2V0KCk7
Cit9CisKIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0b3JHYW1lcGFkOjpn
ZXRHYW1lcGFkcyhOYXZpZ2F0b3IqIG5hdmlnYXRvcikKIHsKICAgICByZXR1cm4gTmF2aWdhdG9y
R2FtZXBhZDo6ZnJvbShuYXZpZ2F0b3IpLT5nYW1lcGFkcygpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgKaW5kZXggMTc1NTZkOC4uNzM0
ZDc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRv
ckdhbWVwYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9y
R2FtZXBhZC5oCkBAIC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGdhbWVwYWRDb25u
ZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJik7CiAgICAgdm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKFBs
YXRmb3JtR2FtZXBhZCYpOwogCisgICAgR2FtZXBhZCogZ2FtZXBhZEF0SW5kZXgodW5zaWduZWQg
aW5kZXgpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFt
ZSgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234638</attachid>
            <date>2014-07-09 07:33:39 -0700</date>
            <delta_ts>2014-07-09 17:21:01 -0700</delta_ts>
            <desc>Patch v1a - Rebased, ready to EWS</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10566</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMjUxNzU4Li4zNzVmNmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTQtMDctMDYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcmUgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCBldmVudHMgZm9yIEdhbWVwYWRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Mzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IChObyBlZmZlY3QgaW4gYSBjdXJyZW50bHkgdGVzdGVkIGNvbmZpZykKKworICAgICAgICAqIE1v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXZp
Z2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyk6IEhhbmRsaW5nIGNvbnZlcnRpbmcgYSBwb3NzaWJs
eS1udWxsIE5hdmlnYXRvciBpbnRvCisgICAgICAgICAgYSBwb3NzaWJseSBudWxsIE5hdmlnYXRv
ckdhbWVwYWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1l
cGFkQ29ubmVjdGVkKTogTm90aWZ5IGJsaW5kIE5hdmlnYXRvci9ET01XaW5kb3dzIG9mIGFsbAor
ICAgICAgICAgIHByZXZpb3VzbHkgYXR0YWNoZWQgR2FtZXBhZHMsIHRoZW4gbm90aWZ5IGV2ZXJ5
Ym9keSBvZiB0aGlzIG5ldyBnYW1lcGFkLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6OnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCk6IEhhbmRsZSBkaXNwYXRjaGluZyB0aGUg
ZGlzY29ubmVjdGVkCisgICAgICAgICAgZXZlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgRE9NV2luZG93
cy4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWRJbnB1
dEFjdGl2aXR5KTogTm90aWZ5IGJsaW5kIE5hdmlnYXRvci9ET01XaW5kb3dzIG9mIGFsbAorICAg
ICAgICAgIGF0dGFjaGVkIEdhbWVwYWRzLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6IEhhbmRsZXMgbm90aWZ5aW5nIHNldHRpbmcgdXAgYSBu
ZXcgZ2FtZXBhZHMKKyAgICAgICAgICB3aXRoIGFsbCBOYXZpZ2F0b3JHYW1lcGFkcyBhcyB3ZWxs
IGFzIGRpc3BhdGNoaW5nIHRoZSBjb25uZWN0ZWQgZXZlbiB0byBET01XaW5kb3dzLgorICAgICAg
ICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6OnJlZ2lzdGVyRE9NV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjp1bnJlZ2lzdGVyRE9NV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZHNWaXNpYmlsZVRvQmxpbmROYXZp
Z2F0b3JzKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFn
ZXIuaDoKKworICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRBdEluZGV4KToKKyAg
ICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oOgorCiAyMDE0LTA3LTA4
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBET01XaW5kb3dz
IHNob3VsZCByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggdGhlIEdhbWVwYWRNYW5hZ2VyIHdoZW4g
dGhleSBoYXZlIGV2ZW50IGxpc3RlbmVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKaW5kZXggZjZlOGEyZC4uYzE2MjA0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCkBA
IC0yNyw3ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKKyNpbmNsdWRlICJET01X
aW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdhbWVwYWQuaCIKKyNp
bmNsdWRlICJHYW1lcGFkRXZlbnQuaCIKICNpbmNsdWRlICJHYW1lcGFkUHJvdmlkZXIuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yR2FtZXBhZC5oIgpAQCAtMzUs
NiArMzgsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgTmF2aWdhdG9yR2Ft
ZXBhZCogbmF2aWdhdG9yR2FtZXBhZEZyb21ET01XaW5kb3coRE9NV2luZG93KiB3aW5kb3cpCit7
CisgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IgPSB3aW5kb3ctPm5hdmlnYXRvcigpOworICAgIGlm
ICghbmF2aWdhdG9yKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBOYXZp
Z2F0b3JHYW1lcGFkOjpmcm9tKG5hdmlnYXRvcik7Cit9CisKIEdhbWVwYWRNYW5hZ2VyJiBHYW1l
cGFkTWFuYWdlcjo6c2hhcmVkKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R2FtZXBh
ZE1hbmFnZXI+IHNoYXJlZE1hbmFnZXI7CkBAIC00OCw0MyArNjAsOTUgQEAgR2FtZXBhZE1hbmFn
ZXI6OkdhbWVwYWRNYW5hZ2VyKCkKIAogdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1l
cGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogewotICAgIGZv
ciAoYXV0byYgbmF2aWdhdG9yIDogbV9uYXZpZ2F0b3JzKSB7Ci0gICAgICAgIGlmICghbV9nYW1l
cGFkQmxpbmROYXZpZ2F0b3JzLmNvbnRhaW5zKG5hdmlnYXRvcikpCi0gICAgICAgICAgICBuYXZp
Z2F0b3ItPmdhbWVwYWRDb25uZWN0ZWQocGxhdGZvcm1HYW1lcGFkKTsKKyAgICAvLyBOb3RpZnkg
YmxpbmQgTmF2aWdhdG9ycyBhbmQgV2luZG93cyBhYm91dCBhbGwgZ2FtZXBhZHMgZXhjZXB0IGZv
ciB0aGlzIG9uZS4KKyAgICBmb3IgKGF1dG8qIGdhbWVwYWQgOiBHYW1lcGFkUHJvdmlkZXI6OnNo
YXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKSkgeworICAgICAgICBpZiAoIWdhbWVwYWQgfHwgZ2Ft
ZXBhZCA9PSAmcGxhdGZvcm1HYW1lcGFkKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgLy8gRklYTUU6IEZpcmUgY29ubmVjdGVkIGV2ZW50IHRvIGFsbCBwYWdlcyB3aXRoIGxpc3Rl
bmVycy4KKyAgICAgICAgbWFrZUdhbWVwYWRWaXNpYmxlKCpnYW1lcGFkLCBtX2dhbWVwYWRCbGlu
ZE5hdmlnYXRvcnMsIG1fZ2FtZXBhZEJsaW5kRE9NV2luZG93cyk7CiAgICAgfQogCi0gICAgbWFr
ZUdhbWVwYWRzVmlzaWJpbGVUb0JsaW5kTmF2aWdhdG9ycygpOworICAgIG1fZ2FtZXBhZEJsaW5k
TmF2aWdhdG9ycy5jbGVhcigpOworICAgIG1fZ2FtZXBhZEJsaW5kRE9NV2luZG93cy5jbGVhcigp
OworCisgICAgLy8gTm90aWZ5IGV2ZXJ5b25lIG9mIHRoaXMgbmV3IGdhbWVwYWQKKyAgICBtYWtl
R2FtZXBhZFZpc2libGUocGxhdGZvcm1HYW1lcGFkLCBtX25hdmlnYXRvcnMsIG1fZG9tV2luZG93
cyk7CiB9CiAKIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3Rl
ZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKIHsKLSAgICBmb3IgKGF1dG8mIG5h
dmlnYXRvciA6IG1fbmF2aWdhdG9ycykgewotICAgICAgICBpZiAoIW1fZ2FtZXBhZEJsaW5kTmF2
aWdhdG9ycy5jb250YWlucyhuYXZpZ2F0b3IpKQotICAgICAgICAgICAgbmF2aWdhdG9yLT5nYW1l
cGFkRGlzY29ubmVjdGVkKHBsYXRmb3JtR2FtZXBhZCk7CisgICAgVmVjdG9yPERPTVdpbmRvdyo+
IGRvbVdpbmRvd1ZlY3RvcjsKKyAgICBjb3B5VG9WZWN0b3IobV9kb21XaW5kb3dzLCBkb21XaW5k
b3dWZWN0b3IpOworCisgICAgSGFzaFNldDxOYXZpZ2F0b3JHYW1lcGFkKj4gbm90aWZpZWROYXZp
Z2F0b3JzOwogCi0gICAgICAgIC8vIEZJWE1FOiBGaXJlIGRpc2Nvbm5lY3RlZCBldmVudCB0byBh
bGwgcGFnZXMgd2l0aCBsaXN0ZW5lcnMuCisgICAgLy8gSGFuZGxlIHRoZSBkaXNjb25uZWN0IGZv
ciBhbGwgRE9NV2luZG93cyB3aXRoIGV2ZW50IGxpc3RlbmVycyBhbmQgdGhlaXIgTmF2aWdhdG9y
cy4KKyAgICBmb3IgKGF1dG8qIHdpbmRvdyA6IGRvbVdpbmRvd1ZlY3RvcikgeworICAgICAgICAv
LyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdheS4KKyAg
ICAgICAgaWYgKCFtX2RvbVdpbmRvd3MuY29udGFpbnMod2luZG93KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIE5hdmlnYXRvckdhbWVwYWQqIG5hdmlnYXRvciA9IG5hdmlnYXRv
ckdhbWVwYWRGcm9tRE9NV2luZG93KHdpbmRvdyk7CisgICAgICAgIGlmICghbmF2aWdhdG9yKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gSWYgdGhpcyBOYXZpZ2F0b3IgaGFz
bid0IHNlZW4gZ2FtZXBhZHMgeWV0IHRoZW4gaXRzIFdpbmRvdyBzaG91bGQgbm90IGdldCB0aGUg
ZGlzY29ubmVjdCBldmVudC4KKyAgICAgICAgaWYgKG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5j
b250YWlucyhuYXZpZ2F0b3IpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVm
UHRyPEdhbWVwYWQ+IGdhbWVwYWQgPSBuYXZpZ2F0b3ItPmdhbWVwYWRBdEluZGV4KHBsYXRmb3Jt
R2FtZXBhZC5pbmRleCgpKTsKKyAgICAgICAgQVNTRVJUKGdhbWVwYWQpOworCisgICAgICAgIG5h
dmlnYXRvci0+Z2FtZXBhZERpc2Nvbm5lY3RlZChwbGF0Zm9ybUdhbWVwYWQpOworICAgICAgICBu
b3RpZmllZE5hdmlnYXRvcnMuYWRkKG5hdmlnYXRvcik7CisKKyAgICAgICAgd2luZG93LT5kaXNw
YXRjaEV2ZW50KEdhbWVwYWRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5nYW1lcGFkZGlzY29u
bmVjdGVkRXZlbnQsIGdhbWVwYWQuZ2V0KCkpLCB3aW5kb3ctPmRvY3VtZW50KCkpOworICAgIH0K
KworICAgIC8vIE5vdGlmeSBhbGwgdGhlIE5hdmlnYXRvcnMgdGhhdCBoYXZlbid0IGFscmVhZHkg
YmVlbiBub3RpZmllZC4KKyAgICBmb3IgKGF1dG8qIG5hdmlnYXRvciA6IG1fbmF2aWdhdG9ycykg
eworICAgICAgICBpZiAoIW5vdGlmaWVkTmF2aWdhdG9ycy5jb250YWlucyhuYXZpZ2F0b3IpKQor
ICAgICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkRGlzY29ubmVjdGVkKHBsYXRmb3JtR2FtZXBh
ZCk7CiAgICAgfQogfQogCiB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWRJbnB1
dEFjdGl2aXR5KCkKIHsKLSAgICBtYWtlR2FtZXBhZHNWaXNpYmlsZVRvQmxpbmROYXZpZ2F0b3Jz
KCk7CisgICAgaWYgKG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5pc0VtcHR5KCkgJiYgbV9nYW1l
cGFkQmxpbmRET01XaW5kb3dzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVw
YWRzKCkpCisgICAgICAgIG1ha2VHYW1lcGFkVmlzaWJsZSgqZ2FtZXBhZCwgbV9nYW1lcGFkQmxp
bmROYXZpZ2F0b3JzLCBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3MpOworCisgICAgbV9nYW1lcGFk
QmxpbmROYXZpZ2F0b3JzLmNsZWFyKCk7CisgICAgbV9nYW1lcGFkQmxpbmRET01XaW5kb3dzLmNs
ZWFyKCk7CiB9CiAKLXZvaWQgR2FtZXBhZE1hbmFnZXI6Om1ha2VHYW1lcGFkc1Zpc2liaWxlVG9C
bGluZE5hdmlnYXRvcnMoKQordm9pZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRWaXNpYmxl
KFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCBIYXNoU2V0PE5hdmlnYXRvckdhbWVw
YWQqPiYgbmF2aWdhdG9yU2V0LCBIYXNoU2V0PERPTVdpbmRvdyo+JiBkb21XaW5kb3dTZXQpCiB7
Ci0gICAgZm9yIChhdXRvJiBuYXZpZ2F0b3IgOiBtX2dhbWVwYWRCbGluZE5hdmlnYXRvcnMpIHsK
LSAgICAgICAgLy8gRklYTUU6IEhlcmUgd2Ugbm90aWZ5IGEgYmxpbmQgTmF2aWdhdG9yIG9mIGVh
Y2ggZXhpc3RpbmcgZ2FtZXBhZC4KLSAgICAgICAgLy8gQnV0IHdlIGFsc28gbmVlZCB0byBmaXJl
IHRoZSBjb25uZWN0ZWQgZXZlbnQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgRE9NV2luZG93IG9iamVj
dHMuCi0gICAgICAgIGZvciAoYXV0byYgcGxhdGZvcm1HYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVy
OjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVwYWRzKCkpIHsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9y
bUdhbWVwYWQpCi0gICAgICAgICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKCpw
bGF0Zm9ybUdhbWVwYWQpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChuYXZpZ2F0b3JTZXQu
aXNFbXB0eSgpICYmIGRvbVdpbmRvd1NldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5jbGVhcigpOworICAgIGZvciAoYXV0byogbmF2
aWdhdG9yIDogbmF2aWdhdG9yU2V0KQorICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWRDb25uZWN0
ZWQocGxhdGZvcm1HYW1lcGFkKTsKKworICAgIFZlY3RvcjxET01XaW5kb3cqPiBkb21XaW5kb3dW
ZWN0b3I7CisgICAgY29weVRvVmVjdG9yKGRvbVdpbmRvd1NldCwgZG9tV2luZG93VmVjdG9yKTsK
KworICAgIGZvciAoYXV0byogd2luZG93IDogZG9tV2luZG93VmVjdG9yKSB7CisgICAgICAgIC8v
IEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5LgorICAg
ICAgICBpZiAoIW1fZG9tV2luZG93cy5jb250YWlucyh3aW5kb3cpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgTmF2aWdhdG9yR2FtZXBhZCogbmF2aWdhdG9yID0gbmF2aWdhdG9y
R2FtZXBhZEZyb21ET01XaW5kb3cod2luZG93KTsKKyAgICAgICAgaWYgKCFuYXZpZ2F0b3IpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9
IG5hdmlnYXRvci0+Z2FtZXBhZEF0SW5kZXgocGxhdGZvcm1HYW1lcGFkLmluZGV4KCkpOworICAg
ICAgICBBU1NFUlQoZ2FtZXBhZCk7CisKKyAgICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KEdh
bWVwYWRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5nYW1lcGFkY29ubmVjdGVkRXZlbnQsIGdh
bWVwYWQuZ2V0KCkpLCB3aW5kb3ctPmRvY3VtZW50KCkpOworICAgIH0KIH0KIAogdm9pZCBHYW1l
cGFkTWFuYWdlcjo6cmVnaXN0ZXJOYXZpZ2F0b3IoTmF2aWdhdG9yR2FtZXBhZCogbmF2aWdhdG9y
KQpAQCAtMTE2LDYgKzE4MCwxOCBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpyZWdpc3RlckRPTVdp
bmRvdyhET01XaW5kb3cqIHdpbmRvdykKICAgICBBU1NFUlQoIW1fZG9tV2luZG93cy5jb250YWlu
cyh3aW5kb3cpKTsKICAgICBtX2RvbVdpbmRvd3MuYWRkKHdpbmRvdyk7CiAKKyAgICAvLyBBbnl0
aW1lIHdlIHJlZ2lzdGVyIGEgRE9NV2luZG93LCB3ZSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sg
dGhhdCBpdHMgTmF2aWdhdG9yR2FtZXBhZCBpcyByZWdpc3RlcmVkLgorICAgIE5hdmlnYXRvckdh
bWVwYWQqIG5hdmlnYXRvciA9IG5hdmlnYXRvckdhbWVwYWRGcm9tRE9NV2luZG93KHdpbmRvdyk7
CisgICAgQVNTRVJUKG5hdmlnYXRvcik7CisKKyAgICBpZiAobV9uYXZpZ2F0b3JzLmFkZChuYXZp
Z2F0b3IpLmlzTmV3RW50cnkpCisgICAgICAgIG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5hZGQo
bmF2aWdhdG9yKTsKKworICAgIC8vIElmIHRoaXMgRE9NV2luZG93J3MgTmF2aWdhdG9yR2FtZXBh
ZCB3YXMgYWxyZWFkeSByZWdpc3RlcmVkIGJ1dCB3YXMgc3RpbGwgYmxpbmQsCisgICAgLy8gdGhl
biB0aGlzIERPTVdpbmRvdyBzaG91bGQgYmUgYmxpbmQuCisgICAgaWYgKG1fZ2FtZXBhZEJsaW5k
TmF2aWdhdG9ycy5jb250YWlucyhuYXZpZ2F0b3IpKQorICAgICAgICBtX2dhbWVwYWRCbGluZERP
TVdpbmRvd3MuYWRkKHdpbmRvdyk7CisKICAgICBtYXliZVN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRz
KCk7CiB9CiAKQEAgLTEyNSw2ICsyMDEsNyBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjp1bnJlZ2lz
dGVyRE9NV2luZG93KERPTVdpbmRvdyogd2luZG93KQogCiAgICAgQVNTRVJUKG1fZG9tV2luZG93
cy5jb250YWlucyh3aW5kb3cpKTsKICAgICBtX2RvbVdpbmRvd3MucmVtb3ZlKHdpbmRvdyk7Cisg
ICAgbV9nYW1lcGFkQmxpbmRET01XaW5kb3dzLnJlbW92ZSh3aW5kb3cpOwogCiAgICAgbWF5YmVT
dG9wTW9uaXRvcmluZ0dhbWVwYWRzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkTWFuYWdlci5oCmluZGV4IDUzNTM1MjAuLjEwNDYwYjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5oCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNyArNTgsOCBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdhbWVwYWRNYW5hZ2VyKCk7CiAKLSAgICB2b2lkIG1h
a2VHYW1lcGFkc1Zpc2liaWxlVG9CbGluZE5hdmlnYXRvcnMoKTsKKyAgICB2b2lkIG1ha2VHYW1l
cGFkVmlzaWJsZShQbGF0Zm9ybUdhbWVwYWQmLCBIYXNoU2V0PE5hdmlnYXRvckdhbWVwYWQqPiYs
IEhhc2hTZXQ8RE9NV2luZG93Kj4mKTsKKyAgICB2b2lkIGRpc3BhdGNoR2FtZXBhZEV2ZW50KGNv
bnN0IFdURjo6QXRvbWljU3RyaW5nJiBldmVudE5hbWUsIFBsYXRmb3JtR2FtZXBhZCYpOwogCiAg
ICAgdm9pZCBtYXliZVN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKCk7CiAgICAgdm9pZCBtYXliZVN0
b3BNb25pdG9yaW5nR2FtZXBhZHMoKTsKQEAgLTY3LDYgKzY5LDcgQEAgcHJpdmF0ZToKICAgICBI
YXNoU2V0PE5hdmlnYXRvckdhbWVwYWQqPiBtX25hdmlnYXRvcnM7CiAgICAgSGFzaFNldDxOYXZp
Z2F0b3JHYW1lcGFkKj4gbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzOwogICAgIEhhc2hTZXQ8RE9N
V2luZG93Kj4gbV9kb21XaW5kb3dzOworICAgIEhhc2hTZXQ8RE9NV2luZG93Kj4gbV9nYW1lcGFk
QmxpbmRET01XaW5kb3dzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCmluZGV4
IGI4OWI5MWUuLjU4YTdjY2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCkBAIC03Miw2ICs3MiwxMyBAQCBOYXZpZ2F0b3JH
YW1lcGFkKiBOYXZpZ2F0b3JHYW1lcGFkOjpmcm9tKE5hdmlnYXRvciogbmF2aWdhdG9yKQogICAg
IHJldHVybiBzdXBwbGVtZW50OwogfQogCitHYW1lcGFkKiBOYXZpZ2F0b3JHYW1lcGFkOjpnYW1l
cGFkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gbV9nYW1lcGFk
cy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2dhbWVwYWRz
W2luZGV4XS5nZXQoKTsKK30KKwogY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPj4mIE5hdmln
YXRvckdhbWVwYWQ6OmdldEdhbWVwYWRzKE5hdmlnYXRvciogbmF2aWdhdG9yKQogewogICAgIHJl
dHVybiBOYXZpZ2F0b3JHYW1lcGFkOjpmcm9tKG5hdmlnYXRvciktPmdhbWVwYWRzKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaAppbmRl
eCAxNzU1NmQ4Li43MzRkNzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Ft
ZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIHZv
aWQgZ2FtZXBhZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmKTsKICAgICB2b2lkIGdhbWVwYWRE
aXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJik7CiAKKyAgICBHYW1lcGFkKiBnYW1lcGFkQXRJ
bmRleCh1bnNpZ25lZCBpbmRleCk7CisKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHN1cHBsZW1lbnROYW1lKCk7CiAK
</data>
<flag name="review"
          id="259178"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234672</attachid>
            <date>2014-07-09 17:21:01 -0700</date>
            <delta_ts>2014-07-10 09:27:53 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10517</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYmNmYWFhLi43MThlM2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTQtMDctMDkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIEZpcmUgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCBldmVudHMgZm9yIEdhbWVwYWRzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0Mzg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAo
Tm8gZWZmZWN0IGluIGEgY3VycmVudGx5IHRlc3RlZCBjb25maWcpCisKKyAgICAgICAgKiBNb2R1
bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF2aWdh
dG9yR2FtZXBhZEZyb21ET01XaW5kb3cpOiBIYW5kbGluZyBjb252ZXJ0aW5nIGEgcG9zc2libHkt
bnVsbCBOYXZpZ2F0b3IgaW50bworICAgICAgICAgICAgYSBwb3NzaWJseSBudWxsIE5hdmlnYXRv
ckdhbWVwYWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1l
cGFkQ29ubmVjdGVkKTogTm90aWZ5IGJsaW5kIE5hdmlnYXRvci9ET01XaW5kb3dzIG9mIGFsbAor
ICAgICAgICAgICAgcHJldmlvdXNseSBhdHRhY2hlZCBHYW1lcGFkcywgdGhlbiBub3RpZnkgZXZl
cnlib2R5IG9mIHRoaXMgbmV3IGdhbWVwYWQuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkTWFu
YWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKTogSGFuZGxlIGRpc3BhdGNoaW5nIHRo
ZSBkaXNjb25uZWN0ZWQKKyAgICAgICAgICAgIGV2ZW50IHRvIGFsbCByZWdpc3RlcmVkIERPTVdp
bmRvd3MuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFk
SW5wdXRBY3Rpdml0eSk6IE5vdGlmeSBibGluZCBOYXZpZ2F0b3IvRE9NV2luZG93cyBvZiBhbGwK
KyAgICAgICAgICAgIGF0dGFjaGVkIEdhbWVwYWRzLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBh
ZE1hbmFnZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6IEhhbmRsZXMgbm90aWZ5aW5nIHNldHRpbmcg
dXAgYSBuZXcgZ2FtZXBhZHMKKyAgICAgICAgICAgIHdpdGggYWxsIE5hdmlnYXRvckdhbWVwYWRz
IGFzIHdlbGwgYXMgZGlzcGF0Y2hpbmcgdGhlIGNvbm5lY3RlZCBldmVuIHRvIERPTVdpbmRvd3Mu
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6cmVnaXN0ZXJET01XaW5kb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6OnVucmVnaXN0ZXJET01XaW5kb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6Om1ha2VHYW1lcGFkc1Zpc2liaWxlVG9C
bGluZE5hdmlnYXRvcnMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkTWFuYWdlci5oOgorCisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVw
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZEF0SW5k
ZXgpOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmg6CisKIDIw
MTQtMDctMDkgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTdXBwb3J0IHRyYW5zcGFyZW50IFdLV2ViVmlld3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCmluZGV4IGY2ZThhMmQuLjgxYmM5NWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmNwcApAQCAtMjcsNyArMjcsMTAgQEAKIAogI2lmIEVOQUJMRShHQU1FUEFEKQogCisjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJHYW1lcGFk
LmgiCisjaW5jbHVkZSAiR2FtZXBhZEV2ZW50LmgiCiAjaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVy
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvckdhbWVwYWQuaCIK
QEAgLTM1LDYgKzM4LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIE5hdmln
YXRvckdhbWVwYWQqIG5hdmlnYXRvckdhbWVwYWRGcm9tRE9NV2luZG93KERPTVdpbmRvdyogd2lu
ZG93KQoreworICAgIE5hdmlnYXRvciogbmF2aWdhdG9yID0gd2luZG93LT5uYXZpZ2F0b3IoKTsK
KyAgICBpZiAoIW5hdmlnYXRvcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gTmF2aWdhdG9yR2FtZXBhZDo6ZnJvbShuYXZpZ2F0b3IpOworfQorCiBHYW1lcGFkTWFuYWdl
ciYgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEdhbWVwYWRNYW5hZ2VyPiBzaGFyZWRNYW5hZ2VyOwpAQCAtNDgsNDMgKzYwLDk1IEBAIEdhbWVw
YWRNYW5hZ2VyOjpHYW1lcGFkTWFuYWdlcigpCiAKIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRm
b3JtR2FtZXBhZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKIHsK
LSAgICBmb3IgKGF1dG8mIG5hdmlnYXRvciA6IG1fbmF2aWdhdG9ycykgewotICAgICAgICBpZiAo
IW1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5jb250YWlucyhuYXZpZ2F0b3IpKQotICAgICAgICAg
ICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKHBsYXRmb3JtR2FtZXBhZCk7CisgICAgLy8g
Tm90aWZ5IGJsaW5kIE5hdmlnYXRvcnMgYW5kIFdpbmRvd3MgYWJvdXQgYWxsIGdhbWVwYWRzIGV4
Y2VwdCBmb3IgdGhpcyBvbmUuCisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3Zp
ZGVyOjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVwYWRzKCkpIHsKKyAgICAgICAgaWYgKCFnYW1lcGFk
IHx8IGdhbWVwYWQgPT0gJnBsYXRmb3JtR2FtZXBhZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIC8vIEZJWE1FOiBGaXJlIGNvbm5lY3RlZCBldmVudCB0byBhbGwgcGFnZXMgd2l0
aCBsaXN0ZW5lcnMuCisgICAgICAgIG1ha2VHYW1lcGFkVmlzaWJsZSgqZ2FtZXBhZCwgbV9nYW1l
cGFkQmxpbmROYXZpZ2F0b3JzLCBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3MpOwogICAgIH0KIAot
ICAgIG1ha2VHYW1lcGFkc1Zpc2liaWxlVG9CbGluZE5hdmlnYXRvcnMoKTsKKyAgICBtX2dhbWVw
YWRCbGluZE5hdmlnYXRvcnMuY2xlYXIoKTsKKyAgICBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3Mu
Y2xlYXIoKTsKKworICAgIC8vIE5vdGlmeSBldmVyeW9uZSBvZiB0aGlzIG5ldyBnYW1lcGFkLgor
ICAgIG1ha2VHYW1lcGFkVmlzaWJsZShwbGF0Zm9ybUdhbWVwYWQsIG1fbmF2aWdhdG9ycywgbV9k
b21XaW5kb3dzKTsKIH0KIAogdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlz
Y29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogewotICAgIGZvciAo
YXV0byYgbmF2aWdhdG9yIDogbV9uYXZpZ2F0b3JzKSB7Ci0gICAgICAgIGlmICghbV9nYW1lcGFk
QmxpbmROYXZpZ2F0b3JzLmNvbnRhaW5zKG5hdmlnYXRvcikpCi0gICAgICAgICAgICBuYXZpZ2F0
b3ItPmdhbWVwYWREaXNjb25uZWN0ZWQocGxhdGZvcm1HYW1lcGFkKTsKKyAgICBWZWN0b3I8RE9N
V2luZG93Kj4gZG9tV2luZG93VmVjdG9yOworICAgIGNvcHlUb1ZlY3RvcihtX2RvbVdpbmRvd3Ms
IGRvbVdpbmRvd1ZlY3Rvcik7CisKKyAgICBIYXNoU2V0PE5hdmlnYXRvckdhbWVwYWQqPiBub3Rp
ZmllZE5hdmlnYXRvcnM7CiAKLSAgICAgICAgLy8gRklYTUU6IEZpcmUgZGlzY29ubmVjdGVkIGV2
ZW50IHRvIGFsbCBwYWdlcyB3aXRoIGxpc3RlbmVycy4KKyAgICAvLyBIYW5kbGUgdGhlIGRpc2Nv
bm5lY3QgZm9yIGFsbCBET01XaW5kb3dzIHdpdGggZXZlbnQgbGlzdGVuZXJzIGFuZCB0aGVpciBO
YXZpZ2F0b3JzLgorICAgIGZvciAoYXV0byogd2luZG93IDogZG9tV2luZG93VmVjdG9yKSB7Cisg
ICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBh
d2F5LgorICAgICAgICBpZiAoIW1fZG9tV2luZG93cy5jb250YWlucyh3aW5kb3cpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgTmF2aWdhdG9yR2FtZXBhZCogbmF2aWdhdG9yID0g
bmF2aWdhdG9yR2FtZXBhZEZyb21ET01XaW5kb3cod2luZG93KTsKKyAgICAgICAgaWYgKCFuYXZp
Z2F0b3IpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBJZiB0aGlzIE5hdmln
YXRvciBoYXNuJ3Qgc2VlbiBnYW1lcGFkcyB5ZXQgdGhlbiBpdHMgV2luZG93IHNob3VsZCBub3Qg
Z2V0IHRoZSBkaXNjb25uZWN0IGV2ZW50LgorICAgICAgICBpZiAobV9nYW1lcGFkQmxpbmROYXZp
Z2F0b3JzLmNvbnRhaW5zKG5hdmlnYXRvcikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IG5hdmlnYXRvci0+Z2FtZXBhZEF0SW5kZXgo
cGxhdGZvcm1HYW1lcGFkLmluZGV4KCkpOworICAgICAgICBBU1NFUlQoZ2FtZXBhZCk7CisKKyAg
ICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkRGlzY29ubmVjdGVkKHBsYXRmb3JtR2FtZXBhZCk7Cisg
ICAgICAgIG5vdGlmaWVkTmF2aWdhdG9ycy5hZGQobmF2aWdhdG9yKTsKKworICAgICAgICB3aW5k
b3ctPmRpc3BhdGNoRXZlbnQoR2FtZXBhZEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmdhbWVw
YWRkaXNjb25uZWN0ZWRFdmVudCwgZ2FtZXBhZC5nZXQoKSksIHdpbmRvdy0+ZG9jdW1lbnQoKSk7
CisgICAgfQorCisgICAgLy8gTm90aWZ5IGFsbCB0aGUgTmF2aWdhdG9ycyB0aGF0IGhhdmVuJ3Qg
YWxyZWFkeSBiZWVuIG5vdGlmaWVkLgorICAgIGZvciAoYXV0byogbmF2aWdhdG9yIDogbV9uYXZp
Z2F0b3JzKSB7CisgICAgICAgIGlmICghbm90aWZpZWROYXZpZ2F0b3JzLmNvbnRhaW5zKG5hdmln
YXRvcikpCisgICAgICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWREaXNjb25uZWN0ZWQocGxhdGZv
cm1HYW1lcGFkKTsKICAgICB9CiB9CiAKIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2Ft
ZXBhZElucHV0QWN0aXZpdHkoKQogewotICAgIG1ha2VHYW1lcGFkc1Zpc2liaWxlVG9CbGluZE5h
dmlnYXRvcnMoKTsKKyAgICBpZiAobV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLmlzRW1wdHkoKSAm
JiBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKGF1dG8qIGdhbWVwYWQgOiBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRm
b3JtR2FtZXBhZHMoKSkKKyAgICAgICAgbWFrZUdhbWVwYWRWaXNpYmxlKCpnYW1lcGFkLCBtX2dh
bWVwYWRCbGluZE5hdmlnYXRvcnMsIG1fZ2FtZXBhZEJsaW5kRE9NV2luZG93cyk7CisKKyAgICBt
X2dhbWVwYWRCbGluZE5hdmlnYXRvcnMuY2xlYXIoKTsKKyAgICBtX2dhbWVwYWRCbGluZERPTVdp
bmRvd3MuY2xlYXIoKTsKIH0KIAotdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRzVmlz
aWJpbGVUb0JsaW5kTmF2aWdhdG9ycygpCit2b2lkIEdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBh
ZFZpc2libGUoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsIEhhc2hTZXQ8TmF2aWdh
dG9yR2FtZXBhZCo+JiBuYXZpZ2F0b3JTZXQsIEhhc2hTZXQ8RE9NV2luZG93Kj4mIGRvbVdpbmRv
d1NldCkKIHsKLSAgICBmb3IgKGF1dG8mIG5hdmlnYXRvciA6IG1fZ2FtZXBhZEJsaW5kTmF2aWdh
dG9ycykgewotICAgICAgICAvLyBGSVhNRTogSGVyZSB3ZSBub3RpZnkgYSBibGluZCBOYXZpZ2F0
b3Igb2YgZWFjaCBleGlzdGluZyBnYW1lcGFkLgotICAgICAgICAvLyBCdXQgd2UgYWxzbyBuZWVk
IHRvIGZpcmUgdGhlIGNvbm5lY3RlZCBldmVudCB0byBpdHMgY29ycmVzcG9uZGluZyBET01XaW5k
b3cgb2JqZWN0cy4KLSAgICAgICAgZm9yIChhdXRvJiBwbGF0Zm9ybUdhbWVwYWQgOiBHYW1lcGFk
UHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKSkgewotICAgICAgICAgICAgaWYg
KHBsYXRmb3JtR2FtZXBhZCkKLSAgICAgICAgICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWRDb25u
ZWN0ZWQoKnBsYXRmb3JtR2FtZXBhZCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKG5hdmln
YXRvclNldC5pc0VtcHR5KCkgJiYgZG9tV2luZG93U2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLmNsZWFyKCk7CisgICAgZm9yIChh
dXRvKiBuYXZpZ2F0b3IgOiBuYXZpZ2F0b3JTZXQpCisgICAgICAgIG5hdmlnYXRvci0+Z2FtZXBh
ZENvbm5lY3RlZChwbGF0Zm9ybUdhbWVwYWQpOworCisgICAgVmVjdG9yPERPTVdpbmRvdyo+IGRv
bVdpbmRvd1ZlY3RvcjsKKyAgICBjb3B5VG9WZWN0b3IoZG9tV2luZG93U2V0LCBkb21XaW5kb3dW
ZWN0b3IpOworCisgICAgZm9yIChhdXRvKiB3aW5kb3cgOiBkb21XaW5kb3dWZWN0b3IpIHsKKyAg
ICAgICAgLy8gRXZlbnQgZGlzcGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMgd2luZG93IGdvIGF3
YXkuCisgICAgICAgIGlmICghbV9kb21XaW5kb3dzLmNvbnRhaW5zKHdpbmRvdykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBOYXZpZ2F0b3JHYW1lcGFkKiBuYXZpZ2F0b3IgPSBu
YXZpZ2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyh3aW5kb3cpOworICAgICAgICBpZiAoIW5hdmln
YXRvcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBn
YW1lcGFkID0gbmF2aWdhdG9yLT5nYW1lcGFkQXRJbmRleChwbGF0Zm9ybUdhbWVwYWQuaW5kZXgo
KSk7CisgICAgICAgIEFTU0VSVChnYW1lcGFkKTsKKworICAgICAgICB3aW5kb3ctPmRpc3BhdGNo
RXZlbnQoR2FtZXBhZEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmdhbWVwYWRjb25uZWN0ZWRF
dmVudCwgZ2FtZXBhZC5nZXQoKSksIHdpbmRvdy0+ZG9jdW1lbnQoKSk7CisgICAgfQogfQogCiB2
b2lkIEdhbWVwYWRNYW5hZ2VyOjpyZWdpc3Rlck5hdmlnYXRvcihOYXZpZ2F0b3JHYW1lcGFkKiBu
YXZpZ2F0b3IpCkBAIC0xMTYsNiArMTgwLDE4IEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnJlZ2lz
dGVyRE9NV2luZG93KERPTVdpbmRvdyogd2luZG93KQogICAgIEFTU0VSVCghbV9kb21XaW5kb3dz
LmNvbnRhaW5zKHdpbmRvdykpOwogICAgIG1fZG9tV2luZG93cy5hZGQod2luZG93KTsKIAorICAg
IC8vIEFueXRpbWUgd2UgcmVnaXN0ZXIgYSBET01XaW5kb3csIHdlIHNob3VsZCBhbHNvIGRvdWJs
ZSBjaGVjayB0aGF0IGl0cyBOYXZpZ2F0b3JHYW1lcGFkIGlzIHJlZ2lzdGVyZWQuCisgICAgTmF2
aWdhdG9yR2FtZXBhZCogbmF2aWdhdG9yID0gbmF2aWdhdG9yR2FtZXBhZEZyb21ET01XaW5kb3co
d2luZG93KTsKKyAgICBBU1NFUlQobmF2aWdhdG9yKTsKKworICAgIGlmIChtX25hdmlnYXRvcnMu
YWRkKG5hdmlnYXRvcikuaXNOZXdFbnRyeSkKKyAgICAgICAgbV9nYW1lcGFkQmxpbmROYXZpZ2F0
b3JzLmFkZChuYXZpZ2F0b3IpOworCisgICAgLy8gSWYgdGhpcyBET01XaW5kb3cncyBOYXZpZ2F0
b3JHYW1lcGFkIHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQgYnV0IHdhcyBzdGlsbCBibGluZCwKKyAg
ICAvLyB0aGVuIHRoaXMgRE9NV2luZG93IHNob3VsZCBiZSBibGluZC4KKyAgICBpZiAobV9nYW1l
cGFkQmxpbmROYXZpZ2F0b3JzLmNvbnRhaW5zKG5hdmlnYXRvcikpCisgICAgICAgIG1fZ2FtZXBh
ZEJsaW5kRE9NV2luZG93cy5hZGQod2luZG93KTsKKwogICAgIG1heWJlU3RhcnRNb25pdG9yaW5n
R2FtZXBhZHMoKTsKIH0KIApAQCAtMTI1LDYgKzIwMSw3IEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6
OnVucmVnaXN0ZXJET01XaW5kb3coRE9NV2luZG93KiB3aW5kb3cpCiAKICAgICBBU1NFUlQobV9k
b21XaW5kb3dzLmNvbnRhaW5zKHdpbmRvdykpOwogICAgIG1fZG9tV2luZG93cy5yZW1vdmUod2lu
ZG93KTsKKyAgICBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3MucmVtb3ZlKHdpbmRvdyk7CiAKICAg
ICBtYXliZVN0b3BNb25pdG9yaW5nR2FtZXBhZHMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKaW5kZXggNTM1MzUyMC4uMTA0NjBiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw3
ICs1OCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR2FtZXBhZE1hbmFnZXIoKTsKIAotICAg
IHZvaWQgbWFrZUdhbWVwYWRzVmlzaWJpbGVUb0JsaW5kTmF2aWdhdG9ycygpOworICAgIHZvaWQg
bWFrZUdhbWVwYWRWaXNpYmxlKFBsYXRmb3JtR2FtZXBhZCYsIEhhc2hTZXQ8TmF2aWdhdG9yR2Ft
ZXBhZCo+JiwgSGFzaFNldDxET01XaW5kb3cqPiYpOworICAgIHZvaWQgZGlzcGF0Y2hHYW1lcGFk
RXZlbnQoY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgUGxhdGZvcm1HYW1lcGFk
Jik7CiAKICAgICB2b2lkIG1heWJlU3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoKTsKICAgICB2b2lk
IG1heWJlU3RvcE1vbml0b3JpbmdHYW1lcGFkcygpOwpAQCAtNjcsNiArNjksNyBAQCBwcml2YXRl
OgogICAgIEhhc2hTZXQ8TmF2aWdhdG9yR2FtZXBhZCo+IG1fbmF2aWdhdG9yczsKICAgICBIYXNo
U2V0PE5hdmlnYXRvckdhbWVwYWQqPiBtX2dhbWVwYWRCbGluZE5hdmlnYXRvcnM7CiAgICAgSGFz
aFNldDxET01XaW5kb3cqPiBtX2RvbVdpbmRvd3M7CisgICAgSGFzaFNldDxET01XaW5kb3cqPiBt
X2dhbWVwYWRCbGluZERPTVdpbmRvd3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5j
cHAKaW5kZXggYjg5YjkxZS4uNThhN2NjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKQEAgLTcyLDYgKzcyLDEzIEBAIE5h
dmlnYXRvckdhbWVwYWQqIE5hdmlnYXRvckdhbWVwYWQ6OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0
b3IpCiAgICAgcmV0dXJuIHN1cHBsZW1lbnQ7CiB9CiAKK0dhbWVwYWQqIE5hdmlnYXRvckdhbWVw
YWQ6OmdhbWVwYWRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBt
X2dhbWVwYWRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1f
Z2FtZXBhZHNbaW5kZXhdLmdldCgpOworfQorCiBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+
PiYgTmF2aWdhdG9yR2FtZXBhZDo6Z2V0R2FtZXBhZHMoTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCiB7
CiAgICAgcmV0dXJuIE5hdmlnYXRvckdhbWVwYWQ6OmZyb20obmF2aWdhdG9yKS0+Z2FtZXBhZHMo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JH
YW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBh
ZC5oCmluZGV4IDE3NTU2ZDguLjczNGQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaApAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYpOwogICAgIHZvaWQg
Z2FtZXBhZERpc2Nvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmKTsKIAorICAgIEdhbWVwYWQqIGdh
bWVwYWRBdEluZGV4KHVuc2lnbmVkIGluZGV4KTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgY29u
c3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>