<?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>163367</bug_id>
          
          <creation_ts>2016-10-12 16:21:06 -0700</creation_ts>
          <short_desc>AX: [Mac] better accessibility support for Summary elements</short_desc>
          <delta_ts>2016-10-13 15:55:00 -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>1239559</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-12 16:21:06 -0700</bug_when>
    <thetext>- Summary element should be exposed as some form of AXButton
  Mapping: AXButton/AXSummary/summary
- Summary element should use its text node as AXTitle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239560</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-10-12 16:21:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/28745010&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239567</commentid>
    <comment_count>2</comment_count>
      <attachid>291415</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-12 16:39:20 -0700</bug_when>
    <thetext>Created attachment 291415
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239589</commentid>
    <comment_count>3</comment_count>
      <attachid>291415</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-10-12 17:02:39 -0700</bug_when>
    <thetext>Comment on attachment 291415
patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2483
&gt; +        for (AccessibilityObject* parentObject = this-&gt;parentObject(); parentObject; parentObject = parentObject-&gt;parentObject()) {

do we have an enclosure for this?

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1413
&gt; +    if (m_object-&gt;supportsExpanded() || m_object-&gt;isSummary())

should supportsExpanded() also include isSummary()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239594</commentid>
    <comment_count>4</comment_count>
      <attachid>291415</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-12 17:06:22 -0700</bug_when>
    <thetext>Comment on attachment 291415
patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2483
&gt;&gt; +        for (AccessibilityObject* parentObject = this-&gt;parentObject(); parentObject; parentObject = parentObject-&gt;parentObject()) {
&gt; 
&gt; do we have an enclosure for this?

we don&apos;t in this class.

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:1413
&gt;&gt; +    if (m_object-&gt;supportsExpanded() || m_object-&gt;isSummary())
&gt; 
&gt; should supportsExpanded() also include isSummary()?

I think it&apos;s the detail element that actually has the expanded status. I&apos;m not sure how other platform is doing this, so putting here to only affect mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239715</commentid>
    <comment_count>5</comment_count>
      <attachid>291460</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-13 00:11:47 -0700</bug_when>
    <thetext>Created attachment 291460
patch

Added the enclosure for finding the parent object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239716</commentid>
    <comment_count>6</comment_count>
      <attachid>291460</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-10-13 00:21:41 -0700</bug_when>
    <thetext>Comment on attachment 291460
patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:463
&gt; +    return AccessibilityObject::matchedParent(const_cast&lt;AccessibilityObject*&gt;(this), false, matchFunc);

can we write these enclosures inline to save space?

return AccessibilityObject::matchedParent(const_cast&lt;AccessibilityObject*&gt;(this), false, [](AccessibilityObject* object) {
 461        return !object-&gt;accessibilityIsIgnored();
 462    });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239718</commentid>
    <comment_count>7</comment_count>
      <attachid>291461</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-13 00:33:36 -0700</bug_when>
    <thetext>Created attachment 291461
patch

updated style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239719</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-13 00:35:58 -0700</bug_when>
    <thetext>Attachment 291461 did not pass style-queue:


ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:460:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:1696:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:1790:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:2315:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:2484:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:2945:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:3043:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:3049:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 8 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239720</commentid>
    <comment_count>9</comment_count>
      <attachid>291462</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-13 00:46:14 -0700</bug_when>
    <thetext>Created attachment 291462
patch

updated style again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239722</commentid>
    <comment_count>10</comment_count>
      <attachid>291464</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-13 00:52:24 -0700</bug_when>
    <thetext>Created attachment 291464
patch

Oops.. missed something</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239900</commentid>
    <comment_count>11</comment_count>
      <attachid>291464</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-13 12:20:54 -0700</bug_when>
    <thetext>Comment on attachment 291464
patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.h:1066
&gt; +    static AccessibilityObject* matchedParent(AccessibilityObject*, bool includeSelf, const std::function&lt;bool(AccessibilityObject*)&gt;&amp;);

I don’t think the types are quite right here. I think we should probably use const versions and take references. The passed in function should take an AccesibilityObject&amp;, not an AccessibilityObject*.

    static const AccessibilityObject* matchedParent(const AccessibilityObject&amp;, bool includeSelf, const std::function&lt;bool(const AccessibilityObject&amp;)&gt;&amp;);

And if we really need a non-const version (I am not sure we do):

    static AccessibilityObject* matchedParent(AccessibilityObject&amp;, bool includeSelf, const std::function&lt;bool(const AccessibilityObject&amp;)&gt;&amp;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239943</commentid>
    <comment_count>12</comment_count>
      <attachid>291515</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-10-13 14:15:43 -0700</bug_when>
    <thetext>Created attachment 291515
patch for landing

Updated the types based on the review.
Changed lots of code so uploaded a patch to see if everything still works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239993</commentid>
    <comment_count>13</comment_count>
      <attachid>291515</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-13 15:54:55 -0700</bug_when>
    <thetext>Comment on attachment 291515
patch for landing

Clearing flags on attachment: 291515

Committed r207314: &lt;http://trac.webkit.org/changeset/207314&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239994</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-13 15:55:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291415</attachid>
            <date>2016-10-12 16:39:20 -0700</date>
            <delta_ts>2016-10-13 00:11:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11625</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDE2LTEwLTEyICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlZCBzdW1tYXJ5IGVsZW1lbnRzIGFzIEFYQnV0dG9uIGFuZCB1c2VkIHRoZSB0
ZXh0IG5vZGUncyBjb250ZW50CisgICAgICAgIGFzIEFYVGl0bGUuIEFsc28gZXhwb3NlZCB0aGUg
ZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMgb24gdGhlIHN1bW1hcnkKKyAgICAgICAg
ZWxlbWVudCwgc28gdGhhdCB1c2VycyB3b3VsZCBzZWUgaXQgYXMgYSBjb2xsYXBzZWQvZXhwYW5k
ZWQgYnV0dG9uLgorCisgICAgICAgIENoYW5nZXMgYXJlIGNvdmVyZWQgaW4gdGhlIG1vZGlmaWVk
IHRlc3RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRXhwYW5kZWQpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNTdW1tYXJ5KToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoY3JlYXRlQWNjZXNzaWJpbGl0eVJvbGVNYXAp
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByb2xlRGVzY3JpcHRp
b25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorCiAyMDE2LTEwLTEyICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgW01vZGVybiBNZWRpYSBDb250cm9sc10gU2xpZGVy
czogc2NydWJiZXIgYW5kIHZvbHVtZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDcyNjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDc4LDYgKzI0NzgsMTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Ojppc0V4cGFuZGVkKCkgYwogICAgIGlmIChpczxIVE1MRGV0YWlsc0VsZW1lbnQ+KG5vZGUo
KSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MRGV0YWlsc0VsZW1lbnQ+KG5vZGUoKSkt
PmlzT3BlbigpOwogICAgIAorICAgIC8vIFN1bW1hcnkgZWxlbWVudCBzaG91bGQgdXNlIGl0cyBk
ZXRhaWxzIHBhcmVudCdzIGV4cGFuZGVkIHN0YXR1cy4KKyAgICBpZiAoaXNTdW1tYXJ5KCkpIHsK
KyAgICAgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3QgPSB0aGlzLT5w
YXJlbnRPYmplY3QoKTsgcGFyZW50T2JqZWN0OyBwYXJlbnRPYmplY3QgPSBwYXJlbnRPYmplY3Qt
PnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50T2JqZWN0LT5yb2xlVmFs
dWUoKSA9PSBEZXRhaWxzUm9sZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50T2JqZWN0
LT5pc0V4cGFuZGVkKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgcmV0dXJuIGZhbHNl
OyAgCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiAyMDcyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYx
LDYgKzU2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3Vic2NyaXB0U3R5bGVHcm91cCgpIGNv
bnN0OwogICAgIGJvb2wgaXNTdXBlcnNjcmlwdFN0eWxlR3JvdXAoKSBjb25zdDsKICAgICBib29s
IGlzRmlndXJlKCkgY29uc3Q7CisgICAgYm9vbCBpc1N1bW1hcnkoKSBjb25zdCB7IHJldHVybiBy
b2xlVmFsdWUoKSA9PSBTdW1tYXJ5Um9sZTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0No
ZWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIwNzI2MikKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDEwLDcgKzE0MTAsNyBAQCAtIChOU0FycmF5KilhZGRpdGlvbmFsQWNj
ZXNzaWJpbGl0eUF0dHJpCiAgICAgaWYgKG1fb2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKQogICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVd
OwogICAgIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpKQorICAgIGlmICht
X29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpIHx8IG1fb2JqZWN0LT5pc1N1bW1hcnkoKSkKICAg
ICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmli
dXRlXTsKICAgICAKICAgICBpZiAobV9vYmplY3QtPmlzU2Nyb2xsYmFyKCkKQEAgLTIyMDcsNyAr
MjIwNyw3IEBAIHN0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5Um9sZU1hcCYgY3JlYXQKICAgICAg
ICAgeyBSdWJ5UnVuUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCiAgICAgICAgIHsg
UnVieVRleHRSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBEZXRh
aWxzUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgU3VtbWFyeVJv
bGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IFN1bW1hcnlSb2xlLCBO
U0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlIH0sCiAgICAgICAgIHsgU1ZHVGV4dFBhdGhSb2xlLCBO
U0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBTVkdUZXh0Um9sZSwgTlNBY2Nl
c3NpYmlsaXR5R3JvdXBSb2xlIH0sCiAgICAgICAgIHsgU1ZHVFNwYW5Sb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKQEAgLTI0OTQsOCArMjQ5NCw2IEBAIC0gKE5TU3RyaW5nKilyb2xl
RGVzY3JpcHRpb24KICAgICAgICAgICAgIHJldHVybiBBWERldGFpbHNUZXh0KCk7CiAgICAgICAg
IGNhc2UgRm9vdGVyUm9sZToKICAgICAgICAgICAgIHJldHVybiBBWEZvb3RlclJvbGVEZXNjcmlw
dGlvblRleHQoKTsKLSAgICAgICAgY2FzZSBTdW1tYXJ5Um9sZToKLSAgICAgICAgICAgIHJldHVy
biBBWFN1bW1hcnlUZXh0KCk7CiAgICAgICAgIGNhc2UgVmlkZW9Sb2xlOgogICAgICAgICAgICAg
cmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoIlZpZGVvRWxlbWVudCIp
OwogICAgICAgICBkZWZhdWx0OgpAQCAtMjUzNSw2ICsyNTMzLDkgQEAgLSAoTlNTdHJpbmcqKXJv
bGVEZXNjcmlwdGlvbgogICAgIGlmIChtX29iamVjdC0+aXNUYWJJdGVtKCkpCiAgICAgICAgIHJl
dHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24oQCJBWFRhYiIsIG5pbCk7CiAgICAg
CisgICAgaWYgKG1fb2JqZWN0LT5pc1N1bW1hcnkoKSkKKyAgICAgICAgcmV0dXJuIEFYU3VtbWFy
eVRleHQoKTsKKyAgICAKICAgICAvLyBXZSBzaG91bGQgdHJ5IHRoZSBzeXN0ZW0gZGVmYXVsdCBy
b2xlIGRlc2NyaXB0aW9uIGZvciBhbGwgb3RoZXIgcm9sZXMuCiAgICAgLy8gSWYgd2UgZ2V0IHRo
ZSBzYW1lIHN0cmluZyBiYWNrLCB0aGVuIGFzIGEgbGFzdCByZXNvcnQsIHJldHVybiB1bmtub3du
LgogICAgIE5TU3RyaW5nKiBkZWZhdWx0Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3NpYmlsaXR5
Um9sZURlc2NyaXB0aW9uKGF4Um9sZSwgW3NlbGYgc3Vicm9sZV0pOwpAQCAtMjc1Nyw2ICsyNzU4
LDEwIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAg
aWYgKG1fb2JqZWN0LT5pc01ldGVyKCkpCiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0
cmluZ107CiAgICAgICAgIAorICAgICAgICAvLyBTdW1tYXJ5IGVsZW1lbnQgc2hvdWxkIHVzZSBp
dHMgdGV4dCBub2RlIGFzIEFYVGl0bGUuCisgICAgICAgIGlmIChtX29iamVjdC0+aXNTdW1tYXJ5
KCkpCisgICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKTsKKyAg
ICAgICAgCiAgICAgICAgIHJldHVybiBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eVRpdGxlXTsKICAg
ICB9CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDcyNjIpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMC0xMiAgTmFuIFdh
bmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBbTWFjXSBiZXR0ZXIgYWNjZXNz
aWJpbGl0eSBzdXBwb3J0IGZvciBTdW1tYXJ5IGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMzNjcKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI4NzQ1MDEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlw
dGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1z
dW1tYXJ5LXJvbGUtZGVzY3JpcHRpb24uaHRtbDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21h
Yy9kZXRhaWxzLXN1bW1hcnkuaHRtbDoKKwogMjAxNi0xMC0xMiAgWXVzdWtlIFN1enVraSAgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhZGQgZXhwZWN0ZWQg
ZmlsZSBmb3IgbmV3IHRlc3QgYWZ0ZXIgcjIwNzIzOQpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAyMDcyNjIpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRh
aWxzLXN1bW1hcnktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMCwxMyArMTAsMTgg
QEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogUEFTUyBkZXRhaWxz
MS5yb2xlIGlzICdBWFJvbGU6IEFYR3JvdXAnCiBQQVNTIGRldGFpbHMxLnN1YnJvbGUgaXMgJ0FY
U3Vicm9sZTogQVhEZXRhaWxzJwogUEFTUyBkZXRhaWxzMS5pc0V4cGFuZGVkIGlzIHRydWUKLVBB
U1MgZGV0YWlsczEuY2hpbGRBdEluZGV4KDApLnJvbGUgaXMgJ0FYUm9sZTogQVhHcm91cCcKLVBB
U1MgZGV0YWlsczEuY2hpbGRBdEluZGV4KDApLnN1YnJvbGUgaXMgJ0FYU3Vicm9sZTogQVhTdW1t
YXJ5JworUEFTUyBzdW1tYXJ5MS5yb2xlIGlzICdBWFJvbGU6IEFYQnV0dG9uJworUEFTUyBzdW1t
YXJ5MS5zdWJyb2xlIGlzICdBWFN1YnJvbGU6IEFYU3VtbWFyeScKK1BBU1Mgc3VtbWFyeTEudGl0
bGUgaXMgJ0FYVGl0bGU6IFNvbWUgb3BlbiBpbmZvJwogUEFTUyBkZXRhaWxzMS5pc0F0dHJpYnV0
ZVNldHRhYmxlKCdBWEV4cGFuZGVkJykgaXMgdHJ1ZQogUEFTUyBkZXRhaWxzMS5pc0V4cGFuZGVk
IGlzIGZhbHNlCitQQVNTIHN1bW1hcnkxLmlzRXhwYW5kZWQgaXMgZmFsc2UKIFBBU1MgZGV0YWls
czEuaXNFeHBhbmRlZCBpcyBmYWxzZQorUEFTUyBzdW1tYXJ5MS5pc0V4cGFuZGVkIGlzIGZhbHNl
CiBQQVNTIGRldGFpbHMxLmlzRXhwYW5kZWQgaXMgdHJ1ZQorUEFTUyBzdW1tYXJ5MS5pc0V4cGFu
ZGVkIGlzIHRydWUKIFBBU1MgZGV0YWlsczEuaXNFeHBhbmRlZCBpcyB0cnVlCitQQVNTIHN1bW1h
cnkxLmlzRXhwYW5kZWQgaXMgdHJ1ZQogUEFTUyBkZXRhaWxzMi5zdWJyb2xlIGlzICdBWFN1YnJv
bGU6IEFYRGV0YWlscycKIFBBU1MgZGV0YWlsczIuaXNFeHBhbmRlZCBpcyBmYWxzZQogUmVjZWl2
ZWQgQVhFeHBhbmRlZENoYW5nZWQgbm90aWZpY2F0aW9uIApJbmRleDogTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LXJvbGUtZGVzY3JpcHRpb24tZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMt
c3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjA3MjYyKQor
KysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LXJvbGUtZGVz
Y3JpcHRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQCBUaGlz
IHRlc3RzIHRoYXQgc3VtbWFyeSBhbmQgZGV0YWlsIGVsZW1lCiBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCiAKIAotUEFTUyBzdW1tYXJ5LnJvbGUgaXMgJ0FYUm9sZTogQVhHcm91cCcKK1BBU1Mg
c3VtbWFyeS5yb2xlIGlzICdBWFJvbGU6IEFYQnV0dG9uJwogUEFTUyBkZXRhaWxzLnJvbGUgaXMg
J0FYUm9sZTogQVhHcm91cCcKIFBBU1Mgc3VtbWFyeS5zdWJyb2xlIGlzICdBWFN1YnJvbGU6IEFY
U3VtbWFyeScKIFBBU1MgZGV0YWlscy5zdWJyb2xlIGlzICdBWFN1YnJvbGU6IEFYRGV0YWlscycK
SW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xl
LWRlc2NyaXB0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvZGV0YWlscy1zdW1tYXJ5LXJvbGUtZGVzY3JpcHRpb24uaHRtbAkocmV2aXNpb24gMjA3
MjYyKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LXJv
bGUtZGVzY3JpcHRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTksNyArMTksNyBAQAogICAg
ICAgICAgIHZhciBzdW1tYXJ5ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKCJzdW1tYXJ5Iik7CiAgICAgICAgICAgdmFyIGRldGFpbHMgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMiKTsKICAgICAgICAg
IAotICAgICAgICAgIHNob3VsZEJlKCJzdW1tYXJ5LnJvbGUiLCAiJ0FYUm9sZTogQVhHcm91cCci
KTsKKyAgICAgICAgICBzaG91bGRCZSgic3VtbWFyeS5yb2xlIiwgIidBWFJvbGU6IEFYQnV0dG9u
JyIpOwogICAgICAgICAgIHNob3VsZEJlKCJkZXRhaWxzLnJvbGUiLCAiJ0FYUm9sZTogQVhHcm91
cCciKTsKICAgICAgICAgICBzaG91bGRCZSgic3VtbWFyeS5zdWJyb2xlIiwgIidBWFN1YnJvbGU6
IEFYU3VtbWFyeSciKTsKICAgICAgICAgICBzaG91bGRCZSgiZGV0YWlscy5zdWJyb2xlIiwgIidB
WFN1YnJvbGU6IEFYRGV0YWlscyciKTsKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL2RldGFpbHMtc3VtbWFyeS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS5odG1sCShyZXZpc2lvbiAyMDcyNjIpCisrKyBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnkuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAKIDxib2R5IGlkPSJib2R5Ij4KIAogPGRldGFpbHMgb3Bl
biBpZD0iZGV0YWlsczEiPgotICA8c3VtbWFyeT5Tb21lIG9wZW4gaW5mbzwvc3VtbWFyeT4KKyAg
PHN1bW1hcnkgaWQ9InN1bW1hcnkxIj5Tb21lIG9wZW4gaW5mbzwvc3VtbWFyeT4KICAgPHA+RGV0
YWlscyBhYm91dCB0aGUgb3BlbiB0b3BpYy48L3A+CiA8L2RldGFpbHM+CiAKQEAgLTM5LDMyICsz
OSw0MiBAQAogICAgICAgICB9KTsKIAogICAgICAgICB2YXIgZGV0YWlsczEgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAgICAg
IHZhciBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZCgic3VtbWFyeTEiKTsKICAgICAgICAgc2hvdWxkQmUoImRldGFpbHMxLnJvbGUiLCAiJ0FY
Um9sZTogQVhHcm91cCciKTsKICAgICAgICAgc2hvdWxkQmUoImRldGFpbHMxLnN1YnJvbGUiLCAi
J0FYU3Vicm9sZTogQVhEZXRhaWxzJyIpOwogICAgICAgICBzaG91bGRCZVRydWUoImRldGFpbHMx
LmlzRXhwYW5kZWQiKTsKLSAgICAgICAgc2hvdWxkQmUoImRldGFpbHMxLmNoaWxkQXRJbmRleCgw
KS5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7Ci0gICAgICAgIHNob3VsZEJlKCJkZXRhaWxz
MS5jaGlsZEF0SW5kZXgoMCkuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWFN1bW1hcnknIik7Cisg
ICAgICAgIHNob3VsZEJlKCJzdW1tYXJ5MS5yb2xlIiwgIidBWFJvbGU6IEFYQnV0dG9uJyIpOwor
ICAgICAgICBzaG91bGRCZSgic3VtbWFyeTEuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWFN1bW1h
cnknIik7CisgICAgICAgIHNob3VsZEJlKCJzdW1tYXJ5MS50aXRsZSIsICInQVhUaXRsZTogU29t
ZSBvcGVuIGluZm8nIik7CiAgICAgICAgIHNob3VsZEJlVHJ1ZSgiZGV0YWlsczEuaXNBdHRyaWJ1
dGVTZXR0YWJsZSgnQVhFeHBhbmRlZCcpIik7CiAKICAgICAgICAgLy8gVG9nZ2xlIHRoZSBleHBh
bmRlZCBzdGF0ZS4KICAgICAgICAgZGV0YWlsczEuc2V0Qm9vbEF0dHJpYnV0ZVZhbHVlKCJBWEV4
cGFuZGVkIiwgZmFsc2UpOwogICAgICAgICBkZXRhaWxzMSA9IGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZGV0YWlsczEiKTsKKyAgICAgICAgc3VtbWFyeTEg
PSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkx
Iik7CiAgICAgICAgIHNob3VsZEJlRmFsc2UoImRldGFpbHMxLmlzRXhwYW5kZWQiKTsKKyAgICAg
ICAgc2hvdWxkQmVGYWxzZSgic3VtbWFyeTEuaXNFeHBhbmRlZCIpOwogCiAgICAgICAgIC8vIEdp
dmUgaXQgdGhlIHNhbWUgdmFsdWUgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGV4cGFuZC4KICAgICAg
ICAgZGV0YWlsczEuc2V0Qm9vbEF0dHJpYnV0ZVZhbHVlKCJBWEV4cGFuZGVkIiwgZmFsc2UpOwog
ICAgICAgICBkZXRhaWxzMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVt
ZW50QnlJZCgiZGV0YWlsczEiKTsKKyAgICAgICAgc3VtbWFyeTEgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkxIik7CiAgICAgICAgIHNob3Vs
ZEJlRmFsc2UoImRldGFpbHMxLmlzRXhwYW5kZWQiKTsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgi
c3VtbWFyeTEuaXNFeHBhbmRlZCIpOwogCiAgICAgICAgIC8vIFNldCB0byBleHBhbmQgYWdhaW4u
CiAgICAgICAgIGRldGFpbHMxLnNldEJvb2xBdHRyaWJ1dGVWYWx1ZSgiQVhFeHBhbmRlZCIsIHRy
dWUpOwogICAgICAgICBkZXRhaWxzMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2li
bGVFbGVtZW50QnlJZCgiZGV0YWlsczEiKTsKKyAgICAgICAgc3VtbWFyeTEgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkxIik7CiAgICAgICAg
IHNob3VsZEJlVHJ1ZSgiZGV0YWlsczEuaXNFeHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZVRy
dWUoInN1bW1hcnkxLmlzRXhwYW5kZWQiKTsKIAogICAgICAgICAvLyBBbmQgZHVwbGljYXRlIHRo
ZSB0cnVlIHN0YXRlIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHRvZ2dsZSBvZmYuCiAgICAgICAg
IGRldGFpbHMxLnNldEJvb2xBdHRyaWJ1dGVWYWx1ZSgiQVhFeHBhbmRlZCIsIHRydWUpOwogICAg
ICAgICBkZXRhaWxzMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZCgiZGV0YWlsczEiKTsKKyAgICAgICAgc3VtbWFyeTEgPSBhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkxIik7CiAgICAgICAgIHNob3VsZEJl
VHJ1ZSgiZGV0YWlsczEuaXNFeHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZVRydWUoInN1bW1h
cnkxLmlzRXhwYW5kZWQiKTsKIAogICAgICAgICB2YXIgZGV0YWlsczIgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMyIik7CiAgICAgICAgIHNo
b3VsZEJlKCJkZXRhaWxzMi5zdWJyb2xlIiwgIidBWFN1YnJvbGU6IEFYRGV0YWlscyciKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291460</attachid>
            <date>2016-10-13 00:11:47 -0700</date>
            <delta_ts>2016-10-13 00:33:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>24029</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlZCBzdW1tYXJ5IGVsZW1lbnRzIGFzIEFYQnV0dG9uIGFuZCB1c2VkIHRoZSB0
ZXh0IG5vZGUncyBjb250ZW50CisgICAgICAgIGFzIEFYVGl0bGUuIEFsc28gZXhwb3NlZCB0aGUg
ZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMgb24gdGhlIHN1bW1hcnkKKyAgICAgICAg
ZWxlbWVudCwgc28gdGhhdCB1c2VycyB3b3VsZCBzZWUgaXQgYXMgYSBjb2xsYXBzZWQvZXhwYW5k
ZWQgYnV0dG9uLgorCisgICAgICAgIENoYW5nZXMgYXJlIGNvdmVyZWQgaW4gdGhlIG1vZGlmaWVk
IHRlc3RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9iamVjdFVu
aWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxW
aWV3QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVh
ZGluZ0VsZW1lbnRGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6aXNEZXNjZW5kYW50T2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNJbnNpZGVBUklBTGl2ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0V4cGFuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmlzQVJJQUhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpmb2N1c2FibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjplZGl0YWJsZUFuY2VzdG9yKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzU3VtbWFyeSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGlzdEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGFuZG1hcmtBbmNlc3Rv
cl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eVRhYmxlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVsZHNldEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlQ2VsbFBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZVBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UmVjdFRv
U2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGRldGFpbFBhcmVudEZvck9iamVjdDpdKToKKyAgICAgICAgKG1h
dGNoZWRQYXJlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSk6
CisgICAgICAgIChjcmVhdGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJvbGVEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
XSk6CisKIDIwMTYtMTAtMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV2ViIElETF0gRHJvcCBzdXBwb3J0IGZvciBsZWdhY3kgW0NvbnN0cnVjdG9yQ29uZGl0
aW9uYWw9Kl0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU3LDExICs0NTcsMTAgQEAgaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJsb2NrcXVvdGVM
ZXZlbAogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJlbnRP
YmplY3RVbmlnbm9yZWQoKSBjb25zdAogewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVu
dDsKLSAgICBmb3IgKHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJlbnQgJiYgcGFyZW50LT5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkp
IHsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBhcmVudDsKKyAgICBhdXRvIG1hdGNoRnVuYyA9
IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuICFvYmpl
Y3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKKyAgICB9OworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVj
dCo+KHRoaXMpLCBmYWxzZSwgbWF0Y2hGdW5jKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCkg
Y29uc3QKQEAgLTE2OTYsMTAgKzE2OTUsMTEgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1
cGRhdGVCYWNraW5nUwogICAgIAogU2Nyb2xsVmlldyogQWNjZXNzaWJpbGl0eU9iamVjdDo6c2Ny
b2xsVmlld0FuY2VzdG9yKCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEFjY2Vzc2liaWxpdHlP
YmplY3QqIHNjcm9sbFBhcmVudCA9IHRoaXM7IHNjcm9sbFBhcmVudDsgc2Nyb2xsUGFyZW50ID0g
c2Nyb2xsUGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAoaXM8QWNjZXNzaWJp
bGl0eVNjcm9sbFZpZXc+KCpzY3JvbGxQYXJlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqc2Nyb2xsUGFyZW50KS5zY3JvbGxWaWV3KCk7
Ci0gICAgfQorICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9i
amVjdCkgeworICAgICAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpvYmpl
Y3QpOworICAgIH07CisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHNjcm9sbFBhcmVudCA9
IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQoY29uc3RfY2FzdDxBY2Nlc3NpYmls
aXR5T2JqZWN0Kj4odGhpcyksIHRydWUsIG1hdGNoRnVuYykpCisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnNjcm9sbFBhcmVudCkuc2Nyb2xsVmlldygp
OwogICAgIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTc5MCw5ICsxNzkwLDIxIEBAIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3QKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSByZW5kZXJP
YmplY3QtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJPYmpl
Y3QpOwotICAgIGZvciAoOyBheE9iamVjdCAmJiBheE9iamVjdC0+cm9sZVZhbHVlKCkgIT0gSGVh
ZGluZ1JvbGU7IGF4T2JqZWN0ID0gYXhPYmplY3QtPnBhcmVudE9iamVjdCgpKSB7IH0KICAgICAK
LSAgICByZXR1cm4gYXhPYmplY3Q7CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QtPnJvbGVWYWx1ZSgp
ID09IEhlYWRpbmdSb2xlOworICAgIH07CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6
Om1hdGNoZWRQYXJlbnQoYXhPYmplY3QsIHRydWUsIG1hdGNoRnVuYyk7Cit9CisKK0FjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQoQWNjZXNzaWJp
bGl0eU9iamVjdCogb2JqZWN0LCBib29sIGluY2x1ZGVTZWxmLCBjb25zdCBzdGQ6OmZ1bmN0aW9u
PGJvb2woQWNjZXNzaWJpbGl0eU9iamVjdCopPiYgbWF0Y2hlcykKK3sKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnQgPSBpbmNsdWRlU2VsZiA/IG9iamVjdCA6IG9iamVjdC0+cGFyZW50
T2JqZWN0KCk7CisgICAgZm9yICg7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmpl
Y3QoKSkgeworICAgICAgICBpZiAobWF0Y2hlcyhwYXJlbnQpKQorICAgICAgICAgICAgcmV0dXJu
IChwYXJlbnQpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphcmlhVHJlZVJvd3MoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBy
ZXN1bHQpCkBAIC0yMDM1LDExICsyMDQ3LDEwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6
aXNEZXNjZW5kYW50T2YKICAgICBpZiAoIWF4T2JqZWN0IHx8ICFheE9iamVjdC0+aGFzQ2hpbGRy
ZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3QoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnQgPT0gYXhPYmplY3QpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8gbWF0Y2hGdW5jID0gW2F4T2JqZWN0XSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBvYmplY3QgPT0gYXhPYmplY3Q7CisgICAgfTsKKyAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxp
dHlPYmplY3QqPih0aGlzKSwgZmFsc2UsIG1hdGNoRnVuYykgIT0gbnVsbHB0cjsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FuY2VzdG9yT2ZPYmplY3QoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCogYXhPYmplY3QpIGNvbnN0CkBAIC0yMzA3LDEyICsyMzE4LDEwIEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNJbnNpZGVBUklBTGkKICAgICBpZiAoc3VwcG9ydHNBUklB
TGl2ZVJlZ2lvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBmb3IgKEFjY2Vz
c2liaWxpdHlPYmplY3QqIGF4UGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IGF4UGFyZW50OyBheFBh
cmVudCA9IGF4UGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAoYXhQYXJlbnQt
PnN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QtPnN1cHBv
cnRzQVJJQUxpdmVSZWdpb24oKTsKKyAgICB9OworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMp
LCBmYWxzZSwgbWF0Y2hGdW5jKSAhPSBudWxscHRyOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnN1cHBvcnRzQVJJQUF0dHJpYnV0ZXMoKSBjb25zdApAQCAtMjQ3OCw2ICsyNDg3LDE1
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNFeHBhbmRlZCgpIGMKICAgICBpZiAoaXM8
SFRNTERldGFpbHNFbGVtZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TERldGFpbHNFbGVtZW50Pihub2RlKCkpLT5pc09wZW4oKTsKICAgICAKKyAgICAvLyBTdW1tYXJ5
IGVsZW1lbnQgc2hvdWxkIHVzZSBpdHMgZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMu
CisgICAgaWYgKGlzU3VtbWFyeSgpKSB7CisgICAgICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICAgICAgcmV0dXJuIG9iamVjdC0+
cm9sZVZhbHVlKCkgPT0gRGV0YWlsc1JvbGU7CisgICAgICAgIH07CisgICAgICAgIGlmIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFy
ZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpLCBmYWxzZSwgbWF0Y2hG
dW5jKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPmlzRXhwYW5kZWQoKTsKKyAgICB9Cisg
ICAgCiAgICAgcmV0dXJuIGZhbHNlOyAgCiB9CiAKQEAgLTI5MzQsMTEgKzI5NTIsMTAgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SQogLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvd2FpLWFyaWEvdGVybXMjZGVmX2hpZGRlbgogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojppc0FSSUFIaWRkZW4oKSBjb25zdAogewotICAgIGZvciAoY29uc3QgQWNjZXNzaWJpbGl0eU9i
amVjdCogb2JqZWN0ID0gdGhpczsgb2JqZWN0OyBvYmplY3QgPSBvYmplY3QtPnBhcmVudE9iamVj
dCgpKSB7Ci0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShvYmplY3Qt
PmdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpLCAidHJ1ZSIpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIG1hdGNoRnVuYyA9
IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG9iamVjdC0+Z2V0QXR0cmlidXRlKGFyaWFfaGlkZGVu
QXR0ciksICJ0cnVlIik7CisgICAgfTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
bWF0Y2hlZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKSwgdHJ1
ZSwgbWF0Y2hGdW5jKSAhPSBudWxscHRyOwogfQogCiAvLyBET00gY29tcG9uZW50IG9mIGhpZGRl
biBkZWZpbml0aW9uLgpAQCAtMzAzNSwyNiArMzA1MiwxOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnNldFByZXZlbnRLZXliCiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmZvY3VzYWJsZUFuY2VzdG9yKCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwb3RlbnRpYWxGb2N1c2FibGVBbmNlc3RvciA9IHRoaXM7Ci0gICAgd2hpbGUgKHBvdGVudGlh
bEZvY3VzYWJsZUFuY2VzdG9yKSB7Ci0gICAgICAgIGlmIChwb3RlbnRpYWxGb2N1c2FibGVBbmNl
c3Rvci0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgIHJldHVybiBwb3RlbnRp
YWxGb2N1c2FibGVBbmNlc3RvcjsKLSAgICAgICAgcG90ZW50aWFsRm9jdXNhYmxlQW5jZXN0b3Ig
PSBwb3RlbnRpYWxGb2N1c2FibGVBbmNlc3Rvci0+cGFyZW50T2JqZWN0KCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0
eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QtPmNhblNldEZvY3VzQXR0
cmlidXRlKCk7CisgICAgfTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hl
ZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKSwgdHJ1ZSwgbWF0
Y2hGdW5jKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZWRpdGFibGVBbmNlc3RvcigpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcG90ZW50aWFs
RWRpdGFibGVBbmNlc3RvciA9IHRoaXM7Ci0gICAgd2hpbGUgKHBvdGVudGlhbEVkaXRhYmxlQW5j
ZXN0b3IpIHsKLSAgICAgICAgaWYgKHBvdGVudGlhbEVkaXRhYmxlQW5jZXN0b3ItPmlzVGV4dENv
bnRyb2woKSkKLSAgICAgICAgICAgIHJldHVybiBwb3RlbnRpYWxFZGl0YWJsZUFuY2VzdG9yOwot
ICAgICAgICBwb3RlbnRpYWxFZGl0YWJsZUFuY2VzdG9yID0gcG90ZW50aWFsRWRpdGFibGVBbmNl
c3Rvci0+cGFyZW50T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAg
YXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAg
ICAgIHJldHVybiBvYmplY3QtPmlzVGV4dENvbnRyb2woKTsKKyAgICB9OworICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0
eU9iamVjdCo+KHRoaXMpLCB0cnVlLCBtYXRjaEZ1bmMpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoaWdoZXN0RWRpdGFibGVBbmNlc3RvcigpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuaAkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MSw2ICs1NjEsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1N1YnNjcmlwdFN0eWxlR3JvdXAoKSBjb25zdDsKICAgICBib29s
IGlzU3VwZXJzY3JpcHRTdHlsZUdyb3VwKCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZpZ3VyZSgpIGNv
bnN0OworICAgIGJvb2wgaXNTdW1tYXJ5KCkgY29uc3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0g
U3VtbWFyeVJvbGU7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTEwNjIsNiArMTA2Myw4IEBAIHB1YmxpYzoKICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBlZGl0YWJsZUFuY2VzdG9yKCk7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogaGlnaGVzdEVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICAKKyAgICBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdCogbWF0Y2hlZFBhcmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgYm9vbCBpbmNs
dWRlU2VsZiwgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKEFjY2Vzc2liaWxpdHlPYmplY3QqKT4m
KTsKKyAgICAKIHByb3RlY3RlZDoKICAgICBBWElEIG1faWQ7CiAgICAgQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIG1fY2hpbGRyZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSwyMiArMTMxLDYgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiBBY2NlcwogICAgIHJldHVybiB3cmFwcGVyOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBN
YXRjaEZ1bmN0aW9uPgotc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1hdGNoZWRQYXJlbnQo
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBib29sIGluY2x1ZGVTZWxmLCBjb25zdCBNYXRj
aEZ1bmN0aW9uJiBtYXRjaGVzKQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IGluY2x1ZGVTZWxm
ID8gb2JqZWN0IDogb2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKLSAgICBmb3IgKDsgcGFyZW50OyBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChtYXRjaGVzKHBh
cmVudCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50OwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotCiAjcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0eSBUZXh0IE1hcmtl
cgogCiBAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIDogTlNPYmplY3QKQEAg
LTU1NCw3ICs1MzgsNyBAQCAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2li
CiAgICAgICAgIHJldHVybiByb2xlID09IExpc3RSb2xlIHx8IHJvbGUgPT0gTGlzdEJveFJvbGU7
CiAgICAgfTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0
Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQo
bV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFw
cGVyKCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTU2NSw3ICs1NDksNyBAQCAtIChBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liCiAgICAgICAgIHJldHVybiBbc2VsZiBfYWNj
ZXNzaWJpbGl0eUlzTGFuZG1hcmtSb2xlOm9iamVjdC0+cm9sZVZhbHVlKCldOwogICAgIH07CiAg
ICAgCi0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQo
bV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBm
YWxzZSwgbWF0Y2hGdW5jKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAg
IHJldHVybiBuaWw7CiB9CkBAIC01NzYsNyArNTYwLDcgQEAgLSAoQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIqKV9hY2Nlc3NpYgogICAgICAgICByZXR1cm4gb2JqZWN0LT5yb2xlVmFsdWUoKSA9
PSBUYWJsZVJvbGUgfHwgb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBHcmlkUm9sZTsKICAgICB9Owog
ICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50
KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChtX29iamVjdCwg
ZmFsc2UsIG1hdGNoRnVuYykpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAg
ICByZXR1cm4gbmlsOwogfQpAQCAtNTg3LDcgKzU3MSw3IEBAIC0gKEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKilfYWNjZXNzaWIKICAgICAgICAgcmV0dXJuIG9iamVjdC0+aXNGaWVsZHNldCgp
OwogICAgIH07CiAgICAgCi0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1h
dGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50
KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3Jh
cHBlcigpOwogICAgIHJldHVybiBuaWw7CiB9CkBAIC0xMDQ1LDcgKzEwMjksNyBAQCAtIChBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsKil0YWJsZUNlbGxQYXJlCiAgICAgICAgIHJldHVybiBvYmplY3Qt
PmlzVGFibGVDZWxsKCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAg
ICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
bWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihwYXJlbnQpOwogICAgIHJldHVy
biBuaWw7CiB9CkBAIC0xMDU3LDcgKzEwNDEsNyBAQCAtIChBY2Nlc3NpYmlsaXR5VGFibGUqKXRh
YmxlUGFyZW50CiAgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCpvYmplY3Qp
ICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCkuaXNFeHBvc2FibGVUaHJv
dWdoQWNjZXNzaWJpbGl0eSgpOwogICAgIH07CiAgICAgCi0gICAgaWYgKEFjY2Vzc2liaWxpdHlP
YmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIHRydWUsIG1hdGNoRnVuYykp
CisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQobV9vYmplY3QsIHRydWUsIG1hdGNoRnVuYykpCiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGUqPihwYXJlbnQpOwogICAgIHJldHVy
biBuaWw7CiB9CkBAIC0xNDMxLDcgKzE0MTUsNyBAQCAtIChDR1BvaW50KWNvbnZlcnRQb2ludFRv
U2NyZWVuU3BhY2U6KEZsCiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBTY3JvbGxWaWV3
KiBzY3JvbGxWaWV3ID0gbnVsbHB0cjsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYyk7CisgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNo
ZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpOwogICAgICAgICBpZiAocGFyZW50
KQogICAgICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgIApAQCAtMTQ4NSw3ICsxNDY5LDcg
QEAgLSAoQ0dSZWN0KWNvbnZlcnRSZWN0VG9TY3JlZW5TcGFjZTooSW50UgogICAgICAgICB9Owog
CiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBudWxscHRyOwotICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwg
bWF0Y2hGdW5jKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNz
aWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYyk7
CiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAg
CkBAIC0xODU5LDcgKzE4NDMsNyBAQCAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJl
bnRGb3JTCiAgICAgICAgIHJldHVybiBvYmplY3QtPmhhc1RhZ05hbWUoc3VtbWFyeVRhZyk7CiAg
ICAgfTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogc3VtbWFyeSA9IG1hdGNo
ZWRQYXJlbnQob2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQorICAgIGlmIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBzdW1tYXJ5ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChvYmpl
Y3QsIHRydWUsIG1hdGNoRnVuYykpCiAgICAgICAgIHJldHVybiBzdW1tYXJ5LT5wYXJlbnRPYmpl
Y3QoKTsKICAgICByZXR1cm4gbmlsOwogfQpAQCAtMTg3MSw3ICsxODU1LDcgQEAgLSAoQWNjZXNz
aWJpbGl0eU9iamVjdCopZGV0YWlsUGFyZW50Rm9yTwogICAgICAgICByZXR1cm4gb2JqZWN0LT5o
YXNUYWdOYW1lKGRldGFpbHNUYWcpOwogICAgIH07CiAgICAgCi0gICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIGRldGFpbHMgPSBtYXRjaGVkUGFyZW50KG9iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5j
KSkKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlscyA9IEFjY2Vzc2liaWxpdHlP
YmplY3Q6Om1hdGNoZWRQYXJlbnQob2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQogICAgICAgICBy
ZXR1cm4gZGV0YWlsczsKICAgICByZXR1cm4gbmlsOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIwNzI2OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEwLDcgKzE0MTAsNyBAQCAtIChOU0FycmF5KilhZGRpdGlv
bmFsQWNjZXNzaWJpbGl0eUF0dHJpCiAgICAgaWYgKG1fb2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigp
KQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRy
aWJ1dGVdOwogICAgIAotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpKQorICAg
IGlmIChtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRlZCgpIHx8IG1fb2JqZWN0LT5pc1N1bW1hcnko
KSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVk
QXR0cmlidXRlXTsKICAgICAKICAgICBpZiAobV9vYmplY3QtPmlzU2Nyb2xsYmFyKCkKQEAgLTIy
MDcsNyArMjIwNyw3IEBAIHN0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5Um9sZU1hcCYgY3JlYXQK
ICAgICAgICAgeyBSdWJ5UnVuUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCiAgICAg
ICAgIHsgUnVieVRleHRSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAg
eyBEZXRhaWxzUm9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgU3Vt
bWFyeVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAorICAgICAgICB7IFN1bW1hcnlS
b2xlLCBOU0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlIH0sCiAgICAgICAgIHsgU1ZHVGV4dFBhdGhS
b2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBTVkdUZXh0Um9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCiAgICAgICAgIHsgU1ZHVFNwYW5Sb2xlLCBOU0Fj
Y2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKQEAgLTI0OTQsOCArMjQ5NCw2IEBAIC0gKE5TU3RyaW5n
Kilyb2xlRGVzY3JpcHRpb24KICAgICAgICAgICAgIHJldHVybiBBWERldGFpbHNUZXh0KCk7CiAg
ICAgICAgIGNhc2UgRm9vdGVyUm9sZToKICAgICAgICAgICAgIHJldHVybiBBWEZvb3RlclJvbGVE
ZXNjcmlwdGlvblRleHQoKTsKLSAgICAgICAgY2FzZSBTdW1tYXJ5Um9sZToKLSAgICAgICAgICAg
IHJldHVybiBBWFN1bW1hcnlUZXh0KCk7CiAgICAgICAgIGNhc2UgVmlkZW9Sb2xlOgogICAgICAg
ICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoIlZpZGVvRWxl
bWVudCIpOwogICAgICAgICBkZWZhdWx0OgpAQCAtMjUzNSw2ICsyNTMzLDkgQEAgLSAoTlNTdHJp
bmcqKXJvbGVEZXNjcmlwdGlvbgogICAgIGlmIChtX29iamVjdC0+aXNUYWJJdGVtKCkpCiAgICAg
ICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb24oQCJBWFRhYiIsIG5pbCk7
CiAgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1N1bW1hcnkoKSkKKyAgICAgICAgcmV0dXJuIEFY
U3VtbWFyeVRleHQoKTsKKyAgICAKICAgICAvLyBXZSBzaG91bGQgdHJ5IHRoZSBzeXN0ZW0gZGVm
YXVsdCByb2xlIGRlc2NyaXB0aW9uIGZvciBhbGwgb3RoZXIgcm9sZXMuCiAgICAgLy8gSWYgd2Ug
Z2V0IHRoZSBzYW1lIHN0cmluZyBiYWNrLCB0aGVuIGFzIGEgbGFzdCByZXNvcnQsIHJldHVybiB1
bmtub3duLgogICAgIE5TU3RyaW5nKiBkZWZhdWx0Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3Np
YmlsaXR5Um9sZURlc2NyaXB0aW9uKGF4Um9sZSwgW3NlbGYgc3Vicm9sZV0pOwpAQCAtMjc1Nyw2
ICsyNzU4LDEwIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAg
ICAgICAgaWYgKG1fb2JqZWN0LT5pc01ldGVyKCkpCiAgICAgICAgICAgICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ107CiAgICAgICAgIAorICAgICAgICAvLyBTdW1tYXJ5IGVsZW1lbnQgc2hvdWxk
IHVzZSBpdHMgdGV4dCBub2RlIGFzIEFYVGl0bGUuCisgICAgICAgIGlmIChtX29iamVjdC0+aXNT
dW1tYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gbV9vYmplY3QtPnRleHRVbmRlckVsZW1lbnQo
KTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eVRpdGxl
XTsKICAgICB9CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDcyNjgpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMC0xMyAg
TmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBbTWFjXSBiZXR0ZXIg
YWNjZXNzaWJpbGl0eSBzdXBwb3J0IGZvciBTdW1tYXJ5IGVsZW1lbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMzNjcKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzI4NzQ1MDEwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1k
ZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvZGV0
YWlscy1zdW1tYXJ5LXJvbGUtZGVzY3JpcHRpb24uaHRtbDoKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L21hYy9kZXRhaWxzLXN1bW1hcnkuaHRtbDoKKwogMjAxNi0xMC0xMiAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHN0ZXAt
aW50byBgY29uc29sZS5sb2cobylgIHNob3VsZCBub3Qgc3RlcCB0aHJvdWdoIGluc3BlY3RvciBq
YXZhc2NyaXB0CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1
bW1hcnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL2RldGFpbHMtc3VtbWFyeS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIwNzI2OCkKKysr
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDEzICsxMCwxOCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBCiBQQVNTIGRldGFpbHMxLnJvbGUgaXMgJ0FYUm9sZTogQVhH
cm91cCcKIFBBU1MgZGV0YWlsczEuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCiBQ
QVNTIGRldGFpbHMxLmlzRXhwYW5kZWQgaXMgdHJ1ZQotUEFTUyBkZXRhaWxzMS5jaGlsZEF0SW5k
ZXgoMCkucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3VwJwotUEFTUyBkZXRhaWxzMS5jaGlsZEF0SW5k
ZXgoMCkuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWFN1bW1hcnknCitQQVNTIHN1bW1hcnkxLnJv
bGUgaXMgJ0FYUm9sZTogQVhCdXR0b24nCitQQVNTIHN1bW1hcnkxLnN1YnJvbGUgaXMgJ0FYU3Vi
cm9sZTogQVhTdW1tYXJ5JworUEFTUyBzdW1tYXJ5MS50aXRsZSBpcyAnQVhUaXRsZTogU29tZSBv
cGVuIGluZm8nCiBQQVNTIGRldGFpbHMxLmlzQXR0cmlidXRlU2V0dGFibGUoJ0FYRXhwYW5kZWQn
KSBpcyB0cnVlCiBQQVNTIGRldGFpbHMxLmlzRXhwYW5kZWQgaXMgZmFsc2UKK1BBU1Mgc3VtbWFy
eTEuaXNFeHBhbmRlZCBpcyBmYWxzZQogUEFTUyBkZXRhaWxzMS5pc0V4cGFuZGVkIGlzIGZhbHNl
CitQQVNTIHN1bW1hcnkxLmlzRXhwYW5kZWQgaXMgZmFsc2UKIFBBU1MgZGV0YWlsczEuaXNFeHBh
bmRlZCBpcyB0cnVlCitQQVNTIHN1bW1hcnkxLmlzRXhwYW5kZWQgaXMgdHJ1ZQogUEFTUyBkZXRh
aWxzMS5pc0V4cGFuZGVkIGlzIHRydWUKK1BBU1Mgc3VtbWFyeTEuaXNFeHBhbmRlZCBpcyB0cnVl
CiBQQVNTIGRldGFpbHMyLnN1YnJvbGUgaXMgJ0FYU3Vicm9sZTogQVhEZXRhaWxzJwogUEFTUyBk
ZXRhaWxzMi5pc0V4cGFuZGVkIGlzIGZhbHNlCiBSZWNlaXZlZCBBWEV4cGFuZGVkQ2hhbmdlZCBu
b3RpZmljYXRpb24gCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxz
LXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LXJvbGUtZGVzY3JpcHRp
b24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMDcyNjgpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBAIFRoaXMgdGVzdHMgdGhhdCBzdW1tYXJ5IGFu
ZCBkZXRhaWwgZWxlbWUKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIHN1bW1h
cnkucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3VwJworUEFTUyBzdW1tYXJ5LnJvbGUgaXMgJ0FYUm9s
ZTogQVhCdXR0b24nCiBQQVNTIGRldGFpbHMucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3VwJwogUEFT
UyBzdW1tYXJ5LnN1YnJvbGUgaXMgJ0FYU3Vicm9sZTogQVhTdW1tYXJ5JwogUEFTUyBkZXRhaWxz
LnN1YnJvbGUgaXMgJ0FYU3Vicm9sZTogQVhEZXRhaWxzJwpJbmRleDogTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LXJvbGUtZGVzY3JpcHRpb24uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnkt
cm9sZS1kZXNjcmlwdGlvbi5odG1sCShyZXZpc2lvbiAyMDcyNjgpCisrKyBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw3IEBACiAgICAgICAgICAgdmFyIHN1bW1hcnkgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkiKTsK
ICAgICAgICAgICB2YXIgZGV0YWlscyA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2li
bGVFbGVtZW50QnlJZCgiZGV0YWlscyIpOwogICAgICAgICAgCi0gICAgICAgICAgc2hvdWxkQmUo
InN1bW1hcnkucm9sZSIsICInQVhSb2xlOiBBWEdyb3VwJyIpOworICAgICAgICAgIHNob3VsZEJl
KCJzdW1tYXJ5LnJvbGUiLCAiJ0FYUm9sZTogQVhCdXR0b24nIik7CiAgICAgICAgICAgc2hvdWxk
QmUoImRldGFpbHMucm9sZSIsICInQVhSb2xlOiBBWEdyb3VwJyIpOwogICAgICAgICAgIHNob3Vs
ZEJlKCJzdW1tYXJ5LnN1YnJvbGUiLCAiJ0FYU3Vicm9sZTogQVhTdW1tYXJ5JyIpOwogICAgICAg
ICAgIHNob3VsZEJlKCJkZXRhaWxzLnN1YnJvbGUiLCAiJ0FYU3Vicm9sZTogQVhEZXRhaWxzJyIp
OwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1z
dW1tYXJ5Lmh0bWwJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL2RldGFpbHMtc3VtbWFyeS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBA
QAogPGJvZHkgaWQ9ImJvZHkiPgogCiA8ZGV0YWlscyBvcGVuIGlkPSJkZXRhaWxzMSI+Ci0gIDxz
dW1tYXJ5PlNvbWUgb3BlbiBpbmZvPC9zdW1tYXJ5PgorICA8c3VtbWFyeSBpZD0ic3VtbWFyeTEi
PlNvbWUgb3BlbiBpbmZvPC9zdW1tYXJ5PgogICA8cD5EZXRhaWxzIGFib3V0IHRoZSBvcGVuIHRv
cGljLjwvcD4KIDwvZGV0YWlscz4KIApAQCAtMzksMzIgKzM5LDQyIEBACiAgICAgICAgIH0pOwog
CiAgICAgICAgIHZhciBkZXRhaWxzMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2li
bGVFbGVtZW50QnlJZCgiZGV0YWlsczEiKTsKKyAgICAgICAgdmFyIHN1bW1hcnkxID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJzdW1tYXJ5MSIpOwogICAg
ICAgICBzaG91bGRCZSgiZGV0YWlsczEucm9sZSIsICInQVhSb2xlOiBBWEdyb3VwJyIpOwogICAg
ICAgICBzaG91bGRCZSgiZGV0YWlsczEuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWERldGFpbHMn
Iik7CiAgICAgICAgIHNob3VsZEJlVHJ1ZSgiZGV0YWlsczEuaXNFeHBhbmRlZCIpOwotICAgICAg
ICBzaG91bGRCZSgiZGV0YWlsczEuY2hpbGRBdEluZGV4KDApLnJvbGUiLCAiJ0FYUm9sZTogQVhH
cm91cCciKTsKLSAgICAgICAgc2hvdWxkQmUoImRldGFpbHMxLmNoaWxkQXRJbmRleCgwKS5zdWJy
b2xlIiwgIidBWFN1YnJvbGU6IEFYU3VtbWFyeSciKTsKKyAgICAgICAgc2hvdWxkQmUoInN1bW1h
cnkxLnJvbGUiLCAiJ0FYUm9sZTogQVhCdXR0b24nIik7CisgICAgICAgIHNob3VsZEJlKCJzdW1t
YXJ5MS5zdWJyb2xlIiwgIidBWFN1YnJvbGU6IEFYU3VtbWFyeSciKTsKKyAgICAgICAgc2hvdWxk
QmUoInN1bW1hcnkxLnRpdGxlIiwgIidBWFRpdGxlOiBTb21lIG9wZW4gaW5mbyciKTsKICAgICAg
ICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxzMS5pc0F0dHJpYnV0ZVNldHRhYmxlKCdBWEV4cGFuZGVk
JykiKTsKIAogICAgICAgICAvLyBUb2dnbGUgdGhlIGV4cGFuZGVkIHN0YXRlLgogICAgICAgICBk
ZXRhaWxzMS5zZXRCb29sQXR0cmlidXRlVmFsdWUoIkFYRXhwYW5kZWQiLCBmYWxzZSk7CiAgICAg
ICAgIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJkZXRhaWxzMSIpOworICAgICAgICBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3VtbWFyeTEiKTsKICAgICAgICAgc2hvdWxkQmVG
YWxzZSgiZGV0YWlsczEuaXNFeHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJzdW1t
YXJ5MS5pc0V4cGFuZGVkIik7CiAKICAgICAgICAgLy8gR2l2ZSBpdCB0aGUgc2FtZSB2YWx1ZSB0
byBtYWtlIHN1cmUgd2UgZG9uJ3QgZXhwYW5kLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0
cmlidXRlVmFsdWUoIkFYRXhwYW5kZWQiLCBmYWxzZSk7CiAgICAgICAgIGRldGFpbHMxID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJkZXRhaWxzMSIpOwor
ICAgICAgICBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVt
ZW50QnlJZCgic3VtbWFyeTEiKTsKICAgICAgICAgc2hvdWxkQmVGYWxzZSgiZGV0YWlsczEuaXNF
eHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZUZhbHNlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7
CiAKICAgICAgICAgLy8gU2V0IHRvIGV4cGFuZCBhZ2Fpbi4KICAgICAgICAgZGV0YWlsczEuc2V0
Qm9vbEF0dHJpYnV0ZVZhbHVlKCJBWEV4cGFuZGVkIiwgdHJ1ZSk7CiAgICAgICAgIGRldGFpbHMx
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJkZXRhaWxz
MSIpOworICAgICAgICBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2li
bGVFbGVtZW50QnlJZCgic3VtbWFyeTEiKTsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxz
MS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgic3VtbWFyeTEuaXNFeHBhbmRl
ZCIpOwogCiAgICAgICAgIC8vIEFuZCBkdXBsaWNhdGUgdGhlIHRydWUgc3RhdGUgdG8gbWFrZSBz
dXJlIGl0IGRvZXNuJ3QgdG9nZ2xlIG9mZi4KICAgICAgICAgZGV0YWlsczEuc2V0Qm9vbEF0dHJp
YnV0ZVZhbHVlKCJBWEV4cGFuZGVkIiwgdHJ1ZSk7CiAgICAgICAgIGRldGFpbHMxID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJkZXRhaWxzMSIpOworICAg
ICAgICBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZCgic3VtbWFyeTEiKTsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxzMS5pc0V4cGFu
ZGVkIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgic3VtbWFyeTEuaXNFeHBhbmRlZCIpOwogCiAg
ICAgICAgIHZhciBkZXRhaWxzMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVF
bGVtZW50QnlJZCgiZGV0YWlsczIiKTsKICAgICAgICAgc2hvdWxkQmUoImRldGFpbHMyLnN1YnJv
bGUiLCAiJ0FYU3Vicm9sZTogQVhEZXRhaWxzJyIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291461</attachid>
            <date>2016-10-13 00:33:36 -0700</date>
            <delta_ts>2016-10-13 00:36:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23905</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlZCBzdW1tYXJ5IGVsZW1lbnRzIGFzIEFYQnV0dG9uIGFuZCB1c2VkIHRoZSB0
ZXh0IG5vZGUncyBjb250ZW50CisgICAgICAgIGFzIEFYVGl0bGUuIEFsc28gZXhwb3NlZCB0aGUg
ZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMgb24gdGhlIHN1bW1hcnkKKyAgICAgICAg
ZWxlbWVudCwgc28gdGhhdCB1c2VycyB3b3VsZCBzZWUgaXQgYXMgYSBjb2xsYXBzZWQvZXhwYW5k
ZWQgYnV0dG9uLgorCisgICAgICAgIENoYW5nZXMgYXJlIGNvdmVyZWQgaW4gdGhlIG1vZGlmaWVk
IHRlc3RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9iamVjdFVu
aWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxW
aWV3QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVh
ZGluZ0VsZW1lbnRGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6aXNEZXNjZW5kYW50T2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNJbnNpZGVBUklBTGl2ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0V4cGFuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmlzQVJJQUhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpmb2N1c2FibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjplZGl0YWJsZUFuY2VzdG9yKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzU3VtbWFyeSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGlzdEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGFuZG1hcmtBbmNlc3Rv
cl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eVRhYmxlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVsZHNldEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlQ2VsbFBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZVBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UmVjdFRv
U2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGRldGFpbFBhcmVudEZvck9iamVjdDpdKToKKyAgICAgICAgKG1h
dGNoZWRQYXJlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSk6
CisgICAgICAgIChjcmVhdGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJvbGVEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
XSk6CisKIDIwMTYtMTAtMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV2ViIElETF0gRHJvcCBzdXBwb3J0IGZvciBsZWdhY3kgW0NvbnN0cnVjdG9yQ29uZGl0
aW9uYWw9Kl0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU3LDExICs0NTcsOCBAQCBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YmxvY2txdW90ZUxl
dmVsCiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9i
amVjdFVuaWdub3JlZCgpIGNvbnN0CiB7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
OwotICAgIGZvciAocGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IHBhcmVudCAmJiBwYXJlbnQtPmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkg
ewotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcGFyZW50OworICAgIGF1dG8gbWF0Y2hGdW5jID0g
W10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gIW9iamVjdC0+YWNjZXNz
aWJpbGl0eUlzSWdub3JlZCgpOyB9OworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpt
YXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpLCBmYWxz
ZSwgbWF0Y2hGdW5jKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9i
amVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3QKQEAgLTE2OTYs
MTAgKzE2OTMsOSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTCiAg
ICAgCiBTY3JvbGxWaWV3KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxWaWV3QW5jZXN0b3Io
KSBjb25zdAogewotICAgIGZvciAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsUGFy
ZW50ID0gdGhpczsgc2Nyb2xsUGFyZW50OyBzY3JvbGxQYXJlbnQgPSBzY3JvbGxQYXJlbnQtPnBh
cmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4o
KnNjcm9sbFBhcmVudCkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVNjcm9sbFZpZXc+KCpzY3JvbGxQYXJlbnQpLnNjcm9sbFZpZXcoKTsKLSAgICB9CisgICAgYXV0
byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7IHJldHVybiBp
czxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKm9iamVjdCk7IH07CisgICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHNjcm9sbFBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQ
YXJlbnQoY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4odGhpcyksIHRydWUsIG1hdGNo
RnVuYykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4o
KnNjcm9sbFBhcmVudCkuc2Nyb2xsVmlldygpOwogICAgIAogICAgIHJldHVybiBudWxscHRyOwog
fQpAQCAtMTc5MCw5ICsxNzg2LDE5IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxp
dHlPYmplY3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogYXhPYmplY3QgPSByZW5kZXJPYmplY3QtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNo
ZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJPYmplY3QpOwotICAgIGZvciAoOyBheE9iamVjdCAmJiBh
eE9iamVjdC0+cm9sZVZhbHVlKCkgIT0gSGVhZGluZ1JvbGU7IGF4T2JqZWN0ID0gYXhPYmplY3Qt
PnBhcmVudE9iamVjdCgpKSB7IH0KICAgICAKLSAgICByZXR1cm4gYXhPYmplY3Q7CisgICAgYXV0
byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7IHJldHVybiBv
YmplY3QtPnJvbGVWYWx1ZSgpID09IEhlYWRpbmdSb2xlOyB9OworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGF4T2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpOwor
fQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFy
ZW50KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCwgYm9vbCBpbmNsdWRlU2VsZiwgY29uc3Qg
c3RkOjpmdW5jdGlvbjxib29sKEFjY2Vzc2liaWxpdHlPYmplY3QqKT4mIG1hdGNoZXMpCit7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gaW5jbHVkZVNlbGYgPyBvYmplY3QgOiBv
YmplY3QtPnBhcmVudE9iamVjdCgpOworICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVu
dC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1hdGNoZXMocGFyZW50KSkKKyAgICAg
ICAgICAgIHJldHVybiAocGFyZW50KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVRyZWVSb3dzKEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYgcmVzdWx0KQpAQCAtMjAzNSwxMSArMjA0MSwxMCBAQCBib29sIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmlzRGVzY2VuZGFudE9mCiAgICAgaWYgKCFheE9iamVjdCB8fCAhYXhPYmpl
Y3QtPmhhc0NoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IHBhcmVudDsg
cGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAocGFyZW50ID09
IGF4T2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvIG1hdGNoRnVuYyA9IFtheE9iamVjdF0gKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0ID09IGF4T2JqZWN0OworICAgIH07
CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQoY29uc3RfY2Fz
dDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4odGhpcyksIGZhbHNlLCBtYXRjaEZ1bmMpICE9IG51bGxw
dHI7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBbmNlc3Rvck9mT2JqZWN0KGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0KSBjb25zdApAQCAtMjMwNywxMiArMjMx
Miw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNJbnNpZGVBUklBTGkKICAgICBpZiAo
c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAg
ICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4UGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IGF4
UGFyZW50OyBheFBhcmVudCA9IGF4UGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBp
ZiAoYXhQYXJlbnQtPnN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBtYXRjaEZ1
bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7IHJldHVybiBvYmplY3QtPnN1
cHBvcnRzQVJJQUxpdmVSZWdpb24oKTsgfTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVj
dDo6bWF0Y2hlZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKSwg
ZmFsc2UsIG1hdGNoRnVuYykgIT0gbnVsbHB0cjsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzdXBwb3J0c0FSSUFBdHRyaWJ1dGVzKCkgY29uc3QKQEAgLTI0NzgsNiArMjQ3OSwxMyBA
QCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRXhwYW5kZWQoKSBjCiAgICAgaWYgKGlzPEhU
TUxEZXRhaWxzRWxlbWVudD4obm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxE
ZXRhaWxzRWxlbWVudD4obm9kZSgpKS0+aXNPcGVuKCk7CiAgICAgCisgICAgLy8gU3VtbWFyeSBl
bGVtZW50IHNob3VsZCB1c2UgaXRzIGRldGFpbHMgcGFyZW50J3MgZXhwYW5kZWQgc3RhdHVzLgor
ICAgIGlmIChpc1N1bW1hcnkoKSkgeworICAgICAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC0+cm9sZVZhbHVlKCkgPT0g
RGV0YWlsc1JvbGU7IH07CisgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJp
bGl0eU9iamVjdCo+KHRoaXMpLCBmYWxzZSwgbWF0Y2hGdW5jKSkKKyAgICAgICAgICAgIHJldHVy
biBwYXJlbnQtPmlzRXhwYW5kZWQoKTsKKyAgICB9CisgICAgCiAgICAgcmV0dXJuIGZhbHNlOyAg
CiB9CiAKQEAgLTI5MzQsMTEgKzI5NDIsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFj
Y2Vzc2liaWxpdHlJCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS90ZXJtcyNkZWZf
aGlkZGVuCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUhpZGRlbigpIGNvbnN0CiB7
Ci0gICAgZm9yIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSB0aGlzOyBvYmpl
Y3Q7IG9iamVjdCA9IG9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG9iamVjdC0+Z2V0QXR0cmlidXRlKGFyaWFfaGlkZGVu
QXR0ciksICJ0cnVlIikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG9iamVjdCkgeyByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uob2JqZWN0LT5n
ZXRBdHRyaWJ1dGUoYXJpYV9oaWRkZW5BdHRyKSwgInRydWUiKTsgfTsKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlP
YmplY3QqPih0aGlzKSwgdHJ1ZSwgbWF0Y2hGdW5jKSAhPSBudWxscHRyOwogfQogCiAvLyBET00g
Y29tcG9uZW50IG9mIGhpZGRlbiBkZWZpbml0aW9uLgpAQCAtMzAzNSwyNiArMzA0MCwxNCBAQCB2
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldFByZXZlbnRLZXliCiAKIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZvY3VzYWJsZUFuY2VzdG9yKCkKIHsKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwb3RlbnRpYWxGb2N1c2FibGVBbmNlc3RvciA9IHRoaXM7Ci0g
ICAgd2hpbGUgKHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yKSB7Ci0gICAgICAgIGlmIChwb3Rl
bnRpYWxGb2N1c2FibGVBbmNlc3Rvci0+Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBwb3RlbnRpYWxGb2N1c2FibGVBbmNlc3RvcjsKLSAgICAgICAgcG90ZW50aWFs
Rm9jdXNhYmxlQW5jZXN0b3IgPSBwb3RlbnRpYWxGb2N1c2FibGVBbmNlc3Rvci0+cGFyZW50T2Jq
ZWN0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBtYXRjaEZ1bmMg
PSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7IHJldHVybiBvYmplY3QtPmNhblNl
dEZvY3VzQXR0cmlidXRlKCk7IH07CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1h
dGNoZWRQYXJlbnQoY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4odGhpcyksIHRydWUs
IG1hdGNoRnVuYyk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVkaXRhYmxlQW5jZXN0b3IoKQogewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvdGVu
dGlhbEVkaXRhYmxlQW5jZXN0b3IgPSB0aGlzOwotICAgIHdoaWxlIChwb3RlbnRpYWxFZGl0YWJs
ZUFuY2VzdG9yKSB7Ci0gICAgICAgIGlmIChwb3RlbnRpYWxFZGl0YWJsZUFuY2VzdG9yLT5pc1Rl
eHRDb250cm9sKCkpCi0gICAgICAgICAgICByZXR1cm4gcG90ZW50aWFsRWRpdGFibGVBbmNlc3Rv
cjsKLSAgICAgICAgcG90ZW50aWFsRWRpdGFibGVBbmNlc3RvciA9IHBvdGVudGlhbEVkaXRhYmxl
QW5jZXN0b3ItPnBhcmVudE9iamVjdCgpOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwor
ICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeyBy
ZXR1cm4gb2JqZWN0LT5pc1RleHRDb250cm9sKCk7IH07CisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQoY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4o
dGhpcyksIHRydWUsIG1hdGNoRnVuYyk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZp
c2lvbiAyMDcyNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzU3Vic2NyaXB0U3R5bGVHcm91cCgpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBlcnNj
cmlwdFN0eWxlR3JvdXAoKSBjb25zdDsKICAgICBib29sIGlzRmlndXJlKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1N1bW1hcnkoKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBTdW1tYXJ5Um9s
ZTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMTA2Miw2ICsxMDYzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoaWdoZXN0
RWRpdGFibGVBbmNlc3RvcigpOwogICAgIAorICAgIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBtYXRjaGVkUGFyZW50KEFjY2Vzc2liaWxpdHlPYmplY3QqLCBib29sIGluY2x1ZGVTZWxmLCBj
b25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woQWNjZXNzaWJpbGl0eU9iamVjdCopPiYpOworICAgIAog
cHJvdGVjdGVkOgogICAgIEFYSUQgbV9pZDsKICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgbV9jaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCShyZXZpc2lvbiAyMDcyNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTMxLDIyICsxMzEsNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vz
CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rp
b24+Ci1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0Y2hlZFBhcmVudChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jbHVkZVNlbGYsIGNvbnN0IE1hdGNoRnVuY3Rpb24m
IG1hdGNoZXMpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gaW5jbHVkZVNlbGYgPyBvYmplY3Qg
OiBvYmplY3QtPnBhcmVudE9iamVjdCgpOwotICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBh
cmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKG1hdGNoZXMocGFyZW50KSkKLSAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRy
OwotfQotCi0KICNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5IFRleHQgTWFya2VyCiAKIEBpbnRl
cmZhY2UgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgOiBOU09iamVjdApAQCAtNTU0LDcgKzUz
OCw3IEBAIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWIKICAgICAgICAg
cmV0dXJuIHJvbGUgPT0gTGlzdFJvbGUgfHwgcm9sZSA9PSBMaXN0Qm94Um9sZTsKICAgICB9Owog
ICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50
KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChtX29iamVjdCwg
ZmFsc2UsIG1hdGNoRnVuYykpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAg
ICByZXR1cm4gbmlsOwogfQpAQCAtNTY1LDcgKzU0OSw3IEBAIC0gKEFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyKilfYWNjZXNzaWIKICAgICAgICAgcmV0dXJuIFtzZWxmIF9hY2Nlc3NpYmlsaXR5
SXNMYW5kbWFya1JvbGU6b2JqZWN0LT5yb2xlVmFsdWUoKV07CiAgICAgfTsKICAgICAKLSAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwg
ZmFsc2UsIG1hdGNoRnVuYykpCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRj
aEZ1bmMpKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CiAgICAgcmV0dXJuIG5p
bDsKIH0KQEAgLTU3Niw3ICs1NjAsNyBAQCAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciop
X2FjY2Vzc2liCiAgICAgICAgIHJldHVybiBvYmplY3QtPnJvbGVWYWx1ZSgpID09IFRhYmxlUm9s
ZSB8fCBvYmplY3QtPnJvbGVWYWx1ZSgpID09IEdyaWRSb2xlOwogICAgIH07CiAgICAgCi0gICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3Qs
IGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0
Y2hGdW5jKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJldHVybiBu
aWw7CiB9CkBAIC01ODcsNyArNTcxLDcgQEAgLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIq
KV9hY2Nlc3NpYgogICAgICAgICByZXR1cm4gb2JqZWN0LT5pc0ZpZWxkc2V0KCk7CiAgICAgfTsK
ICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVu
dChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQobV9vYmplY3Qs
IGZhbHNlLCBtYXRjaEZ1bmMpKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CiAg
ICAgcmV0dXJuIG5pbDsKIH0KQEAgLTEwNDUsNyArMTAyOSw3IEBAIC0gKEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwqKXRhYmxlQ2VsbFBhcmUKICAgICAgICAgcmV0dXJuIG9iamVjdC0+aXNUYWJsZUNl
bGwoKTsKICAgICB9OwogICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQorICAgIGlmIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFy
ZW50KG1fb2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7CiAgICAgcmV0dXJuIG5pbDsKIH0K
QEAgLTEwNTcsNyArMTA0MSw3IEBAIC0gKEFjY2Vzc2liaWxpdHlUYWJsZSopdGFibGVQYXJlbnQK
ICAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCkgJiYgZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nlc3Np
YmlsaXR5KCk7CiAgICAgfTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hl
ZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KHBhcmVudCk7CiAgICAgcmV0dXJuIG5pbDsKIH0K
QEAgLTE0MzEsNyArMTQxNSw3IEBAIC0gKENHUG9pbnQpY29udmVydFBvaW50VG9TY3JlZW5TcGFj
ZTooRmwKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZp
ZXcgPSBudWxscHRyOwotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRj
aGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKTsKKyAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudCht
X29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYyk7CiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAg
ICAgICBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJl
bnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAgCkBAIC0xNDg1LDcgKzE0NjksNyBAQCAtIChDR1Jl
Y3QpY29udmVydFJlY3RUb1NjcmVlblNwYWNlOihJbnRSCiAgICAgICAgIH07CiAKICAgICAgICAg
U2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IG51bGxwdHI7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMp
OworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjptYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKTsKICAgICAgICAg
aWYgKHBhcmVudCkKICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldz4oKnBhcmVudCkuc2Nyb2xsVmlldygpOwogICAgICAgICAKQEAgLTE4NTks
NyArMTg0Myw3IEBAIC0gKEFjY2Vzc2liaWxpdHlPYmplY3QqKWRldGFpbFBhcmVudEZvclMKICAg
ICAgICAgcmV0dXJuIG9iamVjdC0+aGFzVGFnTmFtZShzdW1tYXJ5VGFnKTsKICAgICB9OwogICAg
IAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzdW1tYXJ5ID0gbWF0Y2hlZFBhcmVudChv
YmplY3QsIHRydWUsIG1hdGNoRnVuYykpCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHN1
bW1hcnkgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KG9iamVjdCwgdHJ1ZSwg
bWF0Y2hGdW5jKSkKICAgICAgICAgcmV0dXJuIHN1bW1hcnktPnBhcmVudE9iamVjdCgpOwogICAg
IHJldHVybiBuaWw7CiB9CkBAIC0xODcxLDcgKzE4NTUsNyBAQCAtIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KilkZXRhaWxQYXJlbnRGb3JPCiAgICAgICAgIHJldHVybiBvYmplY3QtPmhhc1RhZ05hbWUo
ZGV0YWlsc1RhZyk7CiAgICAgfTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCog
ZGV0YWlscyA9IG1hdGNoZWRQYXJlbnQob2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQorICAgIGlm
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkZXRhaWxzID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0
Y2hlZFBhcmVudChvYmplY3QsIHRydWUsIG1hdGNoRnVuYykpCiAgICAgICAgIHJldHVybiBkZXRh
aWxzOwogICAgIHJldHVybiBuaWw7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE0MTAsNyArMTQxMCw3IEBAIC0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nlc3Np
YmlsaXR5QXR0cmkKICAgICBpZiAobV9vYmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpCiAgICAgICAg
IFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07CiAg
ICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkpCisgICAgaWYgKG1fb2Jq
ZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkgfHwgbV9vYmplY3QtPmlzU3VtbWFyeSgpKQogICAgICAg
ICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1dGVd
OwogICAgIAogICAgIGlmIChtX29iamVjdC0+aXNTY3JvbGxiYXIoKQpAQCAtMjIwNyw3ICsyMjA3
LDcgQEAgc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxpdHlSb2xlTWFwJiBjcmVhdAogICAgICAgICB7
IFJ1YnlSdW5Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBSdWJ5
VGV4dFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAogICAgICAgICB7IERldGFpbHNS
b2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBTdW1tYXJ5Um9sZSwg
TlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgU3VtbWFyeVJvbGUsIE5TQWNj
ZXNzaWJpbGl0eUJ1dHRvblJvbGUgfSwKICAgICAgICAgeyBTVkdUZXh0UGF0aFJvbGUsIE5TQWNj
ZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAogICAgICAgICB7IFNWR1RleHRSb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBTVkdUU3BhblJvbGUsIE5TQWNjZXNzaWJpbGl0
eUdyb3VwUm9sZSB9LApAQCAtMjQ5NCw4ICsyNDk0LDYgQEAgLSAoTlNTdHJpbmcqKXJvbGVEZXNj
cmlwdGlvbgogICAgICAgICAgICAgcmV0dXJuIEFYRGV0YWlsc1RleHQoKTsKICAgICAgICAgY2Fz
ZSBGb290ZXJSb2xlOgogICAgICAgICAgICAgcmV0dXJuIEFYRm9vdGVyUm9sZURlc2NyaXB0aW9u
VGV4dCgpOwotICAgICAgICBjYXNlIFN1bW1hcnlSb2xlOgotICAgICAgICAgICAgcmV0dXJuIEFY
U3VtbWFyeVRleHQoKTsKICAgICAgICAgY2FzZSBWaWRlb1JvbGU6CiAgICAgICAgICAgICByZXR1
cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZygiVmlkZW9FbGVtZW50Iik7CiAg
ICAgICAgIGRlZmF1bHQ6CkBAIC0yNTM1LDYgKzI1MzMsOSBAQCAtIChOU1N0cmluZyopcm9sZURl
c2NyaXB0aW9uCiAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkKICAgICAgICAgcmV0dXJu
IE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihAIkFYVGFiIiwgbmlsKTsKICAgICAKKyAg
ICBpZiAobV9vYmplY3QtPmlzU3VtbWFyeSgpKQorICAgICAgICByZXR1cm4gQVhTdW1tYXJ5VGV4
dCgpOworICAgIAogICAgIC8vIFdlIHNob3VsZCB0cnkgdGhlIHN5c3RlbSBkZWZhdWx0IHJvbGUg
ZGVzY3JpcHRpb24gZm9yIGFsbCBvdGhlciByb2xlcy4KICAgICAvLyBJZiB3ZSBnZXQgdGhlIHNh
bWUgc3RyaW5nIGJhY2ssIHRoZW4gYXMgYSBsYXN0IHJlc29ydCwgcmV0dXJuIHVua25vd24uCiAg
ICAgTlNTdHJpbmcqIGRlZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlSb2xl
RGVzY3JpcHRpb24oYXhSb2xlLCBbc2VsZiBzdWJyb2xlXSk7CkBAIC0yNzU3LDYgKzI3NTgsMTAg
QEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICBpZiAo
bV9vYmplY3QtPmlzTWV0ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
XTsKICAgICAgICAgCisgICAgICAgIC8vIFN1bW1hcnkgZWxlbWVudCBzaG91bGQgdXNlIGl0cyB0
ZXh0IG5vZGUgYXMgQVhUaXRsZS4KKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1N1bW1hcnkoKSkK
KyAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOworICAgICAg
ICAKICAgICAgICAgcmV0dXJuIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5VGl0bGVdOwogICAgIH0K
ICAgICAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTEwLTEzICBOYW4gV2FuZyAg
PG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3NpYmls
aXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Mjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9u
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1h
cnktcm9sZS1kZXNjcmlwdGlvbi5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL2Rl
dGFpbHMtc3VtbWFyeS5odG1sOgorCiAyMDE2LTEwLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogc3RlcC1pbnRvIGBjb25z
b2xlLmxvZyhvKWAgc2hvdWxkIG5vdCBzdGVwIHRocm91Z2ggaW5zcGVjdG9yIGphdmFzY3JpcHQK
SW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0
YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjA3MjY4KQorKysgTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAsMTMgKzEwLDE4IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEEKIFBBU1MgZGV0YWlsczEucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3VwJwogUEFT
UyBkZXRhaWxzMS5zdWJyb2xlIGlzICdBWFN1YnJvbGU6IEFYRGV0YWlscycKIFBBU1MgZGV0YWls
czEuaXNFeHBhbmRlZCBpcyB0cnVlCi1QQVNTIGRldGFpbHMxLmNoaWxkQXRJbmRleCgwKS5yb2xl
IGlzICdBWFJvbGU6IEFYR3JvdXAnCi1QQVNTIGRldGFpbHMxLmNoaWxkQXRJbmRleCgwKS5zdWJy
b2xlIGlzICdBWFN1YnJvbGU6IEFYU3VtbWFyeScKK1BBU1Mgc3VtbWFyeTEucm9sZSBpcyAnQVhS
b2xlOiBBWEJ1dHRvbicKK1BBU1Mgc3VtbWFyeTEuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWFN1
bW1hcnknCitQQVNTIHN1bW1hcnkxLnRpdGxlIGlzICdBWFRpdGxlOiBTb21lIG9wZW4gaW5mbycK
IFBBU1MgZGV0YWlsczEuaXNBdHRyaWJ1dGVTZXR0YWJsZSgnQVhFeHBhbmRlZCcpIGlzIHRydWUK
IFBBU1MgZGV0YWlsczEuaXNFeHBhbmRlZCBpcyBmYWxzZQorUEFTUyBzdW1tYXJ5MS5pc0V4cGFu
ZGVkIGlzIGZhbHNlCiBQQVNTIGRldGFpbHMxLmlzRXhwYW5kZWQgaXMgZmFsc2UKK1BBU1Mgc3Vt
bWFyeTEuaXNFeHBhbmRlZCBpcyBmYWxzZQogUEFTUyBkZXRhaWxzMS5pc0V4cGFuZGVkIGlzIHRy
dWUKK1BBU1Mgc3VtbWFyeTEuaXNFeHBhbmRlZCBpcyB0cnVlCiBQQVNTIGRldGFpbHMxLmlzRXhw
YW5kZWQgaXMgdHJ1ZQorUEFTUyBzdW1tYXJ5MS5pc0V4cGFuZGVkIGlzIHRydWUKIFBBU1MgZGV0
YWlsczIuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCiBQQVNTIGRldGFpbHMyLmlz
RXhwYW5kZWQgaXMgZmFsc2UKIFJlY2VpdmVkIEFYRXhwYW5kZWRDaGFuZ2VkIG5vdGlmaWNhdGlv
biAKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1y
b2xlLWRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNiw3ICs2LDcgQEAgVGhpcyB0ZXN0cyB0aGF0IHN1bW1hcnkgYW5kIGRldGFpbCBl
bGVtZQogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1Mgc3VtbWFyeS5yb2xlIGlz
ICdBWFJvbGU6IEFYR3JvdXAnCitQQVNTIHN1bW1hcnkucm9sZSBpcyAnQVhSb2xlOiBBWEJ1dHRv
bicKIFBBU1MgZGV0YWlscy5yb2xlIGlzICdBWFJvbGU6IEFYR3JvdXAnCiBQQVNTIHN1bW1hcnku
c3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWFN1bW1hcnknCiBQQVNTIGRldGFpbHMuc3Vicm9sZSBp
cyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2Ny
aXB0aW9uLmh0bWwJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9uLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDcgKzE5LDcgQEAKICAgICAgICAgICB2YXIgc3VtbWFyeSA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3VtbWFyeSIpOwogICAgICAgICAg
IHZhciBkZXRhaWxzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJkZXRhaWxzIik7CiAgICAgICAgICAKLSAgICAgICAgICBzaG91bGRCZSgic3VtbWFyeS5y
b2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CisgICAgICAgICAgc2hvdWxkQmUoInN1bW1hcnku
cm9sZSIsICInQVhSb2xlOiBBWEJ1dHRvbiciKTsKICAgICAgICAgICBzaG91bGRCZSgiZGV0YWls
cy5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CiAgICAgICAgICAgc2hvdWxkQmUoInN1bW1h
cnkuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWFN1bW1hcnknIik7CiAgICAgICAgICAgc2hvdWxk
QmUoImRldGFpbHMuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWERldGFpbHMnIik7CkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnkuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnkuaHRt
bAkocmV2aXNpb24gMjA3MjY4KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0
YWlscy1zdW1tYXJ5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiA8Ym9keSBp
ZD0iYm9keSI+CiAKIDxkZXRhaWxzIG9wZW4gaWQ9ImRldGFpbHMxIj4KLSAgPHN1bW1hcnk+U29t
ZSBvcGVuIGluZm88L3N1bW1hcnk+CisgIDxzdW1tYXJ5IGlkPSJzdW1tYXJ5MSI+U29tZSBvcGVu
IGluZm88L3N1bW1hcnk+CiAgIDxwPkRldGFpbHMgYWJvdXQgdGhlIG9wZW4gdG9waWMuPC9wPgog
PC9kZXRhaWxzPgogCkBAIC0zOSwzMiArMzksNDIgQEAKICAgICAgICAgfSk7CiAKICAgICAgICAg
dmFyIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJkZXRhaWxzMSIpOworICAgICAgICB2YXIgc3VtbWFyeTEgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkxIik7CiAgICAgICAgIHNob3Vs
ZEJlKCJkZXRhaWxzMS5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CiAgICAgICAgIHNob3Vs
ZEJlKCJkZXRhaWxzMS5zdWJyb2xlIiwgIidBWFN1YnJvbGU6IEFYRGV0YWlscyciKTsKICAgICAg
ICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxzMS5pc0V4cGFuZGVkIik7Ci0gICAgICAgIHNob3VsZEJl
KCJkZXRhaWxzMS5jaGlsZEF0SW5kZXgoMCkucm9sZSIsICInQVhSb2xlOiBBWEdyb3VwJyIpOwot
ICAgICAgICBzaG91bGRCZSgiZGV0YWlsczEuY2hpbGRBdEluZGV4KDApLnN1YnJvbGUiLCAiJ0FY
U3Vicm9sZTogQVhTdW1tYXJ5JyIpOworICAgICAgICBzaG91bGRCZSgic3VtbWFyeTEucm9sZSIs
ICInQVhSb2xlOiBBWEJ1dHRvbiciKTsKKyAgICAgICAgc2hvdWxkQmUoInN1bW1hcnkxLnN1YnJv
bGUiLCAiJ0FYU3Vicm9sZTogQVhTdW1tYXJ5JyIpOworICAgICAgICBzaG91bGRCZSgic3VtbWFy
eTEudGl0bGUiLCAiJ0FYVGl0bGU6IFNvbWUgb3BlbiBpbmZvJyIpOwogICAgICAgICBzaG91bGRC
ZVRydWUoImRldGFpbHMxLmlzQXR0cmlidXRlU2V0dGFibGUoJ0FYRXhwYW5kZWQnKSIpOwogCiAg
ICAgICAgIC8vIFRvZ2dsZSB0aGUgZXhwYW5kZWQgc3RhdGUuCiAgICAgICAgIGRldGFpbHMxLnNl
dEJvb2xBdHRyaWJ1dGVWYWx1ZSgiQVhFeHBhbmRlZCIsIGZhbHNlKTsKICAgICAgICAgZGV0YWls
czEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFp
bHMxIik7CisgICAgICAgIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZUZhbHNlKCJkZXRh
aWxzMS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoInN1bW1hcnkxLmlzRXhw
YW5kZWQiKTsKIAogICAgICAgICAvLyBHaXZlIGl0IHRoZSBzYW1lIHZhbHVlIHRvIG1ha2Ugc3Vy
ZSB3ZSBkb24ndCBleHBhbmQuCiAgICAgICAgIGRldGFpbHMxLnNldEJvb2xBdHRyaWJ1dGVWYWx1
ZSgiQVhFeHBhbmRlZCIsIGZhbHNlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAgICAgIHN1
bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJz
dW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZUZhbHNlKCJkZXRhaWxzMS5pc0V4cGFuZGVkIik7
CisgICAgICAgIHNob3VsZEJlRmFsc2UoInN1bW1hcnkxLmlzRXhwYW5kZWQiKTsKIAogICAgICAg
ICAvLyBTZXQgdG8gZXhwYW5kIGFnYWluLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0cmli
dXRlVmFsdWUoIkFYRXhwYW5kZWQiLCB0cnVlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAg
ICAgIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZVRydWUoImRldGFpbHMxLmlzRXhwYW5k
ZWQiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAKICAg
ICAgICAgLy8gQW5kIGR1cGxpY2F0ZSB0aGUgdHJ1ZSBzdGF0ZSB0byBtYWtlIHN1cmUgaXQgZG9l
c24ndCB0b2dnbGUgb2ZmLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0cmlidXRlVmFsdWUo
IkFYRXhwYW5kZWQiLCB0cnVlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAgICAgIHN1bW1h
cnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJzdW1t
YXJ5MSIpOwogICAgICAgICBzaG91bGRCZVRydWUoImRldGFpbHMxLmlzRXhwYW5kZWQiKTsKKyAg
ICAgICAgc2hvdWxkQmVUcnVlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAKICAgICAgICAgdmFy
IGRldGFpbHMyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlk
KCJkZXRhaWxzMiIpOwogICAgICAgICBzaG91bGRCZSgiZGV0YWlsczIuc3Vicm9sZSIsICInQVhT
dWJyb2xlOiBBWERldGFpbHMnIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291462</attachid>
            <date>2016-10-13 00:46:14 -0700</date>
            <delta_ts>2016-10-13 00:52:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25538</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlZCBzdW1tYXJ5IGVsZW1lbnRzIGFzIEFYQnV0dG9uIGFuZCB1c2VkIHRoZSB0
ZXh0IG5vZGUncyBjb250ZW50CisgICAgICAgIGFzIEFYVGl0bGUuIEFsc28gZXhwb3NlZCB0aGUg
ZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMgb24gdGhlIHN1bW1hcnkKKyAgICAgICAg
ZWxlbWVudCwgc28gdGhhdCB1c2VycyB3b3VsZCBzZWUgaXQgYXMgYSBjb2xsYXBzZWQvZXhwYW5k
ZWQgYnV0dG9uLgorCisgICAgICAgIENoYW5nZXMgYXJlIGNvdmVyZWQgaW4gdGhlIG1vZGlmaWVk
IHRlc3RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9iamVjdFVu
aWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxW
aWV3QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVh
ZGluZ0VsZW1lbnRGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6aXNEZXNjZW5kYW50T2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNJbnNpZGVBUklBTGl2ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0V4cGFuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmlzQVJJQUhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpmb2N1c2FibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjplZGl0YWJsZUFuY2VzdG9yKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzU3VtbWFyeSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGlzdEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGFuZG1hcmtBbmNlc3Rv
cl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eVRhYmxlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVsZHNldEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlQ2VsbFBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZVBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UmVjdFRv
U2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGRldGFpbFBhcmVudEZvck9iamVjdDpdKToKKyAgICAgICAgKG1h
dGNoZWRQYXJlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSk6
CisgICAgICAgIChjcmVhdGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJvbGVEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
XSk6CisKIDIwMTYtMTAtMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV2ViIElETF0gRHJvcCBzdXBwb3J0IGZvciBsZWdhY3kgW0NvbnN0cnVjdG9yQ29uZGl0
aW9uYWw9Kl0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU3LDExICs0NTcsOSBAQCBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YmxvY2txdW90ZUxl
dmVsCiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9i
amVjdFVuaWdub3JlZCgpIGNvbnN0CiB7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
OwotICAgIGZvciAocGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IHBhcmVudCAmJiBwYXJlbnQtPmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkg
ewotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcGFyZW50OworICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+
KHRoaXMpLCBmYWxzZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAg
ICByZXR1cm4gIW9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOworICAgIH0pOwogfQog
CiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91c1NpYmxp
bmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25zdApAQCAtMTY5NiwxMCArMTY5NCwxMCBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTCiAgICAgCiBTY3JvbGxWaWV3KiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxWaWV3QW5jZXN0b3IoKSBjb25zdAogewotICAgIGZv
ciAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsUGFyZW50ID0gdGhpczsgc2Nyb2xs
UGFyZW50OyBzY3JvbGxQYXJlbnQgPSBzY3JvbGxQYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0g
ICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnNjcm9sbFBhcmVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpzY3Jv
bGxQYXJlbnQpLnNjcm9sbFZpZXcoKTsKLSAgICB9CisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHNjcm9sbFBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQoY29u
c3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4odGhpcyksIHRydWUsIFtdIChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3Pigqb2JqZWN0KTsKKyAgICB9KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3Pigqc2Nyb2xsUGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNzkwLDkgKzE3ODgsMjAgQEAgQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IHJlbmRlck9iamVjdC0+ZG9j
dW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlck9iamVjdCk7Ci0gICAg
Zm9yICg7IGF4T2JqZWN0ICYmIGF4T2JqZWN0LT5yb2xlVmFsdWUoKSAhPSBIZWFkaW5nUm9sZTsg
YXhPYmplY3QgPSBheE9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsgfQogICAgIAotICAgIHJldHVy
biBheE9iamVjdDsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVu
dChheE9iamVjdCwgdHJ1ZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAg
ICAgICByZXR1cm4gb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBIZWFkaW5nUm9sZTsKKyAgICB9KTsK
K30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBh
cmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jbHVkZVNlbGYsIGNvbnN0
IHN0ZDo6ZnVuY3Rpb248Ym9vbChBY2Nlc3NpYmlsaXR5T2JqZWN0Kik+JiBtYXRjaGVzKQorewor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IGluY2x1ZGVTZWxmID8gb2JqZWN0IDog
b2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICBmb3IgKDsgcGFyZW50OyBwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtYXRjaGVzKHBhcmVudCkpCisgICAg
ICAgICAgICByZXR1cm4gKHBhcmVudCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwogfQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVlUm93cyhBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIHJlc3VsdCkKQEAgLTIwMzUsMTEgKzIwNDQsMTAgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojppc0Rlc2NlbmRhbnRPZgogICAgIGlmICghYXhPYmplY3QgfHwgIWF4T2Jq
ZWN0LT5oYXNDaGlsZHJlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJlbnQ7
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudCA9
PSBheE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbYXhPYmplY3RdIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA9PSBheE9iamVjdDsKKyAgICB9
OworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nh
c3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpLCBmYWxzZSwgbWF0Y2hGdW5jKSAhPSBudWxs
cHRyOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQW5jZXN0b3JPZk9iamVjdChj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCkgY29uc3QKQEAgLTIzMDcsMTIgKzIz
MTUsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzSW5zaWRlQVJJQUxpCiAgICAgaWYg
KHN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0g
ICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheFBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBh
eFBhcmVudDsgYXhQYXJlbnQgPSBheFBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAg
aWYgKGF4UGFyZW50LT5zdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9i
amVjdCo+KHRoaXMpLCBmYWxzZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewor
ICAgICAgICByZXR1cm4gb2JqZWN0LT5zdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCk7CisgICAgfSkg
IT0gbnVsbHB0cjsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0FSSUFB
dHRyaWJ1dGVzKCkgY29uc3QKQEAgLTI0NzgsNiArMjQ4MywxNCBAQCBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmlzRXhwYW5kZWQoKSBjCiAgICAgaWYgKGlzPEhUTUxEZXRhaWxzRWxlbWVudD4o
bm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxEZXRhaWxzRWxlbWVudD4obm9k
ZSgpKS0+aXNPcGVuKCk7CiAgICAgCisgICAgLy8gU3VtbWFyeSBlbGVtZW50IHNob3VsZCB1c2Ug
aXRzIGRldGFpbHMgcGFyZW50J3MgZXhwYW5kZWQgc3RhdHVzLgorICAgIGlmIChpc1N1bW1hcnko
KSkgeworICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJp
bGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Qq
Pih0aGlzKSwgZmFsc2UsIFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAg
ICAgICAgIHJldHVybiBvYmplY3QtPnJvbGVWYWx1ZSgpID09IERldGFpbHNSb2xlOworICAgICAg
ICB9KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPmlzRXhwYW5kZWQoKTsKKyAgICB9Cisg
ICAgCiAgICAgcmV0dXJuIGZhbHNlOyAgCiB9CiAKQEAgLTI5MzQsMTEgKzI5NDcsOSBAQCBib29s
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlJCiAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi93YWktYXJpYS90ZXJtcyNkZWZfaGlkZGVuCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmlzQVJJQUhpZGRlbigpIGNvbnN0CiB7Ci0gICAgZm9yIChjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplY3QgPSB0aGlzOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+cGFyZW50T2JqZWN0
KCkpIHsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG9iamVjdC0+
Z2V0QXR0cmlidXRlKGFyaWFfaGlkZGVuQXR0ciksICJ0cnVlIikpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+
KHRoaXMpLCB0cnVlLCBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAg
IHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShvYmplY3QtPmdldEF0dHJpYnV0
ZShhcmlhX2hpZGRlbkF0dHIpLCAidHJ1ZSIpOworICAgIH0pICE9IG51bGxwdHI7CiB9CiAKIC8v
IERPTSBjb21wb25lbnQgb2YgaGlkZGVuIGRlZmluaXRpb24uCkBAIC0zMDM1LDI2ICszMDQ2LDE2
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0UHJldmVudEtleWIKIAogQWNjZXNzaWJp
bGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6Zm9jdXNhYmxlQW5jZXN0b3IoKQogewot
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yID0gdGhp
czsKLSAgICB3aGlsZSAocG90ZW50aWFsRm9jdXNhYmxlQW5jZXN0b3IpIHsKLSAgICAgICAgaWYg
KHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yLT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yOwotICAgICAgICBwb3Rl
bnRpYWxGb2N1c2FibGVBbmNlc3RvciA9IHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yLT5wYXJl
bnRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlP
YmplY3QqPih0aGlzKSwgdHJ1ZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewor
ICAgICAgICByZXR1cm4gb2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOworICAgIH0pOwog
fQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplZGl0YWJsZUFu
Y2VzdG9yKCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwb3RlbnRpYWxFZGl0YWJsZUFu
Y2VzdG9yID0gdGhpczsKLSAgICB3aGlsZSAocG90ZW50aWFsRWRpdGFibGVBbmNlc3Rvcikgewot
ICAgICAgICBpZiAocG90ZW50aWFsRWRpdGFibGVBbmNlc3Rvci0+aXNUZXh0Q29udHJvbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbEVkaXRhYmxlQW5jZXN0b3I7Ci0gICAgICAgIHBv
dGVudGlhbEVkaXRhYmxlQW5jZXN0b3IgPSBwb3RlbnRpYWxFZGl0YWJsZUFuY2VzdG9yLT5wYXJl
bnRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlP
YmplY3QqPih0aGlzKSwgdHJ1ZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewor
ICAgICAgICByZXR1cm4gb2JqZWN0LT5pc1RleHRDb250cm9sKCk7CisgICAgfSk7CiB9CiAKIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmhpZ2hlc3RFZGl0YWJsZUFu
Y2VzdG9yKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiAyMDcyNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYx
LDYgKzU2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3Vic2NyaXB0U3R5bGVHcm91cCgpIGNv
bnN0OwogICAgIGJvb2wgaXNTdXBlcnNjcmlwdFN0eWxlR3JvdXAoKSBjb25zdDsKICAgICBib29s
IGlzRmlndXJlKCkgY29uc3Q7CisgICAgYm9vbCBpc1N1bW1hcnkoKSBjb25zdCB7IHJldHVybiBy
b2xlVmFsdWUoKSA9PSBTdW1tYXJ5Um9sZTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0No
ZWNrZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTA2Miw2ICsxMDYzLDggQEAgcHVibGlj
OgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBoaWdoZXN0RWRpdGFibGVBbmNlc3RvcigpOwogICAgIAorICAgIHN0
YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRjaGVkUGFyZW50KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqLCBib29sIGluY2x1ZGVTZWxmLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woQWNjZXNzaWJp
bGl0eU9iamVjdCopPiYpOworICAgIAogcHJvdGVjdGVkOgogICAgIEFYSUQgbV9pZDsKICAgICBB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAyMDcyNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMxLDIyICsxMzEsNiBAQCBzdGF0aWMgQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIqIEFjY2VzCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rpb24+Ci1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCog
bWF0Y2hlZFBhcmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jbHVkZVNl
bGYsIGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
ID0gaW5jbHVkZVNlbGYgPyBvYmplY3QgOiBvYmplY3QtPnBhcmVudE9iamVjdCgpOwotICAgIGZv
ciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAg
aWYgKG1hdGNoZXMocGFyZW50KSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotCi0KICNwcmFnbWEgbWFyayBBY2Nlc3NpYmls
aXR5IFRleHQgTWFya2VyCiAKIEBpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIg
OiBOU09iamVjdApAQCAtNTU0LDcgKzUzOCw3IEBAIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKilfYWNjZXNzaWIKICAgICAgICAgcmV0dXJuIHJvbGUgPT0gTGlzdFJvbGUgfHwgcm9sZSA9
PSBMaXN0Qm94Um9sZTsKICAgICB9OwogICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKKyAg
ICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6
bWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCiAgICAgICAgIHJldHVy
biBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQpAQCAtNTY1LDI5ICs1NDks
MjYgQEAgLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYgogICAgICAgICBy
ZXR1cm4gW3NlbGYgX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJrUm9sZTpvYmplY3QtPnJvbGVWYWx1
ZSgpXTsKICAgICB9OwogICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKKyAgICBpZiAoQWNj
ZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBh
cmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCiAgICAgICAgIHJldHVybiBwYXJlbnQt
PndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yCiB7Ci0gICAgYXV0byBtYXRjaEZ1
bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBv
YmplY3QtPnJvbGVWYWx1ZSgpID09IFRhYmxlUm9sZSB8fCBvYmplY3QtPnJvbGVWYWx1ZSgpID09
IEdyaWRSb2xlOwotICAgIH07CiAgICAgCi0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgIGlm
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRj
aGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBUYWJsZVJvbGUgfHwg
b2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBHcmlkUm9sZTsKKyAgICB9KSkKICAgICAgICAgcmV0dXJu
IHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKEFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUZpZWxkc2V0QW5jZXN0b3IKIHsKLSAgICBh
dXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0
Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC0+aXNGaWVsZHNldCgpOwotICAgIH07Ci0gICAg
Ci0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9v
YmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50
LT53cmFwcGVyKCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTEwNDEsMTEgKzEwMjIsOSBAQCAt
IChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMYWJlbAogLSAoQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bCopdGFibGVDZWxsUGFyZW50CiB7CiAgICAgLy8gRmluZCBpZiB0aGlzIGVsZW1lbnQgaXMgaW4g
YSB0YWJsZSBjZWxsLgotICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCkgeworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KG1fb2JqZWN0LCB0cnVlLCBbXSAoQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QtPmlzVGFibGVD
ZWxsKCk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICB9KSkKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqPihwYXJlbnQp
OwogICAgIHJldHVybiBuaWw7CiB9CkBAIC0xMDUzLDExICsxMDMyLDkgQEAgLSAoQWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbCopdGFibGVDZWxsUGFyZQogLSAoQWNjZXNzaWJpbGl0eVRhYmxlKil0YWJs
ZVBhcmVudAogewogICAgIC8vIEZpbmQgaWYgdGhlIHBhcmVudCB0YWJsZSBmb3IgdGhlIHRhYmxl
IGNlbGwuCi0gICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0KSB7CisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxp
dHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQobV9vYmplY3QsIHRydWUsIFtdIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4o
Km9iamVjdCkgJiYgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqZWN0KS5pc0V4cG9z
YWJsZVRocm91Z2hBY2Nlc3NpYmlsaXR5KCk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAoQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0
Y2hGdW5jKSkKKyAgICB9KSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZSo+KHBhcmVudCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTE0MjYsMTIgKzE0MDMs
MTAgQEAgLSAoQ0dQb2ludCljb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOihGbAogICAgIH0KICAg
ICBlbHNlIHsKICAgICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8g
dXNlIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCi0gICAgICAgIGF1dG8g
bWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewotICAgICAgICAg
ICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqb2JqZWN0KTsKLSAgICAgICAg
fTsKLSAgICAgICAgCiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBudWxscHRyOwot
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2Jq
ZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2Us
IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBp
czxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKm9iamVjdCk7CisgICAgICAgIH0pOwogICAgICAg
ICBpZiAocGFyZW50KQogICAgICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgIApAQCAtMTQ4
MCwxMiArMTQ1NSwxMCBAQCAtIChDR1JlY3QpY29udmVydFJlY3RUb1NjcmVlblNwYWNlOihJbnRS
CiAgICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRl
IHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUgd2luZG93
LgotICAgICAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QpIHsKLSAgICAgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKm9i
amVjdCk7Ci0gICAgICAgIH07Ci0KICAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IG51
bGxwdHI7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJl
bnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpOworICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KG1fb2JqZWN0
LCBmYWxzZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICAgICAg
cmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqb2JqZWN0KTsKKyAgICAgICAgfSk7
CiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBzY3JvbGxWaWV3ID0gZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXcoKTsKICAgICAgICAg
CkBAIC0xODU1LDExICsxODI4LDkgQEAgLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopZGV0YWlsUGFy
ZW50Rm9yUwogewogICAgIC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpcyB0aGUg
Y2hpbGQgb2YgYSBzdW1tYXJ5IG9iamVjdC4KICAgICAvLyBBbmQgcmV0dXJuIHRoZSBzdW1tYXJ5
J3MgcGFyZW50LCB3aGljaCBpcyB0aGUgZXhwYW5kYWJsZSBkZXRhaWxzIG9iamVjdC4KLSAgICBh
dXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogc3VtbWFyeSA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1h
dGNoZWRQYXJlbnQob2JqZWN0LCB0cnVlLCBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0
KSB7CiAgICAgICAgIHJldHVybiBvYmplY3QtPmhhc1RhZ05hbWUoc3VtbWFyeVRhZyk7Ci0gICAg
fTsKLSAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogc3VtbWFyeSA9IG1hdGNoZWRQ
YXJlbnQob2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQorICAgIH0pKQogICAgICAgICByZXR1cm4g
c3VtbWFyeS0+cGFyZW50T2JqZWN0KCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTE4NjcsMTEg
KzE4MzgsOSBAQCAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRGb3JTCiAtIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRGb3JPYmplY3Q6KEFjY2Vzc2liaWxpdHlP
YmplY3QqKW9iamVjdAogewogICAgIC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBp
cyBpbnNpZGUgYSBkZXRhaWxzIG9iamVjdC4KLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCog
ZGV0YWlscyA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQob2JqZWN0LCB0cnVl
LCBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CiAgICAgICAgIHJldHVybiBvYmpl
Y3QtPmhhc1RhZ05hbWUoZGV0YWlsc1RhZyk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAoQWNjZXNz
aWJpbGl0eU9iamVjdCogZGV0YWlscyA9IG1hdGNoZWRQYXJlbnQob2JqZWN0LCB0cnVlLCBtYXRj
aEZ1bmMpKQorICAgIH0pKQogICAgICAgICByZXR1cm4gZGV0YWlsczsKICAgICByZXR1cm4gbmls
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlz
aW9uIDIwNzI2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEwLDcgKzE0
MTAsNyBAQCAtIChOU0FycmF5KilhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpCiAgICAgaWYg
KG1fb2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmpl
Y3Q6TlNBY2Nlc3NpYmlsaXR5VmFsdWVBdHRyaWJ1dGVdOwogICAgIAotICAgIGlmIChtX29iamVj
dC0+c3VwcG9ydHNFeHBhbmRlZCgpKQorICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNFeHBhbmRl
ZCgpIHx8IG1fb2JqZWN0LT5pc1N1bW1hcnkoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUV4cGFuZGVkQXR0cmlidXRlXTsKICAgICAKICAgICBpZiAobV9v
YmplY3QtPmlzU2Nyb2xsYmFyKCkKQEAgLTIyMDcsNyArMjIwNyw3IEBAIHN0YXRpYyBjb25zdCBB
Y2Nlc3NpYmlsaXR5Um9sZU1hcCYgY3JlYXQKICAgICAgICAgeyBSdWJ5UnVuUm9sZSwgTlNBY2Nl
c3NpYmlsaXR5R3JvdXBSb2xlIH0sCiAgICAgICAgIHsgUnVieVRleHRSb2xlLCBOU0FjY2Vzc2li
aWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBEZXRhaWxzUm9sZSwgTlNBY2Nlc3NpYmlsaXR5
R3JvdXBSb2xlIH0sCi0gICAgICAgIHsgU3VtbWFyeVJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3Vw
Um9sZSB9LAorICAgICAgICB7IFN1bW1hcnlSb2xlLCBOU0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xl
IH0sCiAgICAgICAgIHsgU1ZHVGV4dFBhdGhSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUg
fSwKICAgICAgICAgeyBTVkdUZXh0Um9sZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCiAg
ICAgICAgIHsgU1ZHVFNwYW5Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKQEAgLTI0
OTQsOCArMjQ5NCw2IEBAIC0gKE5TU3RyaW5nKilyb2xlRGVzY3JpcHRpb24KICAgICAgICAgICAg
IHJldHVybiBBWERldGFpbHNUZXh0KCk7CiAgICAgICAgIGNhc2UgRm9vdGVyUm9sZToKICAgICAg
ICAgICAgIHJldHVybiBBWEZvb3RlclJvbGVEZXNjcmlwdGlvblRleHQoKTsKLSAgICAgICAgY2Fz
ZSBTdW1tYXJ5Um9sZToKLSAgICAgICAgICAgIHJldHVybiBBWFN1bW1hcnlUZXh0KCk7CiAgICAg
ICAgIGNhc2UgVmlkZW9Sb2xlOgogICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhQ29u
dHJvbEVsZW1lbnRTdHJpbmcoIlZpZGVvRWxlbWVudCIpOwogICAgICAgICBkZWZhdWx0OgpAQCAt
MjUzNSw2ICsyNTMzLDkgQEAgLSAoTlNTdHJpbmcqKXJvbGVEZXNjcmlwdGlvbgogICAgIGlmICht
X29iamVjdC0+aXNUYWJJdGVtKCkpCiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlSb2xl
RGVzY3JpcHRpb24oQCJBWFRhYiIsIG5pbCk7CiAgICAgCisgICAgaWYgKG1fb2JqZWN0LT5pc1N1
bW1hcnkoKSkKKyAgICAgICAgcmV0dXJuIEFYU3VtbWFyeVRleHQoKTsKKyAgICAKICAgICAvLyBX
ZSBzaG91bGQgdHJ5IHRoZSBzeXN0ZW0gZGVmYXVsdCByb2xlIGRlc2NyaXB0aW9uIGZvciBhbGwg
b3RoZXIgcm9sZXMuCiAgICAgLy8gSWYgd2UgZ2V0IHRoZSBzYW1lIHN0cmluZyBiYWNrLCB0aGVu
IGFzIGEgbGFzdCByZXNvcnQsIHJldHVybiB1bmtub3duLgogICAgIE5TU3RyaW5nKiBkZWZhdWx0
Um9sZURlc2NyaXB0aW9uID0gTlNBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uKGF4Um9sZSwg
W3NlbGYgc3Vicm9sZV0pOwpAQCAtMjc1Nyw2ICsyNzU4LDEwIEBAIC0gKGlkKWFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01ldGVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ107CiAgICAgICAgIAorICAgICAg
ICAvLyBTdW1tYXJ5IGVsZW1lbnQgc2hvdWxkIHVzZSBpdHMgdGV4dCBub2RlIGFzIEFYVGl0bGUu
CisgICAgICAgIGlmIChtX29iamVjdC0+aXNTdW1tYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4g
bV9vYmplY3QtPnRleHRVbmRlckVsZW1lbnQoKTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBb
c2VsZiBiYXNlQWNjZXNzaWJpbGl0eVRpdGxlXTsKICAgICB9CiAgICAgCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDcyNjgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAxNi0xMC0xMyAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgor
CisgICAgICAgIEFYOiBbTWFjXSBiZXR0ZXIgYWNjZXNzaWJpbGl0eSBzdXBwb3J0IGZvciBTdW1t
YXJ5IGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjMzNjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI4NzQ1MDEwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9t
YWMvZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LXJvbGUtZGVzY3JpcHRpb24u
aHRtbDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnkuaHRtbDoK
KwogMjAxNi0xMC0xMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHN0ZXAtaW50byBgY29uc29sZS5sb2cobylgIHNob3VsZCBu
b3Qgc3RlcCB0aHJvdWdoIGluc3BlY3RvciBqYXZhc2NyaXB0CkluZGV4OiBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L2RldGFpbHMtc3VtbWFyeS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDEzICsx
MCwxOCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiBQQVNTIGRl
dGFpbHMxLnJvbGUgaXMgJ0FYUm9sZTogQVhHcm91cCcKIFBBU1MgZGV0YWlsczEuc3Vicm9sZSBp
cyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCiBQQVNTIGRldGFpbHMxLmlzRXhwYW5kZWQgaXMgdHJ1
ZQotUEFTUyBkZXRhaWxzMS5jaGlsZEF0SW5kZXgoMCkucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3Vw
JwotUEFTUyBkZXRhaWxzMS5jaGlsZEF0SW5kZXgoMCkuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBB
WFN1bW1hcnknCitQQVNTIHN1bW1hcnkxLnJvbGUgaXMgJ0FYUm9sZTogQVhCdXR0b24nCitQQVNT
IHN1bW1hcnkxLnN1YnJvbGUgaXMgJ0FYU3Vicm9sZTogQVhTdW1tYXJ5JworUEFTUyBzdW1tYXJ5
MS50aXRsZSBpcyAnQVhUaXRsZTogU29tZSBvcGVuIGluZm8nCiBQQVNTIGRldGFpbHMxLmlzQXR0
cmlidXRlU2V0dGFibGUoJ0FYRXhwYW5kZWQnKSBpcyB0cnVlCiBQQVNTIGRldGFpbHMxLmlzRXhw
YW5kZWQgaXMgZmFsc2UKK1BBU1Mgc3VtbWFyeTEuaXNFeHBhbmRlZCBpcyBmYWxzZQogUEFTUyBk
ZXRhaWxzMS5pc0V4cGFuZGVkIGlzIGZhbHNlCitQQVNTIHN1bW1hcnkxLmlzRXhwYW5kZWQgaXMg
ZmFsc2UKIFBBU1MgZGV0YWlsczEuaXNFeHBhbmRlZCBpcyB0cnVlCitQQVNTIHN1bW1hcnkxLmlz
RXhwYW5kZWQgaXMgdHJ1ZQogUEFTUyBkZXRhaWxzMS5pc0V4cGFuZGVkIGlzIHRydWUKK1BBU1Mg
c3VtbWFyeTEuaXNFeHBhbmRlZCBpcyB0cnVlCiBQQVNTIGRldGFpbHMyLnN1YnJvbGUgaXMgJ0FY
U3Vicm9sZTogQVhEZXRhaWxzJwogUEFTUyBkZXRhaWxzMi5pc0V4cGFuZGVkIGlzIGZhbHNlCiBS
ZWNlaXZlZCBBWEV4cGFuZGVkQ2hhbmdlZCBub3RpZmljYXRpb24gCkluZGV4OiBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0
YWlscy1zdW1tYXJ5LXJvbGUtZGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMDcy
NjgpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9s
ZS1kZXNjcmlwdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBA
IFRoaXMgdGVzdHMgdGhhdCBzdW1tYXJ5IGFuZCBkZXRhaWwgZWxlbWUKIE9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KIAogCi1QQVNTIHN1bW1hcnkucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3VwJwor
UEFTUyBzdW1tYXJ5LnJvbGUgaXMgJ0FYUm9sZTogQVhCdXR0b24nCiBQQVNTIGRldGFpbHMucm9s
ZSBpcyAnQVhSb2xlOiBBWEdyb3VwJwogUEFTUyBzdW1tYXJ5LnN1YnJvbGUgaXMgJ0FYU3Vicm9s
ZTogQVhTdW1tYXJ5JwogUEFTUyBkZXRhaWxzLnN1YnJvbGUgaXMgJ0FYU3Vicm9sZTogQVhEZXRh
aWxzJwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5
LXJvbGUtZGVzY3JpcHRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi5odG1sCShyZXZpc2lv
biAyMDcyNjgpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1h
cnktcm9sZS1kZXNjcmlwdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw3IEBA
CiAgICAgICAgICAgdmFyIHN1bW1hcnkgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoInN1bW1hcnkiKTsKICAgICAgICAgICB2YXIgZGV0YWlscyA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZGV0YWlscyIpOwogICAg
ICAgICAgCi0gICAgICAgICAgc2hvdWxkQmUoInN1bW1hcnkucm9sZSIsICInQVhSb2xlOiBBWEdy
b3VwJyIpOworICAgICAgICAgIHNob3VsZEJlKCJzdW1tYXJ5LnJvbGUiLCAiJ0FYUm9sZTogQVhC
dXR0b24nIik7CiAgICAgICAgICAgc2hvdWxkQmUoImRldGFpbHMucm9sZSIsICInQVhSb2xlOiBB
WEdyb3VwJyIpOwogICAgICAgICAgIHNob3VsZEJlKCJzdW1tYXJ5LnN1YnJvbGUiLCAiJ0FYU3Vi
cm9sZTogQVhTdW1tYXJ5JyIpOwogICAgICAgICAgIHNob3VsZEJlKCJkZXRhaWxzLnN1YnJvbGUi
LCAiJ0FYU3Vicm9sZTogQVhEZXRhaWxzJyIpOwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5Lmh0bWwJKHJldmlzaW9uIDIwNzI2OCkK
KysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQAogPGJvZHkgaWQ9ImJvZHkiPgogCiA8ZGV0YWls
cyBvcGVuIGlkPSJkZXRhaWxzMSI+Ci0gIDxzdW1tYXJ5PlNvbWUgb3BlbiBpbmZvPC9zdW1tYXJ5
PgorICA8c3VtbWFyeSBpZD0ic3VtbWFyeTEiPlNvbWUgb3BlbiBpbmZvPC9zdW1tYXJ5PgogICA8
cD5EZXRhaWxzIGFib3V0IHRoZSBvcGVuIHRvcGljLjwvcD4KIDwvZGV0YWlscz4KIApAQCAtMzks
MzIgKzM5LDQyIEBACiAgICAgICAgIH0pOwogCiAgICAgICAgIHZhciBkZXRhaWxzMSA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZGV0YWlsczEiKTsKKyAg
ICAgICAgdmFyIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZSgiZGV0YWlsczEucm9sZSIs
ICInQVhSb2xlOiBBWEdyb3VwJyIpOwogICAgICAgICBzaG91bGRCZSgiZGV0YWlsczEuc3Vicm9s
ZSIsICInQVhTdWJyb2xlOiBBWERldGFpbHMnIik7CiAgICAgICAgIHNob3VsZEJlVHJ1ZSgiZGV0
YWlsczEuaXNFeHBhbmRlZCIpOwotICAgICAgICBzaG91bGRCZSgiZGV0YWlsczEuY2hpbGRBdElu
ZGV4KDApLnJvbGUiLCAiJ0FYUm9sZTogQVhHcm91cCciKTsKLSAgICAgICAgc2hvdWxkQmUoImRl
dGFpbHMxLmNoaWxkQXRJbmRleCgwKS5zdWJyb2xlIiwgIidBWFN1YnJvbGU6IEFYU3VtbWFyeSci
KTsKKyAgICAgICAgc2hvdWxkQmUoInN1bW1hcnkxLnJvbGUiLCAiJ0FYUm9sZTogQVhCdXR0b24n
Iik7CisgICAgICAgIHNob3VsZEJlKCJzdW1tYXJ5MS5zdWJyb2xlIiwgIidBWFN1YnJvbGU6IEFY
U3VtbWFyeSciKTsKKyAgICAgICAgc2hvdWxkQmUoInN1bW1hcnkxLnRpdGxlIiwgIidBWFRpdGxl
OiBTb21lIG9wZW4gaW5mbyciKTsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxzMS5pc0F0
dHJpYnV0ZVNldHRhYmxlKCdBWEV4cGFuZGVkJykiKTsKIAogICAgICAgICAvLyBUb2dnbGUgdGhl
IGV4cGFuZGVkIHN0YXRlLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0cmlidXRlVmFsdWUo
IkFYRXhwYW5kZWQiLCBmYWxzZSk7CiAgICAgICAgIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJkZXRhaWxzMSIpOworICAgICAgICBzdW1t
YXJ5MSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3Vt
bWFyeTEiKTsKICAgICAgICAgc2hvdWxkQmVGYWxzZSgiZGV0YWlsczEuaXNFeHBhbmRlZCIpOwor
ICAgICAgICBzaG91bGRCZUZhbHNlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAKICAgICAgICAg
Ly8gR2l2ZSBpdCB0aGUgc2FtZSB2YWx1ZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZXhwYW5kLgog
ICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0cmlidXRlVmFsdWUoIkFYRXhwYW5kZWQiLCBmYWxz
ZSk7CiAgICAgICAgIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKCJkZXRhaWxzMSIpOworICAgICAgICBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3VtbWFyeTEiKTsKICAgICAgICAg
c2hvdWxkQmVGYWxzZSgiZGV0YWlsczEuaXNFeHBhbmRlZCIpOworICAgICAgICBzaG91bGRCZUZh
bHNlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAKICAgICAgICAgLy8gU2V0IHRvIGV4cGFuZCBh
Z2Fpbi4KICAgICAgICAgZGV0YWlsczEuc2V0Qm9vbEF0dHJpYnV0ZVZhbHVlKCJBWEV4cGFuZGVk
IiwgdHJ1ZSk7CiAgICAgICAgIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJkZXRhaWxzMSIpOworICAgICAgICBzdW1tYXJ5MSA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3VtbWFyeTEiKTsKICAg
ICAgICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxzMS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3Vs
ZEJlVHJ1ZSgic3VtbWFyeTEuaXNFeHBhbmRlZCIpOwogCiAgICAgICAgIC8vIEFuZCBkdXBsaWNh
dGUgdGhlIHRydWUgc3RhdGUgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgdG9nZ2xlIG9mZi4KICAg
ICAgICAgZGV0YWlsczEuc2V0Qm9vbEF0dHJpYnV0ZVZhbHVlKCJBWEV4cGFuZGVkIiwgdHJ1ZSk7
CiAgICAgICAgIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKCJkZXRhaWxzMSIpOworICAgICAgICBzdW1tYXJ5MSA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3VtbWFyeTEiKTsKICAgICAgICAgc2hv
dWxkQmVUcnVlKCJkZXRhaWxzMS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
c3VtbWFyeTEuaXNFeHBhbmRlZCIpOwogCiAgICAgICAgIHZhciBkZXRhaWxzMiA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiZGV0YWlsczIiKTsKICAgICAg
ICAgc2hvdWxkQmUoImRldGFpbHMyLnN1YnJvbGUiLCAiJ0FYU3Vicm9sZTogQVhEZXRhaWxzJyIp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291464</attachid>
            <date>2016-10-13 00:52:24 -0700</date>
            <delta_ts>2016-10-13 15:32:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25618</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTEwLTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlZCBzdW1tYXJ5IGVsZW1lbnRzIGFzIEFYQnV0dG9uIGFuZCB1c2VkIHRoZSB0
ZXh0IG5vZGUncyBjb250ZW50CisgICAgICAgIGFzIEFYVGl0bGUuIEFsc28gZXhwb3NlZCB0aGUg
ZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMgb24gdGhlIHN1bW1hcnkKKyAgICAgICAg
ZWxlbWVudCwgc28gdGhhdCB1c2VycyB3b3VsZCBzZWUgaXQgYXMgYSBjb2xsYXBzZWQvZXhwYW5k
ZWQgYnV0dG9uLgorCisgICAgICAgIENoYW5nZXMgYXJlIGNvdmVyZWQgaW4gdGhlIG1vZGlmaWVk
IHRlc3RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9iamVjdFVu
aWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxW
aWV3QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVh
ZGluZ0VsZW1lbnRGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6aXNEZXNjZW5kYW50T2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNJbnNpZGVBUklBTGl2ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0V4cGFuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmlzQVJJQUhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpmb2N1c2FibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjplZGl0YWJsZUFuY2VzdG9yKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzU3VtbWFyeSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGlzdEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5TGFuZG1hcmtBbmNlc3Rv
cl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJp
bGl0eVRhYmxlQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgX2FjY2Vzc2liaWxpdHlGaWVsZHNldEFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRhYmxlQ2VsbFBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZVBhcmVudF0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjb252ZXJ0UmVjdFRv
U2NyZWVuU3BhY2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IGRldGFpbFBhcmVudEZvclN1bW1hcnlPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGRldGFpbFBhcmVudEZvck9iamVjdDpdKToKKyAgICAgICAgKG1h
dGNoZWRQYXJlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSk6
CisgICAgICAgIChjcmVhdGVBY2Nlc3NpYmlsaXR5Um9sZU1hcCk6CisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJvbGVEZXNjcmlwdGlvbl0pOgorICAgICAgICAoLVtX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
XSk6CisKIDIwMTYtMTAtMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV2ViIElETF0gRHJvcCBzdXBwb3J0IGZvciBsZWdhY3kgW0NvbnN0cnVjdG9yQ29uZGl0
aW9uYWw9Kl0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDU3LDExICs0NTcsOSBAQCBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YmxvY2txdW90ZUxl
dmVsCiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9i
amVjdFVuaWdub3JlZCgpIGNvbnN0CiB7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50
OwotICAgIGZvciAocGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IHBhcmVudCAmJiBwYXJlbnQtPmFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkg
ewotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcGFyZW50OworICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+
KHRoaXMpLCBmYWxzZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAg
ICByZXR1cm4gIW9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOworICAgIH0pOwogfQog
CiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91c1NpYmxp
bmdVbmlnbm9yZWQoaW50IGxpbWl0KSBjb25zdApAQCAtMTY5NiwxMCArMTY5NCwxMCBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTCiAgICAgCiBTY3JvbGxWaWV3KiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxWaWV3QW5jZXN0b3IoKSBjb25zdAogewotICAgIGZv
ciAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogc2Nyb2xsUGFyZW50ID0gdGhpczsgc2Nyb2xs
UGFyZW50OyBzY3JvbGxQYXJlbnQgPSBzY3JvbGxQYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0g
ICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnNjcm9sbFBhcmVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpzY3Jv
bGxQYXJlbnQpLnNjcm9sbFZpZXcoKTsKLSAgICB9CisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHNjcm9sbFBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQoY29u
c3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4odGhpcyksIHRydWUsIFtdIChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlTY3Jv
bGxWaWV3Pigqb2JqZWN0KTsKKyAgICB9KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3Pigqc2Nyb2xsUGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNzkwLDkgKzE3ODgsMjAgQEAgQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IHJlbmRlck9iamVjdC0+ZG9j
dW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlck9iamVjdCk7Ci0gICAg
Zm9yICg7IGF4T2JqZWN0ICYmIGF4T2JqZWN0LT5yb2xlVmFsdWUoKSAhPSBIZWFkaW5nUm9sZTsg
YXhPYmplY3QgPSBheE9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsgfQogICAgIAotICAgIHJldHVy
biBheE9iamVjdDsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVu
dChheE9iamVjdCwgdHJ1ZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAg
ICAgICByZXR1cm4gb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBIZWFkaW5nUm9sZTsKKyAgICB9KTsK
K30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBh
cmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jbHVkZVNlbGYsIGNvbnN0
IHN0ZDo6ZnVuY3Rpb248Ym9vbChBY2Nlc3NpYmlsaXR5T2JqZWN0Kik+JiBtYXRjaGVzKQorewor
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IGluY2x1ZGVTZWxmID8gb2JqZWN0IDog
b2JqZWN0LT5wYXJlbnRPYmplY3QoKTsKKyAgICBmb3IgKDsgcGFyZW50OyBwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtYXRjaGVzKHBhcmVudCkpCisgICAg
ICAgICAgICByZXR1cm4gKHBhcmVudCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwogfQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVlUm93cyhBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIHJlc3VsdCkKQEAgLTIwMzQsMTIgKzIwNDMsMTAgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojppc0Rlc2NlbmRhbnRPZgogewogICAgIGlmICghYXhPYmplY3QgfHwgIWF4
T2JqZWN0LT5oYXNDaGlsZHJlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3Ig
KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJl
bnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKHBhcmVu
dCA9PSBheE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQ
YXJlbnQoY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4odGhpcyksIGZhbHNlLCBbYXhP
YmplY3RdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9i
amVjdCA9PSBheE9iamVjdDsKKyAgICB9KSAhPSBudWxscHRyOwogfQogCiBib29sIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmlzQW5jZXN0b3JPZk9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBheE9iamVjdCkgY29uc3QKQEAgLTIzMDcsMTIgKzIzMTQsOSBAQCBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmlzSW5zaWRlQVJJQUxpCiAgICAgaWYgKHN1cHBvcnRzQVJJQUxpdmVSZWdpb24o
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBheFBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBheFBhcmVudDsgYXhQYXJlbnQgPSBheFBh
cmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKGF4UGFyZW50LT5zdXBwb3J0c0FS
SUFMaXZlUmVnaW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVk
UGFyZW50KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpLCBmYWxzZSwgW10g
KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LT5z
dXBwb3J0c0FSSUFMaXZlUmVnaW9uKCk7CisgICAgfSkgIT0gbnVsbHB0cjsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0FSSUFBdHRyaWJ1dGVzKCkgY29uc3QKQEAgLTI0
NzgsNiArMjQ4MiwxNCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzRXhwYW5kZWQoKSBj
CiAgICAgaWYgKGlzPEhUTUxEZXRhaWxzRWxlbWVudD4obm9kZSgpKSkKICAgICAgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxEZXRhaWxzRWxlbWVudD4obm9kZSgpKS0+aXNPcGVuKCk7CiAgICAgCisg
ICAgLy8gU3VtbWFyeSBlbGVtZW50IHNob3VsZCB1c2UgaXRzIGRldGFpbHMgcGFyZW50J3MgZXhw
YW5kZWQgc3RhdHVzLgorICAgIGlmIChpc1N1bW1hcnkoKSkgeworICAgICAgICBpZiAoQWNjZXNz
aWJpbGl0eU9iamVjdCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVu
dChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKSwgZmFsc2UsIFtdIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QtPnJv
bGVWYWx1ZSgpID09IERldGFpbHNSb2xlOworICAgICAgICB9KSkKKyAgICAgICAgICAgIHJldHVy
biBwYXJlbnQtPmlzRXhwYW5kZWQoKTsKKyAgICB9CisgICAgCiAgICAgcmV0dXJuIGZhbHNlOyAg
CiB9CiAKQEAgLTI5MzQsMTEgKzI5NDYsOSBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFj
Y2Vzc2liaWxpdHlJCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS90ZXJtcyNkZWZf
aGlkZGVuCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUhpZGRlbigpIGNvbnN0CiB7
Ci0gICAgZm9yIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QgPSB0aGlzOyBvYmpl
Y3Q7IG9iamVjdCA9IG9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG9iamVjdC0+Z2V0QXR0cmlidXRlKGFyaWFfaGlkZGVu
QXR0ciksICJ0cnVlIikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50
KGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KHRoaXMpLCB0cnVlLCBbXSAoQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShvYmplY3QtPmdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpLCAidHJ1
ZSIpOworICAgIH0pICE9IG51bGxwdHI7CiB9CiAKIC8vIERPTSBjb21wb25lbnQgb2YgaGlkZGVu
IGRlZmluaXRpb24uCkBAIC0zMDM1LDI2ICszMDQ1LDE2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6c2V0UHJldmVudEtleWIKIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eU9iamVjdDo6Zm9jdXNhYmxlQW5jZXN0b3IoKQogewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yID0gdGhpczsKLSAgICB3aGlsZSAocG90ZW50aWFs
Rm9jdXNhYmxlQW5jZXN0b3IpIHsKLSAgICAgICAgaWYgKHBvdGVudGlhbEZvY3VzYWJsZUFuY2Vz
dG9yLT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlh
bEZvY3VzYWJsZUFuY2VzdG9yOwotICAgICAgICBwb3RlbnRpYWxGb2N1c2FibGVBbmNlc3RvciA9
IHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yLT5wYXJlbnRPYmplY3QoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hl
ZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKSwgdHJ1ZSwgW10g
KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LT5j
YW5TZXRGb2N1c0F0dHJpYnV0ZSgpOworICAgIH0pOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplZGl0YWJsZUFuY2VzdG9yKCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwb3RlbnRpYWxFZGl0YWJsZUFuY2VzdG9yID0gdGhpczsKLSAgICB3aGls
ZSAocG90ZW50aWFsRWRpdGFibGVBbmNlc3RvcikgewotICAgICAgICBpZiAocG90ZW50aWFsRWRp
dGFibGVBbmNlc3Rvci0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIHBvdGVu
dGlhbEVkaXRhYmxlQW5jZXN0b3I7Ci0gICAgICAgIHBvdGVudGlhbEVkaXRhYmxlQW5jZXN0b3Ig
PSBwb3RlbnRpYWxFZGl0YWJsZUFuY2VzdG9yLT5wYXJlbnRPYmplY3QoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hl
ZFBhcmVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPih0aGlzKSwgdHJ1ZSwgW10g
KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LT5p
c1RleHRDb250cm9sKCk7CisgICAgfSk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZp
c2lvbiAyMDcyNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzU3Vic2NyaXB0U3R5bGVHcm91cCgpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBlcnNj
cmlwdFN0eWxlR3JvdXAoKSBjb25zdDsKICAgICBib29sIGlzRmlndXJlKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1N1bW1hcnkoKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBTdW1tYXJ5Um9s
ZTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMTA2Miw2ICsxMDYzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoaWdoZXN0
RWRpdGFibGVBbmNlc3RvcigpOwogICAgIAorICAgIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBtYXRjaGVkUGFyZW50KEFjY2Vzc2liaWxpdHlPYmplY3QqLCBib29sIGluY2x1ZGVTZWxmLCBj
b25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woQWNjZXNzaWJpbGl0eU9iamVjdCopPiYpOworICAgIAog
cHJvdGVjdGVkOgogICAgIEFYSUQgbV9pZDsKICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgbV9jaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCShyZXZpc2lvbiAyMDcyNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTMxLDIyICsxMzEsNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIEFjY2Vz
CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE1hdGNoRnVuY3Rp
b24+Ci1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0Y2hlZFBhcmVudChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jbHVkZVNlbGYsIGNvbnN0IE1hdGNoRnVuY3Rpb24m
IG1hdGNoZXMpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gaW5jbHVkZVNlbGYgPyBvYmplY3Qg
OiBvYmplY3QtPnBhcmVudE9iamVjdCgpOwotICAgIGZvciAoOyBwYXJlbnQ7IHBhcmVudCA9IHBh
cmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKG1hdGNoZXMocGFyZW50KSkKLSAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRy
OwotfQotCi0KICNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5IFRleHQgTWFya2VyCiAKIEBpbnRl
cmZhY2UgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgOiBOU09iamVjdApAQCAtNTU0LDQwICs1
MzgsMzUgQEAgLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYgogICAgICAg
ICByZXR1cm4gcm9sZSA9PSBMaXN0Um9sZSB8fCByb2xlID09IExpc3RCb3hSb2xlOwogICAgIH07
CiAgICAgCi0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJl
bnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KG1fb2JqZWN0
LCBmYWxzZSwgbWF0Y2hGdW5jKSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwog
ICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNj
ZXNzaWJpbGl0eUxhbmRtYXJrQW5jZXN0b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtzZWxm
XSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgaWYgKEFjY2Vzc2liaWxpdHlP
YmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQobV9vYmpl
Y3QsIGZhbHNlLCBbc2VsZl0gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewogICAgICAg
ICByZXR1cm4gW3NlbGYgX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJrUm9sZTpvYmplY3QtPnJvbGVW
YWx1ZSgpXTsKLSAgICB9OwotICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJl
bnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKKyAgICB9KSkK
ICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJldHVybiBuaWw7CiB9CiAK
IC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eVRhYmxlQW5jZXN0
b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QpIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdC0+cm9sZVZhbHVlKCkgPT0gVGFibGVSb2xlIHx8
IG9iamVjdC0+cm9sZVZhbHVlKCkgPT0gR3JpZFJvbGU7Ci0gICAgfTsKICAgICAKLSAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFs
c2UsIG1hdGNoRnVuYykpCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBbXSAoQWNj
ZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QtPnJvbGVW
YWx1ZSgpID09IFRhYmxlUm9sZSB8fCBvYmplY3QtPnJvbGVWYWx1ZSgpID09IEdyaWRSb2xlOwor
ICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7CiAgICAgcmV0dXJuIG5p
bDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmlsaXR5Rmll
bGRzZXRBbmNlc3RvcgogewotICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCkgeworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgW10gKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewogICAgICAgICByZXR1cm4gb2JqZWN0LT5pc0Zp
ZWxkc2V0KCk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAgfSkp
CiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwogfQpA
QCAtMTA0MSwxMSArMTAyMCw5IEBAIC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUxhYmVsCiAt
IChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKil0YWJsZUNlbGxQYXJlbnQKIHsKICAgICAvLyBGaW5k
IGlmIHRoaXMgZWxlbWVudCBpcyBpbiBhIHRhYmxlIGNlbGwuCi0gICAgYXV0byBtYXRjaEZ1bmMg
PSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7CisgICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQobV9v
YmplY3QsIHRydWUsIFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKICAgICAgICAg
cmV0dXJuIG9iamVjdC0+aXNUYWJsZUNlbGwoKTsKLSAgICB9OwotICAgIAotICAgIGlmIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCB0cnVlLCBt
YXRjaEZ1bmMpKQorICAgIH0pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTEwNTMsMTEg
KzEwMzAsOSBAQCAtIChBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKil0YWJsZUNlbGxQYXJlCiAtIChB
Y2Nlc3NpYmlsaXR5VGFibGUqKXRhYmxlUGFyZW50CiB7CiAgICAgLy8gRmluZCBpZiB0aGUgcGFy
ZW50IHRhYmxlIGZvciB0aGUgdGFibGUgY2VsbC4KLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKKyAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChtX29iamVjdCwg
dHJ1ZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewogICAgICAgICByZXR1cm4g
aXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGU+KCpvYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsKLSAgICB9
OwotICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFy
ZW50KG1fb2JqZWN0LCB0cnVlLCBtYXRjaEZ1bmMpKQorICAgIH0pKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlKj4ocGFyZW50KTsKICAgICByZXR1cm4gbmls
OwogfQpAQCAtMTQyNiwxMiArMTQwMSwxMCBAQCAtIChDR1BvaW50KWNvbnZlcnRQb2ludFRvU2Ny
ZWVuU3BhY2U6KEZsCiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvLyBGaW5kIHRoZSBhcHBy
b3ByaWF0ZSBzY3JvbGwgdmlldyB0byB1c2UgdG8gY29udmVydCB0aGUgY29udGVudHMgdG8gdGhl
IHdpbmRvdy4KLSAgICAgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0KSB7Ci0gICAgICAgICAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXc+KCpvYmplY3QpOwotICAgICAgICB9OwotICAgICAgICAKICAgICAgICAgU2Nyb2xsVmlldyog
c2Nyb2xsVmlldyA9IG51bGxwdHI7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVu
dCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpOworICAgICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVk
UGFyZW50KG1fb2JqZWN0LCBmYWxzZSwgW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkg
eworICAgICAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqb2JqZWN0
KTsKKyAgICAgICAgfSk7CiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBzY3JvbGxW
aWV3ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZp
ZXcoKTsKICAgICAgICAgCkBAIC0xNDgwLDEyICsxNDUzLDEwIEBAIC0gKENHUmVjdCljb252ZXJ0
UmVjdFRvU2NyZWVuU3BhY2U6KEludFIKICAgICAgICAgCiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRvIGNvbnZlcnQgdGhl
IGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCi0gICAgICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewotICAgICAgICAgICAgcmV0dXJuIGlzPEFjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3Pigqb2JqZWN0KTsKLSAgICAgICAgfTsKLQogICAgICAgICBTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3ID0gbnVsbHB0cjsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYyk7Cisg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6
Om1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCog
b2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gaXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+
KCpvYmplY3QpOworICAgICAgICB9KTsKICAgICAgICAgaWYgKHBhcmVudCkKICAgICAgICAgICAg
IHNjcm9sbFZpZXcgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKnBhcmVudCku
c2Nyb2xsVmlldygpOwogICAgICAgICAKQEAgLTE4NTUsMTEgKzE4MjYsOSBAQCAtIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KilkZXRhaWxQYXJlbnRGb3JTCiB7CiAgICAgLy8gVXNlIHRoaXMgdG8gY2hl
Y2sgaWYgYW4gb2JqZWN0IGlzIHRoZSBjaGlsZCBvZiBhIHN1bW1hcnkgb2JqZWN0LgogICAgIC8v
IEFuZCByZXR1cm4gdGhlIHN1bW1hcnkncyBwYXJlbnQsIHdoaWNoIGlzIHRoZSBleHBhbmRhYmxl
IGRldGFpbHMgb2JqZWN0LgotICAgIGF1dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlP
YmplY3QqIG9iamVjdCkgeworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzdW1tYXJ5ID0g
QWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudChvYmplY3QsIHRydWUsIFtdIChBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKICAgICAgICAgcmV0dXJuIG9iamVjdC0+aGFzVGFn
TmFtZShzdW1tYXJ5VGFnKTsKLSAgICB9OwotICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBzdW1tYXJ5ID0gbWF0Y2hlZFBhcmVudChvYmplY3QsIHRydWUsIG1hdGNoRnVuYykpCisg
ICAgfSkpCiAgICAgICAgIHJldHVybiBzdW1tYXJ5LT5wYXJlbnRPYmplY3QoKTsKICAgICByZXR1
cm4gbmlsOwogfQpAQCAtMTg2NywxMSArMTgzNiw5IEBAIC0gKEFjY2Vzc2liaWxpdHlPYmplY3Qq
KWRldGFpbFBhcmVudEZvclMKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3QqKWRldGFpbFBhcmVudEZv
ck9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopb2JqZWN0CiB7CiAgICAgLy8gVXNlIHRoaXMg
dG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGluc2lkZSBhIGRldGFpbHMgb2JqZWN0LgotICAgIGF1
dG8gbWF0Y2hGdW5jID0gW10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgeworICAgIGlm
IChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkZXRhaWxzID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0
Y2hlZFBhcmVudChvYmplY3QsIHRydWUsIFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Qp
IHsKICAgICAgICAgcmV0dXJuIG9iamVjdC0+aGFzVGFnTmFtZShkZXRhaWxzVGFnKTsKLSAgICB9
OwotICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkZXRhaWxzID0gbWF0Y2hlZFBh
cmVudChvYmplY3QsIHRydWUsIG1hdGNoRnVuYykpCisgICAgfSkpCiAgICAgICAgIHJldHVybiBk
ZXRhaWxzOwogICAgIHJldHVybiBuaWw7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0MTAsNyArMTQxMCw3IEBAIC0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nl
c3NpYmlsaXR5QXR0cmkKICAgICBpZiAobV9vYmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpCiAgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07
CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkpCisgICAgaWYgKG1f
b2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkgfHwgbV9vYmplY3QtPmlzU3VtbWFyeSgpKQogICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1
dGVdOwogICAgIAogICAgIGlmIChtX29iamVjdC0+aXNTY3JvbGxiYXIoKQpAQCAtMjIwNyw3ICsy
MjA3LDcgQEAgc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxpdHlSb2xlTWFwJiBjcmVhdAogICAgICAg
ICB7IFJ1YnlSdW5Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBS
dWJ5VGV4dFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAogICAgICAgICB7IERldGFp
bHNSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBTdW1tYXJ5Um9s
ZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgU3VtbWFyeVJvbGUsIE5T
QWNjZXNzaWJpbGl0eUJ1dHRvblJvbGUgfSwKICAgICAgICAgeyBTVkdUZXh0UGF0aFJvbGUsIE5T
QWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAogICAgICAgICB7IFNWR1RleHRSb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBTVkdUU3BhblJvbGUsIE5TQWNjZXNzaWJp
bGl0eUdyb3VwUm9sZSB9LApAQCAtMjQ5NCw4ICsyNDk0LDYgQEAgLSAoTlNTdHJpbmcqKXJvbGVE
ZXNjcmlwdGlvbgogICAgICAgICAgICAgcmV0dXJuIEFYRGV0YWlsc1RleHQoKTsKICAgICAgICAg
Y2FzZSBGb290ZXJSb2xlOgogICAgICAgICAgICAgcmV0dXJuIEFYRm9vdGVyUm9sZURlc2NyaXB0
aW9uVGV4dCgpOwotICAgICAgICBjYXNlIFN1bW1hcnlSb2xlOgotICAgICAgICAgICAgcmV0dXJu
IEFYU3VtbWFyeVRleHQoKTsKICAgICAgICAgY2FzZSBWaWRlb1JvbGU6CiAgICAgICAgICAgICBy
ZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZygiVmlkZW9FbGVtZW50Iik7
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNTM1LDYgKzI1MzMsOSBAQCAtIChOU1N0cmluZyopcm9s
ZURlc2NyaXB0aW9uCiAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkKICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihAIkFYVGFiIiwgbmlsKTsKICAgICAK
KyAgICBpZiAobV9vYmplY3QtPmlzU3VtbWFyeSgpKQorICAgICAgICByZXR1cm4gQVhTdW1tYXJ5
VGV4dCgpOworICAgIAogICAgIC8vIFdlIHNob3VsZCB0cnkgdGhlIHN5c3RlbSBkZWZhdWx0IHJv
bGUgZGVzY3JpcHRpb24gZm9yIGFsbCBvdGhlciByb2xlcy4KICAgICAvLyBJZiB3ZSBnZXQgdGhl
IHNhbWUgc3RyaW5nIGJhY2ssIHRoZW4gYXMgYSBsYXN0IHJlc29ydCwgcmV0dXJuIHVua25vd24u
CiAgICAgTlNTdHJpbmcqIGRlZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlS
b2xlRGVzY3JpcHRpb24oYXhSb2xlLCBbc2VsZiBzdWJyb2xlXSk7CkBAIC0yNzU3LDYgKzI3NTgs
MTAgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICBp
ZiAobV9vYmplY3QtPmlzTWV0ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nXTsKICAgICAgICAgCisgICAgICAgIC8vIFN1bW1hcnkgZWxlbWVudCBzaG91bGQgdXNlIGl0
cyB0ZXh0IG5vZGUgYXMgQVhUaXRsZS4KKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1N1bW1hcnko
KSkKKyAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOworICAg
ICAgICAKICAgICAgICAgcmV0dXJuIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5VGl0bGVdOwogICAg
IH0KICAgICAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTEwLTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0
aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1
bW1hcnktcm9sZS1kZXNjcmlwdGlvbi5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L2RldGFpbHMtc3VtbWFyeS5odG1sOgorCiAyMDE2LTEwLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogc3RlcC1pbnRvIGBj
b25zb2xlLmxvZyhvKWAgc2hvdWxkIG5vdCBzdGVwIHRocm91Z2ggaW5zcGVjdG9yIGphdmFzY3Jp
cHQKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
ZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjA3MjY4KQorKysgTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTAsMTMgKzEwLDE4IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEEKIFBBU1MgZGV0YWlsczEucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3VwJwog
UEFTUyBkZXRhaWxzMS5zdWJyb2xlIGlzICdBWFN1YnJvbGU6IEFYRGV0YWlscycKIFBBU1MgZGV0
YWlsczEuaXNFeHBhbmRlZCBpcyB0cnVlCi1QQVNTIGRldGFpbHMxLmNoaWxkQXRJbmRleCgwKS5y
b2xlIGlzICdBWFJvbGU6IEFYR3JvdXAnCi1QQVNTIGRldGFpbHMxLmNoaWxkQXRJbmRleCgwKS5z
dWJyb2xlIGlzICdBWFN1YnJvbGU6IEFYU3VtbWFyeScKK1BBU1Mgc3VtbWFyeTEucm9sZSBpcyAn
QVhSb2xlOiBBWEJ1dHRvbicKK1BBU1Mgc3VtbWFyeTEuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBB
WFN1bW1hcnknCitQQVNTIHN1bW1hcnkxLnRpdGxlIGlzICdBWFRpdGxlOiBTb21lIG9wZW4gaW5m
bycKIFBBU1MgZGV0YWlsczEuaXNBdHRyaWJ1dGVTZXR0YWJsZSgnQVhFeHBhbmRlZCcpIGlzIHRy
dWUKIFBBU1MgZGV0YWlsczEuaXNFeHBhbmRlZCBpcyBmYWxzZQorUEFTUyBzdW1tYXJ5MS5pc0V4
cGFuZGVkIGlzIGZhbHNlCiBQQVNTIGRldGFpbHMxLmlzRXhwYW5kZWQgaXMgZmFsc2UKK1BBU1Mg
c3VtbWFyeTEuaXNFeHBhbmRlZCBpcyBmYWxzZQogUEFTUyBkZXRhaWxzMS5pc0V4cGFuZGVkIGlz
IHRydWUKK1BBU1Mgc3VtbWFyeTEuaXNFeHBhbmRlZCBpcyB0cnVlCiBQQVNTIGRldGFpbHMxLmlz
RXhwYW5kZWQgaXMgdHJ1ZQorUEFTUyBzdW1tYXJ5MS5pc0V4cGFuZGVkIGlzIHRydWUKIFBBU1Mg
ZGV0YWlsczIuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCiBQQVNTIGRldGFpbHMy
LmlzRXhwYW5kZWQgaXMgZmFsc2UKIFJlY2VpdmVkIEFYRXhwYW5kZWRDaGFuZ2VkIG5vdGlmaWNh
dGlvbiAKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFy
eS1yb2xlLWRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAgVGhpcyB0ZXN0cyB0aGF0IHN1bW1hcnkgYW5kIGRldGFp
bCBlbGVtZQogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1Mgc3VtbWFyeS5yb2xl
IGlzICdBWFJvbGU6IEFYR3JvdXAnCitQQVNTIHN1bW1hcnkucm9sZSBpcyAnQVhSb2xlOiBBWEJ1
dHRvbicKIFBBU1MgZGV0YWlscy5yb2xlIGlzICdBWFJvbGU6IEFYR3JvdXAnCiBQQVNTIHN1bW1h
cnkuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWFN1bW1hcnknCiBQQVNTIGRldGFpbHMuc3Vicm9s
ZSBpcyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRl
c2NyaXB0aW9uLmh0bWwJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9uLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTE5LDcgKzE5LDcgQEAKICAgICAgICAgICB2YXIgc3VtbWFyeSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3VtbWFyeSIpOwogICAgICAg
ICAgIHZhciBkZXRhaWxzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJkZXRhaWxzIik7CiAgICAgICAgICAKLSAgICAgICAgICBzaG91bGRCZSgic3VtbWFy
eS5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CisgICAgICAgICAgc2hvdWxkQmUoInN1bW1h
cnkucm9sZSIsICInQVhSb2xlOiBBWEJ1dHRvbiciKTsKICAgICAgICAgICBzaG91bGRCZSgiZGV0
YWlscy5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CiAgICAgICAgICAgc2hvdWxkQmUoInN1
bW1hcnkuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWFN1bW1hcnknIik7CiAgICAgICAgICAgc2hv
dWxkQmUoImRldGFpbHMuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWERldGFpbHMnIik7CkluZGV4
OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnkuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnku
aHRtbAkocmV2aXNpb24gMjA3MjY4KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
ZGV0YWlscy1zdW1tYXJ5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiA8Ym9k
eSBpZD0iYm9keSI+CiAKIDxkZXRhaWxzIG9wZW4gaWQ9ImRldGFpbHMxIj4KLSAgPHN1bW1hcnk+
U29tZSBvcGVuIGluZm88L3N1bW1hcnk+CisgIDxzdW1tYXJ5IGlkPSJzdW1tYXJ5MSI+U29tZSBv
cGVuIGluZm88L3N1bW1hcnk+CiAgIDxwPkRldGFpbHMgYWJvdXQgdGhlIG9wZW4gdG9waWMuPC9w
PgogPC9kZXRhaWxzPgogCkBAIC0zOSwzMiArMzksNDIgQEAKICAgICAgICAgfSk7CiAKICAgICAg
ICAgdmFyIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJkZXRhaWxzMSIpOworICAgICAgICB2YXIgc3VtbWFyeTEgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkxIik7CiAgICAgICAgIHNo
b3VsZEJlKCJkZXRhaWxzMS5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CiAgICAgICAgIHNo
b3VsZEJlKCJkZXRhaWxzMS5zdWJyb2xlIiwgIidBWFN1YnJvbGU6IEFYRGV0YWlscyciKTsKICAg
ICAgICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxzMS5pc0V4cGFuZGVkIik7Ci0gICAgICAgIHNob3Vs
ZEJlKCJkZXRhaWxzMS5jaGlsZEF0SW5kZXgoMCkucm9sZSIsICInQVhSb2xlOiBBWEdyb3VwJyIp
OwotICAgICAgICBzaG91bGRCZSgiZGV0YWlsczEuY2hpbGRBdEluZGV4KDApLnN1YnJvbGUiLCAi
J0FYU3Vicm9sZTogQVhTdW1tYXJ5JyIpOworICAgICAgICBzaG91bGRCZSgic3VtbWFyeTEucm9s
ZSIsICInQVhSb2xlOiBBWEJ1dHRvbiciKTsKKyAgICAgICAgc2hvdWxkQmUoInN1bW1hcnkxLnN1
YnJvbGUiLCAiJ0FYU3Vicm9sZTogQVhTdW1tYXJ5JyIpOworICAgICAgICBzaG91bGRCZSgic3Vt
bWFyeTEudGl0bGUiLCAiJ0FYVGl0bGU6IFNvbWUgb3BlbiBpbmZvJyIpOwogICAgICAgICBzaG91
bGRCZVRydWUoImRldGFpbHMxLmlzQXR0cmlidXRlU2V0dGFibGUoJ0FYRXhwYW5kZWQnKSIpOwog
CiAgICAgICAgIC8vIFRvZ2dsZSB0aGUgZXhwYW5kZWQgc3RhdGUuCiAgICAgICAgIGRldGFpbHMx
LnNldEJvb2xBdHRyaWJ1dGVWYWx1ZSgiQVhFeHBhbmRlZCIsIGZhbHNlKTsKICAgICAgICAgZGV0
YWlsczEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRl
dGFpbHMxIik7CisgICAgICAgIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZUZhbHNlKCJk
ZXRhaWxzMS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoInN1bW1hcnkxLmlz
RXhwYW5kZWQiKTsKIAogICAgICAgICAvLyBHaXZlIGl0IHRoZSBzYW1lIHZhbHVlIHRvIG1ha2Ug
c3VyZSB3ZSBkb24ndCBleHBhbmQuCiAgICAgICAgIGRldGFpbHMxLnNldEJvb2xBdHRyaWJ1dGVW
YWx1ZSgiQVhFeHBhbmRlZCIsIGZhbHNlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAgICAg
IHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlk
KCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZUZhbHNlKCJkZXRhaWxzMS5pc0V4cGFuZGVk
Iik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoInN1bW1hcnkxLmlzRXhwYW5kZWQiKTsKIAogICAg
ICAgICAvLyBTZXQgdG8gZXhwYW5kIGFnYWluLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0
cmlidXRlVmFsdWUoIkFYRXhwYW5kZWQiLCB0cnVlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7Cisg
ICAgICAgIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZVRydWUoImRldGFpbHMxLmlzRXhw
YW5kZWQiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAK
ICAgICAgICAgLy8gQW5kIGR1cGxpY2F0ZSB0aGUgdHJ1ZSBzdGF0ZSB0byBtYWtlIHN1cmUgaXQg
ZG9lc24ndCB0b2dnbGUgb2ZmLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0cmlidXRlVmFs
dWUoIkFYRXhwYW5kZWQiLCB0cnVlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAgICAgIHN1
bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJz
dW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZVRydWUoImRldGFpbHMxLmlzRXhwYW5kZWQiKTsK
KyAgICAgICAgc2hvdWxkQmVUcnVlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAKICAgICAgICAg
dmFyIGRldGFpbHMyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJkZXRhaWxzMiIpOwogICAgICAgICBzaG91bGRCZSgiZGV0YWlsczIuc3Vicm9sZSIsICIn
QVhTdWJyb2xlOiBBWERldGFpbHMnIik7Cg==
</data>
<flag name="review"
          id="314610"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291515</attachid>
            <date>2016-10-13 14:15:43 -0700</date>
            <delta_ts>2016-10-13 15:54:55 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26872</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzMwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTEwLTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwb3NlZCBzdW1tYXJ5IGVsZW1lbnRzIGFzIEFYQnV0dG9uIGFuZCB1c2VkIHRoZSB0
ZXh0IG5vZGUncyBjb250ZW50CisgICAgICAgIGFzIEFYVGl0bGUuIEFsc28gZXhwb3NlZCB0aGUg
ZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMgb24gdGhlIHN1bW1hcnkKKyAgICAgICAg
ZWxlbWVudCwgc28gdGhhdCB1c2VycyB3b3VsZCBzZWUgaXQgYXMgYSBjb2xsYXBzZWQvZXhwYW5k
ZWQgYnV0dG9uLgorCisgICAgICAgIENoYW5nZXMgYXJlIGNvdmVyZWQgaW4gdGhlIG1vZGlmaWVk
IHRlc3RzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmVudE9iamVjdFVu
aWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzY3JvbGxW
aWV3QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVh
ZGluZ0VsZW1lbnRGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6aXNEZXNjZW5kYW50T2ZPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6aXNJbnNpZGVBUklBTGl2ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjplbGVtZW50QWNjZXNzaWJpbGl0eUhpdFRlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aXNFeHBhbmRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFIaWRkZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6Zm9jdXNhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZWRpdGFibGVBbmNlc3Rvcik6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc1N1bW1hcnkpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUxpc3RBbmNlc3Rvcl0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eUxh
bmRtYXJrQW5jZXN0b3JdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgX2FjY2Vzc2liaWxpdHlUYWJsZUFuY2VzdG9yXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5RmllbGRzZXRBbmNlc3Rvcl0pOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0YWJsZUNlbGxQYXJlbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGFibGVQYXJlbnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY29udmVydFBvaW50VG9T
Y3JlZW5TcGFjZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
Y29udmVydFJlY3RUb1NjcmVlblNwYWNlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBkZXRhaWxQYXJlbnRGb3JTdW1tYXJ5T2JqZWN0Ol0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkZXRhaWxQYXJlbnRGb3JPYmplY3Q6XSk6
CisgICAgICAgIChtYXRjaGVkUGFyZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRy
aWJ1dGVOYW1lc10pOgorICAgICAgICAoY3JlYXRlQWNjZXNzaWJpbGl0eVJvbGVNYXApOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByb2xlRGVzY3JpcHRpb25dKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOl0pOgorCiAyMDE2LTEwLTEzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRGlzYWJsZSBVUkxQYXJzZXIgZm9yIG5vbi1T
YWZhcmkgaU9TIGFuZCBNYWMgYXBwcyBmb3Igbm93CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NzI2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NywxMSArNDU3LDkgQEAgaW50IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmJsb2NrcXVvdGVMZXZlbAogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpwYXJlbnRPYmplY3RVbmlnbm9yZWQoKSBjb25zdAogewotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudDsKLSAgICBmb3IgKHBhcmVudCA9IHBhcmVudE9iamVjdCgp
OyBwYXJlbnQgJiYgcGFyZW50LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7IHBhcmVudCA9IHBh
cmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBhcmVudDsK
KyAgICByZXR1cm4gY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4oQWNjZXNzaWJpbGl0
eU9iamVjdDo6bWF0Y2hlZFBhcmVudCgqdGhpcywgZmFsc2UsIFtdIChjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuICFvYmplY3QuYWNjZXNzaWJpbGl0
eUlzSWdub3JlZCgpOworICAgIH0pKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nVW5pZ25vcmVkKGludCBsaW1pdCkgY29uc3QK
QEAgLTE2OTYsMTAgKzE2OTQsMTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVC
YWNraW5nUwogICAgIAogU2Nyb2xsVmlldyogQWNjZXNzaWJpbGl0eU9iamVjdDo6c2Nyb2xsVmll
d0FuY2VzdG9yKCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHNjcm9sbFBhcmVudCA9IHRoaXM7IHNjcm9sbFBhcmVudDsgc2Nyb2xsUGFyZW50ID0gc2Nyb2xs
UGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXc+KCpzY3JvbGxQYXJlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqc2Nyb2xsUGFyZW50KS5zY3JvbGxWaWV3KCk7Ci0gICAg
fQorICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzY3JvbGxQYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KCp0aGlzLCB0cnVlLCBbXSAoY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldz4ob2JqZWN0KTsKKyAgICB9KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqc2Nyb2xsUGFyZW50KS5zY3JvbGxWaWV3KCk7CiAg
ICAgCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xNzkwLDkgKzE3ODgsMjAgQEAgQWNjZXNz
aWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IHJlbmRlck9iamVj
dC0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlck9iamVjdCk7
Ci0gICAgZm9yICg7IGF4T2JqZWN0ICYmIGF4T2JqZWN0LT5yb2xlVmFsdWUoKSAhPSBIZWFkaW5n
Um9sZTsgYXhPYmplY3QgPSBheE9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsgfQogICAgIAotICAg
IHJldHVybiBheE9iamVjdDsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Kj4oQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudCgqYXhPYmplY3QsIHRydWUs
IFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJu
IG9iamVjdC5yb2xlVmFsdWUoKSA9PSBIZWFkaW5nUm9sZTsKKyAgICB9KSk7Cit9CisKK2NvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQo
Y29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0LCBib29sIGluY2x1ZGVTZWxmLCBjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYpPiYgbWF0Y2hl
cykKK3sKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBpbmNsdWRlU2Vs
ZiA/ICZvYmplY3QgOiBvYmplY3QucGFyZW50T2JqZWN0KCk7CisgICAgZm9yICg7IHBhcmVudDsg
cGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICBpZiAobWF0Y2hlcygq
cGFyZW50KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVlUm93cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJlc3VsdCkKQEAgLTIwMzQsMTIgKzIwNDMsMTAgQEAg
Ym9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0Rlc2NlbmRhbnRPZgogewogICAgIGlmICghYXhP
YmplY3QgfHwgIWF4T2JqZWN0LT5oYXNDaGlsZHJlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBmb3IgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9i
amVjdCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAg
ICAgaWYgKHBhcmVudCA9PSBheE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQoKnRoaXMsIGZhbHNlLCBbYXhPYmplY3RdIChjb25zdCBBY2Nlc3Np
YmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuICZvYmplY3QgPT0gYXhPYmpl
Y3Q7CisgICAgfSkgIT0gbnVsbHB0cjsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpp
c0FuY2VzdG9yT2ZPYmplY3QoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QpIGNv
bnN0CkBAIC0yMzA3LDEyICsyMzE0LDkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0lu
c2lkZUFSSUFMaQogICAgIGlmIChzdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIAotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogYXhQYXJlbnQg
PSBwYXJlbnRPYmplY3QoKTsgYXhQYXJlbnQ7IGF4UGFyZW50ID0gYXhQYXJlbnQtPnBhcmVudE9i
amVjdCgpKSB7Ci0gICAgICAgIGlmIChheFBhcmVudC0+c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudCgqdGhpcywg
ZmFsc2UsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICAgICAg
cmV0dXJuIG9iamVjdC5zdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCk7CisgICAgfSkgIT0gbnVsbHB0
cjsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0FSSUFBdHRyaWJ1dGVz
KCkgY29uc3QKQEAgLTIzNjQsNyArMjM2OCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlPYmplY3QKICAgICAgICAgICAgIHJldHVybiBjaGlsZC0+ZWxlbWVudEFjY2Vzc2li
aWxpdHlIaXRUZXN0KHBvaW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gY29uc3RfY2FzdDxBY2Nl
c3NpYmlsaXR5T2JqZWN0Kj4odGhpcyk7IAorICAgIHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2li
aWxpdHlPYmplY3QqPih0aGlzKTsKIH0KICAgICAKIEFYT2JqZWN0Q2FjaGUqIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdApAQCAtMjQ3OCw2ICsyNDgyLDE0IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNFeHBhbmRlZCgpIGMKICAgICBpZiAoaXM8SFRNTERl
dGFpbHNFbGVtZW50Pihub2RlKCkpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTERldGFp
bHNFbGVtZW50Pihub2RlKCkpLT5pc09wZW4oKTsKICAgICAKKyAgICAvLyBTdW1tYXJ5IGVsZW1l
bnQgc2hvdWxkIHVzZSBpdHMgZGV0YWlscyBwYXJlbnQncyBleHBhbmRlZCBzdGF0dXMuCisgICAg
aWYgKGlzU3VtbWFyeSgpKSB7CisgICAgICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KCp0aGlzLCBmYWxz
ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgICAgICAgICAg
cmV0dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9PSBEZXRhaWxzUm9sZTsKKyAgICAgICAgfSkpCisg
ICAgICAgICAgICByZXR1cm4gcGFyZW50LT5pc0V4cGFuZGVkKCk7CisgICAgfQorICAgIAogICAg
IHJldHVybiBmYWxzZTsgIAogfQogCkBAIC0yOTM0LDExICsyOTQ2LDkgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SQogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvd2Fp
LWFyaWEvdGVybXMjZGVmX2hpZGRlbgogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFI
aWRkZW4oKSBjb25zdAogewotICAgIGZvciAoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
ZWN0ID0gdGhpczsgb2JqZWN0OyBvYmplY3QgPSBvYmplY3QtPnBhcmVudE9iamVjdCgpKSB7Ci0g
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShvYmplY3QtPmdldEF0dHJp
YnV0ZShhcmlhX2hpZGRlbkF0dHIpLCAidHJ1ZSIpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVj
dDo6bWF0Y2hlZFBhcmVudCgqdGhpcywgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmpl
Y3QmIG9iamVjdCkgeworICAgICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2Uob2JqZWN0LmdldEF0dHJpYnV0ZShhcmlhX2hpZGRlbkF0dHIpLCAidHJ1ZSIpOworICAgIH0p
ICE9IG51bGxwdHI7CiB9CiAKIC8vIERPTSBjb21wb25lbnQgb2YgaGlkZGVuIGRlZmluaXRpb24u
CkBAIC0zMDM1LDI2ICszMDQ1LDE2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0UHJl
dmVudEtleWIKIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6Zm9j
dXNhYmxlQW5jZXN0b3IoKQogewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBvdGVudGlhbEZv
Y3VzYWJsZUFuY2VzdG9yID0gdGhpczsKLSAgICB3aGlsZSAocG90ZW50aWFsRm9jdXNhYmxlQW5j
ZXN0b3IpIHsKLSAgICAgICAgaWYgKHBvdGVudGlhbEZvY3VzYWJsZUFuY2VzdG9yLT5jYW5TZXRG
b2N1c0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbEZvY3VzYWJsZUFu
Y2VzdG9yOwotICAgICAgICBwb3RlbnRpYWxGb2N1c2FibGVBbmNlc3RvciA9IHBvdGVudGlhbEZv
Y3VzYWJsZUFuY2VzdG9yLT5wYXJlbnRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4oQWNjZXNz
aWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudCgqdGhpcywgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LmNhblNldEZv
Y3VzQXR0cmlidXRlKCk7CisgICAgfSkpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjplZGl0YWJsZUFuY2VzdG9yKCkKIHsKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwb3RlbnRpYWxFZGl0YWJsZUFuY2VzdG9yID0gdGhpczsKLSAgICB3aGlsZSAocG90
ZW50aWFsRWRpdGFibGVBbmNlc3RvcikgewotICAgICAgICBpZiAocG90ZW50aWFsRWRpdGFibGVB
bmNlc3Rvci0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICAgICAgcmV0dXJuIHBvdGVudGlhbEVk
aXRhYmxlQW5jZXN0b3I7Ci0gICAgICAgIHBvdGVudGlhbEVkaXRhYmxlQW5jZXN0b3IgPSBwb3Rl
bnRpYWxFZGl0YWJsZUFuY2VzdG9yLT5wYXJlbnRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4o
QWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudCgqdGhpcywgdHJ1ZSwgW10gKGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0Lmlz
VGV4dENvbnRyb2woKTsKKyAgICB9KSk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmhpZ2hlc3RFZGl0YWJsZUFuY2VzdG9yKCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZp
c2lvbiAyMDcyNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzU3Vic2NyaXB0U3R5bGVHcm91cCgpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBlcnNj
cmlwdFN0eWxlR3JvdXAoKSBjb25zdDsKICAgICBib29sIGlzRmlndXJlKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1N1bW1hcnkoKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBTdW1tYXJ5Um9s
ZTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMTA2Miw2ICsxMDYzLDggQEAgcHVibGljOgogICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGVkaXRhYmxlQW5jZXN0b3IoKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBoaWdoZXN0
RWRpdGFibGVBbmNlc3RvcigpOwogICAgIAorICAgIHN0YXRpYyBjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBtYXRjaGVkUGFyZW50KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmLCBib29sIGlu
Y2x1ZGVTZWxmLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgQWNjZXNzaWJpbGl0eU9i
amVjdCYpPiYpOworICAgIAogcHJvdGVjdGVkOgogICAgIEFYSUQgbV9pZDsKICAgICBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAyMDcyNjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDIyICsxMzEsNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIEFjY2VzCiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIE1hdGNoRnVuY3Rpb24+Ci1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0Y2hl
ZFBhcmVudChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jbHVkZVNlbGYsIGNv
bnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gaW5j
bHVkZVNlbGYgPyBvYmplY3QgOiBvYmplY3QtPnBhcmVudE9iamVjdCgpOwotICAgIGZvciAoOyBw
YXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKG1h
dGNoZXMocGFyZW50KSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi0KICNwcmFnbWEgbWFyayBBY2Nlc3NpYmlsaXR5IFRl
eHQgTWFya2VyCiAKIEBpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgOiBOU09i
amVjdApAQCAtNTQ5LDQ1ICs1MzMsNDAgQEAgLSAoQk9PTClfYWNjZXNzaWJpbGl0eUlzTGFuZG1h
cmtSb2xlOihBYwogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxp
dHlMaXN0QW5jZXN0b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG9iamVj
dC0+cm9sZVZhbHVlKCk7CisgICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBv
YmplY3Qucm9sZVZhbHVlKCk7CiAgICAgICAgIHJldHVybiByb2xlID09IExpc3RSb2xlIHx8IHJv
bGUgPT0gTGlzdEJveFJvbGU7CiAgICAgfTsKICAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9i
amVjdCogcGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykp
CisgICAgaWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxp
dHlPYmplY3Q6Om1hdGNoZWRQYXJlbnQoKm1fb2JqZWN0LCBmYWxzZSwgbWF0Y2hGdW5jKSkKICAg
ICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJldHVybiBuaWw7CiB9CiAKIC0g
KEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eUxhbmRtYXJrQW5jZXN0
b3IKIHsKLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtzZWxmXSAoQWNjZXNzaWJpbGl0eU9iamVjdCog
b2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBbc2VsZiBfYWNjZXNzaWJpbGl0eUlzTGFuZG1hcmtS
b2xlOm9iamVjdC0+cm9sZVZhbHVlKCldOwotICAgIH07Ci0gICAgCi0gICAgaWYgKEFjY2Vzc2li
aWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3QsIGZhbHNlLCBtYXRj
aEZ1bmMpKQorICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KCptX29iamVjdCwgZmFsc2UsIFtzZWxmXSAo
Y29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBbc2Vs
ZiBfYWNjZXNzaWJpbGl0eUlzTGFuZG1hcmtSb2xlOm9iamVjdC5yb2xlVmFsdWUoKV07CisgICAg
fSkpCiAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKICAgICByZXR1cm4gbmlsOwog
fQogCiAtIChBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlUYWJsZUFu
Y2VzdG9yCiB7Ci0gICAgYXV0byBtYXRjaEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCog
b2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBvYmplY3QtPnJvbGVWYWx1ZSgpID09IFRhYmxlUm9s
ZSB8fCBvYmplY3QtPnJvbGVWYWx1ZSgpID09IEdyaWRSb2xlOwotICAgIH07CiAgICAgCi0gICAg
aWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJlbnQobV9vYmplY3Qs
IGZhbHNlLCBtYXRjaEZ1bmMpKQorICAgIGlmIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
YXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KCptX29iamVjdCwgZmFs
c2UsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICAgICAgcmV0
dXJuIG9iamVjdC5yb2xlVmFsdWUoKSA9PSBUYWJsZVJvbGUgfHwgb2JqZWN0LnJvbGVWYWx1ZSgp
ID09IEdyaWRSb2xlOworICAgIH0pKQogICAgICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7
CiAgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9h
Y2Nlc3NpYmlsaXR5RmllbGRzZXRBbmNlc3RvcgogewotICAgIGF1dG8gbWF0Y2hGdW5jID0gW10g
KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewotICAgICAgICByZXR1cm4gb2JqZWN0LT5p
c0ZpZWxkc2V0KCk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgZmFsc2UsIG1hdGNoRnVuYykpCisgICAg
aWYgKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Om1hdGNoZWRQYXJlbnQoKm1fb2JqZWN0LCBmYWxzZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxp
dHlPYmplY3QmIG9iamVjdCkgeworICAgICAgICByZXR1cm4gb2JqZWN0LmlzRmllbGRzZXQoKTsK
KyAgICB9KSkKICAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwogICAgIHJldHVybiBu
aWw7CiB9CkBAIC0xMDQxLDExICsxMDIwLDkgQEAgLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5
TGFiZWwKIC0gKEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwqKXRhYmxlQ2VsbFBhcmVudAogewogICAg
IC8vIEZpbmQgaWYgdGhpcyBlbGVtZW50IGlzIGluIGEgdGFibGUgY2VsbC4KLSAgICBhdXRvIG1h
dGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpIHsKLSAgICAgICAgcmV0
dXJuIG9iamVjdC0+aXNUYWJsZUNlbGwoKTsKLSAgICB9OwotICAgIAotICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCB0cnVlLCBtYXRj
aEZ1bmMpKQorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBjb25zdF9jYXN0
PEFjY2Vzc2liaWxpdHlPYmplY3QqPihBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50
KCptX29iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkg
eworICAgICAgICByZXR1cm4gb2JqZWN0LmlzVGFibGVDZWxsKCk7CisgICAgfSkpKQogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCo+KHBhcmVudCk7CiAg
ICAgcmV0dXJuIG5pbDsKIH0KQEAgLTEwNTMsMTEgKzEwMzAsOSBAQCAtIChBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsKil0YWJsZUNlbGxQYXJlCiAtIChBY2Nlc3NpYmlsaXR5VGFibGUqKXRhYmxlUGFy
ZW50CiB7CiAgICAgLy8gRmluZCBpZiB0aGUgcGFyZW50IHRhYmxlIGZvciB0aGUgdGFibGUgY2Vs
bC4KLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Qp
IHsKLSAgICAgICAgcmV0dXJuIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKm9iamVjdCkgJiYgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqb2JqZWN0KS5pc0V4cG9zYWJsZVRocm91Z2hBY2Nl
c3NpYmlsaXR5KCk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50ID0gbWF0Y2hlZFBhcmVudChtX29iamVjdCwgdHJ1ZSwgbWF0Y2hGdW5jKSkKKyAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5
T2JqZWN0Kj4oQWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudCgqbV9vYmplY3QsIHRy
dWUsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsKKyAgICAgICAgcmV0
dXJuIGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4ob2JqZWN0KSAmJiBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KG9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOworICAg
IH0pKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KHBh
cmVudCk7CiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTE0MjYsMTIgKzE0MDEsMTAgQEAgLSAoQ0dQ
b2ludCljb252ZXJ0UG9pbnRUb1NjcmVlblNwYWNlOihGbAogICAgIH0KICAgICBlbHNlIHsKICAg
ICAgICAgLy8gRmluZCB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsIHZpZXcgdG8gdXNlIHRvIGNvbnZl
cnQgdGhlIGNvbnRlbnRzIHRvIHRoZSB3aW5kb3cuCi0gICAgICAgIGF1dG8gbWF0Y2hGdW5jID0g
W10gKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkgewotICAgICAgICAgICAgcmV0dXJuIGlz
PEFjY2Vzc2liaWxpdHlTY3JvbGxWaWV3Pigqb2JqZWN0KTsKLSAgICAgICAgfTsKLSAgICAgICAg
CiAgICAgICAgIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcgPSBudWxscHRyOwotICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtYXRjaGVkUGFyZW50KG1fb2JqZWN0LCBmYWxzZSwg
bWF0Y2hGdW5jKTsKKyAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
QWNjZXNzaWJpbGl0eU9iamVjdDo6bWF0Y2hlZFBhcmVudCgqbV9vYmplY3QsIGZhbHNlLCBbXSAo
Y29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm4g
aXM8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KG9iamVjdCk7CisgICAgICAgIH0pOwogICAgICAg
ICBpZiAocGFyZW50KQogICAgICAgICAgICAgc2Nyb2xsVmlldyA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlTY3JvbGxWaWV3PigqcGFyZW50KS5zY3JvbGxWaWV3KCk7CiAgICAgICAgIApAQCAtMTQ4
MCwxMiArMTQ1MywxMCBAQCAtIChDR1JlY3QpY29udmVydFJlY3RUb1NjcmVlblNwYWNlOihJbnRS
CiAgICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRl
IHNjcm9sbCB2aWV3IHRvIHVzZSB0byBjb252ZXJ0IHRoZSBjb250ZW50cyB0byB0aGUgd2luZG93
LgotICAgICAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QpIHsKLSAgICAgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4oKm9i
amVjdCk7Ci0gICAgICAgIH07Ci0KICAgICAgICAgU2Nyb2xsVmlldyogc2Nyb2xsVmlldyA9IG51
bGxwdHI7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1hdGNoZWRQYXJl
bnQobV9vYmplY3QsIGZhbHNlLCBtYXRjaEZ1bmMpOworICAgICAgICBjb25zdCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50KCpt
X29iamVjdCwgZmFsc2UsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsK
KyAgICAgICAgICAgIHJldHVybiBpczxBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldz4ob2JqZWN0KTsK
KyAgICAgICAgfSk7CiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBzY3JvbGxWaWV3
ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVNjcm9sbFZpZXc+KCpwYXJlbnQpLnNjcm9sbFZpZXco
KTsKICAgICAgICAgCkBAIC0xODU1LDExICsxODI2LDkgQEAgLSAoQWNjZXNzaWJpbGl0eU9iamVj
dCopZGV0YWlsUGFyZW50Rm9yUwogewogICAgIC8vIFVzZSB0aGlzIHRvIGNoZWNrIGlmIGFuIG9i
amVjdCBpcyB0aGUgY2hpbGQgb2YgYSBzdW1tYXJ5IG9iamVjdC4KICAgICAvLyBBbmQgcmV0dXJu
IHRoZSBzdW1tYXJ5J3MgcGFyZW50LCB3aGljaCBpcyB0aGUgZXhwYW5kYWJsZSBkZXRhaWxzIG9i
amVjdC4KLSAgICBhdXRvIG1hdGNoRnVuYyA9IFtdIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmpl
Y3QpIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdC0+aGFzVGFnTmFtZShzdW1tYXJ5VGFnKTsKLSAg
ICB9OwotICAgIAotICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzdW1tYXJ5ID0gbWF0Y2hl
ZFBhcmVudChvYmplY3QsIHRydWUsIG1hdGNoRnVuYykpCisgICAgaWYgKGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3QqIHN1bW1hcnkgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjptYXRjaGVkUGFyZW50
KCpvYmplY3QsIHRydWUsIFtdIChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpIHsK
KyAgICAgICAgcmV0dXJuIG9iamVjdC5oYXNUYWdOYW1lKHN1bW1hcnlUYWcpOworICAgIH0pKQog
ICAgICAgICByZXR1cm4gc3VtbWFyeS0+cGFyZW50T2JqZWN0KCk7CiAgICAgcmV0dXJuIG5pbDsK
IH0KQEAgLTE4NjcsMTIgKzE4MzYsMTAgQEAgLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopZGV0YWls
UGFyZW50Rm9yUwogLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopZGV0YWlsUGFyZW50Rm9yT2JqZWN0
OihBY2Nlc3NpYmlsaXR5T2JqZWN0KilvYmplY3QKIHsKICAgICAvLyBVc2UgdGhpcyB0byBjaGVj
ayBpZiBhbiBvYmplY3QgaXMgaW5zaWRlIGEgZGV0YWlscyBvYmplY3QuCi0gICAgYXV0byBtYXRj
aEZ1bmMgPSBbXSAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KSB7Ci0gICAgICAgIHJldHVy
biBvYmplY3QtPmhhc1RhZ05hbWUoZGV0YWlsc1RhZyk7Ci0gICAgfTsKLSAgICAKLSAgICBpZiAo
QWNjZXNzaWJpbGl0eU9iamVjdCogZGV0YWlscyA9IG1hdGNoZWRQYXJlbnQob2JqZWN0LCB0cnVl
LCBtYXRjaEZ1bmMpKQotICAgICAgICByZXR1cm4gZGV0YWlsczsKKyAgICBpZiAoY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdCogZGV0YWlscyA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om1hdGNoZWRQ
YXJlbnQoKm9iamVjdCwgdHJ1ZSwgW10gKGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVj
dCkgeworICAgICAgICByZXR1cm4gb2JqZWN0Lmhhc1RhZ05hbWUoZGV0YWlsc1RhZyk7CisgICAg
fSkpCisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPihkZXRh
aWxzKTsKICAgICByZXR1cm4gbmlsOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjA3MjY4KQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0MTAsNyArMTQxMCw3IEBAIC0gKE5TQXJyYXkqKWFkZGl0aW9uYWxBY2Nl
c3NpYmlsaXR5QXR0cmkKICAgICBpZiAobV9vYmplY3QtPmlzVG9nZ2xlQnV0dG9uKCkpCiAgICAg
ICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07
CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkpCisgICAgaWYgKG1f
b2JqZWN0LT5zdXBwb3J0c0V4cGFuZGVkKCkgfHwgbV9vYmplY3QtPmlzU3VtbWFyeSgpKQogICAg
ICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5RXhwYW5kZWRBdHRyaWJ1
dGVdOwogICAgIAogICAgIGlmIChtX29iamVjdC0+aXNTY3JvbGxiYXIoKQpAQCAtMjIwNyw3ICsy
MjA3LDcgQEAgc3RhdGljIGNvbnN0IEFjY2Vzc2liaWxpdHlSb2xlTWFwJiBjcmVhdAogICAgICAg
ICB7IFJ1YnlSdW5Sb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBS
dWJ5VGV4dFJvbGUsIE5TQWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAogICAgICAgICB7IERldGFp
bHNSb2xlLCBOU0FjY2Vzc2liaWxpdHlHcm91cFJvbGUgfSwKLSAgICAgICAgeyBTdW1tYXJ5Um9s
ZSwgTlNBY2Nlc3NpYmlsaXR5R3JvdXBSb2xlIH0sCisgICAgICAgIHsgU3VtbWFyeVJvbGUsIE5T
QWNjZXNzaWJpbGl0eUJ1dHRvblJvbGUgfSwKICAgICAgICAgeyBTVkdUZXh0UGF0aFJvbGUsIE5T
QWNjZXNzaWJpbGl0eUdyb3VwUm9sZSB9LAogICAgICAgICB7IFNWR1RleHRSb2xlLCBOU0FjY2Vz
c2liaWxpdHlHcm91cFJvbGUgfSwKICAgICAgICAgeyBTVkdUU3BhblJvbGUsIE5TQWNjZXNzaWJp
bGl0eUdyb3VwUm9sZSB9LApAQCAtMjQ5NCw4ICsyNDk0LDYgQEAgLSAoTlNTdHJpbmcqKXJvbGVE
ZXNjcmlwdGlvbgogICAgICAgICAgICAgcmV0dXJuIEFYRGV0YWlsc1RleHQoKTsKICAgICAgICAg
Y2FzZSBGb290ZXJSb2xlOgogICAgICAgICAgICAgcmV0dXJuIEFYRm9vdGVyUm9sZURlc2NyaXB0
aW9uVGV4dCgpOwotICAgICAgICBjYXNlIFN1bW1hcnlSb2xlOgotICAgICAgICAgICAgcmV0dXJu
IEFYU3VtbWFyeVRleHQoKTsKICAgICAgICAgY2FzZSBWaWRlb1JvbGU6CiAgICAgICAgICAgICBy
ZXR1cm4gbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudFN0cmluZygiVmlkZW9FbGVtZW50Iik7
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0yNTM1LDYgKzI1MzMsOSBAQCAtIChOU1N0cmluZyopcm9s
ZURlc2NyaXB0aW9uCiAgICAgaWYgKG1fb2JqZWN0LT5pc1RhYkl0ZW0oKSkKICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVJvbGVEZXNjcmlwdGlvbihAIkFYVGFiIiwgbmlsKTsKICAgICAK
KyAgICBpZiAobV9vYmplY3QtPmlzU3VtbWFyeSgpKQorICAgICAgICByZXR1cm4gQVhTdW1tYXJ5
VGV4dCgpOworICAgIAogICAgIC8vIFdlIHNob3VsZCB0cnkgdGhlIHN5c3RlbSBkZWZhdWx0IHJv
bGUgZGVzY3JpcHRpb24gZm9yIGFsbCBvdGhlciByb2xlcy4KICAgICAvLyBJZiB3ZSBnZXQgdGhl
IHNhbWUgc3RyaW5nIGJhY2ssIHRoZW4gYXMgYSBsYXN0IHJlc29ydCwgcmV0dXJuIHVua25vd24u
CiAgICAgTlNTdHJpbmcqIGRlZmF1bHRSb2xlRGVzY3JpcHRpb24gPSBOU0FjY2Vzc2liaWxpdHlS
b2xlRGVzY3JpcHRpb24oYXhSb2xlLCBbc2VsZiBzdWJyb2xlXSk7CkBAIC0yNzU3LDYgKzI3NTgs
MTAgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICBp
ZiAobV9vYmplY3QtPmlzTWV0ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nXTsKICAgICAgICAgCisgICAgICAgIC8vIFN1bW1hcnkgZWxlbWVudCBzaG91bGQgdXNlIGl0
cyB0ZXh0IG5vZGUgYXMgQVhUaXRsZS4KKyAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1N1bW1hcnko
KSkKKyAgICAgICAgICAgIHJldHVybiBtX29iamVjdC0+dGV4dFVuZGVyRWxlbWVudCgpOworICAg
ICAgICAKICAgICAgICAgcmV0dXJuIFtzZWxmIGJhc2VBY2Nlc3NpYmlsaXR5VGl0bGVdOwogICAg
IH0KICAgICAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTEwLTEzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFtNYWNdIGJldHRlciBhY2Nlc3Np
YmlsaXR5IHN1cHBvcnQgZm9yIFN1bW1hcnkgZWxlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzM2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjg3NDUwMTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0
aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1
bW1hcnktcm9sZS1kZXNjcmlwdGlvbi5odG1sOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L2RldGFpbHMtc3VtbWFyeS5odG1sOgorCiAyMDE2LTEwLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogc3RlcC1pbnRvIGBj
b25zb2xlLmxvZyhvKWAgc2hvdWxkIG5vdCBzdGVwIHRocm91Z2ggaW5zcGVjdG9yIGphdmFzY3Jp
cHQKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
ZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjA3MjY4KQorKysgTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvZGV0YWlscy1zdW1tYXJ5LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTAsMTMgKzEwLDE4IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEEKIFBBU1MgZGV0YWlsczEucm9sZSBpcyAnQVhSb2xlOiBBWEdyb3VwJwog
UEFTUyBkZXRhaWxzMS5zdWJyb2xlIGlzICdBWFN1YnJvbGU6IEFYRGV0YWlscycKIFBBU1MgZGV0
YWlsczEuaXNFeHBhbmRlZCBpcyB0cnVlCi1QQVNTIGRldGFpbHMxLmNoaWxkQXRJbmRleCgwKS5y
b2xlIGlzICdBWFJvbGU6IEFYR3JvdXAnCi1QQVNTIGRldGFpbHMxLmNoaWxkQXRJbmRleCgwKS5z
dWJyb2xlIGlzICdBWFN1YnJvbGU6IEFYU3VtbWFyeScKK1BBU1Mgc3VtbWFyeTEucm9sZSBpcyAn
QVhSb2xlOiBBWEJ1dHRvbicKK1BBU1Mgc3VtbWFyeTEuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBB
WFN1bW1hcnknCitQQVNTIHN1bW1hcnkxLnRpdGxlIGlzICdBWFRpdGxlOiBTb21lIG9wZW4gaW5m
bycKIFBBU1MgZGV0YWlsczEuaXNBdHRyaWJ1dGVTZXR0YWJsZSgnQVhFeHBhbmRlZCcpIGlzIHRy
dWUKIFBBU1MgZGV0YWlsczEuaXNFeHBhbmRlZCBpcyBmYWxzZQorUEFTUyBzdW1tYXJ5MS5pc0V4
cGFuZGVkIGlzIGZhbHNlCiBQQVNTIGRldGFpbHMxLmlzRXhwYW5kZWQgaXMgZmFsc2UKK1BBU1Mg
c3VtbWFyeTEuaXNFeHBhbmRlZCBpcyBmYWxzZQogUEFTUyBkZXRhaWxzMS5pc0V4cGFuZGVkIGlz
IHRydWUKK1BBU1Mgc3VtbWFyeTEuaXNFeHBhbmRlZCBpcyB0cnVlCiBQQVNTIGRldGFpbHMxLmlz
RXhwYW5kZWQgaXMgdHJ1ZQorUEFTUyBzdW1tYXJ5MS5pc0V4cGFuZGVkIGlzIHRydWUKIFBBU1Mg
ZGV0YWlsczIuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCiBQQVNTIGRldGFpbHMy
LmlzRXhwYW5kZWQgaXMgZmFsc2UKIFJlY2VpdmVkIEFYRXhwYW5kZWRDaGFuZ2VkIG5vdGlmaWNh
dGlvbiAKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFy
eS1yb2xlLWRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw3ICs2LDcgQEAgVGhpcyB0ZXN0cyB0aGF0IHN1bW1hcnkgYW5kIGRldGFp
bCBlbGVtZQogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1Mgc3VtbWFyeS5yb2xl
IGlzICdBWFJvbGU6IEFYR3JvdXAnCitQQVNTIHN1bW1hcnkucm9sZSBpcyAnQVhSb2xlOiBBWEJ1
dHRvbicKIFBBU1MgZGV0YWlscy5yb2xlIGlzICdBWFJvbGU6IEFYR3JvdXAnCiBQQVNTIHN1bW1h
cnkuc3Vicm9sZSBpcyAnQVhTdWJyb2xlOiBBWFN1bW1hcnknCiBQQVNTIGRldGFpbHMuc3Vicm9s
ZSBpcyAnQVhTdWJyb2xlOiBBWERldGFpbHMnCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy9kZXRhaWxzLXN1bW1hcnktcm9sZS1kZXNjcmlwdGlvbi5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRl
c2NyaXB0aW9uLmh0bWwJKHJldmlzaW9uIDIwNzI2OCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL2RldGFpbHMtc3VtbWFyeS1yb2xlLWRlc2NyaXB0aW9uLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTE5LDcgKzE5LDcgQEAKICAgICAgICAgICB2YXIgc3VtbWFyeSA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic3VtbWFyeSIpOwogICAgICAg
ICAgIHZhciBkZXRhaWxzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJkZXRhaWxzIik7CiAgICAgICAgICAKLSAgICAgICAgICBzaG91bGRCZSgic3VtbWFy
eS5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CisgICAgICAgICAgc2hvdWxkQmUoInN1bW1h
cnkucm9sZSIsICInQVhSb2xlOiBBWEJ1dHRvbiciKTsKICAgICAgICAgICBzaG91bGRCZSgiZGV0
YWlscy5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CiAgICAgICAgICAgc2hvdWxkQmUoInN1
bW1hcnkuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWFN1bW1hcnknIik7CiAgICAgICAgICAgc2hv
dWxkQmUoImRldGFpbHMuc3Vicm9sZSIsICInQVhTdWJyb2xlOiBBWERldGFpbHMnIik7CkluZGV4
OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnkuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9kZXRhaWxzLXN1bW1hcnku
aHRtbAkocmV2aXNpb24gMjA3MjY4KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
ZGV0YWlscy1zdW1tYXJ5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBACiA8Ym9k
eSBpZD0iYm9keSI+CiAKIDxkZXRhaWxzIG9wZW4gaWQ9ImRldGFpbHMxIj4KLSAgPHN1bW1hcnk+
U29tZSBvcGVuIGluZm88L3N1bW1hcnk+CisgIDxzdW1tYXJ5IGlkPSJzdW1tYXJ5MSI+U29tZSBv
cGVuIGluZm88L3N1bW1hcnk+CiAgIDxwPkRldGFpbHMgYWJvdXQgdGhlIG9wZW4gdG9waWMuPC9w
PgogPC9kZXRhaWxzPgogCkBAIC0zOSwzMiArMzksNDIgQEAKICAgICAgICAgfSk7CiAKICAgICAg
ICAgdmFyIGRldGFpbHMxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJkZXRhaWxzMSIpOworICAgICAgICB2YXIgc3VtbWFyeTEgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInN1bW1hcnkxIik7CiAgICAgICAgIHNo
b3VsZEJlKCJkZXRhaWxzMS5yb2xlIiwgIidBWFJvbGU6IEFYR3JvdXAnIik7CiAgICAgICAgIHNo
b3VsZEJlKCJkZXRhaWxzMS5zdWJyb2xlIiwgIidBWFN1YnJvbGU6IEFYRGV0YWlscyciKTsKICAg
ICAgICAgc2hvdWxkQmVUcnVlKCJkZXRhaWxzMS5pc0V4cGFuZGVkIik7Ci0gICAgICAgIHNob3Vs
ZEJlKCJkZXRhaWxzMS5jaGlsZEF0SW5kZXgoMCkucm9sZSIsICInQVhSb2xlOiBBWEdyb3VwJyIp
OwotICAgICAgICBzaG91bGRCZSgiZGV0YWlsczEuY2hpbGRBdEluZGV4KDApLnN1YnJvbGUiLCAi
J0FYU3Vicm9sZTogQVhTdW1tYXJ5JyIpOworICAgICAgICBzaG91bGRCZSgic3VtbWFyeTEucm9s
ZSIsICInQVhSb2xlOiBBWEJ1dHRvbiciKTsKKyAgICAgICAgc2hvdWxkQmUoInN1bW1hcnkxLnN1
YnJvbGUiLCAiJ0FYU3Vicm9sZTogQVhTdW1tYXJ5JyIpOworICAgICAgICBzaG91bGRCZSgic3Vt
bWFyeTEudGl0bGUiLCAiJ0FYVGl0bGU6IFNvbWUgb3BlbiBpbmZvJyIpOwogICAgICAgICBzaG91
bGRCZVRydWUoImRldGFpbHMxLmlzQXR0cmlidXRlU2V0dGFibGUoJ0FYRXhwYW5kZWQnKSIpOwog
CiAgICAgICAgIC8vIFRvZ2dsZSB0aGUgZXhwYW5kZWQgc3RhdGUuCiAgICAgICAgIGRldGFpbHMx
LnNldEJvb2xBdHRyaWJ1dGVWYWx1ZSgiQVhFeHBhbmRlZCIsIGZhbHNlKTsKICAgICAgICAgZGV0
YWlsczEgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRl
dGFpbHMxIik7CisgICAgICAgIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZUZhbHNlKCJk
ZXRhaWxzMS5pc0V4cGFuZGVkIik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoInN1bW1hcnkxLmlz
RXhwYW5kZWQiKTsKIAogICAgICAgICAvLyBHaXZlIGl0IHRoZSBzYW1lIHZhbHVlIHRvIG1ha2Ug
c3VyZSB3ZSBkb24ndCBleHBhbmQuCiAgICAgICAgIGRldGFpbHMxLnNldEJvb2xBdHRyaWJ1dGVW
YWx1ZSgiQVhFeHBhbmRlZCIsIGZhbHNlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAgICAg
IHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlk
KCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZUZhbHNlKCJkZXRhaWxzMS5pc0V4cGFuZGVk
Iik7CisgICAgICAgIHNob3VsZEJlRmFsc2UoInN1bW1hcnkxLmlzRXhwYW5kZWQiKTsKIAogICAg
ICAgICAvLyBTZXQgdG8gZXhwYW5kIGFnYWluLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0
cmlidXRlVmFsdWUoIkFYRXhwYW5kZWQiLCB0cnVlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7Cisg
ICAgICAgIHN1bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJzdW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZVRydWUoImRldGFpbHMxLmlzRXhw
YW5kZWQiKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAK
ICAgICAgICAgLy8gQW5kIGR1cGxpY2F0ZSB0aGUgdHJ1ZSBzdGF0ZSB0byBtYWtlIHN1cmUgaXQg
ZG9lc24ndCB0b2dnbGUgb2ZmLgogICAgICAgICBkZXRhaWxzMS5zZXRCb29sQXR0cmlidXRlVmFs
dWUoIkFYRXhwYW5kZWQiLCB0cnVlKTsKICAgICAgICAgZGV0YWlsczEgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImRldGFpbHMxIik7CisgICAgICAgIHN1
bW1hcnkxID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJz
dW1tYXJ5MSIpOwogICAgICAgICBzaG91bGRCZVRydWUoImRldGFpbHMxLmlzRXhwYW5kZWQiKTsK
KyAgICAgICAgc2hvdWxkQmVUcnVlKCJzdW1tYXJ5MS5pc0V4cGFuZGVkIik7CiAKICAgICAgICAg
dmFyIGRldGFpbHMyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJkZXRhaWxzMiIpOwogICAgICAgICBzaG91bGRCZSgiZGV0YWlsczIuc3Vicm9sZSIsICIn
QVhTdWJyb2xlOiBBWERldGFpbHMnIik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>