<?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>81669</bug_id>
          
          <creation_ts>2012-03-20 08:49:10 -0700</creation_ts>
          <short_desc>Web Inspector: Extract WebInspector.UIBreakpoint from WebInspector.Breakpoint.</short_desc>
          <delta_ts>2012-03-22 02:57:08 -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>Web Inspector (Deprecated)</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vsevolod Vlasov">vsevik</reporter>
          <assigned_to name="Vsevolod Vlasov">vsevik</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>kkristof</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>podivilov</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>583108</commentid>
    <comment_count>0</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-03-20 08:49:10 -0700</bug_when>
    <thetext>Currently persisted breakpoint can potentially be used in zero to many uiSourceCodes.
Splitting WebInspector.Breakpoint into WebInspector.Breakpoint and WebInspector.UIBreakpoint and moving some logic to new objects will make code simpler and cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583134</commentid>
    <comment_count>1</comment_count>
      <attachid>132838</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-03-20 09:27:03 -0700</bug_when>
    <thetext>Created attachment 132838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583345</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-03-20 12:20:56 -0700</bug_when>
    <thetext>I guess Pavel P. should take a look first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584013</commentid>
    <comment_count>3</comment_count>
      <attachid>133015</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-03-21 05:12:56 -0700</bug_when>
    <thetext>Created attachment 133015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584092</commentid>
    <comment_count>4</comment_count>
      <attachid>133015</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2012-03-21 06:50:26 -0700</bug_when>
    <thetext>Comment on attachment 133015
Patch

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

Could you please extract DPM-related part into a separate change?

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:47
&gt; +    this._uiBreakpointsByUILocation = {};

Please use UISourceCode as key type.

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:-61
&gt; -        if (!this._breakpoint(breakpoint.uiSourceCodeId, breakpoint.lineNumber))

It checks for duplicates, please keep it as is.

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:92
&gt; +        var breakpoints = this._breakpoints(uiSourceCode.id);

Could you iterate over uiBreakpointsByUILocation map instead?

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:184
&gt;      _addBreakpointToUI: function(breakpoint)

Please inline this method.

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:220
&gt; +        if (this._breakpoint(breakpoint.id, lineNumber))

breakpoint.id should be breakpoint.uiSourceCodeId

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:434
&gt; +        for (var id in this._uiBreakpointsByUILocation) {

You should just clear this map.

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:489
&gt; +    createUIBreakpoint: function(uiSourceCode)

Please make private.

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:524
&gt; +    return new WebInspector.Breakpoint(uiSourceCode.id, lineNumber, condition, enabled, !!uiSourceCode.url);

Please inline.

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:550
&gt; +    someFunction: function()

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584362</commentid>
    <comment_count>5</comment_count>
      <attachid>133076</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-03-21 11:03:16 -0700</bug_when>
    <thetext>Created attachment 133076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584435</commentid>
    <comment_count>6</comment_count>
      <attachid>133076</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2012-03-21 11:48:18 -0700</bug_when>
    <thetext>Comment on attachment 133076
Patch

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

looks good.

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:45
&gt; +     * @type {Object.&lt;WebInspector.UISourceCode, Object.&lt;string,WebInspector.UIBreakpoint&gt;&gt;}

Please fix the annotation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584514</commentid>
    <comment_count>7</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-03-21 12:43:08 -0700</bug_when>
    <thetext>Committed r111595: &lt;http://trac.webkit.org/changeset/111595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585092</commentid>
    <comment_count>8</comment_count>
    <who name="Kristóf Kosztyó">kkristof</who>
    <bug_when>2012-03-22 02:57:08 -0700</bug_when>
    <thetext>Hi

The expected for the inspector/debugger/breakpoint-manager.html was wrong for every port except the chromium, so I rebaseline it at r111666. http://trac.webkit.org/changeset/111666</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132838</attachid>
            <date>2012-03-20 09:27:03 -0700</date>
            <delta_ts>2012-03-21 05:12:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81669-20120320202701.patch</filename>
            <type>text/plain</type>
            <size>33095</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDE2ODU4NmI2NDViN2Iy
YmVjMDMzZWNlYmYzM2NjNDdlNmQyZmYzOS4uMDM2ZWJlOTNhNjExNTE1ZDZlZjgyNTA4ZjBhMGMx
NDA2OTgyNDRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAzLTIwICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEV4dHJhY3QgV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCBmcm9tIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODE2NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuZ2V0IGZvcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLnByb3RvdHlwZS51aVNvdXJjZUNvZGVBZGRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnVpU291cmNlQ29kZVJlbW92ZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5icmVha3Bv
aW50c0ZvclVJU291cmNlQ29kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2lubmVyUmVtb3ZlQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LnJlbW92ZUFsbEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnRUb1VJKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fbW92
ZUJyZWFrcG9pbnRJblVJKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5wcm90b3R5cGUuX3VpQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fdWlCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2FkZFVJQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9yZW1vdmVVSUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5fYnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fZm9yRWFjaEJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5fc2V0QnJlYWtwb2ludEluRGVidWdnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludEZyb21EZWJ1Z2dlcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmRlYnVn
Z2VyUmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNlcmlhbGl6ZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IHVpQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuY3JlYXRlVUlCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5yZW1vdmVVSUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuY3JlYXRlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlVJQnJlYWtwb2ludC5wcm90b3R5cGUuc29tZUZ1bmN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2hhbmRsZVVJU291
cmNlQ29kZUxpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLnByb3RvdHlwZS5maW5kQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90
b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qczoKKwogMjAxMi0wMy0xOSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBs
ZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgxNTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9C
cmVha3BvaW50TWFuYWdlci5qcwppbmRleCAyODRhNzNlMTUwYTE1ZDMzYmUyNzI0ZGUwNTI1MjQ2
Njc4NjIzMjlmLi5kYzViMzBmMTliMTA5MjkyNTQ1YWEyOWU3YjA5YTQxMTY1ZmZmODA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dE1hbmFnZXIuanMKQEAgLTMxLDggKzMxLDggQEAKIC8qKgogICogQGNvbnN0cnVjdG9yCiAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5TZXR0aW5nfSBicmVha3BvaW50U3RvcmFnZQotICogQHBhcmFt
IHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCl9IGJyZWFrcG9pbnRBZGRlZERlbGVn
YXRlCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5CcmVha3BvaW50KX0gYnJlYWtw
b2ludFJlbW92ZWREZWxlZ2F0ZQorICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuVUlC
cmVha3BvaW50KX0gYnJlYWtwb2ludEFkZGVkRGVsZWdhdGUKKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCl9IGJyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUKICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWx9IGRlYnVnZ2VyTW9kZWwKICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLk1haW5TY3JpcHRNYXBwaW5nfSBzY3JpcHRNYXBwaW5nCiAgKi8K
QEAgLTQyLDYgKzQyLDEwIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlciA9IGZ1bmN0
aW9uKGJyZWFrcG9pbnRTdG9yYWdlLCBicmVha3BvaW50QWRkZWREZWxlCiAgICAgdGhpcy5fYnJl
YWtwb2ludEFkZGVkRGVsZWdhdGUgPSBicmVha3BvaW50QWRkZWREZWxlZ2F0ZTsKICAgICB0aGlz
Ll9icmVha3BvaW50UmVtb3ZlZERlbGVnYXRlID0gYnJlYWtwb2ludFJlbW92ZWREZWxlZ2F0ZTsK
ICAgICAvKioKKyAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIE9iamVjdC48c3RyaW5nLFdl
Ykluc3BlY3Rvci5VSUJyZWFrcG9pbnQ+Pn0KKyAgICAgKi8KKyAgICB0aGlzLl91aUJyZWFrcG9p
bnRzQnlVSUxvY2F0aW9uID0ge307CisgICAgLyoqCiAgICAgICogQHR5cGUge09iamVjdC48c3Ry
aW5nLCBPYmplY3QuPHN0cmluZyxXZWJJbnNwZWN0b3IuQnJlYWtwb2ludD4+fQogICAgICAqLwog
ICAgIHRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9uID0ge307CkBAIC01OCw4ICs2Miw3IEBA
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlciA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRTdG9y
YWdlLCBicmVha3BvaW50QWRkZWREZWxlCiAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJl
YWtwb2ludFN0b3JhZ2UuZ2V0KCk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50
cy5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LmRlc2VyaWFsaXplKGJyZWFrcG9pbnRzW2ldKTsKLSAgICAgICAgaWYgKCF0aGlz
Ll9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQsIGJyZWFrcG9pbnQubGluZU51
bWJlcikpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9VSShicmVha3BvaW50KTsK
KyAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9CiB9CiAKQEAg
LTcyLDE5ICs3NSwzNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
ID0gewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50cyh1aVNvdXJj
ZUNvZGUuaWQpOwogICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyIGluIGJyZWFrcG9pbnRzKSB7
CiAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOwot
ICAgICAgICAgICAgYnJlYWtwb2ludC51aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7CisgICAg
ICAgICAgICB2YXIgdWlCcmVha3BvaW50ID0gYnJlYWtwb2ludC5jcmVhdGVVSUJyZWFrcG9pbnQo
dWlTb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZFVJQnJlYWtwb2ludCh1aUJyZWFr
cG9pbnQpOwogICAgICAgICAgICAgdGhpcy5fbWF0ZXJpYWxpemVCcmVha3BvaW50KGJyZWFrcG9p
bnQsIHVpU291cmNlQ29kZSk7CiAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5fZGVidWdnZXJM
b2NhdGlvbikKICAgICAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50RGVidWdnZXJMb2NhdGlv
bkNoYW5nZWQoYnJlYWtwb2ludCk7CisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50QWRkZWRE
ZWxlZ2F0ZSh1aUJyZWFrcG9pbnQpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCisgICAg
ICovCisgICAgdWlTb3VyY2VDb2RlUmVtb3ZlZDogZnVuY3Rpb24odWlTb3VyY2VDb2RlKQorICAg
IHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHModWlTb3VyY2VD
b2RlLmlkKTsKKyAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBicmVha3BvaW50cykgewor
ICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tsaW5lTnVtYmVyXTsKKyAg
ICAgICAgICAgIHZhciB1aUJyZWFrcG9pbnQgPSBicmVha3BvaW50LnVpQnJlYWtwb2ludAorICAg
ICAgICAgICAgdGhpcy5fcmVtb3ZlVUlCcmVha3BvaW50KHVpQnJlYWtwb2ludCk7CisgICAgICAg
ICAgICB0aGlzLl9icmVha3BvaW50UmVtb3ZlZERlbGVnYXRlKHVpQnJlYWtwb2ludCk7CiAgICAg
ICAgIH0KICAgICB9LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKKyAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZyxX
ZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50Pnx1bmRlZmluZWR9CiAgICAgICovCiAgICAgYnJlYWtw
b2ludHNGb3JVSVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50cyh1aVNvdXJjZUNvZGUuaWQpOworICAgICAgICBy
ZXR1cm4gdGhpcy5fdWlCcmVha3BvaW50cyh1aVNvdXJjZUNvZGUuaWQpOwogICAgIH0sCiAKICAg
ICAvKioKQEAgLTk1LDEyICsxMTUsMTAgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbih1aVNv
dXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKICAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9icmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlcikpCisgICAg
ICAgIGlmICh0aGlzLl91aUJyZWFrcG9pbnQodWlTb3VyY2VDb2RlLmlkLCBsaW5lTnVtYmVyKSkK
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcGVyc2lzdGVudCA9ICEhdWlTb3Vy
Y2VDb2RlLnVybDsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQodWlTb3VyY2VDb2RlLmlkLCBsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQs
IHBlcnNpc3RlbnQpOwotICAgICAgICBicmVha3BvaW50LnVpU291cmNlQ29kZSA9IHVpU291cmNl
Q29kZTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5j
cmVhdGUodWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpOyAKKyAg
ICAgICAgdmFyIHVpQnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY3JlYXRlVUlCcmVha3BvaW50KHVp
U291cmNlQ29kZSk7CiAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1VJKGJyZWFrcG9pbnQp
OwogICAgICAgICB0aGlzLl9tYXRlcmlhbGl6ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCwgdWlTb3Vy
Y2VDb2RlKTsKICAgICB9LApAQCAtMTExLDE2ICsxMjksMTYgQEAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICByZW1vdmVCcmVha3BvaW50
OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnQodWlTb3VyY2VDb2RlLmlkLCBsaW5lTnVtYmVy
KTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50KQorICAgICAgICB2YXIgdWlCcmVha3BvaW50ID0g
dGhpcy5fdWlCcmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlcik7CisgICAgICAg
IGlmICghdWlCcmVha3BvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9y
ZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9pbm5lclJlbW92ZUJy
ZWFrcG9pbnQodWlCcmVha3BvaW50LmJyZWFrcG9pbnQpOwogICAgIH0sCiAKICAgICAvKioKICAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fSBicmVha3BvaW50CiAgICAgICov
Ci0gICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2lubmVy
UmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAgIHRo
aXMuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkoYnJlYWtwb2ludCk7CiAgICAgICAgIHRoaXMuX3Jl
bW92ZUJyZWFrcG9pbnRGcm9tRGVidWdnZXIoYnJlYWtwb2ludCk7CkBAIC0xMjgsNyArMTQ2LDcg
QEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgIHJl
bW92ZUFsbEJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9mb3JF
YWNoQnJlYWtwb2ludCh0aGlzLl9yZW1vdmVCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgICAg
ICB0aGlzLl9mb3JFYWNoQnJlYWtwb2ludCh0aGlzLl9pbm5lclJlbW92ZUJyZWFrcG9pbnQuYmlu
ZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTY1LDEwICsxODMsMTMgQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfYWRk
QnJlYWtwb2ludFRvVUk6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewotICAgICAgICBjb25z
b2xlLmFzc2VydCghdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBi
cmVha3BvaW50LmxpbmVOdW1iZXIpKTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMoYnJlYWtw
b2ludC51aVNvdXJjZUNvZGVJZClbYnJlYWtwb2ludC5saW5lTnVtYmVyXSA9IGJyZWFrcG9pbnQ7
CisgICAgICAgIHZhciB1aUJyZWFrcG9pbnQgPSBicmVha3BvaW50LnVpQnJlYWtwb2ludDsKKyAg
ICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICAgICAgdGhpcy5fc2F2
ZUJyZWFrcG9pbnRzKCk7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZERlbGVnYXRlKGJy
ZWFrcG9pbnQpOworICAgICAgICBpZiAoIXVpQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdGhpcy5fYWRkVUlCcmVha3BvaW50KHVpQnJlYWtwb2ludCk7CisgICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRBZGRlZERlbGVnYXRlKHVpQnJlYWtwb2ludCk7CiAgICAgfSwKIAog
ICAgIC8qKgpAQCAtMTc2LDEwICsxOTcsMTMgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfZGVsZXRlQnJlYWtwb2ludEZyb21VSTog
ZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X2JyZWFrcG9pbnQoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVt
YmVyKSA9PT0gYnJlYWtwb2ludCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50cyhi
cmVha3BvaW50LnVpU291cmNlQ29kZUlkKVticmVha3BvaW50LmxpbmVOdW1iZXJdOworICAgICAg
ICB2YXIgdWlCcmVha3BvaW50ID0gYnJlYWtwb2ludC51aUJyZWFrcG9pbnQ7CisgICAgICAgIHRo
aXMuX3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgICAgIHRoaXMuX3NhdmVCcmVh
a3BvaW50cygpOwotICAgICAgICB0aGlzLl9icmVha3BvaW50UmVtb3ZlZERlbGVnYXRlKGJyZWFr
cG9pbnQpOworICAgICAgICBpZiAoIXVpQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy5fcmVtb3ZlVUlCcmVha3BvaW50KHVpQnJlYWtwb2ludCk7CisgICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUodWlCcmVha3BvaW50KTsKICAgICB9LAog
CiAgICAgLyoqCkBAIC0xODksMzMgKzIxMyw5NiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9tb3ZlQnJlYWtwb2ludEluVUk6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIpCiAgICAgeworICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlOworICAgICAgICBpZiAoYnJlYWtwb2ludC51aUJyZWFrcG9pbnQpCisgICAgICAgICAg
ICB1aVNvdXJjZUNvZGUgPSBicmVha3BvaW50LnVpQnJlYWtwb2ludC51aVNvdXJjZUNvZGU7CiAg
ICAgICAgIHRoaXMuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkoYnJlYWtwb2ludCk7Ci0gICAgICAg
IGlmICh0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQsIGxpbmVOdW1i
ZXIpKQorICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LmlkLCBsaW5lTnVt
YmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWtwb2ludC5saW5l
TnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgaWYgKHVpU291cmNlQ29kZSkKKyAgICAgICAg
ICAgIGJyZWFrcG9pbnQuY3JlYXRlVUlCcmVha3BvaW50KHVpU291cmNlQ29kZSk7CiAgICAgICAg
IHRoaXMuX2FkZEJyZWFrcG9pbnRUb1VJKGJyZWFrcG9pbnQpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVpU291cmNlQ29k
ZUlkCi0gICAgICogQHJldHVybiB7P09iamVjdC48c3RyaW5nLFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50Pn0KKyAgICAgKiBAcmV0dXJuIHs/T2JqZWN0LjxzdHJpbmcsV2ViSW5zcGVjdG9yLlVJQnJl
YWtwb2ludD59CiAgICAgICovCi0gICAgX2JyZWFrcG9pbnRzOiBmdW5jdGlvbih1aVNvdXJjZUNv
ZGVJZCkKKyAgICBfdWlCcmVha3BvaW50czogZnVuY3Rpb24odWlTb3VyY2VDb2RlSWQpCiAgICAg
ewotICAgICAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9uW3VpU291cmNlQ29k
ZUlkXSkKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9uW3VpU291cmNl
Q29kZUlkXSA9IHt9OwotICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNCeVVJTG9jYXRp
b25bdWlTb3VyY2VDb2RlSWRdOworICAgICAgICBpZiAoIXRoaXMuX3VpQnJlYWtwb2ludHNCeVVJ
TG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdKQorICAgICAgICAgICAgdGhpcy5fdWlCcmVha3BvaW50
c0J5VUlMb2NhdGlvblt1aVNvdXJjZUNvZGVJZF0gPSB7fTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3VpQnJlYWtwb2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdOwogICAgIH0sCiAKICAg
ICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdWlTb3VyY2VDb2RlSWQKICAgICAgKiBAcGFy
YW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuVUlC
cmVha3BvaW50fQorICAgICAqLworICAgIF91aUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVpU291cmNl
Q29kZUlkLCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VpQnJlYWtw
b2ludHModWlTb3VyY2VDb2RlSWQpW1N0cmluZyhsaW5lTnVtYmVyKV07CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludH0gdWlCcmVha3Bv
aW50CisgICAgICovCisgICAgX2FkZFVJQnJlYWtwb2ludDogZnVuY3Rpb24odWlCcmVha3BvaW50
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX3VpQnJlYWtwb2ludCh1aUJy
ZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQsIHVpQnJlYWtwb2ludC5saW5lTnVtYmVyKSk7CisgICAg
ICAgIHRoaXMuX3VpQnJlYWtwb2ludHModWlCcmVha3BvaW50LnVpU291cmNlQ29kZUlkKVt1aUJy
ZWFrcG9pbnQubGluZU51bWJlcl0gPSB1aUJyZWFrcG9pbnQ7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludH0gdWlCcmVha3BvaW50Cisg
ICAgICovCisgICAgX3JlbW92ZVVJQnJlYWtwb2ludDogZnVuY3Rpb24odWlCcmVha3BvaW50KQor
ICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdWlCcmVha3BvaW50KHVpQnJlYWtw
b2ludC51aVNvdXJjZUNvZGVJZCwgdWlCcmVha3BvaW50LmxpbmVOdW1iZXIpID09PSB1aUJyZWFr
cG9pbnQpOworICAgICAgICBkZWxldGUgdGhpcy5fdWlCcmVha3BvaW50cyh1aUJyZWFrcG9pbnQu
dWlTb3VyY2VDb2RlSWQpW3VpQnJlYWtwb2ludC5saW5lTnVtYmVyXTsKKyAgICAgICAgdWlCcmVh
a3BvaW50LmJyZWFrcG9pbnQucmVtb3ZlVUlCcmVha3BvaW50KCk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICAgICAqIEByZXR1cm4gez9PYmplY3QuPHN0
cmluZyxXZWJJbnNwZWN0b3IuQnJlYWtwb2ludD59CisgICAgICovCisgICAgX2JyZWFrcG9pbnRz
OiBmdW5jdGlvbihpZCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fYnJlYWtwb2ludHNCeVVJ
TG9jYXRpb25baWRdKQorICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNCeVVJTG9jYXRpb25b
aWRdID0ge307CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvbltp
ZF07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCiAgICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rv
ci5CcmVha3BvaW50fQogICAgICAqLwotICAgIF9icmVha3BvaW50OiBmdW5jdGlvbih1aVNvdXJj
ZUNvZGVJZCwgbGluZU51bWJlcikKKyAgICBfYnJlYWtwb2ludDogZnVuY3Rpb24oaWQsIGxpbmVO
dW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMoaWQpW1N0cmlu
ZyhsaW5lTnVtYmVyKV07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKKyAgICAgKi8KKyAgICBfYWRkQnJlYWtwb2lu
dDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9icmVh
a3BvaW50cyh1aVNvdXJjZUNvZGVJZClbU3RyaW5nKGxpbmVOdW1iZXIpXTsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQoIXRoaXMuX2JyZWFrcG9pbnQoYnJlYWtwb2ludC5pZCwgYnJlYWtwb2ludC5s
aW5lTnVtYmVyKSk7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzKGJyZWFrcG9pbnQuaWQpW2Jy
ZWFrcG9pbnQubGluZU51bWJlcl0gPSBicmVha3BvaW50OworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fSBicmVha3BvaW50CisgICAgICov
CisgICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQuaWQsIGJyZWFr
cG9pbnQubGluZU51bWJlcikgPT09IGJyZWFrcG9pbnQpOworICAgICAgICBkZWxldGUgdGhpcy5f
YnJlYWtwb2ludHMoYnJlYWtwb2ludC5pZClbYnJlYWtwb2ludC5saW5lTnVtYmVyXTsKICAgICB9
LAogCiAgICAgLyoqCkBAIC0yMjMsOCArMzEwLDggQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfZm9yRWFjaEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGhhbmRsZXIpCiAgICAgewotICAgICAgICBmb3IgKHZhciB1aVNvdXJjZUNvZGVJZCBp
biB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvbikgewotICAgICAgICAgICAgdmFyIGJyZWFr
cG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdOwor
ICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvbikgewor
ICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNCeVVJTG9jYXRp
b25baWRdOwogICAgICAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBicmVha3BvaW50cykK
ICAgICAgICAgICAgICAgICBoYW5kbGVyKGJyZWFrcG9pbnRzW2xpbmVOdW1iZXJdKTsKICAgICAg
ICAgfQpAQCAtMjQzLDcgKzMzMCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAqLwogICAgICAgICBmdW5jdGlvbiBkaWRTZXRCcmVha3Bv
aW50KGJyZWFrcG9pbnRJZCwgbG9jYXRpb25zKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
YnJlYWtwb2ludCA9PT0gdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlk
LCBicmVha3BvaW50LmxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludCA9
PT0gdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LmlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpIHsKICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fZGVsZXRlQnJlYWtwb2ludEZyb21VSShicmVha3BvaW50KTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjY4LDcgKzM1NSw3IEBAIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX3JlbW92ZUJyZWFrcG9p
bnRGcm9tRGVidWdnZXI6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewotICAgICAgICBpZiAo
ISgiX2RlYnVnZ2VySWQiIGluIGJyZWFrcG9pbnQpKQorICAgICAgICBpZiAodHlwZW9mKGJyZWFr
cG9pbnQuX2RlYnVnZ2VySWQpID09PSAidW5kZWZpbmVkIikKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQu
X2RlYnVnZ2VySWQpOwogICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNCeURlYnVnZ2Vy
SWRbYnJlYWtwb2ludC5fZGVidWdnZXJJZF07CkBAIC0zMjQsMTEgKzQxMSwxMiBAQCBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgKi8KICAgICAg
ICAgZnVuY3Rpb24gcmVzZXRPckRlbGV0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQucGVyc2lzdGVudCkgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBicmVha3BvaW50LnVpU291cmNlQ29kZTsKKyAgICAgICAgICAgIGlmIChicmVh
a3BvaW50LnVpQnJlYWtwb2ludCkKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVVSUJyZWFr
cG9pbnQoYnJlYWtwb2ludC51aUJyZWFrcG9pbnQpOworICAgICAgICAgICAgaWYgKGJyZWFrcG9p
bnQucGVyc2lzdGVudCkKICAgICAgICAgICAgICAgICBkZWxldGUgYnJlYWtwb2ludC5fZGVidWdn
ZXJMb2NhdGlvbjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
ZGVsZXRlQnJlYWtwb2ludEZyb21VSShicmVha3BvaW50KTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAg
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzQnlEZWJ1Z2dlcklkW2JyZWFrcG9p
bnQuX2RlYnVnZ2VySWRdOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNDMsMjAgKzQz
MSwyOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgaWYgKGVtcHR5KQogICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3Bv
aW50c0J5VUlMb2NhdGlvbltpZF07CiAgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaWQgaW4g
dGhpcy5fdWlCcmVha3BvaW50c0J5VUlMb2NhdGlvbikgeworICAgICAgICAgICAgdmFyIGVtcHR5
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gdGhpcy5fdWlCcmVh
a3BvaW50c0J5VUlMb2NhdGlvbltpZF0pIHsKKyAgICAgICAgICAgICAgICBlbXB0eSA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGVtcHR5KQorICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl91aUJyZWFrcG9pbnRzQnlVSUxv
Y2F0aW9uW2lkXTsKKyAgICAgICAgfQogICAgIH0KIH0KIAogLyoqCiAgKiBAY29uc3RydWN0b3IK
LSAqIEBwYXJhbSB7c3RyaW5nfSB1aVNvdXJjZUNvZGVJZAorICogQHBhcmFtIHtzdHJpbmd9IGlk
CiAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgogICogQHBhcmFtIHtzdHJpbmd9IGNvbmRp
dGlvbgogICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkCiAgKiBAcGFyYW0ge2Jvb2xlYW59IHBl
cnNpc3RlbnQKICAqLwotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQgPSBmdW5jdGlvbih1aVNvdXJj
ZUNvZGVJZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBwZXJzaXN0ZW50KQorV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnQgPSBmdW5jdGlvbihpZCwgbGluZU51bWJlciwgY29uZGl0aW9u
LCBlbmFibGVkLCBwZXJzaXN0ZW50KQogewotICAgIHRoaXMudWlTb3VyY2VDb2RlSWQgPSB1aVNv
dXJjZUNvZGVJZDsKKyAgICB0aGlzLmlkID0gaWQ7CiAgICAgdGhpcy5saW5lTnVtYmVyID0gbGlu
ZU51bWJlcjsKICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKICAgICB0aGlzLmVuYWJs
ZWQgPSBlbmFibGVkOwpAQCAtMzcwLDExICs0NjcsMzQgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnQucHJvdG90eXBlID0gewogICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgdmFyIHNlcmlhbGl6ZWRCcmVha3BvaW50ID0ge307Ci0gICAgICAgIHNlcmlhbGl6ZWRCcmVh
a3BvaW50LnNvdXJjZUZpbGVJZCA9IHRoaXMudWlTb3VyY2VDb2RlSWQ7CisgICAgICAgIHNlcmlh
bGl6ZWRCcmVha3BvaW50LnNvdXJjZUZpbGVJZCA9IHRoaXMuaWQ7CiAgICAgICAgIHNlcmlhbGl6
ZWRCcmVha3BvaW50LmxpbmVOdW1iZXIgPSB0aGlzLmxpbmVOdW1iZXI7CiAgICAgICAgIHNlcmlh
bGl6ZWRCcmVha3BvaW50LmNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uOwogICAgICAgICBzZXJp
YWxpemVkQnJlYWtwb2ludC5lbmFibGVkID0gdGhpcy5lbmFibGVkOwogICAgICAgICByZXR1cm4g
c2VyaWFsaXplZEJyZWFrcG9pbnQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEB0eXBlIHtX
ZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50fQorICAgICAqLworICAgIGdldCB1aUJyZWFrcG9pbnQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VpQnJlYWtwb2ludDsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJj
ZUNvZGUKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50fQorICAgICAq
LworICAgIGNyZWF0ZVVJQnJlYWtwb2ludDogZnVuY3Rpb24odWlTb3VyY2VDb2RlKQorICAgIHsK
KyAgICAgICAgdGhpcy5fdWlCcmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5VSUJyZWFrcG9p
bnQodWlTb3VyY2VDb2RlLCB0aGlzLmxpbmVOdW1iZXIsIHRoaXMuY29uZGl0aW9uLCB0aGlzLmVu
YWJsZWQsIHRoaXMpOworICAgICAgICByZXR1cm4gdGhpcy5fdWlCcmVha3BvaW50OworICAgIH0s
CisKKyAgICByZW1vdmVVSUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGRl
bGV0ZSB0aGlzLl91aUJyZWFrcG9pbnQ7CiAgICAgfQogfQogCkBAIC0zOTEsMyArNTExLDQzIEBA
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmRlc2VyaWFsaXplID0gZnVuY3Rpb24oc2VyaWFsaXpl
ZEJyZWFrcG9pbnQpCiAgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5lbmFibGVkLAog
ICAgICAgICAgICAgdHJ1ZSk7CiB9CisKKy8qKgorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKKyAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisg
KiBAcGFyYW0ge3N0cmluZ30gY29uZGl0aW9uCisgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQK
KyAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fQorICovCitXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludC5jcmVhdGUgPSBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNv
bmRpdGlvbiwgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCAhIXVp
U291cmNlQ29kZS51cmwpOworfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKKyAqIEBwYXJhbSB7bnVtYmVy
fSBsaW5lTnVtYmVyCisgKiBAcGFyYW0ge3N0cmluZ30gY29uZGl0aW9uCisgKiBAcGFyYW0ge2Jv
b2xlYW59IGVuYWJsZWQKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnR9IGJyZWFr
cG9pbnQKKyAqLworV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHVpU291cmNl
Q29kZSwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBicmVha3BvaW50KQoreworICAg
IHRoaXMudWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOworICAgIHRoaXMudWlTb3VyY2VDb2Rl
SWQgPSB1aVNvdXJjZUNvZGUuaWQ7CisgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsK
KyAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICB0aGlzLmVuYWJsZWQgPSBlbmFi
bGVkOworICAgIHRoaXMuYnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7CisgICAgdGhpcy5yZXNvbHZl
ZCA9IHRydWU7Cit9CisKK1dlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnQucHJvdG90eXBlID0gewor
ICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICBzb21lRnVuY3Rp
b246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgfSwKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2Rl
bC5qcwppbmRleCA0MTE2MWJmZDU4MDZhZTI1OWYzYWExZWVkYWUzMjMzOGY5NDg3NDcxLi4zYjdi
YTU1MzFmMDIxZGY1MjQ5NmMyMGMyY2UwODcwZmM3MjMzN2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRh
dGlvbk1vZGVsLmpzCkBAIC02Myw4ICs2Myw4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLkV2ZW50cyA9IHsKICAgICBVSVNvdXJjZUNvZGVSZW1vdmVkOiAic291cmNl
LWZpbGUtcmVtb3ZlZCIsCiAgICAgQ29uc29sZU1lc3NhZ2VBZGRlZDogImNvbnNvbGUtbWVzc2Fn
ZS1hZGRlZCIsCiAgICAgQ29uc29sZU1lc3NhZ2VzQ2xlYXJlZDogImNvbnNvbGUtbWVzc2FnZXMt
Y2xlYXJlZCIsCi0gICAgQnJlYWtwb2ludEFkZGVkOiAiYnJlYWtwb2ludC1hZGRlZCIsCi0gICAg
QnJlYWtwb2ludFJlbW92ZWQ6ICJicmVha3BvaW50LXJlbW92ZWQiLAorICAgIFVJQnJlYWtwb2lu
dEFkZGVkOiAidWktYnJlYWtwb2ludC1hZGRlZCIsCisgICAgVUlCcmVha3BvaW50UmVtb3ZlZDog
InVpLWJyZWFrcG9pbnQtcmVtb3ZlZCIsCiAgICAgRGVidWdnZXJQYXVzZWQ6ICJkZWJ1Z2dlci1w
YXVzZWQiLAogICAgIERlYnVnZ2VyUmVzdW1lZDogImRlYnVnZ2VyLXJlc3VtZWQiLAogICAgIERl
YnVnZ2VyUmVzZXQ6ICJkZWJ1Z2dlci1yZXNldCIsCkBAIC0xNTUsMTYgKzE1NSwxMCBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHZhciByZW1vdmVkSXRlbXMgPSAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3Vy
Y2VDb2RlPn0gKi8gZXZlbnQuZGF0YVsicmVtb3ZlZEl0ZW1zIl07CiAgICAgICAgIHZhciBhZGRl
ZEl0ZW1zID0gLyoqIEB0eXBlIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59ICov
IGV2ZW50LmRhdGFbImFkZGVkSXRlbXMiXTsKIAotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHJlbW92ZWRJdGVtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRz
ID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGUocmVt
b3ZlZEl0ZW1zW2ldKTsKLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gYnJlYWtw
b2ludHMpIHsKLSAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2xp
bmVOdW1iZXJdOwotICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkKGJyZWFr
cG9pbnQpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50LnVpU291cmNlQ29kZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3Jlc3RvcmVCcmVha3Bv
aW50cyhhZGRlZEl0ZW1zKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW1vdmVkSXRl
bXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci51aVNv
dXJjZUNvZGVSZW1vdmVkKHJlbW92ZWRJdGVtc1tpXSk7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYWRkZWRJdGVtcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9p
bnRNYW5hZ2VyLnVpU291cmNlQ29kZUFkZGVkKGFkZGVkSXRlbXNbaV0pOwogCiAgICAgICAgIGlm
ICghcmVtb3ZlZEl0ZW1zLmxlbmd0aCkgewogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhZGRlZEl0ZW1zLmxlbmd0aDsgKytpKQpAQCAtMTc5LDIwICsxNzMsNiBAQCBXZWJJbnNwZWN0
b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAg
IC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+fSB1
aVNvdXJjZUNvZGVMaXN0Ci0gICAgICovCi0gICAgX3Jlc3RvcmVCcmVha3BvaW50czogZnVuY3Rp
b24odWlTb3VyY2VDb2RlTGlzdCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dWlTb3VyY2VDb2RlTGlzdC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHVpU291cmNl
Q29kZSA9IHVpU291cmNlQ29kZUxpc3RbaV07Ci0gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50
TWFuYWdlci51aVNvdXJjZUNvZGVBZGRlZCh1aVNvdXJjZUNvZGUpOwotICAgICAgICAgICAgdmFy
IGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVSVNv
dXJjZUNvZGUodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIg
aW4gYnJlYWtwb2ludHMpCi0gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkKGJy
ZWFrcG9pbnRzW2xpbmVOdW1iZXJdKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKICAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQogICAg
ICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICovCkBAIC00NDksMjkgKzQyOSwyNyBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgLyoq
CiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUK
ICAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEByZXR1cm4ge1dlYklu
c3BlY3Rvci5CcmVha3BvaW50fHVuZGVmaW5lZH0KKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuVUlCcmVha3BvaW50fHVuZGVmaW5lZH0KICAgICAgKi8KICAgICBmaW5kQnJlYWtwb2ludDog
ZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlKHVpU291
cmNlQ29kZSlbbGluZU51bWJlcl07CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50TWFu
YWdlci5icmVha3BvaW50c0ZvclVJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUpW1N0cmluZyhsaW5l
TnVtYmVyKV07CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSUJy
ZWFrcG9pbnR9IHVpQnJlYWtwb2ludAogICAgICAqLwotICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24odWlCcmVh
a3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlKQotICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludCk7
CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSUJyZWFrcG9pbnRBZGRlZCwgdWlCcmVha3Bv
aW50KTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludH0gYnJlYWtwb2ludAorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJQnJlYWtw
b2ludH0gdWlCcmVha3BvaW50CiAgICAgICovCi0gICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5j
dGlvbihicmVha3BvaW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24odWlCcmVh
a3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlKQotICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCBicmVha3BvaW50
KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLlVJQnJlYWtwb2ludFJlbW92ZWQsIHVpQnJl
YWtwb2ludCk7CiAgICAgfSwKIAogICAgIF9kZWJ1Z2dlclBhdXNlZDogZnVuY3Rpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpp
bmRleCA3MTZiZmZkMzBhZmY5ZGQ1NTdmMDgzODEzM2VkNGI2ODNlNjkzZjc3Li4yZjJlOGQyMjIz
N2M4MzA0YmQ5ZjVhNTBkNTg0Y2I3NDU5MjY5MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMTc3LDggKzE3Nyw4IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbihwcmVzZW50YXRpb25Nb2RlbCkK
ICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSVNvdXJjZUNvZGVSZW1vdmVkLCB0
aGlzLl91aVNvdXJjZUNvZGVSZW1vdmVkLCB0aGlzKTsKICAgICB0aGlzLl9wcmVzZW50YXRpb25N
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1v
ZGVsLkV2ZW50cy5Db25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZUFkZGVk
LCB0aGlzKTsKICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5Db25zb2xlTWVzc2Fn
ZXNDbGVhcmVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZXNDbGVhcmVkLCB0aGlzKTsKLSAgICB0aGlz
Ll9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
clByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9p
bnRBZGRlZCwgdGhpcyk7Ci0gICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVudHMuQnJlYWtw
b2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAgICB0aGlzLl9w
cmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclBy
ZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSUJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fdWlCcmVha3Bv
aW50QWRkZWQsIHRoaXMpOworICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLlVJQnJl
YWtwb2ludFJlbW92ZWQsIHRoaXMuX3VpQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwogICAgIHRo
aXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCB0aGlzLl9kZWJ1Z2dl
clBhdXNlZCwgdGhpcyk7CiAgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVudHMuRGVidWdn
ZXJSZXN1bWVkLCB0aGlzLl9kZWJ1Z2dlclJlc3VtZWQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXNl
bnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuRXZlbnRzLkNhbGxGcmFtZVNlbGVjdGVkLCB0aGlzLl9jYWxsRnJhbWVTZWxl
Y3RlZCwgdGhpcyk7CkBAIC0zMDgsMjYgKzMwOCwyNiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1Bh
bmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZE1lc3NhZ2VUb1Nv
dXJjZShtZXNzYWdlLmxpbmVOdW1iZXIsIG1lc3NhZ2Uub3JpZ2luYWxNZXNzYWdlKTsKICAgICB9
LAogCi0gICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX3VpQnJlYWtw
b2ludEFkZGVkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50
ID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdmFyIHVpQnJlYWtwb2ludCA9IC8qKiBAdHlwZSB7V2Vi
SW5zcGVjdG9yLlVJQnJlYWtwb2ludH0gKi8gZXZlbnQuZGF0YTsKIAotICAgICAgICB2YXIgc291
cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFtZXNCeVVJU291cmNlQ29kZS5nZXQoYnJlYWtwb2lu
dC51aVNvdXJjZUNvZGUpCisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZy
YW1lc0J5VUlTb3VyY2VDb2RlLmdldCh1aUJyZWFrcG9pbnQudWlTb3VyY2VDb2RlKQogICAgICAg
ICBpZiAoc291cmNlRnJhbWUgJiYgc291cmNlRnJhbWUubG9hZGVkKQotICAgICAgICAgICAgc291
cmNlRnJhbWUuYWRkQnJlYWtwb2ludChicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQu
cmVzb2x2ZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQpOworICAg
ICAgICAgICAgc291cmNlRnJhbWUuYWRkQnJlYWtwb2ludCh1aUJyZWFrcG9pbnQubGluZU51bWJl
ciwgdWlCcmVha3BvaW50LnJlc29sdmVkLCB1aUJyZWFrcG9pbnQuY29uZGl0aW9uLCB1aUJyZWFr
cG9pbnQuZW5hYmxlZCk7CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50
cy5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5q
c0JyZWFrcG9pbnRzLmFkZEJyZWFrcG9pbnQodWlCcmVha3BvaW50KTsKICAgICB9LAogCi0gICAg
X2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfdWlCcmVha3BvaW50UmVt
b3ZlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2
ZW50LmRhdGE7CisgICAgICAgIHZhciB1aUJyZWFrcG9pbnQgPSAvKiogQHR5cGUge1dlYkluc3Bl
Y3Rvci5VSUJyZWFrcG9pbnR9ICovIGV2ZW50LmRhdGE7CiAKLSAgICAgICAgdmFyIHNvdXJjZUZy
YW1lID0gdGhpcy5fc291cmNlRnJhbWVzQnlVSVNvdXJjZUNvZGUuZ2V0KGJyZWFrcG9pbnQudWlT
b3VyY2VDb2RlKQorICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFtZXNC
eVVJU291cmNlQ29kZS5nZXQodWlCcmVha3BvaW50LnVpU291cmNlQ29kZSkKICAgICAgICAgaWYg
KHNvdXJjZUZyYW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkKLSAgICAgICAgICAgIHNvdXJjZUZy
YW1lLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICAgICAgICAg
IHNvdXJjZUZyYW1lLnJlbW92ZUJyZWFrcG9pbnQodWlCcmVha3BvaW50LmxpbmVOdW1iZXIpOwog
Ci0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmpzQnJlYWtwb2ludHMucmVtb3ZlQnJlYWtwb2lu
dChicmVha3BvaW50LnVpU291cmNlQ29kZSwgYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICAg
ICAgdGhpcy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5yZW1vdmVCcmVha3BvaW50KHVpQnJl
YWtwb2ludC51aVNvdXJjZUNvZGUsIHVpQnJlYWtwb2ludC5saW5lTnVtYmVyKTsKICAgICB9LAog
CiAgICAgX2NvbnNvbGVDb21tYW5kRXZhbHVhdGVkSW5TZWxlY3RlZENhbGxGcmFtZTogZnVuY3Rp
b24oZXZlbnQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggY2U5ZjQxY2VkMDYwMzQzYWEzMDUxZTA2NjE4NjNkYTA4NjQ2NDM5
NC4uMWY2YjYzNTBmOGRiMmI2YzRiYjU0NTZmNzE5ZjQ4MWU1M2EzZjVlMCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDEyLTAzLTIwICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4dHJhY3QgV2ViSW5zcGVjdG9yLlVJQnJl
YWtwb2ludCBmcm9tIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVha3Bv
aW50LW1hbmFnZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9i
cmVha3BvaW50LW1hbmFnZXIuaHRtbDoKKwogMjAxMi0wMy0xOSAgUm9iZXJ0IEtyb2VnZXIgIDxy
amtyb2VnZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBmYXN0L2V2ZW50cy90
b3VjaC9nZXN0dXJlL3BhZC1nZXN0dXJlLWZsaW5nLmh0bWwgZmFpbHMgb24gcmVsZWFzZSBidWls
ZHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50
LW1hbmFnZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrcG9pbnQtbWFuYWdlci1leHBlY3RlZC50eHQKaW5kZXggMTc1ZTUwZGRlYmVhNGNmOTQ3MjE5
NjQ0NzlhNjA5MTM3M2ViNTY1NS4uZTRmYWM0MDlmY2NhNzk2ZDg5MmNlOWFiNTFmMTFmZjExOTMx
NDIxYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9p
bnQtbWFuYWdlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyL2JyZWFrcG9pbnQtbWFuYWdlci1leHBlY3RlZC50eHQKQEAgLTIsMTYgKzIsMTQgQEAgVGVz
dHMgQnJlYWtwb2ludE1hbmFnZXIgY2xhc3MuCiAKIAogUnVubmluZzogdWlTb3VyY2VDb2RlQWRk
ZWQKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjApCiBicmVha3BvaW50QWRk
ZWQoYS5qcywgMTAsIGZvbyA9PSBiYXIsIHRydWUpCiBicmVha3BvaW50QWRkZWQoYS5qcywgMjAs
ICwgZmFsc2UpCi1icmVha3BvaW50QWRkZWQoYi5qcywgMywgLCB0cnVlKQotZGVidWdnZXJNb2Rl
bC5zZXRCcmVha3BvaW50KGEuanM6MTA6MCkKIAogUnVubmluZzogc2V0QW5kUmVtb3ZlQnJlYWtw
b2ludHMKK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjApCiBicmVha3BvaW50
QWRkZWQoYS5qcywgMTAsIGZvbyA9PSBiYXIsIHRydWUpCiBicmVha3BvaW50QWRkZWQoYS5qcywg
MjAsICwgZmFsc2UpCi1icmVha3BvaW50QWRkZWQoYi5qcywgMywgLCB0cnVlKQotZGVidWdnZXJN
b2RlbC5zZXRCcmVha3BvaW50KGEuanM6MTA6MCkKIGJyZWFrcG9pbnRBZGRlZChhLmpzLCAzMCwg
LCB0cnVlKQogZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MzA6MCkKIGJyZWFrcG9p
bnRSZW1vdmVkKGEuanMsIDMwKQpAQCAtMzEsMjEgKzI5LDIxIEBAIGJyZWFrcG9pbnRBZGRlZChh
LmpzLCAxNSwgLCB0cnVlKQogZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MTU6MCkK
IAogUnVubmluZzogdGVzdE5hdmlnYXRpb24KK2RlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChh
LmpzOjEwOjApCiBicmVha3BvaW50QWRkZWQoYS5qcywgMTAsIGZvbyA9PSBiYXIsIHRydWUpCiBi
cmVha3BvaW50QWRkZWQoYS5qcywgMjAsICwgZmFsc2UpCi1icmVha3BvaW50QWRkZWQoYi5qcywg
MywgLCB0cnVlKQotZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MTA6MCkKIAogTmF2
aWdhdGUgdG8gQi4KIGRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChiLmpzOjM6MCkKK2JyZWFr
cG9pbnRBZGRlZChiLmpzLCAzLCAsIHRydWUpCiAKIE5hdmlnYXRlIGJhY2sgdG8gQS4KLWJyZWFr
cG9pbnRSZW1vdmVkKGEuanMsIDEwKQogYnJlYWtwb2ludEFkZGVkKGEuanMsIDExLCBmb28gPT0g
YmFyLCB0cnVlKQorYnJlYWtwb2ludEFkZGVkKGEuanMsIDIwLCAsIGZhbHNlKQogCiBSdW5uaW5n
OiB0ZXN0Rm9ybWF0dGluZwotYnJlYWtwb2ludEFkZGVkKGMuanMsIDQsICwgdHJ1ZSkKIGRlYnVn
Z2VyTW9kZWwuc2V0QnJlYWtwb2ludChjLmpzOjQ6MCkKK2JyZWFrcG9pbnRBZGRlZChjLmpzLCA0
LCAsIHRydWUpCiAKIEZvcm1hdCBzb3VyY2UuCiBkZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9p
bnQoYy5qczo0OjApCkBAIC01OSw2ICs1Nyw4IEBAIGJyZWFrcG9pbnRBZGRlZChkZW9iZnVzY2F0
ZWQ6Yy5qcywgMTIsICwgdHJ1ZSkKIGRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChjLmpzOjY6
MCkKIAogUmVsb2FkLgorYnJlYWtwb2ludEFkZGVkKGRlb2JmdXNjYXRlZDpjLmpzLCA0LCAsIHRy
dWUpCiticmVha3BvaW50QWRkZWQoZGVvYmZ1c2NhdGVkOmMuanMsIDEyLCAsIHRydWUpCiBicmVh
a3BvaW50UmVtb3ZlZChkZW9iZnVzY2F0ZWQ6Yy5qcywgNCkKIGJyZWFrcG9pbnRBZGRlZChkZW9i
ZnVzY2F0ZWQ6Yy5qcywgNiwgLCB0cnVlKQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLmh0bWwKaW5kZXggZTg3ODUwZWM5N2E1
MTMwN2E1MzI0YjdhN2Y1ZDViOGRjYWM4ZWU1My4uMjdkYmQxM2NiYTM5YjIwM2MzNGQwOGUxZGY5
NTIxMGJkNDUyZWY3ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L2JyZWFrcG9pbnQtbWFuYWdlci5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbApAQCAtNzksNiArNzksMTIgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
KGJyZWFrcG9pbnRTdG9yYWdlLCBicmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnRSZW1vdmVkLCBk
ZWJ1Z2dlck1vZGVsLCBzY3JpcHRNYXBwaW5nKTsKICAgICB9CiAKKyAgICBmdW5jdGlvbiByZXNl
dERlYnVnZ2VyTW9kZWwoYnJlYWtwb2ludE1hbmFnZXIpCisgICAgeworICAgICAgICB1aUJyZWFr
cG9pbnRzID0ge307CisgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2VyLmRlYnVnZ2VyUmVzZXQoKTsK
KyAgICB9CisKICAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RTdWl0ZShbCiAgICAgICAgIGZ1bmN0
aW9uIHVpU291cmNlQ29kZUFkZGVkKG5leHQpCiAgICAgICAgIHsKQEAgLTg5LDcgKzk1LDcgQEAg
ZnVuY3Rpb24gdGVzdCgpCiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrUmVzdWx0cygpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYS5qczoxMCI6ImZv
byA9PSBiYXJ8dHJ1ZSIsImEuanM6MjAiOiJ8ZmFsc2UiLCJiLmpzOjMiOiJ8dHJ1ZSJ9LCB1aUJy
ZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwIjoiZm9v
ID09IGJhcnx0cnVlIiwiYS5qczoyMCI6InxmYWxzZSJ9LCB1aUJyZWFrcG9pbnRzKTsKICAgICAg
ICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwOjAiOiAiZm9vID09IGJhciJ9LCBkZWJ1
Z2dlckJyZWFrcG9pbnRzKTsKICAgICAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICB9
CkBAIC0xNjUsNyArMTcxLDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAgICAgYXNz
ZXJ0RXF1YWxzKHsiYS5qczoxMDowIjoiZm9vID09IGJhciJ9LCBkZWJ1Z2dlckJyZWFrcG9pbnRz
KTsKIAogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJcbk5hdmlnYXRl
IHRvIEIuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIuZGVidWdnZXJSZXNl
dCgpOworICAgICAgICAgICAgICAgIHJlc2V0RGVidWdnZXJNb2RlbChicmVha3BvaW50TWFuYWdl
cik7CiAKICAgICAgICAgICAgICAgICBicmVha3BvaW50TWFuYWdlci51aVNvdXJjZUNvZGVBZGRl
ZCh1aVNvdXJjZUNvZGVCKTsKICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KG5hdmlnYXRlVG9B
LCAwKTsKQEAgLTE3MywxMSArMTc5LDExIEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgICAg
ICBmdW5jdGlvbiBuYXZpZ2F0ZVRvQSgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
YXNzZXJ0RXF1YWxzKHsiYS5qczoxMCI6ImZvbyA9PSBiYXJ8dHJ1ZSIsImEuanM6MjAiOiJ8ZmFs
c2UiLCJiLmpzOjMiOiJ8dHJ1ZSJ9LCB1aUJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnRFcXVhbHMoeyJiLmpzOjMiOiJ8dHJ1ZSJ9LCB1aUJyZWFrcG9pbnRzKTsKICAgICAgICAg
ICAgICAgICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwOjAiOiJmb28gPT0gYmFyIiwiYi5qczozOjAi
OiIifSwgZGVidWdnZXJCcmVha3BvaW50cyk7CiAKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFkZFJlc3VsdCgiXG5OYXZpZ2F0ZSBiYWNrIHRvIEEuIik7Ci0gICAgICAgICAgICAgICAg
YnJlYWtwb2ludE1hbmFnZXIuZGVidWdnZXJSZXNldCgpOworICAgICAgICAgICAgICAgIHJlc2V0
RGVidWdnZXJNb2RlbChicmVha3BvaW50TWFuYWdlcik7CiAKICAgICAgICAgICAgICAgICB2YXIg
ZXZlbnREYXRhID0geyBicmVha3BvaW50SWQ6ICJhLmpzOjEwOjAiLCBsb2NhdGlvbjogeyBzY3Jp
cHRJZDogImEuanMiLCBsaW5lTnVtYmVyOiAxMSwgY29sdW1uTnVtYmVyOiA1IH19OwogICAgICAg
ICAgICAgICAgIGRlYnVnZ2VyTW9kZWwuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVzb2x2ZWQsIGV2ZW50RGF0YSk7
CkBAIC0xODcsNyArMTkzLDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAKICAgICAgICAgICAgIGZ1bmN0
aW9uIGNoZWNrUmVzdWx0cygpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0
RXF1YWxzKHsiYS5qczoyMCI6InxmYWxzZSIsImIuanM6MyI6Inx0cnVlIiwiYS5qczoxMSI6ImZv
byA9PSBiYXJ8dHJ1ZSJ9LCB1aUJyZWFrcG9pbnRzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRF
cXVhbHMoeyJhLmpzOjIwIjoifGZhbHNlIiwiYS5qczoxMSI6ImZvbyA9PSBiYXJ8dHJ1ZSJ9LCB1
aUJyZWFrcG9pbnRzKTsKICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwOjAi
OiJmb28gPT0gYmFyIiwiYi5qczozOjAiOiIifSwgZGVidWdnZXJCcmVha3BvaW50cyk7CiAgICAg
ICAgICAgICAgICAgY2hlY2tCcmVha3BvaW50U3RvcmFnZShbeyJzb3VyY2VGaWxlSWQiOiJhLmpz
IiwibGluZU51bWJlciI6MTEsImNvbmRpdGlvbiI6ImZvbyA9PSBiYXIiLCJlbmFibGVkIjp0cnVl
fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InNvdXJjZUZpbGVJ
ZCI6ImEuanMiLCJsaW5lTnVtYmVyIjoyMCwiY29uZGl0aW9uIjoiIiwiZW5hYmxlZCI6ZmFsc2V9
LApAQCAtMjQyLDcgKzI0OCw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAgIGFz
c2VydEVxdWFscyh7ImMuanM6MjowIjoiIiwiYy5qczo2OjAiOiIifSwgZGVidWdnZXJCcmVha3Bv
aW50cyk7CiAKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiXG5SZWxv
YWQuIik7Ci0gICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIuZGVidWdnZXJSZXNldCgp
OworICAgICAgICAgICAgICAgIHJlc2V0RGVidWdnZXJNb2RlbChicmVha3BvaW50TWFuYWdlcik7
CiAKICAgICAgICAgICAgICAgICBicmVha3BvaW50TWFuYWdlci51aVNvdXJjZUNvZGVBZGRlZChm
b3JtYXR0ZWRVSVNvdXJjZUNvZGUpOwogICAgICAgICAgICAgICAgIHZhciBldmVudERhdGEgPSB7
IGJyZWFrcG9pbnRJZDogImMuanM6MjowIiwgbG9jYXRpb246IHsgc2NyaXB0SWQ6ICJjLmpzIiwg
bGluZU51bWJlcjogMywgY29sdW1uTnVtYmVyOiAwIH19Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133015</attachid>
            <date>2012-03-21 05:12:56 -0700</date>
            <delta_ts>2012-03-21 11:03:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81669-20120321161254.patch</filename>
            <type>text/plain</type>
            <size>33066</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFlNmVjNTgwYWE4OTM2
OTMwYmRkMWExOWZiNjJlMWY2ZDJlMTZjZC4uOGExZDg2YTRlNjRiZmJmZjU5NmFhOTVmMjY5ZjQw
ODVkOTQyYTdjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAzLTIwICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEV4dHJhY3QgV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCBmcm9tIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODE2NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuZ2V0IGZvcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLnByb3RvdHlwZS51aVNvdXJjZUNvZGVBZGRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnVpU291cmNlQ29kZVJlbW92ZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5icmVha3Bv
aW50c0ZvclVJU291cmNlQ29kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2lubmVyUmVtb3ZlQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LnJlbW92ZUFsbEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnRUb1VJKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fbW92
ZUJyZWFrcG9pbnRJblVJKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5wcm90b3R5cGUuX3VpQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fdWlCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2FkZFVJQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9yZW1vdmVVSUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5fYnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLnByb3RvdHlwZS5fYnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fZm9yRWFjaEJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZS5fc2V0QnJlYWtwb2ludEluRGVidWdnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludEZyb21EZWJ1Z2dlcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmRlYnVn
Z2VyUmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQucHJvdG90eXBlLnNlcmlhbGl6ZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuZ2V0IHVpQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5wcm90b3R5cGUuY3JlYXRlVUlCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZS5yZW1vdmVVSUJy
ZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuY3JlYXRlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlVJQnJlYWtwb2ludC5wcm90b3R5cGUuc29tZUZ1bmN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2hhbmRsZVVJU291
cmNlQ29kZUxpc3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLnByb3RvdHlwZS5maW5kQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90
b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qczoKKwogMjAxMi0wMy0yMSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbUXRdW1dLMl1bTWFjXSBNaW5pQnJvd3NlciBhc3NlcnRzIGF0
IEhhc2hUYWJsZS5oOjQ4MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKaW5kZXggMjg0YTczZTE1MGExNWQzM2JlMjcy
NGRlMDUyNTI0NjY3ODYyMzI5Zi4uYzI2YWMwOWVjMGE2NGZiNzljMjVmMmRjY2YwNTc5YjkwZjdh
OWU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50TWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC0zMSw4ICszMSw4IEBACiAvKioKICAqIEBjb25zdHJ1
Y3RvcgogICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2V0dGluZ30gYnJlYWtwb2ludFN0b3JhZ2UK
LSAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpfSBicmVha3BvaW50
QWRkZWREZWxlZ2F0ZQotICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dCl9IGJyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5z
cGVjdG9yLlVJQnJlYWtwb2ludCl9IGJyZWFrcG9pbnRBZGRlZERlbGVnYXRlCisgKiBAcGFyYW0g
e2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnQpfSBicmVha3BvaW50UmVtb3ZlZERl
bGVnYXRlCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsfSBkZWJ1Z2dlck1v
ZGVsCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5NYWluU2NyaXB0TWFwcGluZ30gc2NyaXB0TWFw
cGluZwogICovCkBAIC00Miw2ICs0MiwxMCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIgPSBmdW5jdGlvbihicmVha3BvaW50U3RvcmFnZSwgYnJlYWtwb2ludEFkZGVkRGVsZQogICAg
IHRoaXMuX2JyZWFrcG9pbnRBZGRlZERlbGVnYXRlID0gYnJlYWtwb2ludEFkZGVkRGVsZWdhdGU7
CiAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWREZWxlZ2F0ZSA9IGJyZWFrcG9pbnRSZW1vdmVk
RGVsZWdhdGU7CiAgICAgLyoqCisgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBPYmplY3Qu
PHN0cmluZyxXZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50Pj59CisgICAgICovCisgICAgdGhpcy5f
dWlCcmVha3BvaW50c0J5VUlMb2NhdGlvbiA9IHt9OworICAgIC8qKgogICAgICAqIEB0eXBlIHtP
YmplY3QuPHN0cmluZywgT2JqZWN0LjxzdHJpbmcsV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQ+Pn0K
ICAgICAgKi8KICAgICB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvbiA9IHt9OwpAQCAtNTgs
OCArNjIsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbihicmVh
a3BvaW50U3RvcmFnZSwgYnJlYWtwb2ludEFkZGVkRGVsZQogICAgIHZhciBicmVha3BvaW50cyA9
IHRoaXMuX2JyZWFrcG9pbnRTdG9yYWdlLmdldCgpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5kZXNlcmlhbGl6ZShicmVha3BvaW50c1tpXSk7Ci0gICAgICAg
IGlmICghdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBicmVha3Bv
aW50LmxpbmVOdW1iZXIpKQotICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvVUkoYnJl
YWtwb2ludCk7CisgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAg
fQogfQogCkBAIC03MiwxOSArNzUsMzYgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2lu
dHModWlTb3VyY2VDb2RlLmlkKTsKICAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBicmVh
a3BvaW50cykgewogICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tsaW5l
TnVtYmVyXTsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlID0gdWlTb3VyY2VD
b2RlOworICAgICAgICAgICAgdmFyIHVpQnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY3JlYXRlVUlC
cmVha3BvaW50KHVpU291cmNlQ29kZSk7CisgICAgICAgICAgICB0aGlzLl9hZGRVSUJyZWFrcG9p
bnQodWlCcmVha3BvaW50KTsKICAgICAgICAgICAgIHRoaXMuX21hdGVyaWFsaXplQnJlYWtwb2lu
dChicmVha3BvaW50LCB1aVNvdXJjZUNvZGUpOwogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQu
X2RlYnVnZ2VyTG9jYXRpb24pCiAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludERlYnVn
Z2VyTG9jYXRpb25DaGFuZ2VkKGJyZWFrcG9pbnQpOworICAgICAgICAgICAgdGhpcy5fYnJlYWtw
b2ludEFkZGVkRGVsZWdhdGUodWlCcmVha3BvaW50KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNl
Q29kZQorICAgICAqLworICAgIHVpU291cmNlQ29kZVJlbW92ZWQ6IGZ1bmN0aW9uKHVpU291cmNl
Q29kZSkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX2JyZWFrcG9pbnRz
KHVpU291cmNlQ29kZS5pZCk7CisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gYnJlYWtw
b2ludHMpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbbGluZU51
bWJlcl07CisgICAgICAgICAgICB2YXIgdWlCcmVha3BvaW50ID0gYnJlYWtwb2ludC51aUJyZWFr
cG9pbnQKKyAgICAgICAgICAgIHRoaXMuX3JlbW92ZVVJQnJlYWtwb2ludCh1aUJyZWFrcG9pbnQp
OworICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWREZWxlZ2F0ZSh1aUJyZWFrcG9p
bnQpOwogICAgICAgICB9CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCisgICAgICogQHJldHVybiB7T2JqZWN0
LjxzdHJpbmcsV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludD58dW5kZWZpbmVkfQogICAgICAqLwog
ICAgIGJyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHModWlTb3VyY2VDb2RlLmlkKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3VpQnJlYWtwb2ludHModWlTb3VyY2VDb2RlLmlkKTsKICAg
ICB9LAogCiAgICAgLyoqCkBAIC05NSwxMiArMTE1LDEwIEBAIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgc2V0QnJlYWtwb2ludDogZnVu
Y3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpCiAgICAg
ewotICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludCh1aVNvdXJjZUNvZGUuaWQsIGxpbmVOdW1i
ZXIpKQorICAgICAgICBpZiAodGhpcy5fdWlCcmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGlu
ZU51bWJlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHBlcnNpc3RlbnQg
PSAhIXVpU291cmNlQ29kZS51cmw7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlciwgY29uZGl0aW9u
LCBlbmFibGVkLCBwZXJzaXN0ZW50KTsKLSAgICAgICAgYnJlYWtwb2ludC51aVNvdXJjZUNvZGUg
PSB1aVNvdXJjZUNvZGU7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQuY3JlYXRlKHVpU291cmNlQ29kZSwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFi
bGVkKTsKKyAgICAgICAgdmFyIHVpQnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY3JlYXRlVUlCcmVh
a3BvaW50KHVpU291cmNlQ29kZSk7CiAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1VJKGJy
ZWFrcG9pbnQpOwogICAgICAgICB0aGlzLl9tYXRlcmlhbGl6ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dCwgdWlTb3VyY2VDb2RlKTsKICAgICB9LApAQCAtMTExLDE2ICsxMjksMTYgQEAgV2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICByZW1vdmVC
cmVha3BvaW50OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIpCiAgICAgewotICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnQodWlTb3VyY2VDb2RlLmlkLCBs
aW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50KQorICAgICAgICB2YXIgdWlCcmVh
a3BvaW50ID0gdGhpcy5fdWlCcmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlcik7
CisgICAgICAgIGlmICghdWlCcmVha3BvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9pbm5l
clJlbW92ZUJyZWFrcG9pbnQodWlCcmVha3BvaW50LmJyZWFrcG9pbnQpOwogICAgIH0sCiAKICAg
ICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fSBicmVha3BvaW50
CiAgICAgICovCi0gICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisg
ICAgX2lubmVyUmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkoYnJlYWtwb2ludCk7CiAgICAgICAg
IHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tRGVidWdnZXIoYnJlYWtwb2ludCk7CkBAIC0xMjgs
NyArMTQ2LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
IAogICAgIHJlbW92ZUFsbEJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0
aGlzLl9mb3JFYWNoQnJlYWtwb2ludCh0aGlzLl9yZW1vdmVCcmVha3BvaW50LmJpbmQodGhpcykp
OworICAgICAgICB0aGlzLl9mb3JFYWNoQnJlYWtwb2ludCh0aGlzLl9pbm5lclJlbW92ZUJyZWFr
cG9pbnQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTY1LDEwICsxODMsMTMg
QEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8K
ICAgICBfYWRkQnJlYWtwb2ludFRvVUk6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewotICAg
ICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNl
Q29kZUlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIpKTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dHMoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZClbYnJlYWtwb2ludC5saW5lTnVtYmVyXSA9IGJy
ZWFrcG9pbnQ7CisgICAgICAgIHZhciB1aUJyZWFrcG9pbnQgPSBicmVha3BvaW50LnVpQnJlYWtw
b2ludDsKKyAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICAgICAg
dGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZERl
bGVnYXRlKGJyZWFrcG9pbnQpOworICAgICAgICBpZiAoIXVpQnJlYWtwb2ludCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fYWRkVUlCcmVha3BvaW50KHVpQnJlYWtwb2ludCk7
CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZERlbGVnYXRlKHVpQnJlYWtwb2ludCk7CiAg
ICAgfSwKIAogICAgIC8qKgpAQCAtMTc2LDEwICsxOTcsMTMgQEAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfZGVsZXRlQnJlYWtwb2lu
dEZyb21VSTogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuX2JyZWFrcG9pbnQoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2lu
dC5saW5lTnVtYmVyKSA9PT0gYnJlYWtwb2ludCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9icmVh
a3BvaW50cyhicmVha3BvaW50LnVpU291cmNlQ29kZUlkKVticmVha3BvaW50LmxpbmVOdW1iZXJd
OworICAgICAgICB2YXIgdWlCcmVha3BvaW50ID0gYnJlYWtwb2ludC51aUJyZWFrcG9pbnQ7Cisg
ICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAgICAgIHRoaXMu
X3NhdmVCcmVha3BvaW50cygpOwotICAgICAgICB0aGlzLl9icmVha3BvaW50UmVtb3ZlZERlbGVn
YXRlKGJyZWFrcG9pbnQpOworICAgICAgICBpZiAoIXVpQnJlYWtwb2ludCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdGhpcy5fcmVtb3ZlVUlCcmVha3BvaW50KHVpQnJlYWtwb2ludCk7
CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGUodWlCcmVha3BvaW50KTsK
ICAgICB9LAogCiAgICAgLyoqCkBAIC0xODksMzMgKzIxMyw5NiBAQCBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9tb3ZlQnJlYWtwb2lu
dEluVUk6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIGxpbmVOdW1iZXIpCiAgICAgeworICAgICAgICB2
YXIgdWlTb3VyY2VDb2RlOworICAgICAgICBpZiAoYnJlYWtwb2ludC51aUJyZWFrcG9pbnQpCisg
ICAgICAgICAgICB1aVNvdXJjZUNvZGUgPSBicmVha3BvaW50LnVpQnJlYWtwb2ludC51aVNvdXJj
ZUNvZGU7CiAgICAgICAgIHRoaXMuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkoYnJlYWtwb2ludCk7
Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQs
IGxpbmVOdW1iZXIpKQorICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50Lmlk
LCBsaW5lTnVtYmVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWtw
b2ludC5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgaWYgKHVpU291cmNlQ29kZSkK
KyAgICAgICAgICAgIGJyZWFrcG9pbnQuY3JlYXRlVUlCcmVha3BvaW50KHVpU291cmNlQ29kZSk7
CiAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1VJKGJyZWFrcG9pbnQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVp
U291cmNlQ29kZUlkCi0gICAgICogQHJldHVybiB7P09iamVjdC48c3RyaW5nLFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50Pn0KKyAgICAgKiBAcmV0dXJuIHs/T2JqZWN0LjxzdHJpbmcsV2ViSW5zcGVj
dG9yLlVJQnJlYWtwb2ludD59CiAgICAgICovCi0gICAgX2JyZWFrcG9pbnRzOiBmdW5jdGlvbih1
aVNvdXJjZUNvZGVJZCkKKyAgICBfdWlCcmVha3BvaW50czogZnVuY3Rpb24odWlTb3VyY2VDb2Rl
SWQpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9uW3Vp
U291cmNlQ29kZUlkXSkKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9u
W3VpU291cmNlQ29kZUlkXSA9IHt9OwotICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNC
eVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdOworICAgICAgICBpZiAoIXRoaXMuX3VpQnJlYWtw
b2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdKQorICAgICAgICAgICAgdGhpcy5fdWlC
cmVha3BvaW50c0J5VUlMb2NhdGlvblt1aVNvdXJjZUNvZGVJZF0gPSB7fTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3VpQnJlYWtwb2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdOwogICAg
IH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdWlTb3VyY2VDb2RlSWQKICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEByZXR1cm4gez9XZWJJbnNw
ZWN0b3IuVUlCcmVha3BvaW50fQorICAgICAqLworICAgIF91aUJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KHVpU291cmNlQ29kZUlkLCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3VpQnJlYWtwb2ludHModWlTb3VyY2VDb2RlSWQpW1N0cmluZyhsaW5lTnVtYmVyKV07CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludH0g
dWlCcmVha3BvaW50CisgICAgICovCisgICAgX2FkZFVJQnJlYWtwb2ludDogZnVuY3Rpb24odWlC
cmVha3BvaW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX3VpQnJlYWtw
b2ludCh1aUJyZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQsIHVpQnJlYWtwb2ludC5saW5lTnVtYmVy
KSk7CisgICAgICAgIHRoaXMuX3VpQnJlYWtwb2ludHModWlCcmVha3BvaW50LnVpU291cmNlQ29k
ZUlkKVt1aUJyZWFrcG9pbnQubGluZU51bWJlcl0gPSB1aUJyZWFrcG9pbnQ7CisgICAgfSwKKwor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludH0gdWlCcmVh
a3BvaW50CisgICAgICovCisgICAgX3JlbW92ZVVJQnJlYWtwb2ludDogZnVuY3Rpb24odWlCcmVh
a3BvaW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fdWlCcmVha3BvaW50
KHVpQnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgdWlCcmVha3BvaW50LmxpbmVOdW1iZXIpID09
PSB1aUJyZWFrcG9pbnQpOworICAgICAgICBkZWxldGUgdGhpcy5fdWlCcmVha3BvaW50cyh1aUJy
ZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQpW3VpQnJlYWtwb2ludC5saW5lTnVtYmVyXTsKKyAgICAg
ICAgdWlCcmVha3BvaW50LmJyZWFrcG9pbnQucmVtb3ZlVUlCcmVha3BvaW50KCk7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAorICAgICAqIEByZXR1cm4gez9P
YmplY3QuPHN0cmluZyxXZWJJbnNwZWN0b3IuQnJlYWtwb2ludD59CisgICAgICovCisgICAgX2Jy
ZWFrcG9pbnRzOiBmdW5jdGlvbihpZCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fYnJlYWtw
b2ludHNCeVVJTG9jYXRpb25baWRdKQorICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNCeVVJ
TG9jYXRpb25baWRdID0ge307CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50c0J5VUlM
b2NhdGlvbltpZF07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBp
ZAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCiAgICAgICogQHJldHVybiB7P1dl
Ykluc3BlY3Rvci5CcmVha3BvaW50fQogICAgICAqLwotICAgIF9icmVha3BvaW50OiBmdW5jdGlv
bih1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlcikKKyAgICBfYnJlYWtwb2ludDogZnVuY3Rpb24o
aWQsIGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMo
aWQpW1N0cmluZyhsaW5lTnVtYmVyKV07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKKyAgICAgKi8KKyAgICBfYWRk
QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9icmVha3BvaW50cyh1aVNvdXJjZUNvZGVJZClbU3RyaW5nKGxpbmVOdW1iZXIpXTsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX2JyZWFrcG9pbnQoYnJlYWtwb2ludC5pZCwgYnJl
YWtwb2ludC5saW5lTnVtYmVyKSk7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzKGJyZWFrcG9p
bnQuaWQpW2JyZWFrcG9pbnQubGluZU51bWJlcl0gPSBicmVha3BvaW50OworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fSBicmVha3BvaW50
CisgICAgICovCisgICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQu
aWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikgPT09IGJyZWFrcG9pbnQpOworICAgICAgICBkZWxl
dGUgdGhpcy5fYnJlYWtwb2ludHMoYnJlYWtwb2ludC5pZClbYnJlYWtwb2ludC5saW5lTnVtYmVy
XTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0yMjMsOCArMzEwLDggQEAgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfZm9yRWFjaEJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKGhhbmRsZXIpCiAgICAgewotICAgICAgICBmb3IgKHZhciB1aVNvdXJj
ZUNvZGVJZCBpbiB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvbikgewotICAgICAgICAgICAg
dmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VD
b2RlSWRdOworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50c0J5VUlMb2Nh
dGlvbikgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNC
eVVJTG9jYXRpb25baWRdOwogICAgICAgICAgICAgZm9yICh2YXIgbGluZU51bWJlciBpbiBicmVh
a3BvaW50cykKICAgICAgICAgICAgICAgICBoYW5kbGVyKGJyZWFrcG9pbnRzW2xpbmVOdW1iZXJd
KTsKICAgICAgICAgfQpAQCAtMjQzLDcgKzMzMCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAqLwogICAgICAgICBmdW5jdGlvbiBkaWRT
ZXRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgbG9jYXRpb25zKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoYnJlYWtwb2ludCA9PT0gdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291
cmNlQ29kZUlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICBpZiAoYnJl
YWtwb2ludCA9PT0gdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LmlkLCBicmVha3BvaW50Lmxp
bmVOdW1iZXIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpIHsKICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlQnJlYWtwb2ludEZyb21VSShicmVha3BvaW50KTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjY4LDcgKzM1NSw3IEBAIFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX3JlbW92
ZUJyZWFrcG9pbnRGcm9tRGVidWdnZXI6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAgewotICAg
ICAgICBpZiAoISgiX2RlYnVnZ2VySWQiIGluIGJyZWFrcG9pbnQpKQorICAgICAgICBpZiAodHlw
ZW9mKGJyZWFrcG9pbnQuX2RlYnVnZ2VySWQpID09PSAidW5kZWZpbmVkIikKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgdGhpcy5fZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGJy
ZWFrcG9pbnQuX2RlYnVnZ2VySWQpOwogICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNC
eURlYnVnZ2VySWRbYnJlYWtwb2ludC5fZGVidWdnZXJJZF07CkBAIC0zMjQsMTEgKzQxMSwxMiBA
QCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAg
Ki8KICAgICAgICAgZnVuY3Rpb24gcmVzZXRPckRlbGV0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQucGVyc2lzdGVudCkgewotICAg
ICAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50LnVpU291cmNlQ29kZTsKKyAgICAgICAgICAg
IGlmIChicmVha3BvaW50LnVpQnJlYWtwb2ludCkKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW1v
dmVVSUJyZWFrcG9pbnQoYnJlYWtwb2ludC51aUJyZWFrcG9pbnQpOworICAgICAgICAgICAgaWYg
KGJyZWFrcG9pbnQucGVyc2lzdGVudCkKICAgICAgICAgICAgICAgICBkZWxldGUgYnJlYWtwb2lu
dC5fZGVidWdnZXJMb2NhdGlvbjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fZGVsZXRlQnJlYWtwb2ludEZyb21VSShicmVha3BvaW50KTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dCk7CiAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzQnlEZWJ1Z2dlcklk
W2JyZWFrcG9pbnQuX2RlYnVnZ2VySWRdOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0z
NDMsMjAgKzQzMSwyOSBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgaWYgKGVtcHR5KQogICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9icmVha3BvaW50c0J5VUlMb2NhdGlvbltpZF07CiAgICAgICAgIH0KKyAgICAgICAgZm9yICh2
YXIgaWQgaW4gdGhpcy5fdWlCcmVha3BvaW50c0J5VUlMb2NhdGlvbikgeworICAgICAgICAgICAg
dmFyIGVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gdGhp
cy5fdWlCcmVha3BvaW50c0J5VUlMb2NhdGlvbltpZF0pIHsKKyAgICAgICAgICAgICAgICBlbXB0
eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGVtcHR5KQorICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl91aUJyZWFrcG9p
bnRzQnlVSUxvY2F0aW9uW2lkXTsKKyAgICAgICAgfQogICAgIH0KIH0KIAogLyoqCiAgKiBAY29u
c3RydWN0b3IKLSAqIEBwYXJhbSB7c3RyaW5nfSB1aVNvdXJjZUNvZGVJZAorICogQHBhcmFtIHtz
dHJpbmd9IGlkCiAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgogICogQHBhcmFtIHtzdHJp
bmd9IGNvbmRpdGlvbgogICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkCiAgKiBAcGFyYW0ge2Jv
b2xlYW59IHBlcnNpc3RlbnQKICAqLwotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQgPSBmdW5jdGlv
bih1aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBwZXJzaXN0
ZW50KQorV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQgPSBmdW5jdGlvbihpZCwgbGluZU51bWJlciwg
Y29uZGl0aW9uLCBlbmFibGVkLCBwZXJzaXN0ZW50KQogewotICAgIHRoaXMudWlTb3VyY2VDb2Rl
SWQgPSB1aVNvdXJjZUNvZGVJZDsKKyAgICB0aGlzLmlkID0gaWQ7CiAgICAgdGhpcy5saW5lTnVt
YmVyID0gbGluZU51bWJlcjsKICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKICAgICB0
aGlzLmVuYWJsZWQgPSBlbmFibGVkOwpAQCAtMzcwLDExICs0NjcsMzQgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgdmFyIHNlcmlhbGl6ZWRCcmVha3BvaW50ID0ge307Ci0gICAgICAgIHNlcmlh
bGl6ZWRCcmVha3BvaW50LnNvdXJjZUZpbGVJZCA9IHRoaXMudWlTb3VyY2VDb2RlSWQ7CisgICAg
ICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LnNvdXJjZUZpbGVJZCA9IHRoaXMuaWQ7CiAgICAgICAg
IHNlcmlhbGl6ZWRCcmVha3BvaW50LmxpbmVOdW1iZXIgPSB0aGlzLmxpbmVOdW1iZXI7CiAgICAg
ICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LmNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uOwogICAg
ICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5lbmFibGVkID0gdGhpcy5lbmFibGVkOwogICAgICAg
ICByZXR1cm4gc2VyaWFsaXplZEJyZWFrcG9pbnQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50fQorICAgICAqLworICAgIGdldCB1aUJy
ZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VpQnJlYWtwb2ludDsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
fSB1aVNvdXJjZUNvZGUKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50
fQorICAgICAqLworICAgIGNyZWF0ZVVJQnJlYWtwb2ludDogZnVuY3Rpb24odWlTb3VyY2VDb2Rl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fdWlCcmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5V
SUJyZWFrcG9pbnQodWlTb3VyY2VDb2RlLCB0aGlzLmxpbmVOdW1iZXIsIHRoaXMuY29uZGl0aW9u
LCB0aGlzLmVuYWJsZWQsIHRoaXMpOworICAgICAgICByZXR1cm4gdGhpcy5fdWlCcmVha3BvaW50
OworICAgIH0sCisKKyAgICByZW1vdmVVSUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGRlbGV0ZSB0aGlzLl91aUJyZWFrcG9pbnQ7CiAgICAgfQogfQogCkBAIC0zOTEsMyAr
NTExLDQzIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmRlc2VyaWFsaXplID0gZnVuY3Rpb24o
c2VyaWFsaXplZEJyZWFrcG9pbnQpCiAgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5l
bmFibGVkLAogICAgICAgICAgICAgdHJ1ZSk7CiB9CisKKy8qKgorICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKKyAqIEBwYXJhbSB7bnVtYmVyfSBsaW5l
TnVtYmVyCisgKiBAcGFyYW0ge3N0cmluZ30gY29uZGl0aW9uCisgKiBAcGFyYW0ge2Jvb2xlYW59
IGVuYWJsZWQKKyAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fQorICovCitXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5jcmVhdGUgPSBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVO
dW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFi
bGVkLCAhIXVpU291cmNlQ29kZS51cmwpOworfQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKKyAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgKiBAcGFyYW0ge3N0cmluZ30gY29uZGl0aW9uCisgKiBA
cGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnR9IGJyZWFrcG9pbnQKKyAqLworV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCA9IGZ1bmN0aW9u
KHVpU291cmNlQ29kZSwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCBicmVha3BvaW50
KQoreworICAgIHRoaXMudWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOworICAgIHRoaXMudWlT
b3VyY2VDb2RlSWQgPSB1aVNvdXJjZUNvZGUuaWQ7CisgICAgdGhpcy5saW5lTnVtYmVyID0gbGlu
ZU51bWJlcjsKKyAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICB0aGlzLmVuYWJs
ZWQgPSBlbmFibGVkOworICAgIHRoaXMuYnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7CisgICAgdGhp
cy5yZXNvbHZlZCA9IHRydWU7Cit9CisKK1dlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnQucHJvdG90
eXBlID0geworICAgIC8qKgorICAgICAqIEByZXR1cm4ge09iamVjdH0KKyAgICAgKi8KKyAgICBz
b21lRnVuY3Rpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgfSwKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2Rl
bC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50
YXRpb25Nb2RlbC5qcwppbmRleCA0MTE2MWJmZDU4MDZhZTI1OWYzYWExZWVkYWUzMjMzOGY5NDg3
NDcxLi4zYjdiYTU1MzFmMDIxZGY1MjQ5NmMyMGMyY2UwODcwZmM3MjMzN2Y4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9u
TW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dl
clByZXNlbnRhdGlvbk1vZGVsLmpzCkBAIC02Myw4ICs2Myw4IEBAIFdlYkluc3BlY3Rvci5EZWJ1
Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cyA9IHsKICAgICBVSVNvdXJjZUNvZGVSZW1vdmVk
OiAic291cmNlLWZpbGUtcmVtb3ZlZCIsCiAgICAgQ29uc29sZU1lc3NhZ2VBZGRlZDogImNvbnNv
bGUtbWVzc2FnZS1hZGRlZCIsCiAgICAgQ29uc29sZU1lc3NhZ2VzQ2xlYXJlZDogImNvbnNvbGUt
bWVzc2FnZXMtY2xlYXJlZCIsCi0gICAgQnJlYWtwb2ludEFkZGVkOiAiYnJlYWtwb2ludC1hZGRl
ZCIsCi0gICAgQnJlYWtwb2ludFJlbW92ZWQ6ICJicmVha3BvaW50LXJlbW92ZWQiLAorICAgIFVJ
QnJlYWtwb2ludEFkZGVkOiAidWktYnJlYWtwb2ludC1hZGRlZCIsCisgICAgVUlCcmVha3BvaW50
UmVtb3ZlZDogInVpLWJyZWFrcG9pbnQtcmVtb3ZlZCIsCiAgICAgRGVidWdnZXJQYXVzZWQ6ICJk
ZWJ1Z2dlci1wYXVzZWQiLAogICAgIERlYnVnZ2VyUmVzdW1lZDogImRlYnVnZ2VyLXJlc3VtZWQi
LAogICAgIERlYnVnZ2VyUmVzZXQ6ICJkZWJ1Z2dlci1yZXNldCIsCkBAIC0xNTUsMTYgKzE1NSwx
MCBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciByZW1vdmVkSXRlbXMgPSAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0
b3IuVUlTb3VyY2VDb2RlPn0gKi8gZXZlbnQuZGF0YVsicmVtb3ZlZEl0ZW1zIl07CiAgICAgICAg
IHZhciBhZGRlZEl0ZW1zID0gLyoqIEB0eXBlIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNl
Q29kZT59ICovIGV2ZW50LmRhdGFbImFkZGVkSXRlbXMiXTsKIAotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJlbW92ZWRJdGVtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGJy
ZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVSVNvdXJj
ZUNvZGUocmVtb3ZlZEl0ZW1zW2ldKTsKLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIg
aW4gYnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFr
cG9pbnRzW2xpbmVOdW1iZXJdOwotICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1v
dmVkKGJyZWFrcG9pbnQpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50LnVpU291
cmNlQ29kZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3Jlc3Rv
cmVCcmVha3BvaW50cyhhZGRlZEl0ZW1zKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
ZW1vdmVkSXRlbXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50TWFu
YWdlci51aVNvdXJjZUNvZGVSZW1vdmVkKHJlbW92ZWRJdGVtc1tpXSk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYWRkZWRJdGVtcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRoaXMu
X2JyZWFrcG9pbnRNYW5hZ2VyLnVpU291cmNlQ29kZUFkZGVkKGFkZGVkSXRlbXNbaV0pOwogCiAg
ICAgICAgIGlmICghcmVtb3ZlZEl0ZW1zLmxlbmd0aCkgewogICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhZGRlZEl0ZW1zLmxlbmd0aDsgKytpKQpAQCAtMTc5LDIwICsxNzMsNiBAQCBX
ZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAgICAg
fSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNvdXJj
ZUNvZGU+fSB1aVNvdXJjZUNvZGVMaXN0Ci0gICAgICovCi0gICAgX3Jlc3RvcmVCcmVha3BvaW50
czogZnVuY3Rpb24odWlTb3VyY2VDb2RlTGlzdCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdWlTb3VyY2VDb2RlTGlzdC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFy
IHVpU291cmNlQ29kZSA9IHVpU291cmNlQ29kZUxpc3RbaV07Ci0gICAgICAgICAgICB0aGlzLl9i
cmVha3BvaW50TWFuYWdlci51aVNvdXJjZUNvZGVBZGRlZCh1aVNvdXJjZUNvZGUpOwotICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2lu
dHNGb3JVSVNvdXJjZUNvZGUodWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIGZvciAodmFyIGxp
bmVOdW1iZXIgaW4gYnJlYWtwb2ludHMpCi0gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dEFkZGVkKGJyZWFrcG9pbnRzW2xpbmVOdW1iZXJdKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNl
Q29kZQogICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICovCkBAIC00NDksMjkgKzQyOSwy
NyBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7
CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNv
dXJjZUNvZGUKICAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEByZXR1
cm4ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fHVuZGVmaW5lZH0KKyAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50fHVuZGVmaW5lZH0KICAgICAgKi8KICAgICBmaW5kQnJl
YWtwb2ludDogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRzRm9yVUlTb3VyY2VD
b2RlKHVpU291cmNlQ29kZSlbbGluZU51bWJlcl07CisgICAgICAgIHJldHVybiB0aGlzLl9icmVh
a3BvaW50TWFuYWdlci5icmVha3BvaW50c0ZvclVJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUpW1N0
cmluZyhsaW5lTnVtYmVyKV07CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKKyAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5VSUJyZWFrcG9pbnR9IHVpQnJlYWtwb2ludAogICAgICAqLwotICAgIF9icmVha3BvaW50
QWRkZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rp
b24odWlCcmVha3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudWlTb3VyY2VD
b2RlKQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgYnJl
YWtwb2ludCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSUJyZWFrcG9pbnRBZGRlZCwg
dWlCcmVha3BvaW50KTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludH0gYnJlYWtwb2ludAorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlVJQnJlYWtwb2ludH0gdWlCcmVha3BvaW50CiAgICAgICovCi0gICAgX2JyZWFrcG9pbnRSZW1v
dmVkOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rp
b24odWlCcmVha3BvaW50KQogICAgIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudWlTb3VyY2VD
b2RlKQotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCBi
cmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLlVJQnJlYWtwb2ludFJlbW92
ZWQsIHVpQnJlYWtwb2ludCk7CiAgICAgfSwKIAogICAgIF9kZWJ1Z2dlclBhdXNlZDogZnVuY3Rp
b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3Jp
cHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qcwppbmRleCA3MTZiZmZkMzBhZmY5ZGQ1NTdmMDgzODEzM2VkNGI2ODNlNjkzZjc3Li4y
ZjJlOGQyMjIzN2M4MzA0YmQ5ZjVhNTBkNTg0Y2I3NDU5MjY5MTc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMTc3LDgg
KzE3Nyw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbihwcmVzZW50YXRp
b25Nb2RlbCkKICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSVNvdXJjZUNvZGVS
ZW1vdmVkLCB0aGlzLl91aVNvdXJjZUNvZGVSZW1vdmVkLCB0aGlzKTsKICAgICB0aGlzLl9wcmVz
ZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLkV2ZW50cy5Db25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzLl9jb25zb2xlTWVz
c2FnZUFkZGVkLCB0aGlzKTsKICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5Db25z
b2xlTWVzc2FnZXNDbGVhcmVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZXNDbGVhcmVkLCB0aGlzKTsK
LSAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMu
X2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0gICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVu
dHMuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAg
ICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSUJyZWFrcG9pbnRBZGRlZCwgdGhpcy5f
dWlCcmVha3BvaW50QWRkZWQsIHRoaXMpOworICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZl
bnRzLlVJQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX3VpQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMp
OwogICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCB0aGlz
Ll9kZWJ1Z2dlclBhdXNlZCwgdGhpcyk7CiAgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVu
dHMuRGVidWdnZXJSZXN1bWVkLCB0aGlzLl9kZWJ1Z2dlclJlc3VtZWQsIHRoaXMpOwogICAgIHRo
aXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkNhbGxGcmFtZVNlbGVjdGVkLCB0aGlzLl9jYWxs
RnJhbWVTZWxlY3RlZCwgdGhpcyk7CkBAIC0zMDgsMjYgKzMwOCwyNiBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZE1l
c3NhZ2VUb1NvdXJjZShtZXNzYWdlLmxpbmVOdW1iZXIsIG1lc3NhZ2Uub3JpZ2luYWxNZXNzYWdl
KTsKICAgICB9LAogCi0gICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAg
X3VpQnJlYWtwb2ludEFkZGVkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciBi
cmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdmFyIHVpQnJlYWtwb2ludCA9IC8qKiBA
dHlwZSB7V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludH0gKi8gZXZlbnQuZGF0YTsKIAotICAgICAg
ICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFtZXNCeVVJU291cmNlQ29kZS5nZXQo
YnJlYWtwb2ludC51aVNvdXJjZUNvZGUpCisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMu
X3NvdXJjZUZyYW1lc0J5VUlTb3VyY2VDb2RlLmdldCh1aUJyZWFrcG9pbnQudWlTb3VyY2VDb2Rl
KQogICAgICAgICBpZiAoc291cmNlRnJhbWUgJiYgc291cmNlRnJhbWUubG9hZGVkKQotICAgICAg
ICAgICAgc291cmNlRnJhbWUuYWRkQnJlYWtwb2ludChicmVha3BvaW50LmxpbmVOdW1iZXIsIGJy
ZWFrcG9pbnQucmVzb2x2ZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJs
ZWQpOworICAgICAgICAgICAgc291cmNlRnJhbWUuYWRkQnJlYWtwb2ludCh1aUJyZWFrcG9pbnQu
bGluZU51bWJlciwgdWlCcmVha3BvaW50LnJlc29sdmVkLCB1aUJyZWFrcG9pbnQuY29uZGl0aW9u
LCB1aUJyZWFrcG9pbnQuZW5hYmxlZCk7CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuanNC
cmVha3BvaW50cy5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLnNpZGVi
YXJQYW5lcy5qc0JyZWFrcG9pbnRzLmFkZEJyZWFrcG9pbnQodWlCcmVha3BvaW50KTsKICAgICB9
LAogCi0gICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfdWlCcmVh
a3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IGV2ZW50LmRhdGE7CisgICAgICAgIHZhciB1aUJyZWFrcG9pbnQgPSAvKiogQHR5cGUg
e1dlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnR9ICovIGV2ZW50LmRhdGE7CiAKLSAgICAgICAgdmFy
IHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJhbWVzQnlVSVNvdXJjZUNvZGUuZ2V0KGJyZWFr
cG9pbnQudWlTb3VyY2VDb2RlKQorICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3Vy
Y2VGcmFtZXNCeVVJU291cmNlQ29kZS5nZXQodWlCcmVha3BvaW50LnVpU291cmNlQ29kZSkKICAg
ICAgICAgaWYgKHNvdXJjZUZyYW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkKLSAgICAgICAgICAg
IHNvdXJjZUZyYW1lLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAg
ICAgICAgICAgIHNvdXJjZUZyYW1lLnJlbW92ZUJyZWFrcG9pbnQodWlCcmVha3BvaW50LmxpbmVO
dW1iZXIpOwogCi0gICAgICAgIHRoaXMuc2lkZWJhclBhbmVzLmpzQnJlYWtwb2ludHMucmVtb3Zl
QnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZSwgYnJlYWtwb2ludC5saW5lTnVtYmVy
KTsKKyAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5yZW1vdmVCcmVha3Bv
aW50KHVpQnJlYWtwb2ludC51aVNvdXJjZUNvZGUsIHVpQnJlYWtwb2ludC5saW5lTnVtYmVyKTsK
ICAgICB9LAogCiAgICAgX2NvbnNvbGVDb21tYW5kRXZhbHVhdGVkSW5TZWxlY3RlZENhbGxGcmFt
ZTogZnVuY3Rpb24oZXZlbnQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzhhNTQwMWYyOWRlMTFhZTNlNWViZmFkMjQwYTRi
ZDM5NjEwMjJkYi4uNzFiYjEyZDYwNjYwODYwYTU2Y2U5MzFmNDI0MjE5Yjc4MGE5MDg4NyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAzLTIwICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4dHJhY3QgV2ViSW5zcGVj
dG9yLlVJQnJlYWtwb2ludCBmcm9tIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dl
ci9icmVha3BvaW50LW1hbmFnZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9k
ZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbDoKKwogMjAxMi0wMy0yMSAgVmluZWV0IENo
YXVkaGFyeSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNzA1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXItZXhwZWN0ZWQudHh0
CmluZGV4IDE3NWU1MGRkZWJlYTRjZjk0NzIxOTY0NDc5YTYwOTEzNzNlYjU2NTUuLmU0ZmFjNDA5
ZmNjYTc5NmQ4OTJjZTlhYjUxZjExZmYxMTkzMTQyMWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXItZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXItZXhwZWN0
ZWQudHh0CkBAIC0yLDE2ICsyLDE0IEBAIFRlc3RzIEJyZWFrcG9pbnRNYW5hZ2VyIGNsYXNzLgog
CiAKIFJ1bm5pbmc6IHVpU291cmNlQ29kZUFkZGVkCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9p
bnQoYS5qczoxMDowKQogYnJlYWtwb2ludEFkZGVkKGEuanMsIDEwLCBmb28gPT0gYmFyLCB0cnVl
KQogYnJlYWtwb2ludEFkZGVkKGEuanMsIDIwLCAsIGZhbHNlKQotYnJlYWtwb2ludEFkZGVkKGIu
anMsIDMsICwgdHJ1ZSkKLWRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjApCiAK
IFJ1bm5pbmc6IHNldEFuZFJlbW92ZUJyZWFrcG9pbnRzCitkZWJ1Z2dlck1vZGVsLnNldEJyZWFr
cG9pbnQoYS5qczoxMDowKQogYnJlYWtwb2ludEFkZGVkKGEuanMsIDEwLCBmb28gPT0gYmFyLCB0
cnVlKQogYnJlYWtwb2ludEFkZGVkKGEuanMsIDIwLCAsIGZhbHNlKQotYnJlYWtwb2ludEFkZGVk
KGIuanMsIDMsICwgdHJ1ZSkKLWRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjAp
CiBicmVha3BvaW50QWRkZWQoYS5qcywgMzAsICwgdHJ1ZSkKIGRlYnVnZ2VyTW9kZWwuc2V0QnJl
YWtwb2ludChhLmpzOjMwOjApCiBicmVha3BvaW50UmVtb3ZlZChhLmpzLCAzMCkKQEAgLTMxLDIx
ICsyOSwyMSBAQCBicmVha3BvaW50QWRkZWQoYS5qcywgMTUsICwgdHJ1ZSkKIGRlYnVnZ2VyTW9k
ZWwuc2V0QnJlYWtwb2ludChhLmpzOjE1OjApCiAKIFJ1bm5pbmc6IHRlc3ROYXZpZ2F0aW9uCitk
ZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYS5qczoxMDowKQogYnJlYWtwb2ludEFkZGVkKGEu
anMsIDEwLCBmb28gPT0gYmFyLCB0cnVlKQogYnJlYWtwb2ludEFkZGVkKGEuanMsIDIwLCAsIGZh
bHNlKQotYnJlYWtwb2ludEFkZGVkKGIuanMsIDMsICwgdHJ1ZSkKLWRlYnVnZ2VyTW9kZWwuc2V0
QnJlYWtwb2ludChhLmpzOjEwOjApCiAKIE5hdmlnYXRlIHRvIEIuCiBkZWJ1Z2dlck1vZGVsLnNl
dEJyZWFrcG9pbnQoYi5qczozOjApCiticmVha3BvaW50QWRkZWQoYi5qcywgMywgLCB0cnVlKQog
CiBOYXZpZ2F0ZSBiYWNrIHRvIEEuCi1icmVha3BvaW50UmVtb3ZlZChhLmpzLCAxMCkKIGJyZWFr
cG9pbnRBZGRlZChhLmpzLCAxMSwgZm9vID09IGJhciwgdHJ1ZSkKK2JyZWFrcG9pbnRBZGRlZChh
LmpzLCAyMCwgLCBmYWxzZSkKIAogUnVubmluZzogdGVzdEZvcm1hdHRpbmcKLWJyZWFrcG9pbnRB
ZGRlZChjLmpzLCA0LCAsIHRydWUpCiBkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYy5qczo0
OjApCiticmVha3BvaW50QWRkZWQoYy5qcywgNCwgLCB0cnVlKQogCiBGb3JtYXQgc291cmNlLgog
ZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGMuanM6NDowKQpAQCAtNTksNiArNTcsOCBA
QCBicmVha3BvaW50QWRkZWQoZGVvYmZ1c2NhdGVkOmMuanMsIDEyLCAsIHRydWUpCiBkZWJ1Z2dl
ck1vZGVsLnNldEJyZWFrcG9pbnQoYy5qczo2OjApCiAKIFJlbG9hZC4KK2JyZWFrcG9pbnRBZGRl
ZChkZW9iZnVzY2F0ZWQ6Yy5qcywgNCwgLCB0cnVlKQorYnJlYWtwb2ludEFkZGVkKGRlb2JmdXNj
YXRlZDpjLmpzLCAxMiwgLCB0cnVlKQogYnJlYWtwb2ludFJlbW92ZWQoZGVvYmZ1c2NhdGVkOmMu
anMsIDQpCiBicmVha3BvaW50QWRkZWQoZGVvYmZ1c2NhdGVkOmMuanMsIDYsICwgdHJ1ZSkKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9pbnQtbWFu
YWdlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9pbnQtbWFu
YWdlci5odG1sCmluZGV4IGU4Nzg1MGVjOTdhNTEzMDdhNTMyNGI3YTdmNWQ1YjhkY2FjOGVlNTMu
LjI3ZGJkMTNjYmEzOWIyMDNjMzRkMDhlMWRmOTUyMTBiZDQ1MmVmN2UgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLmh0bWwK
QEAgLTc5LDYgKzc5LDEyIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcihicmVha3BvaW50U3RvcmFnZSwgYnJlYWtwb2lu
dEFkZGVkLCBicmVha3BvaW50UmVtb3ZlZCwgZGVidWdnZXJNb2RlbCwgc2NyaXB0TWFwcGluZyk7
CiAgICAgfQogCisgICAgZnVuY3Rpb24gcmVzZXREZWJ1Z2dlck1vZGVsKGJyZWFrcG9pbnRNYW5h
Z2VyKQorICAgIHsKKyAgICAgICAgdWlCcmVha3BvaW50cyA9IHt9OworICAgICAgICBicmVha3Bv
aW50TWFuYWdlci5kZWJ1Z2dlclJlc2V0KCk7CisgICAgfQorCiAgICAgSW5zcGVjdG9yVGVzdC5y
dW5UZXN0U3VpdGUoWwogICAgICAgICBmdW5jdGlvbiB1aVNvdXJjZUNvZGVBZGRlZChuZXh0KQog
ICAgICAgICB7CkBAIC04OSw3ICs5NSw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgICAg
ICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGFzc2VydEVxdWFscyh7ImEuanM6MTAiOiJmb28gPT0gYmFyfHRydWUiLCJhLmpzOjIwIjoifGZh
bHNlIiwiYi5qczozIjoifHRydWUifSwgdWlCcmVha3BvaW50cyk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0RXF1YWxzKHsiYS5qczoxMCI6ImZvbyA9PSBiYXJ8dHJ1ZSIsImEuanM6MjAiOiJ8ZmFs
c2UifSwgdWlCcmVha3BvaW50cyk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYS5q
czoxMDowIjogImZvbyA9PSBiYXIifSwgZGVidWdnZXJCcmVha3BvaW50cyk7CiAgICAgICAgICAg
ICAgICAgbmV4dCgpOwogICAgICAgICAgICAgfQpAQCAtMTY1LDcgKzE3MSw3IEBAIGZ1bmN0aW9u
IHRlc3QoKQogICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTA6MCI6ImZvbyA9
PSBiYXIifSwgZGVidWdnZXJCcmVha3BvaW50cyk7CiAKICAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiXG5OYXZpZ2F0ZSB0byBCLiIpOwotICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnRNYW5hZ2VyLmRlYnVnZ2VyUmVzZXQoKTsKKyAgICAgICAgICAgICAgICByZXNldERl
YnVnZ2VyTW9kZWwoYnJlYWtwb2ludE1hbmFnZXIpOwogCiAgICAgICAgICAgICAgICAgYnJlYWtw
b2ludE1hbmFnZXIudWlTb3VyY2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlQik7CiAgICAgICAgICAg
ICAgICAgc2V0VGltZW91dChuYXZpZ2F0ZVRvQSwgMCk7CkBAIC0xNzMsMTEgKzE3OSwxMSBAQCBm
dW5jdGlvbiB0ZXN0KCkKIAogICAgICAgICAgICAgZnVuY3Rpb24gbmF2aWdhdGVUb0EoKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTAiOiJmb28g
PT0gYmFyfHRydWUiLCJhLmpzOjIwIjoifGZhbHNlIiwiYi5qczozIjoifHRydWUifSwgdWlCcmVh
a3BvaW50cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYi5qczozIjoifHRydWUi
fSwgdWlCcmVha3BvaW50cyk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYS5qczox
MDowIjoiZm9vID09IGJhciIsImIuanM6MzowIjoiIn0sIGRlYnVnZ2VyQnJlYWtwb2ludHMpOwog
CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlxuTmF2aWdhdGUgYmFj
ayB0byBBLiIpOwotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2VyLmRlYnVnZ2VyUmVz
ZXQoKTsKKyAgICAgICAgICAgICAgICByZXNldERlYnVnZ2VyTW9kZWwoYnJlYWtwb2ludE1hbmFn
ZXIpOwogCiAgICAgICAgICAgICAgICAgdmFyIGV2ZW50RGF0YSA9IHsgYnJlYWtwb2ludElkOiAi
YS5qczoxMDowIiwgbG9jYXRpb246IHsgc2NyaXB0SWQ6ICJhLmpzIiwgbGluZU51bWJlcjogMTEs
IGNvbHVtbk51bWJlcjogNSB9fTsKICAgICAgICAgICAgICAgICBkZWJ1Z2dlck1vZGVsLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJl
YWtwb2ludFJlc29sdmVkLCBldmVudERhdGEpOwpAQCAtMTg3LDcgKzE5Myw3IEBAIGZ1bmN0aW9u
IHRlc3QoKQogCiAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MjAiOiJ8ZmFsc2UiLCJi
LmpzOjMiOiJ8dHJ1ZSIsImEuanM6MTEiOiJmb28gPT0gYmFyfHRydWUifSwgdWlCcmVha3BvaW50
cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYS5qczoyMCI6InxmYWxzZSIsImEu
anM6MTEiOiJmb28gPT0gYmFyfHRydWUifSwgdWlCcmVha3BvaW50cyk7CiAgICAgICAgICAgICAg
ICAgYXNzZXJ0RXF1YWxzKHsiYS5qczoxMDowIjoiZm9vID09IGJhciIsImIuanM6MzowIjoiIn0s
IGRlYnVnZ2VyQnJlYWtwb2ludHMpOwogICAgICAgICAgICAgICAgIGNoZWNrQnJlYWtwb2ludFN0
b3JhZ2UoW3sic291cmNlRmlsZUlkIjoiYS5qcyIsImxpbmVOdW1iZXIiOjExLCJjb25kaXRpb24i
OiJmb28gPT0gYmFyIiwiZW5hYmxlZCI6dHJ1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyJzb3VyY2VGaWxlSWQiOiJhLmpzIiwibGluZU51bWJlciI6MjAsImNv
bmRpdGlvbiI6IiIsImVuYWJsZWQiOmZhbHNlfSwKQEAgLTI0Miw3ICsyNDgsNyBAQCBmdW5jdGlv
biB0ZXN0KCkKICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJjLmpzOjI6MCI6IiIsImMu
anM6NjowIjoiIn0sIGRlYnVnZ2VyQnJlYWtwb2ludHMpOwogCiAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRSZXN1bHQoIlxuUmVsb2FkLiIpOwotICAgICAgICAgICAgICAgIGJyZWFr
cG9pbnRNYW5hZ2VyLmRlYnVnZ2VyUmVzZXQoKTsKKyAgICAgICAgICAgICAgICByZXNldERlYnVn
Z2VyTW9kZWwoYnJlYWtwb2ludE1hbmFnZXIpOwogCiAgICAgICAgICAgICAgICAgYnJlYWtwb2lu
dE1hbmFnZXIudWlTb3VyY2VDb2RlQWRkZWQoZm9ybWF0dGVkVUlTb3VyY2VDb2RlKTsKICAgICAg
ICAgICAgICAgICB2YXIgZXZlbnREYXRhID0geyBicmVha3BvaW50SWQ6ICJjLmpzOjI6MCIsIGxv
Y2F0aW9uOiB7IHNjcmlwdElkOiAiYy5qcyIsIGxpbmVOdW1iZXI6IDMsIGNvbHVtbk51bWJlcjog
MCB9fTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133076</attachid>
            <date>2012-03-21 11:03:16 -0700</date>
            <delta_ts>2012-03-21 12:01:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81669-20120321220314.patch</filename>
            <type>text/plain</type>
            <size>32137</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFlNmVjNTgwYWE4OTM2
OTMwYmRkMWExOWZiNjJlMWY2ZDJlMTZjZC4uMmNlM2Y2NDkxMjMyOTEyNThkMjk3OGE3NDhiOWJm
OTQzZmUwZDk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTIxICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEV4dHJhY3QgV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCBmcm9tIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODE2NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuZ2V0IGZvcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnRNYW5hZ2VyLnByb3RvdHlwZS51aVNvdXJjZUNvZGVBZGRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnVpU291cmNlQ29kZVJlbW92ZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5icmVha3Bv
aW50c0ZvclVJU291cmNlQ29kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2lubmVyUmVtb3ZlQnJlYWtw
b2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
LnJlbW92ZUFsbEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuX21vdmVCcmVha3BvaW50SW5VSSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl91aUJyZWFrcG9pbnRzLmdldCB0aGlz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3Vp
QnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZS5nZXQgX3VpQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIucHJvdG90eXBlLl9hZGRCcmVha3BvaW50VG9VSSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJv
bVVJKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUu
X2JyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUuX2JyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludFRvTW9kZWwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fcmVtb3ZlQnJlYWtwb2ludEZyb21N
b2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBl
Ll9mb3JFYWNoQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlLl9zZXRCcmVha3BvaW50SW5EZWJ1Z2dlcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJv
bURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90
b3R5cGUuZGVidWdnZXJSZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5w
cm90b3R5cGUuc2VyaWFsaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnBy
b3RvdHlwZS5nZXQgdWlCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LnByb3RvdHlwZS5jcmVhdGVVSUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQucHJvdG90eXBlLnJlbW92ZVVJQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVUlCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
YnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdn
ZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2hhbmRsZVVJU291cmNlQ29kZUxpc3RDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnBy
b3RvdHlwZS5maW5kQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQ
cmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2JyZWFrcG9p
bnRSZW1vdmVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
czoKKwogMjAxMi0wMy0yMSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBbUXRdW1dLMl1bTWFjXSBNaW5pQnJvd3NlciBhc3NlcnRzIGF0IEhhc2hUYWJsZS5oOjQ4
MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtw
b2ludE1hbmFnZXIuanMKaW5kZXggMjg0YTczZTE1MGExNWQzM2JlMjcyNGRlMDUyNTI0NjY3ODYy
MzI5Zi4uOWNjNWNmNDE2YjNmYzYzOWJhYzg0MGM5NDNkMWM0Y2QwYjFkYjM5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzCkBAIC0zMSw4ICszMSw4IEBACiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuU2V0dGluZ30gYnJlYWtwb2ludFN0b3JhZ2UKLSAqIEBwYXJhbSB7ZnVu
Y3Rpb24oV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpfSBicmVha3BvaW50QWRkZWREZWxlZ2F0ZQot
ICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCl9IGJyZWFrcG9pbnRS
ZW1vdmVkRGVsZWdhdGUKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLlVJQnJlYWtw
b2ludCl9IGJyZWFrcG9pbnRBZGRlZERlbGVnYXRlCisgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYklu
c3BlY3Rvci5VSUJyZWFrcG9pbnQpfSBicmVha3BvaW50UmVtb3ZlZERlbGVnYXRlCiAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsfSBkZWJ1Z2dlck1vZGVsCiAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5NYWluU2NyaXB0TWFwcGluZ30gc2NyaXB0TWFwcGluZwogICovCkBAIC00
Miw2ICs0MiwxMCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbihi
cmVha3BvaW50U3RvcmFnZSwgYnJlYWtwb2ludEFkZGVkRGVsZQogICAgIHRoaXMuX2JyZWFrcG9p
bnRBZGRlZERlbGVnYXRlID0gYnJlYWtwb2ludEFkZGVkRGVsZWdhdGU7CiAgICAgdGhpcy5fYnJl
YWtwb2ludFJlbW92ZWREZWxlZ2F0ZSA9IGJyZWFrcG9pbnRSZW1vdmVkRGVsZWdhdGU7CiAgICAg
LyoqCisgICAgICogQHR5cGUge09iamVjdC48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZSwgT2Jq
ZWN0LjxzdHJpbmcsV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludD4+fQorICAgICAqLworICAgIHRo
aXMuX3VpQnJlYWtwb2ludHNCeVVJTG9jYXRpb24gPSBuZXcgTWFwKCk7CisgICAgLyoqCiAgICAg
ICogQHR5cGUge09iamVjdC48c3RyaW5nLCBPYmplY3QuPHN0cmluZyxXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludD4+fQogICAgICAqLwogICAgIHRoaXMuX2JyZWFrcG9pbnRzQnlVSUxvY2F0aW9uID0g
e307CkBAIC01OSw3ICs2Myw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlciA9IGZ1
bmN0aW9uKGJyZWFrcG9pbnRTdG9yYWdlLCBicmVha3BvaW50QWRkZWREZWxlCiAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmRlc2VyaWFsaXplKGJyZWFrcG9pbnRz
W2ldKTsKICAgICAgICAgaWYgKCF0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3VyY2VD
b2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVh
a3BvaW50VG9VSShicmVha3BvaW50KTsKKyAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRU
b01vZGVsKGJyZWFrcG9pbnQpOwogICAgIH0KIH0KIApAQCAtNzIsNyArNzYsNyBAQCBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIgYnJlYWtw
b2ludHMgPSB0aGlzLl9icmVha3BvaW50cyh1aVNvdXJjZUNvZGUuaWQpOwogICAgICAgICBmb3Ig
KHZhciBsaW5lTnVtYmVyIGluIGJyZWFrcG9pbnRzKSB7CiAgICAgICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IGJyZWFrcG9pbnRzW2xpbmVOdW1iZXJdOwotICAgICAgICAgICAgYnJlYWtwb2ludC51
aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7CisgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3Bv
aW50VG9VSShicmVha3BvaW50LCB1aVNvdXJjZUNvZGUpOwogICAgICAgICAgICAgdGhpcy5fbWF0
ZXJpYWxpemVCcmVha3BvaW50KGJyZWFrcG9pbnQsIHVpU291cmNlQ29kZSk7CiAgICAgICAgICAg
ICBpZiAoYnJlYWtwb2ludC5fZGVidWdnZXJMb2NhdGlvbikKICAgICAgICAgICAgICAgICB0aGlz
Ll9icmVha3BvaW50RGVidWdnZXJMb2NhdGlvbkNoYW5nZWQoYnJlYWtwb2ludCk7CkBAIC04Miw5
ICs4NiwyMiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3Vy
Y2VDb2RlCiAgICAgICovCisgICAgdWlTb3VyY2VDb2RlUmVtb3ZlZDogZnVuY3Rpb24odWlTb3Vy
Y2VDb2RlKQorICAgIHsKKyAgICAgICAgdmFyIHVpQnJlYWtwb2ludHMgPSB0aGlzLl91aUJyZWFr
cG9pbnRzKHVpU291cmNlQ29kZSk7CisgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gdWlC
cmVha3BvaW50cykgeworICAgICAgICAgICAgdmFyIHVpQnJlYWtwb2ludCA9IHVpQnJlYWtwb2lu
dHNbbGluZU51bWJlcl07CisgICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbVVJ
KHVpQnJlYWtwb2ludCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKKyAgICAgKiBAcmV0
dXJuIHtPYmplY3QuPHN0cmluZyxXZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50Pnx1bmRlZmluZWR9
CisgICAgICovCiAgICAgYnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGU6IGZ1bmN0aW9uKHVpU291
cmNlQ29kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50cyh1aVNvdXJj
ZUNvZGUuaWQpOworICAgICAgICByZXR1cm4gdGhpcy5fdWlCcmVha3BvaW50cyh1aVNvdXJjZUNv
ZGUpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTk1LDEzICsxMTIsMTEgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBzZXRCcmVha3Bv
aW50OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxl
ZCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50KHVpU291cmNlQ29kZS5pZCwg
bGluZU51bWJlcikpCisgICAgICAgIGlmICh0aGlzLl91aUJyZWFrcG9pbnQodWlTb3VyY2VDb2Rl
LCBsaW5lTnVtYmVyKSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcGVyc2lz
dGVudCA9ICEhdWlTb3VyY2VDb2RlLnVybDsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodWlTb3VyY2VDb2RlLmlkLCBsaW5lTnVtYmVyLCBjb25k
aXRpb24sIGVuYWJsZWQsIHBlcnNpc3RlbnQpOwotICAgICAgICBicmVha3BvaW50LnVpU291cmNl
Q29kZSA9IHVpU291cmNlQ29kZTsKLSAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvVUkoYnJl
YWtwb2ludCk7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50KHVpU291cmNlQ29kZS5pZCwgbGluZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCAh
IXVpU291cmNlQ29kZS51cmwpOworICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9Nb2RlbChi
cmVha3BvaW50KTsKKyAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvVUkoYnJlYWtwb2ludCwg
dWlTb3VyY2VDb2RlKTsKICAgICAgICAgdGhpcy5fbWF0ZXJpYWxpemVCcmVha3BvaW50KGJyZWFr
cG9pbnQsIHVpU291cmNlQ29kZSk7CiAgICAgfSwKIApAQCAtMTExLDI0ICsxMjYsMjYgQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBy
ZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIpCiAgICAg
ewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnQodWlTb3VyY2VDb2Rl
LmlkLCBsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50KQorICAgICAgICB2YXIg
dWlCcmVha3BvaW50ID0gdGhpcy5fdWlCcmVha3BvaW50KHVpU291cmNlQ29kZSwgbGluZU51bWJl
cik7CisgICAgICAgIGlmICghdWlCcmVha3BvaW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9p
bm5lclJlbW92ZUJyZWFrcG9pbnQodWlCcmVha3BvaW50LmJyZWFrcG9pbnQpOwogICAgIH0sCiAK
ICAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fSBicmVha3Bv
aW50CiAgICAgICovCi0gICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQp
CisgICAgX2lubmVyUmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7
Ci0gICAgICAgIHRoaXMuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkoYnJlYWtwb2ludCk7CisgICAg
ICAgIGlmIChicmVha3BvaW50LnVpQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHRoaXMuX3JlbW92
ZUJyZWFrcG9pbnRGcm9tVUkoYnJlYWtwb2ludC51aUJyZWFrcG9pbnQpOworICAgICAgICB0aGlz
Ll9yZW1vdmVCcmVha3BvaW50RnJvbU1vZGVsKGJyZWFrcG9pbnQpOwogICAgICAgICB0aGlzLl9y
ZW1vdmVCcmVha3BvaW50RnJvbURlYnVnZ2VyKGJyZWFrcG9pbnQpOwogICAgIH0sCiAKICAgICBy
ZW1vdmVBbGxCcmVha3BvaW50czogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fZm9y
RWFjaEJyZWFrcG9pbnQodGhpcy5fcmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgdGhpcy5fZm9yRWFjaEJyZWFrcG9pbnQodGhpcy5faW5uZXJSZW1vdmVCcmVha3BvaW50LmJp
bmQodGhpcykpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTE2Miw2MCArMTc5LDExMyBAQCBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludH0gYnJlYWtwb2ludAorICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAg
Ki8KLSAgICBfYWRkQnJlYWtwb2ludFRvVUk6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgX21v
dmVCcmVha3BvaW50SW5VSTogZnVuY3Rpb24oYnJlYWtwb2ludCwgbGluZU51bWJlcikKICAgICB7
Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlT
b3VyY2VDb2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikpOwotICAgICAgICB0aGlzLl9icmVh
a3BvaW50cyhicmVha3BvaW50LnVpU291cmNlQ29kZUlkKVticmVha3BvaW50LmxpbmVOdW1iZXJd
ID0gYnJlYWtwb2ludDsKLSAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7Ci0gICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRBZGRlZERlbGVnYXRlKGJyZWFrcG9pbnQpOworICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlOworICAgICAgICB2YXIgdWlCcmVha3BvaW50ID0gYnJlYWtwb2ludC51aUJy
ZWFrcG9pbnQ7CisgICAgICAgIGlmICh1aUJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIHRoaXMu
X3JlbW92ZUJyZWFrcG9pbnRGcm9tVUkodWlCcmVha3BvaW50KTsKKyAgICAgICAgICAgIHVpU291
cmNlQ29kZSA9IHVpQnJlYWtwb2ludC51aVNvdXJjZUNvZGU7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbU1vZGVsKGJyZWFrcG9pbnQpOworICAgICAgICBp
ZiAodGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBsaW5lTnVtYmVy
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWtwb2ludC5saW5lTnVt
YmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvTW9kZWwoYnJl
YWtwb2ludCk7CisKKyAgICAgICAgaWYgKHVpU291cmNlQ29kZSkKKyAgICAgICAgICAgIHRoaXMu
X2FkZEJyZWFrcG9pbnRUb1VJKGJyZWFrcG9pbnQsIHVpU291cmNlQ29kZSk7CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQorICAgICAqIEByZXR1cm4gez9PYmplY3QuPHN0cmlu
ZyxXZWJJbnNwZWN0b3IuVUlCcmVha3BvaW50Pn0KICAgICAgKi8KLSAgICBfZGVsZXRlQnJlYWtw
b2ludEZyb21VSTogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICBfdWlCcmVha3BvaW50czogZnVu
Y3Rpb24odWlTb3VyY2VDb2RlKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5f
YnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBicmVha3BvaW50LmxpbmVOdW1i
ZXIpID09PSBicmVha3BvaW50KTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzKGJy
ZWFrcG9pbnQudWlTb3VyY2VDb2RlSWQpW2JyZWFrcG9pbnQubGluZU51bWJlcl07Ci0gICAgICAg
IHRoaXMuX3NhdmVCcmVha3BvaW50cygpOwotICAgICAgICB0aGlzLl9icmVha3BvaW50UmVtb3Zl
ZERlbGVnYXRlKGJyZWFrcG9pbnQpOworICAgICAgICBpZiAoIXRoaXMuX3VpQnJlYWtwb2ludHNC
eVVJTG9jYXRpb24uZ2V0KHVpU291cmNlQ29kZSkpCisgICAgICAgICAgICB0aGlzLl91aUJyZWFr
cG9pbnRzQnlVSUxvY2F0aW9uLnB1dCh1aVNvdXJjZUNvZGUsIHt9KTsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3VpQnJlYWtwb2ludHNCeVVJTG9jYXRpb24uZ2V0KHVpU291cmNlQ29kZSk7CiAgICAg
fSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnR9IGJy
ZWFrcG9pbnQKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291
cmNlQ29kZQogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHJldHVy
biB7Ym9vbGVhbn0KKyAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludH0K
ICAgICAgKi8KLSAgICBfbW92ZUJyZWFrcG9pbnRJblVJOiBmdW5jdGlvbihicmVha3BvaW50LCBs
aW5lTnVtYmVyKQorICAgIF91aUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGlu
ZU51bWJlcikKICAgICB7Ci0gICAgICAgIHRoaXMuX2RlbGV0ZUJyZWFrcG9pbnRGcm9tVUkoYnJl
YWtwb2ludCk7Ci0gICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3Vy
Y2VDb2RlSWQsIGxpbmVOdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBicmVha3BvaW50LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICB0aGlzLl9hZGRC
cmVha3BvaW50VG9VSShicmVha3BvaW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiB0aGlzLl91aUJyZWFrcG9pbnRzKHVpU291cmNlQ29kZSlbU3RyaW5nKGxpbmVOdW1i
ZXIpXTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludH0gYnJlYWtwb2ludAorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNl
Q29kZX0gdWlTb3VyY2VDb2RlCisgICAgICovCisgICAgX2FkZEJyZWFrcG9pbnRUb1VJOiBmdW5j
dGlvbihicmVha3BvaW50LCB1aVNvdXJjZUNvZGUpCisgICAgeworICAgICAgICB2YXIgdWlCcmVh
a3BvaW50ID0gYnJlYWtwb2ludC5jcmVhdGVVSUJyZWFrcG9pbnQodWlTb3VyY2VDb2RlKTsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuX3VpQnJlYWtwb2ludCh1aUJyZWFrcG9pbnQudWlT
b3VyY2VDb2RlLCB1aUJyZWFrcG9pbnQubGluZU51bWJlcikpOworICAgICAgICB0aGlzLl91aUJy
ZWFrcG9pbnRzKHVpQnJlYWtwb2ludC51aVNvdXJjZUNvZGUpW3VpQnJlYWtwb2ludC5saW5lTnVt
YmVyXSA9IHVpQnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkRGVsZWdh
dGUodWlCcmVha3BvaW50KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuVUlCcmVha3BvaW50fSB1aUJyZWFrcG9pbnQKKyAgICAgKi8KKyAgICBfcmVtb3Zl
QnJlYWtwb2ludEZyb21VSTogZnVuY3Rpb24odWlCcmVha3BvaW50KQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQodGhpcy5fdWlCcmVha3BvaW50KHVpQnJlYWtwb2ludC51aVNvdXJjZUNv
ZGUsIHVpQnJlYWtwb2ludC5saW5lTnVtYmVyKSA9PT0gdWlCcmVha3BvaW50KTsKKyAgICAgICAg
ZGVsZXRlIHRoaXMuX3VpQnJlYWtwb2ludHModWlCcmVha3BvaW50LnVpU291cmNlQ29kZSlbdWlC
cmVha3BvaW50LmxpbmVOdW1iZXJdOworICAgICAgICB1aUJyZWFrcG9pbnQuYnJlYWtwb2ludC5y
ZW1vdmVVSUJyZWFrcG9pbnQoKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWREZWxl
Z2F0ZSh1aUJyZWFrcG9pbnQpOwogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0
cmluZ30gdWlTb3VyY2VDb2RlSWQKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQKICAgICAgKiBA
cmV0dXJuIHs/T2JqZWN0LjxzdHJpbmcsV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQ+fQogICAgICAq
LwotICAgIF9icmVha3BvaW50czogZnVuY3Rpb24odWlTb3VyY2VDb2RlSWQpCisgICAgX2JyZWFr
cG9pbnRzOiBmdW5jdGlvbihpZCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fYnJlYWtwb2lu
dHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdKQotICAgICAgICAgICAgdGhpcy5fYnJlYWtw
b2ludHNCeVVJTG9jYXRpb25bdWlTb3VyY2VDb2RlSWRdID0ge307Ci0gICAgICAgIHJldHVybiB0
aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvblt1aVNvdXJjZUNvZGVJZF07CisgICAgICAgIGlm
ICghdGhpcy5fYnJlYWtwb2ludHNCeVVJTG9jYXRpb25baWRdKQorICAgICAgICAgICAgdGhpcy5f
YnJlYWtwb2ludHNCeVVJTG9jYXRpb25baWRdID0ge307CisgICAgICAgIHJldHVybiB0aGlzLl9i
cmVha3BvaW50c0J5VUlMb2NhdGlvbltpZF07CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBw
YXJhbSB7c3RyaW5nfSB1aVNvdXJjZUNvZGVJZAorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZAog
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCiAgICAgICogQHJldHVybiB7P1dlYklu
c3BlY3Rvci5CcmVha3BvaW50fQogICAgICAqLwotICAgIF9icmVha3BvaW50OiBmdW5jdGlvbih1
aVNvdXJjZUNvZGVJZCwgbGluZU51bWJlcikKKyAgICBfYnJlYWtwb2ludDogZnVuY3Rpb24oaWQs
IGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHMoaWQp
W1N0cmluZyhsaW5lTnVtYmVyKV07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnR9IGJyZWFrcG9pbnQKKyAgICAgKi8KKyAgICBfYWRkQnJl
YWtwb2ludFRvTW9kZWw6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydCghdGhpcy5fYnJlYWtwb2ludChicmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBi
cmVha3BvaW50LmxpbmVOdW1iZXIpKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMoYnJlYWtw
b2ludC51aVNvdXJjZUNvZGVJZClbYnJlYWtwb2ludC5saW5lTnVtYmVyXSA9IGJyZWFrcG9pbnQ7
CisgICAgICAgIHRoaXMuX3NhdmVCcmVha3BvaW50cygpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fSBicmVha3BvaW50CisgICAgICov
CisgICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tTW9kZWw6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAg
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHModWlTb3VyY2VDb2RlSWQpW1N0
cmluZyhsaW5lTnVtYmVyKV07CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2JyZWFrcG9p
bnQoYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyKSA9PT0g
YnJlYWtwb2ludCk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50cyhicmVha3BvaW50
LnVpU291cmNlQ29kZUlkKVticmVha3BvaW50LmxpbmVOdW1iZXJdOworICAgICAgICB0aGlzLl9z
YXZlQnJlYWtwb2ludHMoKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0yMjMsOCArMjkzLDggQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAg
ICBfZm9yRWFjaEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGhhbmRsZXIpCiAgICAgewotICAgICAgICBm
b3IgKHZhciB1aVNvdXJjZUNvZGVJZCBpbiB0aGlzLl9icmVha3BvaW50c0J5VUlMb2NhdGlvbikg
ewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fYnJlYWtwb2ludHNCeVVJTG9j
YXRpb25bdWlTb3VyY2VDb2RlSWRdOworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVh
a3BvaW50c0J5VUlMb2NhdGlvbikgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhp
cy5fYnJlYWtwb2ludHNCeVVJTG9jYXRpb25baWRdOwogICAgICAgICAgICAgZm9yICh2YXIgbGlu
ZU51bWJlciBpbiBicmVha3BvaW50cykKICAgICAgICAgICAgICAgICBoYW5kbGVyKGJyZWFrcG9p
bnRzW2xpbmVOdW1iZXJdKTsKICAgICAgICAgfQpAQCAtMjQ1LDcgKzMxNSw5IEBAIFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChicmVha3BvaW50ID09PSB0aGlzLl9icmVha3BvaW50KGJyZWFrcG9pbnQudWlTb3Vy
Y2VDb2RlSWQsIGJyZWFrcG9pbnQubGluZU51bWJlcikpIHsKICAgICAgICAgICAgICAgICBpZiAo
IWJyZWFrcG9pbnRJZCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVCcmVha3Bv
aW50RnJvbVVJKGJyZWFrcG9pbnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2lu
dC51aUJyZWFrcG9pbnQpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVh
a3BvaW50RnJvbVVJKGJyZWFrcG9pbnQudWlCcmVha3BvaW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludEZyb21Nb2RlbChicmVha3BvaW50KTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC0yNjgsNyArMzQwLDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfcmVtb3ZlQnJlYWtwb2ludEZyb21EZWJ1Z2dlcjog
ZnVuY3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIGlmICghKCJfZGVidWdnZXJJZCIg
aW4gYnJlYWtwb2ludCkpCisgICAgICAgIGlmICh0eXBlb2YoYnJlYWtwb2ludC5fZGVidWdnZXJJ
ZCkgPT09ICJ1bmRlZmluZWQiKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9k
ZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5fZGVidWdnZXJJZCk7CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50c0J5RGVidWdnZXJJZFticmVha3BvaW50Ll9k
ZWJ1Z2dlcklkXTsKQEAgLTMyNCwxMSArMzk2LDEyIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAqLwogICAgICAgICBmdW5jdGlvbiByZXNl
dE9yRGVsZXRlQnJlYWtwb2ludChicmVha3BvaW50KQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoYnJlYWtwb2ludC5wZXJzaXN0ZW50KSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGJyZWFr
cG9pbnQudWlTb3VyY2VDb2RlOworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQudWlCcmVha3Bv
aW50KQorICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tVUkoYnJlYWtw
b2ludC51aUJyZWFrcG9pbnQpOworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQucGVyc2lzdGVu
dCkKICAgICAgICAgICAgICAgICBkZWxldGUgYnJlYWtwb2ludC5fZGVidWdnZXJMb2NhdGlvbjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlQnJlYWtw
b2ludEZyb21VSShicmVha3BvaW50KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tTW9kZWwoYnJlYWtwb2ludCk7CiAgICAgICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzQnlEZWJ1Z2dlcklkW2JyZWFrcG9pbnQu
X2RlYnVnZ2VySWRdOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNDMsNiArNDE2LDcg
QEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIGlmIChlbXB0eSkKICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNC
eVVJTG9jYXRpb25baWRdOwogICAgICAgICB9CisgICAgICAgIHRoaXMuX3VpQnJlYWtwb2ludHNC
eVVJTG9jYXRpb24gPSBuZXcgTWFwKCk7CiAgICAgfQogfQogCkBAIC0zNzUsNiArNDQ5LDI5IEBA
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgc2VyaWFsaXpl
ZEJyZWFrcG9pbnQuY29uZGl0aW9uID0gdGhpcy5jb25kaXRpb247CiAgICAgICAgIHNlcmlhbGl6
ZWRCcmVha3BvaW50LmVuYWJsZWQgPSB0aGlzLmVuYWJsZWQ7CiAgICAgICAgIHJldHVybiBzZXJp
YWxpemVkQnJlYWtwb2ludDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHR5cGUge1dlYklu
c3BlY3Rvci5VSUJyZWFrcG9pbnR9CisgICAgICovCisgICAgZ2V0IHVpQnJlYWtwb2ludCgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdWlCcmVha3BvaW50OworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29k
ZQorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnR9CisgICAgICovCisg
ICAgY3JlYXRlVUlCcmVha3BvaW50OiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCisgICAgeworICAg
ICAgICB0aGlzLl91aUJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCh1
aVNvdXJjZUNvZGUsIHRoaXMubGluZU51bWJlciwgdGhpcy5jb25kaXRpb24sIHRoaXMuZW5hYmxl
ZCwgdGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzLl91aUJyZWFrcG9pbnQ7CisgICAgfSwKKwor
ICAgIHJlbW92ZVVJQnJlYWtwb2ludDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IHRoaXMuX3VpQnJlYWtwb2ludDsKICAgICB9CiB9CiAKQEAgLTM5MSwzICs0ODgsMjEgQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnQuZGVzZXJpYWxpemUgPSBmdW5jdGlvbihzZXJpYWxpemVkQnJl
YWtwb2ludCkKICAgICAgICAgICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LmVuYWJsZWQsCiAgICAg
ICAgICAgICB0cnVlKTsKIH0KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCisgKiBAcGFyYW0ge251bWJlcn0g
bGluZU51bWJlcgorICogQHBhcmFtIHtzdHJpbmd9IGNvbmRpdGlvbgorICogQHBhcmFtIHtib29s
ZWFufSBlbmFibGVkCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5CcmVha3BvaW50fSBicmVha3Bv
aW50CisgKi8KK1dlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnQgPSBmdW5jdGlvbih1aVNvdXJjZUNv
ZGUsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCwgYnJlYWtwb2ludCkKK3sKKyAgICB0
aGlzLnVpU291cmNlQ29kZSA9IHVpU291cmNlQ29kZTsKKyAgICB0aGlzLmxpbmVOdW1iZXIgPSBs
aW5lTnVtYmVyOworICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uOworICAgIHRoaXMuZW5h
YmxlZCA9IGVuYWJsZWQ7CisgICAgdGhpcy5icmVha3BvaW50ID0gYnJlYWtwb2ludDsKKyAgICB0
aGlzLnJlc29sdmVkID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcwppbmRl
eCA0MTE2MWJmZDU4MDZhZTI1OWYzYWExZWVkYWUzMjMzOGY5NDg3NDcxLi4zYjdiYTU1MzFmMDIx
ZGY1MjQ5NmMyMGMyY2UwODcwZmM3MjMzN2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVs
LmpzCkBAIC02Myw4ICs2Myw4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1v
ZGVsLkV2ZW50cyA9IHsKICAgICBVSVNvdXJjZUNvZGVSZW1vdmVkOiAic291cmNlLWZpbGUtcmVt
b3ZlZCIsCiAgICAgQ29uc29sZU1lc3NhZ2VBZGRlZDogImNvbnNvbGUtbWVzc2FnZS1hZGRlZCIs
CiAgICAgQ29uc29sZU1lc3NhZ2VzQ2xlYXJlZDogImNvbnNvbGUtbWVzc2FnZXMtY2xlYXJlZCIs
Ci0gICAgQnJlYWtwb2ludEFkZGVkOiAiYnJlYWtwb2ludC1hZGRlZCIsCi0gICAgQnJlYWtwb2lu
dFJlbW92ZWQ6ICJicmVha3BvaW50LXJlbW92ZWQiLAorICAgIFVJQnJlYWtwb2ludEFkZGVkOiAi
dWktYnJlYWtwb2ludC1hZGRlZCIsCisgICAgVUlCcmVha3BvaW50UmVtb3ZlZDogInVpLWJyZWFr
cG9pbnQtcmVtb3ZlZCIsCiAgICAgRGVidWdnZXJQYXVzZWQ6ICJkZWJ1Z2dlci1wYXVzZWQiLAog
ICAgIERlYnVnZ2VyUmVzdW1lZDogImRlYnVnZ2VyLXJlc3VtZWQiLAogICAgIERlYnVnZ2VyUmVz
ZXQ6ICJkZWJ1Z2dlci1yZXNldCIsCkBAIC0xNTUsMTYgKzE1NSwxMCBAQCBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciByZW1v
dmVkSXRlbXMgPSAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlPn0g
Ki8gZXZlbnQuZGF0YVsicmVtb3ZlZEl0ZW1zIl07CiAgICAgICAgIHZhciBhZGRlZEl0ZW1zID0g
LyoqIEB0eXBlIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59ICovIGV2ZW50LmRh
dGFbImFkZGVkSXRlbXMiXTsKIAotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbW92ZWRJ
dGVtcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5f
YnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGUocmVtb3ZlZEl0ZW1z
W2ldKTsKLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gYnJlYWtwb2ludHMpIHsK
LSAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2xpbmVOdW1iZXJd
OwotICAgICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkKGJyZWFrcG9pbnQpOwot
ICAgICAgICAgICAgICAgIGRlbGV0ZSBicmVha3BvaW50LnVpU291cmNlQ29kZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3Jlc3RvcmVCcmVha3BvaW50cyhhZGRl
ZEl0ZW1zKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW1vdmVkSXRlbXMubGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci51aVNvdXJjZUNvZGVS
ZW1vdmVkKHJlbW92ZWRJdGVtc1tpXSk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRk
ZWRJdGVtcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2Vy
LnVpU291cmNlQ29kZUFkZGVkKGFkZGVkSXRlbXNbaV0pOwogCiAgICAgICAgIGlmICghcmVtb3Zl
ZEl0ZW1zLmxlbmd0aCkgewogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhZGRlZEl0
ZW1zLmxlbmd0aDsgKytpKQpAQCAtMTc5LDIwICsxNzMsNiBAQCBXZWJJbnNwZWN0b3IuRGVidWdn
ZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+fSB1aVNvdXJjZUNv
ZGVMaXN0Ci0gICAgICovCi0gICAgX3Jlc3RvcmVCcmVha3BvaW50czogZnVuY3Rpb24odWlTb3Vy
Y2VDb2RlTGlzdCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdWlTb3VyY2VD
b2RlTGlzdC5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHVp
U291cmNlQ29kZUxpc3RbaV07Ci0gICAgICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci51
aVNvdXJjZUNvZGVBZGRlZCh1aVNvdXJjZUNvZGUpOwotICAgICAgICAgICAgdmFyIGJyZWFrcG9p
bnRzID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVSVNvdXJjZUNvZGUo
dWlTb3VyY2VDb2RlKTsKLSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgaW4gYnJlYWtw
b2ludHMpCi0gICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkKGJyZWFrcG9pbnRz
W2xpbmVOdW1iZXJdKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKICAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQogICAgICAqIEByZXR1
cm4ge2Jvb2xlYW59CiAgICAgICovCkBAIC00NDksMjkgKzQyOSwyNyBAQCBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKICAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5C
cmVha3BvaW50fHVuZGVmaW5lZH0KKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlCcmVh
a3BvaW50fHVuZGVmaW5lZH0KICAgICAgKi8KICAgICBmaW5kQnJlYWtwb2ludDogZnVuY3Rpb24o
dWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Jy
ZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRzRm9yVUlTb3VyY2VDb2RlKHVpU291cmNlQ29kZSlb
bGluZU51bWJlcl07CisgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50TWFuYWdlci5icmVh
a3BvaW50c0ZvclVJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUpW1N0cmluZyhsaW5lTnVtYmVyKV07
CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnR9IGJyZWFrcG9pbnQKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSUJyZWFrcG9pbnR9
IHVpQnJlYWtwb2ludAogICAgICAqLwotICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGJy
ZWFrcG9pbnQpCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24odWlCcmVha3BvaW50KQog
ICAgIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlKQotICAgICAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2ludCk7CisgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLkV2ZW50cy5VSUJyZWFrcG9pbnRBZGRlZCwgdWlCcmVha3BvaW50KTsKICAg
ICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludH0g
YnJlYWtwb2ludAorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludH0gdWlC
cmVha3BvaW50CiAgICAgICovCi0gICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihicmVh
a3BvaW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24odWlCcmVha3BvaW50KQog
ICAgIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudWlTb3VyY2VDb2RlKQotICAgICAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCBicmVha3BvaW50KTsKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJl
c2VudGF0aW9uTW9kZWwuRXZlbnRzLlVJQnJlYWtwb2ludFJlbW92ZWQsIHVpQnJlYWtwb2ludCk7
CiAgICAgfSwKIAogICAgIF9kZWJ1Z2dlclBhdXNlZDogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCA3MTZi
ZmZkMzBhZmY5ZGQ1NTdmMDgzODEzM2VkNGI2ODNlNjkzZjc3Li4yZjJlOGQyMjIzN2M4MzA0YmQ5
ZjVhNTBkNTg0Y2I3NDU5MjY5MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMTc3LDggKzE3Nyw4IEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbihwcmVzZW50YXRpb25Nb2RlbCkKICAgICB0aGlz
Ll9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
clByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSVNvdXJjZUNvZGVSZW1vdmVkLCB0aGlzLl91aVNv
dXJjZUNvZGVSZW1vdmVkLCB0aGlzKTsKICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50
cy5Db25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzKTsK
ICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5Db25zb2xlTWVzc2FnZXNDbGVhcmVk
LCB0aGlzLl9jb25zb2xlTWVzc2FnZXNDbGVhcmVkLCB0aGlzKTsKLSAgICB0aGlzLl9wcmVzZW50
YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRh
dGlvbk1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwg
dGhpcyk7Ci0gICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92
ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAgICB0aGlzLl9wcmVzZW50YXRp
b25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlv
bk1vZGVsLkV2ZW50cy5VSUJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fdWlCcmVha3BvaW50QWRkZWQs
IHRoaXMpOworICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLlVJQnJlYWtwb2ludFJl
bW92ZWQsIHRoaXMuX3VpQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXNl
bnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCB0aGlzLl9kZWJ1Z2dlclBhdXNlZCwg
dGhpcyk7CiAgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVudHMuRGVidWdnZXJSZXN1bWVk
LCB0aGlzLl9kZWJ1Z2dlclJlc3VtZWQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1v
ZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9k
ZWwuRXZlbnRzLkNhbGxGcmFtZVNlbGVjdGVkLCB0aGlzLl9jYWxsRnJhbWVTZWxlY3RlZCwgdGhp
cyk7CkBAIC0zMDgsMjYgKzMwOCwyNiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZE1lc3NhZ2VUb1NvdXJjZShtZXNz
YWdlLmxpbmVOdW1iZXIsIG1lc3NhZ2Uub3JpZ2luYWxNZXNzYWdlKTsKICAgICB9LAogCi0gICAg
X2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX3VpQnJlYWtwb2ludEFkZGVk
OiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQu
ZGF0YTsKKyAgICAgICAgdmFyIHVpQnJlYWtwb2ludCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9y
LlVJQnJlYWtwb2ludH0gKi8gZXZlbnQuZGF0YTsKIAotICAgICAgICB2YXIgc291cmNlRnJhbWUg
PSB0aGlzLl9zb3VyY2VGcmFtZXNCeVVJU291cmNlQ29kZS5nZXQoYnJlYWtwb2ludC51aVNvdXJj
ZUNvZGUpCisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lc0J5VUlT
b3VyY2VDb2RlLmdldCh1aUJyZWFrcG9pbnQudWlTb3VyY2VDb2RlKQogICAgICAgICBpZiAoc291
cmNlRnJhbWUgJiYgc291cmNlRnJhbWUubG9hZGVkKQotICAgICAgICAgICAgc291cmNlRnJhbWUu
YWRkQnJlYWtwb2ludChicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQucmVzb2x2ZWQs
IGJyZWFrcG9pbnQuY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICAgICAg
c291cmNlRnJhbWUuYWRkQnJlYWtwb2ludCh1aUJyZWFrcG9pbnQubGluZU51bWJlciwgdWlCcmVh
a3BvaW50LnJlc29sdmVkLCB1aUJyZWFrcG9pbnQuY29uZGl0aW9uLCB1aUJyZWFrcG9pbnQuZW5h
YmxlZCk7CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5hZGRCcmVh
a3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLnNpZGViYXJQYW5lcy5qc0JyZWFrcG9p
bnRzLmFkZEJyZWFrcG9pbnQodWlCcmVha3BvaW50KTsKICAgICB9LAogCi0gICAgX2JyZWFrcG9p
bnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfdWlCcmVha3BvaW50UmVtb3ZlZDogZnVu
Y3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7
CisgICAgICAgIHZhciB1aUJyZWFrcG9pbnQgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSUJy
ZWFrcG9pbnR9ICovIGV2ZW50LmRhdGE7CiAKLSAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhp
cy5fc291cmNlRnJhbWVzQnlVSVNvdXJjZUNvZGUuZ2V0KGJyZWFrcG9pbnQudWlTb3VyY2VDb2Rl
KQorICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFtZXNCeVVJU291cmNl
Q29kZS5nZXQodWlCcmVha3BvaW50LnVpU291cmNlQ29kZSkKICAgICAgICAgaWYgKHNvdXJjZUZy
YW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkKLSAgICAgICAgICAgIHNvdXJjZUZyYW1lLnJlbW92
ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHNvdXJjZUZy
YW1lLnJlbW92ZUJyZWFrcG9pbnQodWlCcmVha3BvaW50LmxpbmVOdW1iZXIpOwogCi0gICAgICAg
IHRoaXMuc2lkZWJhclBhbmVzLmpzQnJlYWtwb2ludHMucmVtb3ZlQnJlYWtwb2ludChicmVha3Bv
aW50LnVpU291cmNlQ29kZSwgYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICAgICAgdGhpcy5z
aWRlYmFyUGFuZXMuanNCcmVha3BvaW50cy5yZW1vdmVCcmVha3BvaW50KHVpQnJlYWtwb2ludC51
aVNvdXJjZUNvZGUsIHVpQnJlYWtwb2ludC5saW5lTnVtYmVyKTsKICAgICB9LAogCiAgICAgX2Nv
bnNvbGVDb21tYW5kRXZhbHVhdGVkSW5TZWxlY3RlZENhbGxGcmFtZTogZnVuY3Rpb24oZXZlbnQp
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggYzhhNTQwMWYyOWRlMTFhZTNlNWViZmFkMjQwYTRiZDM5NjEwMjJkYi4uYmZjODE2
OTczMDc0ZDM0NjJmZDU0MDRiNzI3NDYxY2UxMThhMzEwMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTAzLTIxICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEV4dHJhY3QgV2ViSW5zcGVjdG9yLlVJQnJlYWtwb2ludCBm
cm9tIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFn
ZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50
LW1hbmFnZXIuaHRtbDoKKwogMjAxMi0wMy0yMSAgVmluZWV0IENoYXVkaGFyeSAgPHJnZjc0OEBt
b3Rvcm9sYS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgxNzA1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIv
YnJlYWtwb2ludC1tYW5hZ2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXItZXhwZWN0ZWQudHh0CmluZGV4IDE3NWU1MGRkZWJl
YTRjZjk0NzIxOTY0NDc5YTYwOTEzNzNlYjU2NTUuLjllMTBkODNiNDgyMzU4MjRmMTdiZjNlMmQy
ZTg2OTAzNzdlNWIyMzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9icmVha3BvaW50LW1hbmFnZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXItZXhwZWN0ZWQudHh0CkBAIC0zLDE1ICsz
LDEzIEBAIFRlc3RzIEJyZWFrcG9pbnRNYW5hZ2VyIGNsYXNzLgogCiBSdW5uaW5nOiB1aVNvdXJj
ZUNvZGVBZGRlZAogYnJlYWtwb2ludEFkZGVkKGEuanMsIDEwLCBmb28gPT0gYmFyLCB0cnVlKQot
YnJlYWtwb2ludEFkZGVkKGEuanMsIDIwLCAsIGZhbHNlKQotYnJlYWtwb2ludEFkZGVkKGIuanMs
IDMsICwgdHJ1ZSkKIGRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChhLmpzOjEwOjApCiticmVh
a3BvaW50QWRkZWQoYS5qcywgMjAsICwgZmFsc2UpCiAKIFJ1bm5pbmc6IHNldEFuZFJlbW92ZUJy
ZWFrcG9pbnRzCiBicmVha3BvaW50QWRkZWQoYS5qcywgMTAsIGZvbyA9PSBiYXIsIHRydWUpCi1i
cmVha3BvaW50QWRkZWQoYS5qcywgMjAsICwgZmFsc2UpCi1icmVha3BvaW50QWRkZWQoYi5qcywg
MywgLCB0cnVlKQogZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MTA6MCkKK2JyZWFr
cG9pbnRBZGRlZChhLmpzLCAyMCwgLCBmYWxzZSkKIGJyZWFrcG9pbnRBZGRlZChhLmpzLCAzMCwg
LCB0cnVlKQogZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MzA6MCkKIGJyZWFrcG9p
bnRSZW1vdmVkKGEuanMsIDMwKQpAQCAtMzIsMTYgKzMwLDE5IEBAIGRlYnVnZ2VyTW9kZWwuc2V0
QnJlYWtwb2ludChhLmpzOjE1OjApCiAKIFJ1bm5pbmc6IHRlc3ROYXZpZ2F0aW9uCiBicmVha3Bv
aW50QWRkZWQoYS5qcywgMTAsIGZvbyA9PSBiYXIsIHRydWUpCi1icmVha3BvaW50QWRkZWQoYS5q
cywgMjAsICwgZmFsc2UpCi1icmVha3BvaW50QWRkZWQoYi5qcywgMywgLCB0cnVlKQogZGVidWdn
ZXJNb2RlbC5zZXRCcmVha3BvaW50KGEuanM6MTA6MCkKK2JyZWFrcG9pbnRBZGRlZChhLmpzLCAy
MCwgLCBmYWxzZSkKIAogTmF2aWdhdGUgdG8gQi4KK2JyZWFrcG9pbnRSZW1vdmVkKGEuanMsIDEw
KQorYnJlYWtwb2ludFJlbW92ZWQoYS5qcywgMjApCiticmVha3BvaW50QWRkZWQoYi5qcywgMywg
LCB0cnVlKQogZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGIuanM6MzowKQogCiBOYXZpZ2F0
ZSBiYWNrIHRvIEEuCi1icmVha3BvaW50UmVtb3ZlZChhLmpzLCAxMCkKK2JyZWFrcG9pbnRSZW1v
dmVkKGIuanMsIDMpCiBicmVha3BvaW50QWRkZWQoYS5qcywgMTEsIGZvbyA9PSBiYXIsIHRydWUp
CiticmVha3BvaW50QWRkZWQoYS5qcywgMjAsICwgZmFsc2UpCiAKIFJ1bm5pbmc6IHRlc3RGb3Jt
YXR0aW5nCiBicmVha3BvaW50QWRkZWQoYy5qcywgNCwgLCB0cnVlKQpAQCAtNDksNiArNTAsNyBA
QCBkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYy5qczo0OjApCiAKIEZvcm1hdCBzb3VyY2Uu
CiBkZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYy5qczo0OjApCiticmVha3BvaW50UmVt
b3ZlZChjLmpzLCA0KQogYnJlYWtwb2ludEFkZGVkKGRlb2JmdXNjYXRlZDpjLmpzLCA0LCAsIHRy
dWUpCiBkZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoYy5qczoyOjApCiBicmVha3BvaW50QWRk
ZWQoZGVvYmZ1c2NhdGVkOmMuanMsIDgsICwgZmFsc2UpCkBAIC02MCw1ICs2Miw5IEBAIGRlYnVn
Z2VyTW9kZWwuc2V0QnJlYWtwb2ludChjLmpzOjY6MCkKIAogUmVsb2FkLgogYnJlYWtwb2ludFJl
bW92ZWQoZGVvYmZ1c2NhdGVkOmMuanMsIDQpCiticmVha3BvaW50UmVtb3ZlZChkZW9iZnVzY2F0
ZWQ6Yy5qcywgMTIpCiticmVha3BvaW50QWRkZWQoZGVvYmZ1c2NhdGVkOmMuanMsIDQsICwgdHJ1
ZSkKK2JyZWFrcG9pbnRBZGRlZChkZW9iZnVzY2F0ZWQ6Yy5qcywgMTIsICwgdHJ1ZSkKK2JyZWFr
cG9pbnRSZW1vdmVkKGRlb2JmdXNjYXRlZDpjLmpzLCA0KQogYnJlYWtwb2ludEFkZGVkKGRlb2Jm
dXNjYXRlZDpjLmpzLCA2LCAsIHRydWUpCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFnZXIuaHRtbAppbmRleCBlODc4NTBlYzk3YTUx
MzA3YTUzMjRiN2E3ZjVkNWI4ZGNhYzhlZTUzLi4zMjcyM2JiMGRkNDE3NTU2MDZkMThmYmQxYTdh
YmI5NWRhZWJjYjYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIv
YnJlYWtwb2ludC1tYW5hZ2VyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyL2JyZWFrcG9pbnQtbWFuYWdlci5odG1sCkBAIC0xNSwxNSArMTUsMTUgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgdmFyIHVpQnJlYWtwb2ludHMgPSB7fTsKICAgICBmdW5jdGlvbiBicmVha3Bv
aW50QWRkZWQoYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJicmVha3BvaW50QWRkZWQoIiArIFticmVha3BvaW50LnVpU291cmNlQ29kZUlkLCBicmVh
a3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJs
ZWRdLmpvaW4oIiwgIikgKyAiKSIpOwotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gYnJlYWtw
b2ludC51aVNvdXJjZUNvZGVJZCArICI6IiArIGJyZWFrcG9pbnQubGluZU51bWJlcjsKKyAgICAg
ICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImJyZWFrcG9pbnRBZGRlZCgiICsgW2JyZWFrcG9p
bnQudWlTb3VyY2VDb2RlLmlkLCBicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29u
ZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWRdLmpvaW4oIiwgIikgKyAiKSIpOworICAgICAgICB2
YXIgYnJlYWtwb2ludElkID0gYnJlYWtwb2ludC51aVNvdXJjZUNvZGUuaWQgKyAiOiIgKyBicmVh
a3BvaW50LmxpbmVOdW1iZXI7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZSghKGJy
ZWFrcG9pbnRJZCBpbiB1aUJyZWFrcG9pbnRzKSk7CiAgICAgICAgIHVpQnJlYWtwb2ludHNbYnJl
YWtwb2ludElkXSA9IGJyZWFrcG9pbnQuY29uZGl0aW9uICsgInwiICsgYnJlYWtwb2ludC5lbmFi
bGVkOwogICAgIH0KICAgICBmdW5jdGlvbiBicmVha3BvaW50UmVtb3ZlZChicmVha3BvaW50KQog
ICAgIHsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImJyZWFrcG9pbnRSZW1vdmVk
KCIgKyBbYnJlYWtwb2ludC51aVNvdXJjZUNvZGVJZCwgYnJlYWtwb2ludC5saW5lTnVtYmVyXS5q
b2luKCIsICIpICsgIikiKTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IGJyZWFrcG9pbnQu
dWlTb3VyY2VDb2RlSWQgKyAiOiIgKyBicmVha3BvaW50LmxpbmVOdW1iZXI7CisgICAgICAgIElu
c3BlY3RvclRlc3QuYWRkUmVzdWx0KCJicmVha3BvaW50UmVtb3ZlZCgiICsgW2JyZWFrcG9pbnQu
dWlTb3VyY2VDb2RlLmlkLCBicmVha3BvaW50LmxpbmVOdW1iZXJdLmpvaW4oIiwgIikgKyAiKSIp
OworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gYnJlYWtwb2ludC51aVNvdXJjZUNvZGUuaWQg
KyAiOiIgKyBicmVha3BvaW50LmxpbmVOdW1iZXI7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0VHJ1ZShicmVha3BvaW50SWQgaW4gdWlCcmVha3BvaW50cyk7CiAgICAgICAgIGRlbGV0ZSB1
aUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07CiAgICAgfQpAQCAtODksNyArODksNyBAQCBmdW5j
dGlvbiB0ZXN0KCkKIAogICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHRzKCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoeyJhLmpzOjEwIjoiZm9vID09
IGJhcnx0cnVlIiwiYS5qczoyMCI6InxmYWxzZSIsImIuanM6MyI6Inx0cnVlIn0sIHVpQnJlYWtw
b2ludHMpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTAiOiJmb28gPT0g
YmFyfHRydWUiLCJhLmpzOjIwIjoifGZhbHNlIn0sIHVpQnJlYWtwb2ludHMpOwogICAgICAgICAg
ICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MTA6MCI6ICJmb28gPT0gYmFyIn0sIGRlYnVnZ2Vy
QnJlYWtwb2ludHMpOwogICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIH0KQEAg
LTE3Myw3ICsxNzMsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAogICAgICAgICAgICAgZnVuY3Rpb24g
bmF2aWdhdGVUb0EoKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFs
cyh7ImEuanM6MTAiOiJmb28gPT0gYmFyfHRydWUiLCJhLmpzOjIwIjoifGZhbHNlIiwiYi5qczoz
IjoifHRydWUifSwgdWlCcmVha3BvaW50cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxz
KHsiYi5qczozIjoifHRydWUifSwgdWlCcmVha3BvaW50cyk7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0RXF1YWxzKHsiYS5qczoxMDowIjoiZm9vID09IGJhciIsImIuanM6MzowIjoiIn0sIGRlYnVn
Z2VyQnJlYWtwb2ludHMpOwogCiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoIlxuTmF2aWdhdGUgYmFjayB0byBBLiIpOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIGZ1bmN0aW9u
IHRlc3QoKQogCiAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdHMoKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh7ImEuanM6MjAiOiJ8ZmFsc2UiLCJi
LmpzOjMiOiJ8dHJ1ZSIsImEuanM6MTEiOiJmb28gPT0gYmFyfHRydWUifSwgdWlCcmVha3BvaW50
cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHsiYS5qczoyMCI6InxmYWxzZSIsImEu
anM6MTEiOiJmb28gPT0gYmFyfHRydWUifSwgdWlCcmVha3BvaW50cyk7CiAgICAgICAgICAgICAg
ICAgYXNzZXJ0RXF1YWxzKHsiYS5qczoxMDowIjoiZm9vID09IGJhciIsImIuanM6MzowIjoiIn0s
IGRlYnVnZ2VyQnJlYWtwb2ludHMpOwogICAgICAgICAgICAgICAgIGNoZWNrQnJlYWtwb2ludFN0
b3JhZ2UoW3sic291cmNlRmlsZUlkIjoiYS5qcyIsImxpbmVOdW1iZXIiOjExLCJjb25kaXRpb24i
OiJmb28gPT0gYmFyIiwiZW5hYmxlZCI6dHJ1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyJzb3VyY2VGaWxlSWQiOiJhLmpzIiwibGluZU51bWJlciI6MjAsImNv
bmRpdGlvbiI6IiIsImVuYWJsZWQiOmZhbHNlfSwKQEAgLTIxNyw2ICsyMTcsNyBAQCBmdW5jdGlv
biB0ZXN0KCkKIAogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJcbkZv
cm1hdCBzb3VyY2UuIik7CiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIucmVzZXQo
KTsKKyAgICAgICAgICAgICAgICBicmVha3BvaW50TWFuYWdlci51aVNvdXJjZUNvZGVSZW1vdmVk
KG9yaWdpbmFsVUlTb3VyY2VDb2RlKTsKIAogICAgICAgICAgICAgICAgIHNjcmlwdE1hcHBpbmcu
cmF3TG9jYXRpb25Ub1VJTG9jYXRpb24gPSBmdW5jdGlvbihyYXdMb2NhdGlvbikgeyByZXR1cm4g
eyBsaW5lTnVtYmVyOiByYXdMb2NhdGlvbi5saW5lTnVtYmVyICogMiwgY29sdW1uTnVtYmVyOiBy
YXdMb2NhdGlvbi5jb2x1bW5OdW1iZXIgKiAyIH07IH07CiAgICAgICAgICAgICAgICAgc2NyaXB0
TWFwcGluZy51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbiA9IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwg
bGluZU51bWJlcikgeyByZXR1cm4geyBzY3JpcHRJZDogImMuanMiLCBsaW5lTnVtYmVyOiBNYXRo
LmZsb29yKGxpbmVOdW1iZXIgLyAyKSwgY29sdW1uTnVtYmVyOiAwIH07IH07Cg==
</data>
<flag name="review"
          id="136942"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>