<?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>12007</bug_id>
          
          <creation_ts>2006-12-27 16:12:26 -0800</creation_ts>
          <short_desc>SVGColor::setRGBColor color creates/deletes many strings, slowing down parsing</short_desc>
          <delta_ts>2006-12-29 14:45:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rwlbuis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>39389</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-27 16:12:26 -0800</bug_when>
    <thetext>SVGColor::setRGBColor color creates/deletes many strings, slowing down parsing (for bamboo.svg)

Now that some of the other parsers are fixed, SVGColor::setRGBColor is one of the next hot-spots appearing in Shark when running the SVG PLT.  setRGBColor creates and deletes strings needlessly while parsing the color value.

Rob has already coded a fix:
http://paste.lisp.org/display/33499

Which looks fine to me.  r=me on the code change.

We still need some additional tests before he lands (e.g. to make sure that the change in behavior to not change the color to invalid when the parse fails).

http://paste.lisp.org/display/33500

was his first stab at a test case.  However we came up with a few improvements via IRC:
1.  call setRGBColor(&apos;green&apos;) first (to make sure setRGBColor actually works)
2.  wrap each call in some sort of try/catch block and check the exception (perhaps an expectsException() wrapper?)
3.  Test paints with leading spaces, commas, and spacing between digits and % (which should be invalid).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39366</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-27 16:39:30 -0800</bug_when>
    <thetext>Thinking about this more, it isn&apos;t at all surprising that color parsing is our current hot spot.  What do SVG parsers/renderers do?  Parse lots of colors and lots of paths.  I expect even with Rob&apos;s improvements, this area will get hot again soon.

One of the major flaws in the current paint parsing/color parsing is how all parsing is done in the constructors.  That means you have to call new SVGPaint just to figure out if the string you have even has a valid color/paint in it.  That&apos;s silly.  We should parse the string first, then wrap it in a paint if it happens to be valid.

Ideally we would unify HTML and SVG color parsing.  There is little reason why &apos;aliceblue&apos; should work in SVG and not in HTML for instance.  I believe the set of named colors is the only difference between SVG and HTML colors.  We could pass a bool into the common color parsing function to disable certain colors when parsing HTML if deemed necessary.

Rob&apos;s fix will work.  A long term solution will involve removing all the SVGPaint allocations and only allocating after parsing once we&apos;ve determined we have a valid Color/SVGColor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39161</commentid>
    <comment_count>2</comment_count>
      <attachid>12089</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-12-28 15:36:34 -0800</bug_when>
    <thetext>Created attachment 12089
First attempt

This patch goes a long way in refactoring. It can go further, but that will have to wait until tomorrow :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39178</commentid>
    <comment_count>3</comment_count>
      <attachid>12089</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-28 17:46:10 -0800</bug_when>
    <thetext>Comment on attachment 12089
First attempt

The patch looks pretty good.

The test case is busted.  You never actually use &quot;value&quot;.

I don&apos;t think you need to init RGBA32 to transparent (at least not outside the parse function).

It&apos;s still unfortunate that we&apos;re creating new SVGPaints even for invalid colors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39059</commentid>
    <comment_count>4</comment_count>
      <attachid>12100</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-12-29 03:24:59 -0800</bug_when>
    <thetext>Created attachment 12100
Better patch

This should address most of the issues. Unfortunately we still seem to need the &quot;empty&quot; SVGPaint, since
we need to be able to differ between no fill specified at all or invalid fill specified. In the former case the
default or inherited value should be kept, in the latter case it should use black paint.
The testcase should be much better now.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39005</commentid>
    <comment_count>5</comment_count>
      <attachid>12100</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-29 12:45:59 -0800</bug_when>
    <thetext>Comment on attachment 12100
Better patch

Looks great.

It appears you didn&apos;t change any of the HTML Color parsing code paths, which is good.

expectsValid needs to check the set value (make sure it set correctly).  And I think you coulud add a few more valid tests (for leading/tailing spaces, commas, etc.)

With a few more tests and the expectedValid fix, feel free to land!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38988</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-12-29 14:45:05 -0800</bug_when>
    <thetext>landed in r18480</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12089</attachid>
            <date>2006-12-28 15:36:34 -0800</date>
            <delta_ts>2006-12-29 03:24:59 -0800</delta_ts>
            <desc>First attempt</desc>
            <filename>12007.diff</filename>
            <type>text/plain</type>
            <size>26202</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4NDU5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDYtMTItMjkgIFJvYiBCdWlzICA8YnVpc0Br
ZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3RjYXNlIGZvcjoKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIwMDcKKyAgICAgICAgU1ZHQ29sb3I6OnNldFJHQkNvbG9yIGNvbG9yIGNyZWF0ZXMv
ZGVsZXRlcyBtYW55IHN0cmluZ3MsIHNsb3dpbmcgZG93biBwYXJzaW5nCisKKyAgICAgICAgKiBz
dmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAg
ICAgICogc3ZnL2N1c3RvbS9yZ2Jjb2xvci1zeW50YXgtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN2Zy9jdXN0b20vcmdiY29sb3Itc3ludGF4LnN2ZzogQWRkZWQuCisKIDIwMDYt
MTItMjggIE1pdHogUGV0dGVsICA8bWl0ekB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluLgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9yZ2Jjb2xvci1zeW50YXgt
ZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9y
Z2Jjb2xvci1zeW50YXgtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSBAQAorMmZkNDU2NDY3NTEzNTYwNjU5ZmE2Y2Q5MGNmNmVjMjkKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Jn
YmNvbG9yLXN5bnRheC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3Zn
L2N1c3RvbS9yZ2Jjb2xvci1zeW50YXgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9yZ2Jjb2xvci1zeW50YXgtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5k
ZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlclNWR0NvbnRhaW5lciB7c3Zn
fSBhdCAoMCwwKSBzaXplIDUweDUwCisgICAgICBSZW5kZXJQYXRoIHtyZWN0fSBhdCAoMCwwKSBz
aXplIDUweDUwIFtmaWxsPXtbdHlwZT1TT0xJRF0gW2NvbG9yPSMwMDgwMDBdfV0gW2RhdGE9Ik0w
LjAwLDAuMDBMNTAuMDAsMC4wMEw1MC4wMCw1MC4wMEwwLjAwLDUwLjAwIl0KSW5kZXg6IExheW91
dFRlc3RzL3N2Zy9jdXN0b20vcmdiY29sb3Itc3ludGF4LnN2Zwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC5zdmcJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC5zdmcJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjkgQEAKKzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4K
KzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCFbQ0RBVEFbCisgICAgI2ZvbyB7CisgICAgICAgIGZp
bGw6IHJlZDsKKyAgICB9CitdXT48L3N0eWxlPgorPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUw
IiBpZD0iZm9vIi8+Cis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGV4cGVjdHNFeGNlcHRpb24oY29s
LCB2YWx1ZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29sLnNldFJHQkNvbG9yKCJm
Iik7CisgICAgICAgIH0gY2F0Y2goZXgpIHsKKyAgICAgICAgICAgIHJldHVybiBleC5jb2RlID09
IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qIHRl
c3QgdGhhdCBpbmNvcnJlY3QgY29sb3Igc3RyaW5ncyB0aHJvdyBhbiBleGNlcHRpb24gKi8KKyAg
ICB2YXIgY29sID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0uY3NzUnVsZXNbMF0uc3R5bGUuZ2V0
UHJvcGVydHlDU1NWYWx1ZSgiZmlsbCIpOworICAgIGlmICghZXhwZWN0c0V4Y2VwdGlvbihjb2ws
ICJyZ2IoMTAwJSwxMDAlLDAlIikpIHJldHVybjsKKyAgICBpZiAoIWV4cGVjdHNFeGNlcHRpb24o
Y29sLCAicmdiYSgxMDAlLDEwMCUsMCUiKSkgcmV0dXJuOworICAgIGlmICghZXhwZWN0c0V4Y2Vw
dGlvbihjb2wsICJyZ2IoMTAwLDEwMCUsMCUpIikpIHJldHVybjsKKyAgICBpZiAoIWV4cGVjdHNF
eGNlcHRpb24oY29sLCAicmdiKDEwMCwxMDAsMCUpIikpIHJldHVybjsKKyAgICBpZiAoIWV4cGVj
dHNFeGNlcHRpb24oY29sLCAicmdiKDEwMCUsMTAwJSwwKSIpKSByZXR1cm47CisgICAgaWYgKCFl
eHBlY3RzRXhjZXB0aW9uKGNvbCwgInJnYigxMDAlLDEwMCUscikiKSkgcmV0dXJuOworICAgIGlm
ICghZXhwZWN0c0V4Y2VwdGlvbihjb2wsICJ5ZWxsbyIpKSByZXR1cm47CisgICAgY29sLnNldFJH
QkNvbG9yKCJncmVlbiIpOworPC9zY3JpcHQ+ICAgCis8L3N2Zz4KSW5kZXg6IFdlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODQ1OSkK
KysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIw
MDYtMTItMjkgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMDA3CisgICAgICAgIFNWR0NvbG9yOjpzZXRSR0JDb2xvciBjb2xvciBjcmVh
dGVzL2RlbGV0ZXMgbWFueSBzdHJpbmdzLCBzbG93aW5nIGRvd24gcGFyc2luZworCisgICAgICAg
IFJlZmFjdG9yIGNvZGUgc28gc3ZnIHJldXNlcyBjc3NwYXJzZXIgbWV0aG9kcy4gQWxzbyBtYWtl
CisgICAgICAgIFNWR0NvbG9yIGFuZCBTVkdQYWludCBtb3JlIGVmZmljaWVudCBieSBhdm9pZGlu
ZyB1c2luZworICAgICAgICBzZXRSR0JDb2xvciBpbnRlcm5hbGx5LgorCisgICAgICAgICogYmlu
ZGluZ3MvanMva2pzX2Nzcy5jcHA6CisgICAgICAgIChLSlM6OnRvSlMpOgorICAgICAgICAqIGNz
cy9jc3NwYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvckZyb21WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hhZG93KToKKyAgICAgICAgKiBjc3Mv
Y3NzcGFyc2VyLmg6CisgICAgICAgICoga3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZHUGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZVNWR0NvbG9yKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ29s
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29sb3I6OlNWR0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0NvbG9yOjpzZXRSR0JDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdD
b2xvcjo6Y3NzVGV4dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NvbG9yLmg6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR1BhaW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50OjpT
VkdQYWludCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhaW50Lmg6CisKIDIwMDYtMTItMjgg
IERhdmlkIEtpbHplciAgPGRka2lsemVyQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgTWl0ei4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmNwcAkocmV2aXNpb24gMTg0NTkpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1MiwxMSBAQAogCiAjaW5jbHVkZSAia2pzX2Nzcy5sdXQuaCIKIAorI2lmIFNWR19TVVBQT1JU
CisjaW5jbHVkZSAiSlNTVkdDb2xvci5oIgorI2luY2x1ZGUgIkpTU1ZHUGFpbnQuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKQEAgLTk0NSw2ICs5NTAsMTIgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENT
U1ZhbHVlIAogICBlbHNlIHsKICAgICBpZiAodi0+aXNWYWx1ZUxpc3QoKSkKICAgICAgIHJldCA9
IG5ldyBKU0NTU1ZhbHVlTGlzdChleGVjLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2KSk7
CisjaWYgU1ZHX1NVUFBPUlQKKyAgICBlbHNlIGlmICh2LT5pc1NWR0NvbG9yKCkpCisgICAgICBy
ZXQgPSBuZXcgSlNTVkdDb2xvcihleGVjLCBzdGF0aWNfY2FzdDxTVkdDb2xvcio+KHYpKTsKKyAg
ICBlbHNlIGlmICh2LT5pc1NWR1BhaW50KCkpCisgICAgICByZXQgPSBuZXcgSlNTVkdQYWludChl
eGVjLCBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHYpKTsKKyNlbmRpZgogICAgIGVsc2UgaWYgKHYt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgIHJldCA9IG5ldyBKU0NTU1ByaW1pdGl2ZVZhbHVl
KGV4ZWMsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odikpOwogICAgIGVsc2UKSW5k
ZXg6IFdlYkNvcmUvY3NzL2Nzc3BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Y3NzcGFyc2VyLmNwcAkocmV2aXNpb24gMTg0NTkpCisrKyBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDM1LDYxICsyNDM1LDY2IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUhTTFBhcmFtZXRlcnMoVmFsdWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQ1NTUHJp
bWl0aXZlVmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VDb2xvcigpCitDU1NQcmltaXRpdmVWYWx1ZSAq
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKFZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VD
b2xvckZyb21WYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgUkdCQTMyIGMgPSBDb2xv
cjo6dHJhbnNwYXJlbnQ7CisgICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKHZhbHVlID8gdmFs
dWUgOiB2YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoYyk7CiB9CiAKLUNTU1ByaW1pdGl2ZVZhbHVlICpD
U1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUoVmFsdWUqIHZhbHVlKQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUoVmFsdWUqIHZhbHVlLCBSR0JBMzImIGMsIGJvb2wgc3Zn
KQogewotICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgIGlmICghc3RyaWN0
ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmCiAgICAg
ICAgIHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFsdWUtPmZWYWx1ZSA8IDEwMDAwMDAuKSB7CiAg
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOwogICAgICAgICBzdHIuZm9ybWF0KCIlMDZkIiwg
KGludCkodmFsdWUtPmZWYWx1ZSsuNSkpOwogICAgICAgICBpZiAoIUNTU1BhcnNlcjo6cGFyc2VD
b2xvcihzdHIsIGMpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JHQkNPTE9SIHx8CiAgICAgICAgICAgICAgICAgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCB8fAogICAgICAgICAgICAgICAgICghc3RyaWN0ICYmIHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OKSkgewogICAgICAgICBp
ZiAoIUNTU1BhcnNlcjo6cGFyc2VDb2xvcihkZXByZWNhdGVkU3RyaW5nKHZhbHVlLT5zdHJpbmcp
LCBjKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gVmFsdWU6OkZ1bmN0aW9uICYmCiAgICAgICAg
ICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzICE9IDAgJiYKICAgICAgICAgICAgICAgICB2
YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA1IC8qIHJnYiArIHR3byBjb21tYXMgKi8g
JiYKICAgICAgICAgICAgICAgICBkb21TdHJpbmcodmFsdWUtPmZ1bmN0aW9uLT5uYW1lKS5sb3dl
cigpID09ICJyZ2IoIikgewogICAgICAgICBpbnQgY29sb3JWYWx1ZXNbM107CiAgICAgICAgIGlm
ICghcGFyc2VDb2xvclBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVzLCBmYWxzZSkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYyA9
IG1ha2VSR0IoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSk7
Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24gJiYKKyAgICB9
IGVsc2UgaWYgKCFzdmcpIHsKKyAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IFZhbHVlOjpGdW5j
dGlvbiAmJgogICAgICAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+YXJncyAhPSAwICYmCiAg
ICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNyAvKiByZ2Jh
ICsgdGhyZWUgY29tbWFzICovICYmCiAgICAgICAgICAgICAgICAgZG9tU3RyaW5nKHZhbHVlLT5m
dW5jdGlvbi0+bmFtZSkubG93ZXIoKSA9PSAicmdiYSgiKSB7Ci0gICAgICAgIGludCBjb2xvclZh
bHVlc1s0XTsKLSAgICAgICAgaWYgKCFwYXJzZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JW
YWx1ZXMsIHRydWUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGMgPSBtYWtlUkdC
QShjb2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCBjb2xvclZh
bHVlc1szXSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24g
JiYKLSAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MgIT0gMCAmJgotICAgICAg
ICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+YXJncy0+c2l6ZSgpID09IDUgLyogaHNsICsgdHdv
IGNvbW1hcyAqLyAmJgotICAgICAgICAgICAgICAgIGRvbVN0cmluZyh2YWx1ZS0+ZnVuY3Rpb24t
Pm5hbWUpLmxvd2VyKCkgPT0gImhzbCgiKSB7Ci0gICAgICAgIGRvdWJsZSBjb2xvclZhbHVlc1sz
XTsKLSAgICAgICAgaWYgKCFwYXJzZUhTTFBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVzLCBm
YWxzZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgYyA9IG1ha2VSR0JBRnJvbUhT
TEEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSwgMS4wKTsK
LSAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IFZhbHVlOjpGdW5jdGlvbiAmJgotICAgICAg
ICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+YXJncyAhPSAwICYmCi0gICAgICAgICAgICAgICAg
dmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNyAvKiBoc2xhICsgdGhyZWUgY29tbWFz
ICovICYmCi0gICAgICAgICAgICAgICAgZG9tU3RyaW5nKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSku
bG93ZXIoKSA9PSAiaHNsYSgiKSB7Ci0gICAgICAgIGRvdWJsZSBjb2xvclZhbHVlc1s0XTsKLSAg
ICAgICAgaWYgKCFwYXJzZUhTTFBhcmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVzLCB0cnVlKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjID0gbWFrZVJHQkFGcm9tSFNMQShjb2xv
clZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCBjb2xvclZhbHVlc1sz
XSk7CisgICAgICAgICAgICBpbnQgY29sb3JWYWx1ZXNbNF07CisgICAgICAgICAgICBpZiAoIXBh
cnNlQ29sb3JQYXJhbWV0ZXJzKHZhbHVlLCBjb2xvclZhbHVlcywgdHJ1ZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYyA9IG1ha2VSR0JBKGNvbG9yVmFsdWVz
WzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNdKTsKKyAg
ICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24gJiYKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzICE9IDAgJiYKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXplKCkgPT0gNSAvKiBoc2wgKyB0d28g
Y29tbWFzICovICYmCisgICAgICAgICAgICAgICAgICAgIGRvbVN0cmluZyh2YWx1ZS0+ZnVuY3Rp
b24tPm5hbWUpLmxvd2VyKCkgPT0gImhzbCgiKSB7CisgICAgICAgICAgICBkb3VibGUgY29sb3JW
YWx1ZXNbM107CisgICAgICAgICAgICBpZiAoIXBhcnNlSFNMUGFyYW1ldGVycyh2YWx1ZSwgY29s
b3JWYWx1ZXMsIGZhbHNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjID0gbWFrZVJHQkFGcm9tSFNMQShjb2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0s
IGNvbG9yVmFsdWVzWzJdLCAxLjApOworICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09
IFZhbHVlOjpGdW5jdGlvbiAmJgorICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24t
PmFyZ3MgIT0gMCAmJgorICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3Mt
PnNpemUoKSA9PSA3IC8qIGhzbGEgKyB0aHJlZSBjb21tYXMgKi8gJiYKKyAgICAgICAgICAgICAg
ICAgICAgZG9tU3RyaW5nKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSkubG93ZXIoKSA9PSAiaHNsYSgi
KSB7CisgICAgICAgICAgICBkb3VibGUgY29sb3JWYWx1ZXNbNF07CisgICAgICAgICAgICBpZiAo
IXBhcnNlSFNMUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNv
bG9yVmFsdWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVz
WzNdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBl
bHNlCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGMpOworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBU
aGlzIGNsYXNzIHRyYWNrcyBwYXJzaW5nIHN0YXRlIGZvciBzaGFkb3cgdmFsdWVzLiAgSWYgaXQg
Z29lcyBvdXQgb2Ygc2NvcGUgKGUuZy4sIGR1ZSB0byBhbiBlYXJseSByZXR1cm4pCkBAIC0yNjA3
LDcgKzI2MTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFkb3coaW50IHByb3BJZCwgCiAK
ICAgICAgICAgICAgIGlmICghcGFyc2VkQ29sb3IpCiAgICAgICAgICAgICAgICAgLy8gSXQncyBu
b3QgYnVpbHQtaW4uIFRyeSB0byBwYXJzZSBpdCBhcyBhIGNvbG9yLgotICAgICAgICAgICAgICAg
IHBhcnNlZENvbG9yID0gcGFyc2VDb2xvckZyb21WYWx1ZSh2YWwpOworICAgICAgICAgICAgICAg
IHBhcnNlZENvbG9yID0gcGFyc2VDb2xvcih2YWwpOwogCiAgICAgICAgICAgICBpZiAoIXBhcnNl
ZENvbG9yIHx8ICFjb250ZXh0LmFsbG93Q29sb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnRleHQuZmFpbGVkKCk7IC8vIFRoaXMgdmFsdWUgaXMgbm90IGEgY29sb3Igb3IgbGVuZ3RoIGFu
ZCBpcyBpbnZhbGlkIG9yCkluZGV4OiBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIuaAkocmV2aXNpb24gMTg0NTkpCisrKyBXZWJDb3Jl
L2Nzcy9jc3NwYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDggKzE1MCw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ1NTVmFsdWVMaXN0KiBwYXJzZUZvbnRGYW1pbHkoKTsK
ICAgICAgICAgYm9vbCBwYXJzZUNvbG9yUGFyYW1ldGVycyhWYWx1ZSosIGludCogY29sb3JWYWx1
ZXMsIGJvb2wgcGFyc2VBbHBoYSk7CiAgICAgICAgIGJvb2wgcGFyc2VIU0xQYXJhbWV0ZXJzKFZh
bHVlKiwgZG91YmxlKiBjb2xvclZhbHVlcywgYm9vbCBwYXJzZUFscGhhKTsKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHBhcnNlQ29sb3IoKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHBhcnNlQ29sb3JGcm9tVmFsdWUoVmFsdWUqKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHBhcnNlQ29sb3IoVmFsdWUqID0gMCk7CisgICAgICAgIGJvb2wgcGFyc2VDb2xvckZyb21WYWx1
ZShWYWx1ZSosIFJHQkEzMiYsIGJvb2wgPSBmYWxzZSk7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHBhcnNlQ291bnRlckNvbnRlbnQoVmFsdWVMaXN0KiBhcmdzLCBib29sIGNvdW50ZXJz
KTsKICAgICAgICAgCiAjaWZkZWYgU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvY3Nz
L1NWR0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9jc3MvU1ZHQ1NT
UGFyc2VyLmNwcAkocmV2aXNpb24gMTg0NTkpCisrKyBXZWJDb3JlL2tzdmcyL2Nzcy9TVkdDU1NQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsODkgKzM0OCwxOCBAQCBDU1NWYWx1ZSog
Q1NTUGFyc2VyOjpwYXJzZVNWR1N0cm9rZURhc2hhCiAKIENTU1ZhbHVlKiBDU1NQYXJzZXI6OnBh
cnNlU1ZHUGFpbnQoKQogewotICAgIFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVudCgp
OwotICAgIGlmICghc3RyaWN0ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSICYmCi0gICAgICAgdmFsdWUtPmZWYWx1ZSA+PSAwLiAmJiB2YWx1ZS0+ZlZhbHVl
IDwgMTAwMDAwMC4pIHsKLSAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZzo6Zm9ybWF0KCIlMDZk
IiwgKGludCkodmFsdWUtPmZWYWx1ZSsuNSkpOwotICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50
KFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCBTdHJpbmcoKSwgc3RyKTsKLSAgICB9
IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1Ip
IHsKLSAgICAgICAgU3RyaW5nIHN0ciA9ICIjIiArIGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKTsK
LSAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludChTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9SR0JD
T0xPUiwgU3RyaW5nKCksIHN0cik7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8Ci0gICAgICAgICAgICghc3RyaWN0ICYmIHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElNRU5TSU9OKSkKLSAgICAgICAgcmV0
dXJuIG5ldyBTVkdQYWludChTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwgU3RyaW5n
KCksIGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUtPnVuaXQg
PT0gVmFsdWU6OkZ1bmN0aW9uICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncyAhPSAwICYmCi0gICAg
ICAgICAgICBkb21TdHJpbmcodmFsdWUtPmZ1bmN0aW9uLT5uYW1lKS5sb3dlcigpID09ICJyZ2Io
IikgewotICAgICAgICBWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7Ci0g
ICAgICAgIFZhbHVlKiB2ID0gYXJncy0+Y3VycmVudCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2LCBGSW50ZWdlcnxGUGVyY2VudCwgdHJ1ZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaW50IHIgPSAoaW50KSAodi0+ZlZhbHVlICogKHYtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMjU2Li8xMDAuIDogMS4pKTsKLSAgICAgICAgdiA9IGFy
Z3MtPm5leHQoKTsKLSAgICAgICAgaWYgKHYtPnVuaXQgIT0gVmFsdWU6Ok9wZXJhdG9yICYmIHYt
PmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdiA9IGFyZ3Mt
Pm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodiwgRkludGVnZXJ8RlBlcmNlbnQsIHRy
dWUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGludCBnID0gKGludCkgKHYtPmZW
YWx1ZSAqICh2LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDI1
Ni4vMTAwLiA6IDEuKSk7Ci0gICAgICAgIHYgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICh2
LT51bml0ICE9IFZhbHVlOjpPcGVyYXRvciAmJiB2LT5pVmFsdWUgIT0gJywnKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHYgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFs
aWRVbml0KHYsIEZJbnRlZ2VyfEZQZXJjZW50LCB0cnVlKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBpbnQgYiA9IChpbnQpICh2LT5mVmFsdWUgKiAodi0+dW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAyNTYuLzEwMC4gOiAxLikpOwotICAgICAgICBy
ID0gbWF4KDAsIG1pbigyNTUsIHIpKTsKLSAgICAgICAgZyA9IG1heCgwLCBtaW4oMjU1LCBnKSk7
Ci0gICAgICAgIGIgPSBtYXgoMCwgbWluKDI1NSwgYikpOwotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIG5ldyBTVkdQYWludChTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9SR0JDT0xPUiwgU3RyaW5n
KCksIFN0cmluZzo6Zm9ybWF0KCJyZ2IoJWQsICVkLCAlZCkiLCByLCBnLCBiKSk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbmV3IFNWR1BhaW50KCk7
CisgICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgaWYgKCFwYXJzZUNvbG9y
RnJvbVZhbHVlKHZhbHVlTGlzdC0+Y3VycmVudCgpLCBjLCB0cnVlKSkKKyAgICAgICAgcmV0dXJu
IG5ldyBTVkdQYWludCgpOworICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoQ29sb3IoYykpOwogfQog
CiBDU1NWYWx1ZSogQ1NTUGFyc2VyOjpwYXJzZVNWR0NvbG9yKCkKIHsKLSAgICBWYWx1ZSogdmFs
dWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICBpZiAoIXN0cmljdCAmJiB2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+ZlZhbHVlID49IDAu
ICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikKLSAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xv
cihTdHJpbmc6OmZvcm1hdCgiJTA2ZCIsIChpbnQpKHZhbHVlLT5mVmFsdWUrLjUpKSk7Ci0gICAg
ZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SR0JDT0xPUikK
LSAgICAgICAgcmV0dXJuIG5ldyBTVkdDb2xvcigiIyIgKyBkb21TdHJpbmcodmFsdWUtPnN0cmlu
ZykpOwotICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
SURFTlQgfHwgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19ESU1FTlNJT04pKQotICAgICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKGRvbVN0cmluZyh2YWx1
ZS0+c3RyaW5nKSk7Ci0gICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gVmFsdWU6OkZ1bmN0aW9u
ICYmIHZhbHVlLT5mdW5jdGlvbi0+YXJncyAhPSAwICYmIGRvbVN0cmluZyh2YWx1ZS0+ZnVuY3Rp
b24tPm5hbWUpLmxvd2VyKCkgPT0gInJnYigiKSB7Ci0gICAgICAgIFZhbHVlTGlzdCogYXJncyA9
IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsKLSAgICAgICAgVmFsdWUqIHYgPSBhcmdzLT5jdXJyZW50
KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KHYsIEZJbnRlZ2VyfEZQZXJjZW50LCB0cnVlKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpbnQgciA9IChpbnQpICh2LT5mVmFsdWUg
KiAodi0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgPyAyNTYuLzEw
MC4gOiAxLikpOwotICAgICAgICB2ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAodi0+dW5p
dCAhPSBWYWx1ZTo6T3BlcmF0b3IgJiYgdi0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICB2ID0gYXJncy0+bmV4dCgpOwotICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2LCBGSW50ZWdlcnxGUGVyY2VudCwgdHJ1ZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaW50IGcgPSAoaW50KSAodi0+ZlZhbHVlICogKHYtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMjU2Li8xMDAuIDogMS4pKTsKLSAgICAgICAgdiA9IGFy
Z3MtPm5leHQoKTsKLSAgICAgICAgaWYgKHYtPnVuaXQgIT0gVmFsdWU6Ok9wZXJhdG9yICYmIHYt
PmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdiA9IGFyZ3Mt
Pm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodiwgRkludGVnZXJ8RlBlcmNlbnQsIHRy
dWUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGludCBiID0gKGludCkgKHYtPmZW
YWx1ZSAqICh2LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDI1
Ni4vMTAwLiA6IDEuKSk7Ci0gICAgICAgIHIgPSBtYXgoMCwgbWluKDI1NSwgcikpOwotICAgICAg
ICBnID0gbWF4KDAsIG1pbigyNTUsIGcpKTsKLSAgICAgICAgYiA9IG1heCgwLCBtaW4oMjU1LCBi
KSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKFN0cmluZzo6Zm9ybWF0
KCJyZ2IoJWQsICVkLCAlZCkiLCByLCBnLCBiKSk7Ci0gICAgfQotICAgIGVsc2UKKyAgICBSR0JB
MzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUo
dmFsdWVMaXN0LT5jdXJyZW50KCksIGMsIHRydWUpKQogICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBuZXcgU1ZHUGFpbnQoKTsKKyAgICByZXR1cm4gbmV3IFNWR0NvbG9yKENvbG9yKGMp
KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbG9yLmNwcAkocmV2aXNpb24gMTg0NTkpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDcgQEAKICNpbmNsdWRlICJTVkdDb2xvci5oIgogCiAjaW5jbHVkZSAiU1ZHRXhjZXB0aW9u
LmgiCisjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDcsNiArNDgsMTQgQEAgU1ZHQ29sb3I6OlNWR0NvbG9yKHVuc2lnbmVkIHNob3J0
IGNvbG9yVAogewogfQogCitTVkdDb2xvcjo6U1ZHQ29sb3IoY29uc3QgQ29sb3ImIGMpCisgICAg
OiBDU1NWYWx1ZSgpCisgICAgLCBtX2NvbG9yKGMpCisgICAgLCBtX2NvbG9yVHlwZShTVkdfQ09M
T1JUWVBFX1JHQkNPTE9SKQoreworfQorCisKIFNWR0NvbG9yOjp+U1ZHQ29sb3IoKQogewogfQpA
QCAtMjE3LDQ2ICsyMjYsNjYgQEAgc3RhdGljIGNvbnN0IENvbG9yIGNtYXBbXSA9CiAKIHZvaWQg
U1ZHQ29sb3I6OnNldFJHQkNvbG9yKGNvbnN0IFN0cmluZyYgcmdiQ29sb3IsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIG1fcmdiQ29sb3IgPSByZ2JDb2xvcjsKLQotICAgIGlmIChtX3JnYkNv
bG9yLmlzTnVsbCgpKSB7CisgICAgaWYgKHJnYkNvbG9yLmlzTnVsbCgpKSB7CiAgICAgICAgIGVj
ID0gU1ZHX0lOVkFMSURfVkFMVUVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
U3RyaW5nIHBhcnNlID0gbV9yZ2JDb2xvci5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBDb2xvciBj
b2xvcjsKKyAgICBTdHJpbmcgcGFyc2UgPSByZ2JDb2xvci5zdHJpcFdoaXRlU3BhY2UoKTsKICAg
ICBpZiAocGFyc2Uuc3RhcnRzV2l0aCgicmdiKCIpKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+
IGNvbG9ycyA9IHBhcnNlLnNwbGl0KCcsJyk7Ci0gICAgICAgIFN0cmluZyByID0gY29sb3JzWzBd
LnJpZ2h0KChjb2xvcnNbMF0ubGVuZ3RoKCkgLSA0KSk7Ci0gICAgICAgIFN0cmluZyBnID0gY29s
b3JzWzFdOwotICAgICAgICBTdHJpbmcgYiA9IGNvbG9yc1syXS5sZWZ0KChjb2xvcnNbMl0ubGVu
Z3RoKCkgLSAxKSk7Ci0gICAgCi0gICAgICAgIGlmIChyLmNvbnRhaW5zKCIlIikpIHsKLSAgICAg
ICAgICAgIHIgPSByLmxlZnQoci5sZW5ndGgoKSAtIDEpOwotICAgICAgICAgICAgciA9IFN0cmlu
Zzo6bnVtYmVyKGludCgoKDI1NS4wICogci50b0RvdWJsZSgpKSAvIDEwMC4wKSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGcuY29udGFpbnMoIiUiKSkgewotICAgICAgICAgICAgZyA9IGcu
bGVmdChnLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICBnID0gU3RyaW5nOjpudW1iZXIoaW50
KCgoMjU1LjAgKiBnLnRvRG91YmxlKCkpIC8gMTAwLjApKSk7Ci0gICAgICAgIH0KLSAgICAKLSAg
ICAgICAgaWYgKGIuY29udGFpbnMoIiUiKSkgewotICAgICAgICAgICAgYiA9IGIubGVmdChiLmxl
bmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICBiID0gU3RyaW5nOjpudW1iZXIoaW50KCgoMjU1LjAg
KiBiLnRvRG91YmxlKCkpIC8gMTAwLjApKSk7CisgICAgICAgIGJvb2wgcGVyY2VudGFnZXMgPSBm
YWxzZTsKKyAgICAgICAgZG91YmxlIHIgPSAtMSwgZyA9IC0xLCBiID0gLTE7CisgICAgICAgIGNv
bnN0IFVDaGFyKiBwdHIgPSBwYXJzZS5jaGFyYWN0ZXJzKCkgKyA0OworICAgICAgICBjb25zdCBV
Q2hhciogZW5kID0gcGFyc2UuY2hhcmFjdGVycygpICsgcGFyc2UubGVuZ3RoKCk7CisgICAgICAg
IHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCk7CisgICAgICAgIGlmICghcGFyc2VOdW1iZXIo
cHRyLCBlbmQsIHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoKnB0ciA9PSAn
JScpIHsKKyAgICAgICAgICAgIHBlcmNlbnRhZ2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIHB0cisr
OworICAgICAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTcGFjZXNPckRlbGltaXRlcihwdHIsIGVu
ZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJl
cihwdHIsIGVuZCwgZywgZmFsc2UpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGlmICgqcHRyICE9ICclJykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBwdHIrKzsKKyAgICAgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXIo
cHRyLCBlbmQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghcGFy
c2VOdW1iZXIocHRyLCBlbmQsIGIsIGZhbHNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBpZiAoKnB0ciAhPSAnJScpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgcHRyKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXBhcnNl
TnVtYmVyKHB0ciwgZW5kLCBnKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBpZiAoIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCBiLCBmYWxzZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9jb2xvciA9IENvbG9yKHIudG9JbnQoKSwg
Zy50b0ludCgpLCBiLnRvSW50KCkpOworICAgICAgICBza2lwT3B0aW9uYWxTcGFjZXMocHRyLCBl
bmQpOworICAgICAgICBpZiAoKnB0ciAhPSAnKScpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHB0cisrOworICAgICAgICBpZiAocHRyICE9IGVuZCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAocGVyY2VudGFnZXMpCisgICAgICAgICAgICBjb2xvciA9IENvbG9yKGlu
dCgoMjU1LjAgKiByKSAvIDEwMC4wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCgy
NTUuMCAqIGcpIC8gMTAwLjApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoKDI1NS4w
ICogYikgLyAxMDAuMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2xvciA9IENvbG9y
KGludChyKSwgaW50KGcpLCBpbnQoYikpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyBj
b2xvck5hbWUgPSBtX3JnYkNvbG9yLmxvd2VyKCk7Ci0vLyAgICAgICAgaW50IGNvbCA9IFdlYkNv
cmU6OmdldFZhbHVlSUQobmFtZS5hc2NpaSgpLCBuYW1lLmxlbmd0aCgpKTsKLS8vICAgICAgICBp
ZiAoY29sID09IDApCi0gICAgICAgICAgICBtX2NvbG9yID0gQ29sb3IoY29sb3JOYW1lKTsKLS8v
ICAgICAgICBlbHNlCi0vLyAgICAgICAgICAgIG1fY29sb3IgPSBjbWFwW2NvbCAtIFNWR0NTU19W
QUxfQUxJQ0VCTFVFXTsKKyAgICAgICAgU3RyaW5nIGNvbG9yTmFtZSA9IHJnYkNvbG9yLmxvd2Vy
KCk7CisgICAgICAgIGNvbG9yID0gQ29sb3IoY29sb3JOYW1lKTsKICAgICB9Ci0gICAgaWYgKCFt
X2NvbG9yLmlzVmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgZWMg
PSBTVkdfSU5WQUxJRF9WQUxVRV9FUlI7CisgICAgZWxzZQorICAgICAgICBtX2NvbG9yID0gY29s
b3I7CiB9CiAKIHZvaWQgU1ZHQ29sb3I6OnNldFJHQkNvbG9ySUNDQ29sb3IoY29uc3QgU3RyaW5n
JiAvKiByZ2JDb2xvciAqLywgY29uc3QgU3RyaW5nJiAvKiBpY2NDb2xvciAqLywgRXhjZXB0aW9u
Q29kZSYgZWMpCkBAIC0yNzMsNyArMzAyLDcgQEAgdm9pZCBTVkdDb2xvcjo6c2V0Q29sb3IodW5z
aWduZWQgc2hvcnQgYwogU3RyaW5nIFNWR0NvbG9yOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBp
ZiAobV9jb2xvclR5cGUgPT0gU1ZHX0NPTE9SVFlQRV9SR0JDT0xPUikKLSAgICAgICAgcmV0dXJu
IG1fcmdiQ29sb3I7CisgICAgICAgIHJldHVybiBtX2NvbG9yLm5hbWUoKTsKIAogICAgIHJldHVy
biBTdHJpbmcoKTsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29sb3IuaAkocmV2aXNpb24gMTg0NTkpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICsz
NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdDb2xv
cigpOwogICAgICAgICBTVkdDb2xvcihjb25zdCBTdHJpbmcmIHJnYkNvbG9yKTsKKyAgICAgICAg
U1ZHQ29sb3IoY29uc3QgQ29sb3ImIGMpOwogICAgICAgICBTVkdDb2xvcih1bnNpZ25lZCBzaG9y
dCBjb2xvclR5cGUpOwogICAgICAgICB2aXJ0dWFsIH5TVkdDb2xvcigpOwotICAgICAgICAKKwog
ICAgICAgICBlbnVtIFNWR0NvbG9yVHlwZSB7CiAgICAgICAgICAgICBTVkdfQ09MT1JUWVBFX1VO
S05PV04gICAgICAgICAgICAgICAgICAgPSAwLAogICAgICAgICAgICAgU1ZHX0NPTE9SVFlQRV9S
R0JDT0xPUiAgICAgICAgICAgICAgICAgID0gMSwKQEAgLTY2LDcgKzY3LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIENvbG9yIG1fY29sb3I7CiAgICAgICAg
IHVuc2lnbmVkIHNob3J0IG1fY29sb3JUeXBlOwotICAgICAgICBTdHJpbmcgbV9yZ2JDb2xvcjsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdQYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQu
Y3BwCShyZXZpc2lvbiAxODQ1OSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTIgQEAgU1ZHUGFpbnQ6OlNWR1BhaW50KFNWR1Bh
aW50VHlwZSBwYWludFR5cAogICAgIHNldFVyaSh1cmkpOwogfQogCitTVkdQYWludDo6U1ZHUGFp
bnQoY29uc3QgQ29sb3ImIGMpCisgICAgOiBTVkdDb2xvcihjKQorICAgICwgbV9wYWludFR5cGUo
U1ZHX1BBSU5UVFlQRV9SR0JDT0xPUikKK3sKK30KKwogU1ZHUGFpbnQ6On5TVkdQYWludCgpCiB7
CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1BhaW50LmgJKHJldmlzaW9uIDE4NDU5KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHUGFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNWR1BhaW50KGNvbnN0IFN0cmluZyYgdXJpKTsKICAg
ICAgICAgU1ZHUGFpbnQoU1ZHUGFpbnRUeXBlKTsKICAgICAgICAgU1ZHUGFpbnQoU1ZHUGFpbnRU
eXBlLCBjb25zdCBTdHJpbmcmIHVyaSwgY29uc3QgU3RyaW5nJiByZ2JQYWludCA9IFN0cmluZygp
LCBjb25zdCBTdHJpbmcmIGljY1BhaW50ID0gU3RyaW5nKCkpOworICAgICAgICBTVkdQYWludChj
b25zdCBDb2xvciYgYyk7CiAgICAgICAgIHZpcnR1YWwgflNWR1BhaW50KCk7CiAKICAgICAgICAg
Ly8gJ1NWR1BhaW50JyBmdW5jdGlvbnMKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcmdi
Y29sb3Itc3ludGF4LWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Jn
YmNvbG9yLXN5bnRheC1leHBlY3RlZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBl
CiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB
QXlBQUFBSllDQVlBQUFDYWRvSndBQUFNZVVsRVFWUjRuTzNad1EyQU1Bd0V3VURqMExucApZaU9G
bVFyT3o1V3Y5YTVaQjVqbmlETUFBT0JvOSs0QkFBREFmd2dRQUFBZ0kwQUFBSUNNQUFFQUFESUNC
QUFBeUFnUUFBQWdJMEFBCkFJQ01BQUVBQURJQ0JBQUF5QWdRQUFBZ0kwQUFBSUNNQUFFQUFESUNC
QUFBeUFnUUFBQWdJMEFBQUlDTUFBRUFBRElDQkFBQXlBZ1EKQUFBZ0kwQUFBSUNNQUFFQUFESUNC
QUFBeUFnUUFBQWdJMEFBQUlDTUFBRUFBRElDQkFBQXlBZ1FBQUFnSTBBQUFJQ01BQUVBQURJQwpC
QUFBeUFnUUFBQWdJMEFBQUlDTUFBRUFBRElDQkFBQXlBZ1FBQUFnSTBBQUFJQ01BQUVBQURJQ0JB
QUF5QWdRQUFBZ0kwQUFBSUNNCkFBRUFBRElDQkFBQXlBZ1FBQUFnSTBBQUFJQ01BQUVBQURJQ0JB
QUF5QWdRQUFBZ0kwQUFBSUNNQUFFQUFESUNCQUFBeUZ3ek03dEgKQUFBQS8rQURBZ0FBWkFRSUFB
Q1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFD
UQpFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFD
UUVTQUFBRUJHZ0FBQUFCa0JBZ0FBClpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFD
UUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUEKQUJrQkFnQUFaQVFJQUFD
UUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNR
RVNBQQpBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNR
RVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJCkFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNR
RVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0IKQWdBQVpBUUlBQUNR
RVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FF
U0FBQUVCRwpnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FF
U0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRCkVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FF
U0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUEKWkFRSUFBQ1FF
U0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVT
QUFBRUJHZ0FBQQpBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVT
QUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBCkFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVT
QUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUkKQUFDUUVT
QUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNB
QUFFQkdnQUFBQUJrQgpBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNB
QUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHCmdBQUFBQmtCQWdBQVpBUUlBQUNRRVNB
QUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1EKRVNB
QUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FB
QUVCR2dBQUFBQmtCQWdBQQpaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FB
QUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBCkFCa0JBZ0FBWkFRSUFBQ1FFU0FB
QUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUEK
QUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFB
RUJHZ0FBQUFCa0JBZ0FBWkFRSQpBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFB
RUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCCkFnQUFaQVFJQUFDUUVTQUFB
RUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFF
QkcKZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFF
QkdnQUFBQUJrQkFnQUFaQVFJQUFDUQpFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFF
QkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBClpBUUlBQUNRRVNBQUFF
QkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVC
R2dBQUEKQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVC
R2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQQpBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVC
R2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJCkFBQ1FFU0FBQUVC
R2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJH
Z0FBQUFCa0IKQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJH
Z0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCRwpnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJH
Z0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRCkVTQUFBRUJH
Z0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdn
QUFBQUJrQkFnQUEKWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdn
QUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQQpBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdn
QUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBCkFFQkdn
QUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dB
QUFBQmtCQWdBQVpBUUkKQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dB
QUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQgpBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dB
QUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHCmdB
QUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FB
QUFCa0JBZ0FBWkFRSUFBQ1EKRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FB
QUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQQpaQVFJQUFDUUVTQUFBRUJHZ0FB
QUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFB
CkFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFB
QUJrQkFnQUFaQVFJQUFDUUVTQUEKQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFB
QUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSQpBQUNRRVNBQUFFQkdnQUFB
QUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFB
QmtCCkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFB
QmtCQWdBQVpBUUlBQUNRRVNBQUFFQkcKZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFB
QmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUQpFU0FBQUVCR2dBQUFB
QmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFC
a0JBZ0FBClpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFC
a0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUEKQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFC
a0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQQpBRUJHZ0FBQUFC
a0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJr
QkFnQUFaQVFJCkFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJr
QkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0IKQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJr
QkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCRwpnQUFBQUJr
QkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtC
QWdBQVpBUUlBQUNRCkVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtC
QWdBQVpENTRPQXluYkFBY1ZnQUFBQUJKUlU1RXJrSmcKZ2c9PQoK
</data>
<flag name="review"
          id="4457"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12100</attachid>
            <date>2006-12-29 03:24:59 -0800</date>
            <delta_ts>2006-12-29 12:45:59 -0800</delta_ts>
            <desc>Better patch</desc>
            <filename>12007-3.diff</filename>
            <type>text/plain</type>
            <size>30311</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4NDcyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDYtMTItMjkgIFJvYiBCdWlzICA8YnVpc0Br
ZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3RjYXNlIGZvcjoKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIwMDcKKyAgICAgICAgU1ZHQ29sb3I6OnNldFJHQkNvbG9yIGNvbG9yIGNyZWF0ZXMv
ZGVsZXRlcyBtYW55IHN0cmluZ3MsIHNsb3dpbmcgZG93biBwYXJzaW5nCisKKyAgICAgICAgKiBz
dmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAg
ICAgICogc3ZnL2N1c3RvbS9yZ2Jjb2xvci1zeW50YXgtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHN2Zy9jdXN0b20vcmdiY29sb3Itc3ludGF4LnN2ZzogQWRkZWQuCisKIDIwMDYt
MTItMjkgIEVyaWMgU2VpZGVsICA8ZXJpY0Blc2VpZGVsLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBvbGxpZWouCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRh
eC1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N2Zy9jdXN0b20vcmdiY29sb3Itc3ludGF4LWV4cGVjdGVkLmNoZWNrc3VtCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxIEBACisyZmQ0NTY0Njc1MTM1NjA2NTlmYTZjZDkwY2Y2ZWMyOQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20v
cmdiY29sb3Itc3ludGF4LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9z
dmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3JnYmNvbG9yLXN5bnRheC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJl
bmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtz
dmd9IGF0ICgwLDApIHNpemUgNTB4NTAKKyAgICAgIFJlbmRlclBhdGgge3JlY3R9IGF0ICgwLDAp
IHNpemUgNTB4NTAgW2ZpbGw9e1t0eXBlPVNPTElEXSBbY29sb3I9IzAwODAwMF19XSBbZGF0YT0i
TTAuMDAsMC4wMEw1MC4wMCwwLjAwTDUwLjAwLDUwLjAwTDAuMDAsNTAuMDAiXQpJbmRleDogTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9yZ2Jjb2xvci1zeW50YXguc3ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vcmdiY29sb3Itc3ludGF4LnN2ZwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcmdiY29sb3Itc3ludGF4LnN2ZwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0OSBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IVtDREFUQVsKKyAgICAjZm9vIHsKKyAgICAgICAg
ZmlsbDogcmVkOworICAgIH0KK11dPjwvc3R5bGU+Cis8cmVjdCB3aWR0aD0iNTAiIGhlaWdodD0i
NTAiIGlkPSJmb28iLz4KKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gZXhwZWN0c0V4Y2VwdGlvbihj
b2wsIHZhbHVlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2wuc2V0UkdCQ29sb3Io
dmFsdWUpOworICAgICAgICB9IGNhdGNoKGV4KSB7CisgICAgICAgICAgICByZXR1cm4gZXguY29k
ZSA9PSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZnVu
Y3Rpb24gZXhwZWN0c1ZhbGlkKGNvbCwgdmFsdWUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIGNvbC5zZXRSR0JDb2xvcih2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0gY2F0Y2goZXgpIHsKKyAgICAgICAgfQorICAgICAgICBjb2wuc2V0UkdCQ29sb3IoInJlZCIp
OworICAgIH0KKworICAgIC8qIHRlc3QgdGhhdCBpbmNvcnJlY3QgY29sb3Igc3RyaW5ncyB0aHJv
dyBhbiBleGNlcHRpb24gKi8KKyAgICB2YXIgY29sID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0u
Y3NzUnVsZXNbMF0uc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZmlsbCIpOworICAgIGlmICgh
ZXhwZWN0c0V4Y2VwdGlvbihjb2wsICJyZ2IoMTAwJSwxMDAlLDAlIikpIHJldHVybjsKKyAgICBp
ZiAoIWV4cGVjdHNFeGNlcHRpb24oY29sLCAicmdiYSgxMDAlLDEwMCUsMCUiKSkgcmV0dXJuOwor
ICAgIGlmICghZXhwZWN0c0V4Y2VwdGlvbihjb2wsICJyZ2IoMTAwJSwxMDAlLHIpIikpIHJldHVy
bjsKKyAgICBpZiAoIWV4cGVjdHNFeGNlcHRpb24oY29sLCAicmdiICgxMDAlLDEwMCUscikiKSkg
cmV0dXJuOworICAgIGlmICghZXhwZWN0c0V4Y2VwdGlvbihjb2wsICJoc2woMTAwJSwxMDAlLDEw
MCUpIikpIHJldHVybjsKKyAgICBpZiAoIWV4cGVjdHNFeGNlcHRpb24oY29sLCAieWVsbG8iKSkg
cmV0dXJuOworICAgIGlmICghZXhwZWN0c0V4Y2VwdGlvbihjb2wsICIhI2ZmZiIpKSByZXR1cm47
CisgICAgaWYgKCFleHBlY3RzRXhjZXB0aW9uKGNvbCwgIiNzZGYiKSkgcmV0dXJuOworICAgIGlm
ICghZXhwZWN0c0V4Y2VwdGlvbihjb2wsICIjIikpIHJldHVybjsKKyAgICBpZiAoIWV4cGVjdHNF
eGNlcHRpb24oY29sLCAiI2YiKSkgcmV0dXJuOworICAgIGlmICghZXhwZWN0c0V4Y2VwdGlvbihj
b2wsICIjZmYiKSkgcmV0dXJuOworICAgIGlmICghZXhwZWN0c0V4Y2VwdGlvbihjb2wsICIjZmZm
ZiIpKSByZXR1cm47CisgICAgaWYgKCFleHBlY3RzRXhjZXB0aW9uKGNvbCwgIiNmZmZmZiIpKSBy
ZXR1cm47CisgICAgaWYgKCFleHBlY3RzRXhjZXB0aW9uKGNvbCwgIiNmZmZmZmZmIikpIHJldHVy
bjsKKyAgICBleHBlY3RzVmFsaWQoY29sLCAicmdiKDAsIDEwLCAyMCkiKTsKKyAgICBleHBlY3Rz
VmFsaWQoY29sLCAicmdiKDAsIDEwLCAyMCUpIik7CisgICAgZXhwZWN0c1ZhbGlkKGNvbCwgIiNG
RkYiKTsKKyAgICBleHBlY3RzVmFsaWQoY29sLCAiI0ZGRkZGRiIpOworICAgIGV4cGVjdHNWYWxp
ZChjb2wsICIgZ3JlZW4iKTsKKyAgICBleHBlY3RzVmFsaWQoY29sLCAiZ3JlZW4iKTsKKzwvc2Ny
aXB0PiAgIAorPC9zdmc+CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NzIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDA2LTEyLTI5ICBSb2IgQnVpcyAgPGJ1
aXNAa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAwNworICAgICAg
ICBTVkdDb2xvcjo6c2V0UkdCQ29sb3IgY29sb3IgY3JlYXRlcy9kZWxldGVzIG1hbnkgc3RyaW5n
cywgc2xvd2luZyBkb3duIHBhcnNpbmcKKworICAgICAgICBSZWZhY3RvciBjb2RlIHNvIHN2ZyBy
ZXVzZXMgY3NzcGFyc2VyIG1ldGhvZHMuIEFsc28gbWFrZQorICAgICAgICBTVkdDb2xvciBhbmQg
U1ZHUGFpbnQgbW9yZSBlZmZpY2llbnQgYnkgYXZvaWRpbmcgdXNpbmcKKyAgICAgICAgc2V0UkdC
Q29sb3IgaW50ZXJuYWxseS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwOgor
ICAgICAgICAoS0pTOjp0b0pTKToKKyAgICAgICAgKiBjc3MvY3NzcGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVNoYWRvdyk6CisgICAgICAgICogY3NzL2Nzc3BhcnNlci5oOgorICAgICAgICAq
IGtzdmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZVNWR1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdD
b2xvcik6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0NvbG9yOjpTVkdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb2xvcjo6c2V0
UkdCQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29sb3I6OmNzc1RleHQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdDb2xvci5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYWludC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludDo6U1ZHUGFpbnQpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdQYWludC5oOgorCiAyMDA2LTEyLTI5ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBvbGxpZWouCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
a2pzX2Nzcy5jcHAJKHJldmlzaW9uIDE4NDcyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
Y3NzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTEgQEAKIAogI2luY2x1ZGUgImtq
c19jc3MubHV0LmgiCiAKKyNpZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIkpTU1ZHQ29sb3IuaCIK
KyNpbmNsdWRlICJKU1NWR1BhaW50LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCkBAIC05NDUsNiArOTUwLDEyIEBAIEpT
VmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDU1NWYWx1ZSAKICAgZWxzZSB7CiAgICAgaWYg
KHYtPmlzVmFsdWVMaXN0KCkpCiAgICAgICByZXQgPSBuZXcgSlNDU1NWYWx1ZUxpc3QoZXhlYywg
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odikpOworI2lmIFNWR19TVVBQT1JUCisgICAgZWxz
ZSBpZiAodi0+aXNTVkdDb2xvcigpKQorICAgICAgcmV0ID0gbmV3IEpTU1ZHQ29sb3IoZXhlYywg
c3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2KSk7CisgICAgZWxzZSBpZiAodi0+aXNTVkdQYWludCgp
KQorICAgICAgcmV0ID0gbmV3IEpTU1ZHUGFpbnQoZXhlYywgc3RhdGljX2Nhc3Q8U1ZHUGFpbnQq
Pih2KSk7CisjZW5kaWYKICAgICBlbHNlIGlmICh2LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICByZXQgPSBuZXcgSlNDU1NQcmltaXRpdmVWYWx1ZShleGVjLCBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHYpKTsKICAgICBlbHNlCkluZGV4OiBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL2Nzc3BhcnNlci5jcHAJKHJldmlzaW9uIDE4
NDcyKQorKysgV2ViQ29yZS9jc3MvY3NzcGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUx
LDcgKzI1MSw3IEBAIFJHQkEzMiBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW4KICAg
ICBDU1NQYXJzZXIgcGFyc2VyKHRydWUpOwogCiAgICAgLy8gRmlyc3QgdHJ5IGNyZWF0aW5nIGEg
Y29sb3Igc3BlY2lmaWVkIGJ5IG5hbWUgb3IgdGhlICIjIiBzeW50YXguCi0gICAgaWYgKCFwYXJz
ZXIucGFyc2VDb2xvcihzdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCBjb2xvcikpIHsKKyAgICBp
ZiAoIXBhcnNlci5wYXJzZUNvbG9yKHN0cmluZywgY29sb3IpKSB7CiAgICAgCiAgICAgICAgIC8v
IE5vdyB0cnkgdG8gY3JlYXRlIGEgY29sb3IgZnJvbSB0aGUgcmdiKCkgb3IgcmdiYSgpIHN5bnRh
eC4KICAgICAgICAgaWYgKHBhcnNlci5wYXJzZUNvbG9yKGR1bW15U3R5bGVEZWNsYXJhdGlvbi5n
ZXQoKSwgc3RyaW5nKSkgewpAQCAtMjMyOSwzNiArMjMyOSwxMCBAQCBDU1NWYWx1ZUxpc3QqIENT
U1BhcnNlcjo6cGFyc2VGb250RmFtaWx5CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLQotYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmbmFtZSwgUkdCQTMy
JiByZ2IpCitib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJH
QkEzMiYgcmdiKQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgbW92ZSB0aGlzIHN0dWZmIGFi
b3V0IGhleCBkaWdpdHMgd2l0aG91dCBhICIjIiBwcmVmaXgKLSAgICAvLyBpbnRvIHRoZSBDb2xv
ciBjbGFzcyBhbG9uZyB3aXRoIHRoZSAiIyItcHJlZml4IHZlcnNpb24/Ci0KLSAgICBpbnQgbGVu
ID0gbmFtZS5sZW5ndGgoKTsKLQotICAgIGlmICghbGVuKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBib29sIG9rOwotCi0gICAgaWYgKCBsZW4gPT0gMyB8fCBsZW4gPT0gNiApIHsKLSAg
ICAgICAgaW50IHZhbCA9IG5hbWUudG9JbnQoJm9rLCAxNik7Ci0gICAgICAgIGlmICggb2sgKSB7
Ci0gICAgICAgICAgICBpZiAobGVuID09IDYpIHsKLSAgICAgICAgICAgICAgICByZ2IgPSAgKDB4
ZmYgPDwgMjQpIHwgdmFsOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIGxlbiA9PSAzICkgewotICAgICAgICAgICAgICAg
IC8vICNhYmMgY29udmVydHMgdG8gI2FhYmJjYyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNzCi0gICAg
ICAgICAgICAgICAgcmdiID0gKDB4ZmYgPDwgMjQpIHwKLSAgICAgICAgICAgICAgICAgICAgKHZh
bCYweGYwMCk8PDEyIHwgKHZhbCYweGYwMCk8PDggfAotICAgICAgICAgICAgICAgICAgICAodmFs
JjB4ZjApPDw4IHwgKHZhbCYweGYwKTw8NCB8Ci0gICAgICAgICAgICAgICAgICAgICh2YWwmMHhm
KTw8NCB8ICh2YWwmMHhmKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoQ29sb3I6OnBhcnNlSGV4Q29sb3IobmFt
ZSwgcmdiKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyB0cnkgYSBsaXR0bGUgaGFy
ZGVyCiAgICAgQ29sb3IgdGM7CkBAIC0yNDM1LDYxICsyNDA5LDY2IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUhTTFBhcmFtZXRlcnMoVmFsdWUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQ1NTUHJp
bWl0aXZlVmFsdWUgKkNTU1BhcnNlcjo6cGFyc2VDb2xvcigpCitDU1NQcmltaXRpdmVWYWx1ZSAq
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKFZhbHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gcGFyc2VD
b2xvckZyb21WYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CisgICAgUkdCQTMyIGMgPSBDb2xv
cjo6dHJhbnNwYXJlbnQ7CisgICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKHZhbHVlID8gdmFs
dWUgOiB2YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoYyk7CiB9CiAKLUNTU1ByaW1pdGl2ZVZhbHVlICpD
U1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUoVmFsdWUqIHZhbHVlKQorYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUoVmFsdWUqIHZhbHVlLCBSR0JBMzImIGMsIGJvb2wgc3Zn
KQogewotICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgIGlmICghc3RyaWN0
ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmCiAgICAg
ICAgIHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFsdWUtPmZWYWx1ZSA8IDEwMDAwMDAuKSB7Ci0g
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyOworICAgICAgICBTdHJpbmcgc3RyOwogICAgICAg
ICBzdHIuZm9ybWF0KCIlMDZkIiwgKGludCkodmFsdWUtPmZWYWx1ZSsuNSkpOwogICAgICAgICBp
ZiAoIUNTU1BhcnNlcjo6cGFyc2VDb2xvcihzdHIsIGMpKQotICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SIHx8CiAgICAgICAgICAgICAgICAgdmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fAogICAgICAgICAgICAg
ICAgICghc3RyaWN0ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRElN
RU5TSU9OKSkgewotICAgICAgICBpZiAoIUNTU1BhcnNlcjo6cGFyc2VDb2xvcihkZXByZWNhdGVk
U3RyaW5nKHZhbHVlLT5zdHJpbmcpLCBjKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBpZiAoIUNTU1BhcnNlcjo6cGFyc2VDb2xvcihkb21TdHJpbmcodmFsdWUtPnN0cmluZyksIGMp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQg
PT0gVmFsdWU6OkZ1bmN0aW9uICYmCiAgICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5h
cmdzICE9IDAgJiYKICAgICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPnNpemUo
KSA9PSA1IC8qIHJnYiArIHR3byBjb21tYXMgKi8gJiYKICAgICAgICAgICAgICAgICBkb21TdHJp
bmcodmFsdWUtPmZ1bmN0aW9uLT5uYW1lKS5sb3dlcigpID09ICJyZ2IoIikgewogICAgICAgICBp
bnQgY29sb3JWYWx1ZXNbM107CiAgICAgICAgIGlmICghcGFyc2VDb2xvclBhcmFtZXRlcnModmFs
dWUsIGNvbG9yVmFsdWVzLCBmYWxzZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYyA9IG1ha2VSR0IoY29sb3JWYWx1ZXNbMF0sIGNv
bG9yVmFsdWVzWzFdLCBjb2xvclZhbHVlc1syXSk7Ci0gICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBWYWx1ZTo6RnVuY3Rpb24gJiYKKyAgICB9IGVsc2UgaWYgKCFzdmcpIHsKKyAgICAgICAg
aWYgKHZhbHVlLT51bml0ID09IFZhbHVlOjpGdW5jdGlvbiAmJgogICAgICAgICAgICAgICAgIHZh
bHVlLT5mdW5jdGlvbi0+YXJncyAhPSAwICYmCiAgICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0
aW9uLT5hcmdzLT5zaXplKCkgPT0gNyAvKiByZ2JhICsgdGhyZWUgY29tbWFzICovICYmCiAgICAg
ICAgICAgICAgICAgZG9tU3RyaW5nKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSkubG93ZXIoKSA9PSAi
cmdiYSgiKSB7Ci0gICAgICAgIGludCBjb2xvclZhbHVlc1s0XTsKLSAgICAgICAgaWYgKCFwYXJz
ZUNvbG9yUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIHRydWUpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGMgPSBtYWtlUkdCQShjb2xvclZhbHVlc1swXSwgY29sb3JWYWx1
ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCBjb2xvclZhbHVlc1szXSk7Ci0gICAgfSBlbHNlIGlmICh2
YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24gJiYKLSAgICAgICAgICAgICAgICB2YWx1ZS0+
ZnVuY3Rpb24tPmFyZ3MgIT0gMCAmJgotICAgICAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+
YXJncy0+c2l6ZSgpID09IDUgLyogaHNsICsgdHdvIGNvbW1hcyAqLyAmJgotICAgICAgICAgICAg
ICAgIGRvbVN0cmluZyh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUpLmxvd2VyKCkgPT0gImhzbCgiKSB7
Ci0gICAgICAgIGRvdWJsZSBjb2xvclZhbHVlc1szXTsKLSAgICAgICAgaWYgKCFwYXJzZUhTTFBh
cmFtZXRlcnModmFsdWUsIGNvbG9yVmFsdWVzLCBmYWxzZSkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgYyA9IG1ha2VSR0JBRnJvbUhTTEEoY29sb3JWYWx1ZXNbMF0sIGNvbG9yVmFs
dWVzWzFdLCBjb2xvclZhbHVlc1syXSwgMS4wKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0
ID09IFZhbHVlOjpGdW5jdGlvbiAmJgotICAgICAgICAgICAgICAgIHZhbHVlLT5mdW5jdGlvbi0+
YXJncyAhPSAwICYmCi0gICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzLT5zaXpl
KCkgPT0gNyAvKiBoc2xhICsgdGhyZWUgY29tbWFzICovICYmCi0gICAgICAgICAgICAgICAgZG9t
U3RyaW5nKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSkubG93ZXIoKSA9PSAiaHNsYSgiKSB7Ci0gICAg
ICAgIGRvdWJsZSBjb2xvclZhbHVlc1s0XTsKLSAgICAgICAgaWYgKCFwYXJzZUhTTFBhcmFtZXRl
cnModmFsdWUsIGNvbG9yVmFsdWVzLCB0cnVlKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBjID0gbWFrZVJHQkFGcm9tSFNMQShjb2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0s
IGNvbG9yVmFsdWVzWzJdLCBjb2xvclZhbHVlc1szXSk7CisgICAgICAgICAgICBpbnQgY29sb3JW
YWx1ZXNbNF07CisgICAgICAgICAgICBpZiAoIXBhcnNlQ29sb3JQYXJhbWV0ZXJzKHZhbHVlLCBj
b2xvclZhbHVlcywgdHJ1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgYyA9IG1ha2VSR0JBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZhbHVlc1sxXSwgY29sb3JW
YWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNdKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBWYWx1ZTo6RnVuY3Rpb24gJiYKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0
aW9uLT5hcmdzICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmZ1bmN0aW9uLT5h
cmdzLT5zaXplKCkgPT0gNSAvKiBoc2wgKyB0d28gY29tbWFzICovICYmCisgICAgICAgICAgICAg
ICAgICAgIGRvbVN0cmluZyh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUpLmxvd2VyKCkgPT0gImhzbCgi
KSB7CisgICAgICAgICAgICBkb3VibGUgY29sb3JWYWx1ZXNbM107CisgICAgICAgICAgICBpZiAo
IXBhcnNlSFNMUGFyYW1ldGVycyh2YWx1ZSwgY29sb3JWYWx1ZXMsIGZhbHNlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjID0gbWFrZVJHQkFGcm9tSFNMQShj
b2xvclZhbHVlc1swXSwgY29sb3JWYWx1ZXNbMV0sIGNvbG9yVmFsdWVzWzJdLCAxLjApOworICAg
ICAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IFZhbHVlOjpGdW5jdGlvbiAmJgorICAgICAg
ICAgICAgICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MgIT0gMCAmJgorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3MtPnNpemUoKSA9PSA3IC8qIGhzbGEgKyB0aHJl
ZSBjb21tYXMgKi8gJiYKKyAgICAgICAgICAgICAgICAgICAgZG9tU3RyaW5nKHZhbHVlLT5mdW5j
dGlvbi0+bmFtZSkubG93ZXIoKSA9PSAiaHNsYSgiKSB7CisgICAgICAgICAgICBkb3VibGUgY29s
b3JWYWx1ZXNbNF07CisgICAgICAgICAgICBpZiAoIXBhcnNlSFNMUGFyYW1ldGVycyh2YWx1ZSwg
Y29sb3JWYWx1ZXMsIHRydWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGMgPSBtYWtlUkdCQUZyb21IU0xBKGNvbG9yVmFsdWVzWzBdLCBjb2xvclZhbHVlc1sx
XSwgY29sb3JWYWx1ZXNbMl0sIGNvbG9yVmFsdWVzWzNdKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGMp
OworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBUaGlzIGNsYXNzIHRyYWNrcyBwYXJzaW5nIHN0
YXRlIGZvciBzaGFkb3cgdmFsdWVzLiAgSWYgaXQgZ29lcyBvdXQgb2Ygc2NvcGUgKGUuZy4sIGR1
ZSB0byBhbiBlYXJseSByZXR1cm4pCkBAIC0yNjA3LDcgKzI1ODYsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VTaGFkb3coaW50IHByb3BJZCwgCiAKICAgICAgICAgICAgIGlmICghcGFyc2VkQ29s
b3IpCiAgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgYnVpbHQtaW4uIFRyeSB0byBwYXJzZSBp
dCBhcyBhIGNvbG9yLgotICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gcGFyc2VDb2xvckZy
b21WYWx1ZSh2YWwpOworICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gcGFyc2VDb2xvcih2
YWwpOwogCiAgICAgICAgICAgICBpZiAoIXBhcnNlZENvbG9yIHx8ICFjb250ZXh0LmFsbG93Q29s
b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZmFpbGVkKCk7IC8vIFRoaXMgdmFs
dWUgaXMgbm90IGEgY29sb3Igb3IgbGVuZ3RoIGFuZCBpcyBpbnZhbGlkIG9yCkluZGV4OiBXZWJD
b3JlL2Nzcy9jc3NwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIu
aAkocmV2aXNpb24gMTg0NzIpCisrKyBXZWJDb3JlL2Nzcy9jc3NwYXJzZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUwLDggKzE1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ1NT
VmFsdWVMaXN0KiBwYXJzZUZvbnRGYW1pbHkoKTsKICAgICAgICAgYm9vbCBwYXJzZUNvbG9yUGFy
YW1ldGVycyhWYWx1ZSosIGludCogY29sb3JWYWx1ZXMsIGJvb2wgcGFyc2VBbHBoYSk7CiAgICAg
ICAgIGJvb2wgcGFyc2VIU0xQYXJhbWV0ZXJzKFZhbHVlKiwgZG91YmxlKiBjb2xvclZhbHVlcywg
Ym9vbCBwYXJzZUFscGhhKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhcnNlQ29sb3Io
KTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhcnNlQ29sb3JGcm9tVmFsdWUoVmFsdWUq
KTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhcnNlQ29sb3IoVmFsdWUqID0gMCk7Cisg
ICAgICAgIGJvb2wgcGFyc2VDb2xvckZyb21WYWx1ZShWYWx1ZSosIFJHQkEzMiYsIGJvb2wgPSBm
YWxzZSk7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQ291bnRlckNvbnRlbnQo
VmFsdWVMaXN0KiBhcmdzLCBib29sIGNvdW50ZXJzKTsKICAgICAgICAgCiAjaWZkZWYgU1ZHX1NV
UFBPUlQKQEAgLTE2MSw3ICsxNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENT
U1ZhbHVlKiBwYXJzZVNWR1N0cm9rZURhc2hhcnJheSgpOwogI2VuZGlmCiAKLSAgICAgICAgc3Rh
dGljIGJvb2wgcGFyc2VDb2xvcihjb25zdCBEZXByZWNhdGVkU3RyaW5nJiwgUkdCQTMyJiByZ2Ip
OworICAgICAgICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIFJHQkEzMiYg
cmdiKTsKIAogICAgICAgICAvLyBDU1MzIFBhcnNpbmcgUm91dGluZXMgKGZvciBwcm9wZXJ0aWVz
IHNwZWNpZmljIHRvIENTUzMpCiAgICAgICAgIGJvb2wgcGFyc2VTaGFkb3coaW50IHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9jc3MvU1ZHQ1NTUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCShyZXZp
c2lvbiAxODQ3MikKKysrIFdlYkNvcmUva3N2ZzIvY3NzL1NWR0NTU1BhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0OCw4OSArMzQ4LDE4IEBAIENTU1ZhbHVlKiBDU1NQYXJzZXI6OnBhcnNl
U1ZHU3Ryb2tlRGFzaGEKIAogQ1NTVmFsdWUqIENTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiB7
Ci0gICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgaWYgKCFzdHJp
Y3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYKLSAg
ICAgICB2YWx1ZS0+ZlZhbHVlID49IDAuICYmIHZhbHVlLT5mVmFsdWUgPCAxMDAwMDAwLikgewot
ICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nOjpmb3JtYXQoIiUwNmQiLCAoaW50KSh2YWx1ZS0+
ZlZhbHVlKy41KSk7Ci0gICAgICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoU1ZHUGFpbnQ6OlNWR19Q
QUlOVFRZUEVfUkdCQ09MT1IsIFN0cmluZygpLCBzdHIpOwotICAgIH0gZWxzZSBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SR0JDT0xPUikgewotICAgICAgICBTdHJp
bmcgc3RyID0gIiMiICsgZG9tU3RyaW5nKHZhbHVlLT5zdHJpbmcpOwotICAgICAgICByZXR1cm4g
bmV3IFNWR1BhaW50KFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCBTdHJpbmcoKSwg
c3RyKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfSURFTlQgfHwKLSAgICAgICAgICAgKCFzdHJpY3QgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04pKQotICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50
KFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCBTdHJpbmcoKSwgZG9tU3RyaW5nKHZh
bHVlLT5zdHJpbmcpKTsKLSAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rp
b24gJiYgdmFsdWUtPmZ1bmN0aW9uLT5hcmdzICE9IDAgJiYKLSAgICAgICAgICAgIGRvbVN0cmlu
Zyh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUpLmxvd2VyKCkgPT0gInJnYigiKSB7Ci0gICAgICAgIFZh
bHVlTGlzdCogYXJncyA9IHZhbHVlLT5mdW5jdGlvbi0+YXJnczsKLSAgICAgICAgVmFsdWUqIHYg
PSBhcmdzLT5jdXJyZW50KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KHYsIEZJbnRlZ2VyfEZQ
ZXJjZW50LCB0cnVlKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpbnQgciA9IChp
bnQpICh2LT5mVmFsdWUgKiAodi0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UgPyAyNTYuLzEwMC4gOiAxLikpOwotICAgICAgICB2ID0gYXJncy0+bmV4dCgpOwotICAg
ICAgICBpZiAodi0+dW5pdCAhPSBWYWx1ZTo6T3BlcmF0b3IgJiYgdi0+aVZhbHVlICE9ICcsJykK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB2ID0gYXJncy0+bmV4dCgpOwotICAgICAg
ICBpZiAoIXZhbGlkVW5pdCh2LCBGSW50ZWdlcnxGUGVyY2VudCwgdHJ1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgaW50IGcgPSAoaW50KSAodi0+ZlZhbHVlICogKHYtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMjU2Li8xMDAuIDogMS4pKTsK
LSAgICAgICAgdiA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKHYtPnVuaXQgIT0gVmFsdWU6
Ok9wZXJhdG9yICYmIHYtPmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgdiA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgaWYgKCF2YWxpZFVuaXQodiwgRkludGVn
ZXJ8RlBlcmNlbnQsIHRydWUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGludCBi
ID0gKGludCkgKHYtPmZWYWx1ZSAqICh2LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSA/IDI1Ni4vMTAwLiA6IDEuKSk7Ci0gICAgICAgIHIgPSBtYXgoMCwgbWluKDI1
NSwgcikpOwotICAgICAgICBnID0gbWF4KDAsIG1pbigyNTUsIGcpKTsKLSAgICAgICAgYiA9IG1h
eCgwLCBtaW4oMjU1LCBiKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50
KFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1JHQkNPTE9SLCBTdHJpbmcoKSwgU3RyaW5nOjpmb3Jt
YXQoInJnYiglZCwgJWQsICVkKSIsIHIsIGcsIGIpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBuZXcgU1ZHUGFpbnQoKTsKKyAgICBSR0JBMzIgYyA9
IENvbG9yOjp0cmFuc3BhcmVudDsKKyAgICBpZiAoIXBhcnNlQ29sb3JGcm9tVmFsdWUodmFsdWVM
aXN0LT5jdXJyZW50KCksIGMsIHRydWUpKQorICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50KCk7
CisgICAgcmV0dXJuIG5ldyBTVkdQYWludChDb2xvcihjKSk7CiB9CiAKIENTU1ZhbHVlKiBDU1NQ
YXJzZXI6OnBhcnNlU1ZHQ29sb3IoKQogewotICAgIFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+
Y3VycmVudCgpOwotICAgIGlmICghc3RyaWN0ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLT5mVmFsdWUgPj0gMC4gJiYgdmFsdWUtPmZWYWx1
ZSA8IDEwMDAwMDAuKQotICAgICAgICByZXR1cm4gbmV3IFNWR0NvbG9yKFN0cmluZzo6Zm9ybWF0
KCIlMDZkIiwgKGludCkodmFsdWUtPmZWYWx1ZSsuNSkpKTsKLSAgICBlbHNlIGlmICh2YWx1ZS0+
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SKQotICAgICAgICByZXR1cm4g
bmV3IFNWR0NvbG9yKCIjIiArIGRvbVN0cmluZyh2YWx1ZS0+c3RyaW5nKSk7Ci0gICAgZWxzZSBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fCAoIXN0cmlj
dCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTikpCi0g
ICAgICAgIHJldHVybiBuZXcgU1ZHQ29sb3IoZG9tU3RyaW5nKHZhbHVlLT5zdHJpbmcpKTsKLSAg
ICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6RnVuY3Rpb24gJiYgdmFsdWUtPmZ1bmN0
aW9uLT5hcmdzICE9IDAgJiYgZG9tU3RyaW5nKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSkubG93ZXIo
KSA9PSAicmdiKCIpIHsKLSAgICAgICAgVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0aW9u
LT5hcmdzOwotICAgICAgICBWYWx1ZSogdiA9IGFyZ3MtPmN1cnJlbnQoKTsKLSAgICAgICAgaWYg
KCF2YWxpZFVuaXQodiwgRkludGVnZXJ8RlBlcmNlbnQsIHRydWUpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGludCByID0gKGludCkgKHYtPmZWYWx1ZSAqICh2LT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA/IDI1Ni4vMTAwLiA6IDEuKSk7Ci0gICAg
ICAgIHYgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICh2LT51bml0ICE9IFZhbHVlOjpPcGVy
YXRvciAmJiB2LT5pVmFsdWUgIT0gJywnKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHYgPSBhcmdzLT5uZXh0KCk7Ci0gICAgICAgIGlmICghdmFsaWRVbml0KHYsIEZJbnRlZ2VyfEZQ
ZXJjZW50LCB0cnVlKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpbnQgZyA9IChp
bnQpICh2LT5mVmFsdWUgKiAodi0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UgPyAyNTYuLzEwMC4gOiAxLikpOwotICAgICAgICB2ID0gYXJncy0+bmV4dCgpOwotICAg
ICAgICBpZiAodi0+dW5pdCAhPSBWYWx1ZTo6T3BlcmF0b3IgJiYgdi0+aVZhbHVlICE9ICcsJykK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB2ID0gYXJncy0+bmV4dCgpOwotICAgICAg
ICBpZiAoIXZhbGlkVW5pdCh2LCBGSW50ZWdlcnxGUGVyY2VudCwgdHJ1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgaW50IGIgPSAoaW50KSAodi0+ZlZhbHVlICogKHYtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFID8gMjU2Li8xMDAuIDogMS4pKTsK
LSAgICAgICAgciA9IG1heCgwLCBtaW4oMjU1LCByKSk7Ci0gICAgICAgIGcgPSBtYXgoMCwgbWlu
KDI1NSwgZykpOwotICAgICAgICBiID0gbWF4KDAsIG1pbigyNTUsIGIpKTsKLSAgICAgICAgCi0g
ICAgICAgIHJldHVybiBuZXcgU1ZHQ29sb3IoU3RyaW5nOjpmb3JtYXQoInJnYiglZCwgJWQsICVk
KSIsIHIsIGcsIGIpKTsKLSAgICB9Ci0gICAgZWxzZQorICAgIFJHQkEzMiBjID0gQ29sb3I6OnRy
YW5zcGFyZW50OworICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSh2YWx1ZUxpc3QtPmN1cnJl
bnQoKSwgYywgdHJ1ZSkpCiAgICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG5ldyBTVkdQ
YWludCgpOworICAgIHJldHVybiBuZXcgU1ZHQ29sb3IoQ29sb3IoYykpOwogfQogCiB9CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCShyZXZpc2lvbiAxODQ3MikKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1
ZGUgIlNWR0NvbG9yLmgiCiAKICNpbmNsdWRlICJTVkdFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJT
VkdQYXJzZXJVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw2ICs0
OCwxNCBAQCBTVkdDb2xvcjo6U1ZHQ29sb3IodW5zaWduZWQgc2hvcnQgY29sb3JUCiB7CiB9CiAK
K1NWR0NvbG9yOjpTVkdDb2xvcihjb25zdCBDb2xvciYgYykKKyAgICA6IENTU1ZhbHVlKCkKKyAg
ICAsIG1fY29sb3IoYykKKyAgICAsIG1fY29sb3JUeXBlKFNWR19DT0xPUlRZUEVfUkdCQ09MT1Ip
Cit7Cit9CisKKwogU1ZHQ29sb3I6On5TVkdDb2xvcigpCiB7CiB9CkBAIC0yMTcsNDYgKzIyNiw2
NSBAQCBzdGF0aWMgY29uc3QgQ29sb3IgY21hcFtdID0KIAogdm9pZCBTVkdDb2xvcjo6c2V0UkdC
Q29sb3IoY29uc3QgU3RyaW5nJiByZ2JDb2xvciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
bV9yZ2JDb2xvciA9IHJnYkNvbG9yOwotCi0gICAgaWYgKG1fcmdiQ29sb3IuaXNOdWxsKCkpIHsK
LSAgICAgICAgZWMgPSBTVkdfSU5WQUxJRF9WQUxVRV9FUlI7CisgICAgZWMgPSBTVkdfSU5WQUxJ
RF9WQUxVRV9FUlI7CisgICAgaWYgKHJnYkNvbG9yLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgU3RyaW5nIHBhcnNlID0gbV9yZ2JDb2xvci5zdHJpcFdoaXRlU3BhY2Uo
KTsKKyAgICBDb2xvciBjb2xvcjsKKyAgICBTdHJpbmcgcGFyc2UgPSByZ2JDb2xvci5zdHJpcFdo
aXRlU3BhY2UoKTsKICAgICBpZiAocGFyc2Uuc3RhcnRzV2l0aCgicmdiKCIpKSB7Ci0gICAgICAg
IFZlY3RvcjxTdHJpbmc+IGNvbG9ycyA9IHBhcnNlLnNwbGl0KCcsJyk7Ci0gICAgICAgIFN0cmlu
ZyByID0gY29sb3JzWzBdLnJpZ2h0KChjb2xvcnNbMF0ubGVuZ3RoKCkgLSA0KSk7Ci0gICAgICAg
IFN0cmluZyBnID0gY29sb3JzWzFdOwotICAgICAgICBTdHJpbmcgYiA9IGNvbG9yc1syXS5sZWZ0
KChjb2xvcnNbMl0ubGVuZ3RoKCkgLSAxKSk7Ci0gICAgCi0gICAgICAgIGlmIChyLmNvbnRhaW5z
KCIlIikpIHsKLSAgICAgICAgICAgIHIgPSByLmxlZnQoci5sZW5ndGgoKSAtIDEpOwotICAgICAg
ICAgICAgciA9IFN0cmluZzo6bnVtYmVyKGludCgoKDI1NS4wICogci50b0RvdWJsZSgpKSAvIDEw
MC4wKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGcuY29udGFpbnMoIiUiKSkgewotICAg
ICAgICAgICAgZyA9IGcubGVmdChnLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICBnID0gU3Ry
aW5nOjpudW1iZXIoaW50KCgoMjU1LjAgKiBnLnRvRG91YmxlKCkpIC8gMTAwLjApKSk7Ci0gICAg
ICAgIH0KLSAgICAKLSAgICAgICAgaWYgKGIuY29udGFpbnMoIiUiKSkgewotICAgICAgICAgICAg
YiA9IGIubGVmdChiLmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgICAgICBiID0gU3RyaW5nOjpudW1i
ZXIoaW50KCgoMjU1LjAgKiBiLnRvRG91YmxlKCkpIC8gMTAwLjApKSk7CisgICAgICAgIGJvb2wg
cGVyY2VudGFnZXMgPSBmYWxzZTsKKyAgICAgICAgZG91YmxlIHIgPSAtMSwgZyA9IC0xLCBiID0g
LTE7CisgICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSBwYXJzZS5jaGFyYWN0ZXJzKCkgKyA0Owor
ICAgICAgICBjb25zdCBVQ2hhciogZW5kID0gcGFyc2UuY2hhcmFjdGVycygpICsgcGFyc2UubGVu
Z3RoKCk7CisgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhwdHIsIGVuZCk7CisgICAgICAgIGlm
ICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoKnB0ciA9PSAnJScpIHsKKyAgICAgICAgICAgIHBlcmNlbnRhZ2VzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgaWYgKCFza2lwT3B0aW9uYWxTcGFjZXNPckRl
bGltaXRlcihwdHIsIGVuZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
aWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgZywgZmFsc2UpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGlmICgqcHRyICE9ICclJykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIGlmICghc2tpcE9wdGlvbmFsU3Bh
Y2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIGIsIGZhbHNlKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoKnB0ciAhPSAnJScpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcHRyKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCBnKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCBiLCBmYWxzZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9jb2xvciA9IENv
bG9yKHIudG9JbnQoKSwgZy50b0ludCgpLCBiLnRvSW50KCkpOworICAgICAgICBza2lwT3B0aW9u
YWxTcGFjZXMocHRyLCBlbmQpOworICAgICAgICBpZiAoKnB0ciAhPSAnKScpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHB0cisrOworICAgICAgICBpZiAocHRyICE9IGVuZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocGVyY2VudGFnZXMpCisgICAgICAgICAgICBj
b2xvciA9IENvbG9yKGludCgoMjU1LjAgKiByKSAvIDEwMC4wKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50KCgyNTUuMCAqIGcpIC8gMTAwLjApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQoKDI1NS4wICogYikgLyAxMDAuMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb2xvciA9IENvbG9yKGludChyKSwgaW50KGcpLCBpbnQoYikpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFN0cmluZyBjb2xvck5hbWUgPSBtX3JnYkNvbG9yLmxvd2VyKCk7Ci0vLyAgICAgICAg
aW50IGNvbCA9IFdlYkNvcmU6OmdldFZhbHVlSUQobmFtZS5hc2NpaSgpLCBuYW1lLmxlbmd0aCgp
KTsKLS8vICAgICAgICBpZiAoY29sID09IDApCi0gICAgICAgICAgICBtX2NvbG9yID0gQ29sb3Io
Y29sb3JOYW1lKTsKLS8vICAgICAgICBlbHNlCi0vLyAgICAgICAgICAgIG1fY29sb3IgPSBjbWFw
W2NvbCAtIFNWR0NTU19WQUxfQUxJQ0VCTFVFXTsKKyAgICAgICAgU3RyaW5nIGNvbG9yTmFtZSA9
IHJnYkNvbG9yOy8vLmxvd2VyKCk7CisgICAgICAgIGNvbG9yID0gQ29sb3IoY29sb3JOYW1lKTsK
KyAgICB9CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IDA7CisgICAg
ICAgIG1fY29sb3IgPSBjb2xvcjsKICAgICB9Ci0gICAgaWYgKCFtX2NvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgZWMgPSBTVkdfSU5WQUxJRF9WQUxVRV9FUlI7CiB9CiAKIHZvaWQgU1ZHQ29sb3I6
OnNldFJHQkNvbG9ySUNDQ29sb3IoY29uc3QgU3RyaW5nJiAvKiByZ2JDb2xvciAqLywgY29uc3Qg
U3RyaW5nJiAvKiBpY2NDb2xvciAqLywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yNzMsNyArMzAx
LDcgQEAgdm9pZCBTVkdDb2xvcjo6c2V0Q29sb3IodW5zaWduZWQgc2hvcnQgYwogU3RyaW5nIFNW
R0NvbG9yOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBpZiAobV9jb2xvclR5cGUgPT0gU1ZHX0NP
TE9SVFlQRV9SR0JDT0xPUikKLSAgICAgICAgcmV0dXJuIG1fcmdiQ29sb3I7CisgICAgICAgIHJl
dHVybiBtX2NvbG9yLm5hbWUoKTsKIAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KSW5kZXg6IFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQ29sb3IuaAkocmV2aXNpb24gMTg0NzIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdD
b2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdDb2xvcigpOwogICAgICAgICBTVkdDb2xvcihj
b25zdCBTdHJpbmcmIHJnYkNvbG9yKTsKKyAgICAgICAgU1ZHQ29sb3IoY29uc3QgQ29sb3ImIGMp
OwogICAgICAgICBTVkdDb2xvcih1bnNpZ25lZCBzaG9ydCBjb2xvclR5cGUpOwogICAgICAgICB2
aXJ0dWFsIH5TVkdDb2xvcigpOwotICAgICAgICAKKwogICAgICAgICBlbnVtIFNWR0NvbG9yVHlw
ZSB7CiAgICAgICAgICAgICBTVkdfQ09MT1JUWVBFX1VOS05PV04gICAgICAgICAgICAgICAgICAg
PSAwLAogICAgICAgICAgICAgU1ZHX0NPTE9SVFlQRV9SR0JDT0xPUiAgICAgICAgICAgICAgICAg
ID0gMSwKQEAgLTY2LDcgKzY3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6
CiAgICAgICAgIENvbG9yIG1fY29sb3I7CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fY29sb3JU
eXBlOwotICAgICAgICBTdHJpbmcgbV9yZ2JDb2xvcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYWludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQuY3BwCShyZXZpc2lvbiAxODQ3MikKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiAr
NTIsMTIgQEAgU1ZHUGFpbnQ6OlNWR1BhaW50KFNWR1BhaW50VHlwZSBwYWludFR5cAogICAgIHNl
dFVyaSh1cmkpOwogfQogCitTVkdQYWludDo6U1ZHUGFpbnQoY29uc3QgQ29sb3ImIGMpCisgICAg
OiBTVkdDb2xvcihjKQorICAgICwgbV9wYWludFR5cGUoU1ZHX1BBSU5UVFlQRV9SR0JDT0xPUikK
K3sKK30KKwogU1ZHUGFpbnQ6On5TVkdQYWludCgpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdQYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhaW50
LmgJKHJldmlzaW9uIDE4NDcyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFpbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFNWR1BhaW50KGNvbnN0IFN0cmluZyYgdXJpKTsKICAgICAgICAgU1ZHUGFpbnQoU1ZHUGFpbnRU
eXBlKTsKICAgICAgICAgU1ZHUGFpbnQoU1ZHUGFpbnRUeXBlLCBjb25zdCBTdHJpbmcmIHVyaSwg
Y29uc3QgU3RyaW5nJiByZ2JQYWludCA9IFN0cmluZygpLCBjb25zdCBTdHJpbmcmIGljY1BhaW50
ID0gU3RyaW5nKCkpOworICAgICAgICBTVkdQYWludChjb25zdCBDb2xvciYgYyk7CiAgICAgICAg
IHZpcnR1YWwgflNWR1BhaW50KCk7CiAKICAgICAgICAgLy8gJ1NWR1BhaW50JyBmdW5jdGlvbnMK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAxODQ3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NywxMiArODcsOSBAQCBSR0JBMzIgbWFrZVJHQkFGcm9tSFNMQShkb3VibGUgaHVlLCBkb3ViCiB9
CiAKIC8vIG9yaWdpbmFsbHkgbW92ZWQgaGVyZSBmcm9tIHRoZSBDU1MgcGFyc2VyCi1zdGF0aWMg
aW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUsIFJHQkEzMiYgcmdi
KQorYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUsIFJHQkEzMiYg
cmdiKQogewogICAgIGludCBsZW4gPSBuYW1lLmxlbmd0aCgpOwotICAgIGlmICghbGVuKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAobGVuID09IDMgfHwgbGVuID09IDYpIHsKICAg
ICAgICAgYm9vbCBvazsKICAgICAgICAgaW50IHZhbCA9IG5hbWUuZGVwcmVjYXRlZFN0cmluZygp
LnRvSW50KCZvaywgMTYpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNp
b24gMTg0NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDEzICs5NCwxNSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgUUNvbG9yKCkg
Y29uc3Q7CiAjZW5kaWYKIAorICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3Ry
aW5nJiBuYW1lLCBSR0JBMzImIHJnYik7CisKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGJsYWNr
ID0gMHhGRjAwMDAwMDsKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIHdoaXRlID0gMHhGRkZGRkZG
RjsKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtHcmF5ID0gMHhGRjgwODA4MDsKICAgICBz
dGF0aWMgY29uc3QgUkdCQTMyIGdyYXkgPSAweEZGQTBBMEEwOwogICAgIHN0YXRpYyBjb25zdCBS
R0JBMzIgbGlnaHRHcmF5ID0gMHhGRkMwQzBDMDsKICAgICBzdGF0aWMgY29uc3QgUkdCQTMyIHRy
YW5zcGFyZW50ID0gMHgwMDAwMDAwMDsKLSAgICAKKwogcHJpdmF0ZToKICAgICBSR0JBMzIgbV9j
b2xvcjsKICAgICBib29sIG1fdmFsaWQgOiAxOwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3Rv
bS9yZ2Jjb2xvci1zeW50YXgtZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6
IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL3N2Zy9jdXN0
b20vcmdiY29sb3Itc3ludGF4LWV4cGVjdGVkLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1l
LXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1Vo
RVVnQUFBeUFBQUFKWUNBWUFBQUNhZG9Kd0FBQU1lVWxFUVZSNG5PM1p3UTJBTUF3RXdVRGowTG5w
CllpT0ZtUXJPejVXdjlhNVpCNWpuaURNQUFPQm85KzRCQUFEQWZ3Z1FBQUFnSTBBQUFJQ01BQUVB
QURJQ0JBQUF5QWdRQUFBZ0kwQUEKQUlDTUFBRUFBRElDQkFBQXlBZ1FBQUFnSTBBQUFJQ01BQUVB
QURJQ0JBQUF5QWdRQUFBZ0kwQUFBSUNNQUFFQUFESUNCQUFBeUFnUQpBQUFnSTBBQUFJQ01BQUVB
QURJQ0JBQUF5QWdRQUFBZ0kwQUFBSUNNQUFFQUFESUNCQUFBeUFnUUFBQWdJMEFBQUlDTUFBRUFB
RElDCkJBQUF5QWdRQUFBZ0kwQUFBSUNNQUFFQUFESUNCQUFBeUFnUUFBQWdJMEFBQUlDTUFBRUFB
RElDQkFBQXlBZ1FBQUFnSTBBQUFJQ00KQUFFQUFESUNCQUFBeUFnUUFBQWdJMEFBQUlDTUFBRUFB
RElDQkFBQXlBZ1FBQUFnSTBBQUFJQ01BQUVBQURJQ0JBQUF5Rnd6TTd0SApBQUFBLytBREFnQUFa
QVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpB
UUlBQUNRCkVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpB
UUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUEKWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpB
UUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQQpBQmtCQWdBQVpB
UUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFR
SUFBQ1FFU0FBCkFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFR
SUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUkKQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFR
SUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQgpBZ0FBWkFR
SUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJ
QUFDUUVTQUFBRUJHCmdBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJ
QUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1EKRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJ
QUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQQpaQVFJ
QUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlB
QUNRRVNBQUFFQkdnQUFBCkFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlB
QUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUEKQUVCR2dBQUFBQmtCQWdBQVpBUUlB
QUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSQpB
QUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFB
Q1FFU0FBQUVCR2dBQUFBQmtCCkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFB
Q1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkcKZ0FBQUFCa0JBZ0FBWkFRSUFB
Q1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFD
UQpFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFD
UUVTQUFBRUJHZ0FBQUFCa0JBZ0FBClpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFD
UUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUEKQUJrQkFnQUFaQVFJQUFD
UUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNR
RVNBQQpBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNR
RVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJCkFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNR
RVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0IKQWdBQVpBUUlBQUNR
RVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FF
U0FBQUVCRwpnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FF
U0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRCkVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FF
U0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUEKWkFRSUFBQ1FF
U0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVT
QUFBRUJHZ0FBQQpBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVT
QUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBCkFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVT
QUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUkKQUFDUUVT
QUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNB
QUFFQkdnQUFBQUJrQgpBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNB
QUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHCmdBQUFBQmtCQWdBQVpBUUlBQUNRRVNB
QUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1EKRVNB
QUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FB
QUVCR2dBQUFBQmtCQWdBQQpaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FB
QUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBCkFCa0JBZ0FBWkFRSUFBQ1FFU0FB
QUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUEK
QUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFB
RUJHZ0FBQUFCa0JBZ0FBWkFRSQpBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFB
RUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCCkFnQUFaQVFJQUFDUUVTQUFB
RUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFF
QkcKZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFF
QkdnQUFBQUJrQkFnQUFaQVFJQUFDUQpFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFF
QkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBClpBUUlBQUNRRVNBQUFF
QkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVC
R2dBQUEKQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVC
R2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQQpBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVC
R2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJCkFBQ1FFU0FBQUVC
R2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJH
Z0FBQUFCa0IKQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJH
Z0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCRwpnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJH
Z0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRCkVTQUFBRUJH
Z0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdn
QUFBQUJrQkFnQUEKWkFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdn
QUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQQpBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdn
QUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBCkFFQkdn
QUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dB
QUFBQmtCQWdBQVpBUUkKQUFDUUVTQUFBRUJHZ0FBQUFCa0JBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dB
QUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQgpBZ0FBWkFRSUFBQ1FFU0FBQUVCR2dB
QUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHCmdB
QUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FB
QUFCa0JBZ0FBWkFRSUFBQ1EKRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRUJHZ0FB
QUFCa0JBZ0FBWkQ1NE9BeW5iQUFjVmdBQUFBQkpSVTVFcmtKZwpnZz09Cgo=
</data>
<flag name="review"
          id="4463"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>