<?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>157190</bug_id>
          
          <creation_ts>2016-04-29 11:01:08 -0700</creation_ts>
          <short_desc>AX: CharacterOffset not working correctly with composed characters and collapsed white spaces</short_desc>
          <delta_ts>2016-04-29 13:04:41 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>n_wang</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1188711</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-04-29 11:01:08 -0700</bug_when>
    <thetext>When navigating emoji by character, CharacterOffset is using wrong offset to create Range and result in the bad behavior.
Same goes for collapsed white spaces, we should use the real space sequence length to create Range.

&lt;rdar://problem/25919648&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188716</commentid>
    <comment_count>1</comment_count>
      <attachid>277720</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-04-29 11:13:35 -0700</bug_when>
    <thetext>Created attachment 277720
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188735</commentid>
    <comment_count>2</comment_count>
      <attachid>277720</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-04-29 11:40:13 -0700</bug_when>
    <thetext>Comment on attachment 277720
Initial patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        using the helper function in Position to get the real character count for the composed charecter sequence.

charecter -&gt; character

&gt; Source/WebCore/ChangeLog:11
&gt; +        use the actuall space length to create the CharacterOffset in order to generate valid Range object from it.

actuall

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1557
&gt; +                // When there&apos;s collapsed whitespace, text iterator will only count those spaces as one single space.

the text iterator

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1564
&gt; +                    offsetSoFar += appendLength;

offsetSoFar -&gt; cumulativeOffset

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1981
&gt; +        Position previousVpDeepPos = previousVisiblePos.deepEquivalent();

Vp looks weird to me

can you call this *visiblePosition*

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2058
&gt; +    // We don&apos;t always move one &apos;character&apos; a time since there might be composed characters.

at a time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188739</commentid>
    <comment_count>3</comment_count>
      <attachid>277725</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-04-29 11:59:44 -0700</bug_when>
    <thetext>Created attachment 277725
patch

Applied review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188765</commentid>
    <comment_count>4</comment_count>
      <attachid>277725</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-29 13:04:36 -0700</bug_when>
    <thetext>Comment on attachment 277725
patch

Clearing flags on attachment: 277725

Committed r200258: &lt;http://trac.webkit.org/changeset/200258&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188766</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-29 13:04:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277720</attachid>
            <date>2016-04-29 11:13:35 -0700</date>
            <delta_ts>2016-04-29 11:59:44 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17038</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA0LTI5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IENoYXJhY3Rlck9mZnNldCBub3Qg
d29ya2luZyBjb3JyZWN0bHkgd2l0aCBjb21wb3NlZCBjaGFyYWN0ZXJzIGFuZCBjb2xsYXBzZWQg
d2hpdGUgc3BhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTcxOTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXaGVuIG5hdmlnYXRpbmcgZW1vamksIG5leHQvcHJldmlvdXMgdGV4dCBtYXJrZXIgY2Fs
bCBpcyBvbmx5IG1vdmluZyBieSBvbmUgY2hhcmFjdGVyLiBGaXhlZCBpdCBieQorICAgICAgICB1
c2luZyB0aGUgaGVscGVyIGZ1bmN0aW9uIGluIFBvc2l0aW9uIHRvIGdldCB0aGUgcmVhbCBjaGFy
YWN0ZXIgY291bnQgZm9yIHRoZSBjb21wb3NlZCBjaGFyZWN0ZXIgc2VxdWVuY2UuCisgICAgICAg
IEFsc28gdGhlcmUncyBhbm90aGVyIGlzc3VlIHdpdGggY29sbGFwc2VkIHdoaXRlIHNwYWNlcywg
VGV4dEl0ZXJhdG9yIGVtaXRzIG9ubHkgb25lIHNwYWNlLiBTbyB3ZSBoYXZlIHRvIAorICAgICAg
ICB1c2UgdGhlIGFjdHVhbGwgc3BhY2UgbGVuZ3RoIHRvIGNyZWF0ZSB0aGUgQ2hhcmFjdGVyT2Zm
c2V0IGluIG9yZGVyIHRvIGdlbmVyYXRlIHZhbGlkIFJhbmdlIG9iamVjdCBmcm9tIGl0LgorCisg
ICAgICAgIE5ldyB0ZXN0IGNhc2VzIGluIGFjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4dC1t
YXJrZXItcHJldmlvdXMtbmV4dC5odG1sLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNl
VG9PZmZzZXRJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRN
YXJrZXJEYXRhRm9yTmV4dENoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHROb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bmV4dENoYXJhY3Rlck9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0NoYXJhY3Rlck9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9m
V29yZCk6CisKIDIwMTYtMDQtMjkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDAyMzIuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlz
aW9uIDIwMDE1NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTAsMTIgKzE1MTAsMjAgQEAgQ2hhcmFjdGVyT2Zm
c2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgIC8vIFNvbWV0aW1lcyB0ZXh0IGNvbnRl
bnRzIGluIGEgbm9kZSBhcmUgc3BsaXR0ZWQgaW50byBzZXZlcmFsIGl0ZXJhdGlvbnMsIHNvIHRo
YXQgaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRPZmZzZXQoKQogICAgIC8vIG1pZ2h0IG5vdCBiZSB0
aGUgY29ycmVjdCBjaGFyYWN0ZXIgY291bnQuIEhlcmUgd2UgdXNlIGEgcHJldmlvdXNOb2RlIG9i
amVjdCB0byBrZWVwIHRyYWNrIG9mIHRoYXQuCiAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gbnVs
bHB0cjsKKyAgICAvLyBXaGVuIHRleHQgbm9kZSBoYXMgY29sbGFwc2VkIHdoaXRlc3BhY2VzLCB3
ZSBuZWVkIHRvIHRyZWF0IGl0IGRpZmZlcmVudGx5IHNpbmNlIHRleHQgaXRlcmF0b3IKKyAgICAv
LyB3aWxsIG9taXQgdGhlIGNvbGxhcHNlZCBzcGFjZXMgYW5kIG1ha2UgdGhlIG9mZnNldCBpbmFj
Y3VyYXRlLgorICAgIE5vZGUqIGNvbGxhcHNlZFdoaXRlc3BhY2VOb2RlID0gbnVsbHB0cjsKICAg
ICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgewogICAgICAg
ICBpbnQgY3VycmVudExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsKICAgICAgICAg
Ym9vbCBoYXNSZXBsYWNlZE5vZGVPckJSID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBOb2Rl
JiBub2RlID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgY3Vy
cmVudE5vZGUgPSAmbm9kZTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBvZmZzZXQgb2Ygbm9k
ZSB3aXRoIGNvbGxhcHNlZCB3aGl0ZXNwYWNlcyBoYXMgYmVlbiBjYWxjdWFsdGVkIGluIHRoZSBm
aXJzdCBpdGVyYXRpb24uCisgICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBjb2xsYXBzZWRXaGl0
ZXNwYWNlTm9kZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKICAgICAgICAgLy8g
V2hlbiBjdXJyZW50TGVuZ3RoID09IDAsIHdlIGNoZWNrIGlmIHRoZXJlJ3MgYW55IHJlcGxhY2Vk
IG5vZGUuCiAgICAgICAgIC8vIElmIG5vdCwgd2Ugc2tpcCB0aGUgbm9kZSB3aXRoIG5vIGxlbmd0
aC4KICAgICAgICAgaWYgKCFjdXJyZW50TGVuZ3RoKSB7CkBAIC0xNTQ1LDYgKzE1NTMsMjggQEAg
Q2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnROb2RlLT5pc1RleHROb2RlKCkgJiYg
Y3VycmVudE5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZXJl
J3MgY29sbGFwc2VkIHdoaXRlc3BhY2UsIHRleHQgaXRlcmF0b3Igd2lsbCBvbmx5IGNvdW50IHRo
b3NlIHNwYWNlcyBhcyBvbmUgc2luZ2xlIHNwYWNlLgorICAgICAgICAgICAgICAgIC8vIEhlcmUg
d2UgdXNlIHRoZSBSZW5kZXJUZXh0IHRvIGdldCB0aGUgYWN0dWFsIGxlbmd0aC4KKyAgICAgICAg
ICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJlZFRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0Pihj
dXJyZW50Tm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgaW50IGN1cnJlbnRTdGFy
dE9mZnNldCA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlbmRlcmVkVGV4dC0+c3R5bGUoKS5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShpdGVy
YXRvci50ZXh0KClbY3VycmVudExlbmd0aCAtIDFdKSAgJiYgY3VycmVudExlbmd0aCArIGN1cnJl
bnRTdGFydE9mZnNldCAhPSByZW5kZXJlZFRleHQtPmNhcmV0TWF4T2Zmc2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IGFwcGVuZExlbmd0aCA9ICgmcmFuZ2UtPmVuZENvbnRhaW5lcigp
ID09IGN1cnJlbnROb2RlID8gcmFuZ2UtPmVuZE9mZnNldCgpIDogKGludClyZW5kZXJlZFRleHQt
PnRleHQoKS0+bGVuZ3RoKCkpIC0gY3VycmVudFN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAg
ICAgICBsYXN0U3RhcnRPZmZzZXQgPSBjdXJyZW50U3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgIG9mZnNldFNvRmFyICs9IGFwcGVuZExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAg
bGFzdExlbmd0aCA9IGFwcGVuZExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIC8vIEJyZWFrIGVhcmx5IGlmIHdlIGhhdmUgYWR2YW5jZWQgZW5vdWdoIGNo
YXJhY3RlcnMuCisgICAgICAgICAgICAgICAgICAgIGlmICghdG9Ob2RlRW5kICYmIG9mZnNldFNv
RmFyID49IG9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5DaGFyYWN0
ZXIgPSBvZmZzZXQgLSAob2Zmc2V0U29GYXIgLSBsYXN0TGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSA9IGN1cnJlbnROb2RlOworICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvZmZzZXRTb0ZhciArPSBjdXJyZW50TGVu
Z3RoOwogICAgICAgICB9CkBAIC0xODUwLDIyICsxODgwLDM2IEBAIHZvaWQgQVhPYmplY3RDYWNo
ZTo6dGV4dE1hcmtlckRhdGFGb3JOZXgKIHsKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dCA9IGNo
YXJhY3Rlck9mZnNldDsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXMgPSBjaGFyYWN0ZXJP
ZmZzZXQ7CisgICAgYm9vbCBzaG91bGRDb250aW51ZTsKICAgICBkbyB7CisgICAgICAgIHNob3Vs
ZENvbnRpbnVlID0gZmFsc2U7CiAgICAgICAgIG5leHQgPSBuZXh0Q2hhcmFjdGVyT2Zmc2V0KG5l
eHQsIGZhbHNlKTsKICAgICAgICAgaWYgKHNob3VsZFNraXBCb3VuZGFyeShwcmV2aW91cywgbmV4
dCkpCiAgICAgICAgICAgICBuZXh0ID0gbmV4dENoYXJhY3Rlck9mZnNldChuZXh0LCBmYWxzZSk7
CiAgICAgICAgIHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRh
LCBuZXh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHNob3VsZCBza2lwIG5leHQgQ2hhcmFj
dGV0T2Zmc2V0IGlmIGl0J3MgdmlzdWFsbHkgdGhlIHNhbWUuCisgICAgICAgIGlmICghbGVuZ3Ro
Rm9yUmFuZ2UocmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHByZXZpb3VzLCBuZXh0
KS5nZXQoKSkpCisgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IHRydWU7CiAgICAgICAgIHBy
ZXZpb3VzID0gbmV4dDsKLSAgICB9IHdoaWxlICh0ZXh0TWFya2VyRGF0YS5pZ25vcmVkKTsKKyAg
ICB9IHdoaWxlICh0ZXh0TWFya2VyRGF0YS5pZ25vcmVkIHx8IHNob3VsZENvbnRpbnVlKTsKIH0K
IAogdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclByZXZpb3VzQ2hhcmFjdGVy
T2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSwgY29uc3QgQ2hhcmFjdGVyT2Zm
c2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzID0g
Y2hhcmFjdGVyT2Zmc2V0OworICAgIENoYXJhY3Rlck9mZnNldCBuZXh0ID0gY2hhcmFjdGVyT2Zm
c2V0OworICAgIGJvb2wgc2hvdWxkQ29udGludWU7CiAgICAgZG8geworICAgICAgICBzaG91bGRD
b250aW51ZSA9IGZhbHNlOwogICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zm
c2V0KHByZXZpb3VzLCBmYWxzZSk7CiAgICAgICAgIHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVy
T2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBwcmV2aW91cyk7Ci0gICAgfSB3aGlsZSAodGV4dE1hcmtl
ckRhdGEuaWdub3JlZCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBzaG91bGQgc2tpcCBwcmV2
aW91cyBDaGFyYWN0ZXRPZmZzZXQgaWYgaXQncyB2aXN1YWxseSB0aGUgc2FtZS4KKyAgICAgICAg
aWYgKCFsZW5ndGhGb3JSYW5nZShyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMocHJl
dmlvdXMsIG5leHQpLmdldCgpKSkKKyAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsK
KyAgICAgICAgbmV4dCA9IHByZXZpb3VzOworICAgIH0gd2hpbGUgKHRleHRNYXJrZXJEYXRhLmln
bm9yZWQgfHwgc2hvdWxkQ29udGludWUpOwogfQogCiBOb2RlKiBBWE9iamVjdENhY2hlOjpuZXh0
Tm9kZShOb2RlKiBub2RlKSBjb25zdApAQCAtMTkzNCwxNyArMTk3OCwyMiBAQCBDaGFyYWN0ZXJP
ZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyCiAgICAgICAgIHByZXZpb3VzVmlzaWJsZVBv
cyA9IHZwOwogICAgICAgICB2cCA9IG9iai0+bmV4dFZpc2libGVQb3NpdGlvbih2cCk7CiAgICAg
ICAgIHZwRGVlcFBvcyA9IHZwLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgIFBvc2l0aW9uIHBy
ZXZpb3VzVnBEZWVwUG9zID0gcHJldmlvdXNWaXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CiAg
ICAgICAgIC8vIFNvbWV0aW1lcyBuZXh0VmlzaWJsZVBvc2l0aW9uIHdpbGwgZ2l2ZSB0aGUgc2Ft
ZSBWaXNpYmxlUG9zdGlvbiwKICAgICAgICAgLy8gd2UgYnJlYWsgaGVyZSB0byBhdm9pZCBpbmZp
bml0ZSBsb29wLgotICAgICAgICBpZiAodnBEZWVwUG9zLmVxdWFscyhwcmV2aW91c1Zpc2libGVQ
b3MuZGVlcEVxdWl2YWxlbnQoKSkpCisgICAgICAgIGlmICh2cERlZXBQb3MuZXF1YWxzKHByZXZp
b3VzVnBEZWVwUG9zKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjaGFyYWN0ZXJPZmZz
ZXQrKzsKICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gVmlzaWJsZVBvc3Rpb24gbW92ZXMgdG8g
bmV4dCBub2RlLCBpdCB3aWxsIGNvdW50IHRoZSBsZWFkaW5nIGxpbmUgYnJlYWsgYXMKICAgICAg
ICAgLy8gMSBvZmZzZXQsIHdoaWNoIHdlIHNob3VsZG4ndCBpbmNsdWRlIGluIENoYXJhY3Rlck9m
ZnNldC4KLSAgICAgICAgaWYgKHZwRGVlcFBvcy5kZXByZWNhdGVkTm9kZSgpICE9IHByZXZpb3Vz
VmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpIHsKKyAgICAgICAg
aWYgKHZwRGVlcFBvcy5kZXByZWNhdGVkTm9kZSgpICE9IHByZXZpb3VzVnBEZWVwUG9zLmRlcHJl
Y2F0ZWROb2RlKCkpIHsKICAgICAgICAgICAgIGlmICh2cC5jaGFyYWN0ZXJCZWZvcmUoKSA9PSAn
XG4nKQogICAgICAgICAgICAgICAgIGNoYXJhY3Rlck9mZnNldC0tOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gU29tZXRpbWVzIFZpc2libGVQb3NpdGlvbiB3aWxsIG1vdmUgbXVs
dGlwbGUgY2hhcmFjdGVycywgbGlrZSBlbW9qaS4KKyAgICAgICAgICAgIGlmICh2cERlZXBQb3Mu
ZGVwcmVjYXRlZE5vZGUoKS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAg
Y2hhcmFjdGVyT2Zmc2V0ICs9IHZwRGVlcFBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHBy
ZXZpb3VzVnBEZWVwUG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gMTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTIwMDYsNyArMjA1NSw5IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVj
dENhY2hlOjpuZXh0Q2hhcmEKICAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0LmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CiAgICAgCi0gICAgQ2hhcmFjdGVyT2Zmc2V0
IG5leHQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQu
bm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCArIDEpOworICAgIC8vIFdlIGRvbid0IGFsd2F5
cyBtb3ZlIG9uZSAnY2hhcmFjdGVyJyBhIHRpbWUgc2luY2UgdGhlcmUgbWlnaHQgYmUgY29tcG9z
ZWQgY2hhcmFjdGVycy4KKyAgICBpbnQgbmV4dE9mZnNldCA9IFBvc2l0aW9uOjp1bmNoZWNrZWRO
ZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0KTsK
KyAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dCA9IGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZz
ZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBuZXh0T2Zmc2V0KTsKICAgICAKICAgICAvLyBUbyBi
ZSBjb25zaXN0ZW50IHdpdGggVmlzaWJsZVBvc2l0aW9uLCB3ZSBzaG91bGQgY29uc2lkZXIgdGhl
IGNhc2UgdGhhdCBjdXJyZW50IG5vZGUgZW5kIHRvIG5leHQgbm9kZSBzdGFydCBjb3VudHMgMSBv
ZmZzZXQuCiAgICAgYm9vbCBpc1JlcGxhY2VkT3JCUiA9IGlzUmVwbGFjZWROb2RlT3JCUihjaGFy
YWN0ZXJPZmZzZXQubm9kZSkgfHwgaXNSZXBsYWNlZE5vZGVPckJSKG5leHQubm9kZSk7CkBAIC0y
MDI1LDcgKzIwNzYsOSBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXND
CiAgICAgaWYgKCFpZ25vcmVQcmV2aW91c05vZGVFbmQgJiYgIWNoYXJhY3Rlck9mZnNldC5vZmZz
ZXQpCiAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpjaGFy
YWN0ZXJPZmZzZXQubm9kZSwgMCk7CiAgICAgCi0gICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZv
ck5vZGVBbmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zm
c2V0IC0gMSwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOworICAgIC8vIFdlIGRvbid0IGFs
d2F5cyBtb3ZlIG9uZSAnY2hhcmFjdGVyJyBhIHRpbWUgc2luY2UgdGhlcmUgbWlnaHQgYmUgY29t
cG9zZWQgY2hhcmFjdGVycy4KKyAgICBpbnQgcHJldmlvdXNPZmZzZXQgPSBQb3NpdGlvbjo6dW5j
aGVja2VkUHJldmlvdXNPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNl
dC5vZmZzZXQpOworICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpj
aGFyYWN0ZXJPZmZzZXQubm9kZSwgcHJldmlvdXNPZmZzZXQsIFRyYXZlcnNlT3B0aW9uSW5jbHVk
ZVN0YXJ0KTsKIH0KIAogQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnN0YXJ0Q2hhcmFj
dGVyT2Zmc2V0T2ZXb3JkKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBF
V29yZFNpZGUgc2lkZSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDE1NikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA0LTI5ICBO
YW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IENoYXJhY3Rlck9mZnNl
dCBub3Qgd29ya2luZyBjb3JyZWN0bHkgd2l0aCBjb21wb3NlZCBjaGFyYWN0ZXJzIGFuZCBjb2xs
YXBzZWQgd2hpdGUgc3BhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTcxOTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2Lmh0bWw6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91
cy1uZXh0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3RleHQtbWFya2Vy
L3RleHQtbWFya2VyLXByZXZpb3VzLW5leHQuaHRtbDoKKwogMjAxNi0wNC0yNyAgRGFuaWVsIEJh
dGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQ1NQOiBBZGQgdGVzdHMgZm9yIHNl
dHRpbmcgYWxsb3dDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VTdGFyVG9NYXRjaEFueVByb3Rv
Y29sCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3Jk
LW5hdi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtbWFya2VyLXdvcmQtbmF2Lmh0bWwJKHJldmlzaW9uIDIwMDE1NikKKysrIExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDcgKzY3LDcgQEAgdGV4dAogICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgdGhl
IGNhc2Ugd2l0aCBzcGFuCiAgICAgICAgIC8vIEF0ICJUIiBpbiAiVGhpc2lzIiwgc2hvdWxkIHJl
dHVybiB0aGUgd29yZCBhcyAiVGhpc2lzbG9uZ3dvcmQiLgotICAgICAgICBjdXJyZW50TWFya2Vy
ID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAyLCB0ZXh0KTsKKyAgICAgICAgY3Vy
cmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMSwgdGV4dCk7CiAg
ICAgICAgIC8vIEF0ICIgIiBiZWZvcmUgIkkiLCB0aGUgd29yZCBzaG91bGQgYmUgIkknbGwiLgog
ICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAx
NCwgdGV4dCk7CiAgICAgICAgIC8vIEF0ICIgIiBiZWZvcmUgInRyeSIsIHRoZSB3b3JkIHNob3Vs
ZCBleGNsdWRlcyAiLiIKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJr
ZXIvdGV4dC1tYXJrZXItcHJldmlvdXMtbmV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91
cy1uZXh0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjAwMTU2KQorKysgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0LWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDEwIEBAIGMgIGQKIAogY2FuJ3Qgc2VsZWN0
CiBhYmMgZGUgZgor8J+Yg/CfmI8KKworYSBiCisKIFRoaXMgdGVzdHMgdGhlIG5leHQvcHJldmlv
dXMgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCiAKIE9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KQEAgLTI4LDYgKzMyLDE1IEBAIFBBU1MgdGV4dDIuYWNj
ZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWEKIFBBU1MgdGV4dDIuYWNjZXNzaWJpbGl0eUVsZW1l
bnRGb3JUZXh0TWFya2VyKGN1cnJlbnRNYXJrZXIpLmlzRXF1YWwodGV4dDIuY2hpbGRBdEluZGV4
KDIpKSBpcyB0cnVlCiBQQVNTIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJh
bmdlKSBpcyAnZicKIFBBU1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFu
Z2UpIGlzICdhJworUEFTUyB0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aChlbW9qaVRleHRNYXJr
ZXJSYW5nZSkgaXMgNAorUEFTUyB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRl
eHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCkp
IGlzICfwn5iPJworUEFTUyB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRleHRN
YXJrZXJSYW5nZUZvck1hcmtlcnMocmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCkpIGlz
ICfwn5iDJworUEFTUyB0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aChjb2xsYXBzZWRXaGl0ZXNw
YWNlTWFya2VyUmFuZ2UpIGlzIDMKK1BBU1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uo
dGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVzdWx0LmN1
cnJlbnQpKSBpcyAnYScKK1BBU1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dC50
ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVzdWx0LmN1cnJlbnQp
KSBpcyAnICcKK1BBU1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFy
a2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVzdWx0LmN1cnJlbnQpKSBpcyAn
YicKK1BBU1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFya2VyUmFu
Z2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVzdWx0LmN1cnJlbnQpKSBpcyAnICcKK1BB
U1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JN
YXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVzdWx0LmN1cnJlbnQpKSBpcyAnYScKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90
ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0Lmh0bWwJKHJldmlzaW9uIDIwMDE1NikKKysrIExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4dC1tYXJrZXItcHJldmlvdXMtbmV4
dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogPGh0bWw+CiA8aGVhZD4KIDxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPG1l
dGEgY2hhcnNldD0iVVRGLTE2Ij4KIDwvaGVhZD4KIDxzdHlsZT4KIC51c2Vyc2VsZWN0IHsgdXNl
ci1zZWxlY3Q6IG5vbmU7IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IH0KQEAgLTI2LDYgKzI3
LDEwIEBAIGRlCiBmCiA8L2Rpdj4KIAorPHAgaWQ9InRleHQ1Ij7wn5iD8J+YjzxwPgorCis8cCBp
ZD0idGV4dDYiPmEgICAgIGI8L3A+CisKIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgogPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CiAKQEAgLTcxLDggKzc2LDggQEAgZgogICAgICAgICBtYXJrZXJS
YW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhwcmV2aW91c01hcmtlciwgY3Vy
cmVudE1hcmtlcik7CiAgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZShtYXJrZXJSYW5nZSkiLCAibmV3bGluZSIpOwogICAgICAgICAKLSAgICAgICAgLy8gVHJh
dmVyc2UgYmFja3dhcmRzIHR3byBtb3JlIGNoYXJhY3RlciwgaXQgd2lsbCBsYW5kIGF0IHRoZSBs
YXN0IGNoYXJhY3RlciBvZiAidGV4dCIuCi0gICAgICAgIHJlc3VsdCA9IGJhY2t3YXJkcygyLCBw
cmV2aW91c01hcmtlciwgY3VycmVudE1hcmtlciwgdGV4dCk7CisgICAgICAgIC8vIFRyYXZlcnNl
IGJhY2t3YXJkcyBvbmUgbW9yZSBjaGFyYWN0ZXIsIGl0IHdpbGwgbGFuZCBhdCB0aGUgbGFzdCBj
aGFyYWN0ZXIgb2YgInRleHQiLgorICAgICAgICByZXN1bHQgPSBiYWNrd2FyZHMoMSwgcHJldmlv
dXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIsIHRleHQpOwogICAgICAgICBwcmV2aW91c01hcmtlciA9
IHJlc3VsdC5wcmV2aW91czsKICAgICAgICAgY3VycmVudE1hcmtlciA9IHJlc3VsdC5jdXJyZW50
OwogICAgICAgICBtYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2Vycyhw
cmV2aW91c01hcmtlciwgY3VycmVudE1hcmtlcik7CkBAIC05Myw4ICs5OCw4IEBAIGYKICAgICAg
ICAgbWFya2VyUmFuZ2UgPSB0ZXh0Mi50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHByZXZpb3Vz
TWFya2VyLCBjdXJyZW50TWFya2VyKTsKICAgICAgICAgc2hvdWxkQmUoInRleHQyLnN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkiLCAiJ2QnIik7CiAgICAgICAgIAotICAgICAg
ICAvLyBUcmF2ZXJzZSBiYWNrd2FyZHMgOCBjaGFyYWN0ZXJzLCBpdCB3aWxsIGxhbmQgYXQgdGhl
IGxhc3QgY2hhcmFjdGVyIG9mICJ0ZXh0MSIuCi0gICAgICAgIHJlc3VsdCA9IGJhY2t3YXJkcyg4
LCBwcmV2aW91c01hcmtlciwgY3VycmVudE1hcmtlciwgdGV4dDIpOworICAgICAgICAvLyBUcmF2
ZXJzZSBiYWNrd2FyZHMgNiBjaGFyYWN0ZXJzLCBpdCB3aWxsIGxhbmQgYXQgdGhlIGxhc3QgY2hh
cmFjdGVyIG9mICJ0ZXh0MSIuCisgICAgICAgIHJlc3VsdCA9IGJhY2t3YXJkcyg2LCBwcmV2aW91
c01hcmtlciwgY3VycmVudE1hcmtlciwgdGV4dDIpOwogICAgICAgICBwcmV2aW91c01hcmtlciA9
IHJlc3VsdC5wcmV2aW91czsKICAgICAgICAgY3VycmVudE1hcmtlciA9IHJlc3VsdC5jdXJyZW50
OwogICAgICAgICBtYXJrZXJSYW5nZSA9IHRleHQyLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMo
cHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIpOwpAQCAtMTYzLDYgKzE2OCwzMyBAQCBmCiAg
ICAgICAgIG1hcmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHN0YXJ0
TWFya2VyLCBjdXJyZW50TWFya2VyKQogICAgICAgICBzaG91bGRCZSgidGV4dC5zdHJpbmdGb3JU
ZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpIiwgIidhJyIpOwogICAgICAgICAKKyAgICAgICAg
Ly8gVGVzdCBjYXNlIHdpdGggZW1vamkuCisgICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ1Iik7CisgICAgICAgIHZhciBlbW9q
aVRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsK
KyAgICAgICAgc2hvdWxkQmUoInRleHQudGV4dE1hcmtlclJhbmdlTGVuZ3RoKGVtb2ppVGV4dE1h
cmtlclJhbmdlKSIsICI0Iik7CisgICAgICAgIC8vIE1ha2Ugc3VyZSBuYXZpZ2F0aW5nIG5leHQv
cHJldmlvdXMgdGV4dCBtYXJrZXIgaXMgYnkgZW1vamkuCisgICAgICAgIHN0YXJ0TWFya2VyID0g
dGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoZW1vamlUZXh0TWFya2VyUmFu
Z2UpOworICAgICAgICByZXN1bHQgPSBmb3J3YXJkKDIsIHByZXZpb3VzTWFya2VyLCBzdGFydE1h
cmtlciwgdGV4dCk7CisgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZSh0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocmVzdWx0LnByZXZpb3VzLCByZXN1
bHQuY3VycmVudCkpIiwgIifwn5iPJyIpOworICAgICAgICByZXN1bHQgPSBiYWNrd2FyZHMoMSwg
cmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCwgdGV4dCk7CisgICAgICAgIHNob3VsZEJl
KCJ0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1h
cmtlcnMocmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCkpIiwgIifwn5iDJyIpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGVzdCBjYXNlIHdpdGggY29sbGFwc2VkIHdoaXRlc3BhY2UuCisg
ICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5
SWQoInRleHQ2Iik7CisgICAgICAgIHZhciBjb2xsYXBzZWRXaGl0ZXNwYWNlTWFya2VyUmFuZ2Ug
PSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgIHNob3VsZEJl
KCJ0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0aChjb2xsYXBzZWRXaGl0ZXNwYWNlTWFya2VyUmFu
Z2UpIiwgIjMiKTsKKyAgICAgICAgc3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZv
clRleHRNYXJrZXJSYW5nZShjb2xsYXBzZWRXaGl0ZXNwYWNlTWFya2VyUmFuZ2UpOworICAgICAg
ICByZXN1bHQgPSBmb3J3YXJkKDEsIHByZXZpb3VzTWFya2VyLCBzdGFydE1hcmtlciwgdGV4dCk7
CisgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRl
eHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCkp
IiwgIidhJyIpOworICAgICAgICByZXN1bHQgPSBmb3J3YXJkKDEsIHJlc3VsdC5wcmV2aW91cywg
cmVzdWx0LmN1cnJlbnQsIHRleHQpOworICAgICAgICBzaG91bGRCZSgidGV4dC5zdHJpbmdGb3JU
ZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2
aW91cywgcmVzdWx0LmN1cnJlbnQpKSIsICInICciKTsKKyAgICAgICAgcmVzdWx0ID0gZm9yd2Fy
ZCgxLCByZXN1bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50LCB0ZXh0KTsKKyAgICAgICAgc2hv
dWxkQmUoInRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRleHQudGV4dE1hcmtlclJhbmdl
Rm9yTWFya2VycyhyZXN1bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50KSkiLCAiJ2InIik7Cisg
ICAgICAgIHJlc3VsdCA9IGJhY2t3YXJkcygxLCByZXN1bHQucHJldmlvdXMsIHJlc3VsdC5jdXJy
ZW50LCB0ZXh0KTsKKyAgICAgICAgc2hvdWxkQmUoInRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJh
bmdlKHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhyZXN1bHQucHJldmlvdXMsIHJlc3Vs
dC5jdXJyZW50KSkiLCAiJyAnIik7CisgICAgICAgIHJlc3VsdCA9IGJhY2t3YXJkcygxLCByZXN1
bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50LCB0ZXh0KTsKKyAgICAgICAgc2hvdWxkQmUoInRl
eHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2Vy
cyhyZXN1bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50KSkiLCAiJ2EnIik7CisgICAgICAgIAog
ICAgICAgICBmdW5jdGlvbiBmb3J3YXJkKGNvdW50LCBwcmV2aW91c01hcmtlciwgY3VycmVudE1h
cmtlciwgb2JqKSB7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKICAgICAgICAgICAgICAgICBwcmV2aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277725</attachid>
            <date>2016-04-29 11:59:44 -0700</date>
            <delta_ts>2016-04-29 13:04:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>20300</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTA0LTI5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IENoYXJhY3Rlck9mZnNldCBub3Qg
d29ya2luZyBjb3JyZWN0bHkgd2l0aCBjb21wb3NlZCBjaGFyYWN0ZXJzIGFuZCBjb2xsYXBzZWQg
d2hpdGUgc3BhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTcxOTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXaGVuIG5hdmlnYXRpbmcgZW1vamksIG5leHQvcHJldmlvdXMgdGV4dCBtYXJrZXIgY2Fs
bCBpcyBvbmx5IG1vdmluZyBieSBvbmUgY2hhcmFjdGVyLiBGaXhlZCBpdCBieQorICAgICAgICB1
c2luZyB0aGUgaGVscGVyIGZ1bmN0aW9uIGluIFBvc2l0aW9uIHRvIGdldCB0aGUgcmVhbCBjaGFy
YWN0ZXIgY291bnQgZm9yIHRoZSBjb21wb3NlZCBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAg
IEFsc28gdGhlcmUncyBhbm90aGVyIGlzc3VlIHdpdGggY29sbGFwc2VkIHdoaXRlIHNwYWNlcywg
VGV4dEl0ZXJhdG9yIGVtaXRzIG9ubHkgb25lIHNwYWNlLiBTbyB3ZSBoYXZlIHRvIAorICAgICAg
ICB1c2UgdGhlIGFjdHVhbCBzcGFjZSBsZW5ndGggdG8gY3JlYXRlIHRoZSBDaGFyYWN0ZXJPZmZz
ZXQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdmFsaWQgUmFuZ2Ugb2JqZWN0IGZyb20gaXQuCisKKyAg
ICAgICAgTmV3IHRlc3QgY2FzZXMgaW4gYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1h
cmtlci1wcmV2aW91cy1uZXh0Lmh0bWwuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dHJhdmVyc2VU
b09mZnNldEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1h
cmtlckRhdGFGb3JOZXh0Q2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bmV4dE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZX
b3JkKToKKwogMjAxNi0wNC0yOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwMDIzMi4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNp
b24gMjAwMTU2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw3ICsxNDc5LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0
IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgIGJvb2wgdG9Ob2RlRW5kID0gb3B0aW9uICYg
VHJhdmVyc2VPcHRpb25Ub05vZGVFbmQ7CiAgICAgCiAgICAgaW50IG9mZnNldEluQ2hhcmFjdGVy
ID0gMDsKLSAgICBpbnQgb2Zmc2V0U29GYXIgPSAwOworICAgIGludCBjdW11bGF0aXZlT2Zmc2V0
ID0gMDsKICAgICBpbnQgcmVtYWluaW5nID0gMDsKICAgICBpbnQgbGFzdExlbmd0aCA9IDA7CiAg
ICAgTm9kZSogY3VycmVudE5vZGUgPSBudWxscHRyOwpAQCAtMTQ5NCw4ICsxNDk0LDggQEAgQ2hh
cmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgICAgICBsYXN0U3RhcnRP
ZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQoKTsKICAgICAgICAgaWYgKG9mZnNldCA+IDAgfHwg
dG9Ob2RlRW5kKSB7CiAgICAgICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFj
ZWROb2RlTmVlZHNDaGFyYWN0ZXIoY3VycmVudE5vZGUpIHx8IChjdXJyZW50Tm9kZS0+cmVuZGVy
ZXIoKSAmJiBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKS0+aXNCUigpKSkKLSAgICAgICAgICAgICAg
ICBvZmZzZXRTb0ZhcisrOwotICAgICAgICAgICAgbGFzdExlbmd0aCA9IG9mZnNldFNvRmFyOwor
ICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVPZmZzZXQrKzsKKyAgICAgICAgICAgIGxhc3RMZW5n
dGggPSBjdW11bGF0aXZlT2Zmc2V0OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXaGVu
IGdvaW5nIGJhY2t3YXJkcywgc3RheVdpdGhpblJhbmdlIGlzIGZhbHNlLgogICAgICAgICAgICAg
Ly8gSGVyZSB3aGVuIHdlIGRvbid0IGhhdmUgYW55IGNoYXJhY3RlciB0byBtb3ZlIGFuZCB3ZSBh
cmUgZ29pbmcgYmFja3dhcmRzLCB3ZSB0cmF2ZXJzZSB0byB0aGUgcHJldmlvdXMgbm9kZS4KQEAg
LTE1MTAsMTkgKzE1MTAsMjcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZl
cnNlVAogICAgIC8vIFNvbWV0aW1lcyB0ZXh0IGNvbnRlbnRzIGluIGEgbm9kZSBhcmUgc3BsaXR0
ZWQgaW50byBzZXZlcmFsIGl0ZXJhdGlvbnMsIHNvIHRoYXQgaXRlcmF0b3IucmFuZ2UoKS0+c3Rh
cnRPZmZzZXQoKQogICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgY29ycmVjdCBjaGFyYWN0ZXIgY291
bnQuIEhlcmUgd2UgdXNlIGEgcHJldmlvdXNOb2RlIG9iamVjdCB0byBrZWVwIHRyYWNrIG9mIHRo
YXQuCiAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gbnVsbHB0cjsKKyAgICAvLyBXaGVuIHRleHQg
bm9kZSBoYXMgY29sbGFwc2VkIHdoaXRlc3BhY2VzLCB3ZSBuZWVkIHRvIHRyZWF0IGl0IGRpZmZl
cmVudGx5IHNpbmNlIHRleHQgaXRlcmF0b3IKKyAgICAvLyB3aWxsIG9taXQgdGhlIGNvbGxhcHNl
ZCBzcGFjZXMgYW5kIG1ha2UgdGhlIG9mZnNldCBpbmFjY3VyYXRlLgorICAgIE5vZGUqIGNvbGxh
cHNlZFdoaXRlc3BhY2VOb2RlID0gbnVsbHB0cjsKICAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5k
KCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgewogICAgICAgICBpbnQgY3VycmVudExlbmd0aCA9IGl0
ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsKICAgICAgICAgYm9vbCBoYXNSZXBsYWNlZE5vZGVPckJS
ID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBOb2RlJiBub2RlID0gaXRlcmF0b3IucmFuZ2Uo
KS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgY3VycmVudE5vZGUgPSAmbm9kZTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoZSBvZmZzZXQgb2Ygbm9kZSB3aXRoIGNvbGxhcHNlZCB3aGl0ZXNw
YWNlcyBoYXMgYmVlbiBjYWxjdWFsdGVkIGluIHRoZSBmaXJzdCBpdGVyYXRpb24uCisgICAgICAg
IGlmIChjdXJyZW50Tm9kZSA9PSBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKICAgICAgICAgLy8gV2hlbiBjdXJyZW50TGVuZ3RoID09IDAs
IHdlIGNoZWNrIGlmIHRoZXJlJ3MgYW55IHJlcGxhY2VkIG5vZGUuCiAgICAgICAgIC8vIElmIG5v
dCwgd2Ugc2tpcCB0aGUgbm9kZSB3aXRoIG5vIGxlbmd0aC4KICAgICAgICAgaWYgKCFjdXJyZW50
TGVuZ3RoKSB7CiAgICAgICAgICAgICBpbnQgc3ViT2Zmc2V0ID0gaXRlcmF0b3IucmFuZ2UoKS0+
c3RhcnRPZmZzZXQoKTsKICAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUudHJhdmVy
c2VUb0NoaWxkQXQoc3ViT2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihjaGlsZE5vZGUpKSB7Ci0gICAgICAgICAg
ICAgICAgb2Zmc2V0U29GYXIrKzsKKyAgICAgICAgICAgICAgICBjdW11bGF0aXZlT2Zmc2V0Kys7
CiAgICAgICAgICAgICAgICAgY3VycmVudExlbmd0aCsrOwogICAgICAgICAgICAgICAgIGN1cnJl
bnROb2RlID0gY2hpbGROb2RlOwogICAgICAgICAgICAgICAgIGhhc1JlcGxhY2VkTm9kZU9yQlIg
PSB0cnVlOwpAQCAtMTU0NSw4ICsxNTUzLDMwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENh
Y2hlOjp0cmF2ZXJzZVQKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlm
IChjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgpICYmIGN1cnJlbnROb2RlLT5yZW5kZXJlcigpKSB7
CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGVyZSdzIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLCB0
aGUgdGV4dCBpdGVyYXRvciB3aWxsIG9ubHkgY291bnQgdGhvc2Ugc3BhY2VzIGFzIG9uZSBzaW5n
bGUgc3BhY2UuCisgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSB1c2UgdGhlIFJlbmRlclRleHQg
dG8gZ2V0IHRoZSBhY3R1YWwgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIHJl
bmRlcmVkVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KGN1cnJlbnROb2RlLT5yZW5kZXJlcigp
KTsKKyAgICAgICAgICAgICAgICBpbnQgY3VycmVudFN0YXJ0T2Zmc2V0ID0gaXRlcmF0b3IucmFu
Z2UoKS0+c3RhcnRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyZWRUZXh0LT5z
dHlsZSgpLmlzQ29sbGFwc2libGVXaGl0ZVNwYWNlKGl0ZXJhdG9yLnRleHQoKVtjdXJyZW50TGVu
Z3RoIC0gMV0pICAmJiBjdXJyZW50TGVuZ3RoICsgY3VycmVudFN0YXJ0T2Zmc2V0ICE9IHJlbmRl
cmVkVGV4dC0+Y2FyZXRNYXhPZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgYXBw
ZW5kTGVuZ3RoID0gKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgPT0gY3VycmVudE5vZGUgPyByYW5n
ZS0+ZW5kT2Zmc2V0KCkgOiAoaW50KXJlbmRlcmVkVGV4dC0+dGV4dCgpLT5sZW5ndGgoKSkgLSBj
dXJyZW50U3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGxhc3RTdGFydE9mZnNldCA9
IGN1cnJlbnRTdGFydE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGl2ZU9mZnNl
dCArPSBhcHBlbmRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGxhc3RMZW5ndGggPSBhcHBl
bmRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBC
cmVhayBlYXJseSBpZiB3ZSBoYXZlIGFkdmFuY2VkIGVub3VnaCBjaGFyYWN0ZXJzLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoIXRvTm9kZUVuZCAmJiBjdW11bGF0aXZlT2Zmc2V0ID49IG9mZnNl
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0SW5DaGFyYWN0ZXIgPSBvZmZzZXQg
LSAoY3VtdWxhdGl2ZU9mZnNldCAtIGxhc3RMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZmluaXNoZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGNvbGxhcHNlZFdoaXRlc3BhY2VOb2RlID0gY3VycmVudE5vZGU7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG9mZnNldFNvRmFyICs9IGN1cnJlbnRMZW5ndGg7Cisg
ICAgICAgICAgICBjdW11bGF0aXZlT2Zmc2V0ICs9IGN1cnJlbnRMZW5ndGg7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gcHJldmlvdXNOb2RlKQpAQCAtMTU1Nyw4ICsx
NTg3LDggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBCcmVhayBlYXJseSBpZiB3ZSBoYXZlIGFkdmFuY2Vk
IGVub3VnaCBjaGFyYWN0ZXJzLgotICAgICAgICBpZiAoIXRvTm9kZUVuZCAmJiBvZmZzZXRTb0Zh
ciA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgIG9mZnNldEluQ2hhcmFjdGVyID0gb2Zmc2V0IC0g
KG9mZnNldFNvRmFyIC0gbGFzdExlbmd0aCk7CisgICAgICAgIGlmICghdG9Ob2RlRW5kICYmIGN1
bXVsYXRpdmVPZmZzZXQgPj0gb2Zmc2V0KSB7CisgICAgICAgICAgICBvZmZzZXRJbkNoYXJhY3Rl
ciA9IG9mZnNldCAtIChjdW11bGF0aXZlT2Zmc2V0IC0gbGFzdExlbmd0aCk7CiAgICAgICAgICAg
ICBmaW5pc2hlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTU2
OCw3ICsxNTk4LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAog
ICAgIGlmICghZmluaXNoZWQpIHsKICAgICAgICAgb2Zmc2V0SW5DaGFyYWN0ZXIgPSBsYXN0TGVu
Z3RoOwogICAgICAgICBpZiAoIXRvTm9kZUVuZCkKLSAgICAgICAgICAgIHJlbWFpbmluZyA9IG9m
ZnNldCAtIG9mZnNldFNvRmFyOworICAgICAgICAgICAgcmVtYWluaW5nID0gb2Zmc2V0IC0gY3Vt
dWxhdGl2ZU9mZnNldDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldChj
dXJyZW50Tm9kZSwgbGFzdFN0YXJ0T2Zmc2V0LCBvZmZzZXRJbkNoYXJhY3RlciwgcmVtYWluaW5n
KTsKQEAgLTE4NTAsMjIgKzE4ODAsMzYgQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2Vy
RGF0YUZvck5leAogewogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0
OwogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91cyA9IGNoYXJhY3Rlck9mZnNldDsKKyAgICBi
b29sIHNob3VsZENvbnRpbnVlOwogICAgIGRvIHsKKyAgICAgICAgc2hvdWxkQ29udGludWUgPSBm
YWxzZTsKICAgICAgICAgbmV4dCA9IG5leHRDaGFyYWN0ZXJPZmZzZXQobmV4dCwgZmFsc2UpOwog
ICAgICAgICBpZiAoc2hvdWxkU2tpcEJvdW5kYXJ5KHByZXZpb3VzLCBuZXh0KSkKICAgICAgICAg
ICAgIG5leHQgPSBuZXh0Q2hhcmFjdGVyT2Zmc2V0KG5leHQsIGZhbHNlKTsKICAgICAgICAgdGV4
dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIG5leHQpOworICAg
ICAgICAKKyAgICAgICAgLy8gV2Ugc2hvdWxkIHNraXAgbmV4dCBDaGFyYWN0ZXRPZmZzZXQgaWYg
aXQncyB2aXN1YWxseSB0aGUgc2FtZS4KKyAgICAgICAgaWYgKCFsZW5ndGhGb3JSYW5nZShyYW5n
ZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMocHJldmlvdXMsIG5leHQpLmdldCgpKSkKKyAg
ICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKICAgICAgICAgcHJldmlvdXMgPSBuZXh0
OwotICAgIH0gd2hpbGUgKHRleHRNYXJrZXJEYXRhLmlnbm9yZWQpOworICAgIH0gd2hpbGUgKHRl
eHRNYXJrZXJEYXRhLmlnbm9yZWQgfHwgc2hvdWxkQ29udGludWUpOwogfQogCiB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoVGV4dE1h
cmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rl
ck9mZnNldCkKIHsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXMgPSBjaGFyYWN0ZXJPZmZz
ZXQ7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHQgPSBjaGFyYWN0ZXJPZmZzZXQ7CisgICAgYm9v
bCBzaG91bGRDb250aW51ZTsKICAgICBkbyB7CisgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFs
c2U7CiAgICAgICAgIHByZXZpb3VzID0gcHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQocHJldmlvdXMs
IGZhbHNlKTsKICAgICAgICAgdGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1h
cmtlckRhdGEsIHByZXZpb3VzKTsKLSAgICB9IHdoaWxlICh0ZXh0TWFya2VyRGF0YS5pZ25vcmVk
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHNob3VsZCBza2lwIHByZXZpb3VzIENoYXJhY3Rl
dE9mZnNldCBpZiBpdCdzIHZpc3VhbGx5IHRoZSBzYW1lLgorICAgICAgICBpZiAoIWxlbmd0aEZv
clJhbmdlKHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhwcmV2aW91cywgbmV4dCku
Z2V0KCkpKQorICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOworICAgICAgICBuZXh0
ID0gcHJldmlvdXM7CisgICAgfSB3aGlsZSAodGV4dE1hcmtlckRhdGEuaWdub3JlZCB8fCBzaG91
bGRDb250aW51ZSk7CiB9CiAKIE5vZGUqIEFYT2JqZWN0Q2FjaGU6Om5leHROb2RlKE5vZGUqIG5v
ZGUpIGNvbnN0CkBAIC0xOTI0LDI3ICsxOTY4LDMyIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVj
dENhY2hlOjpjaGFyYWN0ZXIKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAg
IAogICAgIC8vIFVzZSBuZXh0VmlzaWJsZVBvc2l0aW9uIHRvIGNhbGN1bGF0ZSBob3cgbWFueSBj
aGFyYWN0ZXJzIHdlIG5lZWQgdG8gdHJhdmVyc2UgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0g
ICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG9iai0+dmlzaWJsZVBvc2l0aW9uUmFu
Z2UoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdnAgPSB2cFJhbmdlLnN0YXJ0OworICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlID0gb2JqLT52aXNpYmxlUG9zaXRp
b25SYW5nZSgpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxl
UG9zaXRpb25SYW5nZS5zdGFydDsKICAgICBpbnQgY2hhcmFjdGVyT2Zmc2V0ID0gMDsKLSAgICBQ
b3NpdGlvbiB2cERlZXBQb3MgPSB2cC5kZWVwRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9uIGN1
cnJlbnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwogICAgIAog
ICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3M7Ci0gICAgd2hpbGUgKCF2cERl
ZXBQb3MuaXNOdWxsKCkgJiYgIWRlZXBQb3MuZXF1YWxzKHZwRGVlcFBvcykpIHsKLSAgICAgICAg
cHJldmlvdXNWaXNpYmxlUG9zID0gdnA7Ci0gICAgICAgIHZwID0gb2JqLT5uZXh0VmlzaWJsZVBv
c2l0aW9uKHZwKTsKLSAgICAgICAgdnBEZWVwUG9zID0gdnAuZGVlcEVxdWl2YWxlbnQoKTsKKyAg
ICB3aGlsZSAoIWN1cnJlbnRQb3NpdGlvbi5pc051bGwoKSAmJiAhZGVlcFBvcy5lcXVhbHMoY3Vy
cmVudFBvc2l0aW9uKSkgeworICAgICAgICBwcmV2aW91c1Zpc2libGVQb3MgPSB2aXNpYmxlUG9z
aXRpb247CisgICAgICAgIHZpc2libGVQb3NpdGlvbiA9IG9iai0+bmV4dFZpc2libGVQb3NpdGlv
bih2aXNpYmxlUG9zaXRpb24pOworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSB2aXNpYmxlUG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9zaXRpb24gcHJldmlvdXNQb3NpdGlv
biA9IHByZXZpb3VzVmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAvLyBTb21l
dGltZXMgbmV4dFZpc2libGVQb3NpdGlvbiB3aWxsIGdpdmUgdGhlIHNhbWUgVmlzaWJsZVBvc3Rp
b24sCiAgICAgICAgIC8vIHdlIGJyZWFrIGhlcmUgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4KLSAg
ICAgICAgaWYgKHZwRGVlcFBvcy5lcXVhbHMocHJldmlvdXNWaXNpYmxlUG9zLmRlZXBFcXVpdmFs
ZW50KCkpKQorICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmVxdWFscyhwcmV2aW91c1Bvc2l0
aW9uKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjaGFyYWN0ZXJPZmZzZXQrKzsKICAg
ICAgICAgCiAgICAgICAgIC8vIFdoZW4gVmlzaWJsZVBvc3Rpb24gbW92ZXMgdG8gbmV4dCBub2Rl
LCBpdCB3aWxsIGNvdW50IHRoZSBsZWFkaW5nIGxpbmUgYnJlYWsgYXMKICAgICAgICAgLy8gMSBv
ZmZzZXQsIHdoaWNoIHdlIHNob3VsZG4ndCBpbmNsdWRlIGluIENoYXJhY3Rlck9mZnNldC4KLSAg
ICAgICAgaWYgKHZwRGVlcFBvcy5kZXByZWNhdGVkTm9kZSgpICE9IHByZXZpb3VzVmlzaWJsZVBv
cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmICh2
cC5jaGFyYWN0ZXJCZWZvcmUoKSA9PSAnXG4nKQorICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCkgIT0gcHJldmlvdXNQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB7
CisgICAgICAgICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpID09ICdc
bicpCiAgICAgICAgICAgICAgICAgY2hhcmFjdGVyT2Zmc2V0LS07CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBTb21ldGltZXMgVmlzaWJsZVBvc2l0aW9uIHdpbGwgbW92ZSBtdWx0
aXBsZSBjaGFyYWN0ZXJzLCBsaWtlIGVtb2ppLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKKyAgICAgICAgICAg
ICAgICBjaGFyYWN0ZXJPZmZzZXQgKz0gY3VycmVudFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpIC0gcHJldmlvdXNQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIDE7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0yMDA2LDcgKzIwNTUsOSBAQCBDaGFyYWN0ZXJPZmZz
ZXQgQVhPYmplY3RDYWNoZTo6bmV4dENoYXJhCiAgICAgaWYgKGNoYXJhY3Rlck9mZnNldC5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAotICAgIENoYXJh
Y3Rlck9mZnNldCBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hhcmFj
dGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgKyAxKTsKKyAgICAvLyBXZSBk
b24ndCBhbHdheXMgbW92ZSBvbmUgJ2NoYXJhY3RlcicgYXQgYSB0aW1lIHNpbmNlIHRoZXJlIG1p
Z2h0IGJlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCisgICAgaW50IG5leHRPZmZzZXQgPSBQb3NpdGlv
bjo6dW5jaGVja2VkTmV4dE9mZnNldChjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyT2Zm
c2V0Lm9mZnNldCk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHQgPSBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgbmV4dE9mZnNldCk7CiAgICAg
CiAgICAgLy8gVG8gYmUgY29uc2lzdGVudCB3aXRoIFZpc2libGVQb3NpdGlvbiwgd2Ugc2hvdWxk
IGNvbnNpZGVyIHRoZSBjYXNlIHRoYXQgY3VycmVudCBub2RlIGVuZCB0byBuZXh0IG5vZGUgc3Rh
cnQgY291bnRzIDEgb2Zmc2V0LgogICAgIGJvb2wgaXNSZXBsYWNlZE9yQlIgPSBpc1JlcGxhY2Vk
Tm9kZU9yQlIoY2hhcmFjdGVyT2Zmc2V0Lm5vZGUpIHx8IGlzUmVwbGFjZWROb2RlT3JCUihuZXh0
Lm5vZGUpOwpAQCAtMjAyNSw3ICsyMDc2LDkgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2Fj
aGU6OnByZXZpb3VzQwogICAgIGlmICghaWdub3JlUHJldmlvdXNOb2RlRW5kICYmICFjaGFyYWN0
ZXJPZmZzZXQub2Zmc2V0KQogICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFu
ZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIDApOwogICAgIAotICAgIHJldHVybiBjaGFy
YWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFj
dGVyT2Zmc2V0Lm9mZnNldCAtIDEsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKKyAgICAv
LyBXZSBkb24ndCBhbHdheXMgbW92ZSBvbmUgJ2NoYXJhY3RlcicgYSB0aW1lIHNpbmNlIHRoZXJl
IG1pZ2h0IGJlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCisgICAgaW50IHByZXZpb3VzT2Zmc2V0ID0g
UG9zaXRpb246OnVuY2hlY2tlZFByZXZpb3VzT2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBj
aGFyYWN0ZXJPZmZzZXQub2Zmc2V0KTsKKyAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9k
ZUFuZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIHByZXZpb3VzT2Zmc2V0LCBUcmF2ZXJz
ZU9wdGlvbkluY2x1ZGVTdGFydCk7CiB9CiAKIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hl
OjpzdGFydENoYXJhY3Rlck9mZnNldE9mV29yZChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJh
Y3Rlck9mZnNldCwgRVdvcmRTaWRlIHNpZGUpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDAxNTYpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxNi0wNC0yOSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBD
aGFyYWN0ZXJPZmZzZXQgbm90IHdvcmtpbmcgY29ycmVjdGx5IHdpdGggY29tcG9zZWQgY2hhcmFj
dGVycyBhbmQgY29sbGFwc2VkIHdoaXRlIHNwYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MTkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13
b3JkLW5hdi5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4dC1t
YXJrZXItcHJldmlvdXMtbmV4dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0Lmh0bWw6CisKIDIwMTYtMDQt
MjcgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIENTUDogQWRk
IHRlc3RzIGZvciBzZXR0aW5nIGFsbG93Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlU3RhclRv
TWF0Y2hBbnlQcm90b2NvbApJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1tYXJrZXItd29yZC1uYXYuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi5odG1sCShyZXZpc2lvbiAyMDAxNTYpCisr
KyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHRleHQKICAgICAgICAgCiAgICAgICAg
IC8vIENoZWNrIHRoZSBjYXNlIHdpdGggc3BhbgogICAgICAgICAvLyBBdCAiVCIgaW4gIlRoaXNp
cyIsIHNob3VsZCByZXR1cm4gdGhlIHdvcmQgYXMgIlRoaXNpc2xvbmd3b3JkIi4KLSAgICAgICAg
Y3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMiwgdGV4dCk7
CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIs
IDEsIHRleHQpOwogICAgICAgICAvLyBBdCAiICIgYmVmb3JlICJJIiwgdGhlIHdvcmQgc2hvdWxk
IGJlICJJJ2xsIi4KICAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3Vy
cmVudE1hcmtlciwgMTQsIHRleHQpOwogICAgICAgICAvLyBBdCAiICIgYmVmb3JlICJ0cnkiLCB0
aGUgd29yZCBzaG91bGQgZXhjbHVkZXMgIi4iCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L3RleHQtbWFya2VyL3RleHQtbWFya2VyLXByZXZpb3VzLW5leHQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4dC1t
YXJrZXItcHJldmlvdXMtbmV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIwMDE1NikKKysrIExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4dC1tYXJrZXItcHJldmlvdXMt
bmV4dC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSwxMCBAQCBjICBkCiAK
IGNhbid0IHNlbGVjdAogYWJjIGRlIGYKK/CfmIPwn5iPCisKK2EgYgorCiBUaGlzIHRlc3RzIHRo
ZSBuZXh0L3ByZXZpb3VzIHRleHQgbWFya2VyIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgY29y
cmVjdGx5LgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCkBAIC0yOCw2ICszMiwxNSBAQCBQ
QVNTIHRleHQyLmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hCiBQQVNTIHRleHQyLmFjY2Vz
c2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihjdXJyZW50TWFya2VyKS5pc0VxdWFsKHRleHQy
LmNoaWxkQXRJbmRleCgyKSkgaXMgdHJ1ZQogUEFTUyB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZShtYXJrZXJSYW5nZSkgaXMgJ2YnCiBQQVNTIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJh
bmdlKG1hcmtlclJhbmdlKSBpcyAnYScKK1BBU1MgdGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgo
ZW1vamlUZXh0TWFya2VyUmFuZ2UpIGlzIDQKK1BBU1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVz
dWx0LmN1cnJlbnQpKSBpcyAn8J+YjycKK1BBU1MgdGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2UodGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVzdWx0
LmN1cnJlbnQpKSBpcyAn8J+YgycKK1BBU1MgdGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgoY29s
bGFwc2VkV2hpdGVzcGFjZU1hcmtlclJhbmdlKSBpcyAzCitQQVNTIHRleHQuc3RyaW5nRm9yVGV4
dE1hcmtlclJhbmdlKHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhyZXN1bHQucHJldmlv
dXMsIHJlc3VsdC5jdXJyZW50KSkgaXMgJ2EnCitQQVNTIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtl
clJhbmdlKHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhyZXN1bHQucHJldmlvdXMsIHJl
c3VsdC5jdXJyZW50KSkgaXMgJyAnCitQQVNTIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdl
KHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhyZXN1bHQucHJldmlvdXMsIHJlc3VsdC5j
dXJyZW50KSkgaXMgJ2InCitQQVNTIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRleHQu
dGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhyZXN1bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50
KSkgaXMgJyAnCitQQVNTIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRleHQudGV4dE1h
cmtlclJhbmdlRm9yTWFya2VycyhyZXN1bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50KSkgaXMg
J2EnCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5k
ZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4dC1tYXJrZXItcHJl
dmlvdXMtbmV4dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
dGV4dC1tYXJrZXIvdGV4dC1tYXJrZXItcHJldmlvdXMtbmV4dC5odG1sCShyZXZpc2lvbiAyMDAx
NTYpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RleHQtbWFya2VyL3RleHQtbWFya2Vy
LXByZXZpb3VzLW5leHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKIDxodG1s
PgogPGhlYWQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxtZXRhIGNoYXJzZXQ9IlVURi0xNiI+CiA8L2hlYWQ+CiA8c3R5bGU+CiAudXNl
cnNlbGVjdCB7IHVzZXItc2VsZWN0OiBub25lOyAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOyB9
CkBAIC0yNiw2ICsyNywxMCBAQCBkZQogZgogPC9kaXY+CiAKKzxwIGlkPSJ0ZXh0NSI+8J+Yg/Cf
mI88cD4KKworPHAgaWQ9InRleHQ2Ij5hICAgICBiPC9wPgorCiA8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogCkBAIC03MSw4ICs3Niw4IEBAIGYKICAg
ICAgICAgbWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocHJldmlv
dXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIpOwogICAgICAgICBzaG91bGRCZSgidGV4dC5zdHJpbmdG
b3JUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpIiwgIm5ld2xpbmUiKTsKICAgICAgICAgCi0g
ICAgICAgIC8vIFRyYXZlcnNlIGJhY2t3YXJkcyB0d28gbW9yZSBjaGFyYWN0ZXIsIGl0IHdpbGwg
bGFuZCBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgInRleHQiLgotICAgICAgICByZXN1bHQgPSBi
YWNrd2FyZHMoMiwgcHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIsIHRleHQpOworICAgICAg
ICAvLyBUcmF2ZXJzZSBiYWNrd2FyZHMgb25lIG1vcmUgY2hhcmFjdGVyLCBpdCB3aWxsIGxhbmQg
YXQgdGhlIGxhc3QgY2hhcmFjdGVyIG9mICJ0ZXh0Ii4KKyAgICAgICAgcmVzdWx0ID0gYmFja3dh
cmRzKDEsIHByZXZpb3VzTWFya2VyLCBjdXJyZW50TWFya2VyLCB0ZXh0KTsKICAgICAgICAgcHJl
dmlvdXNNYXJrZXIgPSByZXN1bHQucHJldmlvdXM7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBy
ZXN1bHQuY3VycmVudDsKICAgICAgICAgbWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5n
ZUZvck1hcmtlcnMocHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIpOwpAQCAtOTMsOCArOTgs
OCBAQCBmCiAgICAgICAgIG1hcmtlclJhbmdlID0gdGV4dDIudGV4dE1hcmtlclJhbmdlRm9yTWFy
a2VycyhwcmV2aW91c01hcmtlciwgY3VycmVudE1hcmtlcik7CiAgICAgICAgIHNob3VsZEJlKCJ0
ZXh0Mi5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpIiwgIidkJyIpOwogICAg
ICAgICAKLSAgICAgICAgLy8gVHJhdmVyc2UgYmFja3dhcmRzIDggY2hhcmFjdGVycywgaXQgd2ls
bCBsYW5kIGF0IHRoZSBsYXN0IGNoYXJhY3RlciBvZiAidGV4dDEiLgotICAgICAgICByZXN1bHQg
PSBiYWNrd2FyZHMoOCwgcHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIsIHRleHQyKTsKKyAg
ICAgICAgLy8gVHJhdmVyc2UgYmFja3dhcmRzIDYgY2hhcmFjdGVycywgaXQgd2lsbCBsYW5kIGF0
IHRoZSBsYXN0IGNoYXJhY3RlciBvZiAidGV4dDEiLgorICAgICAgICByZXN1bHQgPSBiYWNrd2Fy
ZHMoNiwgcHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIsIHRleHQyKTsKICAgICAgICAgcHJl
dmlvdXNNYXJrZXIgPSByZXN1bHQucHJldmlvdXM7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBy
ZXN1bHQuY3VycmVudDsKICAgICAgICAgbWFya2VyUmFuZ2UgPSB0ZXh0Mi50ZXh0TWFya2VyUmFu
Z2VGb3JNYXJrZXJzKHByZXZpb3VzTWFya2VyLCBjdXJyZW50TWFya2VyKTsKQEAgLTE2Myw2ICsx
NjgsMzMgQEAgZgogICAgICAgICBtYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9y
TWFya2VycyhzdGFydE1hcmtlciwgY3VycmVudE1hcmtlcikKICAgICAgICAgc2hvdWxkQmUoInRl
eHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKSIsICInYSciKTsKICAgICAg
ICAgCisgICAgICAgIC8vIFRlc3QgY2FzZSB3aXRoIGVtb2ppLgorICAgICAgICB0ZXh0ID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0NSIpOworICAg
ICAgICB2YXIgZW1vamlUZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQodGV4dCk7CisgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnRleHRNYXJrZXJSYW5nZUxlbmd0
aChlbW9qaVRleHRNYXJrZXJSYW5nZSkiLCAiNCIpOworICAgICAgICAvLyBNYWtlIHN1cmUgbmF2
aWdhdGluZyBuZXh0L3ByZXZpb3VzIHRleHQgbWFya2VyIGlzIGJ5IGVtb2ppLgorICAgICAgICBz
dGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKGVtb2pp
VGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgcmVzdWx0ID0gZm9yd2FyZCgyLCBwcmV2aW91c01h
cmtlciwgc3RhcnRNYXJrZXIsIHRleHQpOworICAgICAgICBzaG91bGRCZSgidGV4dC5zdHJpbmdG
b3JUZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5w
cmV2aW91cywgcmVzdWx0LmN1cnJlbnQpKSIsICIn8J+YjyciKTsKKyAgICAgICAgcmVzdWx0ID0g
YmFja3dhcmRzKDEsIHJlc3VsdC5wcmV2aW91cywgcmVzdWx0LmN1cnJlbnQsIHRleHQpOworICAg
ICAgICBzaG91bGRCZSgidGV4dC5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UodGV4dC50ZXh0TWFy
a2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVzdWx0LmN1cnJlbnQpKSIsICIn
8J+YgyciKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRlc3QgY2FzZSB3aXRoIGNvbGxhcHNlZCB3
aGl0ZXNwYWNlLgorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJ0ZXh0NiIpOworICAgICAgICB2YXIgY29sbGFwc2VkV2hpdGVzcGFj
ZU1hcmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAg
ICAgICBzaG91bGRCZSgidGV4dC50ZXh0TWFya2VyUmFuZ2VMZW5ndGgoY29sbGFwc2VkV2hpdGVz
cGFjZU1hcmtlclJhbmdlKSIsICIzIik7CisgICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoY29sbGFwc2VkV2hpdGVzcGFjZU1hcmtlclJh
bmdlKTsKKyAgICAgICAgcmVzdWx0ID0gZm9yd2FyZCgxLCBwcmV2aW91c01hcmtlciwgc3RhcnRN
YXJrZXIsIHRleHQpOworICAgICAgICBzaG91bGRCZSgidGV4dC5zdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHJlc3VsdC5wcmV2aW91cywgcmVz
dWx0LmN1cnJlbnQpKSIsICInYSciKTsKKyAgICAgICAgcmVzdWx0ID0gZm9yd2FyZCgxLCByZXN1
bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50LCB0ZXh0KTsKKyAgICAgICAgc2hvdWxkQmUoInRl
eHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHRleHQudGV4dE1hcmtlclJhbmdlRm9yTWFya2Vy
cyhyZXN1bHQucHJldmlvdXMsIHJlc3VsdC5jdXJyZW50KSkiLCAiJyAnIik7CisgICAgICAgIHJl
c3VsdCA9IGZvcndhcmQoMSwgcmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCwgdGV4dCk7
CisgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRl
eHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCkp
IiwgIidiJyIpOworICAgICAgICByZXN1bHQgPSBiYWNrd2FyZHMoMSwgcmVzdWx0LnByZXZpb3Vz
LCByZXN1bHQuY3VycmVudCwgdGV4dCk7CisgICAgICAgIHNob3VsZEJlKCJ0ZXh0LnN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZSh0ZXh0LnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocmVzdWx0LnBy
ZXZpb3VzLCByZXN1bHQuY3VycmVudCkpIiwgIicgJyIpOworICAgICAgICByZXN1bHQgPSBiYWNr
d2FyZHMoMSwgcmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCwgdGV4dCk7CisgICAgICAg
IHNob3VsZEJlKCJ0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZSh0ZXh0LnRleHRNYXJrZXJS
YW5nZUZvck1hcmtlcnMocmVzdWx0LnByZXZpb3VzLCByZXN1bHQuY3VycmVudCkpIiwgIidhJyIp
OworICAgICAgICAKICAgICAgICAgZnVuY3Rpb24gZm9yd2FyZChjb3VudCwgcHJldmlvdXNNYXJr
ZXIsIGN1cnJlbnRNYXJrZXIsIG9iaikgewogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgcHJldmlvdXNNYXJrZXIgPSBjdXJyZW50
TWFya2VyOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>