<?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>154919</bug_id>
          
          <creation_ts>2016-03-02 09:35:33 -0800</creation_ts>
          <short_desc>Add support for the &quot;first&quot; value of the hanging-punctuation property</short_desc>
          <delta_ts>2016-03-02 14:29:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169835</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-02 09:35:33 -0800</bug_when>
    <thetext>Add support for the &quot;first&quot; value of the hanging-punctuation property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169836</commentid>
    <comment_count>1</comment_count>
      <attachid>272660</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-02 09:42:14 -0800</bug_when>
    <thetext>Created attachment 272660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169837</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 09:43:04 -0800</bug_when>
    <thetext>Attachment 272660 did not pass style-queue:


ERROR: Source/WebCore/rendering/line/BreakingContext.h:791:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/rendering/RenderBlockLineLayout.cpp:813:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/rendering/RenderBlockLineLayout.cpp:813:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:4186:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 4 in 14 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>1169840</commentid>
    <comment_count>3</comment_count>
      <attachid>272661</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-02 09:48:36 -0800</bug_when>
    <thetext>Created attachment 272661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169842</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 09:49:42 -0800</bug_when>
    <thetext>Attachment 272661 did not pass style-queue:


ERROR: Source/WebCore/rendering/line/BreakingContext.h:791:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 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>1169844</commentid>
    <comment_count>5</comment_count>
      <attachid>272663</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-02 09:51:12 -0800</bug_when>
    <thetext>Created attachment 272663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169845</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 09:52:51 -0800</bug_when>
    <thetext>Attachment 272663 did not pass style-queue:


ERROR: Source/WebCore/rendering/line/BreakingContext.h:791:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 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>1169849</commentid>
    <comment_count>7</comment_count>
      <attachid>272663</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-02 09:59:37 -0800</bug_when>
    <thetext>Comment on attachment 272663
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        New tests added in fast/text.

Can you reference the spec here please.

&gt; Source/WebCore/rendering/RenderBlockFlow.cpp:4067
&gt; +    bool canHangPunctuationAtStart = styleToUse.hangingPunctuation() &amp; FirstHangingPunctuation;

Maybe add helpers like RenderStyle::hasFirstHangingPunctuation()

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:809
&gt; +static bool inlineAncestorHasStartBorderPaddingOrMargin(const RenderBlockFlow&amp; block, InlineBox* box)

const InlineBox&amp;

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:820
&gt; +static bool isLastInFlowRun(BidiRun* run)

const BidiRun&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169944</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-02 14:29:31 -0800</bug_when>
    <thetext>Landed in r197464.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272660</attachid>
            <date>2016-03-02 09:42:14 -0800</date>
            <delta_ts>2016-03-02 09:48:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>21061</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE2LTAzLTAyICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgImZp
cnN0IiB2YWx1ZSBvZiB0aGUgaGFuZ2luZy1wdW5jdHVhdGlvbiBwcm9wZXJ0eS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkxOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0cyBhZGRlZCBp
biBmYXN0L3RleHQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICBVcGRhdGUgdGhlIHByZWZlcnJlZCBsb2dpY2FsIHdp
ZHRoIGNvbXB1dGF0aW9uIHRvIGZhY3RvciBpbiBoYW5naW5nIHB1bmN0dWF0aW9uLgorICAgICAg
ICBUaGlzIGNoZWNrIGlzIHNpbWlsYXIgdG8gdGhlIHRleHQtaW5kZW50IGxvZ2ljIGluIHRoYXQg
d2Ugb25seSB3YW50IHRvIGRvIGl0IGZvcgorICAgICAgICB0aGUgZmlyc3QgZm9ybWF0dGVkIGxp
bmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQpOgorICAgICAgICBNYWtl
IHN1cmUgdG8gdHVybiBvZmYgc2ltcGxlIGxpbmUgbGF5b3V0IHdoZW4gaGFuZ2luZyBwdW5jdHVh
dGlvbiBpcyBwcmVzZW50LiBFdmVudHVhbGx5CisgICAgICAgIGl0IHNob3VsZCBiZSBmZWFzaWJs
ZSB0byBzdXBwb3J0IHRoaXMgaW4gc2ltcGxlIGxpbmUgbGF5b3V0LCBidXQgc2luY2UgdGhlIGZ1
bGwgbGluZQorICAgICAgICBsYXlvdXQgbW9kZWwgaGFzIHRvIHdvcmsgd2l0aCBpdCBhbnl3YXks
IHdlIGFyZSBzdGFydGluZyB0aGVyZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5saW5lQW5jZXN0b3JIYXNTdGFy
dEJvcmRlclBhZGRpbmdPck1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjppc0xhc3RJbkZsb3dS
dW4pOgorICAgICAgICBIZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIG5lZWRlZCB0byBkZXRlcm1p
bmUgd2hldGhlciBvciBub3Qgd2UncmUgYWxsb3dlZCB0byBhcHBseQorICAgICAgICBoYW5naW5n
IHB1bmN0dWF0aW9uICJmaXJzdCIgdG8gYSB0ZXh0IHJ1bi4KKworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVu
dCk6CisgICAgICAgIFRoaXMgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgbG9naWNhbExlZnQgYW5kIGF2
YWlsYWJsZVdpZHRoIHdoZW4gaGFuZ2luZyBwdW5jdHVhdGlvbgorICAgICAgICBpcyBwcmVzZW50
IHRvIHNoaWZ0IHRoZSBsaW5lIGFzIG5lZWRlZCBhbmQgdG8gZXhwYW5kIHRoZSBhdmFpbGFibGVX
aWR0aCBvZiB0aGUgbGluZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZVN0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZUVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgUmVuZGVyVGV4dCBoYXMgYSBoZWxw
ZXIgZnVuY3Rpb24gZm9yIGhhbmRpbmcgYmFjayB0aGUgaGFuZ2FibGUgcHVuY3R1YXRpb24gd2lk
dGguIFRoaXMKKyAgICAgICAgaXMgdXNlZCBldmVyeXdoZXJlIGxpbmUgbGF5b3V0IHdhbnRzIHRv
IGFwcGx5IHRoYXQgb2Zmc2V0LiBUaGVyZSBhcmUgYWxzbyBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIHRoYXQgZGV0ZWN0IHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIGhhbmdhYmxlIHB1bmN0
dWF0aW9uIGNoYXJhY3Rlci4KKworICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcldpdGhS
ZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6cHJpbnRSZWFzb24p
OgorICAgICAgICBUdXJuIG9mZiBzaW1wbGUgbGluZSBsYXlvdXQgd2hlbiBoYW5naW5nIHB1bmN0
dWF0aW9uIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9CcmVha2luZ0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCk6
CisgICAgICAgIE1vZGlmaWVkIHRvIGV4cGFuZCB0aGUgYXZhaWxhYmxlIHdpZHRoIHdoZW4gaGFu
Z2luZyBwdW5jdHVhdGlvbiBpcyBwcmVzZW50IHNvIHRoYXQgd2UKKyAgICAgICAga25vdyB3ZSBo
YXZlIG1vcmUgcm9vbSBvbiB0aGUgbGluZS4KKworICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xp
bmVXaWR0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjppc0ZpcnN0TGluZSk6Cisg
ICAgICAgIEFkZCBhbiBhY2Nlc3NvciBmb3Igd2hldGhlciBvciBub3Qgd2UncmUgdGhlIGZpcnN0
IGxpbmUuCisKIDIwMTYtMDMtMDIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdWJwaXhlbCBsYXlvdXQ6IEVuYWJsZSB2ZXJ0aWNhbC9ob3Jpem9udGFsIHN1YnBp
eGVsIHNwYWNpbmcgZm9yIHRhYmxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA2NCw2
ICs0MDY0LDkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVQcmVmZQogICAg
IFJlbmRlck9iamVjdCogcHJldkZsb2F0ID0gMDsKICAgICBib29sIGlzUHJldkNoaWxkSW5saW5l
RmxvdyA9IGZhbHNlOwogICAgIGJvb2wgc2hvdWxkQnJlYWtMaW5lQWZ0ZXJUZXh0ID0gZmFsc2U7
CisgICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gc3R5bGVUb1VzZS5oYW5naW5n
UHVuY3R1YXRpb24oKSAmIEZpcnN0SGFuZ2luZ1B1bmN0dWF0aW9uOworICAgIGJvb2wgYWRkZWRT
dGFydFB1bmN0dWF0aW9uSGFuZyA9IGZhbHNlOworICAgIAogICAgIHdoaWxlIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgYm9vbCBhdXRvV3Jh
cCA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgPyBjaGlsZC0+cGFyZW50KCktPnN0eWxlKCkuYXV0b1dy
YXAoKSA6CiAgICAgICAgICAgICBjaGlsZC0+c3R5bGUoKS5hdXRvV3JhcCgpOwpAQCAtNDE3OSw3
ICs0MTgyLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lUHJlZmUKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRUZXh0
SW5kZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCAmJiAhYWRkZWRTdGFy
dFB1bmN0dWF0aW9uSGFuZyAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiAhaXNBbm9ueW1vdXNJ
bmxpbmVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFu
ZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEFkZCBv
dXIgd2lkdGggdG8gdGhlIG1heC4KICAgICAgICAgICAgICAgICBpbmxpbmVNYXggKz0gc3RkOjpt
YXg8ZmxvYXQ+KDAsIGNoaWxkTWF4KTsKIApAQCAtNDI2Nyw3ICs0MjczLDE3IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lUHJlZmUKICAgICAgICAgICAgICAgICAgICAgICAg
IGhhc1JlbWFpbmluZ05lZ2F0aXZlVGV4dEluZGVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIGhhbmdpbmcgcHVuY3R1YXRpb24gc2l0dWF0aW9uIGF0
IHRoZSBzdGFydC4KKyAgICAgICAgICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFy
dCAmJiAhYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFuZykgeworICAgICAgICAgICAgICAgICAgICBm
bG9hdCBoYW5nU3RhcnRXaWR0aCA9IHJlbmRlclRleHQuaGFuZ2FibGVQdW5jdHVhdGlvblN0YXJ0
V2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gLT0gaGFuZ1N0YXJ0V2lkdGg7
CisgICAgICAgICAgICAgICAgICAgIGJlZ2luTWluIC09IGhhbmdTdGFydFdpZHRoOworICAgICAg
ICAgICAgICAgICAgICBjaGlsZE1heCAtPSBoYW5nU3RhcnRXaWR0aDsKKyAgICAgICAgICAgICAg
ICAgICAgYmVnaW5NYXggLT0gaGFuZ1N0YXJ0V2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGFk
ZGVkU3RhcnRQdW5jdHVhdGlvbkhhbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGJyZWFrYWJsZSBj
aGFyYWN0ZXJzIGF0IGFsbCwKICAgICAgICAgICAgICAgICAvLyB0aGVuIHRoaXMgaXMgdGhlIGVh
c3kgY2FzZS4gV2UgYWRkIG91cnNlbHZlcyB0byB0aGUgY3VycmVudAogICAgICAgICAgICAgICAg
IC8vIG1pbiBhbmQgbWF4IGFuZCBjb250aW51ZS4KQEAgLTQzMDUsNiArNDMyMSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lUHJlZmUKICAgICAgICAgICAgICAgICAgICAg
bWF4TG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBjaGlsZE1h
eCk7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IGVuZE1heDsKICAgICAgICAgICAg
ICAgICAgICAgYWRkZWRUZXh0SW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWRk
ZWRTdGFydFB1bmN0dWF0aW9uSGFuZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBzdGQ6Om1heDxmbG9hdD4oMCwgY2hpbGRN
YXgpOwogICAgICAgICAgICAgfQpAQCAtNDMxOSw2ICs0MzM2LDcgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmNvbXB1dGVJbmxpbmVQcmVmZQogICAgICAgICAgICAgc3RyaXBGcm9udFNwYWNlcyA9
IHRydWU7CiAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOwogICAgICAgICAgICAg
YWRkZWRUZXh0SW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIGFkZGVkU3RhcnRQdW5jdHVhdGlv
bkhhbmcgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFjaGlsZC0+aXNUZXh0KCkg
JiYgY2hpbGQtPmlzUmVuZGVySW5saW5lKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0Niw3ICs2
NDYsNyBAQCBpbmxpbmUgY29uc3QgU2ltcGxlTGluZUxheW91dDo6TGF5b3V0KiBSCiAgICAgQVNT
RVJUKGxpbmVMYXlvdXRQYXRoKCkgPT0gU2ltcGxlTGluZXNQYXRoIHx8ICFtX3NpbXBsZUxpbmVM
YXlvdXQpOwogICAgIHJldHVybiBtX3NpbXBsZUxpbmVMYXlvdXQuZ2V0KCk7CiB9Ci0KKyAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJf
T0JKRUNUKFJlbmRlckJsb2NrRmxvdywgaXNSZW5kZXJCbG9ja0Zsb3coKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShy
ZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA2LDE4ICs4MDYsNDIgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGFwcGx5RXhwYW5zaW9uQmVoYXZpbwogICAgIH0KIH0KIAorc3RhdGljIGJv
b2wgaW5saW5lQW5jZXN0b3JIYXNTdGFydEJvcmRlclBhZGRpbmdPck1hcmdpbihjb25zdCBSZW5k
ZXJCbG9ja0Zsb3cmIGJsb2NrLCBJbmxpbmVCb3gqIGJveCkKK3sKKyAgICBib29sIGlzTFRSID0g
YmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgZm9yIChhdXRvKiBj
dXJyZW50Qm94ID0gYm94LT5wYXJlbnQoKTsgY3VycmVudEJveDsgY3VycmVudEJveCA9IGN1cnJl
bnRCb3gtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICgoaXNMVFIgJiYgY3VycmVudEJveC0+bWFy
Z2luQm9yZGVyUGFkZGluZ0xvZ2ljYWxMZWZ0KCkgPiAwKSB8fAorICAgICAgICAgICAgKCFpc0xU
UiAmJiBjdXJyZW50Qm94LT5tYXJnaW5Cb3JkZXJQYWRkaW5nTG9naWNhbFJpZ2h0KCkgPiAwKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBib29sIGlzTGFzdEluRmxvd1J1bihCaWRpUnVuKiBydW4pCit7CisgICAgZm9yIChy
dW4gPSBydW4tPm5leHQoKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkgeworICAgICAgICBpZiAo
IXJ1bi0+Ym94KCkgfHwgcnVuLT5yZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8
IHJ1bi0+Ym94KCktPmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKIEJpZGlS
dW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNl
Z21lbnQoUm9vdElubGluZUJveCogbGluZUJveCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvLCBF
VGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCAKICAgICBmbG9hdCYgYXZh
aWxhYmxlTG9naWNhbFdpZHRoLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdT
cGFjZVJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFw
LCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwKICAgICBXb3Jk
TWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogewogICAgIGJvb2wgbmVlZHNXb3JkU3Bh
Y2luZyA9IGZhbHNlOworICAgIGJvb2wgY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCA9IHN0eWxl
KCkuaGFuZ2luZ1B1bmN0dWF0aW9uKCkgJiBGaXJzdEhhbmdpbmdQdW5jdHVhdGlvbjsKKyAgICBi
b29sIGlzTFRSID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAgICAgZmxvYXQg
dG90YWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LT5nZXRGbG93U3BhY2luZ0xvZ2ljYWxXaWR0aCgp
OwogICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwogICAgIGJvb2wg
aXNBZnRlckV4cGFuc2lvbiA9IGlzPFJlbmRlclJ1YnlCYXNlPigqdGhpcykgPyBkb3duY2FzdDxS
ZW5kZXJSdWJ5QmFzZT4oKnRoaXMpLmlzQWZ0ZXJFeHBhbnNpb24oKSA6IHRydWU7CiAgICAgVmVj
dG9yPHVuc2lnbmVkLCAxNj4gZXhwYW5zaW9uT3Bwb3J0dW5pdGllczsKLQorICAgIAogICAgIEJp
ZGlSdW4qIHJ1biA9IGZpcnN0UnVuOwogICAgIEJpZGlSdW4qIHByZXZpb3VzUnVuID0gbnVsbHB0
cjsKKwogICAgIGZvciAoOyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7CiAgICAgICAgIGlmICgh
cnVuLT5ib3goKSB8fCBydW4tPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwg
cnVuLT5ib3goKS0+aXNMaW5lQnJlYWsoKSkgewogICAgICAgICAgICAgY29udGludWU7IC8vIFBv
c2l0aW9uZWQgb2JqZWN0cyBhcmUgb25seSBwYXJ0aWNpcGF0aW5nIHRvIGZpZ3VyZSBvdXQgdGhl
aXIKQEAgLTgyNyw2ICs4NTEsMTUgQEAgQmlkaVJ1biogUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRl
SW5saW5lRAogICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocnVuLT5yZW5kZXJlcigpKSkgewog
ICAgICAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KHJ1bi0+
cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5l
VGV4dEJveD4oKnJ1bi0+Ym94KCkpOworICAgICAgICAgICAgaWYgKGNhbkhhbmdQdW5jdHVhdGlv
bkF0U3RhcnQgJiYgbGluZUluZm8uaXNGaXJzdExpbmUoKSAmJiAoaXNMVFIgfHwgaXNMYXN0SW5G
bG93UnVuKHJ1bikpCisgICAgICAgICAgICAgICAgJiYgIWlubGluZUFuY2VzdG9ySGFzU3RhcnRC
b3JkZXJQYWRkaW5nT3JNYXJnaW4oKnRoaXMsIHJ1bi0+Ym94KCkpKSB7CisgICAgICAgICAgICAg
ICAgZmxvYXQgaGFuZ1N0YXJ0V2lkdGggPSByZW5kZXJUZXh0LmhhbmdhYmxlUHVuY3R1YXRpb25T
dGFydFdpZHRoKCk7CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlTG9naWNhbFdpZHRoICs9IGhh
bmdTdGFydFdpZHRoOworICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgLT0gaGFuZ1N0YXJ0
V2lkdGg7CisgICAgICAgICAgICAgICAgY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodGV4dEFsaWdu
ID09IEpVU1RJRlkgJiYgcnVuICE9IHRyYWlsaW5nU3BhY2VSdW4pIHsKICAgICAgICAgICAgICAg
ICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9y
Rm9ySW5saW5lVGV4dEJveCgqdGhpcywgdGV4dEJveCwgcHJldmlvdXNSdW4sIHJ1bi0+bmV4dCgp
LCB0ZXh0QWxpZ24sIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICAgICAgICAgIGFwcGx5RXhw
YW5zaW9uQmVoYXZpb3IodGV4dEJveCwgZXhwYW5zaW9uQmVoYXZpb3IpOwpAQCAtODQ0LDYgKzg3
Nyw3IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZUQKIAogICAgICAg
ICAgICAgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihsaW5lQm94LCBydW4sIHJlbmRlclRleHQs
IHRvdGFsTG9naWNhbFdpZHRoLCBsaW5lSW5mbywgdGV4dEJveERhdGFNYXAsIHZlcnRpY2FsUG9z
aXRpb25DYWNoZSwgd29yZE1lYXN1cmVtZW50cyk7CiAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gZmFsc2U7CiAgICAgICAgICAgICBib29s
IGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGlzPFJl
bmRlclJ1YnlSdW4+KHJ1bi0+cmVuZGVyZXIoKSkgJiYgdGV4dEFsaWduID09IEpVU1RJRlkgJiYg
cnVuICE9IHRyYWlsaW5nU3BhY2VSdW4gJiYgZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocnVuLT5y
ZW5kZXJlcigpKS5ydWJ5QmFzZSgpKSB7CiAgICAgICAgICAgICAgICAgYXV0byogcnVieUJhc2Ug
PSBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpLnJ1YnlCYXNlKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxOTc0
NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwMiw2ICs1MDIsMzIgQEAgQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0
Ojp3aWR0aEZybwogICAgIHJldHVybiBmLndpZHRoKHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhP
dmVyZmxvdyk7CiB9CiAKK2lubGluZSBib29sIGlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZVN0
YXJ0KFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFVfR0VUX0dDX01BU0soYykgJiAoVV9HQ19QU19N
QVNLIHwgVV9HQ19QSV9NQVNLIHwgVV9HQ19QRl9NQVNLKTsKK30KKworaW5saW5lIGJvb2wgaXNI
YW5nYWJsZVB1bmN0dWF0aW9uQXRMaW5lRW5kKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIFVfR0VU
X0dDX01BU0soYykgJiAoVV9HQ19QRV9NQVNLIHwgVV9HQ19QSV9NQVNLIHwgVV9HQ19QRl9NQVNL
KTsKK30KKworZmxvYXQgUmVuZGVyVGV4dDo6aGFuZ2FibGVQdW5jdHVhdGlvblN0YXJ0V2lkdGgo
KSBjb25zdAoreworICAgIGlmICghdGV4dExlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBBU1NFUlQobV90ZXh0KTsKKyAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKm1fdGV4dC5p
bXBsKCk7CisgICAgaWYgKCFpc0hhbmdhYmxlUHVuY3R1YXRpb25BdExpbmVTdGFydCh0ZXh0WzBd
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gdGhpcy0+c3R5bGUoKTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IHN0eWxlLmZv
bnRDYXNjYWRlKCk7CisgICAgICAgIAorICAgIHJldHVybiB3aWR0aEZyb21DYWNoZShmb250LCAw
LCAxLCAwLCAwLCAwLCBzdHlsZSk7Cit9CisgICAgCiB2b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQ
cmVmV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQmIGJlZ2luTWluVywgYm9vbCYgYmVnaW5XUywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQmIGVuZE1pblcsIGJvb2wmIGVuZFdTLApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NiArMTAyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFz
QnJlYWthYmxlQ2hhciwgYm9vbCYgaGFzQnJlYWssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCYgYmVnaW5NYXhXLCBmbG9hdCYgZW5kTWF4VywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0JiBtaW5XLCBmbG9hdCYgbWF4VywgYm9vbCYgc3RyaXBGcm9udFNwYWNlcyk7
CisgICAgZmxvYXQgaGFuZ2FibGVQdW5jdHVhdGlvblN0YXJ0V2lkdGgoKSBjb25zdDsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7
CiAgICAgTGF5b3V0UmVjdCBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJ
KHJldmlzaW9uIDE5NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw4IEBAIGVudW0gQXZvaWRh
bmNlUmVhc29uXyA6IHVpbnQ2NF90IHsKICAgICBGbG93SGFzTm9QYXJlbnQgICAgICAgICAgICAg
ICAgICAgICAgID0gMUxMVSAgPDwgNDYsCiAgICAgRmxvd0hhc05vQ2hpbGQgICAgICAgICAgICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDQ3LAogICAgIEZsb3dDaGlsZElzU2VsZWN0ZWQgICAgICAg
ICAgICAgICAgICAgPSAxTExVICA8PCA0OCwKLSAgICBFbmRPZlJlYXNvbnMgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMUxMVSAgPDwgNDkKKyAgICBGbG93SGFzSGFuZ2luZ1B1bmN0dWF0aW9u
ICAgICAgICAgICAgID0gMUxMVSAgPDwgNDksCisgICAgRW5kT2ZSZWFzb25zICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDUwCiB9OwogY29uc3QgdW5zaWduZWQgTm9SZWFzb24g
PSAwOwogCkBAIC0yODMsNiArMjg0LDkgQEAgc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNh
blVzZUZvcldpdAogICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dI
YXNPdXRsaW5lLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKGZsb3cuaXNSdWJ5
VGV4dCgpIHx8IGZsb3cuaXNSdWJ5QmFzZSgpKQogICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dJc1J1YnksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICBp
ZiAoZmxvdy5zdHlsZSgpLmhhbmdpbmdQdW5jdHVhdGlvbigpICE9IE5vSGFuZ2luZ1B1bmN0dWF0
aW9uKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNIYW5n
aW5nUHVuY3R1YXRpb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKKyAgICAKICAgICAvLyBQ
cmludGluZyBkb2VzIHBhZ2luYXRpb24gd2l0aG91dCBhIGZsb3cgdGhyZWFkLgogICAgIGlmIChm
bG93LmRvY3VtZW50KCkucGFnaW5hdGVkKCkpCiAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0lzUGFnaW5hdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CkBA
IC03OTcsNiArODAxLDkgQEAgc3RhdGljIHZvaWQgcHJpbnRSZWFzb24oQXZvaWRhbmNlUmVhc29u
IAogICAgIGNhc2UgRmxvd0lzUnVieToKICAgICAgICAgc3RyZWFtIDw8ICJydWJ5IjsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzSGFuZ2luZ1B1bmN0dWF0aW9uOgorICAgICAgICBz
dHJlYW0gPDwgImhhbmdpbmcgcHVuY3R1YXRpb24iOworICAgICAgICBicmVhazsKICAgICBjYXNl
IEZsb3dJc1BhZ2luYXRlZDoKICAgICAgICAgc3RyZWFtIDw8ICJwYWdpbmF0ZWQiOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFr
aW5nQ29udGV4dC5oCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9CcmVha2luZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNzM3LDcgKzczNyw4
IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCgKICAgICBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCA9IHN0eWxlLmZvbnRDYXNjYWRlKCk7CiAgICAgYm9vbCBpc0ZpeGVk
UGl0Y2ggPSBmb250LmlzRml4ZWRQaXRjaCgpOwogICAgIGJvb2wgY2FuSHlwaGVuYXRlID0gc3R5
bGUuaHlwaGVucygpID09IEh5cGhlbnNBdXRvICYmIFdlYkNvcmU6OmNhbkh5cGhlbmF0ZShzdHls
ZS5sb2NhbGUoKSk7Ci0KKyAgICBib29sIGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgPSBzdHls
ZS5oYW5naW5nUHVuY3R1YXRpb24oKSAmIEZpcnN0SGFuZ2luZ1B1bmN0dWF0aW9uOworICAgIAog
ICAgIHVuc2lnbmVkIGxhc3RTcGFjZSA9IG1fY3VycmVudC5vZmZzZXQoKTsKICAgICBmbG9hdCB3
b3JkU3BhY2luZyA9IG1fY3VycmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7
CiAgICAgZmxvYXQgbGFzdFNwYWNlV29yZFNwYWNpbmcgPSAwOwpAQCAtNzg3LDYgKzc4OCw5IEBA
IGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCgKICAgICAgICAgVUNoYXIg
YyA9IG1fY3VycmVudC5jdXJyZW50KCk7CiAgICAgICAgIG1fY3VycmVudENoYXJhY3RlcklzU3Bh
Y2UgPSBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgKCFtX3ByZXNlcnZlc05ld2xpbmUgJiYgKGMg
PT0gJ1xuJykpOwogCisgICAgICAgIGlmIChjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ICYmICFt
X2N1cnJlbnQub2Zmc2V0KCkgJiYgbV93aWR0aC5pc0ZpcnN0TGluZSgpICYmICAhbV93aWR0aC5j
b21taXR0ZWRXaWR0aCgpICYmICF3cmFwVyAmJiAhbV9jdXJyZW50Lm9mZnNldCgpKQorICAgICAg
ICAgICAgbV93aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKC1yZW5kZXJUZXh0LmhhbmdhYmxlUHVu
Y3R1YXRpb25TdGFydFdpZHRoKCkpOworICAgICAgICAgICAgCiAgICAgICAgIGlmICghbV9jb2xs
YXBzZVdoaXRlU3BhY2UgfHwgIW1fY3VycmVudENoYXJhY3RlcklzU3BhY2UpCiAgICAgICAgICAg
ICBtX2xpbmVJbmZvLnNldEVtcHR5KGZhbHNlLCAmbV9ibG9jaywgJm1fd2lkdGgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAkocmV2aXNpb24gMTk3
NDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgIHZvaWQgZml0QmVsb3dGbG9h
dHMoYm9vbCBpc0ZpcnN0TGluZSA9IGZhbHNlKTsKICAgICB2b2lkIHNldFRyYWlsaW5nV2hpdGVz
cGFjZVdpZHRoKGZsb2F0IGNvbGxhcHNlZFdoaXRlc3BhY2UsIGZsb2F0IGJvcmRlclBhZGRpbmdN
YXJnaW4gPSAwKTsKICAgICBib29sIHNob3VsZEluZGVudFRleHQoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZEluZGVudFRleHQgPT0gSW5kZW50VGV4dDsgfQorICAgIAorICAgIGJvb2wgaXNGaXJz
dExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBjb21wdXRlQXZhaWxhYmxlV2lkdGhGcm9tTGVmdEFuZFJpZ2h0KCk7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxOTc0NTEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMy0wMiAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlICJmaXJzdCIgdmFsdWUgb2YgdGhlIGhh
bmdpbmctcHVuY3R1YXRpb24gcHJvcGVydHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1bmN0
dWF0aW9uLWZpcnN0LXJ0bC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3Rl
eHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC1ydGwuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QuaHRtbDogQWRkZWQuCisKIDIwMTYt
MDMtMDIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTdWJwaXhl
bCBsYXlvdXQ6IEVuYWJsZSB2ZXJ0aWNhbC9ob3Jpem9udGFsIHN1YnBpeGVsIHNwYWNpbmcgZm9y
IHRhYmxlcy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9u
LWZpcnN0LWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0
L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LWV4cGVjdGVk
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorPGhlYWQ+Cis8c3R5bGU+Cisg
ICAgYm9keSB7IGZvbnQtZmFtaWx5OiAnQWhlbSc7IGNvbG9yOmdyZWVuIH0KKyAgICAuaGFuZyB7
IHRleHQtaW5kZW50OiAtMWVtOyBtYXJnaW46MWVtIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiIGNsYXNzPSJoYW5nIj4oSGFuZyB0ZXN0KTwvZGl2
PgorPGRpdiBzdHlsZT0iY2xlYXI6Ym90aCI+Cis8ZGl2IGNsYXNzPSJoYW5nIj4oVGhpcyBzaG91
bGQgaGFuZy48YnI+KFRoaXMgc2hvdWxkIG5vdC48L2Rpdj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0
eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcg
YW5kIGp1c3RpZnliZWNhdXNlIGFuZCBub3cgd2VyZSBmaW5lLjwvZGl2PgorPGRpdiBjbGFzcz0i
aGFuZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3Bhbj4oPC9z
cGFuPlRoaXMgc2hvdWxkIGhhbmcuPC9kaXY+Cis8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDoxZW07
IHRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3BhbiBzdHlsZT0iYm9yZGVyLWxl
ZnQ6MWVtIHNvbGlkIGJsdWUiPig8L3NwYW4+VGhpcyBzaG91bGQgbm90IGhhbmcuPC9kaXY+Cis8
ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1pbmRlbnQ6MWVtOyB0ZXh0LWFsaWduOmp1c3Rp
Znk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcgaW50byB0aGUgdGV4dC1pbmRlbnQu
PC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtcnRsLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3Qt
cnRsLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQv
aGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC1ydGwtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0IEBACis8aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgZm9udC1mYW1p
bHk6ICdBaGVtJzsgY29sb3I6Z3JlZW4gfQorICAgIC5oYW5nIHsgdGV4dC1pbmRlbnQ6IC0xZW07
IG1hcmdpbjoxZW0gfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJkaXJlY3Rpb246
cnRsIj4KKzxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVzdCk8
L2Rpdj4KKzxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorPGRpdiBjbGFzcz0iaGFuZyI+KFRoaXMg
c2hvdWxkIGhhbmcuPGJyPihUaGlzIHNob3VsZCBub3QuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5n
IiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3VsZCBo
YW5nIGFuZCBqdXN0aWZ5YmVjYXVzZSBhbmQgbm93IHdlcmUgZmluZS48L2Rpdj4KKzxkaXYgY2xh
c3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNwYW4+
KDwvc3Bhbj5UaGlzIHNob3VsZCBoYW5nLjwvZGl2PgorPGRpdiBzdHlsZT0ibWFyZ2luLXJpZ2h0
OjFlbTsgdGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPjxzcGFuIHN0eWxlPSJib3Jk
ZXItcmlnaHQ6MWVtIHNvbGlkIGJsdWUiPig8L3NwYW4+VGhpcyBzaG91bGQgbm90IGhhbmcuPC9k
aXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1pbmRlbnQ6MWVtOyB0ZXh0LWFsaWdu
Omp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcgaW50byB0aGUgdGV4dC1p
bmRlbnQuPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtcnRsLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtcnRs
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5j
dHVhdGlvbi1maXJzdC1ydGwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0IEBACis8
aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgZm9udC1mYW1pbHk6ICdBaGVtJzsgY29sb3I6Z3Jl
ZW4gfQorICAgIC5oYW5nIHsgaGFuZ2luZy1wdW5jdHVhdGlvbjogZmlyc3Q7IG1hcmdpbjoxZW0g
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJkaXJlY3Rpb246cnRsIj4KKzxkaXYg
c3R5bGU9ImZsb2F0OnJpZ2h0IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVzdCk8L2Rpdj4KKzxkaXYg
c3R5bGU9ImNsZWFyOmJvdGgiPgorPGRpdiBjbGFzcz0iaGFuZyI+KFRoaXMgc2hvdWxkIGhhbmcu
PGJyPihUaGlzIHNob3VsZCBub3QuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4
dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3VsZCBoYW5nIGFuZCBqdXN0
aWZ5YmVjYXVzZSBhbmQgbm93IHdlcmUgZmluZS48L2Rpdj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0
eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNwYW4+KDwvc3Bhbj5UaGlz
IHNob3VsZCBoYW5nLjwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRleHQtYWxpZ246
anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3BhbiBzdHlsZT0iYm9yZGVyLXJpZ2h0OjFlbSBzb2xp
ZCBibHVlIj4oPC9zcGFuPlRoaXMgc2hvdWxkIG5vdCBoYW5nLjwvZGl2PgorPGRpdiBjbGFzcz0i
aGFuZyIgc3R5bGU9InRleHQtaW5kZW50OjJlbTsgdGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDoz
MDBweDsiPihUaGlzIHNob3VsZCBoYW5nIGludG8gdGhlIHRleHQtaW5kZW50LjwvZGl2PgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5n
aW5nLXB1bmN0dWF0aW9uLWZpcnN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0Lmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorPGhlYWQ+Cis8c3R5bGU+CisgICAgYm9keSB7IGZv
bnQtZmFtaWx5OiAnQWhlbSc7IGNvbG9yOmdyZWVuIH0KKyAgICAuaGFuZyB7IGhhbmdpbmctcHVu
Y3R1YXRpb246IGZpcnN0OyBtYXJnaW46MWVtIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiIGNsYXNzPSJoYW5nIj4oSGFuZyB0ZXN0KTwvZGl2Pgor
PGRpdiBzdHlsZT0iY2xlYXI6Ym90aCI+Cis8ZGl2IGNsYXNzPSJoYW5nIj4oVGhpcyBzaG91bGQg
aGFuZy48YnI+KFRoaXMgc2hvdWxkIG5vdC48L2Rpdj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0eWxl
PSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcgYW5k
IGp1c3RpZnliZWNhdXNlIGFuZCBub3cgd2VyZSBmaW5lLjwvZGl2PgorPGRpdiBjbGFzcz0iaGFu
ZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3Bhbj4oPC9zcGFu
PlRoaXMgc2hvdWxkIGhhbmcuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1h
bGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPjxzcGFuIHN0eWxlPSJib3JkZXItbGVmdDoxZW0g
c29saWQgYmx1ZSI+KDwvc3Bhbj5UaGlzIHNob3VsZCBub3QgaGFuZy48L2Rpdj4KKzxkaXYgY2xh
c3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWluZGVudDoyZW07IHRleHQtYWxpZ246anVzdGlmeTsgd2lk
dGg6MzAwcHg7Ij4oVGhpcyBzaG91bGQgaGFuZyBpbnRvIHRoZSB0ZXh0LWluZGVudC48L2Rpdj4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272661</attachid>
            <date>2016-03-02 09:48:36 -0800</date>
            <delta_ts>2016-03-02 09:51:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>20153</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE2LTAzLTAyICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgImZp
cnN0IiB2YWx1ZSBvZiB0aGUgaGFuZ2luZy1wdW5jdHVhdGlvbiBwcm9wZXJ0eS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkxOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0cyBhZGRlZCBp
biBmYXN0L3RleHQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICBVcGRhdGUgdGhlIHByZWZlcnJlZCBsb2dpY2FsIHdp
ZHRoIGNvbXB1dGF0aW9uIHRvIGZhY3RvciBpbiBoYW5naW5nIHB1bmN0dWF0aW9uLgorICAgICAg
ICBUaGlzIGNoZWNrIGlzIHNpbWlsYXIgdG8gdGhlIHRleHQtaW5kZW50IGxvZ2ljIGluIHRoYXQg
d2Ugb25seSB3YW50IHRvIGRvIGl0IGZvcgorICAgICAgICB0aGUgZmlyc3QgZm9ybWF0dGVkIGxp
bmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQpOgorICAgICAgICBNYWtl
IHN1cmUgdG8gdHVybiBvZmYgc2ltcGxlIGxpbmUgbGF5b3V0IHdoZW4gaGFuZ2luZyBwdW5jdHVh
dGlvbiBpcyBwcmVzZW50LiBFdmVudHVhbGx5CisgICAgICAgIGl0IHNob3VsZCBiZSBmZWFzaWJs
ZSB0byBzdXBwb3J0IHRoaXMgaW4gc2ltcGxlIGxpbmUgbGF5b3V0LCBidXQgc2luY2UgdGhlIGZ1
bGwgbGluZQorICAgICAgICBsYXlvdXQgbW9kZWwgaGFzIHRvIHdvcmsgd2l0aCBpdCBhbnl3YXks
IHdlIGFyZSBzdGFydGluZyB0aGVyZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5saW5lQW5jZXN0b3JIYXNTdGFy
dEJvcmRlclBhZGRpbmdPck1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjppc0xhc3RJbkZsb3dS
dW4pOgorICAgICAgICBIZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIG5lZWRlZCB0byBkZXRlcm1p
bmUgd2hldGhlciBvciBub3Qgd2UncmUgYWxsb3dlZCB0byBhcHBseQorICAgICAgICBoYW5naW5n
IHB1bmN0dWF0aW9uICJmaXJzdCIgdG8gYSB0ZXh0IHJ1bi4KKworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVu
dCk6CisgICAgICAgIFRoaXMgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgbG9naWNhbExlZnQgYW5kIGF2
YWlsYWJsZVdpZHRoIHdoZW4gaGFuZ2luZyBwdW5jdHVhdGlvbgorICAgICAgICBpcyBwcmVzZW50
IHRvIHNoaWZ0IHRoZSBsaW5lIGFzIG5lZWRlZCBhbmQgdG8gZXhwYW5kIHRoZSBhdmFpbGFibGVX
aWR0aCBvZiB0aGUgbGluZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZVN0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZUVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgUmVuZGVyVGV4dCBoYXMgYSBoZWxw
ZXIgZnVuY3Rpb24gZm9yIGhhbmRpbmcgYmFjayB0aGUgaGFuZ2FibGUgcHVuY3R1YXRpb24gd2lk
dGguIFRoaXMKKyAgICAgICAgaXMgdXNlZCBldmVyeXdoZXJlIGxpbmUgbGF5b3V0IHdhbnRzIHRv
IGFwcGx5IHRoYXQgb2Zmc2V0LiBUaGVyZSBhcmUgYWxzbyBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIHRoYXQgZGV0ZWN0IHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIGhhbmdhYmxlIHB1bmN0
dWF0aW9uIGNoYXJhY3Rlci4KKworICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcldpdGhS
ZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6cHJpbnRSZWFzb24p
OgorICAgICAgICBUdXJuIG9mZiBzaW1wbGUgbGluZSBsYXlvdXQgd2hlbiBoYW5naW5nIHB1bmN0
dWF0aW9uIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9CcmVha2luZ0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCk6
CisgICAgICAgIE1vZGlmaWVkIHRvIGV4cGFuZCB0aGUgYXZhaWxhYmxlIHdpZHRoIHdoZW4gaGFu
Z2luZyBwdW5jdHVhdGlvbiBpcyBwcmVzZW50IHNvIHRoYXQgd2UKKyAgICAgICAga25vdyB3ZSBo
YXZlIG1vcmUgcm9vbSBvbiB0aGUgbGluZS4KKworICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xp
bmVXaWR0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjppc0ZpcnN0TGluZSk6Cisg
ICAgICAgIEFkZCBhbiBhY2Nlc3NvciBmb3Igd2hldGhlciBvciBub3Qgd2UncmUgdGhlIGZpcnN0
IGxpbmUuCisKIDIwMTYtMDMtMDIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdWJwaXhlbCBsYXlvdXQ6IEVuYWJsZSB2ZXJ0aWNhbC9ob3Jpem9udGFsIHN1YnBp
eGVsIHNwYWNpbmcgZm9yIHRhYmxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA2NCw2
ICs0MDY0LDkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVQcmVmZQogICAg
IFJlbmRlck9iamVjdCogcHJldkZsb2F0ID0gMDsKICAgICBib29sIGlzUHJldkNoaWxkSW5saW5l
RmxvdyA9IGZhbHNlOwogICAgIGJvb2wgc2hvdWxkQnJlYWtMaW5lQWZ0ZXJUZXh0ID0gZmFsc2U7
CisgICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gc3R5bGVUb1VzZS5oYW5naW5n
UHVuY3R1YXRpb24oKSAmIEZpcnN0SGFuZ2luZ1B1bmN0dWF0aW9uOworICAgIGJvb2wgYWRkZWRT
dGFydFB1bmN0dWF0aW9uSGFuZyA9IGZhbHNlOworICAgIAogICAgIHdoaWxlIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgYm9vbCBhdXRvV3Jh
cCA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgPyBjaGlsZC0+cGFyZW50KCktPnN0eWxlKCkuYXV0b1dy
YXAoKSA6CiAgICAgICAgICAgICBjaGlsZC0+c3R5bGUoKS5hdXRvV3JhcCgpOwpAQCAtNDE3OSw2
ICs0MTgyLDkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVQcmVmZQogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJ
bmRlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCAmJiAhYWRkZWRTdGFydFB1
bmN0dWF0aW9uSGFuZyAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiAhaXNBbm9ueW1vdXNJbmxp
bmVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFuZyA9
IHRydWU7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgb3VyIHdpZHRoIHRvIHRoZSBtYXguCiAg
ICAgICAgICAgICAgICAgaW5saW5lTWF4ICs9IHN0ZDo6bWF4PGZsb2F0PigwLCBjaGlsZE1heCk7
CkBAIC00MjY3LDcgKzQyNzMsMTcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxp
bmVQcmVmZQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVtYWluaW5nTmVnYXRpdmVUZXh0
SW5kZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
LQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEg
aGFuZ2luZyBwdW5jdHVhdGlvbiBzaXR1YXRpb24gYXQgdGhlIHN0YXJ0LgorICAgICAgICAgICAg
ICAgIGlmIChjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ICYmICFhZGRlZFN0YXJ0UHVuY3R1YXRp
b25IYW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGhhbmdTdGFydFdpZHRoID0gcmVu
ZGVyVGV4dC5oYW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCgpOworICAgICAgICAgICAgICAg
ICAgICBjaGlsZE1pbiAtPSBoYW5nU3RhcnRXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgYmVn
aW5NaW4gLT0gaGFuZ1N0YXJ0V2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4IC09
IGhhbmdTdGFydFdpZHRoOworICAgICAgICAgICAgICAgICAgICBiZWdpbk1heCAtPSBoYW5nU3Rh
cnRXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFuZyA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIElmIHdlIGhhdmUgbm8gYnJlYWthYmxlIGNoYXJhY3RlcnMgYXQgYWxsLAogICAgICAg
ICAgICAgICAgIC8vIHRoZW4gdGhpcyBpcyB0aGUgZWFzeSBjYXNlLiBXZSBhZGQgb3Vyc2VsdmVz
IHRvIHRoZSBjdXJyZW50CiAgICAgICAgICAgICAgICAgLy8gbWluIGFuZCBtYXggYW5kIGNvbnRp
bnVlLgpAQCAtNDMwNSw2ICs0MzIxLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJ
bmxpbmVQcmVmZQogICAgICAgICAgICAgICAgICAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVmZXJy
ZWRXaWR0aChtYXhMb2dpY2FsV2lkdGgsIGNoaWxkTWF4KTsKICAgICAgICAgICAgICAgICAgICAg
aW5saW5lTWF4ID0gZW5kTWF4OwogICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBhZGRlZFN0YXJ0UHVuY3R1YXRpb25IYW5nID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgaW5saW5l
TWF4ICs9IHN0ZDo6bWF4PGZsb2F0PigwLCBjaGlsZE1heCk7CiAgICAgICAgICAgICB9CkBAIC00
MzE5LDYgKzQzMzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZVByZWZl
CiAgICAgICAgICAgICBzdHJpcEZyb250U3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgIHRyYWls
aW5nU3BhY2VDaGlsZCA9IDA7CiAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0cnVlOwor
ICAgICAgICAgICAgYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFuZyA9IHRydWU7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIWNoaWxkLT5pc1RleHQoKSAmJiBjaGlsZC0+aXNSZW5kZXJJbmxpbmUo
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA2LDExICs4
MDYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5RXhwYW5zaW9uQmVoYXZpbwogICAgIH0K
IH0KIAorc3RhdGljIGJvb2wgaW5saW5lQW5jZXN0b3JIYXNTdGFydEJvcmRlclBhZGRpbmdPck1h
cmdpbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLCBJbmxpbmVCb3gqIGJveCkKK3sKKyAg
ICBib29sIGlzTFRSID0gYmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Cisg
ICAgZm9yIChhdXRvKiBjdXJyZW50Qm94ID0gYm94LT5wYXJlbnQoKTsgY3VycmVudEJveDsgY3Vy
cmVudEJveCA9IGN1cnJlbnRCb3gtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICgoaXNMVFIgJiYg
Y3VycmVudEJveC0+bWFyZ2luQm9yZGVyUGFkZGluZ0xvZ2ljYWxMZWZ0KCkgPiAwKQorICAgICAg
ICAgICAgfHwgKCFpc0xUUiAmJiBjdXJyZW50Qm94LT5tYXJnaW5Cb3JkZXJQYWRkaW5nTG9naWNh
bFJpZ2h0KCkgPiAwKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGlzTGFzdEluRmxvd1J1bihCaWRpUnVuKiBydW4p
Cit7CisgICAgZm9yIChydW4gPSBydW4tPm5leHQoKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkg
eworICAgICAgICBpZiAoIXJ1bi0+Ym94KCkgfHwgcnVuLT5yZW5kZXJlcigpLmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpIHx8IHJ1bi0+Ym94KCktPmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKyAgICAKIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlv
blBvc2l0aW9uc0ZvclNlZ21lbnQoUm9vdElubGluZUJveCogbGluZUJveCwgY29uc3QgTGluZUlu
Zm8mIGxpbmVJbmZvLCBFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCAK
ICAgICBmbG9hdCYgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlk
aVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAm
IHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25D
YWNoZSwKICAgICBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogewogICAgIGJv
b2wgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOworICAgIGJvb2wgY2FuSGFuZ1B1bmN0dWF0aW9u
QXRTdGFydCA9IHN0eWxlKCkuaGFuZ2luZ1B1bmN0dWF0aW9uKCkgJiBGaXJzdEhhbmdpbmdQdW5j
dHVhdGlvbjsKKyAgICBib29sIGlzTFRSID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCk7CiAgICAgZmxvYXQgdG90YWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LT5nZXRGbG93U3BhY2lu
Z0xvZ2ljYWxXaWR0aCgpOwogICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSAwOwogICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IGlzPFJlbmRlclJ1YnlCYXNlPigqdGhp
cykgPyBkb3duY2FzdDxSZW5kZXJSdWJ5QmFzZT4oKnRoaXMpLmlzQWZ0ZXJFeHBhbnNpb24oKSA6
IHRydWU7CkBAIC04MjcsNiArODUwLDE1IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29t
cHV0ZUlubGluZUQKICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVyZXIoKSkp
IHsKICAgICAgICAgICAgIGF1dG8mIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0Pihy
dW4tPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PElu
bGluZVRleHRCb3g+KCpydW4tPmJveCgpKTsKKyAgICAgICAgICAgIGlmIChjYW5IYW5nUHVuY3R1
YXRpb25BdFN0YXJ0ICYmIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkgJiYgKGlzTFRSIHx8IGlzTGFz
dEluRmxvd1J1bihydW4pKQorICAgICAgICAgICAgICAgICYmICFpbmxpbmVBbmNlc3Rvckhhc1N0
YXJ0Qm9yZGVyUGFkZGluZ09yTWFyZ2luKCp0aGlzLCBydW4tPmJveCgpKSkgeworICAgICAgICAg
ICAgICAgIGZsb2F0IGhhbmdTdGFydFdpZHRoID0gcmVuZGVyVGV4dC5oYW5nYWJsZVB1bmN0dWF0
aW9uU3RhcnRXaWR0aCgpOworICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAr
PSBoYW5nU3RhcnRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0IC09IGhhbmdT
dGFydFdpZHRoOworICAgICAgICAgICAgICAgIGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRleHRB
bGlnbiA9PSBKVVNUSUZZICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNlUnVuKSB7CiAgICAgICAgICAg
ICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBleHBhbnNpb25CZWhh
dmlvckZvcklubGluZVRleHRCb3goKnRoaXMsIHRleHRCb3gsIHByZXZpb3VzUnVuLCBydW4tPm5l
eHQoKSwgdGV4dEFsaWduLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgICAgICAgICBhcHBs
eUV4cGFuc2lvbkJlaGF2aW9yKHRleHRCb3gsIGV4cGFuc2lvbkJlaGF2aW9yKTsKQEAgLTg0NCw2
ICs4NzYsNyBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAKICAg
ICAgICAgICAgIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4obGluZUJveCwgcnVuLCByZW5kZXJU
ZXh0LCB0b3RhbExvZ2ljYWxXaWR0aCwgbGluZUluZm8sIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNh
bFBvc2l0aW9uQ2FjaGUsIHdvcmRNZWFzdXJlbWVudHMpOwogICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCA9IGZhbHNlOwogICAgICAgICAgICAg
Ym9vbCBlbmNvdW50ZXJlZEp1c3RpZmllZFJ1YnkgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChp
czxSZW5kZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpICYmIHRleHRBbGlnbiA9PSBKVVNUSUZZ
ICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNlUnVuICYmIGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KHJ1
bi0+cmVuZGVyZXIoKSkucnVieUJhc2UoKSkgewogICAgICAgICAgICAgICAgIGF1dG8qIHJ1YnlC
YXNlID0gZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5QmFzZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24g
MTk3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDIsNiArNTAyLDMyIEBAIEFMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVy
VGV4dDo6d2lkdGhGcm8KICAgICByZXR1cm4gZi53aWR0aChydW4sIGZhbGxiYWNrRm9udHMsIGds
eXBoT3ZlcmZsb3cpOwogfQogCitpbmxpbmUgYm9vbCBpc0hhbmdhYmxlUHVuY3R1YXRpb25BdExp
bmVTdGFydChVQ2hhciBjKQoreworICAgIHJldHVybiBVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0Nf
UFNfTUFTSyB8IFVfR0NfUElfTUFTSyB8IFVfR0NfUEZfTUFTSyk7Cit9CisKK2lubGluZSBib29s
IGlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZUVuZChVQ2hhciBjKQoreworICAgIHJldHVybiBV
X0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfUEVfTUFTSyB8IFVfR0NfUElfTUFTSyB8IFVfR0NfUEZf
TUFTSyk7Cit9CisKK2Zsb2F0IFJlbmRlclRleHQ6OmhhbmdhYmxlUHVuY3R1YXRpb25TdGFydFdp
ZHRoKCkgY29uc3QKK3sKKyAgICBpZiAoIXRleHRMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgQVNTRVJUKG1fdGV4dCk7CisgICAgU3RyaW5nSW1wbCYgdGV4dCA9ICptX3Rl
eHQuaW1wbCgpOworICAgIGlmICghaXNIYW5nYWJsZVB1bmN0dWF0aW9uQXRMaW5lU3RhcnQodGV4
dFswXSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHls
ZS5mb250Q2FzY2FkZSgpOworICAgICAgICAKKyAgICByZXR1cm4gd2lkdGhGcm9tQ2FjaGUoZm9u
dCwgMCwgMSwgMCwgMCwgMCwgc3R5bGUpOworfQorICAgIAogdm9pZCBSZW5kZXJUZXh0Ojp0cmlt
bWVkUHJlZldpZHRocyhmbG9hdCBsZWFkV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBlbmRNaW5XLCBib29sJiBlbmRXUywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTk3NDUxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wm
IGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQmIGJlZ2luTWF4VywgZmxvYXQmIGVuZE1heFcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCYgbWluVywgZmxvYXQmIG1heFcsIGJvb2wmIHN0cmlwRnJvbnRTcGFj
ZXMpOworICAgIGZsb2F0IGhhbmdhYmxlUHVuY3R1YXRpb25TdGFydFdpZHRoKCkgY29uc3Q7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgpIGNv
bnN0OwogICAgIExheW91dFJlY3QgbGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsOCBAQCBlbnVtIEF2
b2lkYW5jZVJlYXNvbl8gOiB1aW50NjRfdCB7CiAgICAgRmxvd0hhc05vUGFyZW50ICAgICAgICAg
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ2LAogICAgIEZsb3dIYXNOb0NoaWxkICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCA0NywKICAgICBGbG93Q2hpbGRJc1NlbGVjdGVkICAg
ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDgsCi0gICAgRW5kT2ZSZWFzb25zICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ5CisgICAgRmxvd0hhc0hhbmdpbmdQdW5jdHVh
dGlvbiAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ5LAorICAgIEVuZE9mUmVhc29ucyAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA1MAogfTsKIGNvbnN0IHVuc2lnbmVkIE5vUmVh
c29uID0gMDsKIApAQCAtMjgzLDYgKzI4NCw5IEBAIHN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFn
cyBjYW5Vc2VGb3JXaXQKICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SGFzT3V0bGluZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChmbG93Lmlz
UnVieVRleHQoKSB8fCBmbG93LmlzUnVieUJhc2UoKSkKICAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93SXNSdWJ5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgaWYgKGZsb3cuc3R5bGUoKS5oYW5naW5nUHVuY3R1YXRpb24oKSAhPSBOb0hhbmdpbmdQdW5j
dHVhdGlvbikKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
SGFuZ2luZ1B1bmN0dWF0aW9uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgCiAgICAg
Ly8gUHJpbnRpbmcgZG9lcyBwYWdpbmF0aW9uIHdpdGhvdXQgYSBmbG93IHRocmVhZC4KICAgICBp
ZiAoZmxvdy5kb2N1bWVudCgpLnBhZ2luYXRlZCgpKQogICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKEZsb3dJc1BhZ2luYXRlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwpAQCAtNzk3LDYgKzgwMSw5IEBAIHN0YXRpYyB2b2lkIHByaW50UmVhc29uKEF2b2lkYW5jZVJl
YXNvbiAKICAgICBjYXNlIEZsb3dJc1J1Ynk6CiAgICAgICAgIHN0cmVhbSA8PCAicnVieSI7CiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbjoKKyAgICAg
ICAgc3RyZWFtIDw8ICJoYW5naW5nIHB1bmN0dWF0aW9uIjsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGbG93SXNQYWdpbmF0ZWQ6CiAgICAgICAgIHN0cmVhbSA8PCAicGFnaW5hdGVkIjsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2lu
Z0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHQuaAkocmV2aXNpb24gMTk3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTczNyw3ICs3
MzcsOCBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAgICAgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGJvb2wgaXNG
aXhlZFBpdGNoID0gZm9udC5pc0ZpeGVkUGl0Y2goKTsKICAgICBib29sIGNhbkh5cGhlbmF0ZSA9
IHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0byAmJiBXZWJDb3JlOjpjYW5IeXBoZW5hdGUo
c3R5bGUubG9jYWxlKCkpOwotCisgICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0g
c3R5bGUuaGFuZ2luZ1B1bmN0dWF0aW9uKCkgJiBGaXJzdEhhbmdpbmdQdW5jdHVhdGlvbjsKKyAg
ICAKICAgICB1bnNpZ25lZCBsYXN0U3BhY2UgPSBtX2N1cnJlbnQub2Zmc2V0KCk7CiAgICAgZmxv
YXQgd29yZFNwYWNpbmcgPSBtX2N1cnJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS53b3JkU3BhY2lu
ZygpOwogICAgIGZsb2F0IGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKQEAgLTc4Nyw2ICs3ODgs
OSBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAgICAgICAgIFVD
aGFyIGMgPSBtX2N1cnJlbnQuY3VycmVudCgpOwogICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlID0gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8ICghbV9wcmVzZXJ2ZXNOZXdsaW5lICYm
IChjID09ICdcbicpKTsKIAorICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCAm
JiAhbV9jdXJyZW50Lm9mZnNldCgpICYmIG1fd2lkdGguaXNGaXJzdExpbmUoKSAmJiAgIW1fd2lk
dGguY29tbWl0dGVkV2lkdGgoKSAmJiAhd3JhcFcgJiYgIW1fY3VycmVudC5vZmZzZXQoKSkKKyAg
ICAgICAgICAgIG1fd2lkdGguYWRkVW5jb21taXR0ZWRXaWR0aCgtcmVuZGVyVGV4dC5oYW5nYWJs
ZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCgpKTsKKyAgICAgICAgICAgIAogICAgICAgICBpZiAoIW1f
Y29sbGFwc2VXaGl0ZVNwYWNlIHx8ICFtX2N1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlKQogICAgICAg
ICAgICAgbV9saW5lSW5mby5zZXRFbXB0eShmYWxzZSwgJm1fYmxvY2ssICZtX3dpZHRoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmgJKHJldmlzaW9u
IDE5NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVXaWR0aC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpdEJlbG93
RmxvYXRzKGJvb2wgaXNGaXJzdExpbmUgPSBmYWxzZSk7CiAgICAgdm9pZCBzZXRUcmFpbGluZ1do
aXRlc3BhY2VXaWR0aChmbG9hdCBjb2xsYXBzZWRXaGl0ZXNwYWNlLCBmbG9hdCBib3JkZXJQYWRk
aW5nTWFyZ2luID0gMCk7CiAgICAgYm9vbCBzaG91bGRJbmRlbnRUZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRJbmRlbnRUZXh0ID09IEluZGVudFRleHQ7IH0KKyAgICAKKyAgICBib29sIGlz
Rmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpcnN0TGluZTsgfQogCiBwcml2YXRlOgog
ICAgIHZvaWQgY29tcHV0ZUF2YWlsYWJsZVdpZHRoRnJvbUxlZnRBbmRSaWdodCgpOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTk3NDUxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDMtMDIgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSAiZmlyc3QiIHZhbHVlIG9mIHRo
ZSBoYW5naW5nLXB1bmN0dWF0aW9uIHByb3BlcnR5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1m
aXJzdC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvaGFuZ2luZy1w
dW5jdHVhdGlvbi1maXJzdC1ydGwtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtcnRsLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0Lmh0bWw6IEFkZGVkLgorCiAy
MDE2LTAzLTAyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU3Vi
cGl4ZWwgbGF5b3V0OiBFbmFibGUgdmVydGljYWwvaG9yaXpvbnRhbCBzdWJwaXhlbCBzcGFjaW5n
IGZvciB0YWJsZXMuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVh
dGlvbi1maXJzdC1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
dGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC1leHBl
Y3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKKzxoZWFkPgorPHN0eWxl
PgorICAgIGJvZHkgeyBmb250LWZhbWlseTogJ0FoZW0nOyBjb2xvcjpncmVlbiB9CisgICAgLmhh
bmcgeyB0ZXh0LWluZGVudDogLTFlbTsgbWFyZ2luOjFlbSB9Cis8L3N0eWxlPgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVzdCk8
L2Rpdj4KKzxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorPGRpdiBjbGFzcz0iaGFuZyI+KFRoaXMg
c2hvdWxkIGhhbmcuPGJyPihUaGlzIHNob3VsZCBub3QuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5n
IiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3VsZCBo
YW5nIGFuZCBqdXN0aWZ5YmVjYXVzZSBhbmQgbm93IHdlcmUgZmluZS48L2Rpdj4KKzxkaXYgY2xh
c3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNwYW4+
KDwvc3Bhbj5UaGlzIHNob3VsZCBoYW5nLjwvZGl2PgorPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6
MWVtOyB0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNwYW4gc3R5bGU9ImJvcmRl
ci1sZWZ0OjFlbSBzb2xpZCBibHVlIj4oPC9zcGFuPlRoaXMgc2hvdWxkIG5vdCBoYW5nLjwvZGl2
PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRleHQtaW5kZW50OjFlbTsgdGV4dC1hbGlnbjpq
dXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3VsZCBoYW5nIGludG8gdGhlIHRleHQtaW5k
ZW50LjwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LXJ0bC1leHBlY3RlZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZp
cnN0LXJ0bC1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC90
ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtcnRsLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNCBAQAorPGhlYWQ+Cis8c3R5bGU+CisgICAgYm9keSB7IGZvbnQt
ZmFtaWx5OiAnQWhlbSc7IGNvbG9yOmdyZWVuIH0KKyAgICAuaGFuZyB7IHRleHQtaW5kZW50OiAt
MWVtOyBtYXJnaW46MWVtIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0iZGlyZWN0
aW9uOnJ0bCI+Cis8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodCIgY2xhc3M9ImhhbmciPihIYW5nIHRl
c3QpPC9kaXY+Cis8ZGl2IHN0eWxlPSJjbGVhcjpib3RoIj4KKzxkaXYgY2xhc3M9ImhhbmciPihU
aGlzIHNob3VsZCBoYW5nLjxicj4oVGhpcyBzaG91bGQgbm90LjwvZGl2PgorPGRpdiBjbGFzcz0i
aGFuZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij4oVGhpcyBzaG91
bGQgaGFuZyBhbmQganVzdGlmeWJlY2F1c2UgYW5kIG5vdyB3ZXJlIGZpbmUuPC9kaXY+Cis8ZGl2
IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPjxz
cGFuPig8L3NwYW4+VGhpcyBzaG91bGQgaGFuZy48L2Rpdj4KKzxkaXYgc3R5bGU9Im1hcmdpbi1y
aWdodDoxZW07IHRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3BhbiBzdHlsZT0i
Ym9yZGVyLXJpZ2h0OjFlbSBzb2xpZCBibHVlIj4oPC9zcGFuPlRoaXMgc2hvdWxkIG5vdCBoYW5n
LjwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRleHQtaW5kZW50OjFlbTsgdGV4dC1h
bGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3VsZCBoYW5nIGludG8gdGhlIHRl
eHQtaW5kZW50LjwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LXJ0bC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0
LXJ0bC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmct
cHVuY3R1YXRpb24tZmlyc3QtcnRsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBA
QAorPGhlYWQ+Cis8c3R5bGU+CisgICAgYm9keSB7IGZvbnQtZmFtaWx5OiAnQWhlbSc7IGNvbG9y
OmdyZWVuIH0KKyAgICAuaGFuZyB7IGhhbmdpbmctcHVuY3R1YXRpb246IGZpcnN0OyBtYXJnaW46
MWVtIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0iZGlyZWN0aW9uOnJ0bCI+Cis8
ZGl2IHN0eWxlPSJmbG9hdDpyaWdodCIgY2xhc3M9ImhhbmciPihIYW5nIHRlc3QpPC9kaXY+Cis8
ZGl2IHN0eWxlPSJjbGVhcjpib3RoIj4KKzxkaXYgY2xhc3M9ImhhbmciPihUaGlzIHNob3VsZCBo
YW5nLjxicj4oVGhpcyBzaG91bGQgbm90LjwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9
InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij4oVGhpcyBzaG91bGQgaGFuZyBhbmQg
anVzdGlmeWJlY2F1c2UgYW5kIG5vdyB3ZXJlIGZpbmUuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5n
IiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPjxzcGFuPig8L3NwYW4+
VGhpcyBzaG91bGQgaGFuZy48L2Rpdj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFs
aWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNwYW4gc3R5bGU9ImJvcmRlci1yaWdodDoxZW0g
c29saWQgYmx1ZSI+KDwvc3Bhbj5UaGlzIHNob3VsZCBub3QgaGFuZy48L2Rpdj4KKzxkaXYgY2xh
c3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWluZGVudDoyZW07IHRleHQtYWxpZ246anVzdGlmeTsgd2lk
dGg6MzAwcHg7Ij4oVGhpcyBzaG91bGQgaGFuZyBpbnRvIHRoZSB0ZXh0LWluZGVudC48L2Rpdj4K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQv
aGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKKzxoZWFkPgorPHN0eWxlPgorICAgIGJvZHkg
eyBmb250LWZhbWlseTogJ0FoZW0nOyBjb2xvcjpncmVlbiB9CisgICAgLmhhbmcgeyBoYW5naW5n
LXB1bmN0dWF0aW9uOiBmaXJzdDsgbWFyZ2luOjFlbSB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVzdCk8L2Rp
dj4KKzxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorPGRpdiBjbGFzcz0iaGFuZyI+KFRoaXMgc2hv
dWxkIGhhbmcuPGJyPihUaGlzIHNob3VsZCBub3QuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBz
dHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3VsZCBoYW5n
IGFuZCBqdXN0aWZ5YmVjYXVzZSBhbmQgbm93IHdlcmUgZmluZS48L2Rpdj4KKzxkaXYgY2xhc3M9
ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNwYW4+KDwv
c3Bhbj5UaGlzIHNob3VsZCBoYW5nLjwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRl
eHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3BhbiBzdHlsZT0iYm9yZGVyLWxlZnQ6
MWVtIHNvbGlkIGJsdWUiPig8L3NwYW4+VGhpcyBzaG91bGQgbm90IGhhbmcuPC9kaXY+Cis8ZGl2
IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1pbmRlbnQ6MmVtOyB0ZXh0LWFsaWduOmp1c3RpZnk7
IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcgaW50byB0aGUgdGV4dC1pbmRlbnQuPC9k
aXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272663</attachid>
            <date>2016-03-02 09:51:12 -0800</date>
            <delta_ts>2016-03-02 09:59:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>20152</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzQ1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE2LTAzLTAyICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgImZp
cnN0IiB2YWx1ZSBvZiB0aGUgaGFuZ2luZy1wdW5jdHVhdGlvbiBwcm9wZXJ0eS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDkxOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0cyBhZGRlZCBp
biBmYXN0L3RleHQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICBVcGRhdGUgdGhlIHByZWZlcnJlZCBsb2dpY2FsIHdp
ZHRoIGNvbXB1dGF0aW9uIHRvIGZhY3RvciBpbiBoYW5naW5nIHB1bmN0dWF0aW9uLgorICAgICAg
ICBUaGlzIGNoZWNrIGlzIHNpbWlsYXIgdG8gdGhlIHRleHQtaW5kZW50IGxvZ2ljIGluIHRoYXQg
d2Ugb25seSB3YW50IHRvIGRvIGl0IGZvcgorICAgICAgICB0aGUgZmlyc3QgZm9ybWF0dGVkIGxp
bmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQpOgorICAgICAgICBNYWtl
IHN1cmUgdG8gdHVybiBvZmYgc2ltcGxlIGxpbmUgbGF5b3V0IHdoZW4gaGFuZ2luZyBwdW5jdHVh
dGlvbiBpcyBwcmVzZW50LiBFdmVudHVhbGx5CisgICAgICAgIGl0IHNob3VsZCBiZSBmZWFzaWJs
ZSB0byBzdXBwb3J0IHRoaXMgaW4gc2ltcGxlIGxpbmUgbGF5b3V0LCBidXQgc2luY2UgdGhlIGZ1
bGwgbGluZQorICAgICAgICBsYXlvdXQgbW9kZWwgaGFzIHRvIHdvcmsgd2l0aCBpdCBhbnl3YXks
IHdlIGFyZSBzdGFydGluZyB0aGVyZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5saW5lQW5jZXN0b3JIYXNTdGFy
dEJvcmRlclBhZGRpbmdPck1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjppc0xhc3RJbkZsb3dS
dW4pOgorICAgICAgICBIZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIG5lZWRlZCB0byBkZXRlcm1p
bmUgd2hldGhlciBvciBub3Qgd2UncmUgYWxsb3dlZCB0byBhcHBseQorICAgICAgICBoYW5naW5n
IHB1bmN0dWF0aW9uICJmaXJzdCIgdG8gYSB0ZXh0IHJ1bi4KKworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVu
dCk6CisgICAgICAgIFRoaXMgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgbG9naWNhbExlZnQgYW5kIGF2
YWlsYWJsZVdpZHRoIHdoZW4gaGFuZ2luZyBwdW5jdHVhdGlvbgorICAgICAgICBpcyBwcmVzZW50
IHRvIHNoaWZ0IHRoZSBsaW5lIGFzIG5lZWRlZCBhbmQgdG8gZXhwYW5kIHRoZSBhdmFpbGFibGVX
aWR0aCBvZiB0aGUgbGluZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZVN0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZUVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgUmVuZGVyVGV4dCBoYXMgYSBoZWxw
ZXIgZnVuY3Rpb24gZm9yIGhhbmRpbmcgYmFjayB0aGUgaGFuZ2FibGUgcHVuY3R1YXRpb24gd2lk
dGguIFRoaXMKKyAgICAgICAgaXMgdXNlZCBldmVyeXdoZXJlIGxpbmUgbGF5b3V0IHdhbnRzIHRv
IGFwcGx5IHRoYXQgb2Zmc2V0LiBUaGVyZSBhcmUgYWxzbyBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIHRoYXQgZGV0ZWN0IHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIGhhbmdhYmxlIHB1bmN0
dWF0aW9uIGNoYXJhY3Rlci4KKworICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcldpdGhS
ZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6cHJpbnRSZWFzb24p
OgorICAgICAgICBUdXJuIG9mZiBzaW1wbGUgbGluZSBsYXlvdXQgd2hlbiBoYW5naW5nIHB1bmN0
dWF0aW9uIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9CcmVha2luZ0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dCk6
CisgICAgICAgIE1vZGlmaWVkIHRvIGV4cGFuZCB0aGUgYXZhaWxhYmxlIHdpZHRoIHdoZW4gaGFu
Z2luZyBwdW5jdHVhdGlvbiBpcyBwcmVzZW50IHNvIHRoYXQgd2UKKyAgICAgICAga25vdyB3ZSBo
YXZlIG1vcmUgcm9vbSBvbiB0aGUgbGluZS4KKworICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xp
bmVXaWR0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGluZVdpZHRoOjppc0ZpcnN0TGluZSk6Cisg
ICAgICAgIEFkZCBhbiBhY2Nlc3NvciBmb3Igd2hldGhlciBvciBub3Qgd2UncmUgdGhlIGZpcnN0
IGxpbmUuCisKIDIwMTYtMDMtMDIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdWJwaXhlbCBsYXlvdXQ6IEVuYWJsZSB2ZXJ0aWNhbC9ob3Jpem9udGFsIHN1YnBp
eGVsIHNwYWNpbmcgZm9yIHRhYmxlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA2NCw2
ICs0MDY0LDkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVQcmVmZQogICAg
IFJlbmRlck9iamVjdCogcHJldkZsb2F0ID0gMDsKICAgICBib29sIGlzUHJldkNoaWxkSW5saW5l
RmxvdyA9IGZhbHNlOwogICAgIGJvb2wgc2hvdWxkQnJlYWtMaW5lQWZ0ZXJUZXh0ID0gZmFsc2U7
CisgICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gc3R5bGVUb1VzZS5oYW5naW5n
UHVuY3R1YXRpb24oKSAmIEZpcnN0SGFuZ2luZ1B1bmN0dWF0aW9uOworICAgIGJvb2wgYWRkZWRT
dGFydFB1bmN0dWF0aW9uSGFuZyA9IGZhbHNlOworICAgIAogICAgIHdoaWxlIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgYm9vbCBhdXRvV3Jh
cCA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgPyBjaGlsZC0+cGFyZW50KCktPnN0eWxlKCkuYXV0b1dy
YXAoKSA6CiAgICAgICAgICAgICBjaGlsZC0+c3R5bGUoKS5hdXRvV3JhcCgpOwpAQCAtNDE3OSw2
ICs0MTgyLDkgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVQcmVmZQogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJ
bmRlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCAmJiAhYWRkZWRTdGFydFB1
bmN0dWF0aW9uSGFuZyAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiAhaXNBbm9ueW1vdXNJbmxp
bmVCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFuZyA9
IHRydWU7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgb3VyIHdpZHRoIHRvIHRoZSBtYXguCiAg
ICAgICAgICAgICAgICAgaW5saW5lTWF4ICs9IHN0ZDo6bWF4PGZsb2F0PigwLCBjaGlsZE1heCk7
CkBAIC00MjY3LDcgKzQyNzMsMTcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxp
bmVQcmVmZQogICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVtYWluaW5nTmVnYXRpdmVUZXh0
SW5kZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
LQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEg
aGFuZ2luZyBwdW5jdHVhdGlvbiBzaXR1YXRpb24gYXQgdGhlIHN0YXJ0LgorICAgICAgICAgICAg
ICAgIGlmIChjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ICYmICFhZGRlZFN0YXJ0UHVuY3R1YXRp
b25IYW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGhhbmdTdGFydFdpZHRoID0gcmVu
ZGVyVGV4dC5oYW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCgpOworICAgICAgICAgICAgICAg
ICAgICBjaGlsZE1pbiAtPSBoYW5nU3RhcnRXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgYmVn
aW5NaW4gLT0gaGFuZ1N0YXJ0V2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4IC09
IGhhbmdTdGFydFdpZHRoOworICAgICAgICAgICAgICAgICAgICBiZWdpbk1heCAtPSBoYW5nU3Rh
cnRXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFuZyA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIElmIHdlIGhhdmUgbm8gYnJlYWthYmxlIGNoYXJhY3RlcnMgYXQgYWxsLAogICAgICAg
ICAgICAgICAgIC8vIHRoZW4gdGhpcyBpcyB0aGUgZWFzeSBjYXNlLiBXZSBhZGQgb3Vyc2VsdmVz
IHRvIHRoZSBjdXJyZW50CiAgICAgICAgICAgICAgICAgLy8gbWluIGFuZCBtYXggYW5kIGNvbnRp
bnVlLgpAQCAtNDMwNSw2ICs0MzIxLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJ
bmxpbmVQcmVmZQogICAgICAgICAgICAgICAgICAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVmZXJy
ZWRXaWR0aChtYXhMb2dpY2FsV2lkdGgsIGNoaWxkTWF4KTsKICAgICAgICAgICAgICAgICAgICAg
aW5saW5lTWF4ID0gZW5kTWF4OwogICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBhZGRlZFN0YXJ0UHVuY3R1YXRpb25IYW5nID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgaW5saW5l
TWF4ICs9IHN0ZDo6bWF4PGZsb2F0PigwLCBjaGlsZE1heCk7CiAgICAgICAgICAgICB9CkBAIC00
MzE5LDYgKzQzMzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZVByZWZl
CiAgICAgICAgICAgICBzdHJpcEZyb250U3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgIHRyYWls
aW5nU3BhY2VDaGlsZCA9IDA7CiAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0cnVlOwor
ICAgICAgICAgICAgYWRkZWRTdGFydFB1bmN0dWF0aW9uSGFuZyA9IHRydWU7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIWNoaWxkLT5pc1RleHQoKSAmJiBjaGlsZC0+aXNSZW5kZXJJbmxpbmUo
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA2LDExICs4
MDYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5RXhwYW5zaW9uQmVoYXZpbwogICAgIH0K
IH0KIAorc3RhdGljIGJvb2wgaW5saW5lQW5jZXN0b3JIYXNTdGFydEJvcmRlclBhZGRpbmdPck1h
cmdpbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLCBJbmxpbmVCb3gqIGJveCkKK3sKKyAg
ICBib29sIGlzTFRSID0gYmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Cisg
ICAgZm9yIChhdXRvKiBjdXJyZW50Qm94ID0gYm94LT5wYXJlbnQoKTsgY3VycmVudEJveDsgY3Vy
cmVudEJveCA9IGN1cnJlbnRCb3gtPnBhcmVudCgpKSB7CisgICAgICAgIGlmICgoaXNMVFIgJiYg
Y3VycmVudEJveC0+bWFyZ2luQm9yZGVyUGFkZGluZ0xvZ2ljYWxMZWZ0KCkgPiAwKQorICAgICAg
ICAgICAgfHwgKCFpc0xUUiAmJiBjdXJyZW50Qm94LT5tYXJnaW5Cb3JkZXJQYWRkaW5nTG9naWNh
bFJpZ2h0KCkgPiAwKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGlzTGFzdEluRmxvd1J1bihCaWRpUnVuKiBydW4p
Cit7CisgICAgZm9yIChydW4gPSBydW4tPm5leHQoKTsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkg
eworICAgICAgICBpZiAoIXJ1bi0+Ym94KCkgfHwgcnVuLT5yZW5kZXJlcigpLmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpIHx8IHJ1bi0+Ym94KCktPmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKyAgICAKIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZURpcmVjdGlv
blBvc2l0aW9uc0ZvclNlZ21lbnQoUm9vdElubGluZUJveCogbGluZUJveCwgY29uc3QgTGluZUlu
Zm8mIGxpbmVJbmZvLCBFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCAK
ICAgICBmbG9hdCYgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlk
aVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAm
IHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25D
YWNoZSwKICAgICBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogewogICAgIGJv
b2wgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNlOworICAgIGJvb2wgY2FuSGFuZ1B1bmN0dWF0aW9u
QXRTdGFydCA9IHN0eWxlKCkuaGFuZ2luZ1B1bmN0dWF0aW9uKCkgJiBGaXJzdEhhbmdpbmdQdW5j
dHVhdGlvbjsKKyAgICBib29sIGlzTFRSID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCk7CiAgICAgZmxvYXQgdG90YWxMb2dpY2FsV2lkdGggPSBsaW5lQm94LT5nZXRGbG93U3BhY2lu
Z0xvZ2ljYWxXaWR0aCgpOwogICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
PSAwOwogICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IGlzPFJlbmRlclJ1YnlCYXNlPigqdGhp
cykgPyBkb3duY2FzdDxSZW5kZXJSdWJ5QmFzZT4oKnRoaXMpLmlzQWZ0ZXJFeHBhbnNpb24oKSA6
IHRydWU7CkBAIC04MjcsNiArODUwLDE1IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6Y29t
cHV0ZUlubGluZUQKICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVyZXIoKSkp
IHsKICAgICAgICAgICAgIGF1dG8mIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0Pihy
dW4tPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PElu
bGluZVRleHRCb3g+KCpydW4tPmJveCgpKTsKKyAgICAgICAgICAgIGlmIChjYW5IYW5nUHVuY3R1
YXRpb25BdFN0YXJ0ICYmIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkgJiYgKGlzTFRSIHx8IGlzTGFz
dEluRmxvd1J1bihydW4pKQorICAgICAgICAgICAgICAgICYmICFpbmxpbmVBbmNlc3Rvckhhc1N0
YXJ0Qm9yZGVyUGFkZGluZ09yTWFyZ2luKCp0aGlzLCBydW4tPmJveCgpKSkgeworICAgICAgICAg
ICAgICAgIGZsb2F0IGhhbmdTdGFydFdpZHRoID0gcmVuZGVyVGV4dC5oYW5nYWJsZVB1bmN0dWF0
aW9uU3RhcnRXaWR0aCgpOworICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAr
PSBoYW5nU3RhcnRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0IC09IGhhbmdT
dGFydFdpZHRoOworICAgICAgICAgICAgICAgIGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRleHRB
bGlnbiA9PSBKVVNUSUZZICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNlUnVuKSB7CiAgICAgICAgICAg
ICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBleHBhbnNpb25CZWhh
dmlvckZvcklubGluZVRleHRCb3goKnRoaXMsIHRleHRCb3gsIHByZXZpb3VzUnVuLCBydW4tPm5l
eHQoKSwgdGV4dEFsaWduLCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgICAgICAgICBhcHBs
eUV4cGFuc2lvbkJlaGF2aW9yKHRleHRCb3gsIGV4cGFuc2lvbkJlaGF2aW9yKTsKQEAgLTg0NCw2
ICs4NzYsNyBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAKICAg
ICAgICAgICAgIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4obGluZUJveCwgcnVuLCByZW5kZXJU
ZXh0LCB0b3RhbExvZ2ljYWxXaWR0aCwgbGluZUluZm8sIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNh
bFBvc2l0aW9uQ2FjaGUsIHdvcmRNZWFzdXJlbWVudHMpOwogICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCA9IGZhbHNlOwogICAgICAgICAgICAg
Ym9vbCBlbmNvdW50ZXJlZEp1c3RpZmllZFJ1YnkgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChp
czxSZW5kZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpICYmIHRleHRBbGlnbiA9PSBKVVNUSUZZ
ICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNlUnVuICYmIGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KHJ1
bi0+cmVuZGVyZXIoKSkucnVieUJhc2UoKSkgewogICAgICAgICAgICAgICAgIGF1dG8qIHJ1YnlC
YXNlID0gZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5QmFzZSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24g
MTk3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDIsNiArNTAyLDMyIEBAIEFMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVy
VGV4dDo6d2lkdGhGcm8KICAgICByZXR1cm4gZi53aWR0aChydW4sIGZhbGxiYWNrRm9udHMsIGds
eXBoT3ZlcmZsb3cpOwogfQogCitpbmxpbmUgYm9vbCBpc0hhbmdhYmxlUHVuY3R1YXRpb25BdExp
bmVTdGFydChVQ2hhciBjKQoreworICAgIHJldHVybiBVX0dFVF9HQ19NQVNLKGMpICYgKFVfR0Nf
UFNfTUFTSyB8IFVfR0NfUElfTUFTSyB8IFVfR0NfUEZfTUFTSyk7Cit9CisKK2lubGluZSBib29s
IGlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZUVuZChVQ2hhciBjKQoreworICAgIHJldHVybiBV
X0dFVF9HQ19NQVNLKGMpICYgKFVfR0NfUEVfTUFTSyB8IFVfR0NfUElfTUFTSyB8IFVfR0NfUEZf
TUFTSyk7Cit9CisKK2Zsb2F0IFJlbmRlclRleHQ6OmhhbmdhYmxlUHVuY3R1YXRpb25TdGFydFdp
ZHRoKCkgY29uc3QKK3sKKyAgICBpZiAoIXRleHRMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgQVNTRVJUKG1fdGV4dCk7CisgICAgU3RyaW5nSW1wbCYgdGV4dCA9ICptX3Rl
eHQuaW1wbCgpOworICAgIGlmICghaXNIYW5nYWJsZVB1bmN0dWF0aW9uQXRMaW5lU3RhcnQodGV4
dFswXSkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSA9IHRoaXMtPnN0eWxlKCk7CisgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHls
ZS5mb250Q2FzY2FkZSgpOworICAgICAgICAKKyAgICByZXR1cm4gd2lkdGhGcm9tQ2FjaGUoZm9u
dCwgMCwgMSwgMCwgMCwgMCwgc3R5bGUpOworfQorICAgIAogdm9pZCBSZW5kZXJUZXh0Ojp0cmlt
bWVkUHJlZldpZHRocyhmbG9hdCBsZWFkV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBlbmRNaW5XLCBib29sJiBlbmRXUywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTk3NDUxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wm
IGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQmIGJlZ2luTWF4VywgZmxvYXQmIGVuZE1heFcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCYgbWluVywgZmxvYXQmIG1heFcsIGJvb2wmIHN0cmlwRnJvbnRTcGFj
ZXMpOworICAgIGZsb2F0IGhhbmdhYmxlUHVuY3R1YXRpb25TdGFydFdpZHRoKCkgY29uc3Q7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgpIGNv
bnN0OwogICAgIExheW91dFJlY3QgbGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwCShyZXZpc2lvbiAxOTc0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsOCBAQCBlbnVtIEF2
b2lkYW5jZVJlYXNvbl8gOiB1aW50NjRfdCB7CiAgICAgRmxvd0hhc05vUGFyZW50ICAgICAgICAg
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ2LAogICAgIEZsb3dIYXNOb0NoaWxkICAgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCA0NywKICAgICBGbG93Q2hpbGRJc1NlbGVjdGVkICAg
ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgNDgsCi0gICAgRW5kT2ZSZWFzb25zICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ5CisgICAgRmxvd0hhc0hhbmdpbmdQdW5jdHVh
dGlvbiAgICAgICAgICAgICA9IDFMTFUgIDw8IDQ5LAorICAgIEVuZE9mUmVhc29ucyAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCA1MAogfTsKIGNvbnN0IHVuc2lnbmVkIE5vUmVh
c29uID0gMDsKIApAQCAtMjgzLDYgKzI4NCw5IEBAIHN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFn
cyBjYW5Vc2VGb3JXaXQKICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChG
bG93SGFzT3V0bGluZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChmbG93Lmlz
UnVieVRleHQoKSB8fCBmbG93LmlzUnVieUJhc2UoKSkKICAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChGbG93SXNSdWJ5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cisg
ICAgaWYgKGZsb3cuc3R5bGUoKS5oYW5naW5nUHVuY3R1YXRpb24oKSAhPSBOb0hhbmdpbmdQdW5j
dHVhdGlvbikKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
SGFuZ2luZ1B1bmN0dWF0aW9uLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CisgICAgCiAgICAg
Ly8gUHJpbnRpbmcgZG9lcyBwYWdpbmF0aW9uIHdpdGhvdXQgYSBmbG93IHRocmVhZC4KICAgICBp
ZiAoZmxvdy5kb2N1bWVudCgpLnBhZ2luYXRlZCgpKQogICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKEZsb3dJc1BhZ2luYXRlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwpAQCAtNzk3LDYgKzgwMSw5IEBAIHN0YXRpYyB2b2lkIHByaW50UmVhc29uKEF2b2lkYW5jZVJl
YXNvbiAKICAgICBjYXNlIEZsb3dJc1J1Ynk6CiAgICAgICAgIHN0cmVhbSA8PCAicnVieSI7CiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc0hhbmdpbmdQdW5jdHVhdGlvbjoKKyAgICAg
ICAgc3RyZWFtIDw8ICJoYW5naW5nIHB1bmN0dWF0aW9uIjsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGbG93SXNQYWdpbmF0ZWQ6CiAgICAgICAgIHN0cmVhbSA8PCAicGFnaW5hdGVkIjsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2lu
Z0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9C
cmVha2luZ0NvbnRleHQuaAkocmV2aXNpb24gMTk3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTczNyw3ICs3
MzcsOCBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAgICAgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpOwogICAgIGJvb2wgaXNG
aXhlZFBpdGNoID0gZm9udC5pc0ZpeGVkUGl0Y2goKTsKICAgICBib29sIGNhbkh5cGhlbmF0ZSA9
IHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0byAmJiBXZWJDb3JlOjpjYW5IeXBoZW5hdGUo
c3R5bGUubG9jYWxlKCkpOwotCisgICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0g
c3R5bGUuaGFuZ2luZ1B1bmN0dWF0aW9uKCkgJiBGaXJzdEhhbmdpbmdQdW5jdHVhdGlvbjsKKyAg
ICAKICAgICB1bnNpZ25lZCBsYXN0U3BhY2UgPSBtX2N1cnJlbnQub2Zmc2V0KCk7CiAgICAgZmxv
YXQgd29yZFNwYWNpbmcgPSBtX2N1cnJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS53b3JkU3BhY2lu
ZygpOwogICAgIGZsb2F0IGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKQEAgLTc4Nyw2ICs3ODgs
OSBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoCiAgICAgICAgIFVD
aGFyIGMgPSBtX2N1cnJlbnQuY3VycmVudCgpOwogICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlID0gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8ICghbV9wcmVzZXJ2ZXNOZXdsaW5lICYm
IChjID09ICdcbicpKTsKIAorICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCAm
JiAhbV9jdXJyZW50Lm9mZnNldCgpICYmIG1fd2lkdGguaXNGaXJzdExpbmUoKSAmJiAhbV93aWR0
aC5jb21taXR0ZWRXaWR0aCgpICYmICF3cmFwVyAmJiAhbV9jdXJyZW50Lm9mZnNldCgpKQorICAg
ICAgICAgICAgbV93aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKC1yZW5kZXJUZXh0LmhhbmdhYmxl
UHVuY3R1YXRpb25TdGFydFdpZHRoKCkpOworICAgICAgICAgICAgCiAgICAgICAgIGlmICghbV9j
b2xsYXBzZVdoaXRlU3BhY2UgfHwgIW1fY3VycmVudENoYXJhY3RlcklzU3BhY2UpCiAgICAgICAg
ICAgICBtX2xpbmVJbmZvLnNldEVtcHR5KGZhbHNlLCAmbV9ibG9jaywgJm1fd2lkdGgpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAkocmV2aXNpb24g
MTk3NDUxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZVdpZHRoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAgIHZvaWQgZml0QmVsb3dG
bG9hdHMoYm9vbCBpc0ZpcnN0TGluZSA9IGZhbHNlKTsKICAgICB2b2lkIHNldFRyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoKGZsb2F0IGNvbGxhcHNlZFdoaXRlc3BhY2UsIGZsb2F0IGJvcmRlclBhZGRp
bmdNYXJnaW4gPSAwKTsKICAgICBib29sIHNob3VsZEluZGVudFRleHQoKSBjb25zdCB7IHJldHVy
biBtX3Nob3VsZEluZGVudFRleHQgPT0gSW5kZW50VGV4dDsgfQorICAgIAorICAgIGJvb2wgaXNG
aXJzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBjb21wdXRlQXZhaWxhYmxlV2lkdGhGcm9tTGVmdEFuZFJpZ2h0KCk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTc0NTEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMy0wMiAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlICJmaXJzdCIgdmFsdWUgb2YgdGhl
IGhhbmdpbmctcHVuY3R1YXRpb24gcHJvcGVydHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZp
cnN0LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1
bmN0dWF0aW9uLWZpcnN0LXJ0bC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC1ydGwuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QuaHRtbDogQWRkZWQuCisKIDIw
MTYtMDMtMDIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTdWJw
aXhlbCBsYXlvdXQ6IEVuYWJsZSB2ZXJ0aWNhbC9ob3Jpem9udGFsIHN1YnBpeGVsIHNwYWNpbmcg
Zm9yIHRhYmxlcy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0
aW9uLWZpcnN0LWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90
ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LWV4cGVj
dGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorPGhlYWQ+Cis8c3R5bGU+
CisgICAgYm9keSB7IGZvbnQtZmFtaWx5OiAnQWhlbSc7IGNvbG9yOmdyZWVuIH0KKyAgICAuaGFu
ZyB7IHRleHQtaW5kZW50OiAtMWVtOyBtYXJnaW46MWVtIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiIGNsYXNzPSJoYW5nIj4oSGFuZyB0ZXN0KTwv
ZGl2PgorPGRpdiBzdHlsZT0iY2xlYXI6Ym90aCI+Cis8ZGl2IGNsYXNzPSJoYW5nIj4oVGhpcyBz
aG91bGQgaGFuZy48YnI+KFRoaXMgc2hvdWxkIG5vdC48L2Rpdj4KKzxkaXYgY2xhc3M9Imhhbmci
IHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhh
bmcgYW5kIGp1c3RpZnliZWNhdXNlIGFuZCBub3cgd2VyZSBmaW5lLjwvZGl2PgorPGRpdiBjbGFz
cz0iaGFuZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3Bhbj4o
PC9zcGFuPlRoaXMgc2hvdWxkIGhhbmcuPC9kaXY+Cis8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDox
ZW07IHRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3BhbiBzdHlsZT0iYm9yZGVy
LWxlZnQ6MWVtIHNvbGlkIGJsdWUiPig8L3NwYW4+VGhpcyBzaG91bGQgbm90IGhhbmcuPC9kaXY+
Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1pbmRlbnQ6MWVtOyB0ZXh0LWFsaWduOmp1
c3RpZnk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcgaW50byB0aGUgdGV4dC1pbmRl
bnQuPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtcnRsLWV4cGVjdGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmly
c3QtcnRsLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3Rl
eHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC1ydGwtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0IEBACis8aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgZm9udC1m
YW1pbHk6ICdBaGVtJzsgY29sb3I6Z3JlZW4gfQorICAgIC5oYW5nIHsgdGV4dC1pbmRlbnQ6IC0x
ZW07IG1hcmdpbjoxZW0gfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJkaXJlY3Rp
b246cnRsIj4KKzxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVz
dCk8L2Rpdj4KKzxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorPGRpdiBjbGFzcz0iaGFuZyI+KFRo
aXMgc2hvdWxkIGhhbmcuPGJyPihUaGlzIHNob3VsZCBub3QuPC9kaXY+Cis8ZGl2IGNsYXNzPSJo
YW5nIiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3Vs
ZCBoYW5nIGFuZCBqdXN0aWZ5YmVjYXVzZSBhbmQgbm93IHdlcmUgZmluZS48L2Rpdj4KKzxkaXYg
Y2xhc3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNw
YW4+KDwvc3Bhbj5UaGlzIHNob3VsZCBoYW5nLjwvZGl2PgorPGRpdiBzdHlsZT0ibWFyZ2luLXJp
Z2h0OjFlbTsgdGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPjxzcGFuIHN0eWxlPSJi
b3JkZXItcmlnaHQ6MWVtIHNvbGlkIGJsdWUiPig8L3NwYW4+VGhpcyBzaG91bGQgbm90IGhhbmcu
PC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1pbmRlbnQ6MWVtOyB0ZXh0LWFs
aWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcgaW50byB0aGUgdGV4
dC1pbmRlbnQuPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtcnRsLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3Qt
cnRsLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1w
dW5jdHVhdGlvbi1maXJzdC1ydGwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0IEBA
Cis8aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgZm9udC1mYW1pbHk6ICdBaGVtJzsgY29sb3I6
Z3JlZW4gfQorICAgIC5oYW5nIHsgaGFuZ2luZy1wdW5jdHVhdGlvbjogZmlyc3Q7IG1hcmdpbjox
ZW0gfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJkaXJlY3Rpb246cnRsIj4KKzxk
aXYgc3R5bGU9ImZsb2F0OnJpZ2h0IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVzdCk8L2Rpdj4KKzxk
aXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorPGRpdiBjbGFzcz0iaGFuZyI+KFRoaXMgc2hvdWxkIGhh
bmcuPGJyPihUaGlzIHNob3VsZCBub3QuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0i
dGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPihUaGlzIHNob3VsZCBoYW5nIGFuZCBq
dXN0aWZ5YmVjYXVzZSBhbmQgbm93IHdlcmUgZmluZS48L2Rpdj4KKzxkaXYgY2xhc3M9Imhhbmci
IHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+PHNwYW4+KDwvc3Bhbj5U
aGlzIHNob3VsZCBoYW5nLjwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRleHQtYWxp
Z246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3BhbiBzdHlsZT0iYm9yZGVyLXJpZ2h0OjFlbSBz
b2xpZCBibHVlIj4oPC9zcGFuPlRoaXMgc2hvdWxkIG5vdCBoYW5nLjwvZGl2PgorPGRpdiBjbGFz
cz0iaGFuZyIgc3R5bGU9InRleHQtaW5kZW50OjJlbTsgdGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0
aDozMDBweDsiPihUaGlzIHNob3VsZCBoYW5nIGludG8gdGhlIHRleHQtaW5kZW50LjwvZGl2Pgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC9o
YW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorPGhlYWQ+Cis8c3R5bGU+CisgICAgYm9keSB7
IGZvbnQtZmFtaWx5OiAnQWhlbSc7IGNvbG9yOmdyZWVuIH0KKyAgICAuaGFuZyB7IGhhbmdpbmct
cHVuY3R1YXRpb246IGZpcnN0OyBtYXJnaW46MWVtIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiIGNsYXNzPSJoYW5nIj4oSGFuZyB0ZXN0KTwvZGl2
PgorPGRpdiBzdHlsZT0iY2xlYXI6Ym90aCI+Cis8ZGl2IGNsYXNzPSJoYW5nIj4oVGhpcyBzaG91
bGQgaGFuZy48YnI+KFRoaXMgc2hvdWxkIG5vdC48L2Rpdj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0
eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+KFRoaXMgc2hvdWxkIGhhbmcg
YW5kIGp1c3RpZnliZWNhdXNlIGFuZCBub3cgd2VyZSBmaW5lLjwvZGl2PgorPGRpdiBjbGFzcz0i
aGFuZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij48c3Bhbj4oPC9z
cGFuPlRoaXMgc2hvdWxkIGhhbmcuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4
dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPjxzcGFuIHN0eWxlPSJib3JkZXItbGVmdDox
ZW0gc29saWQgYmx1ZSI+KDwvc3Bhbj5UaGlzIHNob3VsZCBub3QgaGFuZy48L2Rpdj4KKzxkaXYg
Y2xhc3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWluZGVudDoyZW07IHRleHQtYWxpZ246anVzdGlmeTsg
d2lkdGg6MzAwcHg7Ij4oVGhpcyBzaG91bGQgaGFuZyBpbnRvIHRoZSB0ZXh0LWluZGVudC48L2Rp
dj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="297424"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>