<?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>162041</bug_id>
          
          <creation_ts>2016-09-15 16:03:41 -0700</creation_ts>
          <short_desc>AX: Add accessibility support for details element on iOS</short_desc>
          <delta_ts>2016-09-19 11:34:38 -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>1230226</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-15 16:03:41 -0700</bug_when>
    <thetext>The details/summary elements are poorly supported on iOS.

Issues:
1. There&apos;s no expanded/collapsed status announced from VoiceOver.
2. Impossible to navigate through them using VoiceOver. VO cursor is jumping randomly.

&lt;rdar://problem/27914836&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230231</commentid>
    <comment_count>1</comment_count>
      <attachid>289013</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-15 16:23:13 -0700</bug_when>
    <thetext>Created attachment 289013
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230268</commentid>
    <comment_count>2</comment_count>
      <attachid>289013</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-09-15 17:34:30 -0700</bug_when>
    <thetext>Comment on attachment 289013
patch

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

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1840
&gt; +    for (AccessibilityObject* parent = object; parent; parent = parent-&gt;parentObject()) {

can we make a function that takes a lambda for running up the parent chain and returning a match object?
and then replace all such places with that ?

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1871
&gt; +            // webkit.org/b/162041 Taking focus onto elements inside a details node will cause VO focusing onto random items.

why is this the case?
should we put this check inside canSetFocusAttribute() instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230272</commentid>
    <comment_count>3</comment_count>
      <attachid>289013</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-15 17:40:07 -0700</bug_when>
    <thetext>Comment on attachment 289013
patch

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

Thanks, will address other issues.

&gt;&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1871
&gt;&gt; +            // webkit.org/b/162041 Taking focus onto elements inside a details node will cause VO focusing onto random items.
&gt; 
&gt; why is this the case?
&gt; should we put this check inside canSetFocusAttribute() instead

There must be something special with the details element that I haven&apos;t had chance to dig into. I think on iOS it&apos;s ok to not set focus inside details element when VO tries to focus on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230274</commentid>
    <comment_count>4</comment_count>
      <attachid>289013</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-15 17:42:30 -0700</bug_when>
    <thetext>Comment on attachment 289013
patch

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

&gt;&gt;&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1871
&gt;&gt;&gt; +            // webkit.org/b/162041 Taking focus onto elements inside a details node will cause VO focusing onto random items.
&gt;&gt; 
&gt;&gt; why is this the case?
&gt;&gt; should we put this check inside canSetFocusAttribute() instead
&gt; 
&gt; There must be something special with the details element that I haven&apos;t had chance to dig into. I think on iOS it&apos;s ok to not set focus inside details element when VO tries to focus on it.

I put it here because this will only affect iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230277</commentid>
    <comment_count>5</comment_count>
      <attachid>289013</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-09-15 17:54:02 -0700</bug_when>
    <thetext>Comment on attachment 289013
patch

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

&gt;&gt;&gt;&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:1871
&gt;&gt;&gt;&gt; +            // webkit.org/b/162041 Taking focus onto elements inside a details node will cause VO focusing onto random items.
&gt;&gt;&gt; 
&gt;&gt;&gt; why is this the case?
&gt;&gt;&gt; should we put this check inside canSetFocusAttribute() instead
&gt;&gt; 
&gt;&gt; There must be something special with the details element that I haven&apos;t had chance to dig into. I think on iOS it&apos;s ok to not set focus inside details element when VO tries to focus on it.
&gt; 
&gt; I put it here because this will only affect iOS.

ok seems reasonable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230290</commentid>
    <comment_count>6</comment_count>
      <attachid>289027</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-15 18:52:46 -0700</bug_when>
    <thetext>Created attachment 289027
patch

- updated function to take a lambda to search for matched parent object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230298</commentid>
    <comment_count>7</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-15 19:40:15 -0700</bug_when>
    <thetext>Will look into the patch build issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230300</commentid>
    <comment_count>8</comment_count>
      <attachid>289029</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-15 20:29:21 -0700</bug_when>
    <thetext>Created attachment 289029
patch

Fixed the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231159</commentid>
    <comment_count>9</comment_count>
      <attachid>289241</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-09-19 10:58:07 -0700</bug_when>
    <thetext>Created attachment 289241
patch

Updated style for matchFunc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231199</commentid>
    <comment_count>10</comment_count>
      <attachid>289241</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-19 11:34:33 -0700</bug_when>
    <thetext>Comment on attachment 289241
patch

Clearing flags on attachment: 289241

Committed r206102: &lt;http://trac.webkit.org/changeset/206102&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231200</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-19 11:34:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289013</attachid>
            <date>2016-09-15 16:23:13 -0700</date>
            <delta_ts>2016-09-15 18:52:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>10429</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA5LTE1ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBhY2Nlc3NpYmlsaXR5IHN1
cHBvcnQgZm9yIGRldGFpbHMgZWxlbWVudCBvbiBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBkZXRhaWxzIGFuZCBzdW1tYXJ5IGVsZW1lbnRz
IGFyZSBwb29ybHkgc3VwcG9ydGVkIG9uIGlPUy4gCisgICAgICAgIFR3byBtYWpvciBpc3N1ZXM6
CisgICAgICAgICAgICAxLiBBc3Npc3RpdmUgdGVjaG5vbG9naWVzIHRha2luZyBmb2N1cyBvbnRv
IGRldGFpbHMvc3VtbWFyeSBlbGVtZW50cyB3aWxsIGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Iu
CisgICAgICAgICAgICAyLiBWb2ljZU92ZXIgaXMgbm90IHNwZWFraW5nIHRoZSBleHBhbmRlZCBz
dGF0dXMgb2YgdGhlIGRldGFpbHMgZWxlbWVudC4KKyAgICAgICAgRml4ZWQgdGhlbSBieSBub3Qg
c2V0dGluZyBmb2N1cyBvbnRvIGVsZW1lbnRzIGluc2lkZSBkZXRhaWxzIGFuZCBleHBvc2luZyB0
aGUgZGV0YWlscyBlbGVtZW50J3MgZXhwYW5kZWQKKyAgICAgICAgc3RhdHVzIHRvIGl0cyBzdW1t
YXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5
L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLmh0bWwKKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5
T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRh
aWxQYXJlbnRGb3JPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlFbGVtZW50RGlkQmVjb21lRm9jdXNlZF0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5U3VwcG9ydHNBUklB
RXhwYW5kZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNj
ZXNzaWJpbGl0eUlzRXhwYW5kZWRdKToKKwogMjAxNi0wOS0xNSAgWmFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IHdpbGxCZUNvbXBvc2l0
ZWQgPT0gbmVlZHNUb0JlQ29tcG9zaXRlZChsYXllcikgaW4gV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAyMDYwMDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgzMyw2ICsxODMzLDI5IEBAIC0gKENHUmVjdClf
YWNjZXNzaWJpbGl0eVNjcm9sbFZpc2libGVSZWMKICAgICByZXR1cm4gbV9vYmplY3QtPnNjcm9s
bFZpc2libGVDb250ZW50UmVjdCgpOwogfQogCistIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRh
aWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0OihBY2Nlc3NpYmlsaXR5T2JqZWN0KilvYmplY3QKK3sK
KyAgICAvLyBVc2UgdGhpcyB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgdGhlIGNoaWxkIG9mIGEg
c3VtbWFyeSBvYmplY3QuCisgICAgLy8gQW5kIHJldHVybiB0aGUgc3VtbWFyeSdzIHBhcmVudCwg
d2hpY2ggaXMgdGhlIGV4cGFuZGFibGUgZGV0YWlscyBvYmplY3QuCisgICAgZm9yIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBvYmplY3Q7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5w
YXJlbnRPYmplY3QoKSkgeworICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKHN1bW1hcnlU
YWcpKQorICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+cGFyZW50T2JqZWN0KCk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBuaWw7Cit9CisKKy0gKEFjY2Vzc2liaWxpdHlPYmplY3QqKWRldGFp
bFBhcmVudEZvck9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopb2JqZWN0Cit7CisgICAgLy8g
VXNlIHRoaXMgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGluc2lkZSBhIGRldGFpbHMgb2JqZWN0
LgorICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gb2JqZWN0OyBwYXJlbnQ7
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKHBhcmVudC0+
aGFzVGFnTmFtZShkZXRhaWxzVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CisgICAg
fQorICAgIAorICAgIHJldHVybiBuaWw7Cit9CisKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eUVsZW1l
bnREaWRCZWNvbWVGb2N1c2VkCiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKQEAgLTE4NDUsNiArMTg2OCw5IEBAIC0gKHZvaWQpYWNjZXNzaWJpbGl0eUVsZW1l
bnREaWRCZWNvbWVGb2MKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChvYmplY3Qt
PmNhblNldEZvY3VzQXR0cmlidXRlKCkpIHsKKyAgICAgICAgICAgIC8vIHdlYmtpdC5vcmcvYi8x
NjIwNDEgVGFraW5nIGZvY3VzIG9udG8gZWxlbWVudHMgaW5zaWRlIGEgZGV0YWlscyBub2RlIHdp
bGwgY2F1c2UgVk8gZm9jdXNpbmcgb250byByYW5kb20gaXRlbXMuCisgICAgICAgICAgICBpZiAo
W3NlbGYgZGV0YWlsUGFyZW50Rm9yT2JqZWN0Om9iamVjdF0pCisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBvYmplY3QtPnNldEZvY3VzZWQodHJ1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMjY4MSw2ICsyNzA3LDExIEBAIC0gKEJPT0wpYWNjZXNzaWJp
bGl0eVN1cHBvcnRzQVJJQUV4cGFuZGUKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCisgICAgLy8gU2luY2UgZGV0YWls
cyBlbGVtZW50IGlzIGlnbm9yZWQgb24gaU9TLCB3ZSBzaG91bGQgZXhwb3NlIHRoZSBleHBhbmRl
ZCBzdGF0dXMgb24gaXRzCisgICAgLy8gc3VtbWFyeSdzIGFjY2Vzc2libGUgY2hpbGRyZW4uCisg
ICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBh
cmVudEZvclN1bW1hcnlPYmplY3Q6bV9vYmplY3RdKQorICAgICAgICByZXR1cm4gZGV0YWlsUGFy
ZW50LT5zdXBwb3J0c0V4cGFuZGVkKCk7CisKICAgICByZXR1cm4gbV9vYmplY3QtPnN1cHBvcnRz
RXhwYW5kZWQoKTsKIH0KIApAQCAtMjY4OSw2ICsyNzIwLDExIEBAIC0gKEJPT0wpYWNjZXNzaWJp
bGl0eUlzRXhwYW5kZWQKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxd
KQogICAgICAgICByZXR1cm4gTk87CiAKKyAgICAvLyBTaW5jZSBkZXRhaWxzIGVsZW1lbnQgaXMg
aWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVkIHN0YXR1cyBvbiBp
dHMKKyAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KKyAgICBpZiAoQWNjZXNz
aWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9yU3VtbWFy
eU9iamVjdDptX29iamVjdF0pCisgICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPmlzRXhwYW5k
ZWQoKTsKKwogICAgIHJldHVybiBtX29iamVjdC0+aXNFeHBhbmRlZCgpOwogfQogCkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDYwMDApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBA
QAorMjAxNi0wOS0xNSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFY
OiBBZGQgYWNjZXNzaWJpbGl0eSBzdXBwb3J0IGZvciBkZXRhaWxzIGVsZW1lbnQgb24gaU9TCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIwNDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCk6CisKIDIwMTYtMDkt
MTUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBVUkxQYXJzZXI6IENoZWNrIGZvciBpbnZhbGlkIGNoYXJhY3RlcnMgaW4gdGhlIGhvc3QKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50SU9TLm1tCShyZXZpc2lvbiAyMDYwMDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9p
b3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsNiAr
OTcsNyBAQCAtIChVSUFjY2Vzc2liaWxpdHlUcmFpdHMpX2F4Q29udGFpbmVkQnlGCiAtIChpZClf
YWNjZXNzaWJpbGl0eUZpZWxkc2V0QW5jZXN0b3I7CiAtIChCT09MKV9hY2Nlc3NpYmlsaXR5SGFz
VG91Y2hFdmVudExpc3RlbmVyOwogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5RXhwYW5kZWRU
ZXh0VmFsdWU7CistIChCT09MKWFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkOwogCiAvLyBUZXh0TWFy
a2VyIHJlbGF0ZWQKIC0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2U7CkBAIC04MjQsNyArODI1
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkKAogCiBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQoKSBjb25zdAogewotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5SXNFeHBhbmRlZF07CiB9
CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkocmV2aXNpb24gMjA2
MDAwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCAt
IChVSUFjY2Vzc2liaWxpdHlUcmFpdHMpX2F4Q29udGFpbmVkQnlGCiAtIChpZClfYWNjZXNzaWJp
bGl0eUZpZWxkc2V0QW5jZXN0b3I7CiAtIChCT09MKV9hY2Nlc3NpYmlsaXR5SGFzVG91Y2hFdmVu
dExpc3RlbmVyOwogLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5RXhwYW5kZWRUZXh0VmFsdWU7
CistIChCT09MKWFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkOwogCiAvLyBUZXh0TWFya2VyIHJlbGF0
ZWQKIC0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2U7CkBAIC01NjgsNyArNTY5LDcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luZGV0ZXJtaQogCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5SXNFeHBhbmRlZF07CiB9CiAKIGJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkKCkgY29uc3QKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIwNjAwMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDE2LTA5LTE1ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQVg6IEFkZCBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgZm9yIGRldGFpbHMgZWxlbWVu
dCBvbiBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlvcy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci9kZXRh
aWwtc3VtbWFyeS1pb3MuaHRtbDogQWRkZWQuCisKIDIwMTYtMDktMTUgIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiB3aWxsQmVDb21w
b3NpdGVkID09IG5lZWRzVG9CZUNvbXBvc2l0ZWQobGF5ZXIpIGluIFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzCkluZGV4OiBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1z
aW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnkt
aW9zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBACitTdW1tYXJ5
MQorCitEZXRhaWwxCisKK2xpbmsKK1N1bW1hcnkyCisKK1RoaXMgdGVzdHMgdGhlIGRldGFpbHMg
ZWxlbWVudCBvbiBpT1MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1
bW1hcnkxLmlzRXhwYW5kZWQgaXMgdHJ1ZQorUEFTUyBkZXRhaWwxLmlzRXhwYW5kZWQgaXMgZmFs
c2UKK1BBU1Mgc3VtbWFyeTIuaXNFeHBhbmRlZCBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnc3VtbWFyeTEnKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyBmYWxz
ZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV0YWlsczEnKSA9PT0gZG9jdW1lbnQu
YWN0aXZlRWxlbWVudCBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlu
aycpID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIGZhbHNlCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlvcy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci9kZXRhaWwtc3Vt
bWFyeS1pb3MuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGV0YWls
cyBvcGVuIGlkPSJkZXRhaWxzMSI+CisgIDxzdW1tYXJ5IGlkPSJzdW1tYXJ5MSI+PHAgaWQ9InMx
Ij5TdW1tYXJ5MTwvcD48L3N1bW1hcnk+CisgIDxwIGlkPSJkMSI+RGV0YWlsMTwvcD4KKyAgPGEg
aHJlZj0iIiBpZD0ibGluayI+bGluazwvYT4KKzwvZGV0YWlscz4KKworPGRldGFpbHMgaWQ9ImRl
dGFpbHMyIj4KKyAgPHN1bW1hcnk+PHAgaWQ9InMyIj5TdW1tYXJ5MjwvcD48L3N1bW1hcnk+Cisg
IDxwPkRldGFpbDI8L3A+Cis8L2RldGFpbHM+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigi
VGhpcyB0ZXN0cyB0aGUgZGV0YWlscyBlbGVtZW50IG9uIGlPUy4iKTsKKworICAgIHZhciBjYWxs
YmFja0NvdW50ID0gMDsKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7
CisgICAgCisgICAgICAgIC8vIFRlc3QgdGhhdCB3ZSBhcmUgZ2V0dGluZyB0aGUgZXhwYW5kZWQg
c3RhdHVzIGZvciB0aGUgc3VtbWFyeSB0ZXh0LCBidXQgbm90IGZvciB0aGUgZGV0YWlscyBjaGls
ZHJlbi4KKyAgICAgICAgdmFyIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJzMSIpOworICAgICAgICB2YXIgZGV0YWlsMSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZDEiKTsKKyAgICAgICAgdmFy
IHN1bW1hcnkyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlk
KCJzMiIpOworICAgICAgICB2YXIgbGluayA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgibGluayIpOworICAgICAgICAKKyAgICAgICAgc2hvdWxkQmVUcnVl
KCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImRldGFpbDEu
aXNFeHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJzdW1tYXJ5Mi5pc0V4cGFuZGVk
Iik7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0IHRoYXQgVk8gZm9jdXMgb250byB0aGUgZGV0
YWlscyBjaGlsZHJlbiB3b24ndCBzZXQgZm9jdXMgdG8gdGhlIHN1bW1hcnkvZGV0YWlscyBlbGVt
ZW50IG9yIGl0cyBjaGlsZHJlbi4KKyAgICAgICAgc3VtbWFyeTEuYXNzaXN0aXZlVGVjaG5vbG9n
eVNpbXVsYXRlZEZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzdW1tYXJ5MScpID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50Iik7CisgICAg
ICAgIAorICAgICAgICBkZXRhaWwxLmFzc2lzdGl2ZVRlY2hub2xvZ3lTaW11bGF0ZWRGb2N1cygp
OworICAgICAgICBzaG91bGRCZUZhbHNlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV0YWls
czEnKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCIpOworICAgICAgICAKKyAgICAgICAgbGlu
ay5hc3Npc3RpdmVUZWNobm9sb2d5U2ltdWxhdGVkRm9jdXMoKTsKKyAgICAgICAgc2hvdWxkQmVG
YWxzZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsnKSA9PT0gZG9jdW1lbnQuYWN0aXZl
RWxlbWVudCIpOworICAgIH0KKyAgICAKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289027</attachid>
            <date>2016-09-15 18:52:46 -0700</date>
            <delta_ts>2016-09-15 20:29:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17919</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE2LTA5LTE1ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBhY2Nlc3NpYmlsaXR5IHN1
cHBvcnQgZm9yIGRldGFpbHMgZWxlbWVudCBvbiBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBkZXRhaWxzIGFuZCBzdW1tYXJ5IGVsZW1lbnRz
IGFyZSBwb29ybHkgc3VwcG9ydGVkIG9uIGlPUy4KKyAgICAgICAgVHdvIG1ham9yIGlzc3VlczoK
KyAgICAgICAgICAgIDEuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgdGFraW5nIGZvY3VzIG9udG8g
ZGV0YWlscy9zdW1tYXJ5IGVsZW1lbnRzIHdpbGwgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4K
KyAgICAgICAgICAgIDIuIFZvaWNlT3ZlciBpcyBub3Qgc3BlYWtpbmcgdGhlIGV4cGFuZGVkIHN0
YXR1cyBvZiB0aGUgZGV0YWlscyBlbGVtZW50LgorICAgICAgICBGaXhlZCB0aGVtIGJ5IG5vdCBz
ZXR0aW5nIGZvY3VzIG9udG8gZWxlbWVudHMgaW5zaWRlIGRldGFpbHMgYW5kIGV4cG9zaW5nIHRo
ZSBkZXRhaWxzIGVsZW1lbnQncyBleHBhbmRlZAorICAgICAgICBzdGF0dXMgdG8gaXRzIHN1bW1h
cnkncyBhY2Nlc3NpYmxlIGNoaWxkcmVuLgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkv
aW9zLXNpbXVsYXRvci9kZXRhaWwtc3VtbWFyeS1pb3MuaHRtbAorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAg
IChtYXRjaGVkUGFyZW50KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVB
bmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eUZpZWxkc2V0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGFibGVDZWxsUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGNvbnZlcnRQb2ludFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNvbnZlcnRSZWN0VG9TY3JlZW5TcGFj
ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0YWlsUGFy
ZW50Rm9yU3VtbWFyeU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgZGV0YWlsUGFyZW50Rm9yT2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudERpZEJlY29tZUZvY3VzZWRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6CisKIDIwMTYtMDktMTUgIERhdmUg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBQYXJzZXJdIEdldCBDU1NQ
YXJzZXJGYXN0UGF0aHMuY3BwIGNvbXBpbGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIwNjAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDIyIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciogQWNjZXMKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgTWF0Y2hGdW5jdGlvbj4KK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRjaGVkUGFy
ZW50KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgYm9vbCBpbmNsdWRlU2VsZiwgY29uc3Qg
TWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykKK3sKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gaW5j
bHVkZVNlbGYgPyBvYmplY3QgOiBvYmplY3QtPnBhcmVudE9iamVjdCgpOworICAgIGZvciAoOyBw
YXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1h
dGNoZXMocGFyZW50KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBudWxscHRyOworfQorCiAjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eSBUZXh0
IE1hcmtlcgogCiBAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIDogTlNPYmpl
Y3QKQEAgLTUzMyw0MiArNTQ5LDU0IEBAIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJr
Um9sZTooQWMKIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5
TGlzdEFuY2VzdG9yCiB7Ci0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBt
X29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+
cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHBhcmVu
dC0+cm9sZVZhbHVlKCk7CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9i
amVjdCogb2JqZWN0KSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBvYmplY3Qt
PnJvbGVWYWx1ZSgpOwogICAgICAgICBpZiAocm9sZSA9PSBMaXN0Um9sZSB8fCByb2xlID09IExp
c3RCb3hSb2xlKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwotICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
ICAgICAKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVu
dChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAgICAgIHJldHVybiBwYXJlbnQtPndy
YXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciopX2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yCiB7Ci0gICAgZm9yIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudCAh
PSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKFtz
ZWxmIF9hY2Nlc3NpYmlsaXR5SXNMYW5kbWFya1JvbGU6cGFyZW50LT5yb2xlVmFsdWUoKV0pCi0g
ICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7Ci0gICAgfQotCisgICAgYXV0byBt
YXRjaEZ1bmMgPSBbc2VsZl0gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAg
ICBpZiAoW3NlbGYgX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJrUm9sZTpvYmplY3QtPnJvbGVWYWx1
ZSgpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfTsKKyAgICAKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hl
ZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAgICAgIHJldHVybiBwYXJl
bnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yCiB7Ci0gICAgZm9yIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVu
dCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYg
KHBhcmVudC0+cm9sZVZhbHVlKCkgPT0gVGFibGVSb2xlIHx8IHBhcmVudC0+cm9sZVZhbHVlKCkg
PT0gR3JpZFJvbGUpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7ICAgCi0g
ICAgfQorICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dCkgeworICAgICAgICBpZiAob2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUYWJsZVJvbGUgfHwgb2Jq
ZWN0LT5yb2xlVmFsdWUoKSA9PSBHcmlkUm9sZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKICAgICAKKyAgICBpZiAoQWNjZXNzaWJpbGl0
eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVu
YykpCisgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwog
fQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlGaWVsZHNl
dEFuY2VzdG9yCiB7Ci0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29i
amVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudC0+aXNGaWVsZHNldCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwotICAgIH0KKyAgICBhdXRvIG1hdGNoRnVu
YyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgaWYgKG9iamVj
dC0+aXNGaWVsZHNldCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OwogICAgIAorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKKyAgICAgICAg
cmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJldHVybiBuaWw7CiB9CiAKQEAgLTEwMjEs
MjcgKzEwNDksMjkgQEAgLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5TGFiZWwKIC0gKEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwqKXRhYmxlQ2VsbFBhcmVudAogewogICAgIC8vIEZpbmQgaWYgdGhp
cyBlbGVtZW50IGlzIGluIGEgdGFibGUgY2VsbC4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
ZWxsID0gbnVsbHB0cjsKLSAgICBmb3IgKGNlbGwgPSBtX29iamVjdDsgY2VsbCAmJiAhY2VsbC0+
aXNUYWJsZUNlbGwoKTsgY2VsbCA9IGNlbGwtPnBhcmVudE9iamVjdCgpKSAKLSAgICB7IH0KKyAg
ICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAg
ICAgICAgaWYgKG9iamVjdC0+aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKICAgICAKLSAgICBpZiAoIWNlbGwpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbCo+KGNlbGwpOworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7CisgICAgcmV0
dXJuIG5pbDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0eVRhYmxlKil0YWJsZVBhcmVudAogewogICAg
IC8vIEZpbmQgaWYgdGhlIHBhcmVudCB0YWJsZSBmb3IgdGhlIHRhYmxlIGNlbGwuCi0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUgPSBudWxscHRyOwotICAgIGZvciAocGFyZW50
VGFibGUgPSBtX29iamVjdDsgcGFyZW50VGFibGUgJiYgIShpczxBY2Nlc3NpYmlsaXR5VGFibGU+
KCpwYXJlbnRUYWJsZSkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50VGFi
bGUpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSk7IHBhcmVudFRhYmxlID0gcGFy
ZW50VGFibGUtPnBhcmVudE9iamVjdCgpKQotICAgIHsgfQotICAgIAotICAgIGlmICghcGFyZW50
VGFibGUpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5
VGFibGU+KCpvYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCku
aXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OwogICAgIAotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihwYXJlbnRUYWJsZSk7CisgICAgaWYgKEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIHRydWUsIG1h
dGNoRnVuYykpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUq
PihwYXJlbnQpOworICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKGlkKWFjY2Vzc2liaWxpdHlUaXRs
ZUVsZW1lbnQKQEAgLTE0MDgsMTQgKzE0MzgsMTYgQEAgLSAoQ0dQb2ludCljb252ZXJ0UG9pbnRU
b1NjcmVlblNwYWNlOihGbAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLy8gRmluZCB0aGUg
YXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRv
IHRoZSB3aW5kb3cuCisgICAgICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCkgeworICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3Pigqb2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKKyAgICAgICAgCiAgICAgICAgIFNjcm9sbFZpZXcq
IHNjcm9sbFZpZXcgPSBudWxscHRyOwotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBudWxscHRyOwotICAgICAgICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmpl
Y3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpKSB7Ci0gICAgICAg
ICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigq
cGFyZW50KS5zY3JvbGxWaWV3KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0
Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYyk7CisgICAgICAgIGlmIChwYXJl
bnQpCisgICAgICAgICAgICBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAgCiAgICAgICAgIEludFBvaW50
IGludFBvaW50ID0gZmxvb3JlZEludFBvaW50KHBvaW50KTsKICAgICAgICAgaWYgKHNjcm9sbFZp
ZXcpCkBAIC0xNDYyLDE0ICsxNDk0LDE2IEBAIC0gKENHUmVjdCljb252ZXJ0UmVjdFRvU2NyZWVu
U3BhY2U6KEludFIKICAgICAgICAgCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRmluZCB0aGUg
YXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRv
IHRoZSB3aW5kb3cuCisgICAgICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCkgeworICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3Pigqb2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKKyAgICAgICAgCiAgICAgICAgIFNjcm9sbFZpZXcq
IHNjcm9sbFZpZXcgPSBudWxscHRyOwotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBudWxscHRyOwotICAgICAgICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmpl
Y3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpKSB7Ci0gICAgICAg
ICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigq
cGFyZW50KS5zY3JvbGxWaWV3KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0
Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYyk7CisgICAgICAgIGlmIChwYXJl
bnQpCisgICAgICAgICAgICBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9s
bFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzY3Jv
bGxWaWV3KQogICAgICAgICAgICAgcmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290Vmll
dyhyZWN0KTsKQEAgLTE4MzMsNiArMTg2NywzNyBAQCAtIChDR1JlY3QpX2FjY2Vzc2liaWxpdHlT
Y3JvbGxWaXNpYmxlUmVjCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5zY3JvbGxWaXNpYmxlQ29udGVu
dFJlY3QoKTsKIH0KIAorLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopZGV0YWlsUGFyZW50Rm9yU3Vt
bWFyeU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopb2JqZWN0Cit7CisgICAgLy8gVXNlIHRo
aXMgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIHRoZSBjaGlsZCBvZiBhIHN1bW1hcnkgb2JqZWN0
LgorICAgIC8vIEFuZCByZXR1cm4gdGhlIHN1bW1hcnkncyBwYXJlbnQsIHdoaWNoIGlzIHRoZSBl
eHBhbmRhYmxlIGRldGFpbHMgb2JqZWN0LgorICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICBpZiAob2JqZWN0LT5oYXNUYWdOYW1l
KHN1bW1hcnlUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworICAgIAorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzdW1tYXJ5
ID0gbWF0Y2hlZFBhcmVudChvYmplY3QsIHRydWUsIG1hdGNoRnVuYykpCisgICAgICAgIHJldHVy
biBzdW1tYXJ5LT5wYXJlbnRPYmplY3QoKTsKKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCist
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxp
dHlPYmplY3QqKW9iamVjdAoreworICAgIC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVj
dCBpcyBpbnNpZGUgYSBkZXRhaWxzIG9iamVjdC4KKyAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgaWYgKG9iamVjdC0+aGFzVGFn
TmFtZShkZXRhaWxzVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfTsKKyAgICAKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0
YWlscyA9IG1hdGNoZWRQYXJlbnQob2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQorICAgICAgICBy
ZXR1cm4gZGV0YWlsczsKKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCiAtICh2b2lkKWFjY2Vz
c2liaWxpdHlFbGVtZW50RGlkQmVjb21lRm9jdXNlZAogewogICAgIGlmICghW3NlbGYgX3ByZXBh
cmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCkBAIC0xODQ1LDYgKzE5MTAsOSBAQCAtICh2b2lkKWFjY2Vz
c2liaWxpdHlFbGVtZW50RGlkQmVjb21lRm9jCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBpZiAob2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKSB7CisgICAgICAgICAgICAvLyB3
ZWJraXQub3JnL2IvMTYyMDQxIFRha2luZyBmb2N1cyBvbnRvIGVsZW1lbnRzIGluc2lkZSBhIGRl
dGFpbHMgbm9kZSB3aWxsIGNhdXNlIFZPIGZvY3VzaW5nIG9udG8gcmFuZG9tIGl0ZW1zLgorICAg
ICAgICAgICAgaWYgKFtzZWxmIGRldGFpbFBhcmVudEZvck9iamVjdDpvYmplY3RdKQorICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgb2JqZWN0LT5zZXRGb2N1c2VkKHRydWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2ODEsNiArMjc0OSwxMSBAQCAtIChC
T09MKWFjY2Vzc2liaWxpdHlTdXBwb3J0c0FSSUFFeHBhbmRlCiAgICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAorICAgIC8v
IFNpbmNlIGRldGFpbHMgZWxlbWVudCBpcyBpZ25vcmVkIG9uIGlPUywgd2Ugc2hvdWxkIGV4cG9z
ZSB0aGUgZXhwYW5kZWQgc3RhdHVzIG9uIGl0cworICAgIC8vIHN1bW1hcnkncyBhY2Nlc3NpYmxl
IGNoaWxkcmVuLgorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkZXRhaWxQYXJlbnQgPSBb
c2VsZiBkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0Om1fb2JqZWN0XSkKKyAgICAgICAgcmV0
dXJuIGRldGFpbFBhcmVudC0+c3VwcG9ydHNFeHBhbmRlZCgpOworCiAgICAgcmV0dXJuIG1fb2Jq
ZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCk7CiB9CiAKQEAgLTI2ODksNiArMjc2MiwxMSBAQCAtIChC
T09MKWFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIE5POwogCisgICAgLy8gU2luY2UgZGV0YWls
cyBlbGVtZW50IGlzIGlnbm9yZWQgb24gaU9TLCB3ZSBzaG91bGQgZXhwb3NlIHRoZSBleHBhbmRl
ZCBzdGF0dXMgb24gaXRzCisgICAgLy8gc3VtbWFyeSdzIGFjY2Vzc2libGUgY2hpbGRyZW4uCisg
ICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBh
cmVudEZvclN1bW1hcnlPYmplY3Q6bV9vYmplY3RdKQorICAgICAgICByZXR1cm4gZGV0YWlsUGFy
ZW50LT5pc0V4cGFuZGVkKCk7CisKICAgICByZXR1cm4gbV9vYmplY3QtPmlzRXhwYW5kZWQoKTsK
IH0KIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjA2MDA4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTYtMDktMTUgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4K
KworICAgICAgICBBWDogQWRkIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBmb3IgZGV0YWlscyBlbGVt
ZW50IG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyMDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJ
T1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQp
OgorCiAyMDE2LTA5LTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVVJMUGFyc2VyOiBDaGVjayBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzIGlu
IHRoZSBob3N0CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkocmV2aXNpb24gMjA2MDA4KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDYgKzk3LDcgQEAgLSAoVUlBY2Nlc3NpYmlsaXR5VHJhaXRzKV9heENvbnRhaW5l
ZEJ5RgogLSAoaWQpX2FjY2Vzc2liaWxpdHlGaWVsZHNldEFuY2VzdG9yOwogLSAoQk9PTClfYWNj
ZXNzaWJpbGl0eUhhc1RvdWNoRXZlbnRMaXN0ZW5lcjsKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJp
bGl0eUV4cGFuZGVkVGV4dFZhbHVlOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNFeHBhbmRlZDsK
IAogLy8gVGV4dE1hcmtlciByZWxhdGVkCiAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlOwpA
QCAtODI0LDcgKzgyNSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3Rl
ZCgKIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUlz
RXhwYW5kZWRdOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgp
IGNvbnN0CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0J
KHJldmlzaW9uIDIwNjAwOCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTc0
LDYgKzc0LDcgQEAgLSAoVUlBY2Nlc3NpYmlsaXR5VHJhaXRzKV9heENvbnRhaW5lZEJ5RgogLSAo
aWQpX2FjY2Vzc2liaWxpdHlGaWVsZHNldEFuY2VzdG9yOwogLSAoQk9PTClfYWNjZXNzaWJpbGl0
eUhhc1RvdWNoRXZlbnRMaXN0ZW5lcjsKIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUV4cGFu
ZGVkVGV4dFZhbHVlOworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNFeHBhbmRlZDsKIAogLy8gVGV4
dE1hcmtlciByZWxhdGVkCiAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlOwpAQCAtNTY4LDcg
KzU2OSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJbmRldGVybWkKIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUlzRXhwYW5kZWRd
OwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDYwMDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0wOS0xNSAgTmFuIFdhbmcgIDxuX3dhbmdA
YXBwbGUuY29tPgorCisgICAgICAgIEFYOiBBZGQgYWNjZXNzaWJpbGl0eSBzdXBwb3J0IGZvciBk
ZXRhaWxzIGVsZW1lbnQgb24gaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjIwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci9kZXRhaWwtc3VtbWFy
eS1pb3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy1z
aW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLmh0bWw6IEFkZGVkLgorCiAyMDE2LTA5LTEzICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFttZWRpYS1zb3VyY2Vd
IHdlYi1wbGF0Zm9ybS10ZXN0L21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUuaHRtbCB0
ZXN0IGZhaWxpbmcKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRv
ci9kZXRhaWwtc3VtbWFyeS1pb3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci9kZXRhaWwtc3VtbWFyeS1pb3MtZXhwZWN0
ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNp
bXVsYXRvci9kZXRhaWwtc3VtbWFyeS1pb3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjIgQEAKK1N1bW1hcnkxCisKK0RldGFpbDEKKworbGluaworU3VtbWFyeTIKKwor
VGhpcyB0ZXN0cyB0aGUgZGV0YWlscyBlbGVtZW50IG9uIGlPUy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgc3VtbWFyeTEuaXNFeHBhbmRlZCBpcyB0cnVlCitQQVNTIGRl
dGFpbDEuaXNFeHBhbmRlZCBpcyBmYWxzZQorUEFTUyBzdW1tYXJ5Mi5pc0V4cGFuZGVkIGlzIGZh
bHNlCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdW1tYXJ5MScpID09PSBkb2N1bWVu
dC5hY3RpdmVFbGVtZW50IGlzIGZhbHNlCitQQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdk
ZXRhaWxzMScpID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIGZhbHNlCitQQVNTIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rJykgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMg
ZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1
bW1hcnktaW9zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9p
b3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlvcy5odG1sCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci9kZXRhaWwtc3VtbWFyeS1pb3Mu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBpZD0iYm9keSI+CisKKzxkZXRhaWxzIG9wZW4gaWQ9ImRldGFpbHMxIj4KKyAgPHN1bW1hcnkg
aWQ9InN1bW1hcnkxIj48cCBpZD0iczEiPlN1bW1hcnkxPC9wPjwvc3VtbWFyeT4KKyAgPHAgaWQ9
ImQxIj5EZXRhaWwxPC9wPgorICA8YSBocmVmPSIiIGlkPSJsaW5rIj5saW5rPC9hPgorPC9kZXRh
aWxzPgorCis8ZGV0YWlscyBpZD0iZGV0YWlsczIiPgorICA8c3VtbWFyeT48cCBpZD0iczIiPlN1
bW1hcnkyPC9wPjwvc3VtbWFyeT4KKyAgPHA+RGV0YWlsMjwvcD4KKzwvZGV0YWlscz4KKworPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoZSBkZXRhaWxzIGVsZW1lbnQgb24g
aU9TLiIpOworCisgICAgdmFyIGNhbGxiYWNrQ291bnQgPSAwOworICAgIGlmICh3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAKKyAgICAgICAgLy8gVGVzdCB0aGF0IHdlIGFy
ZSBnZXR0aW5nIHRoZSBleHBhbmRlZCBzdGF0dXMgZm9yIHRoZSBzdW1tYXJ5IHRleHQsIGJ1dCBu
b3QgZm9yIHRoZSBkZXRhaWxzIGNoaWxkcmVuLgorICAgICAgICB2YXIgc3VtbWFyeTEgPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInMxIik7CisgICAgICAg
IHZhciBkZXRhaWwxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJkMSIpOworICAgICAgICB2YXIgc3VtbWFyeTIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInMyIik7CisgICAgICAgIHZhciBsaW5rID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsaW5rIik7CisgICAgICAg
IAorICAgICAgICBzaG91bGRCZVRydWUoInN1bW1hcnkxLmlzRXhwYW5kZWQiKTsKKyAgICAgICAg
c2hvdWxkQmVGYWxzZSgiZGV0YWlsMS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlRmFs
c2UoInN1bW1hcnkyLmlzRXhwYW5kZWQiKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRlc3QgdGhh
dCBWTyBmb2N1cyBvbnRvIHRoZSBkZXRhaWxzIGNoaWxkcmVuIHdvbid0IHNldCBmb2N1cyB0byB0
aGUgc3VtbWFyeS9kZXRhaWxzIGVsZW1lbnQgb3IgaXRzIGNoaWxkcmVuLgorICAgICAgICBzdW1t
YXJ5MS5hc3Npc3RpdmVUZWNobm9sb2d5U2ltdWxhdGVkRm9jdXMoKTsKKyAgICAgICAgc2hvdWxk
QmVGYWxzZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1bW1hcnkxJykgPT09IGRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQiKTsKKyAgICAgICAgCisgICAgICAgIGRldGFpbDEuYXNzaXN0aXZlVGVj
aG5vbG9neVNpbXVsYXRlZEZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdkZXRhaWxzMScpID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50Iik7
CisgICAgICAgIAorICAgICAgICBsaW5rLmFzc2lzdGl2ZVRlY2hub2xvZ3lTaW11bGF0ZWRGb2N1
cygpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlu
aycpID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50Iik7CisgICAgfQorICAgIAorPC9zY3JpcHQ+
CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289029</attachid>
            <date>2016-09-15 20:29:21 -0700</date>
            <delta_ts>2016-09-19 10:58:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-2.txt</filename>
            <type>text/plain</type>
            <size>17905</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE2LTA5LTE1ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBhY2Nlc3NpYmlsaXR5IHN1
cHBvcnQgZm9yIGRldGFpbHMgZWxlbWVudCBvbiBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBkZXRhaWxzIGFuZCBzdW1tYXJ5IGVsZW1lbnRz
IGFyZSBwb29ybHkgc3VwcG9ydGVkIG9uIGlPUy4KKyAgICAgICAgVHdvIG1ham9yIGlzc3VlczoK
KyAgICAgICAgICAgIDEuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgdGFraW5nIGZvY3VzIG9udG8g
ZGV0YWlscy9zdW1tYXJ5IGVsZW1lbnRzIHdpbGwgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4K
KyAgICAgICAgICAgIDIuIFZvaWNlT3ZlciBpcyBub3Qgc3BlYWtpbmcgdGhlIGV4cGFuZGVkIHN0
YXR1cyBvZiB0aGUgZGV0YWlscyBlbGVtZW50LgorICAgICAgICBGaXhlZCB0aGVtIGJ5IG5vdCBz
ZXR0aW5nIGZvY3VzIG9udG8gZWxlbWVudHMgaW5zaWRlIGRldGFpbHMgYW5kIGV4cG9zaW5nIHRo
ZSBkZXRhaWxzIGVsZW1lbnQncyBleHBhbmRlZAorICAgICAgICBzdGF0dXMgdG8gaXRzIHN1bW1h
cnkncyBhY2Nlc3NpYmxlIGNoaWxkcmVuLgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkv
aW9zLXNpbXVsYXRvci9kZXRhaWwtc3VtbWFyeS1pb3MuaHRtbAorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAg
IChtYXRjaGVkUGFyZW50KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVB
bmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eUZpZWxkc2V0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGFibGVDZWxsUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGNvbnZlcnRQb2ludFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNvbnZlcnRSZWN0VG9TY3JlZW5TcGFj
ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0YWlsUGFy
ZW50Rm9yU3VtbWFyeU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgZGV0YWlsUGFyZW50Rm9yT2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudERpZEJlY29tZUZvY3VzZWRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6CisKIDIwMTYtMDktMTUgIERhdmUg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBQYXJzZXJdIEdldCBDU1NQ
YXJzZXJGYXN0UGF0aHMuY3BwIGNvbXBpbGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDIwNjAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDIyIEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciogQWNjZXMKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgTWF0Y2hGdW5jdGlvbj4KK3N0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRjaGVkUGFy
ZW50KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgYm9vbCBpbmNsdWRlU2VsZiwgY29uc3Qg
TWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykKK3sKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBpbmNsdWRl
U2VsZiA/IG9iamVjdCA6IG9iamVjdC0+cGFyZW50T2JqZWN0KCk7CisgICAgZm9yICg7IHBhcmVu
dDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICBpZiAobWF0Y2hl
cyhwYXJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIHBhcmVudDsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKKwogI3ByYWdtYSBtYXJrIEFjY2Vzc2liaWxpdHkgVGV4dCBN
YXJrZXIKIAogQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciA6IE5TT2JqZWN0
CkBAIC01MzMsNDIgKzU0OSw1NCBAQCAtIChCT09MKV9hY2Nlc3NpYmlsaXR5SXNMYW5kbWFya1Jv
bGU6KEFjCiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUxp
c3RBbmNlc3RvcgogewotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9v
YmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQgIT0gbmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBh
cmVudE9iamVjdCgpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBwYXJlbnQt
PnJvbGVWYWx1ZSgpOworICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gb2JqZWN0LT5y
b2xlVmFsdWUoKTsKICAgICAgICAgaWYgKHJvbGUgPT0gTGlzdFJvbGUgfHwgcm9sZSA9PSBMaXN0
Qm94Um9sZSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKLSAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CiAg
ICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQo
bV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgICAgICByZXR1cm4gcGFyZW50LT53cmFw
cGVyKCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIqKV9hY2Nlc3NpYmlsaXR5TGFuZG1hcmtBbmNlc3RvcgogewotICAgIGZvciAoQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQgIT0g
bmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChbc2Vs
ZiBfYWNjZXNzaWJpbGl0eUlzTGFuZG1hcmtSb2xlOnBhcmVudC0+cm9sZVZhbHVlKCldKQotICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwotICAgIH0KLQorICAgIGF1dG8gbWF0
Y2hGdW5jID0gW3NlbGZdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAg
aWYgKFtzZWxmIF9hY2Nlc3NpYmlsaXR5SXNMYW5kbWFya1JvbGU6b2JqZWN0LT5yb2xlVmFsdWUo
KV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07CisgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQ
YXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgICAgICByZXR1cm4gcGFyZW50
LT53cmFwcGVyKCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5VGFibGVBbmNlc3RvcgogewotICAgIGZvciAoQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQg
IT0gbmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChw
YXJlbnQtPnJvbGVWYWx1ZSgpID09IFRhYmxlUm9sZSB8fCBwYXJlbnQtPnJvbGVWYWx1ZSgpID09
IEdyaWRSb2xlKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOyAgIAotICAg
IH0KKyAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Qp
IHsKKyAgICAgICAgaWYgKG9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGFibGVSb2xlIHx8IG9iamVj
dC0+cm9sZVZhbHVlKCkgPT0gR3JpZFJvbGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CiAgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlP
YmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMp
KQorICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CiAgICAgcmV0dXJuIG5pbDsKIH0K
IAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5RmllbGRzZXRB
bmNlc3RvcgogewotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbV9vYmpl
Y3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQgIT0gbmlsOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnQtPmlzRmllbGRzZXQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKLSAgICB9CisgICAgYXV0byBtYXRjaEZ1bmMg
PSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIGlmIChvYmplY3Qt
PmlzRmllbGRzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfTsKICAgICAKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAgICAgIHJl
dHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCkBAIC0xMDIxLDI3
ICsxMDQ5LDI5IEBAIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUxhYmVsCiAtIChBY2Nlc3Np
YmlsaXR5VGFibGVDZWxsKil0YWJsZUNlbGxQYXJlbnQKIHsKICAgICAvLyBGaW5kIGlmIHRoaXMg
ZWxlbWVudCBpcyBpbiBhIHRhYmxlIGNlbGwuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY2Vs
bCA9IG51bGxwdHI7Ci0gICAgZm9yIChjZWxsID0gbV9vYmplY3Q7IGNlbGwgJiYgIWNlbGwtPmlz
VGFibGVDZWxsKCk7IGNlbGwgPSBjZWxsLT5wYXJlbnRPYmplY3QoKSkgCi0gICAgeyB9CisgICAg
YXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAg
ICAgIGlmIChvYmplY3QtPmlzVGFibGVDZWxsKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CiAgICAgCi0gICAgaWYgKCFjZWxsKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwqPihjZWxsKTsKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
bWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihwYXJlbnQpOworICAgIHJldHVy
biBuaWw7CiB9CiAKIC0gKEFjY2Vzc2liaWxpdHlUYWJsZSopdGFibGVQYXJlbnQKIHsKICAgICAv
LyBGaW5kIGlmIHRoZSBwYXJlbnQgdGFibGUgZm9yIHRoZSB0YWJsZSBjZWxsLgotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudFRhYmxlID0gbnVsbHB0cjsKLSAgICBmb3IgKHBhcmVudFRh
YmxlID0gbV9vYmplY3Q7IHBhcmVudFRhYmxlICYmICEoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigq
cGFyZW50VGFibGUpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKnBhcmVudFRhYmxl
KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCkpOyBwYXJlbnRUYWJsZSA9IHBhcmVu
dFRhYmxlLT5wYXJlbnRPYmplY3QoKSkKLSAgICB7IH0KLSAgICAKLSAgICBpZiAoIXBhcmVudFRh
YmxlKQotICAgICAgICByZXR1cm4gbmlsOworICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vz
c2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRh
YmxlPigqb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmplY3QpLmlz
RXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKICAgICAKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4ocGFyZW50VGFibGUpOworICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCB0cnVlLCBtYXRj
aEZ1bmMpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4o
cGFyZW50KTsKKyAgICByZXR1cm4gbmlsOwogfQogCiAtIChpZClhY2Nlc3NpYmlsaXR5VGl0bGVF
bGVtZW50CkBAIC0xNDA4LDE0ICsxNDM4LDE2IEBAIC0gKENHUG9pbnQpY29udmVydFBvaW50VG9T
Y3JlZW5TcGFjZTooRmwKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIGFw
cHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0
aGUgd2luZG93LgorICAgICAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QpIHsKKyAgICAgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dz4oKm9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH07CisgICAgICAgIAogICAgICAgICBTY3JvbGxWaWV3KiBz
Y3JvbGxWaWV3ID0gbnVsbHB0cjsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
ID0gbnVsbHB0cjsKLSAgICAgICAgZm9yIChwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0
KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICAg
ICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KSkgewotICAgICAgICAg
ICAgICAgIHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBh
cmVudCkuc2Nyb2xsVmlldygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNo
ZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpOworICAgICAgICBpZiAocGFyZW50
KQorICAgICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgIAogICAgICAgICBJbnRQb2ludCBp
bnRQb2ludCA9IGZsb29yZWRJbnRQb2ludChwb2ludCk7CiAgICAgICAgIGlmIChzY3JvbGxWaWV3
KQpAQCAtMTQ2MiwxNCArMTQ5NCwxNiBAQCAtIChDR1JlY3QpY29udmVydFJlY3RUb1NjcmVlblNw
YWNlOihJbnRSCiAgICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIGFw
cHJvcHJpYXRlIHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0
aGUgd2luZG93LgorICAgICAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QpIHsKKyAgICAgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmll
dz4oKm9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH07CisKICAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmll
dyA9IG51bGxwdHI7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG51bGxw
dHI7Ci0gICAgICAgIGZvciAocGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJl
bnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGlmIChp
czxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkpIHsKLSAgICAgICAgICAgICAgICBz
Y3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNj
cm9sbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQorICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50
KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKTsKKyAgICAgICAgaWYgKHBhcmVudCkKKyAgICAg
ICAgICAgIHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBh
cmVudCkuc2Nyb2xsVmlldygpOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbFZpZXcpCiAg
ICAgICAgICAgICByZWN0ID0gc2Nyb2xsVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlY3QpOwpA
QCAtMTgzMyw2ICsxODY3LDM1IEBAIC0gKENHUmVjdClfYWNjZXNzaWJpbGl0eVNjcm9sbFZpc2li
bGVSZWMKICAgICByZXR1cm4gbV9vYmplY3QtPnNjcm9sbFZpc2libGVDb250ZW50UmVjdCgpOwog
fQogCistIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0
OihBY2Nlc3NpYmlsaXR5T2JqZWN0KilvYmplY3QKK3sKKyAgICAvLyBVc2UgdGhpcyB0byBjaGVj
ayBpZiBhbiBvYmplY3QgaXMgdGhlIGNoaWxkIG9mIGEgc3VtbWFyeSBvYmplY3QuCisgICAgLy8g
QW5kIHJldHVybiB0aGUgc3VtbWFyeSdzIHBhcmVudCwgd2hpY2ggaXMgdGhlIGV4cGFuZGFibGUg
ZGV0YWlscyBvYmplY3QuCisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9i
amVjdCogb2JqZWN0KSB7CisgICAgICAgIGlmIChvYmplY3QtPmhhc1RhZ05hbWUoc3VtbWFyeVRh
ZykpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07CisgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHN1bW1hcnkgPSBtYXRjaGVk
UGFyZW50KG9iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICAgICAgcmV0dXJuIHN1bW1hcnkt
PnBhcmVudE9iamVjdCgpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKEFjY2Vzc2liaWxpdHlP
YmplY3QqKWRldGFpbFBhcmVudEZvck9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopb2JqZWN0
Cit7CisgICAgLy8gVXNlIHRoaXMgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGluc2lkZSBhIGRl
dGFpbHMgb2JqZWN0LgorICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCkgeworICAgICAgICBpZiAob2JqZWN0LT5oYXNUYWdOYW1lKGRldGFpbHNUYWcp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
OworICAgIAorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkZXRhaWxzID0gbWF0Y2hlZFBh
cmVudChvYmplY3QsIHRydWUsIG1hdGNoRnVuYykpCisgICAgICAgIHJldHVybiBkZXRhaWxzOwor
ICAgIHJldHVybiBuaWw7Cit9CisKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eUVsZW1lbnREaWRCZWNv
bWVGb2N1c2VkCiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
QEAgLTE4NDUsNiArMTkwOCw5IEBAIC0gKHZvaWQpYWNjZXNzaWJpbGl0eUVsZW1lbnREaWRCZWNv
bWVGb2MKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmIChvYmplY3QtPmNhblNldEZv
Y3VzQXR0cmlidXRlKCkpIHsKKyAgICAgICAgICAgIC8vIHdlYmtpdC5vcmcvYi8xNjIwNDEgVGFr
aW5nIGZvY3VzIG9udG8gZWxlbWVudHMgaW5zaWRlIGEgZGV0YWlscyBub2RlIHdpbGwgY2F1c2Ug
Vk8gZm9jdXNpbmcgb250byByYW5kb20gaXRlbXMuCisgICAgICAgICAgICBpZiAoW3NlbGYgZGV0
YWlsUGFyZW50Rm9yT2JqZWN0Om9iamVjdF0pCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBvYmplY3QtPnNldEZvY3VzZWQodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMjY4MSw2ICsyNzQ3LDExIEBAIC0gKEJPT0wpYWNjZXNzaWJpbGl0eVN1cHBv
cnRzQVJJQUV4cGFuZGUKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxd
KQogICAgICAgICByZXR1cm4gTk87CiAgICAgCisgICAgLy8gU2luY2UgZGV0YWlscyBlbGVtZW50
IGlzIGlnbm9yZWQgb24gaU9TLCB3ZSBzaG91bGQgZXhwb3NlIHRoZSBleHBhbmRlZCBzdGF0dXMg
b24gaXRzCisgICAgLy8gc3VtbWFyeSdzIGFjY2Vzc2libGUgY2hpbGRyZW4uCisgICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZvclN1
bW1hcnlPYmplY3Q6bV9vYmplY3RdKQorICAgICAgICByZXR1cm4gZGV0YWlsUGFyZW50LT5zdXBw
b3J0c0V4cGFuZGVkKCk7CisgICAgCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdXBwb3J0c0V4cGFu
ZGVkKCk7CiB9CiAKQEAgLTI2ODksNiArMjc2MCwxMSBAQCAtIChCT09MKWFjY2Vzc2liaWxpdHlJ
c0V4cGFuZGVkCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAg
ICAgICAgcmV0dXJuIE5POwogCisgICAgLy8gU2luY2UgZGV0YWlscyBlbGVtZW50IGlzIGlnbm9y
ZWQgb24gaU9TLCB3ZSBzaG91bGQgZXhwb3NlIHRoZSBleHBhbmRlZCBzdGF0dXMgb24gaXRzCisg
ICAgLy8gc3VtbWFyeSdzIGFjY2Vzc2libGUgY2hpbGRyZW4uCisgICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIGRldGFpbFBhcmVudCA9IFtzZWxmIGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmpl
Y3Q6bV9vYmplY3RdKQorICAgICAgICByZXR1cm4gZGV0YWlsUGFyZW50LT5pc0V4cGFuZGVkKCk7
CisgICAgCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5pc0V4cGFuZGVkKCk7CiB9CiAKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
NjAwOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE2LTA5LTE1ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6
IEFkZCBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgZm9yIGRldGFpbHMgZWxlbWVudCBvbiBpT1MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjA0MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW06CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKToKKwogMjAxNi0wOS0x
NSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVSTFBhcnNlcjogQ2hlY2sgZm9yIGludmFsaWQgY2hhcmFjdGVycyBpbiB0aGUgaG9zdApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRJT1MubW0JKHJldmlzaW9uIDIwNjAwOCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lv
cy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5
Nyw3IEBAIC0gKFVJQWNjZXNzaWJpbGl0eVRyYWl0cylfYXhDb250YWluZWRCeUYKIC0gKGlkKV9h
Y2Nlc3NpYmlsaXR5RmllbGRzZXRBbmNlc3RvcjsKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlIYXNU
b3VjaEV2ZW50TGlzdGVuZXI7CiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlFeHBhbmRlZFRl
eHRWYWx1ZTsKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzRXhwYW5kZWQ7CiAKIC8vIFRleHRNYXJr
ZXIgcmVsYXRlZAogLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZTsKQEAgLTgyNCw3ICs4MjUs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoCiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXTsKIH0K
IAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdApJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCShyZXZpc2lvbiAyMDYw
MDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIC0g
KFVJQWNjZXNzaWJpbGl0eVRyYWl0cylfYXhDb250YWluZWRCeUYKIC0gKGlkKV9hY2Nlc3NpYmls
aXR5RmllbGRzZXRBbmNlc3RvcjsKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlIYXNUb3VjaEV2ZW50
TGlzdGVuZXI7CiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlFeHBhbmRlZFRleHRWYWx1ZTsK
Ky0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzRXhwYW5kZWQ7CiAKIC8vIFRleHRNYXJrZXIgcmVsYXRl
ZAogLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZTsKQEAgLTU2OCw3ICs1NjksNyBAQCBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pCiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNFeHBhbmRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdApJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjA2MDA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTYtMDktMTUgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBWDogQWRkIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBmb3IgZGV0YWlscyBlbGVtZW50
IG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL2RldGFp
bC1zdW1tYXJ5LWlvcy5odG1sOiBBZGRlZC4KKwogMjAxNi0wOS0xMyAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWVkaWEtc291cmNlXSB3ZWItcGxhdGZvcm0t
dGVzdC9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVtb3ZlLmh0bWwgdGVzdCBmYWlsaW5nCklu
ZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1h
cnktaW9zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLWV4cGVjdGVkLnR4dAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWls
LXN1bW1hcnktaW9zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBA
CitTdW1tYXJ5MQorCitEZXRhaWwxCisKK2xpbmsKK1N1bW1hcnkyCisKK1RoaXMgdGVzdHMgdGhl
IGRldGFpbHMgZWxlbWVudCBvbiBpT1MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIHN1bW1hcnkxLmlzRXhwYW5kZWQgaXMgdHJ1ZQorUEFTUyBkZXRhaWwxLmlzRXhwYW5k
ZWQgaXMgZmFsc2UKK1BBU1Mgc3VtbWFyeTIuaXNFeHBhbmRlZCBpcyBmYWxzZQorUEFTUyBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnc3VtbWFyeTEnKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGV0YWlsczEnKSA9PT0g
ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyBmYWxzZQorUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnbGluaycpID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIGZhbHNlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlvcy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci9k
ZXRhaWwtc3VtbWFyeS1pb3MuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgaWQ9ImJvZHkiPgor
Cis8ZGV0YWlscyBvcGVuIGlkPSJkZXRhaWxzMSI+CisgIDxzdW1tYXJ5IGlkPSJzdW1tYXJ5MSI+
PHAgaWQ9InMxIj5TdW1tYXJ5MTwvcD48L3N1bW1hcnk+CisgIDxwIGlkPSJkMSI+RGV0YWlsMTwv
cD4KKyAgPGEgaHJlZj0iIiBpZD0ibGluayI+bGluazwvYT4KKzwvZGV0YWlscz4KKworPGRldGFp
bHMgaWQ9ImRldGFpbHMyIj4KKyAgPHN1bW1hcnk+PHAgaWQ9InMyIj5TdW1tYXJ5MjwvcD48L3N1
bW1hcnk+CisgIDxwPkRldGFpbDI8L3A+Cis8L2RldGFpbHM+CisKKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgZGV0YWlscyBlbGVtZW50IG9uIGlPUy4iKTsKKworICAg
IHZhciBjYWxsYmFja0NvdW50ID0gMDsKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKSB7CisgICAgCisgICAgICAgIC8vIFRlc3QgdGhhdCB3ZSBhcmUgZ2V0dGluZyB0aGUg
ZXhwYW5kZWQgc3RhdHVzIGZvciB0aGUgc3VtbWFyeSB0ZXh0LCBidXQgbm90IGZvciB0aGUgZGV0
YWlscyBjaGlsZHJlbi4KKyAgICAgICAgdmFyIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJzMSIpOworICAgICAgICB2YXIgZGV0YWlsMSA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZDEiKTsKKyAg
ICAgICAgdmFyIHN1bW1hcnkyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKCJzMiIpOworICAgICAgICB2YXIgbGluayA9IGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgibGluayIpOworICAgICAgICAKKyAgICAgICAgc2hv
dWxkQmVUcnVlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlRmFsc2Uo
ImRldGFpbDEuaXNFeHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJzdW1tYXJ5Mi5p
c0V4cGFuZGVkIik7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0IHRoYXQgVk8gZm9jdXMgb250
byB0aGUgZGV0YWlscyBjaGlsZHJlbiB3b24ndCBzZXQgZm9jdXMgdG8gdGhlIHN1bW1hcnkvZGV0
YWlscyBlbGVtZW50IG9yIGl0cyBjaGlsZHJlbi4KKyAgICAgICAgc3VtbWFyeTEuYXNzaXN0aXZl
VGVjaG5vbG9neVNpbXVsYXRlZEZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlRmFsc2UoImRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdzdW1tYXJ5MScpID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50
Iik7CisgICAgICAgIAorICAgICAgICBkZXRhaWwxLmFzc2lzdGl2ZVRlY2hub2xvZ3lTaW11bGF0
ZWRGb2N1cygpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZGV0YWlsczEnKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCIpOworICAgICAgICAKKyAg
ICAgICAgbGluay5hc3Npc3RpdmVUZWNobm9sb2d5U2ltdWxhdGVkRm9jdXMoKTsKKyAgICAgICAg
c2hvdWxkQmVGYWxzZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsnKSA9PT0gZG9jdW1l
bnQuYWN0aXZlRWxlbWVudCIpOworICAgIH0KKyAgICAKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289241</attachid>
            <date>2016-09-19 10:58:07 -0700</date>
            <delta_ts>2016-09-19 11:34:33 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17495</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTg4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE2LTA5LTE5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFkZCBhY2Nlc3NpYmlsaXR5IHN1
cHBvcnQgZm9yIGRldGFpbHMgZWxlbWVudCBvbiBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjA0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBkZXRhaWxzIGFuZCBzdW1tYXJ5IGVsZW1lbnRz
IGFyZSBwb29ybHkgc3VwcG9ydGVkIG9uIGlPUy4KKyAgICAgICAgVHdvIG1ham9yIGlzc3VlczoK
KyAgICAgICAgICAgIDEuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgdGFraW5nIGZvY3VzIG9udG8g
ZGV0YWlscy9zdW1tYXJ5IGVsZW1lbnRzIHdpbGwgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4K
KyAgICAgICAgICAgIDIuIFZvaWNlT3ZlciBpcyBub3Qgc3BlYWtpbmcgdGhlIGV4cGFuZGVkIHN0
YXR1cyBvZiB0aGUgZGV0YWlscyBlbGVtZW50LgorICAgICAgICBGaXhlZCB0aGVtIGJ5IG5vdCBz
ZXR0aW5nIGZvY3VzIG9udG8gZWxlbWVudHMgaW5zaWRlIGRldGFpbHMgYW5kIGV4cG9zaW5nIHRo
ZSBkZXRhaWxzIGVsZW1lbnQncyBleHBhbmRlZAorICAgICAgICBzdGF0dXMgdG8gaXRzIHN1bW1h
cnkncyBhY2Nlc3NpYmxlIGNoaWxkcmVuLgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkv
aW9zLXNpbXVsYXRvci9kZXRhaWwtc3VtbWFyeS1pb3MuaHRtbAorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAg
IChtYXRjaGVkUGFyZW50KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlMYW5kbWFya0FuY2VzdG9yXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5VGFibGVB
bmNlc3Rvcl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNj
ZXNzaWJpbGl0eUZpZWxkc2V0QW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGFibGVDZWxsUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlUGFyZW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGNvbnZlcnRQb2ludFRvU2NyZWVuU3BhY2U6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNvbnZlcnRSZWN0VG9TY3JlZW5TcGFj
ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0YWlsUGFy
ZW50Rm9yU3VtbWFyeU9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgZGV0YWlsUGFyZW50Rm9yT2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVudERpZEJlY29tZUZvY3VzZWRd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eVN1cHBvcnRzQVJJQUV4cGFuZGVkXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXSk6CisKIDIwMTYtMDktMTMgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFVu
aWZ5IGZvbnQncyBhc2NlbnQsIGRlc2NlbnQsIGFuZCB4LWhlaWdodCBiZXR3ZWVuIG1hY09TIGFu
ZCBpT1MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZp
c2lvbiAyMDU4ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEz
MSwyMiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2VzCiAgICAgcmV0
dXJuIHdyYXBwZXI7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+CitzdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0Y2hlZFBhcmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBvYmplY3QsIGJvb2wgaW5jbHVkZVNlbGYsIGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMp
Cit7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gaW5jbHVkZVNlbGYgPyBvYmplY3QgOiBvYmplY3Qt
PnBhcmVudE9iamVjdCgpOworICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1hdGNoZXMocGFyZW50KSkKKyAgICAgICAgICAg
IHJldHVybiBwYXJlbnQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCisK
ICNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5IFRleHQgTWFya2VyCiAKIEBpbnRlcmZhY2UgV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgOiBOU09iamVjdApAQCAtNTMzLDQyICs1NDksNDYgQEAg
LSAoQk9PTClfYWNjZXNzaWJpbGl0eUlzTGFuZG1hcmtSb2xlOihBYwogCiAtIChBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3IKIHsKLSAgICBmb3Ig
KEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsg
cGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAg
ICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gcGFyZW50LT5yb2xlVmFsdWUoKTsKLSAgICAgICAg
aWYgKHJvbGUgPT0gTGlzdFJvbGUgfHwgcm9sZSA9PSBMaXN0Qm94Um9sZSkKLSAgICAgICAgICAg
IHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKLSAgICB9CisgICAgYXV0byBtYXRjaEZ1bmMgPSBb
XSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlS
b2xlIHJvbGUgPSBvYmplY3QtPnJvbGVWYWx1ZSgpOworICAgICAgICByZXR1cm4gcm9sZSA9PSBM
aXN0Um9sZSB8fCByb2xlID09IExpc3RCb3hSb2xlOworICAgIH07CiAgICAgCisgICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNl
LCBtYXRjaEZ1bmMpKQorICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CiAgICAgcmV0
dXJuIG5pbDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmls
aXR5TGFuZG1hcmtBbmNlc3RvcgogewotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQgIT0gbmlsOyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChbc2VsZiBfYWNjZXNzaWJpbGl0
eUlzTGFuZG1hcmtSb2xlOnBhcmVudC0+cm9sZVZhbHVlKCldKQotICAgICAgICAgICAgcmV0dXJu
IHBhcmVudC0+d3JhcHBlcigpOwotICAgIH0KLQorICAgIGF1dG8gbWF0Y2hGdW5jID0gW3NlbGZd
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9h
Y2Nlc3NpYmlsaXR5SXNMYW5kbWFya1JvbGU6b2JqZWN0LT5yb2xlVmFsdWUoKV07CisgICAgfTsK
KyAgICAKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVu
dChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAgICAgIHJldHVybiBwYXJlbnQtPndy
YXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciopX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yCiB7Ci0gICAgZm9yIChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2JqZWN0KCk7IHBhcmVudCAhPSBu
aWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKHBhcmVu
dC0+cm9sZVZhbHVlKCkgPT0gVGFibGVSb2xlIHx8IHBhcmVudC0+cm9sZVZhbHVlKCkgPT0gR3Jp
ZFJvbGUpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7ICAgCi0gICAgfQor
ICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewor
ICAgICAgICByZXR1cm4gb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUYWJsZVJvbGUgfHwgb2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBHcmlkUm9sZTsKKyAgICB9OwogICAgIAorICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0
Y2hGdW5jKSkKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJldHVybiBu
aWw7CiB9CiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUZp
ZWxkc2V0QW5jZXN0b3IKIHsKLSAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAocGFyZW50LT5pc0ZpZWxkc2V0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7Ci0gICAgfQorICAgIGF1dG8gbWF0
Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICByZXR1
cm4gb2JqZWN0LT5pc0ZpZWxkc2V0KCk7CisgICAgfTsKICAgICAKKyAgICBpZiAoQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNo
RnVuYykpCisgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmls
OwogfQogCkBAIC0xMDIxLDI3ICsxMDQxLDI1IEBAIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eUxhYmVsCiAtIChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKil0YWJsZUNlbGxQYXJlbnQKIHsKICAg
ICAvLyBGaW5kIGlmIHRoaXMgZWxlbWVudCBpcyBpbiBhIHRhYmxlIGNlbGwuCi0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogY2VsbCA9IG51bGxwdHI7Ci0gICAgZm9yIChjZWxsID0gbV9vYmplY3Q7
IGNlbGwgJiYgIWNlbGwtPmlzVGFibGVDZWxsKCk7IGNlbGwgPSBjZWxsLT5wYXJlbnRPYmplY3Qo
KSkgCi0gICAgeyB9CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QtPmlzVGFibGVDZWxsKCk7CisgICAg
fTsKICAgICAKLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KGNlbGwpOworICAgIGlmIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCB0cnVl
LCBtYXRjaEZ1bmMpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbCo+KHBhcmVudCk7CisgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0
eVRhYmxlKil0YWJsZVBhcmVudAogewogICAgIC8vIEZpbmQgaWYgdGhlIHBhcmVudCB0YWJsZSBm
b3IgdGhlIHRhYmxlIGNlbGwuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUg
PSBudWxscHRyOwotICAgIGZvciAocGFyZW50VGFibGUgPSBtX29iamVjdDsgcGFyZW50VGFibGUg
JiYgIShpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpwYXJlbnRUYWJsZSkgJiYgZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlPigqcGFyZW50VGFibGUpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2li
aWxpdHkoKSk7IHBhcmVudFRhYmxlID0gcGFyZW50VGFibGUtPnBhcmVudE9iamVjdCgpKQotICAg
IHsgfQotICAgIAotICAgIGlmICghcGFyZW50VGFibGUpCi0gICAgICAgIHJldHVybiBuaWw7Cisg
ICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmplY3QpICYmIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpOworICAgIH07CiAgICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZSo+KHBhcmVudFRhYmxlKTsKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KHBhcmVudCk7CisgICAgcmV0
dXJuIG5pbDsKIH0KIAogLSAoaWQpYWNjZXNzaWJpbGl0eVRpdGxlRWxlbWVudApAQCAtMTQwOCwx
NCArMTQyNiwxNCBAQCAtIChDR1BvaW50KWNvbnZlcnRQb2ludFRvU2NyZWVuU3BhY2U6KEZsCiAg
ICAgfQogICAgIGVsc2UgewogICAgICAgICAvLyBGaW5kIHRoZSBhcHByb3ByaWF0ZSBzY3JvbGwg
dmlldyB0byB1c2UgdG8gY29udmVydCB0aGUgY29udGVudHMgdG8gdGhlIHdpbmRvdy4KKyAgICAg
ICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7Cisg
ICAgICAgICAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpvYmplY3QpOwor
ICAgICAgICB9OworICAgICAgICAKICAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IG51
bGxwdHI7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG51bGxwdHI7Ci0g
ICAgICAgIGZvciAocGFyZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQ7IHBh
cmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCkpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxW
aWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZp
ZXcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2Jq
ZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKTsKKyAgICAgICAgaWYgKHBhcmVudCkKKyAgICAgICAgICAg
IHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCku
c2Nyb2xsVmlldygpOwogICAgICAgICAKICAgICAgICAgSW50UG9pbnQgaW50UG9pbnQgPSBmbG9v
cmVkSW50UG9pbnQocG9pbnQpOwogICAgICAgICBpZiAoc2Nyb2xsVmlldykKQEAgLTE0NjIsMTQg
KzE0ODAsMTQgQEAgLSAoQ0dSZWN0KWNvbnZlcnRSZWN0VG9TY3JlZW5TcGFjZTooSW50UgogICAg
ICAgICAKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGaW5kIHRoZSBhcHByb3ByaWF0ZSBzY3Jv
bGwgdmlldyB0byB1c2UgdG8gY29udmVydCB0aGUgY29udGVudHMgdG8gdGhlIHdpbmRvdy4KKyAg
ICAgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7
CisgICAgICAgICAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpvYmplY3Qp
OworICAgICAgICB9OworCiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBudWxscHRy
OwotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBudWxscHRyOwotICAgICAg
ICBmb3IgKHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQg
PSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsVmlldyA9
IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwg
ZmFsc2UsIG1hdGNoRnVuYyk7CisgICAgICAgIGlmIChwYXJlbnQpCisgICAgICAgICAgICBzY3Jv
bGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNjcm9s
bFZpZXcoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzY3JvbGxWaWV3KQogICAgICAgICAgICAg
cmVjdCA9IHNjcm9sbFZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZWN0KTsKQEAgLTE4MzMsNiAr
MTg1MSwzMSBAQCAtIChDR1JlY3QpX2FjY2Vzc2liaWxpdHlTY3JvbGxWaXNpYmxlUmVjCiAgICAg
cmV0dXJuIG1fb2JqZWN0LT5zY3JvbGxWaXNpYmxlQ29udGVudFJlY3QoKTsKIH0KIAorLSAoQWNj
ZXNzaWJpbGl0eU9iamVjdCopZGV0YWlsUGFyZW50Rm9yU3VtbWFyeU9iamVjdDooQWNjZXNzaWJp
bGl0eU9iamVjdCopb2JqZWN0Cit7CisgICAgLy8gVXNlIHRoaXMgdG8gY2hlY2sgaWYgYW4gb2Jq
ZWN0IGlzIHRoZSBjaGlsZCBvZiBhIHN1bW1hcnkgb2JqZWN0LgorICAgIC8vIEFuZCByZXR1cm4g
dGhlIHN1bW1hcnkncyBwYXJlbnQsIHdoaWNoIGlzIHRoZSBleHBhbmRhYmxlIGRldGFpbHMgb2Jq
ZWN0LgorICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LT5oYXNUYWdOYW1lKHN1bW1hcnlUYWcpOworICAg
IH07CisgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHN1bW1hcnkgPSBtYXRjaGVk
UGFyZW50KG9iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICAgICAgcmV0dXJuIHN1bW1hcnkt
PnBhcmVudE9iamVjdCgpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKEFjY2Vzc2liaWxpdHlP
YmplY3QqKWRldGFpbFBhcmVudEZvck9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopb2JqZWN0
Cit7CisgICAgLy8gVXNlIHRoaXMgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGluc2lkZSBhIGRl
dGFpbHMgb2JqZWN0LgorICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LT5oYXNUYWdOYW1lKGRldGFpbHNU
YWcpOworICAgIH07CisgICAgCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGRldGFpbHMg
PSBtYXRjaGVkUGFyZW50KG9iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICAgICAgcmV0dXJu
IGRldGFpbHM7CisgICAgcmV0dXJuIG5pbDsKK30KKwogLSAodm9pZClhY2Nlc3NpYmlsaXR5RWxl
bWVudERpZEJlY29tZUZvY3VzZWQKIHsKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQpAQCAtMTg0NSw2ICsxODg4LDkgQEAgLSAodm9pZClhY2Nlc3NpYmlsaXR5RWxl
bWVudERpZEJlY29tZUZvYwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKG9iamVj
dC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkgeworICAgICAgICAgICAgLy8gd2Via2l0Lm9yZy9i
LzE2MjA0MSBUYWtpbmcgZm9jdXMgb250byBlbGVtZW50cyBpbnNpZGUgYSBkZXRhaWxzIG5vZGUg
d2lsbCBjYXVzZSBWTyBmb2N1c2luZyBvbnRvIHJhbmRvbSBpdGVtcy4KKyAgICAgICAgICAgIGlm
IChbc2VsZiBkZXRhaWxQYXJlbnRGb3JPYmplY3Q6b2JqZWN0XSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIG9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0yNjg3LDYgKzI3MzMsMTEgQEAgLSAoQk9PTClhY2Nlc3Np
YmlsaXR5U3VwcG9ydHNBUklBRXhwYW5kZQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKKyAgICAvLyBTaW5jZSBkZXRh
aWxzIGVsZW1lbnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFu
ZGVkIHN0YXR1cyBvbiBpdHMKKyAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4K
KyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWls
UGFyZW50Rm9yU3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgICAgIHJldHVybiBkZXRhaWxQ
YXJlbnQtPnN1cHBvcnRzRXhwYW5kZWQoKTsKKyAgICAKICAgICByZXR1cm4gbV9vYmplY3QtPnN1
cHBvcnRzRXhwYW5kZWQoKTsKIH0KIApAQCAtMjY5NSw2ICsyNzQ2LDExIEBAIC0gKEJPT0wpYWNj
ZXNzaWJpbGl0eUlzRXhwYW5kZWQKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gTk87CiAKKyAgICAvLyBTaW5jZSBkZXRhaWxzIGVsZW1l
bnQgaXMgaWdub3JlZCBvbiBpT1MsIHdlIHNob3VsZCBleHBvc2UgdGhlIGV4cGFuZGVkIHN0YXR1
cyBvbiBpdHMKKyAgICAvLyBzdW1tYXJ5J3MgYWNjZXNzaWJsZSBjaGlsZHJlbi4KKyAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlsUGFyZW50ID0gW3NlbGYgZGV0YWlsUGFyZW50Rm9y
U3VtbWFyeU9iamVjdDptX29iamVjdF0pCisgICAgICAgIHJldHVybiBkZXRhaWxQYXJlbnQtPmlz
RXhwYW5kZWQoKTsKKyAgICAKICAgICByZXR1cm4gbV9vYmplY3QtPmlzRXhwYW5kZWQoKTsKIH0K
IApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjA2MTAwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTYtMDktMTkgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBWDogQWRkIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBmb3IgZGV0YWlscyBlbGVtZW50
IG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1Mu
bW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQpOgor
CiAyMDE2LTA5LTE4ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1AbmF2ZXJjb3JwLmNvbT4K
IAogICAgICAgICBbRUZMXSBCdW1wIGVmbCBsaWJyYXJ5IHRvIDEuMTguMQpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1Mu
bW0JKHJldmlzaW9uIDIwNTg4NCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIC0g
KFVJQWNjZXNzaWJpbGl0eVRyYWl0cylfYXhDb250YWluZWRCeUYKIC0gKGlkKV9hY2Nlc3NpYmls
aXR5RmllbGRzZXRBbmNlc3RvcjsKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlIYXNUb3VjaEV2ZW50
TGlzdGVuZXI7CiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlFeHBhbmRlZFRleHRWYWx1ZTsK
Ky0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzRXhwYW5kZWQ7CiAKIC8vIFRleHRNYXJrZXIgcmVsYXRl
ZAogLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZTsKQEAgLTgyNCw3ICs4MjUsNyBAQCBib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWQoCiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNFeHBhbmRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdApJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCShyZXZpc2lvbiAyMDU4ODQpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIC0gKFVJQWNjZXNz
aWJpbGl0eVRyYWl0cylfYXhDb250YWluZWRCeUYKIC0gKGlkKV9hY2Nlc3NpYmlsaXR5RmllbGRz
ZXRBbmNlc3RvcjsKIC0gKEJPT0wpX2FjY2Vzc2liaWxpdHlIYXNUb3VjaEV2ZW50TGlzdGVuZXI7
CiAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlFeHBhbmRlZFRleHRWYWx1ZTsKKy0gKEJPT0wp
YWNjZXNzaWJpbGl0eUlzRXhwYW5kZWQ7CiAKIC8vIFRleHRNYXJrZXIgcmVsYXRlZAogLSAoTlNB
cnJheSAqKXRleHRNYXJrZXJSYW5nZTsKQEAgLTU2OCw3ICs1NjksNyBAQCBib29sIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pCiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNFeHBhbmRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBb
bV9lbGVtZW50IGFjY2Vzc2liaWxpdHlJc0V4cGFuZGVkXTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0NoZWNrZWQoKSBjb25zdApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1ODg0
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTYtMDktMTkgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBB
WDogQWRkIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCBmb3IgZGV0YWlscyBlbGVtZW50IG9uIGlPUwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMDQxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1hcnktaW9zLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5
LWlvcy5odG1sOiBBZGRlZC4KKwogMjAxNi0wOS0xMyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4
ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVW5pZnkgZm9udCdzIGFzY2VudCwg
ZGVzY2VudCwgYW5kIHgtaGVpZ2h0IGJldHdlZW4gbWFjT1MgYW5kIGlPUwpJbmRleDogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlvcy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9pb3Mtc2lt
dWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlvcy1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlv
cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorU3VtbWFyeTEK
KworRGV0YWlsMQorCitsaW5rCitTdW1tYXJ5MgorCitUaGlzIHRlc3RzIHRoZSBkZXRhaWxzIGVs
ZW1lbnQgb24gaU9TLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBzdW1t
YXJ5MS5pc0V4cGFuZGVkIGlzIHRydWUKK1BBU1MgZGV0YWlsMS5pc0V4cGFuZGVkIGlzIGZhbHNl
CitQQVNTIHN1bW1hcnkyLmlzRXhwYW5kZWQgaXMgZmFsc2UKK1BBU1MgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3N1bW1hcnkxJykgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgZmFsc2UK
K1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldGFpbHMxJykgPT09IGRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQgaXMgZmFsc2UKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmsn
KSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvaW9zLXNpbXVsYXRvci9kZXRhaWwtc3VtbWFyeS1pb3MuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvZGV0YWlsLXN1bW1h
cnktaW9zLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9p
b3Mtc2ltdWxhdG9yL2RldGFpbC1zdW1tYXJ5LWlvcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPGRldGFpbHMg
b3BlbiBpZD0iZGV0YWlsczEiPgorICA8c3VtbWFyeSBpZD0ic3VtbWFyeTEiPjxwIGlkPSJzMSI+
U3VtbWFyeTE8L3A+PC9zdW1tYXJ5PgorICA8cCBpZD0iZDEiPkRldGFpbDE8L3A+CisgIDxhIGhy
ZWY9IiIgaWQ9ImxpbmsiPmxpbms8L2E+Cis8L2RldGFpbHM+CisKKzxkZXRhaWxzIGlkPSJkZXRh
aWxzMiI+CisgIDxzdW1tYXJ5PjxwIGlkPSJzMiI+U3VtbWFyeTI8L3A+PC9zdW1tYXJ5PgorICA8
cD5EZXRhaWwyPC9wPgorPC9kZXRhaWxzPgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRo
aXMgdGVzdHMgdGhlIGRldGFpbHMgZWxlbWVudCBvbiBpT1MuIik7CisKKyAgICB2YXIgY2FsbGJh
Y2tDb3VudCA9IDA7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgewor
ICAgIAorICAgICAgICAvLyBUZXN0IHRoYXQgd2UgYXJlIGdldHRpbmcgdGhlIGV4cGFuZGVkIHN0
YXR1cyBmb3IgdGhlIHN1bW1hcnkgdGV4dCwgYnV0IG5vdCBmb3IgdGhlIGRldGFpbHMgY2hpbGRy
ZW4uCisgICAgICAgIHZhciBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiczEiKTsKKyAgICAgICAgdmFyIGRldGFpbDEgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImQxIik7CisgICAgICAgIHZhciBz
dW1tYXJ5MiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgi
czIiKTsKKyAgICAgICAgdmFyIGxpbmsgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoImxpbmsiKTsKKyAgICAgICAgCisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
c3VtbWFyeTEuaXNFeHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJkZXRhaWwxLmlz
RXhwYW5kZWQiKTsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgic3VtbWFyeTIuaXNFeHBhbmRlZCIp
OworICAgICAgICAKKyAgICAgICAgLy8gVGVzdCB0aGF0IFZPIGZvY3VzIG9udG8gdGhlIGRldGFp
bHMgY2hpbGRyZW4gd29uJ3Qgc2V0IGZvY3VzIHRvIHRoZSBzdW1tYXJ5L2RldGFpbHMgZWxlbWVu
dCBvciBpdHMgY2hpbGRyZW4uCisgICAgICAgIHN1bW1hcnkxLmFzc2lzdGl2ZVRlY2hub2xvZ3lT
aW11bGF0ZWRGb2N1cygpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnc3VtbWFyeTEnKSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCIpOworICAgICAg
ICAKKyAgICAgICAgZGV0YWlsMS5hc3Npc3RpdmVUZWNobm9sb2d5U2ltdWxhdGVkRm9jdXMoKTsK
KyAgICAgICAgc2hvdWxkQmVGYWxzZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RldGFpbHMx
JykgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQiKTsKKyAgICAgICAgCisgICAgICAgIGxpbmsu
YXNzaXN0aXZlVGVjaG5vbG9neVNpbXVsYXRlZEZvY3VzKCk7CisgICAgICAgIHNob3VsZEJlRmFs
c2UoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rJykgPT09IGRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQiKTsKKyAgICB9CisgICAgCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>