<?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>46972</bug_id>
          
          <creation_ts>2010-10-01 03:51:46 -0700</creation_ts>
          <short_desc>Add two new helper files for the new SVGTextLayoutEngine</short_desc>
          <delta_ts>2010-10-01 04:38:24 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>45532</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>mdelaney7</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>288153</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 03:51:46 -0700</bug_when>
    <thetext>Add SVGTextLayoutEngineBaseline &amp; SVGTextLayoutEngineSpacing, which will be used &amp; owned by the new SVGTextLayoutEngine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288156</commentid>
    <comment_count>1</comment_count>
      <attachid>69446</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 03:55:06 -0700</bug_when>
    <thetext>Created attachment 69446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288157</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-01 03:58:27 -0700</bug_when>
    <thetext>Attachment 69446 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:158:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:181:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:199:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:210:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:226:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp:82:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 6 in 12 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>288159</commentid>
    <comment_count>3</comment_count>
      <attachid>69447</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 04:07:26 -0700</bug_when>
    <thetext>Created attachment 69447
Patch v2

Fix style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288160</commentid>
    <comment_count>4</comment_count>
      <attachid>69447</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-01 04:17:19 -0700</bug_when>
    <thetext>Comment on attachment 69447
Patch v2

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

&gt; WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:146
&gt; +        return m_font.ascent() * 8.0f / 10.0f;
&gt; +    case AB_MATHEMATICAL:
&gt; +        return m_font.ascent() / 2;
&gt; +    default:

On one line you use / 2, on the other line / 10.0f. Please use a common style here. I think it&apos;s more save to use / 2.f instead of / 2, but it&apos;s your decision.

&gt; WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:166
&gt; +    case GO_AUTO:
&gt; +        {
&gt; +            // Spec: Fullwidth ideographic and fullwidth Latin text will be set with a glyph-orientation of 0-degrees.
&gt; +            // Text which is not fullwidth will be set with a glyph-orientation of 90-degrees.
&gt; +            unsigned int unicodeRange = findCharUnicodeRange(character);
&gt; +            if (unicodeRange == cRangeSetLatin || unicodeRange == cRangeArabic)
&gt; +                return 90;
&gt; +
&gt; +            return 0;
&gt; +        }

The indention looks wrong here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288162</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 04:20:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 69447 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69447&amp;action=review
&gt; 
&gt; &gt; WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:146
&gt; &gt; +        return m_font.ascent() * 8.0f / 10.0f;
&gt; &gt; +    case AB_MATHEMATICAL:
&gt; &gt; +        return m_font.ascent() / 2;
&gt; &gt; +    default:
&gt; 
&gt; On one line you use / 2, on the other line / 10.0f. Please use a common style here. I think it&apos;s more save to use / 2.f instead of / 2, but it&apos;s your decision.
Well the common style is to avoid .f where possible. But as 8 / 10 gives me an integer, I need to use these postfixes.

&gt; 
&gt; &gt; WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp:166
&gt; &gt; +    case GO_AUTO:
&gt; &gt; +        {
&gt; &gt; +            // Spec: Fullwidth ideographic and fullwidth Latin text will be set with a glyph-orientation of 0-degrees.
&gt; &gt; +            // Text which is not fullwidth will be set with a glyph-orientation of 90-degrees.
&gt; &gt; +            unsigned int unicodeRange = findCharUnicodeRange(character);
&gt; &gt; +            if (unicodeRange == cRangeSetLatin || unicodeRange == cRangeArabic)
&gt; &gt; +                return 90;
&gt; &gt; +
&gt; &gt; +            return 0;
&gt; &gt; +        }
&gt; 
&gt; The indention looks wrong here.
If you check the last patch, I did that on purpose, otherwhise the style bot moans.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288163</commentid>
    <comment_count>6</comment_count>
      <attachid>69448</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 04:36:07 -0700</bug_when>
    <thetext>Created attachment 69448
Patch v3

We agreed to ignore the style warning regarding indentation in a switch, it looks awkward, and the coding style guidelines don&apos;t say a word about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288165</commentid>
    <comment_count>7</comment_count>
      <attachid>69448</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-01 04:37:48 -0700</bug_when>
    <thetext>Comment on attachment 69448
Patch v3

LGTM. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288166</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-10-01 04:38:24 -0700</bug_when>
    <thetext>Landed in r68878.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69446</attachid>
            <date>2010-10-01 03:55:06 -0700</date>
            <delta_ts>2010-10-01 04:07:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>NewFiles.diff</filename>
            <type>text/plain</type>
            <size>28072</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODg3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMDEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHR3byBuZXcgaGVscGVyIGZpbGVzIGZvciB0aGUgbmV3IFNWR1RleHRMYXlvdXRF
bmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2
OTcyCisKKyAgICAgICAgUmVmYWN0b3IgY29kZSBmcm9tIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMg
aW50byB0d28gc2VwZXJhdGVkIGNsYXNzZXMuCisgICAgICAgIFNWR1RleHRMYXlvdXRVdGlsaXRp
ZXMgd2lsbCBiZSByZW1vdmVkLCBhcyBzb29uIGFzIHRoZSBtYWluIGNsc3MgU1ZHVGV4dExheW91
dEVuZ2luZSBsYW5kcyBhbmQgZ2V0cyB1c2VkLgorCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFu
eSBmdW5jdGlvbmFsaXR5IHlldCwgYXMgdGhlIG5ldyBjbGFzc2VzIGFyZSBub3QgdXNlZCBzbyBm
YXIuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
RnJhZ21lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVC
YXNlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lOjpjYWxjdWxhdGVCYXNlbGluZVNoaWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6ZG9taW5hbnRC
YXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lOjpjYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlR2x5
cGhPcmllbnRhdGlvbkFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OmdseXBoT3JpZW50YXRpb25J
c011bHRpcGx5T2YxODBEZWdyZWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlR2x5cGhBZHZhbmNlQW5kT3JpZW50YXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmg6IEFkZGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpT
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlQ1NTS2VybmluZ0FuZFNwYWNp
bmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcu
aDogQWRkZWQuCisKIDIwMTAtMTAtMDEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5u
QHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFdl
YkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlz
aW9uIDY4ODc2KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC03MTgs
NiArNzE4LDggQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGlu
ZS5jcHAgXAorCXJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwIFwK
IAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuY3BwCiBlbmRpZgpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2ODg3NikKKysrIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3MDgsNiArMTcwOCw4IEBAIElG
IChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKICAg
ICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKICAgICAgICAg
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCisgICAgICAg
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEJhc2VsaW5lLmNwcAorICAgICAgICByZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRTcGFjaW5nLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAK
ICAgICAgICAgc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY4ODc2
KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjgxNiw2ICsy
ODE2LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3Mu
aCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgXApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDY4ODc2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTM0NTgsNiArMzQ1OCwxMCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAnLAorICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwJywKKyAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFF1ZXJ5LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDY4ODc2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM0ODYsNiArMzM0ODYsMjIgQEAKIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xz
dmdcU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmcuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRNZXRyaWNzLmNwcCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA2ODg3NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMCBAQAogCQkwODBBRUM4MjBFRDg3
MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEFFQzdFMEVEODcwOEIwMERGNENDRSAvKiBXTUxJ
bnRyaW5zaWNFdmVudC5oICovOyB9OwogCQkwODBBRUM4MzBFRDg3MDhCMDBERjRDQ0UgLyogV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4MEFFQzdGMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIuY3BwICovOyB9OwogCQkwODBBRUM4NDBFRDg3MDhCMDBERjRDQ0UgLyogV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODBBRUM4MDBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmggKi87IH07CisJCTA4MEU0OTI1MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgwRTQ5MjExMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5jcHAgKi87IH07CisJCTA4MEU0OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBT
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5
b3V0RW5naW5lQmFzZWxpbmUuaCAqLzsgfTsKKwkJMDgwRTQ5MjcxMjU1RjNCRDAwRUZDQTI3IC8q
IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTIzMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgKi87IH07CisJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0Ey
NyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwRTQ5MjQxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggKi87IH07CiAJCTA4MEZBRTFBMEVFRUJEQTgwMEFBQ0RF
OSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgwRkFFMTgwRUVFQkRBODAwQUFDREU5IC8qIFdNTFRlbXBsYXRl
RWxlbWVudC5jcHAgKi87IH07CiAJCTA4MEZBRTFCMEVFRUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1w
bGF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4MEZBRTE5MEVFRUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLzsg
fTsKIAkJMDgxMDkzREIxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODEwOTNEOTEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmNwcCAqLzsgfTsKQEAgLTYwMDcsNiArNjAxMSwxMCBAQAogCQkwODBBRUM3RTBFRDg3MDhC
MDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MSW50cmluc2ljRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnRyaW5zaWNFdmVu
dEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBBRUM4MDBFRDg3
MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwODBFNDkyMTEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91
dEVuZ2luZUJhc2VsaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MEU0OTIz
MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2lu
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MEU0OTI0MTI1NUYzQkQwMEVG
Q0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODBGQUUxODBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRlbXBs
YXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MEZBRTE5MEVF
RUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MVGVtcGxhdGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4MTA5M0Q5MTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTExNjYxLDYgKzExNjY5LDEwIEBACiAJCQkJMDg4QzJGNzYxMjM5MDA4MDAwM0Q2NUNF
IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMDgxMDkzRDkxMjU1RjBFNzAw
RUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgKi8sCiAJCQkJMDgx
MDkzREExMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5o
ICovLAorCQkJCTA4MEU0OTIxMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuY3BwICovLAorCQkJCTA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuaCAqLywKKwkJCQkwODBFNDkyMzEyNTVGM0JEMDBFRkNBMjcg
LyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwICovLAorCQkJCTA4MEU0OTI0MTI1NUYz
QkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oICovLAogCQkJCTA4RjBC
RkMwMTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0cmljcy5jcHAgKi8sCiAJCQkJMDhGMEJG
QzExMjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRNZXRyaWNzLmggKi8sCiAJCQkJMDg1NEIwMTIx
MjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgKi8sCkBAIC0yMDkzNyw2ICsyMDk0
OSw4IEBACiAJCQkJMDg1NEIwMjMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3gu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDI1MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0
UXVlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MTA5M0RDMTI1NUYwRTcwMEVEOUQyOSAvKiBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4MEU0
OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzQ2Myw2ICsyMzQ3Nyw4IEBACiAJ
CQkJMDg1NEIwMjIxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDg1NEIwMjQxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwODEwOTNEQjEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4MEU0OTI1
MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMDgwRTQ5MjcxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0RnJhZ21lbnQuaAkocmV2aXNpb24gNjg4NzMpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dEZyYWdtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
c3RydWN0IFNWR1RleHRGcmFnbWVudCB7CiAgICAgZmxvYXQgaGVpZ2h0OwogCiAgICAgLy8gSW5j
bHVkZXMgcm90YXRpb24vZ2x5cGgtb3JpZW50YXRpb24tKGhvcml6b250YWx8dmVydGljYWwpIHRy
YW5zZm9ybXMsIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgKGZvciB0ZXh0UGF0aCBv
bmx5KSwKLSAgICAvLyBhcyB3ZWxsIGFzIG9yaWVudGF0aW9uIHJlbGF0ZWQgc2hpZnRzIChzZWUg
U1ZHQ2hhcmFjdGVyTGF5b3V0QnVpbGRlciwgd2hpY2ggYnVpbGRzIHRoaXMgdHJhbnNmb3JtYXRp
b24pLgorICAgIC8vIGFzIHdlbGwgYXMgb3JpZW50YXRpb24gcmVsYXRlZCBzaGlmdHMgKHNlZSBT
VkdUZXh0TGF5b3V0RW5naW5lLCB3aGljaCBidWlsZHMgdGhpcyB0cmFuc2Zvcm1hdGlvbikuCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAi
U1ZHVGV4dE1ldHJpY3MuaCIKKyNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZShjb25zdCBGb250JiBmb250KQorICAgIDogbV9mb250KGZvbnQpCit7Cit9
CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlQmFzZWxpbmVT
aGlmdChjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRl
eHQpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlLT5iYXNlbGluZVNoaWZ0KCkgPT0gQlNfTEVOR1RI
KSB7CisgICAgICAgIFNWR0xlbmd0aCBiYXNlbGluZVNoaWZ0VmFsdWVMZW5ndGggPSBzdHlsZS0+
YmFzZWxpbmVTaGlmdFZhbHVlKCk7CisgICAgICAgIGlmIChiYXNlbGluZVNoaWZ0VmFsdWVMZW5n
dGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSkKKyAgICAgICAgICAgIHJldHVy
biBiYXNlbGluZVNoaWZ0VmFsdWVMZW5ndGgudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG1fZm9udC5w
aXhlbFNpemUoKTsKKworICAgICAgICByZXR1cm4gYmFzZWxpbmVTaGlmdFZhbHVlTGVuZ3RoLnZh
bHVlKGxlbmd0aENvbnRleHQpOworICAgIH0KKworICAgIHN3aXRjaCAoc3R5bGUtPmJhc2VsaW5l
U2hpZnQoKSkgeworICAgIGNhc2UgQlNfQkFTRUxJTkU6CisgICAgICAgIHJldHVybiAwOworICAg
IGNhc2UgQlNfU1VCOgorICAgICAgICByZXR1cm4gLW1fZm9udC5oZWlnaHQoKSAvIDI7CisgICAg
Y2FzZSBCU19TVVBFUjoKKyAgICAgICAgcmV0dXJuIG1fZm9udC5oZWlnaHQoKSAvIDI7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworRUFsaWdubWVudEJhc2VsaW5lIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZTo6ZG9taW5hbnRCYXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUoYm9vbCBpc1ZlcnRpY2Fs
VGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHRleHRSZW5kZXJlcik7CisgICAgQVNTRVJUKHRleHRSZW5kZXJlci0+c3R5bGUoKSk7Cisg
ICAgQVNTRVJUKHRleHRSZW5kZXJlci0+cGFyZW50KCkpOworICAgIEFTU0VSVCh0ZXh0UmVuZGVy
ZXItPnBhcmVudCgpLT5zdHlsZSgpKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHls
ZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUp
OworCisgICAgRURvbWluYW50QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+ZG9taW5hbnRCYXNl
bGluZSgpOworICAgIGlmIChiYXNlbGluZSA9PSBEQl9BVVRPKSB7CisgICAgICAgIGlmIChpc1Zl
cnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGJhc2VsaW5lID0gREJfQ0VOVFJBTDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYmFzZWxpbmUgPSBEQl9BTFBIQUJFVElDOworICAgIH0KKworICAg
IHN3aXRjaCAoYmFzZWxpbmUpIHsKKyAgICBjYXNlIERCX1VTRV9TQ1JJUFQ6CisgICAgICAgIC8v
IEZJWE1FOiBUaGUgZG9taW5hbnQtYmFzZWxpbmUgYW5kIHRoZSBiYXNlbGluZS10YWJsZSBjb21w
b25lbnRzIGFyZSBzZXQgYnkgZGV0ZXJtaW5pbmcgdGhlIHByZWRvbWluYW50IHNjcmlwdCBvZiB0
aGUgY2hhcmFjdGVyIGRhdGEgY29udGVudC4KKyAgICAgICAgcmV0dXJuIEFCX0FMUEhBQkVUSUM7
CisgICAgY2FzZSBEQl9OT19DSEFOR0U6CisgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5l
VG9BbGlnbm1lbnRCYXNlbGluZShpc1ZlcnRpY2FsVGV4dCwgdGV4dFJlbmRlcmVyLT5wYXJlbnQo
KSk7CisgICAgY2FzZSBEQl9SRVNFVF9TSVpFOgorICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNl
bGluZVRvQWxpZ25tZW50QmFzZWxpbmUoaXNWZXJ0aWNhbFRleHQsIHRleHRSZW5kZXJlci0+cGFy
ZW50KCkpOworICAgIGNhc2UgREJfSURFT0dSQVBISUM6CisgICAgICAgIHJldHVybiBBQl9JREVP
R1JBUEhJQzsKKyAgICBjYXNlIERCX0FMUEhBQkVUSUM6CisgICAgICAgIHJldHVybiBBQl9BTFBI
QUJFVElDOworICAgIGNhc2UgREJfSEFOR0lORzoKKyAgICAgICAgcmV0dXJuIEFCX0hBTkdJTkc7
CisgICAgY2FzZSBEQl9NQVRIRU1BVElDQUw6CisgICAgICAgIHJldHVybiBBQl9NQVRIRU1BVElD
QUw7CisgICAgY2FzZSBEQl9DRU5UUkFMOgorICAgICAgICByZXR1cm4gQUJfQ0VOVFJBTDsKKyAg
ICBjYXNlIERCX01JRERMRToKKyAgICAgICAgcmV0dXJuIEFCX01JRERMRTsKKyAgICBjYXNlIERC
X1RFWFRfQUZURVJfRURHRToKKyAgICAgICAgcmV0dXJuIEFCX1RFWFRfQUZURVJfRURHRTsKKyAg
ICBjYXNlIERCX1RFWFRfQkVGT1JFX0VER0U6CisgICAgICAgIHJldHVybiBBQl9URVhUX0JFRk9S
RV9FREdFOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gQUJfQVVUTzsKKyAgICB9Cit9CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdp
bmVCYXNlbGluZTo6Y2FsY3VsYXRlQWxpZ25tZW50QmFzZWxpbmVTaGlmdChib29sIGlzVmVydGlj
YWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHRleHRSZW5kZXJlcikgY29uc3QKK3sKKyAgICBB
U1NFUlQodGV4dFJlbmRlcmVyKTsKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVyLT5zdHlsZSgpKTsK
KyAgICBBU1NFUlQodGV4dFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKKyAgICBBU1NF
UlQodGV4dFJlbmRlcmVyLT5wYXJlbnQoKSk7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHRl
eHRSZW5kZXJlclBhcmVudCA9IHRleHRSZW5kZXJlci0+cGFyZW50KCk7CisgICAgQVNTRVJUKHRl
eHRSZW5kZXJlclBhcmVudCk7CisKKyAgICBFQWxpZ25tZW50QmFzZWxpbmUgYmFzZWxpbmUgPSB0
ZXh0UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCktPmFsaWdubWVudEJhc2VsaW5lKCk7Cisg
ICAgaWYgKGJhc2VsaW5lID09IEFCX0FVVE8pIHsKKyAgICAgICAgYmFzZWxpbmUgPSBkb21pbmFu
dEJhc2VsaW5lVG9BbGlnbm1lbnRCYXNlbGluZShpc1ZlcnRpY2FsVGV4dCwgdGV4dFJlbmRlcmVy
UGFyZW50KTsKKyAgICAgICAgQVNTRVJUKGJhc2VsaW5lICE9IEFCX0FVVE8pOworICAgIH0KKwor
ICAgIC8vIE5vdGU6IGh0dHA6Ly93aWtpLmFwYWNoZS5vcmcveG1sZ3JhcGhpY3MtZm9wL0xpbmVM
YXlvdXQvQWxpZ25tZW50SGFuZGxpbmcKKyAgICBzd2l0Y2ggKGJhc2VsaW5lKSB7CisgICAgY2Fz
ZSBBQl9CQVNFTElORToKKyAgICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxpbmVUb0FsaWdubWVu
dEJhc2VsaW5lKGlzVmVydGljYWxUZXh0LCB0ZXh0UmVuZGVyZXJQYXJlbnQpOworICAgIGNhc2Ug
QUJfQkVGT1JFX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0JFRk9SRV9FREdFOgorICAgICAgICBy
ZXR1cm4gbV9mb250LmFzY2VudCgpOworICAgIGNhc2UgQUJfTUlERExFOgorICAgICAgICByZXR1
cm4gbV9mb250LnhIZWlnaHQoKSAvIDI7CisgICAgY2FzZSBBQl9DRU5UUkFMOgorICAgICAgICBy
ZXR1cm4gKG1fZm9udC5hc2NlbnQoKSAtIG1fZm9udC5kZXNjZW50KCkpIC8gMjsKKyAgICBjYXNl
IEFCX0FGVEVSX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0FGVEVSX0VER0U6CisgICAgY2FzZSBB
Ql9JREVPR1JBUEhJQzoKKyAgICAgICAgcmV0dXJuIG1fZm9udC5kZXNjZW50KCk7CisgICAgY2Fz
ZSBBQl9BTFBIQUJFVElDOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIEFCX0hBTkdJTkc6
CisgICAgICAgIHJldHVybiBtX2ZvbnQuYXNjZW50KCkgKiA4LjBmIC8gMTAuMGY7CisgICAgY2Fz
ZSBBQl9NQVRIRU1BVElDQUw6CisgICAgICAgIHJldHVybiBtX2ZvbnQuYXNjZW50KCkgLyAyOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2Fs
Y3VsYXRlR2x5cGhPcmllbnRhdGlvbkFuZ2xlKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgVUNoYXImIGNoYXJhY3RlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoc3R5bGUpOworCisgICAgc3dpdGNoIChpc1ZlcnRpY2FsVGV4dCA/IHN0eWxlLT5n
bHlwaE9yaWVudGF0aW9uVmVydGljYWwoKSA6IHN0eWxlLT5nbHlwaE9yaWVudGF0aW9uSG9yaXpv
bnRhbCgpKSB7CisgICAgY2FzZSBHT19BVVRPOgorICAgIHsKKyAgICAgICAgLy8gU3BlYzogRnVs
bHdpZHRoIGlkZW9ncmFwaGljIGFuZCBmdWxsd2lkdGggTGF0aW4gdGV4dCB3aWxsIGJlIHNldCB3
aXRoIGEgZ2x5cGgtb3JpZW50YXRpb24gb2YgMC1kZWdyZWVzLgorICAgICAgICAvLyBUZXh0IHdo
aWNoIGlzIG5vdCBmdWxsd2lkdGggd2lsbCBiZSBzZXQgd2l0aCBhIGdseXBoLW9yaWVudGF0aW9u
IG9mIDkwLWRlZ3JlZXMuCisgICAgICAgIHVuc2lnbmVkIGludCB1bmljb2RlUmFuZ2UgPSBmaW5k
Q2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIpOworICAgICAgICBpZiAodW5pY29kZVJhbmdlID09
IGNSYW5nZVNldExhdGluIHx8IHVuaWNvZGVSYW5nZSA9PSBjUmFuZ2VBcmFiaWMpCisgICAgICAg
ICAgICByZXR1cm4gOTA7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNhc2UgR09f
OTBERUc6CisgICAgICAgIHJldHVybiA5MDsKKyAgICBjYXNlIEdPXzE4MERFRzoKKyAgICAgICAg
cmV0dXJuIDE4MDsKKyAgICBjYXNlIEdPXzI3MERFRzoKKyAgICAgICAgcmV0dXJuIDI3MDsKKyAg
ICBjYXNlIEdPXzBERUc6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgZ2x5cGhPcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERl
Z3JlZXMoZmxvYXQgb3JpZW50YXRpb25BbmdsZSkKK3sKKyAgICByZXR1cm4gZmFic2YoZm1vZGYo
b3JpZW50YXRpb25BbmdsZSwgMTgwKSkgPT0gMDsKK30KKworZmxvYXQgU1ZHVGV4dExheW91dEVu
Z2luZUJhc2VsaW5lOjpjYWxjdWxhdGVHbHlwaEFkdmFuY2VBbmRPcmllbnRhdGlvbihib29sIGlz
VmVydGljYWxUZXh0LCBTVkdUZXh0TWV0cmljcyYgbWV0cmljcywgZmxvYXQgYW5nbGUsIGZsb2F0
JiB4T3JpZW50YXRpb25TaGlmdCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KSBjb25zdAorewor
ICAgIGJvb2wgb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzID0gZ2x5cGhPcmllbnRh
dGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMoYW5nbGUpOworCisgICAgLy8gVGhlIGZ1bmN0aW9u
IGlzIGJhc2VkIG9uIHNwZWMgcmVxdWlyZW1lbnRzOgorICAgIC8vCisgICAgLy8gU3BlYzogSWYg
dGhlICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJyByZXN1bHRzIGluIGFuIG9yaWVudGF0
aW9uIGFuZ2xlIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YKKyAgICAvLyBvZiAxODAgZGVncmVl
cywgdGhlbiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFjY29yZGlu
ZyB0byB0aGUgdmVydGljYWwgbWV0cmljcyBvZiB0aGUgZ2x5cGguCisgICAgLy8KKyAgICAvLyBT
cGVjOiBJZiBpZiB0aGUgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyByZXN1bHRzIGluIGFu
IG9yaWVudGF0aW9uIGFuZ2xlIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YKKyAgICAvLyAxODAg
ZGVncmVlcywgdGhlbiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFj
Y29yZGluZyB0byB0aGUgaG9yaXpvbnRhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KKworICAgIC8v
IFZlcnRpY2FsIG9yaWVudGF0aW9uIGhhbmRsaW5nLgorICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkg
eworICAgICAgICBmbG9hdCBhc2NlbnRNaW51c0Rlc2NlbnQgPSBtX2ZvbnQuYXNjZW50KCkgLSBt
X2ZvbnQuZGVzY2VudCgpOworICAgICAgICBpZiAoYW5nbGUgPT0gMCkgeworICAgICAgICAgICAg
eE9yaWVudGF0aW9uU2hpZnQgPSAoYXNjZW50TWludXNEZXNjZW50IC0gbWV0cmljcy53aWR0aCgp
KSAvIDI7CisgICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IG1fZm9udC5hc2NlbnQoKTsK
KyAgICAgICAgfSBlbHNlIGlmIChhbmdsZSA9PSAxODApCisgICAgICAgICAgICB4T3JpZW50YXRp
b25TaGlmdCA9IChhc2NlbnRNaW51c0Rlc2NlbnQgKyBtZXRyaWNzLndpZHRoKCkpIC8gMjsKKyAg
ICAgICAgZWxzZSBpZiAoYW5nbGUgPT0gMjcwKSB7CisgICAgICAgICAgICB5T3JpZW50YXRpb25T
aGlmdCA9IG1ldHJpY3Mud2lkdGgoKTsKKyAgICAgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0g
YXNjZW50TWludXNEZXNjZW50OworICAgICAgICB9CisKKyAgICAgICAgLy8gVmVydGljYWwgYWR2
YW5jZSBjYWxjdWxhdGlvbi4KKyAgICAgICAgaWYgKGFuZ2xlICE9IDAgJiYgIW9yaWVudGF0aW9u
SXNNdWx0aXBseU9mMTgwRGVncmVlcykKKyAgICAgICAgICAgIHJldHVybiBtZXRyaWNzLndpZHRo
KCk7CisKKyAgICAgICAgcmV0dXJuIG1ldHJpY3MuaGVpZ2h0KCk7CisgICAgfQorCisgICAgLy8g
SG9yaXpvbnRhbCBvcmllbnRhdGlvbiBoYW5kbGluZy4KKyAgICBpZiAoYW5nbGUgPT0gOTApCisg
ICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLW1ldHJpY3Mud2lkdGgoKTsKKyAgICBlbHNlIGlm
IChhbmdsZSA9PSAxODApIHsKKyAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSBtZXRyaWNzLndp
ZHRoKCk7CisgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLW1fZm9udC5hc2NlbnQoKTsKKyAg
ICB9IGVsc2UgaWYgKGFuZ2xlID09IDI3MCkKKyAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSBt
ZXRyaWNzLndpZHRoKCk7CisKKyAgICAvLyBIb3Jpem9udGFsIGFkdmFuY2UgY2FsY3VsYXRpb24u
CisgICAgaWYgKGFuZ2xlICE9IDAgJiYgIW9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVl
cykKKyAgICAgICAgcmV0dXJuIG1ldHJpY3MuaGVpZ2h0KCk7CisKKyAgICByZXR1cm4gbWV0cmlj
cy53aWR0aCgpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmVfaAorI2RlZmluZSBTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmVfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdS
ZW5kZXJTdHlsZURlZnMuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250OworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3Mg
U1ZHRWxlbWVudDsKK2NsYXNzIFNWR1JlbmRlclN0eWxlOworY2xhc3MgU1ZHVGV4dE1ldHJpY3M7
CisKKy8vIEhlbHBlciBjbGFzcyB1c2VkIGJ5IFNWR1RleHRMYXlvdXRFbmdpbmUgdG8gaGFuZGxl
ICdhbGlnbm1lbnQtYmFzZWxpbmUnIC8gJ2RvbWluYW50LWJhc2VsaW5lJyBhbmQgJ2Jhc2VsaW5l
LXNoaWZ0Jy4KK2NsYXNzIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZSA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7CitwdWJsaWM6CisgICAgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0
IEZvbnQmKTsKKworICAgIGZsb2F0IGNhbGN1bGF0ZUJhc2VsaW5lU2hpZnQoY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqLCBTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0KSBjb25zdDsKKyAgICBmbG9hdCBj
YWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCogdGV4dFJlbmRlcmVyKSBjb25zdDsKKyAgICBmbG9hdCBjYWxjdWxhdGVH
bHlwaE9yaWVudGF0aW9uQW5nbGUoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqLCBjb25zdCBVQ2hhciYgY2hhcmFjdGVyKSBjb25zdDsKKyAgICBmbG9hdCBjYWxjdWxh
dGVHbHlwaEFkdmFuY2VBbmRPcmllbnRhdGlvbihib29sIGlzVmVydGljYWxUZXh0LCBTVkdUZXh0
TWV0cmljcyYsIGZsb2F0IGFuZ2xlLCBmbG9hdCYgeE9yaWVudGF0aW9uU2hpZnQsIGZsb2F0JiB5
T3JpZW50YXRpb25TaGlmdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRUFsaWdubWVudEJhc2Vs
aW5lIGRvbWluYW50QmFzZWxpbmVUb0FsaWdubWVudEJhc2VsaW5lKGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRlcmVyKSBjb25zdDsKKworICAgIGNvbnN0
IEZvbnQmIG1fZm9udDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShTVkcpCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmcuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgor
CisjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6
OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0IEZvbnQmIGZvbnQpCisgICAgOiBtX2Zv
bnQoZm9udCkKKyAgICAsIG1fbGFzdENoYXJhY3RlcigwKQoreworfQorCitmbG9hdCBTVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxU
ZXh0LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5cGgmIGN1cnJlbnRHbHlwaCkKK3sKKyNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmICghbV9mb250LmlzU1ZHRm9udCgpKSB7CisgICAgICAg
IG1fbGFzdEdseXBoLmlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgU1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQgPSBtX2ZvbnQuc3ZnRm9udCgpOworICAgIEFT
U0VSVChzdmdGb250KTsKKworICAgIGZsb2F0IGtlcm5pbmcgPSAwOworICAgIGlmIChtX2xhc3RH
bHlwaC5pc1ZhbGlkKSB7CisgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAg
IGtlcm5pbmcgPSBzdmdGb250LT52ZXJ0aWNhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5
cGhzKG1fbGFzdEdseXBoLnVuaWNvZGVTdHJpbmcsIG1fbGFzdEdseXBoLm5hbWUsIGN1cnJlbnRH
bHlwaC51bmljb2RlU3RyaW5nLCBjdXJyZW50R2x5cGgubmFtZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGtlcm5pbmcgPSBzdmdGb250LT5ob3Jpem9udGFsS2VybmluZ0ZvclBhaXJPZlN0
cmluZ3NBbmRHbHlwaHMobV9sYXN0R2x5cGgudW5pY29kZVN0cmluZywgbV9sYXN0R2x5cGgubmFt
ZSwgY3VycmVudEdseXBoLnVuaWNvZGVTdHJpbmcsIGN1cnJlbnRHbHlwaC5uYW1lKTsKKyAgICB9
CisKKyAgICBtX2xhc3RHbHlwaCA9IGN1cnJlbnRHbHlwaDsKKyAgICBtX2xhc3RHbHlwaC5pc1Zh
bGlkID0gdHJ1ZTsKKyAgICBrZXJuaW5nICo9IG1fZm9udC5zaXplKCkgLyBtX2ZvbnQucHJpbWFy
eUZvbnQoKS0+dW5pdHNQZXJFbSgpOworICAgIHJldHVybiBrZXJuaW5nOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oaXNWZXJ0aWNhbFRleHQpOworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50R2x5
cGgpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitmbG9hdCBTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlQ1NTS2VybmluZ0FuZFNwYWNpbmcoY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN0eWxlLCBTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0LCBjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcikKK3sKKyAgICBmbG9hdCBrZXJuaW5nID0gMDsKKyAgICBTVkdMZW5n
dGgga2VybmluZ0xlbmd0aCA9IHN0eWxlLT5rZXJuaW5nKCk7CisgICAgaWYgKGtlcm5pbmdMZW5n
dGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSkKKyAgICAgICAga2VybmluZyA9
IGtlcm5pbmdMZW5ndGgudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG1fZm9udC5waXhlbFNpemUoKTsK
KyAgICBlbHNlCisgICAgICAgIGtlcm5pbmcgPSBrZXJuaW5nTGVuZ3RoLnZhbHVlKGxlbmd0aENv
bnRleHQpOworCisgICAgY29uc3QgVUNoYXIqIGxhc3RDaGFyYWN0ZXIgPSBtX2xhc3RDaGFyYWN0
ZXI7CisgICAgbV9sYXN0Q2hhcmFjdGVyID0gY3VycmVudENoYXJhY3RlcjsKKworICAgIGlmIChr
ZXJuaW5nID09IDAgJiYgbV9mb250LmxldHRlclNwYWNpbmcoKSA9PSAwICYmIG1fZm9udC53b3Jk
U3BhY2luZygpID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgc3BhY2luZyA9
IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkgKyBrZXJuaW5nOworICAgIGlmIChjdXJyZW50Q2hhcmFj
dGVyICYmIGxhc3RDaGFyYWN0ZXIgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpIHsKKyAgICAgICAg
aWYgKEZvbnQ6OnRyZWF0QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYgIUZvbnQ6OnRyZWF0
QXNTcGFjZSgqbGFzdENoYXJhY3RlcikpCisgICAgICAgICAgICBzcGFjaW5nICs9IG1fZm9udC53
b3JkU3BhY2luZygpOworICAgIH0KKworICAgIHJldHVybiBzcGFjaW5nOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVTcGFjaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdUZXh0TGF5b3V0RW5n
aW5lU3BhY2luZ19oCisjZGVmaW5lIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nX2gKKworI2lm
IEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4dE1ldHJpY3MuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGb250OworY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CitjbGFzcyBTVkdF
bGVtZW50OworCisvLyBIZWxwZXIgY2xhc3MgdXNlZCBieSBTVkdUZXh0TGF5b3V0RW5naW5lIHRv
IGhhbmRsZSAna2VybmluZycgLyAnbGV0dGVyLXNwYWNpbmcnIGFuZCAnd29yZC1zcGFjaW5nJy4K
K2NsYXNzIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
K3B1YmxpYzoKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyhjb25zdCBGb250Jik7CisK
KyAgICBmbG9hdCBjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0
IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBoKTsKKyAgICBmbG9hdCBjYWxjdWxh
dGVDU1NLZXJuaW5nQW5kU3BhY2luZyhjb25zdCBTVkdSZW5kZXJTdHlsZSosIFNWR0VsZW1lbnQq
IGxlbmd0aENvbnRleHQsIGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVyKTsKKworcHJpdmF0
ZToKKyAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29uc3QgVUNoYXIqIG1fbGFzdENoYXJh
Y3RlcjsKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgU1ZHVGV4dE1ldHJpY3M6OkdseXBo
IG1fbGFzdEdseXBoOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69447</attachid>
            <date>2010-10-01 04:07:26 -0700</date>
            <delta_ts>2010-10-01 04:36:07 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>NewFiles.diff</filename>
            <type>text/plain</type>
            <size>28074</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODg3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMDEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHR3byBuZXcgaGVscGVyIGZpbGVzIGZvciB0aGUgbmV3IFNWR1RleHRMYXlvdXRF
bmdpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2
OTcyCisKKyAgICAgICAgUmVmYWN0b3IgY29kZSBmcm9tIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMg
aW50byB0d28gc2VwZXJhdGVkIGNsYXNzZXMuCisgICAgICAgIFNWR1RleHRMYXlvdXRVdGlsaXRp
ZXMgd2lsbCBiZSByZW1vdmVkLCBhcyBzb29uIGFzIHRoZSBtYWluIGNsc3MgU1ZHVGV4dExheW91
dEVuZ2luZSBsYW5kcyBhbmQgZ2V0cyB1c2VkLgorCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFu
eSBmdW5jdGlvbmFsaXR5IHlldCwgYXMgdGhlIG5ldyBjbGFzc2VzIGFyZSBub3QgdXNlZCBzbyBm
YXIuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
RnJhZ21lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVC
YXNlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lOjpjYWxjdWxhdGVCYXNlbGluZVNoaWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6ZG9taW5hbnRC
YXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lOjpjYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGluZVNoaWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlR2x5
cGhPcmllbnRhdGlvbkFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OmdseXBoT3JpZW50YXRpb25J
c011bHRpcGx5T2YxODBEZWdyZWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlR2x5cGhBZHZhbmNlQW5kT3JpZW50YXRpb24pOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmg6IEFkZGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpT
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlU1ZHS2VybmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRlQ1NTS2VybmluZ0FuZFNwYWNp
bmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcu
aDogQWRkZWQuCisKIDIwMTAtMTAtMDEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5u
QHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFdl
YkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlz
aW9uIDY4ODc2KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC03MTgs
NiArNzE4LDggQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwIFwKIAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIuY3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGlu
ZS5jcHAgXAorCXJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwIFwK
IAlyZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuY3BwCiBlbmRpZgpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2ODg3NikKKysrIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3MDgsNiArMTcwOCw4IEBAIElG
IChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKICAg
ICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5jcHAKICAgICAgICAg
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwCisgICAgICAg
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEJhc2VsaW5lLmNwcAorICAgICAgICByZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRTcGFjaW5nLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzLmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAK
ICAgICAgICAgc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY4ODc2
KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjgxNiw2ICsy
ODE2LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmggXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3Mu
aCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgXApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDY4ODc2KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTM0NTgsNiArMzQ1OCwxMCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAnLAorICAgICAgICAgICAgJ3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwJywKKyAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFF1ZXJ5LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDY4ODc2KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM0ODYsNiArMzM0ODYsMjIgQEAKIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xz
dmdcU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmcuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRNZXRyaWNzLmNwcCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA2ODg3NikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMCBAQAogCQkwODBBRUM4MjBFRDg3
MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEFFQzdFMEVEODcwOEIwMERGNENDRSAvKiBXTUxJ
bnRyaW5zaWNFdmVudC5oICovOyB9OwogCQkwODBBRUM4MzBFRDg3MDhCMDBERjRDQ0UgLyogV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4MEFFQzdGMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIuY3BwICovOyB9OwogCQkwODBBRUM4NDBFRDg3MDhCMDBERjRDQ0UgLyogV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODBBRUM4MDBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmggKi87IH07CisJCTA4MEU0OTI1MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgwRTQ5MjExMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5jcHAgKi87IH07CisJCTA4MEU0OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBT
VkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5
b3V0RW5naW5lQmFzZWxpbmUuaCAqLzsgfTsKKwkJMDgwRTQ5MjcxMjU1RjNCRDAwRUZDQTI3IC8q
IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTIzMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgKi87IH07CisJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0Ey
NyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwRTQ5MjQxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggKi87IH07CiAJCTA4MEZBRTFBMEVFRUJEQTgwMEFBQ0RF
OSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgwRkFFMTgwRUVFQkRBODAwQUFDREU5IC8qIFdNTFRlbXBsYXRl
RWxlbWVudC5jcHAgKi87IH07CiAJCTA4MEZBRTFCMEVFRUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1w
bGF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4MEZBRTE5MEVFRUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLzsg
fTsKIAkJMDgxMDkzREIxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODEwOTNEOTEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWls
ZGVyLmNwcCAqLzsgfTsKQEAgLTYwMDcsNiArNjAxMSwxMCBAQAogCQkwODBBRUM3RTBFRDg3MDhC
MDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MSW50cmluc2ljRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnRyaW5zaWNFdmVu
dEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBBRUM4MDBFRDg3
MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwODBFNDkyMTEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91
dEVuZ2luZUJhc2VsaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MEU0OTIz
MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2lu
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4MEU0OTI0MTI1NUYzQkQwMEVG
Q0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODBGQUUxODBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRlbXBs
YXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4MEZBRTE5MEVF
RUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MVGVtcGxhdGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4MTA5M0Q5MTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmli
dXRlc0J1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTExNjYxLDYgKzExNjY5LDEwIEBACiAJCQkJMDg4QzJGNzYxMjM5MDA4MDAwM0Q2NUNF
IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMDgxMDkzRDkxMjU1RjBFNzAw
RUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgKi8sCiAJCQkJMDgx
MDkzREExMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5o
ICovLAorCQkJCTA4MEU0OTIxMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUuY3BwICovLAorCQkJCTA4MEU0OTIyMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuaCAqLywKKwkJCQkwODBFNDkyMzEyNTVGM0JEMDBFRkNBMjcg
LyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwICovLAorCQkJCTA4MEU0OTI0MTI1NUYz
QkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oICovLAogCQkJCTA4RjBC
RkMwMTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0cmljcy5jcHAgKi8sCiAJCQkJMDhGMEJG
QzExMjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRNZXRyaWNzLmggKi8sCiAJCQkJMDg1NEIwMTIx
MjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgKi8sCkBAIC0yMDkzNyw2ICsyMDk0
OSw4IEBACiAJCQkJMDg1NEIwMjMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3gu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDI1MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0
UXVlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MTA5M0RDMTI1NUYwRTcwMEVEOUQyOSAvKiBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4MEU0
OTI2MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTA4MEU0OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzQ2Myw2ICsyMzQ3Nyw4IEBACiAJ
CQkJMDg1NEIwMjIxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDg1NEIwMjQxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwODEwOTNEQjEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4
dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4MEU0OTI1
MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMDgwRTQ5MjcxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRGcmFnbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0RnJhZ21lbnQuaAkocmV2aXNpb24gNjg4NzMpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dEZyYWdtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
c3RydWN0IFNWR1RleHRGcmFnbWVudCB7CiAgICAgZmxvYXQgaGVpZ2h0OwogCiAgICAgLy8gSW5j
bHVkZXMgcm90YXRpb24vZ2x5cGgtb3JpZW50YXRpb24tKGhvcml6b250YWx8dmVydGljYWwpIHRy
YW5zZm9ybXMsIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgKGZvciB0ZXh0UGF0aCBv
bmx5KSwKLSAgICAvLyBhcyB3ZWxsIGFzIG9yaWVudGF0aW9uIHJlbGF0ZWQgc2hpZnRzIChzZWUg
U1ZHQ2hhcmFjdGVyTGF5b3V0QnVpbGRlciwgd2hpY2ggYnVpbGRzIHRoaXMgdHJhbnNmb3JtYXRp
b24pLgorICAgIC8vIGFzIHdlbGwgYXMgb3JpZW50YXRpb24gcmVsYXRlZCBzaGlmdHMgKHNlZSBT
VkdUZXh0TGF5b3V0RW5naW5lLCB3aGljaCBidWlsZHMgdGhpcyB0cmFuc2Zvcm1hdGlvbikuCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAi
U1ZHVGV4dE1ldHJpY3MuaCIKKyNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OlNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZShjb25zdCBGb250JiBmb250KQorICAgIDogbV9mb250KGZvbnQpCit7Cit9
CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlQmFzZWxpbmVT
aGlmdChjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRl
eHQpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlLT5iYXNlbGluZVNoaWZ0KCkgPT0gQlNfTEVOR1RI
KSB7CisgICAgICAgIFNWR0xlbmd0aCBiYXNlbGluZVNoaWZ0VmFsdWVMZW5ndGggPSBzdHlsZS0+
YmFzZWxpbmVTaGlmdFZhbHVlKCk7CisgICAgICAgIGlmIChiYXNlbGluZVNoaWZ0VmFsdWVMZW5n
dGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSkKKyAgICAgICAgICAgIHJldHVy
biBiYXNlbGluZVNoaWZ0VmFsdWVMZW5ndGgudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG1fZm9udC5w
aXhlbFNpemUoKTsKKworICAgICAgICByZXR1cm4gYmFzZWxpbmVTaGlmdFZhbHVlTGVuZ3RoLnZh
bHVlKGxlbmd0aENvbnRleHQpOworICAgIH0KKworICAgIHN3aXRjaCAoc3R5bGUtPmJhc2VsaW5l
U2hpZnQoKSkgeworICAgIGNhc2UgQlNfQkFTRUxJTkU6CisgICAgICAgIHJldHVybiAwOworICAg
IGNhc2UgQlNfU1VCOgorICAgICAgICByZXR1cm4gLW1fZm9udC5oZWlnaHQoKSAvIDI7CisgICAg
Y2FzZSBCU19TVVBFUjoKKyAgICAgICAgcmV0dXJuIG1fZm9udC5oZWlnaHQoKSAvIDI7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworRUFsaWdubWVudEJhc2VsaW5lIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNl
bGluZTo6ZG9taW5hbnRCYXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUoYm9vbCBpc1ZlcnRpY2Fs
VGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHRleHRSZW5kZXJlcik7CisgICAgQVNTRVJUKHRleHRSZW5kZXJlci0+c3R5bGUoKSk7Cisg
ICAgQVNTRVJUKHRleHRSZW5kZXJlci0+cGFyZW50KCkpOworICAgIEFTU0VSVCh0ZXh0UmVuZGVy
ZXItPnBhcmVudCgpLT5zdHlsZSgpKTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHls
ZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKKyAgICBBU1NFUlQoc3R5bGUp
OworCisgICAgRURvbWluYW50QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+ZG9taW5hbnRCYXNl
bGluZSgpOworICAgIGlmIChiYXNlbGluZSA9PSBEQl9BVVRPKSB7CisgICAgICAgIGlmIChpc1Zl
cnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGJhc2VsaW5lID0gREJfQ0VOVFJBTDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYmFzZWxpbmUgPSBEQl9BTFBIQUJFVElDOworICAgIH0KKworICAg
IHN3aXRjaCAoYmFzZWxpbmUpIHsKKyAgICBjYXNlIERCX1VTRV9TQ1JJUFQ6CisgICAgICAgIC8v
IEZJWE1FOiBUaGUgZG9taW5hbnQtYmFzZWxpbmUgYW5kIHRoZSBiYXNlbGluZS10YWJsZSBjb21w
b25lbnRzIGFyZSBzZXQgYnkgZGV0ZXJtaW5pbmcgdGhlIHByZWRvbWluYW50IHNjcmlwdCBvZiB0
aGUgY2hhcmFjdGVyIGRhdGEgY29udGVudC4KKyAgICAgICAgcmV0dXJuIEFCX0FMUEhBQkVUSUM7
CisgICAgY2FzZSBEQl9OT19DSEFOR0U6CisgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5l
VG9BbGlnbm1lbnRCYXNlbGluZShpc1ZlcnRpY2FsVGV4dCwgdGV4dFJlbmRlcmVyLT5wYXJlbnQo
KSk7CisgICAgY2FzZSBEQl9SRVNFVF9TSVpFOgorICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNl
bGluZVRvQWxpZ25tZW50QmFzZWxpbmUoaXNWZXJ0aWNhbFRleHQsIHRleHRSZW5kZXJlci0+cGFy
ZW50KCkpOworICAgIGNhc2UgREJfSURFT0dSQVBISUM6CisgICAgICAgIHJldHVybiBBQl9JREVP
R1JBUEhJQzsKKyAgICBjYXNlIERCX0FMUEhBQkVUSUM6CisgICAgICAgIHJldHVybiBBQl9BTFBI
QUJFVElDOworICAgIGNhc2UgREJfSEFOR0lORzoKKyAgICAgICAgcmV0dXJuIEFCX0hBTkdJTkc7
CisgICAgY2FzZSBEQl9NQVRIRU1BVElDQUw6CisgICAgICAgIHJldHVybiBBQl9NQVRIRU1BVElD
QUw7CisgICAgY2FzZSBEQl9DRU5UUkFMOgorICAgICAgICByZXR1cm4gQUJfQ0VOVFJBTDsKKyAg
ICBjYXNlIERCX01JRERMRToKKyAgICAgICAgcmV0dXJuIEFCX01JRERMRTsKKyAgICBjYXNlIERC
X1RFWFRfQUZURVJfRURHRToKKyAgICAgICAgcmV0dXJuIEFCX1RFWFRfQUZURVJfRURHRTsKKyAg
ICBjYXNlIERCX1RFWFRfQkVGT1JFX0VER0U6CisgICAgICAgIHJldHVybiBBQl9URVhUX0JFRk9S
RV9FREdFOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gQUJfQVVUTzsKKyAgICB9Cit9CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdp
bmVCYXNlbGluZTo6Y2FsY3VsYXRlQWxpZ25tZW50QmFzZWxpbmVTaGlmdChib29sIGlzVmVydGlj
YWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHRleHRSZW5kZXJlcikgY29uc3QKK3sKKyAgICBB
U1NFUlQodGV4dFJlbmRlcmVyKTsKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVyLT5zdHlsZSgpKTsK
KyAgICBBU1NFUlQodGV4dFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKKyAgICBBU1NF
UlQodGV4dFJlbmRlcmVyLT5wYXJlbnQoKSk7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHRl
eHRSZW5kZXJlclBhcmVudCA9IHRleHRSZW5kZXJlci0+cGFyZW50KCk7CisgICAgQVNTRVJUKHRl
eHRSZW5kZXJlclBhcmVudCk7CisKKyAgICBFQWxpZ25tZW50QmFzZWxpbmUgYmFzZWxpbmUgPSB0
ZXh0UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCktPmFsaWdubWVudEJhc2VsaW5lKCk7Cisg
ICAgaWYgKGJhc2VsaW5lID09IEFCX0FVVE8pIHsKKyAgICAgICAgYmFzZWxpbmUgPSBkb21pbmFu
dEJhc2VsaW5lVG9BbGlnbm1lbnRCYXNlbGluZShpc1ZlcnRpY2FsVGV4dCwgdGV4dFJlbmRlcmVy
UGFyZW50KTsKKyAgICAgICAgQVNTRVJUKGJhc2VsaW5lICE9IEFCX0FVVE8pOworICAgIH0KKwor
ICAgIC8vIE5vdGU6IGh0dHA6Ly93aWtpLmFwYWNoZS5vcmcveG1sZ3JhcGhpY3MtZm9wL0xpbmVM
YXlvdXQvQWxpZ25tZW50SGFuZGxpbmcKKyAgICBzd2l0Y2ggKGJhc2VsaW5lKSB7CisgICAgY2Fz
ZSBBQl9CQVNFTElORToKKyAgICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxpbmVUb0FsaWdubWVu
dEJhc2VsaW5lKGlzVmVydGljYWxUZXh0LCB0ZXh0UmVuZGVyZXJQYXJlbnQpOworICAgIGNhc2Ug
QUJfQkVGT1JFX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0JFRk9SRV9FREdFOgorICAgICAgICBy
ZXR1cm4gbV9mb250LmFzY2VudCgpOworICAgIGNhc2UgQUJfTUlERExFOgorICAgICAgICByZXR1
cm4gbV9mb250LnhIZWlnaHQoKSAvIDI7CisgICAgY2FzZSBBQl9DRU5UUkFMOgorICAgICAgICBy
ZXR1cm4gKG1fZm9udC5hc2NlbnQoKSAtIG1fZm9udC5kZXNjZW50KCkpIC8gMjsKKyAgICBjYXNl
IEFCX0FGVEVSX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0FGVEVSX0VER0U6CisgICAgY2FzZSBB
Ql9JREVPR1JBUEhJQzoKKyAgICAgICAgcmV0dXJuIG1fZm9udC5kZXNjZW50KCk7CisgICAgY2Fz
ZSBBQl9BTFBIQUJFVElDOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIEFCX0hBTkdJTkc6
CisgICAgICAgIHJldHVybiBtX2ZvbnQuYXNjZW50KCkgKiA4LjBmIC8gMTAuMGY7CisgICAgY2Fz
ZSBBQl9NQVRIRU1BVElDQUw6CisgICAgICAgIHJldHVybiBtX2ZvbnQuYXNjZW50KCkgLyAyOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2Fs
Y3VsYXRlR2x5cGhPcmllbnRhdGlvbkFuZ2xlKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgVUNoYXImIGNoYXJhY3RlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoc3R5bGUpOworCisgICAgc3dpdGNoIChpc1ZlcnRpY2FsVGV4dCA/IHN0eWxlLT5n
bHlwaE9yaWVudGF0aW9uVmVydGljYWwoKSA6IHN0eWxlLT5nbHlwaE9yaWVudGF0aW9uSG9yaXpv
bnRhbCgpKSB7CisgICAgY2FzZSBHT19BVVRPOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBT
cGVjOiBGdWxsd2lkdGggaWRlb2dyYXBoaWMgYW5kIGZ1bGx3aWR0aCBMYXRpbiB0ZXh0IHdpbGwg
YmUgc2V0IHdpdGggYSBnbHlwaC1vcmllbnRhdGlvbiBvZiAwLWRlZ3JlZXMuCisgICAgICAgICAg
ICAvLyBUZXh0IHdoaWNoIGlzIG5vdCBmdWxsd2lkdGggd2lsbCBiZSBzZXQgd2l0aCBhIGdseXBo
LW9yaWVudGF0aW9uIG9mIDkwLWRlZ3JlZXMuCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5p
Y29kZVJhbmdlID0gZmluZENoYXJVbmljb2RlUmFuZ2UoY2hhcmFjdGVyKTsKKyAgICAgICAgICAg
IGlmICh1bmljb2RlUmFuZ2UgPT0gY1JhbmdlU2V0TGF0aW4gfHwgdW5pY29kZVJhbmdlID09IGNS
YW5nZUFyYWJpYykKKyAgICAgICAgICAgICAgICByZXR1cm4gOTA7CisKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgY2FzZSBHT185MERFRzoKKyAgICAgICAgcmV0dXJuIDkw
OworICAgIGNhc2UgR09fMTgwREVHOgorICAgICAgICByZXR1cm4gMTgwOworICAgIGNhc2UgR09f
MjcwREVHOgorICAgICAgICByZXR1cm4gMjcwOworICAgIGNhc2UgR09fMERFRzoKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBn
bHlwaE9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcyhmbG9hdCBvcmllbnRhdGlvbkFu
Z2xlKQoreworICAgIHJldHVybiAhZmFic2YoZm1vZGYob3JpZW50YXRpb25BbmdsZSwgMTgwKSk7
Cit9CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlR2x5cGhB
ZHZhbmNlQW5kT3JpZW50YXRpb24oYm9vbCBpc1ZlcnRpY2FsVGV4dCwgU1ZHVGV4dE1ldHJpY3Mm
IG1ldHJpY3MsIGZsb2F0IGFuZ2xlLCBmbG9hdCYgeE9yaWVudGF0aW9uU2hpZnQsIGZsb2F0JiB5
T3JpZW50YXRpb25TaGlmdCkgY29uc3QKK3sKKyAgICBib29sIG9yaWVudGF0aW9uSXNNdWx0aXBs
eU9mMTgwRGVncmVlcyA9IGdseXBoT3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKGFu
Z2xlKTsKKworICAgIC8vIFRoZSBmdW5jdGlvbiBpcyBiYXNlZCBvbiBzcGVjIHJlcXVpcmVtZW50
czoKKyAgICAvLworICAgIC8vIFNwZWM6IElmIHRoZSAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpv
bnRhbCcgcmVzdWx0cyBpbiBhbiBvcmllbnRhdGlvbiBhbmdsZSB0aGF0IGlzIG5vdCBhIG11bHRp
cGxlIG9mCisgICAgLy8gb2YgMTgwIGRlZ3JlZXMsIHRoZW4gdGhlIGN1cnJlbnQgdGV4dCBwb3Np
dGlvbiBpcyBpbmNyZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIHZlcnRpY2FsIG1ldHJpY3Mgb2Yg
dGhlIGdseXBoLgorICAgIC8vCisgICAgLy8gU3BlYzogSWYgaWYgdGhlICdnbHlwaC1vcmllbnRh
dGlvbi12ZXJ0aWNhbCcgcmVzdWx0cyBpbiBhbiBvcmllbnRhdGlvbiBhbmdsZSB0aGF0IGlzIG5v
dCBhIG11bHRpcGxlIG9mCisgICAgLy8gMTgwIGRlZ3JlZXMsIHRoZW4gdGhlIGN1cnJlbnQgdGV4
dCBwb3NpdGlvbiBpcyBpbmNyZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIGhvcml6b250YWwgbWV0
cmljcyBvZiB0aGUgZ2x5cGguCisKKyAgICAvLyBWZXJ0aWNhbCBvcmllbnRhdGlvbiBoYW5kbGlu
Zy4KKyAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKKyAgICAgICAgZmxvYXQgYXNjZW50TWludXNE
ZXNjZW50ID0gbV9mb250LmFzY2VudCgpIC0gbV9mb250LmRlc2NlbnQoKTsKKyAgICAgICAgaWYg
KCFhbmdsZSkgeworICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAoYXNjZW50TWludXNE
ZXNjZW50IC0gbWV0cmljcy53aWR0aCgpKSAvIDI7CisgICAgICAgICAgICB5T3JpZW50YXRpb25T
aGlmdCA9IG1fZm9udC5hc2NlbnQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChhbmdsZSA9PSAxODAp
CisgICAgICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IChhc2NlbnRNaW51c0Rlc2NlbnQgKyBt
ZXRyaWNzLndpZHRoKCkpIC8gMjsKKyAgICAgICAgZWxzZSBpZiAoYW5nbGUgPT0gMjcwKSB7Cisg
ICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IG1ldHJpY3Mud2lkdGgoKTsKKyAgICAgICAg
ICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gYXNjZW50TWludXNEZXNjZW50OworICAgICAgICB9CisK
KyAgICAgICAgLy8gVmVydGljYWwgYWR2YW5jZSBjYWxjdWxhdGlvbi4KKyAgICAgICAgaWYgKGFu
Z2xlICYmICFvcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMpCisgICAgICAgICAgICBy
ZXR1cm4gbWV0cmljcy53aWR0aCgpOworCisgICAgICAgIHJldHVybiBtZXRyaWNzLmhlaWdodCgp
OworICAgIH0KKworICAgIC8vIEhvcml6b250YWwgb3JpZW50YXRpb24gaGFuZGxpbmcuCisgICAg
aWYgKGFuZ2xlID09IDkwKQorICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1tZXRyaWNzLndp
ZHRoKCk7CisgICAgZWxzZSBpZiAoYW5nbGUgPT0gMTgwKSB7CisgICAgICAgIHhPcmllbnRhdGlv
blNoaWZ0ID0gbWV0cmljcy53aWR0aCgpOworICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1t
X2ZvbnQuYXNjZW50KCk7CisgICAgfSBlbHNlIGlmIChhbmdsZSA9PSAyNzApCisgICAgICAgIHhP
cmllbnRhdGlvblNoaWZ0ID0gbWV0cmljcy53aWR0aCgpOworCisgICAgLy8gSG9yaXpvbnRhbCBh
ZHZhbmNlIGNhbGN1bGF0aW9uLgorICAgIGlmIChhbmdsZSAmJiAhb3JpZW50YXRpb25Jc011bHRp
cGx5T2YxODBEZWdyZWVzKQorICAgICAgICByZXR1cm4gbWV0cmljcy5oZWlnaHQoKTsKKworICAg
IHJldHVybiBtZXRyaWNzLndpZHRoKCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShTVkcp
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdp
bmVCYXNlbGluZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZV9oCisj
ZGVmaW5lIFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZV9oCisKKyNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlRGVmcy5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFzcyBSZW5kZXJP
YmplY3Q7CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU1ZHUmVuZGVyU3R5bGU7CitjbGFzcyBT
VkdUZXh0TWV0cmljczsKKworLy8gSGVscGVyIGNsYXNzIHVzZWQgYnkgU1ZHVGV4dExheW91dEVu
Z2luZSB0byBoYW5kbGUgJ2FsaWdubWVudC1iYXNlbGluZScgLyAnZG9taW5hbnQtYmFzZWxpbmUn
IGFuZCAnYmFzZWxpbmUtc2hpZnQnLgorY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5l
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmUoY29uc3QgRm9udCYpOworCisgICAgZmxvYXQgY2FsY3VsYXRlQmFzZWxpbmVTaGlm
dChjb25zdCBTVkdSZW5kZXJTdHlsZSosIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQpIGNvbnN0
OworICAgIGZsb2F0IGNhbGN1bGF0ZUFsaWdubWVudEJhc2VsaW5lU2hpZnQoYm9vbCBpc1ZlcnRp
Y2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0OworICAgIGZs
b2F0IGNhbGN1bGF0ZUdseXBoT3JpZW50YXRpb25BbmdsZShib29sIGlzVmVydGljYWxUZXh0LCBj
b25zdCBTVkdSZW5kZXJTdHlsZSosIGNvbnN0IFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0OworICAg
IGZsb2F0IGNhbGN1bGF0ZUdseXBoQWR2YW5jZUFuZE9yaWVudGF0aW9uKGJvb2wgaXNWZXJ0aWNh
bFRleHQsIFNWR1RleHRNZXRyaWNzJiwgZmxvYXQgYW5nbGUsIGZsb2F0JiB4T3JpZW50YXRpb25T
aGlmdCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBF
QWxpZ25tZW50QmFzZWxpbmUgZG9taW5hbnRCYXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUoYm9v
bCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0
OworCisgICAgY29uc3QgRm9udCYgbV9mb250OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNWRykKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdUZXh0TGF5
b3V0RW5naW5lU3BhY2luZy5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIlNWR0ZvbnRF
bGVtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZzo6U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcoY29uc3QgRm9udCYgZm9u
dCkKKyAgICA6IG1fZm9udChmb250KQorICAgICwgbV9sYXN0Q2hhcmFjdGVyKDApCit7Cit9CisK
K2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpjYWxjdWxhdGVTVkdLZXJuaW5nKGJv
b2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEds
eXBoKQoreworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgaWYgKCFtX2ZvbnQuaXNTVkdGb250
KCkpIHsKKyAgICAgICAgbV9sYXN0R2x5cGguaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBTVkdGb250RWxlbWVudCogc3ZnRm9udCA9IG1fZm9udC5zdmdG
b250KCk7CisgICAgQVNTRVJUKHN2Z0ZvbnQpOworCisgICAgZmxvYXQga2VybmluZyA9IDA7Cisg
ICAgaWYgKG1fbGFzdEdseXBoLmlzVmFsaWQpIHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0
KQorICAgICAgICAgICAga2VybmluZyA9IHN2Z0ZvbnQtPnZlcnRpY2FsS2VybmluZ0ZvclBhaXJP
ZlN0cmluZ3NBbmRHbHlwaHMobV9sYXN0R2x5cGgudW5pY29kZVN0cmluZywgbV9sYXN0R2x5cGgu
bmFtZSwgY3VycmVudEdseXBoLnVuaWNvZGVTdHJpbmcsIGN1cnJlbnRHbHlwaC5uYW1lKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAga2VybmluZyA9IHN2Z0ZvbnQtPmhvcml6b250YWxLZXJu
aW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhtX2xhc3RHbHlwaC51bmljb2RlU3RyaW5nLCBt
X2xhc3RHbHlwaC5uYW1lLCBjdXJyZW50R2x5cGgudW5pY29kZVN0cmluZywgY3VycmVudEdseXBo
Lm5hbWUpOworICAgIH0KKworICAgIG1fbGFzdEdseXBoID0gY3VycmVudEdseXBoOworICAgIG1f
bGFzdEdseXBoLmlzVmFsaWQgPSB0cnVlOworICAgIGtlcm5pbmcgKj0gbV9mb250LnNpemUoKSAv
IG1fZm9udC5wcmltYXJ5Rm9udCgpLT51bml0c1BlckVtKCk7CisgICAgcmV0dXJuIGtlcm5pbmc7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpc1ZlcnRpY2FsVGV4dCk7CisgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRHbHlwaCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2Zsb2F0
IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpjYWxjdWxhdGVDU1NLZXJuaW5nQW5kU3BhY2lu
Zyhjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUsIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQs
IGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVyKQoreworICAgIGZsb2F0IGtlcm5pbmcgPSAw
OworICAgIFNWR0xlbmd0aCBrZXJuaW5nTGVuZ3RoID0gc3R5bGUtPmtlcm5pbmcoKTsKKyAgICBp
ZiAoa2VybmluZ0xlbmd0aC51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlKQorICAg
ICAgICBrZXJuaW5nID0ga2VybmluZ0xlbmd0aC52YWx1ZUFzUGVyY2VudGFnZSgpICogbV9mb250
LnBpeGVsU2l6ZSgpOworICAgIGVsc2UKKyAgICAgICAga2VybmluZyA9IGtlcm5pbmdMZW5ndGgu
dmFsdWUobGVuZ3RoQ29udGV4dCk7CisKKyAgICBjb25zdCBVQ2hhciogbGFzdENoYXJhY3RlciA9
IG1fbGFzdENoYXJhY3RlcjsKKyAgICBtX2xhc3RDaGFyYWN0ZXIgPSBjdXJyZW50Q2hhcmFjdGVy
OworCisgICAgaWYgKCFrZXJuaW5nICYmICFtX2ZvbnQubGV0dGVyU3BhY2luZygpICYmICFtX2Zv
bnQud29yZFNwYWNpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCBzcGFjaW5n
ID0gbV9mb250LmxldHRlclNwYWNpbmcoKSArIGtlcm5pbmc7CisgICAgaWYgKGN1cnJlbnRDaGFy
YWN0ZXIgJiYgbGFzdENoYXJhY3RlciAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkgeworICAgICAg
ICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFjdGVyKSAmJiAhRm9udDo6dHJl
YXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkKKyAgICAgICAgICAgIHNwYWNpbmcgKz0gbV9mb250
LndvcmRTcGFjaW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIHNwYWNpbmc7Cit9CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dExheW91dEVuZ2luZVNwYWNpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nX2gKKyNkZWZpbmUgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmdfaAorCisj
aWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdUZXh0TWV0cmljcy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZvbnQ7CitjbGFzcyBTVkdSZW5kZXJTdHlsZTsKK2NsYXNzIFNW
R0VsZW1lbnQ7CisKKy8vIEhlbHBlciBjbGFzcyB1c2VkIGJ5IFNWR1RleHRMYXlvdXRFbmdpbmUg
dG8gaGFuZGxlICdrZXJuaW5nJyAvICdsZXR0ZXItc3BhY2luZycgYW5kICd3b3JkLXNwYWNpbmcn
LgorY2xhc3MgU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcgOiBwdWJsaWMgTm9uY29weWFibGUg
eworcHVibGljOgorICAgIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nKGNvbnN0IEZvbnQmKTsK
KworICAgIGZsb2F0IGNhbGN1bGF0ZVNWR0tlcm5pbmcoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29u
c3QgU1ZHVGV4dE1ldHJpY3M6OkdseXBoJiBjdXJyZW50R2x5cGgpOworICAgIGZsb2F0IGNhbGN1
bGF0ZUNTU0tlcm5pbmdBbmRTcGFjaW5nKGNvbnN0IFNWR1JlbmRlclN0eWxlKiwgU1ZHRWxlbWVu
dCogbGVuZ3RoQ29udGV4dCwgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIpOworCitwcml2
YXRlOgorICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBjb25zdCBVQ2hhciogbV9sYXN0Q2hh
cmFjdGVyOworCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICBTVkdUZXh0TWV0cmljczo6R2x5
cGggbV9sYXN0R2x5cGg7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYK
</data>
<flag name="review"
          id="59148"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69448</attachid>
            <date>2010-10-01 04:36:07 -0700</date>
            <delta_ts>2010-10-01 04:37:48 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>NewFiles.diff</filename>
            <type>text/plain</type>
            <size>28036</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODg3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMDEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgorCisgICAg
ICAgIEFkZCB0d28gbmV3IGhlbHBlciBmaWxlcyBmb3IgdGhlIG5ldyBTVkdUZXh0TGF5b3V0RW5n
aW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Njk3
MgorCisgICAgICAgIFJlZmFjdG9yIGNvZGUgZnJvbSBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzIGlu
dG8gdHdvIHNlcGVyYXRlZCBjbGFzc2VzLgorICAgICAgICBTVkdUZXh0TGF5b3V0VXRpbGl0aWVz
IHdpbGwgYmUgcmVtb3ZlZCwgYXMgc29vbiBhcyB0aGUgbWFpbiBjbHNzIFNWR1RleHRMYXlvdXRF
bmdpbmUgbGFuZHMgYW5kIGdldHMgdXNlZC4KKworICAgICAgICBEb2Vzbid0IGFmZmVjdCBhbnkg
ZnVuY3Rpb25hbGl0eSB5ZXQsIGFzIHRoZSBuZXcgY2xhc3NlcyBhcmUgbm90IHVzZWQgc28gZmFy
LgorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dEZy
YWdtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFz
ZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVC
YXNlbGluZTo6U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlQmFzZWxpbmVTaGlmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OmRvbWluYW50QmFz
ZWxpbmVUb0FsaWdubWVudEJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlv
dXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRlQWxpZ25tZW50QmFzZWxpbmVTaGlmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OmNhbGN1bGF0ZUdseXBo
T3JpZW50YXRpb25BbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpnbHlwaE9yaWVudGF0aW9uSXNN
dWx0aXBseU9mMTgwRGVncmVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmU6OmNhbGN1bGF0ZUdseXBoQWR2YW5jZUFuZE9yaWVudGF0aW9uKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oOiBBZGRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6U1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmc6OmNhbGN1bGF0ZVNWR0tlcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OmNhbGN1bGF0ZUNTU0tlcm5pbmdBbmRTcGFjaW5n
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmg6
IEFkZGVkLgorCiAyMDEwLTEwLTAxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBy
aW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJD
b3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lv
biA2ODg3NikKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtNzE4LDYg
KzcxOCw4IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXJlbmRl
cmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBcCiAJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
QXR0cmlidXRlcy5jcHAgXAogCXJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNC
dWlsZGVyLmNwcCBcCisJcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUu
Y3BwIFwKKwlyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCBcCiAJ
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAgXAogCXJlbmRlcmluZy9zdmcvU1ZHVGV4
dFF1ZXJ5LmNwcAogZW5kaWYKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNjg4NzYpCisrKyBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNzA4LDYgKzE3MDgsOCBAQCBJRiAo
RU5BQkxFX1NWRykKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCiAgICAg
ICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMuY3BwCiAgICAgICAgIHJl
bmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcAorICAgICAgICBy
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRCYXNlbGluZS5jcHAKKyAgICAgICAgcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0U3BhY2luZy5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TWV0cmljcy5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCiAg
ICAgICAgIHN2Zy9Db2xvckRpc3RhbmNlLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2ODg3NikK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI4MTYsNiArMjgx
NiwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcy5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExh
eW91dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5oIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRNZXRyaWNzLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmgg
XAogCVdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA2ODg3NikKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDU4LDYgKzM0NTgsMTAgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlv
dXRBdHRyaWJ1dGVzLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEF0dHJpYnV0ZXNCdWlsZGVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCcsCisgICAgICAgICAgICAn
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CShyZXZpc2lvbiA2ODg3NikKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTMzNDg2LDYgKzMzNDg2LDIyIEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3Zn
XFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4N
CisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5n
LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0TWV0cmljcy5jcHAiDQogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNjg4NzYpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTAgQEAKIAkJMDgwQUVDODIwRUQ4NzA4
QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODBBRUM3RTBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50
cmluc2ljRXZlbnQuaCAqLzsgfTsKIAkJMDgwQUVDODMwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODBBRUM3RjBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmNwcCAqLzsgfTsKIAkJMDgwQUVDODQwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgwQUVDODAwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50
SGFuZGxlci5oICovOyB9OworCQkwODBFNDkyNTEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4MEU0OTIxMTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUuY3BwICovOyB9OworCQkwODBFNDkyNjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZH
VGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODBFNDkyMjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91
dEVuZ2luZUJhc2VsaW5lLmggKi87IH07CisJCTA4MEU0OTI3MTI1NUYzQkQwMEVGQ0EyNyAvKiBT
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODBFNDkyMzEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExh
eW91dEVuZ2luZVNwYWNpbmcuY3BwICovOyB9OworCQkwODBFNDkyODEyNTVGM0JEMDBFRkNBMjcg
LyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTI0MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5oICovOyB9OwogCQkwODBGQUUxQTBFRUVCREE4MDBBQUNERTkg
LyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4MEZBRTE4MEVFRUJEQTgwMEFBQ0RFOSAvKiBXTUxUZW1wbGF0ZUVs
ZW1lbnQuY3BwICovOyB9OwogCQkwODBGQUUxQjBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxh
dGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODBGQUUxOTBFRUVCREE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi87IH07
CiAJCTA4MTA5M0RCMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDgxMDkzRDkxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRl
ci5jcHAgKi87IH07CkBAIC02MDA3LDYgKzYwMTEsMTAgQEAKIAkJMDgwQUVDN0UwRUQ4NzA4QjAw
REY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTEludHJpbnNpY0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA4MEFFQzdGMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgwQUVDODAwRUQ4NzA4
QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDgwRTQ5MjExMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlv
dXRFbmdpbmVCYXNlbGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwODBFNDkyMjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJh
c2VsaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRMYXlvdXRF
bmdpbmVCYXNlbGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODBFNDkyMzEy
NTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODBFNDkyNDEyNTVGM0JEMDBFRkNB
MjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDgwRkFFMTgwRUVFQkRBODAwQUFDREU5IC8qIFdNTFRlbXBsYXRlRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxUZW1wbGF0
ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBGQUUxOTBFRUVC
REE4MDBBQUNERTkgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdNTFRlbXBsYXRlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODEwOTNEOTEyNTVGMEU3MDBFRDlEMjkgLyogU1ZHVGV4dExheW91dEF0dHJpYnV0
ZXNCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Rl
eHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTY2MSw2ICsxMTY2OSwxMCBAQAogCQkJCTA4OEMyRjc2MTIzOTAwODAwMDNENjVDRSAv
KiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcy5oICovLAogCQkJCTA4MTA5M0Q5MTI1NUYwRTcwMEVE
OUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuY3BwICovLAogCQkJCTA4MTA5
M0RBMTI1NUYwRTcwMEVEOUQyOSAvKiBTVkdUZXh0TGF5b3V0QXR0cmlidXRlc0J1aWxkZXIuaCAq
LywKKwkJCQkwODBFNDkyMTEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJh
c2VsaW5lLmNwcCAqLywKKwkJCQkwODBFNDkyMjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExh
eW91dEVuZ2luZUJhc2VsaW5lLmggKi8sCisJCQkJMDgwRTQ5MjMxMjU1RjNCRDAwRUZDQTI3IC8q
IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCAqLywKKwkJCQkwODBFNDkyNDEyNTVGM0JE
MDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCAqLywKIAkJCQkwOEYwQkZD
MDEyNTVDNTNDMDAwNzUxODUgLyogU1ZHVGV4dE1ldHJpY3MuY3BwICovLAogCQkJCTA4RjBCRkMx
MTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0cmljcy5oICovLAogCQkJCTA4NTRCMDEyMTI1
NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuY3BwICovLApAQCAtMjA5MzcsNiArMjA5NDks
OCBAQAogCQkJCTA4NTRCMDIzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwODU0QjAyNTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1
ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODEwOTNEQzEyNTVGMEU3MDBFRDlEMjkgLyogU1ZH
VGV4dExheW91dEF0dHJpYnV0ZXNCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwODBFNDky
NjEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwODBFNDkyODEyNTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVu
Z2luZVNwYWNpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjM0NjMsNiArMjM0NzcsOCBAQAogCQkJ
CTA4NTRCMDIyMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTA4NTRCMDI0MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMDgxMDkzREIxMjU1RjBFNzAwRUQ5RDI5IC8qIFNWR1RleHRM
YXlvdXRBdHRyaWJ1dGVzQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwODBFNDkyNTEy
NTVGM0JEMDBFRkNBMjcgLyogU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTA4MEU0OTI3MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5n
aW5lU3BhY2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0RnJhZ21lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dEZyYWdtZW50LmgJKHJldmlzaW9uIDY4ODczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRGcmFnbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0
cnVjdCBTVkdUZXh0RnJhZ21lbnQgewogICAgIGZsb2F0IGhlaWdodDsKIAogICAgIC8vIEluY2x1
ZGVzIHJvdGF0aW9uL2dseXBoLW9yaWVudGF0aW9uLShob3Jpem9udGFsfHZlcnRpY2FsKSB0cmFu
c2Zvcm1zLCBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIChmb3IgdGV4dFBhdGggb25s
eSksCi0gICAgLy8gYXMgd2VsbCBhcyBvcmllbnRhdGlvbiByZWxhdGVkIHNoaWZ0cyAoc2VlIFNW
R0NoYXJhY3RlckxheW91dEJ1aWxkZXIsIHdoaWNoIGJ1aWxkcyB0aGlzIHRyYW5zZm9ybWF0aW9u
KS4KKyAgICAvLyBhcyB3ZWxsIGFzIG9yaWVudGF0aW9uIHJlbGF0ZWQgc2hpZnRzIChzZWUgU1ZH
VGV4dExheW91dEVuZ2luZSwgd2hpY2ggYnVpbGRzIHRoaXMgdHJhbnNmb3JtYXRpb24pLgogICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiB9OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdUZXh0
TGF5b3V0RW5naW5lQmFzZWxpbmUuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNW
R1RleHRNZXRyaWNzLmgiCisjaW5jbHVkZSAiVW5pY29kZVJhbmdlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lOjpTVkdUZXh0TGF5b3V0RW5n
aW5lQmFzZWxpbmUoY29uc3QgRm9udCYgZm9udCkKKyAgICA6IG1fZm9udChmb250KQoreworfQor
CitmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmU6OmNhbGN1bGF0ZUJhc2VsaW5lU2hp
ZnQoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlLCBTVkdFbGVtZW50KiBsZW5ndGhDb250ZXh0
KSBjb25zdAoreworICAgIGlmIChzdHlsZS0+YmFzZWxpbmVTaGlmdCgpID09IEJTX0xFTkdUSCkg
eworICAgICAgICBTVkdMZW5ndGggYmFzZWxpbmVTaGlmdFZhbHVlTGVuZ3RoID0gc3R5bGUtPmJh
c2VsaW5lU2hpZnRWYWx1ZSgpOworICAgICAgICBpZiAoYmFzZWxpbmVTaGlmdFZhbHVlTGVuZ3Ro
LnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2UpCisgICAgICAgICAgICByZXR1cm4g
YmFzZWxpbmVTaGlmdFZhbHVlTGVuZ3RoLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBtX2ZvbnQucGl4
ZWxTaXplKCk7CisKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lU2hpZnRWYWx1ZUxlbmd0aC52YWx1
ZShsZW5ndGhDb250ZXh0KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHN0eWxlLT5iYXNlbGluZVNo
aWZ0KCkpIHsKKyAgICBjYXNlIEJTX0JBU0VMSU5FOgorICAgICAgICByZXR1cm4gMDsKKyAgICBj
YXNlIEJTX1NVQjoKKyAgICAgICAgcmV0dXJuIC1tX2ZvbnQuaGVpZ2h0KCkgLyAyOworICAgIGNh
c2UgQlNfU1VQRVI6CisgICAgICAgIHJldHVybiBtX2ZvbnQuaGVpZ2h0KCkgLyAyOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK0VBbGlnbm1lbnRCYXNlbGluZSBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmU6OmRvbWluYW50QmFzZWxpbmVUb0FsaWdubWVudEJhc2VsaW5lKGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRlcmVyKSBjb25zdAoreworICAgIEFTU0VS
VCh0ZXh0UmVuZGVyZXIpOworICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXItPnN0eWxlKCkpOworICAg
IEFTU0VSVCh0ZXh0UmVuZGVyZXItPnBhcmVudCgpKTsKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVy
LT5wYXJlbnQoKS0+c3R5bGUoKSk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUg
PSB0ZXh0UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgQVNTRVJUKHN0eWxlKTsK
KworICAgIEVEb21pbmFudEJhc2VsaW5lIGJhc2VsaW5lID0gc3R5bGUtPmRvbWluYW50QmFzZWxp
bmUoKTsKKyAgICBpZiAoYmFzZWxpbmUgPT0gREJfQVVUTykgeworICAgICAgICBpZiAoaXNWZXJ0
aWNhbFRleHQpCisgICAgICAgICAgICBiYXNlbGluZSA9IERCX0NFTlRSQUw7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGJhc2VsaW5lID0gREJfQUxQSEFCRVRJQzsKKyAgICB9CisKKyAgICBz
d2l0Y2ggKGJhc2VsaW5lKSB7CisgICAgY2FzZSBEQl9VU0VfU0NSSVBUOgorICAgICAgICAvLyBG
SVhNRTogVGhlIGRvbWluYW50LWJhc2VsaW5lIGFuZCB0aGUgYmFzZWxpbmUtdGFibGUgY29tcG9u
ZW50cyBhcmUgc2V0IGJ5IGRldGVybWluaW5nIHRoZSBwcmVkb21pbmFudCBzY3JpcHQgb2YgdGhl
IGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBBQl9BTFBIQUJFVElDOwor
ICAgIGNhc2UgREJfTk9fQ0hBTkdFOgorICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGluZVRv
QWxpZ25tZW50QmFzZWxpbmUoaXNWZXJ0aWNhbFRleHQsIHRleHRSZW5kZXJlci0+cGFyZW50KCkp
OworICAgIGNhc2UgREJfUkVTRVRfU0laRToKKyAgICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxp
bmVUb0FsaWdubWVudEJhc2VsaW5lKGlzVmVydGljYWxUZXh0LCB0ZXh0UmVuZGVyZXItPnBhcmVu
dCgpKTsKKyAgICBjYXNlIERCX0lERU9HUkFQSElDOgorICAgICAgICByZXR1cm4gQUJfSURFT0dS
QVBISUM7CisgICAgY2FzZSBEQl9BTFBIQUJFVElDOgorICAgICAgICByZXR1cm4gQUJfQUxQSEFC
RVRJQzsKKyAgICBjYXNlIERCX0hBTkdJTkc6CisgICAgICAgIHJldHVybiBBQl9IQU5HSU5HOwor
ICAgIGNhc2UgREJfTUFUSEVNQVRJQ0FMOgorICAgICAgICByZXR1cm4gQUJfTUFUSEVNQVRJQ0FM
OworICAgIGNhc2UgREJfQ0VOVFJBTDoKKyAgICAgICAgcmV0dXJuIEFCX0NFTlRSQUw7CisgICAg
Y2FzZSBEQl9NSURETEU6CisgICAgICAgIHJldHVybiBBQl9NSURETEU7CisgICAgY2FzZSBEQl9U
RVhUX0FGVEVSX0VER0U6CisgICAgICAgIHJldHVybiBBQl9URVhUX0FGVEVSX0VER0U7CisgICAg
Y2FzZSBEQl9URVhUX0JFRk9SRV9FREdFOgorICAgICAgICByZXR1cm4gQUJfVEVYVF9CRUZPUkVf
RURHRTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIEFCX0FVVE87CisgICAgfQorfQorCitmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5l
QmFzZWxpbmU6OmNhbGN1bGF0ZUFsaWdubWVudEJhc2VsaW5lU2hpZnQoYm9vbCBpc1ZlcnRpY2Fs
VGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0UmVuZGVyZXIpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHRleHRSZW5kZXJlcik7CisgICAgQVNTRVJUKHRleHRSZW5kZXJlci0+c3R5bGUoKSk7Cisg
ICAgQVNTRVJUKHRleHRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CisgICAgQVNTRVJU
KHRleHRSZW5kZXJlci0+cGFyZW50KCkpOworCisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0
UmVuZGVyZXJQYXJlbnQgPSB0ZXh0UmVuZGVyZXItPnBhcmVudCgpOworICAgIEFTU0VSVCh0ZXh0
UmVuZGVyZXJQYXJlbnQpOworCisgICAgRUFsaWdubWVudEJhc2VsaW5lIGJhc2VsaW5lID0gdGV4
dFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5hbGlnbm1lbnRCYXNlbGluZSgpOworICAg
IGlmIChiYXNlbGluZSA9PSBBQl9BVVRPKSB7CisgICAgICAgIGJhc2VsaW5lID0gZG9taW5hbnRC
YXNlbGluZVRvQWxpZ25tZW50QmFzZWxpbmUoaXNWZXJ0aWNhbFRleHQsIHRleHRSZW5kZXJlclBh
cmVudCk7CisgICAgICAgIEFTU0VSVChiYXNlbGluZSAhPSBBQl9BVVRPKTsKKyAgICB9CisKKyAg
ICAvLyBOb3RlOiBodHRwOi8vd2lraS5hcGFjaGUub3JnL3htbGdyYXBoaWNzLWZvcC9MaW5lTGF5
b3V0L0FsaWdubWVudEhhbmRsaW5nCisgICAgc3dpdGNoIChiYXNlbGluZSkgeworICAgIGNhc2Ug
QUJfQkFTRUxJTkU6CisgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9BbGlnbm1lbnRC
YXNlbGluZShpc1ZlcnRpY2FsVGV4dCwgdGV4dFJlbmRlcmVyUGFyZW50KTsKKyAgICBjYXNlIEFC
X0JFRk9SRV9FREdFOgorICAgIGNhc2UgQUJfVEVYVF9CRUZPUkVfRURHRToKKyAgICAgICAgcmV0
dXJuIG1fZm9udC5hc2NlbnQoKTsKKyAgICBjYXNlIEFCX01JRERMRToKKyAgICAgICAgcmV0dXJu
IG1fZm9udC54SGVpZ2h0KCkgLyAyOworICAgIGNhc2UgQUJfQ0VOVFJBTDoKKyAgICAgICAgcmV0
dXJuIChtX2ZvbnQuYXNjZW50KCkgLSBtX2ZvbnQuZGVzY2VudCgpKSAvIDI7CisgICAgY2FzZSBB
Ql9BRlRFUl9FREdFOgorICAgIGNhc2UgQUJfVEVYVF9BRlRFUl9FREdFOgorICAgIGNhc2UgQUJf
SURFT0dSQVBISUM6CisgICAgICAgIHJldHVybiBtX2ZvbnQuZGVzY2VudCgpOworICAgIGNhc2Ug
QUJfQUxQSEFCRVRJQzoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBBQl9IQU5HSU5HOgor
ICAgICAgICByZXR1cm4gbV9mb250LmFzY2VudCgpICogOCAvIDEwLmY7CisgICAgY2FzZSBBQl9N
QVRIRU1BVElDQUw6CisgICAgICAgIHJldHVybiBtX2ZvbnQuYXNjZW50KCkgLyAyOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK2Zsb2F0IFNWR1RleHRMYXlvdXRFbmdpbmVCYXNlbGluZTo6Y2FsY3VsYXRl
R2x5cGhPcmllbnRhdGlvbkFuZ2xlKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgVUNoYXImIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICBBU1NF
UlQoc3R5bGUpOworCisgICAgc3dpdGNoIChpc1ZlcnRpY2FsVGV4dCA/IHN0eWxlLT5nbHlwaE9y
aWVudGF0aW9uVmVydGljYWwoKSA6IHN0eWxlLT5nbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCgp
KSB7CisgICAgY2FzZSBHT19BVVRPOgorICAgIHsKKyAgICAgICAgLy8gU3BlYzogRnVsbHdpZHRo
IGlkZW9ncmFwaGljIGFuZCBmdWxsd2lkdGggTGF0aW4gdGV4dCB3aWxsIGJlIHNldCB3aXRoIGEg
Z2x5cGgtb3JpZW50YXRpb24gb2YgMC1kZWdyZWVzLgorICAgICAgICAvLyBUZXh0IHdoaWNoIGlz
IG5vdCBmdWxsd2lkdGggd2lsbCBiZSBzZXQgd2l0aCBhIGdseXBoLW9yaWVudGF0aW9uIG9mIDkw
LWRlZ3JlZXMuCisgICAgICAgIHVuc2lnbmVkIGludCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVu
aWNvZGVSYW5nZShjaGFyYWN0ZXIpOworICAgICAgICBpZiAodW5pY29kZVJhbmdlID09IGNSYW5n
ZVNldExhdGluIHx8IHVuaWNvZGVSYW5nZSA9PSBjUmFuZ2VBcmFiaWMpCisgICAgICAgICAgICBy
ZXR1cm4gOTA7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNhc2UgR09fOTBERUc6
CisgICAgICAgIHJldHVybiA5MDsKKyAgICBjYXNlIEdPXzE4MERFRzoKKyAgICAgICAgcmV0dXJu
IDE4MDsKKyAgICBjYXNlIEdPXzI3MERFRzoKKyAgICAgICAgcmV0dXJuIDI3MDsKKyAgICBjYXNl
IEdPXzBERUc6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgZ2x5cGhPcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMo
ZmxvYXQgb3JpZW50YXRpb25BbmdsZSkKK3sKKyAgICByZXR1cm4gIWZhYnNmKGZtb2RmKG9yaWVu
dGF0aW9uQW5nbGUsIDE4MCkpOworfQorCitmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxp
bmU6OmNhbGN1bGF0ZUdseXBoQWR2YW5jZUFuZE9yaWVudGF0aW9uKGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIFNWR1RleHRNZXRyaWNzJiBtZXRyaWNzLCBmbG9hdCBhbmdsZSwgZmxvYXQmIHhPcmllbnRh
dGlvblNoaWZ0LCBmbG9hdCYgeU9yaWVudGF0aW9uU2hpZnQpIGNvbnN0Cit7CisgICAgYm9vbCBv
cmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMgPSBnbHlwaE9yaWVudGF0aW9uSXNNdWx0
aXBseU9mMTgwRGVncmVlcyhhbmdsZSk7CisKKyAgICAvLyBUaGUgZnVuY3Rpb24gaXMgYmFzZWQg
b24gc3BlYyByZXF1aXJlbWVudHM6CisgICAgLy8KKyAgICAvLyBTcGVjOiBJZiB0aGUgJ2dseXBo
LW9yaWVudGF0aW9uLWhvcml6b250YWwnIHJlc3VsdHMgaW4gYW4gb3JpZW50YXRpb24gYW5nbGUg
dGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgIC8vIG9mIDE4MCBkZWdyZWVzLCB0aGVuIHRo
ZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSB2
ZXJ0aWNhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KKyAgICAvLworICAgIC8vIFNwZWM6IElmIGlm
IHRoZSAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnIHJlc3VsdHMgaW4gYW4gb3JpZW50YXRp
b24gYW5nbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgIC8vIDE4MCBkZWdyZWVzLCB0
aGVuIHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNjb3JkaW5nIHRv
IHRoZSBob3Jpem9udGFsIG1ldHJpY3Mgb2YgdGhlIGdseXBoLgorCisgICAgLy8gVmVydGljYWwg
b3JpZW50YXRpb24gaGFuZGxpbmcuCisgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7CisgICAgICAg
IGZsb2F0IGFzY2VudE1pbnVzRGVzY2VudCA9IG1fZm9udC5hc2NlbnQoKSAtIG1fZm9udC5kZXNj
ZW50KCk7CisgICAgICAgIGlmICghYW5nbGUpIHsKKyAgICAgICAgICAgIHhPcmllbnRhdGlvblNo
aWZ0ID0gKGFzY2VudE1pbnVzRGVzY2VudCAtIG1ldHJpY3Mud2lkdGgoKSkgLyAyOworICAgICAg
ICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBtX2ZvbnQuYXNjZW50KCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoYW5nbGUgPT0gMTgwKQorICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAoYXNj
ZW50TWludXNEZXNjZW50ICsgbWV0cmljcy53aWR0aCgpKSAvIDI7CisgICAgICAgIGVsc2UgaWYg
KGFuZ2xlID09IDI3MCkgeworICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBtZXRyaWNz
LndpZHRoKCk7CisgICAgICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IGFzY2VudE1pbnVzRGVz
Y2VudDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFZlcnRpY2FsIGFkdmFuY2UgY2FsY3VsYXRp
b24uCisgICAgICAgIGlmIChhbmdsZSAmJiAhb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdy
ZWVzKQorICAgICAgICAgICAgcmV0dXJuIG1ldHJpY3Mud2lkdGgoKTsKKworICAgICAgICByZXR1
cm4gbWV0cmljcy5oZWlnaHQoKTsKKyAgICB9CisKKyAgICAvLyBIb3Jpem9udGFsIG9yaWVudGF0
aW9uIGhhbmRsaW5nLgorICAgIGlmIChhbmdsZSA9PSA5MCkKKyAgICAgICAgeU9yaWVudGF0aW9u
U2hpZnQgPSAtbWV0cmljcy53aWR0aCgpOworICAgIGVsc2UgaWYgKGFuZ2xlID09IDE4MCkgewor
ICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IG1ldHJpY3Mud2lkdGgoKTsKKyAgICAgICAgeU9y
aWVudGF0aW9uU2hpZnQgPSAtbV9mb250LmFzY2VudCgpOworICAgIH0gZWxzZSBpZiAoYW5nbGUg
PT0gMjcwKQorICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IG1ldHJpY3Mud2lkdGgoKTsKKwor
ICAgIC8vIEhvcml6b250YWwgYWR2YW5jZSBjYWxjdWxhdGlvbi4KKyAgICBpZiAoYW5nbGUgJiYg
IW9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcykKKyAgICAgICAgcmV0dXJuIG1ldHJp
Y3MuaGVpZ2h0KCk7CisKKyAgICByZXR1cm4gbWV0cmljcy53aWR0aCgpOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTVkdUZXh0TGF5b3V0
RW5naW5lQmFzZWxpbmVfaAorI2RlZmluZSBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmVfaAor
CisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZURlZnMuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
b250OworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgU1ZHRWxlbWVudDsKK2NsYXNzIFNWR1Jl
bmRlclN0eWxlOworY2xhc3MgU1ZHVGV4dE1ldHJpY3M7CisKKy8vIEhlbHBlciBjbGFzcyB1c2Vk
IGJ5IFNWR1RleHRMYXlvdXRFbmdpbmUgdG8gaGFuZGxlICdhbGlnbm1lbnQtYmFzZWxpbmUnIC8g
J2RvbWluYW50LWJhc2VsaW5lJyBhbmQgJ2Jhc2VsaW5lLXNoaWZ0Jy4KK2NsYXNzIFNWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAg
U1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lKGNvbnN0IEZvbnQmKTsKKworICAgIGZsb2F0IGNh
bGN1bGF0ZUJhc2VsaW5lU2hpZnQoY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBTVkdFbGVtZW50KiBs
ZW5ndGhDb250ZXh0KSBjb25zdDsKKyAgICBmbG9hdCBjYWxjdWxhdGVBbGlnbm1lbnRCYXNlbGlu
ZVNoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dFJlbmRl
cmVyKSBjb25zdDsKKyAgICBmbG9hdCBjYWxjdWxhdGVHbHlwaE9yaWVudGF0aW9uQW5nbGUoYm9v
bCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU1ZHUmVuZGVyU3R5bGUqLCBjb25zdCBVQ2hhciYgY2hh
cmFjdGVyKSBjb25zdDsKKyAgICBmbG9hdCBjYWxjdWxhdGVHbHlwaEFkdmFuY2VBbmRPcmllbnRh
dGlvbihib29sIGlzVmVydGljYWxUZXh0LCBTVkdUZXh0TWV0cmljcyYsIGZsb2F0IGFuZ2xlLCBm
bG9hdCYgeE9yaWVudGF0aW9uU2hpZnQsIGZsb2F0JiB5T3JpZW50YXRpb25TaGlmdCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxpbmVUb0Fs
aWdubWVudEJhc2VsaW5lKGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCog
dGV4dFJlbmRlcmVyKSBjb25zdDsKKworICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVT
cGFjaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisj
aW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCIKKworI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgorCisjaWYgRU5BQkxFKFNWR19GT05UUykK
KyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmc6OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nKGNvbnN0IEZvbnQmIGZvbnQpCisgICAgOiBtX2ZvbnQoZm9udCkKKyAgICAsIG1fbGFzdENo
YXJhY3RlcigwKQoreworfQorCitmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2Fs
Y3VsYXRlU1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBTVkdUZXh0TWV0cmlj
czo6R2x5cGgmIGN1cnJlbnRHbHlwaCkKK3sKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlm
ICghbV9mb250LmlzU1ZHRm9udCgpKSB7CisgICAgICAgIG1fbGFzdEdseXBoLmlzVmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgU1ZHRm9udEVsZW1lbnQqIHN2
Z0ZvbnQgPSBtX2ZvbnQuc3ZnRm9udCgpOworICAgIEFTU0VSVChzdmdGb250KTsKKworICAgIGZs
b2F0IGtlcm5pbmcgPSAwOworICAgIGlmIChtX2xhc3RHbHlwaC5pc1ZhbGlkKSB7CisgICAgICAg
IGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGtlcm5pbmcgPSBzdmdGb250LT52ZXJ0
aWNhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKG1fbGFzdEdseXBoLnVuaWNvZGVT
dHJpbmcsIG1fbGFzdEdseXBoLm5hbWUsIGN1cnJlbnRHbHlwaC51bmljb2RlU3RyaW5nLCBjdXJy
ZW50R2x5cGgubmFtZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGtlcm5pbmcgPSBzdmdG
b250LT5ob3Jpem9udGFsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobV9sYXN0R2x5
cGgudW5pY29kZVN0cmluZywgbV9sYXN0R2x5cGgubmFtZSwgY3VycmVudEdseXBoLnVuaWNvZGVT
dHJpbmcsIGN1cnJlbnRHbHlwaC5uYW1lKTsKKyAgICB9CisKKyAgICBtX2xhc3RHbHlwaCA9IGN1
cnJlbnRHbHlwaDsKKyAgICBtX2xhc3RHbHlwaC5pc1ZhbGlkID0gdHJ1ZTsKKyAgICBrZXJuaW5n
ICo9IG1fZm9udC5zaXplKCkgLyBtX2ZvbnQucHJpbWFyeUZvbnQoKS0+dW5pdHNQZXJFbSgpOwor
ICAgIHJldHVybiBrZXJuaW5nOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXNWZXJ0aWNhbFRl
eHQpOworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50R2x5cGgpOworICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCitmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRl
Q1NTS2VybmluZ0FuZFNwYWNpbmcoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlLCBTVkdFbGVt
ZW50KiBsZW5ndGhDb250ZXh0LCBjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcikKK3sKKyAg
ICBmbG9hdCBrZXJuaW5nID0gMDsKKyAgICBTVkdMZW5ndGgga2VybmluZ0xlbmd0aCA9IHN0eWxl
LT5rZXJuaW5nKCk7CisgICAgaWYgKGtlcm5pbmdMZW5ndGgudW5pdFR5cGUoKSA9PSBMZW5ndGhU
eXBlUGVyY2VudGFnZSkKKyAgICAgICAga2VybmluZyA9IGtlcm5pbmdMZW5ndGgudmFsdWVBc1Bl
cmNlbnRhZ2UoKSAqIG1fZm9udC5waXhlbFNpemUoKTsKKyAgICBlbHNlCisgICAgICAgIGtlcm5p
bmcgPSBrZXJuaW5nTGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpOworCisgICAgY29uc3QgVUNo
YXIqIGxhc3RDaGFyYWN0ZXIgPSBtX2xhc3RDaGFyYWN0ZXI7CisgICAgbV9sYXN0Q2hhcmFjdGVy
ID0gY3VycmVudENoYXJhY3RlcjsKKworICAgIGlmICgha2VybmluZyAmJiAhbV9mb250LmxldHRl
clNwYWNpbmcoKSAmJiAhbV9mb250LndvcmRTcGFjaW5nKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgZmxvYXQgc3BhY2luZyA9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCkgKyBrZXJuaW5nOwor
ICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICYmIGxhc3RDaGFyYWN0ZXIgJiYgbV9mb250LndvcmRT
cGFjaW5nKCkpIHsKKyAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZSgqY3VycmVudENoYXJh
Y3RlcikgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJhY3RlcikpCisgICAgICAgICAg
ICBzcGFjaW5nICs9IG1fZm9udC53b3JkU3BhY2luZygpOworICAgIH0KKworICAgIHJldHVybiBz
cGFjaW5nOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZ19oCisjZGVmaW5lIFNWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nX2gKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHVGV4dE1ldHJp
Y3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250OworY2xhc3MgU1ZHUmVu
ZGVyU3R5bGU7CitjbGFzcyBTVkdFbGVtZW50OworCisvLyBIZWxwZXIgY2xhc3MgdXNlZCBieSBT
VkdUZXh0TGF5b3V0RW5naW5lIHRvIGhhbmRsZSAna2VybmluZycgLyAnbGV0dGVyLXNwYWNpbmcn
IGFuZCAnd29yZC1zcGFjaW5nJy4KK2NsYXNzIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBTVkdUZXh0TGF5b3V0RW5naW5lU3Bh
Y2luZyhjb25zdCBGb250Jik7CisKKyAgICBmbG9hdCBjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wg
aXNWZXJ0aWNhbFRleHQsIGNvbnN0IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBo
KTsKKyAgICBmbG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5nQW5kU3BhY2luZyhjb25zdCBTVkdSZW5k
ZXJTdHlsZSosIFNWR0VsZW1lbnQqIGxlbmd0aENvbnRleHQsIGNvbnN0IFVDaGFyKiBjdXJyZW50
Q2hhcmFjdGVyKTsKKworcHJpdmF0ZToKKyAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgY29u
c3QgVUNoYXIqIG1fbGFzdENoYXJhY3RlcjsKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAg
U1ZHVGV4dE1ldHJpY3M6OkdseXBoIG1fbGFzdEdseXBoOworI2VuZGlmCit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmCg==
</data>
<flag name="review"
          id="59149"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>