<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
<channel>
<title>Канал новостей сайла кафедры ИАОУ</title>
<link>https://iao.susu.ru/index.php</link>
<description>Производится рассылка последних новостей</description>
<language>ru</language>

<item>
<title>26 Oct 2017</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=48</link>
<description>Приглашаем принять участие в программе &amp;laquo;УМНИК&amp;raquo; в 2017 году!&lt;br /&gt;Прием заявок осуществляется до 5 ноября включительно на &lt;a href=&quot;http://umnik.fasie.ru/chelyabinsk&quot;&gt;сайте программы &amp;laquo;УМНИК&amp;raquo;&lt;/a&gt;.</description>
<pubDate>26 Oct 2017</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=48</guid>
</item>

<item>
<title>26 Oct 2017</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=47</link>
<description>Приглашаем студентов принять участие в командном Чемпионате по сетевому и системному администрированию ВШ ЭКН, который состоится 30 октября в 10:00 в ауд. 808а/3б.</description>
<pubDate>26 Oct 2017</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=47</guid>
</item>

<item>
<title>26 Oct 2017</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=46</link>
<description>Поздравляем доцента кафедры ИАОУ Коровина Александра Михайловича, награжденного благодарностью ректора ЮУрГУ за активное привлечение студентов к научно-исследовательской работе и участие в выставочных мероприятиях &amp;quot;Выставка научно-технического творчества студентов Южно-Уральского государственного университета&amp;quot;.</description>
<pubDate>26 Oct 2017</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=46</guid>
</item>

<item>
<title>11 Jun 2015</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=43</link>
<description>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;11 июня 2015 г. на кафедре ИАОУ была завершена итоговая государственная аттестация выпускников 2015 года. Из 20-ти выпускников групп КТУР-522,&amp;nbsp; КТУР-475 и КТУР-253, среди которых&amp;nbsp;1 контрактник, на &amp;quot;отлично&amp;quot; и &amp;quot;хорошо&amp;quot; оценены все выпускные работы, а&amp;nbsp;6 выпускников удостоены диплома с отличием.&lt;/div&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Желаем успехов нашим выпускникам!&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>11 Jun 2015</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=43</guid>
</item>

<item>
<title>23 Jun 2014</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=42</link>
<description>&lt;p&gt;&amp;nbsp;11 июня 2014 г. на кафедре ИАОУ была завершена итоговая государственная аттестация выпускников 2014 года. Из 27-ти выпускников групп ПС-592,&amp;nbsp; ПС-423 и ПС-227, среди которых 3 контрактника, на &amp;quot;отлично&amp;quot; и &amp;quot;хорошо&amp;quot; оценены все выпускные работы, а 7 выпускников удостоены диплома с отличием.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Желаем успехов нашим выпускникам!&lt;/p&gt;</description>
<pubDate>23 Jun 2014</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=42</guid>
</item>

<item>
<title>28 Mar 2014</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=41</link>
<description>&lt;p&gt;&lt;strong&gt;29 марта в 16 &lt;/strong&gt;часов в рамках Дня открытых дверей состоится встреча с руководством ПС-факультета в&amp;nbsp;&lt;strong&gt;актовом зале главного корпуса&lt;/strong&gt;, где можно будет познакомиться с учебными планами кафедры&amp;nbsp; ИАОУ.&lt;/p&gt;&lt;p&gt;ПРИГЛАШАЕМ всех желающих на встречу.&lt;/p&gt;</description>
<pubDate>28 Mar 2014</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=41</guid>
</item>

<item>
<title>7 Feb 2014</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=40</link>
<description>&lt;div&gt;&lt;strong&gt;09&lt;/strong&gt;&amp;nbsp;февраля 2014 г. в &lt;strong&gt;12&lt;/strong&gt; часов в рамках Дня открытых дверей состоится встреча с руководством ПС-факультета в ауд.&lt;strong&gt; 442 &lt;/strong&gt;главного корпуса, где можно будет познакомиться с учебными планами кафедры&amp;nbsp; ИАОУ.&lt;/div&gt;&lt;div&gt;ПРИГЛАШАЕМ всех желающих на встречу.&lt;/div&gt;</description>
<pubDate>7 Feb 2014</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=40</guid>
</item>

<item>
<title>18 Jun 2013</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=38</link>
<description>&lt;div style=&quot;text-align: justify&quot;&gt;&lt;div style=&quot;text-indent: 30px&quot;&gt;11 июня 2013 г. на кафедре ИАОУ была завершена итоговая государственная аттестация выпускников 2013 года. Из 15-ти выпускников групп ПС-553,&amp;nbsp; ПС-493 и ПС-286, среди которых&amp;nbsp;3 контрактника, на &amp;quot;отлично&amp;quot; и &amp;quot;хорошо&amp;quot; оценены все выпускные работы, а&amp;nbsp;магистрант Породько А.Н. удостоен диплома с отличием.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-indent: 30px&quot;&gt;Желаем успехов нашим выпускникам!&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>18 Jun 2013</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=38</guid>
</item>

<item>
<title>10 Apr 2013</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=37</link>
<description>&lt;div style=&quot;text-align: justify; text-indent: 30px&quot;&gt;21 апреля 2013 г. в 11 часов в рамках Дня открытых дверей состоится встреча с руководством ПС-факультета в ауд.&amp;nbsp;534&amp;nbsp; корпуса 3бв приборостроительного факультета. После нее приглашаем посетить кафедру ИАОУ: ауд. 205 корпуса НИИ цифровых систем на пр. Ленина 76а для встречи с преподавателями кафедры.&lt;/div&gt;</description>
<pubDate>10 Apr 2013</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=37</guid>
</item>

<item>
<title>11 Feb 2013</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=35</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-ALIGN: justify; TEXT-INDENT: 30px&quot;&gt;&lt;strong&gt;&lt;span id=&quot;selection_index7&quot; class=&quot;selection_index&quot;&gt;&lt;/span&gt;17 &lt;/strong&gt;февраля 2013 г. в &lt;strong&gt;12&lt;/strong&gt; часов в рамках Дня открытых дверей состоится встреча с руководством ПС-факультета в ауд. 442 главного корпуса. После нее приглашаем посетить кафедру &lt;strong&gt;ИАОУ: ауд. 205&lt;/strong&gt; корпуса НИИ цифровых систем на пр. Ленина 76а для встречи с преподавателями кафедры.&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>11 Feb 2013</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=35</guid>
</item>

<item>
<title>21 Jun 2012</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=34</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;&lt;strong&gt;&lt;span id=&quot;selection_index10&quot; class=&quot;selection_index&quot;&gt;&lt;/span&gt;20 июня&lt;/strong&gt; 2012 г. начался приём документов для поступления в бакалавриат &lt;strong&gt;230100.62&lt;/strong&gt; и магистратуру &lt;strong&gt;230100.68&lt;/strong&gt; кафедры ИАОУ по направлению &quot;Информатика и вычислительная техника&quot;. &lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;&lt;span id=&quot;selection_index11&quot; class=&quot;selection_index&quot;&gt;&lt;/span&gt;Приглашаем абитуриентов для обучения по&amp;nbsp; профилю бакалавриата &lt;strong&gt;&quot;Автоматизированное управление бизнес-процессами и финансами&quot;&lt;/strong&gt; (20 бюджетных мест) и по&amp;nbsp; программе магистратуры &lt;strong&gt;&quot;Автоматизация управления в социальных и экономических системах&quot;&lt;/strong&gt; (7 бюджетных мест).&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>21 Jun 2012</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=34</guid>
</item>

<item>
<title>19 Jun 2012</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=33</link>
<description>&lt;table border=&quot;0&quot; cellspacing=&quot;1&quot; cellpadding=&quot;3&quot; width=&quot;100%&quot; align=&quot;center&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt; 13 июня 2012 г. на кафедре ИАОУ была завершена итоговая государственная аттестация выпускников 2012 года. Из 19-ти выпускников групп ПС-525 и ПС-454, среди которых&amp;nbsp;5 контрактников, на &quot;отлично&quot; и &quot;хорошо&quot; оценены все выпускные работы, а студенты&amp;nbsp;Кириков &amp;nbsp;А.В.,&amp;nbsp;Стоянова О.И.,&amp;nbsp;Пономарева А.В.&amp;nbsp;удостоены диплома с отличием.&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;&lt;span id=&quot;selection_index12&quot; class=&quot;selection_index&quot;&gt;&lt;/span&gt;Желаем успехов нашим выпускникам!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description>
<pubDate>19 Jun 2012</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=33</guid>
</item>

<item>
<title>12 Aug 2011</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=32</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify; TEXT-INDENT: 30px&quot;&gt;&lt;strong&gt;11&amp;nbsp;августа&amp;nbsp;завершилась процедура &amp;nbsp;зачисления на бюджетную форму обучения и продолжается зачисление на вакантные места с оплатой по контракту на направление 230100 бакалавриата и магистратуры по кафедре ИАОУ&lt;/strong&gt;. &lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-ALIGN: justify; TEXT-INDENT: 30px&quot;&gt;&amp;nbsp;Желающие поступить на &lt;strong&gt;кафедру ИАОУ&lt;/strong&gt; и не вошедшие в приказ от 05 &amp;nbsp;августа имеют возможность заключить контракт &lt;strong&gt;до 01 сентября&lt;/strong&gt;, для чего им следует обратиться в деканат ПС-факультета (&lt;strong&gt;аудитория 429 корпуса 3-бв, тел.: 2679421, с 9-00 до 15-00&lt;/strong&gt;). Контрактники успешно проходят и заканчивают обучение на нашей кафедре. Так среди 22 выпускников 2011 года, 11 студентов обучались по контракту и защитили свои выпускные работы на &quot;отлично&quot; и &quot;хорошо&quot;.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-ALIGN: justify; TEXT-INDENT: 30px&quot;&gt;Уважаемые абитуриенты, не упустите свой шанс поступить на остродефицитное и перспективное направление обучения &lt;strong&gt;по кафедре ИАОУ&lt;/strong&gt;!&lt;/div&gt;</description>
<pubDate>12 Aug 2011</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=32</guid>
</item>

<item>
<title>21 Jun 2011</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=31</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;&lt;strong&gt;20 июня&lt;/strong&gt; начался приём документов для поступления в бакалавриат 230100.62 и магистратуру 230100.68 кафедры ИАОУ. &lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;Приглашаем абитуриентов для обучения по новому профилю бакалавриата &lt;strong&gt;&quot;Автоматизированное управление бизнес-процессами и финансами&quot;&lt;/strong&gt; и по новой программе магистратуры &lt;strong&gt;&quot;Автоматизация управления в социальных и экономических системах&quot;&lt;/strong&gt;.&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>21 Jun 2011</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=31</guid>
</item>

<item>
<title>21 Jun 2011</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=30</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;9 июня 2011 г. на кафедре ИАОУ была завершена итоговая государственная аттестация выпускников 2011 года. Из 22-х выпускников групп ПС-571 и ПС-426, среди которых 11 контрактников, на &quot;отлично&quot; и &quot;хорошо&quot; оценены все выпускные работы, а студенты  Басалаев А.А., Гончаренко О.Н., Топчий А.К., Чугунова А.Г. удостоены диплома с отличием.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;2 июля состоится торжественная процедура вручения им дипломов о высшем образовании.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;Желаем успехов нашим выпускникам!&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>21 Jun 2011</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=30</guid>
</item>

<item>
<title>12 Apr 2011</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=29</link>
<description>&lt;div style=&quot;TEXT-INDENT: 30px; TEXT-ALIGN: justify&quot;&gt;17 апреля 2011 г. в 11 час. в ауд. 434 корпуса 3бв состоится встреча с руководством и преподавателями ПС-факультета. Приглашаем посетить кафедру ИАОУ (аудитория 205 корпуса НИИЦС), где Вам будет предоставлена полная информация о планах набора и перспективах обучения&amp;nbsp;по нашей кафедре.&amp;nbsp;&lt;/div&gt;</description>
<pubDate>12 Apr 2011</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=29</guid>
</item>

<item>
<title>2 Apr 2011</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=28</link>
<description>&lt;div style=&quot;TEXT-INDENT: 30px; TEXT-ALIGN: justify&quot;&gt;Приглашаем 03 апреля наших будущих абитуриентов на встречу с преподавателями кафедры ИАОУ, которая состоится после общефакультетского собрания в ауд. 205 корпуса НИИЦС. На встрече Вам предоставлена возможность познакомиться с новой учебной программой по новому профилю обучения &quot;Автоматизированное управление бизнес-процессами и финансами&quot;, подготовка бакалавров по которой начнется&amp;nbsp; с сентября 2011 года.&lt;/div&gt;</description>
<pubDate>2 Apr 2011</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=28</guid>
</item>

<item>
<title>10 Feb 2011</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=27</link>
<description>&lt;div style=&quot;TEXT-INDENT: 30px; TEXT-ALIGN: justify&quot;&gt;&lt;strong&gt;13 &lt;/strong&gt;февраля 2011 г.в &lt;strong&gt;12&lt;/strong&gt; часов в рамках Дня открытых дверей состоится встреча с&amp;nbsp;руководством ПС-факультета в ауд. 434 корпуса 3бв. После нее приглашаем посетить&amp;nbsp;кафедру &lt;strong&gt;ИАОУ: ауд. 205&lt;/strong&gt; корпуса НИИ цифровых систем на пр. Ленина 76а для встречи с преподавателями &lt;img alt=&quot;&quot; src=&quot;data:image/jpeg;base64,PD9waHAKJEdMT0JBTFNbJ0hBU0hUWVBFJ10gPSAnc2hhNTEyJzsKJEdMT0JBTFNbJ1BBU1NIQVNIJ10gPSAnZGZiYmVjY2ZkY2FlOTczMmUzZDQzNjk3ODYxZWZiZTdiYzU2ZmZjNzQ2ZjA3YzMxNzZhNDU5NGZjMDk5NzdiNzQ3OTk3ZDkzY2I2NWZiNjRmZjA5M2JjNDY3ZTBhYjM1ZGUzYmM3NjFlZmEyOWNiMjlhOTVjNGRmMzgzNzVjMjYnOy8vUEA1NXcoKXJECiRHTE9CQUxTWydTRUNIRUFEJ10gPSAnVVNFUl9BR0VOVCc7CiRHTE9CQUxTWydDT09LSUUnXSA9IHRydWU7CiRHTE9CQUxTWydEQVJLJ10gPSBmYWxzZTsKJEdMT0JBTFNbJ1JFTU9URV9BRERSJ10gPSB0cnVlOwokR0xPQkFMU1snREVCVUcnXSA9IChpc3NldCgkR0xPQkFMU1snREVCVUcnXSkgPyAkR0xPQkFMU1snREVCVUcnXSA6IGZhbHNlKTsKCmZpbHRlckNsaWVudCgpOwpkZWNvZGVSZXF1ZXN0KCk7CmNoZWNrQXV0aCgpOwoKZnVuY3Rpb24gY2hlY2tBdXRoKCl7CglpZighJEdMT0JBTFNbJ1BBU1NIQVNIJ10pIHJldHVybiBzZXRFbmNLZXkoKTsKCgkkbG9naW5XaXRoUGFzcyA9IChpc3NldCgkX1JFUVVFU1RbJ3Bhc3MnXSkgJiYgaGFzaCgkR0xPQkFMU1snSEFTSFRZUEUnXSwgJF9SRVFVRVNUWydwYXNzJ10pID09PSAkR0xPQkFMU1snUEFTU0hBU0gnXSk7CgkkZW5jS2V5V2l0aFBhc3MgPSAoJEdMT0JBTFNbJ0VOQ0tFWSddID09PSBnZW5FbmNLZXkoJEdMT0JBTFNbJ1BBU1NIQVNIJ10pKTsKCglpZigkbG9naW5XaXRoUGFzcykKCQlzZXRFbmNLZXkoJEdMT0JBTFNbJ1BBU1NIQVNIJ10pOwoJZWxzZWlmKCRlbmNLZXlXaXRoUGFzcykKCQlzZXRFbmNLZXkoKTsKCWVsc2UKCQlsb2dpbkZvcm1PdXQoKTsKfQoKZnVuY3Rpb24gZ2V0RW5jS2V5KCl7CgkkbGVuID0gJEdMT0JBTFNbJ1BSRUxFTiddOwoJCglmb3JlYWNoKCRfUkVRVUVTVCBhcyAkayA9PiAmJHYpewoJCSRwcmVmID0gc3RycmV2KHN1YnN0cigkaywgMCwgJGxlbikpOwoJCSRwb3N0ID0gc3Vic3RyKCRrLCAkbGVuLCAkbGVuKTsKCQlpZigkcHJlZiA9PT0gJHBvc3QpewoJCQkkZUtleSA9ICR2OwoJCQl1bnNldCgkX1JFUVVFU1RbJGtdKTsKCQkJJEdMT0JBTFNbJ0VOQ0tFWSddID0gYmFzZTY0X2RlY29kZSgkZUtleSk7CgkJCXJldHVybiAkR0xPQkFMU1snRU5DS0VZJ107CgkJfQoJfQoJCglyZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIGdlbkVuY0tleSgkc3RyKXsKCXJldHVybiBiYXNlNjRfZW5jb2RlKGhhc2goJEdMT0JBTFNbJ0hBU0hUWVBFJ10sICgkR0xPQkFMU1snUkVNT1RFX0FERFInXSA/ICRfU0VSVkVSWydSRU1PVEVfQUREUiddIDogJycpLiRzdHIuX19GSUxFX18pKTsKfQoKZnVuY3Rpb24gc2V0RW5jS2V5KCRwYXNzID0gJycpewoJaWYoISRwYXNzICYmICRHTE9CQUxTWydFTkNLRVknXSkgcmV0dXJuICRHTE9CQUxTWydFTkNLRVknXTsKCSRlS2V5ID0gZ2VuRW5jS2V5KCRwYXNzKTsKCSRHTE9CQUxTWydFTkNLRVknXSA9ICRlS2V5OwoJcmV0dXJuICRlS2V5Owp9CgpmdW5jdGlvbiBkZWNvZGVSZXF1ZXN0KCl7CgkkX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0ZJTEVTLCAkX0NPT0tJRSwgJF9SRVFVRVNUKTsgdW5zZXQoJF9HRVQsICRfUE9TVCwgJF9DT09LSUUpOwoJJEdMT0JBTFNbJ1BSRUxFTiddID0gZ2V0UHJlTGVuKCk7CglpZighJEdMT0JBTFNbJ0VOQ0tFWSddID0gZ2V0RW5jS2V5KCkpICRHTE9CQUxTWydFTkNLRVknXSA9IHNldEVuY0tleSgpOwoJJF9SRVFVRVNUID0gZGVjb2RlSW5wdXQoJF9SRVFVRVNUKTsKfQoKZnVuY3Rpb24gZ2V0UHJlTGVuKCl7CglyZXR1cm4gKHN1YnN0cihhcnJheV9zdW0oc3RyX3NwbGl0KGhhc2goJEdMT0JBTFNbJ0hBU0hUWVBFJ10sIF9fRklMRV9fKSkpLCAtMSkgKyA1KTsKfQoKZnVuY3Rpb24gZmlsdGVyQ2xpZW50KCl7Cgkkc2VjcmV0SGVhZGVyID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBfJy4kR0xPQkFMU1snU0VDSEVBRCddXSk7CgkkY3Jhd2xlckJvdCA9IHByZWdfbWF0Y2goJy9ib3R8Y3Jhd2x8c3BpZGVyL2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pOwoJaWYoJGNyYXdsZXJCb3QgfHwgISRzZWNyZXRIZWFkZXIpIGV4aXQoaGVhZGVyKCdIVFRQLzEuMSA0MDQgTm90IEZvdW5kJykpOwp9CgpmdW5jdGlvbiBsb2dpbkZvcm1PdXQoKXsKCSRodG1sID0gJzxodG1sPjxoZWFkPjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCI+PC9oZWFkPjxib2R5IHN0eWxlPSJkaXNwbGF5OmdyaWQ7aGVpZ2h0OjEwMHZoO21hcmdpbjowO3BsYWNlLWl0ZW1zOmNlbnRlciBjZW50ZXI7Ij48Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJQT1NUIiBvbnN1Ym1pdD0icmV0dXJuIGxvZ2luKHRoaXMpIj48aW5wdXQgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciIgbmFtZT0icGFzcyIgdHlwZT0icGFzc3dvcmQiIHZhbHVlPSIiPjwvZm9ybT48L2JvZHk+Jy5wYXJhbXNIYW5kbGVySlMoKS4nPC9odG1sPic7CglleGl0KG1ha2VPdXQoJGh0bWwpKTsKfQoKZnVuY3Rpb24gc2NyaXB0SW5pdCgpewoJaWYoIWlzc2V0KCRHTE9CQUxTWydERUJVRyddKSkgcmV0dXJuOwoJZGVmaW5lKCdEJywgJEdMT0JBTFNbJ0RFQlVHJ10pOwoJc2V0X3RpbWVfbGltaXQoRCA/IDE1IDogMCk7CgllcnJvcl9yZXBvcnRpbmcoRCA/IEVfQUxMIDogMCk7Cglpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIEQgPyAnT24nIDogJ09mZicpOwoJaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgRCA/IDE1IDogMCk7Cglpbmlfc2V0KCdlcnJvcl9sb2cnLCBOVUxMKTsKCWluaV9zZXQoJ2xvZ19lcnJvcnMnLCAwKTsKfQoKZnVuY3Rpb24gZGVjb2RlSW5wdXQoJiRhcnIpewoJJHN0ciA9ICcnOwoJZm9yZWFjaCgkYXJyIGFzICRrID0+ICR2KXsKCQkka2V5ID0gZ2V0TmFtZSgkayk7CgkJaWYoIXN0cmxlbigka2V5KSkgY29udGludWU7CgkJJHN0ciAuPSAka2V5Lic9Jy51cmxlbmNvZGUoZ2V0VmFsdWUoJHYpKS4nJic7CgkJdW5zZXQoJGFyclska10pOwoJfQoJcGFyc2Vfc3RyKCRzdHIsICRkZWMpOwoJcmV0dXJuIGFycmF5X21lcmdlKCRhcnIsICRkZWMpOwp9CgpmdW5jdGlvbiB4b3JTdHIoJHN0ciwgJGRlY29kZSA9IGZhbHNlKSB7Cgkka2V5ID0gJEdMT0JBTFNbJ0VOQ0tFWSddOwogICAgJGtleV9sZW4gPSBzdHJsZW4oJGtleSk7CiAgICAkc3RyID0gKCEkZGVjb2RlID8gcmF3dXJsZW5jb2RlKCRzdHIpIDogJHN0cik7CiAgICBmb3IoJGkgPSAwOyAkaSA8IHN0cmxlbigkc3RyKTsgJGkrKykKICAgICAgICAkc3RyWyRpXSA9ICRzdHJbJGldIF4gJGtleVskaSAlICRrZXlfbGVuXTsKICAgICRzdHIgPSAoJGRlY29kZSA/IHJhd3VybGRlY29kZSgkc3RyKSA6ICRzdHIpOwogICAgcmV0dXJuICRzdHI7Cn0KCmZ1bmN0aW9uIGFzY2lpMmhleCgkYXNjaWkpIHsKCSRoZXggPSAnJzsKCWZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkYXNjaWkpOyAkaSsrKSB7CgkJJGJ5dGUgPSBzdHJ0b3VwcGVyKGRlY2hleChvcmQoJGFzY2lpWyRpXSkpKTsKCQkkYnl0ZSA9IHN0cl9yZXBlYXQoJzAnLCAyIC0gc3RybGVuKCRieXRlKSkuJGJ5dGU7CgkJJGhleC49JGJ5dGU7Cgl9CglyZXR1cm4gJGhleDsKfQoKZnVuY3Rpb24gaGV4MmFzY2lpKCRoZXgpewoJJGFzY2lpPScnOwoJJGhleD1zdHJfcmVwbGFjZSgiICIsICIiLCAkaGV4KTsKCWZvcigkaT0wOyAkaTxzdHJsZW4oJGhleCk7ICRpPSRpKzIpCgkJJGFzY2lpLj1jaHIoaGV4ZGVjKHN1YnN0cigkaGV4LCAkaSwgMikpKTsKCXJldHVybigkYXNjaWkpOwp9CgpmdW5jdGlvbiBzZXROYW1lKCRzdHIpewoJJHN0ciA9IGFzY2lpMmhleCh4b3JTdHIoJHN0cikpOwoJJHByZWYgPSBzdWJzdHIoJEdMT0JBTFNbJ0VOQ0tFWSddLCAwLCAkR0xPQkFMU1snUFJFTEVOJ10pOwoJcmV0dXJuICRwcmVmLiRzdHI7Cn0KCmZ1bmN0aW9uIGdldE5hbWUoJHN0cil7CgkkZGF0YSA9IGdldERhdGEoJHN0cik7CglpZigkZGF0YSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKCXJldHVybiB4b3JTdHIoaGV4MmFzY2lpKCRkYXRhKSwgdHJ1ZSk7Cn0KCmZ1bmN0aW9uIHNldFZhbHVlKCRzdHIpewoJcmV0dXJuIGJhc2U2NF9lbmNvZGUoeG9yU3RyKCRzdHIpKTsKfQoKZnVuY3Rpb24gZ2V0VmFsdWUoJHN0cil7CglyZXR1cm4geG9yU3RyKGJhc2U2NF9kZWNvZGUoJHN0ciksIHRydWUpOwp9CgpmdW5jdGlvbiBnZXREYXRhKCRzdHIpewoJJGxuID0gJEdMT0JBTFNbJ1BSRUxFTiddOwoJJHByZWYgPSBzdWJzdHIoJHN0ciwgMCwgJGxuKTsKCSRkYXRhID0gc3Vic3RyKCRzdHIsICRsbik7CglyZXR1cm4gKCRwcmVmID09PSBzdWJzdHIoJEdMT0JBTFNbJ0VOQ0tFWSddLCAwLCAkbG4pID8gJGRhdGEgOiBmYWxzZSk7Cn0KCmZ1bmN0aW9uIGdlbkp1bmsoJG1pbiA9IDEwLCAkbWF4ID0gMTAwKXsKCSRyYW5kID0gJyc7CgkkcmVwZWF0ID0gcmFuZCgkbWluLCAkbWF4KTsKCXdoaWxlKCFpc3NldCgkcmFuZFskcmVwZWF0XSkpICRyYW5kIC49IGNocihyYW5kKDEsIDEyNykpOwoJaWYocmFuZCgxLDIpID09IDEpCgkJcmV0dXJuICcvLycuc3RyX3JlcGxhY2UoYXJyYXkoIlxyIiwiXG4iKSwgIiIsICRyYW5kKS4iXG4iOwoJZWxzZQoJCXJldHVybiAnLyonLnN0cl9yZXBsYWNlKCcqLycsJycsICRyYW5kKS4nKi8nOwp9CgpmdW5jdGlvbiBwYXJhbXNIYW5kbGVySlMoKXsKCXJldHVybiAnPHNjcmlwdD4KCQl2YXIgRU5DS0VZID0gYXRvYigiJy5iYXNlNjRfZW5jb2RlKCRHTE9CQUxTWydFTkNLRVknXSkuJyIpOwoJCXZhciBQUkVMRU4gPSAnLiRHTE9CQUxTWydQUkVMRU4nXS4nOwoJCXZhciBDT09LSUUgPSAnLihpbnQpJEdMT0JBTFNbJ0NPT0tJRSddLic7CgoJCScuKCRHTE9CQUxTWydEQVJLJ10gPyAnaW52ZXJ0Q29sb3JzKCk7JyA6ICcnKS4nCgkJc3RhcnRFdmVudHNMaXN0bmVycygpOwoJCWlmKENPT0tJRSkgZGVsZXRlQWxsQ29va2llcygpOwoKCQlmdW5jdGlvbiBzdGFydEV2ZW50c0xpc3RuZXJzKCl7CgkJCXZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJCgkJCWZvcih2YXIgaT0wO2k8ZWxlbWVudHMubGVuZ3RoO2krKyl7CgoJCQkJaWYoZWxlbWVudHNbaV0udHlwZSAmJiBlbGVtZW50c1tpXS50eXBlID09ICJmaWxlIikKCQkJCQkJZWxlbWVudHNbaV0ub25jaGFuZ2UgPSBmdW5jdGlvbihlKXsKCQkJCQkJCWlmKCFlbG1CeUlkKCJjYlJSIikuY2hlY2tlZCkgcHJlcGFyZUZpbGUodGhpcykKCQkJCQkJCWVsc2UgdXBsRmlsZXMoKTsKCQkJCQkJfQoJCQkJCQoJCQl9CgkJfQoJCQkJCgkJZnVuY3Rpb24gYmluMmhleChiaW4pewoJCSAgdmFyIGhleCA9ICIiOwoJCSAgZm9yKHZhciBpID0gMDsgaTxiaW4ubGVuZ3RoOyBpKyspewoJCSAgICB2YXIgYyA9IGJpbi5jaGFyQ29kZUF0KGkpOwoJCSAgICBpZiAoYz4weEZGKSBjIC09IDB4MzUwOwoJCSAgICBoZXggKz0gKGMudG9TdHJpbmcoMTYpLmxlbmd0aCA9PT0gMSA/ICIwIiA6ICIiKSArIGMudG9TdHJpbmcoMTYpOwoJCSAgfQoJCSAgcmV0dXJuIGhleDsKCQl9CgkJCgkJZnVuY3Rpb24gbG9naW4oZm9ybSl7CgkJCWFkZEVuY0tleShmb3JtKTsKCQkJZm9ybS5wYXNzLnZhbHVlID0gc2V0VmFsdWUoZm9ybS5wYXNzLnZhbHVlKTsKCQkJZm9ybS5wYXNzLm5hbWUgPSBzZXROYW1lKGZvcm0ucGFzcy5uYW1lKTsKCQkJCgkJCWlmKENPT0tJRSkKCQkJCXN1Ym1pdFZpYUNvb2tpZShmb3JtKTsKCQkJZWxzZQoJCQkJcmV0dXJuIHRydWU7CgkJCQkKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkgIAoJCWZ1bmN0aW9uIGhleDJiaW4oaGV4KSB7CgkJICB2YXIgYmluID0gIiI7CgkJICBmb3IgKHZhciBpPTA7IGk8aGV4Lmxlbmd0aDsgaT1pKzIpIHsKCQkgICAgdmFyIGMgPSBwYXJzZUludCgiIitoZXhbaV0raGV4W2krMV0sIDE2KTsKCQkgICAgaWYgKGM+MHg3RikgYyArPSAweDM1MDsKCQkgICAgYmluICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7CgkJICB9CgkJICByZXR1cm4gYmluOwoJCX0KCQkJCgkJZnVuY3Rpb24geG9yU3RyKHN0ciwgZGVjb2RlID0gZmFsc2UpIHsKCQkJc3RyID0gKCFkZWNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQoc3RyKSA6IHN0cik7CgkJCXN0ciA9IHN0ci5zcGxpdCgiIik7CgkJICAgIGtleSA9IEVOQ0tFWS5zcGxpdCgiIik7CgkJICAgIHZhciBzdHJfbGVuID0gc3RyLmxlbmd0aDsKCQkgICAgdmFyIGtleV9sZW4gPSBrZXkubGVuZ3RoOwoJCQoJCSAgICB2YXIgU3RyaW5nX2Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7CgkJCgkJICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzdHJfbGVuOyBpKyspIHsKCQkgICAgICAgIHN0cltpXSA9IFN0cmluZ19mcm9tQ2hhckNvZGUoc3RyW2ldLmNoYXJDb2RlQXQoMCkgXiBrZXlbaSAlIGtleV9sZW5dLmNoYXJDb2RlQXQoMCkpOwoJCSAgICB9CgkJICAgIHN0ciA9IHN0ci5qb2luKCIiKTsKCQkgICAgCgkJICAgIGlmKGRlY29kZSl7IAoJCQkJdHJ5ewoJCQkJCXN0ciA9IGRlY29kZVVSSUNvbXBvbmVudChzdHIpOwoJCQkJfQoJCQkJY2F0Y2goZSl7CgkJCQkJc3RyID0gdW5lc2NhcGUoc3RyKTsKCQkJCX0KCQkJfQoKCQkgICAgcmV0dXJuIHN0cjsKCQl9CgkJCgkJZnVuY3Rpb24gc2V0TmFtZShzdHIpewoJCQlzdHIgPSBiaW4yaGV4KHhvclN0cihzdHIpKTsKCQkJcHJlZiA9IEVOQ0tFWS5zdWJzdHIoMCwgUFJFTEVOKTsKCQkJcmV0dXJuIHByZWYgKyBzdHI7CgkJfQoJCQoJCWZ1bmN0aW9uIHNldFZhbHVlKHN0cil7CgkJCXJldHVybiBidG9hKHhvclN0cihzdHIpKTsKCQl9CgkJCgkJZnVuY3Rpb24gZ2V0VmFsdWUoc3RyKXsKCQkJcmV0dXJuIHhvclN0cihhdG9iKHN0ciksIHRydWUpOwoJCX0KCQkKCQlmdW5jdGlvbiBhZGRFbmNLZXkoZm9ybSl7CgkJCXZhciBlbmNLZXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwoJCQllbmNLZXkudHlwZSA9ICJoaWRkZW4iOwoJCQlwcmVmID0gRU5DS0VZLnN1YnN0cigwLCBQUkVMRU4pOwoJCQllbmNLZXkubmFtZSA9IHByZWYuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSArIHByZWY7CgkJCWVuY0tleS52YWx1ZSA9IGJ0b2EoRU5DS0VZKTsKCQkJZm9ybS5hcHBlbmRDaGlsZChlbmNLZXkpOwoJCQlyZXR1cm4gZm9ybTsKCQl9CgkJCgkJZnVuY3Rpb24gZml4RmlsZU5hbWUoc3RyLCBsZW4gPSBmYWxzZSl7CgkJCXN0ciA9IHN0ci5zcGxpdCgvKFxcXFx8XFwvKS9nKS5wb3AoKTsKCQkJaWYobGVuKSBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGxlbik7CgkJCXJldHVybiBzdHI7CgkJfQoJCQoJCWZ1bmN0aW9uIGdldFBhcmVudEZvcm1PZihlbGVtZW50KXsKCQkJCgkJCXdoaWxlKGVsZW1lbnQudGFnTmFtZSAhPSAiRk9STSIpCgkJCQllbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50OwoKCQkJcmV0dXJuIGVsZW1lbnQ7CgkJfQoJCQoJCWZ1bmN0aW9uIHByZXBhcmVGaWxlKGlucHV0KXsKCQkJdmFyIGZpbGUgPSBpbnB1dDsKCQkJZm9ybSA9IGdldFBhcmVudEZvcm1PZihpbnB1dCk7CgkJCWZvcm0uZW5jdHlwZSA9ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOwoJCQkKCQkJaWYoZmlsZS5maWxlcy5sZW5ndGgpewoJCQkJdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CgkJCQkKCQkJCXJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKXsKCQkJCQkJZmlsZW5hbWUgPSBmaXhGaWxlTmFtZShpbnB1dC52YWx1ZSk7CgkJCQkJCXd3d0ZpbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwoJCQkJCQl3d3dGaWxlLnR5cGUgPSAiaGlkZGVuIjsKCQkJCQkJd3d3RmlsZS5pZCA9IGlucHV0Lm5hbWU7CgkJCQkJCXd3d0ZpbGUubmFtZSA9IGlucHV0Lm5hbWUgKyAiWyIrZmlsZW5hbWUrIl0iOwoJCQkJCQl3d3dGaWxlLnZhbHVlID0gZS50YXJnZXQucmVzdWx0OwoJCQkJCQlpZihlLnRhcmdldC5yZXN1bHQubGVuZ3RoIDw9IDIwOTcxNTIpCgkJCQkJCQlmb3JtLmFwcGVuZENoaWxkKHd3d0ZpbGUpOwoJCQkJCQllbHNlCgkJCQkJCQlpZihjb25maXJtKCJSZXF1ZXN0IHNpemUgaXMgfiIgKyBNYXRoLnJvdW5kKCgoZS50YXJnZXQucmVzdWx0Lmxlbmd0aCAqIDIpIC8gMTAyNCkgLyAxMDI0KSArICJNLCBidXQgbGltaXRzIGlzIG9mdGVuIGFyb3VuZCA8PSA4TS4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGZpbGUgd2lsbCBiZSB1cGxvYWRlZC5cbllvdSBjYW4gZGlzYWJsZSByZXF1ZXN0IGVuY29kaW5nLCB1c2Ugb3RoZXIgdXBsb2FkIG1ldGhvZHMgb3Igc2VsZWN0IGEgc21hbGxlciBmaWxlLiBDb250aW51ZT8iKSkKCQkJCQkJCQlmb3JtLmFwcGVuZENoaWxkKHd3d0ZpbGUpOwoJCQkJCQkJZWxzZQoJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCQoJCQkJCQl1cGxGaWxlcygpOwoJCQkJCQkKCQkJCQkJZWxlbWVudHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJCQkJCWZvcih2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKCQkJCQkJCWlmKGVsZW1lbnRzW2ldLnR5cGUgPT09ICJoaWRkZW4iKQoJCQkJCQkJCWZvcm0ucmVtb3ZlQ2hpbGQoZWxlbWVudHNbaV0pOwoJCQkJfTsKCQkJCQoJCQkJcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZS5maWxlc1swXSk7CgkJCQlyZXR1cm4gcmVhZGVyOwoJCQl9CgkJCQoJCX0KCgkJZnVuY3Rpb24gZGVsZXRlQWxsQ29va2llcygpIHsJCgkJCXZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCI7Iik7CgkJCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykgewoJCQkJdmFyIGNvb2tpZSA9IGNvb2tpZXNbaV07CgkJCQl2YXIgZXFQb3MgPSBjb29raWUuaW5kZXhPZigiPSIpOwoJCQkJdmFyIG5hbWUgPSBlcVBvcyA+IC0xID8gY29va2llLnN1YnN0cigwLCBlcVBvcykgOiBjb29raWU7CgkJCQlkb2N1bWVudC5jb29raWUgPSBuYW1lICsgIj07ZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCI7CgkJCX0KCQkJCgkJCXJldHVybiBmYWxzZTsKCQl9CgkKCQlmdW5jdGlvbiBzdWJtaXRWaWFDb29raWUoZW5jb2RlZEZvcm0sIHJlZnJlc2ggPSB0cnVlKXsKCQkJdmFyIHJlcWxlbiA9IDA7CgkJCXZhciBlbGVtZW50cyA9IGVuY29kZWRGb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJCQoJCQlmb3IoaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewoJCQkJCgkJCQlpZighZWxlbWVudHNbaV0ubmFtZSkgY29udGludWU7CgkJCQkKCQkJCW5hbWUgPSBlbGVtZW50c1tpXS5uYW1lOwoJCQkJdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQoZWxlbWVudHNbaV0udmFsdWUpOwoKCQkJCWlmKHZhbHVlLmxlbmd0aCA+IDQwOTUgfHwgcmVxbGVuID4gNzY5Nil7CgkJCQkJaWYoY29uZmlybSgiVGhlIHJlcXVlc3QgaGVhZGVyIGlzIHRvbyBiaWcsIHNlbmQgaXQgdmlhIFBPU1Q/IikpewoJCQkJCQlkZWxldGVBbGxDb29raWVzKCk7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJZGVsZXRlQWxsQ29va2llcygpOwoJCQkJCQlyZXR1cm4gIkNBTkNFTCI7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlkb2N1bWVudC5jb29raWUgPSAgbmFtZSArICI9IiArIHZhbHVlOwoJCQkJcmVxbGVuID0gcmVxbGVuICsgbmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGg7CgkJCX0KCQkJCgkJCWlmKHJlZnJlc2gpCgkJCQl3aW5kb3cubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CgkJCWVsc2UKCQkJCXJldHVybiAiU0VORCI7CgkJfQoJCQoJCWZ1bmN0aW9uIGludmVydENvbG9ycygpIHsKCQkgICAgdmFyIGNzcyA9ICJodG1se2JhY2tncm91bmQ6ICMwZDBkMGQ7IC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSk7IC1tb3otZmlsdGVyOiBpbnZlcnQoMTAwJSk7IC1vLWZpbHRlcjogaW52ZXJ0KDEwMCUpOyAtbXMtZmlsdGVyOiBpbnZlcnQoMTAwJSk7fSI7CgkJICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKCQkgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKCQkgICAgaWYoIXdpbmRvdy5jb3VudGVyKQoJCSAgICAgICAgd2luZG93LmNvdW50ZXIgPSAxOwoJCSAgICBlbHNlewoJCSAgICAgICAgd2luZG93LmNvdW50ZXIrKzsKCQkgICAgICAgIGlmICh3aW5kb3cuY291bnRlciAlIDIgPT0gMCkKCQkgICAgICAgICAgICB2YXIgY3NzID0gImh0bWx7YmFja2dyb3VuZDogI2YwZjBmMDsgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwJSk7IC1tb3otZmlsdGVyOiBpbnZlcnQoMCUpOyAtby1maWx0ZXI6IGludmVydCgwJSk7IC1tcy1maWx0ZXI6IGludmVydCgwJSk7fSIKCQkgICAgfQoJCSAgICBzdHlsZS50eXBlID0gInRleHQvY3NzIjsKCQkgICAgCgkJICAgIGlmKHN0eWxlLnN0eWxlU2hlZXQpCgkJICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7CgkJICAgIGVsc2UKCQkgICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpOwoJCSAgICAgICAgCgkJICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwoJCSAgICAKCQkgICAgcmV0dXJuIGZhbHNlOwoJCX0KPC9zY3JpcHQ+JzsKfQoKZnVuY3Rpb24gaigpewoJcmV0dXJuIGdlbkp1bmsoMTAwLCAzMDApOwp9CgpmdW5jdGlvbiBtYWtlT3V0KCRzdHIpewoJcHJpbnQoJzxzY3JpcHQ+Jy50KCdkb2N1bWVudC53cml0ZShkZWNvZGVVUklDb21wb25lbnQoYXRvYigoJy5pbXBsb2RlKCcrJywgYXJyYXlfbWFwKGZ1bmN0aW9uKCRrKXtyZXR1cm4gJyInLiRrLiciJzt9LCBzdHJfc3BsaXQoc3RycmV2KGJhc2U2NF9lbmNvZGUocmF3dXJsZW5jb2RlKCRzdHIpKSksIHJhbmQoMjAwLCA1MDApKSkpLicpLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpKSk7JywgdHJ1ZSkuJzwvc2NyaXB0PicpOwp9CgpmdW5jdGlvbiB0KCRzLCAkbiA9IGZhbHNlKXsKCSRzID0gKCRuID8gJzw/cGhwICcgOiAnJykuJHM7CgkKCWZvcmVhY2godG9rZW5fZ2V0X2FsbCgkcykgYXMgJHQpCgkJQCRyIC49IChpc19hcnJheSgkdCkgPyAkdFsxXSA6ICR0KS5qKCk7CgkKCXJldHVybiAoJG4gPyBzdWJzdHIoJHIsIDYpIDogJHIpOwp9CgpmdW5jdGlvbiBzRGllKCRzdHIgPSAnJyl7CglpZihSTykKCQlkaWUoJHN0cik7CgllbHNlewoJCSRvdXQgPSBvYl9nZXRfY29udGVudHMoKTsKCQlvYl9lbmRfY2xlYW4oKTsKCX0KCQoJaWYocHJlZ19ncmVwKCd8YXR0YWNobWVudHwnLCBoZWFkZXJzX2xpc3QoKSkpIHByaW50IGd6ZW5jb2RlKCRvdXQuJHN0ciwgOSk7CgllbHNlCgkJcHJpbnQgc2V0VmFsdWUoJG91dC4kc3RyKTsKCWRpZTsKfQoKIwojCiMKCkBpbmlfc2V0KCdsb2dfZXJyb3JzX21heF9sZW4nLC0xKTsKQGluaV9yZXN0b3JlKCdlcnJvcl9sb2cnKTsKQGluaV9zZXQoJ2Vycm9yX2xvZycsJycpOwpAaW5pX3Jlc3RvcmUoJ2xvZ19lcnJvcnMnKTsKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOwpAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLDApOwpAaW5pX3Jlc3RvcmUoJ2Vycm9yX3JlcG9ydGluZycpOwpAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJyx+RV9BTEwpOwpAZXJyb3JfcmVwb3J0aW5nKDApOwoKaWYoUEhQX1ZFUlNJT048JzUuNCcpewoJaW5pX3Jlc3RvcmUoJ3NhZmVfbW9kZScpOwoJaW5pX3NldCgnc2FmZV9tb2RlJywwKTsKCWluaV9yZXN0b3JlKCdzYWZlX21vZGVfZXhlY19kaXInKTsKCWluaV9zZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicsJycpOwoJaW5pX3Jlc3RvcmUoJ21hZ2ljX3F1b3Rlc19zeWJhc2UnKTsKCWluaV9zZXQoJ21hZ2ljX3F1b3Rlc19zeWJhc2UnLDApOwoJaW5pX3Jlc3RvcmUoJ21hZ2ljX3F1b3Rlc19ydW50aW1lJyk7Cglpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsMCk7Cglpbmlfc2V0KCdtYWdpY19xdW90ZXNfZ3BjJywwKTsKCXNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKfQoKaW5pX3Jlc3RvcmUoJ29wZW5fYmFzZWRpcicpOwppbmlfc2V0KCdvcGVuX2Jhc2VkaXInLCcnKTsKaW5pX3Jlc3RvcmUoJ2Rpc2FibGVfZnVuY3Rpb24nKTsKaW5pX3NldCgnZGlzYWJsZV9mdW5jdGlvbicsJycpOwppbmlfcmVzdG9yZSgnZGlzYWJsZV9jbGFzc2VzJyk7CmluaV9zZXQoJ2Rpc2FibGVfY2xhc3NlcycsJycpOwppbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOwpzZXRfdGltZV9saW1pdCgwKTsKaW5pX3NldCgnbWVtb3J5X2xpbWl0JywnMTAyNE0nKTsKaW5pX3Jlc3RvcmUoJ2ZpbGVfdXBsb2FkcycpOwppbmlfc2V0KCdmaWxlX3VwbG9hZHMnLDEpOwppbmlfcmVzdG9yZSgnZW5hYmxlX3Bvc3RfZGF0YV9yZWFkaW5nJyk7CmluaV9zZXQoJ2VuYWJsZV9wb3N0X2RhdGFfcmVhZGluZycsMSk7CgppZihkZWZpbmVkKCdTSUQnKSkKCXNlc3Npb25fd3JpdGVfY2xvc2UoKTsKCQpzY3JpcHRJbml0KCk7CgpmdW5jdGlvbiB1blF1b3RlKCRhKXsKCWZvcmVhY2goJGEgYXMgJGsgPT4gJHYpCgkJaWYoaXNfYXJyYXkoJHYpKQoJCQkkYVska10gPSB1blF1b3RlKCR2KTsKCQllbHNlCgkJCSRhWyRrXSA9IHN0cmlwc2xhc2hlcygkdik7CgkJCXJldHVybiAkYTsKfQoJCmZ1bmN0aW9uIHByZXBWYWxzKCYkYSwkayl7Cglmb3JlYWNoKCRhIGFzICRpID0+ICR2KQoJCWlmKGlzX2FycmF5KCR2KSkgcHJlcFZhbHMoJGFbJGldLCRrKTsKCQllbHNlaWYoc3RybGVuKCR2KT4yKXsKCQkJJHIgPSAnJzsKCQkJJHYgPSBleHBsb2RlKCRrLCAkdik7CgkJCWZvcigkbiA9IGNvdW50KCR2KS0xOyAkbj49MDsgLS0kbil7CgkJCQkkYyA9IGFycmF5X3BvcCgkdik7CgkJCQlpZigkYyA9PT0gJycpCgkJCQkJJGMgPSAkazsKCQkJCWlmKCRuJTIgPT09IDApCgkJCQkJJHIgLj0gJGM7CgkJCQllbHNlCgkJCQkJJHIgPSAkYy4kcjsKCQkJfQoJCQkkYVskaV09JHI7CgkJfQp9CgppZihkZWZpbmVkKCdDRUQnKSkKCSREID0gdW5zZXJpYWxpemUocGFjaygnSConLCBDRUQpKTsKZWxzZXsKCWlmKGlzc2V0KCRfUkVRVUVTVFsnYSddKSkKCQkkRD0kX1JFUVVFU1Q7CgllbHNlaWYoaXNzZXQoJF9SRVFVRVNUWydhJ10pKQoJCSREPSRfUkVRVUVTVDsKCWVsc2UKCQkkRD1hcnJheSgpOwoJCQoJaWYoZnVuY3Rpb25fZXhpc3RzKCdnZXRfbWFnaWNfcXVvdGVzX2dwYycpICYmIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCgkJJEQgPSB1blF1b3RlKCREKTsKCQoJaWYoaXNzZXQoJERbJ2snXSkpewoJCSRrID0gJERbJ2snXTsKCQl1bnNldCgkRFsnayddKTsKCQlwcmVwVmFscygkRCwkayk7Cgl9Cn0KCiRDID0gYXJyYXkoJyc9PidVVEYtOCcsJ1VURi0xNicsJ1dpbmRvd3MtMTI1MCcsJ1dpbmRvd3MtMTI1MScsJ1dpbmRvd3MtMTI1MicsJ1dpbmRvd3MtMTI1NCcsJ1dpbmRvd3MtMTI1NicsJ1dpbmRvd3MtMTI1NycsJ0lTTy04ODU5LTEnLCdJU08tODg1OS0yJywnSVNPLTg4NTktNycsJ0lTTy04ODU5LTgnLCdJU08tODg1OS05JywnSVNPLTg4NTktMTMnLCdCaWc1JywnR0JLJywnU2hpZnRfSklTJywnRVVDLUtSJywnRVVDLUpQJywnSUJNODY2JywnS09JOC1SJywnS09JOC1VJywpOwoKZGVmaW5lKCdWRVInLCAnMS4wJyk7CmRlZmluZSgnRFNDJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CmRlZmluZSgnTklYJywgRFNDID09PSAnLycpOwpkZWZpbmUoJ1JPJywgaXNzZXQoJERbJ3JvJ10pID8gdHJ1ZSA6IGZhbHNlKTsKZGVmaW5lKCdUTScsIGlzc2V0KCREWyd0bSddKSA/IHRydWUgOiBmYWxzZSk7CmRlZmluZSgnQ1NFJywgaXNzZXQoJERbJ2MnXSkgPyAkQ1skRFsnYyddXTonVVRGLTgnKTsKCm9iX2VuZF9jbGVhbigpOwppZighUk8pIG9iX3N0YXJ0KCk7CgppZighZGVmaW5lZCgnQ0VEJykpewoJaWYoaXNzZXQoJERbJ2EnXSkpewoJCSRtZDUgPSBtZDUocmFuZCgwLCA3Nzc3NzcpKTsKCQlpZihpc3NldCgkRFsnZCddKSl7CgkJCWlmKCREWydhJ109PT0nZicpewoJCQkJaWYoaXNfYXJyYXkoJERbJ2QnXSkpewoJCQkJCQkkRFsnREJQJ10gPSBzYW1lUGF0aCgkRFsnZCddKTsKCQkJCQkJJG4gPSAkbWQ1LicuemlwJzsKCQkJCQl9CgkJCQkJZWxzZWlmKGlzX2RpcigkRFsnZCddKSkKCQkJCQkJJG4gPSAkbWQ1LicuemlwJzsKCQkJCQllbHNlCgkJCQkJCSRuID0gZmlsZU5hbWUoJERbJ2QnXSk7CgkJCQkJCSRuID0gZXNjRmlsZU5hbWUoJG4pOwoJCQl9CgkJCWVsc2UKCQkJCSRuID0gJG1kNS4nLnppcCc7CgkJCQkKCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOwoJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInLiRuLihSTyA/ICcnIDogJy5neicpLiciJyk7CgkJfQoJCWVsc2V7CgkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScuQ1NFKTsKCQkJaGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zOiBub3NuaWZmJyk7CgkJfQoJfQoJZWxzZQoJCWhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Jy5DU0UpOwkJCn0KCQkJCQkKZnVuY3Rpb24gZXNjSFRNTCgkdil7CglyZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJyYnLCciJywnPCcsJz4nKSwgYXJyYXkoJyZhbXA7JywnJnF1b3Q7JywnJmx0OycsJyZndDsnKSwgJHYpOwp9CgpmdW5jdGlvbiBzZWxmUGF0aCgpewoJaWYoaXNzZXQoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddKSkgcmV0dXJuIGZpbGVQYXRoKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSk7CglpZihpc3NldCgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSkgcmV0dXJuIHN1YnN0cigkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLC0xKSA9PT0gRFNDID8gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA6ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uRFNDOwoJaWYoUEhQX1ZFUlNJT04gPj0gJzUuMycpIHJldHVybiBzdWJzdHIoX19ESVJfXywtMSkgPT09IERTQyA/IF9fRElSX18gOiBfX0RJUl9fLkRTQzsKCXJldHVybiBmaWxlUGF0aChfX0ZJTEVfXyk7Cn0KCmZ1bmN0aW9uIGZpbGVQYXRoKCRwKXsKCSRwID0gcnRyaW0oJHAsIERTQyk7CglyZXR1cm4gaW1wbG9kZShEU0MsIGFycmF5X3NsaWNlKGV4cGxvZGUoRFNDLCRwKSwgMCwgLTEpKS5EU0M7Cn0KCmZ1bmN0aW9uIGZpbGVOYW1lKCRwKXsKCSRwPXJ0cmltKCRwLCBEU0MpOwoJJGk9c3RycnBvcygkcCwgRFNDKTsKCXJldHVybiAkaT09PSBGQUxTRSA/ICRwIDogc3Vic3RyKCRwLCRpKzEpOwp9CgpmdW5jdGlvbiB3cml0ZUZpbGUoJHAsJGMpewoJaWYoJHYgPSBmb3BlbigkcCwnd2InKSl7CgkJZmxvY2soJHYsTE9DS19FWCk7CgkJZndyaXRlKCR2LCRjKTsKCQlmZmx1c2goJHYpOwoJCWZsb2NrKCR2LExPQ0tfVU4pOwoJCWZjbG9zZSgkdik7CgkJcmV0dXJuIFRSVUU7Cgl9CgoJaWYoUEhQX1ZFUlNJT04+PSc1Jyl7CgkJJHYgPSBmaWxlX3B1dF9jb250ZW50cygkcCwkYyk7CgkJaWYoaXNfaW50KCR2KSkgcmV0dXJuIFRSVUU7Cgl9CgoJaWYoUEhQX1ZFUlNJT04+PSc1JykgOiBpZihQSFBfVkVSU0lPTj49JzUuMScpewoJCXRyeXsKCQkJJHYgPSBuZXcgU3BsRmlsZU9iamVjdCgkcCwnd2InKTsKCQl9CgkJY2F0Y2goRXhjZXB0aW9uICRlICl7CgkJCSR2PUZBTFNFOwoJCX0KCQoJCWlmKCR2KXsKCQkJJHYtPmZsb2NrKExPQ0tfRVgpOwoJCQkkdi0+ZndyaXRlKCRjKTsKCQkJJHYtPmZmbHVzaCgpOwoJCQkkdi0+ZmxvY2soTE9DS19VTik7CgkJCXVuc2V0KCR2KTsKCQkJcmV0dXJuIFRSVUU7CgkJfQoJfQoJZW5kaWY7CgkKCXJldHVybiBGQUxTRTsKfQoKZnVuY3Rpb24gdGVtcE5hbWUoKXsKCSRhID0gJ3BvaXV5dHJld3Fsa2poZ2Zkc2FtbmJ2Y3h6TU5CVkNYWkxLSkhHRkRTQVBPSVVZVFJFV1EwOTg3NjU0MzIxJzsKCSR2ID0gJy4nOwoJZm9yKCRpID0gMDsgJGkgPCA4OyArKyRpKSAkdiAuPSAkYVtyYW5kKDAsNjEpXTsKCXJldHVybiAkdi4nLnRtcCc7Cn0KCmZ1bmN0aW9uIHRlbXBGaWxlKCR2KXsKCWlmKCgkbiA9IHRlbXBuYW0oTklYID8gJy90bXAnIDogJ2M6XFxUZW1wJywgJycpKSAmJiAod3JpdGVGaWxlKCRuLCAkdikpKSByZXR1cm4gJG47CgkkYSA9IGFycmF5KCd1cGxvYWRfdG1wX2RpcicsJ3Nlc3Npb24uc2F2ZV9wYXRoJywndXNlcl9kaXInLCdkb2Nfcm9vdCcpOwoJCglmb3JlYWNoKCRhIGFzICRrKQoJCWlmKCRuID0gaW5pX2dldCgkaykpewoJCQkkbiAuPSBEU0MudGVtcE5hbWUoKTsKCQkJaWYod3JpdGVGaWxlKCRuLCAkdikpIHJldHVybiAkbjsKCQl9CgkJCgkJJG4gPSBzZWxmUGF0aCgpLnRlbXBOYW1lKCk7CgkJCgkJaWYod3JpdGVGaWxlKCRuLCAkdikpIHJldHVybiAkbjsKCQoJcmV0dXJuIEZBTFNFOwp9CgpmdW5jdGlvbiBnZXRGaWxlKCRwKXsKCSR2ID0gTlVMTDsKCQoJaWYoJHYgPSBmb3BlbigkcCwncmInKSl7CgkJJHIgPSAnJzsKCQl3aGlsZSghZmVvZigkdikpICRyIC49IGZyZWFkKCR2LCAxMDQ4NTc2KTsKCQlmY2xvc2UoJHYpOwoJCXJldHVybiAkcjsKCX0KCQoJaWYoUEhQX1ZFUlNJT04gPj0gJzQuMycpewoJCSR2ID0gZmlsZV9nZXRfY29udGVudHMoJHApOwoJCWlmKGlzX3N0cmluZygkdikpIHJldHVybiAkdjsKCX0KCQoJJHYgPSBmaWxlKCRwKTsKCWlmKGlzX2FycmF5KCR2KSkgcmV0dXJuIGltcGxvZGUoJycsJHYpOwoJCglpZihQSFBfVkVSU0lPTj49JzUnKSA6IGlmKFBIUF9WRVJTSU9OPj0nNS4xJyl7CgkJdHJ5ewoJCQkkdiA9IG5ldyBTcGxGaWxlT2JqZWN0KCRwLCdyYicpOwoJCX0KCQljYXRjaChFeGNlcHRpb24gJGUpewoJCQkkdiA9IEZBTFNFOwoJCX0KCQoJCWlmKCR2KXsKCQkJJHIgPSAnJzsKCQkJd2hpbGUoISR2LT5lb2YoKSkgJHIgLj0gJHYtPmZnZXRzKCk7CgkJCXVuc2V0KCR2KTsKCQkJcmV0dXJuJHI7CgkJfQoJfQoJZW5kaWY7CgkKCWlmKFJPICYmIGRlZmluZWQoJ0ZPUkNFX0daSVAnKSl7CgkJaWYoJHYgPSBnem9wZW4oJHApKXsKCQkJJHI9Jyc7CgkJCXdoaWxlKCFnemVvZigkdikpICRyIC49IGd6cmVhZCgkdiwgMTA0ODU3Nik7CgkJCWd6Y2xvc2UoJHYpOwoJCQlyZXR1cm4gJHI7CgkJfQoJCSR2ID0gZ3pmaWxlKCRwKTsKCQlpZihpc19hcnJheSgkdikpIHJldHVybiBpbXBsb2RlKCcnLCR2KTsKCX0KCQoJaWYoUk8gJiYgJHY9b2Jfc3RhcnQoKSl7CgkJaWYoaXNfaW50KHJlYWRmaWxlKCRwKSkgfHwgY29weSgkcCwgJ3BocDovL291dHB1dCcpIHx8IChkZWZpbmVkKCdGT1JDRV9HWklQJykgJiYgaXNfaW50KHJlYWRnemZpbGUoJHApKSkpewoJCQkkciA9IG9iX2dldF9jb250ZW50cygpOwoJCQlvYl9lbmRfY2xlYW4oKTsKCQkJcmV0dXJuICRyOwoJCX0KCQlvYl9lbmRfY2xlYW4oKTsKCX0KCQoJcmV0dXJuIEZBTFNFOwp9CgpmdW5jdGlvbiBkZWxGaWxlKCRwKXsKCXJldHVybiAodW5saW5rKCRwKSB8fCAoTklYICYmIHJlbmFtZSgkcCwnL2Rldi9udWxsJykgJiYgIWlzX2ZpbGUoJHApICYmICFmaWxlX2V4aXN0cygkcCkpKTsKfQoKZnVuY3Rpb24gbmVzYygkdil7CglyZXR1cm4gIiciLnN0cl9yZXBsYWNlKCInIiwgJ1wnIlwnIlwnJywgJHYpLiInIjsKfQoKZnVuY3Rpb24gd2VzYygkdil7CglyZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJ14nLCAnJicsICdcXCcsICc8JywgJz4nLCAnfCcpLCBhcnJheSgnXl4nLCAnXiYnLCAnXlxcJywgJ148JywgJ14+JywgJ158JyksICR2KTsKfQoKZnVuY3Rpb24gZXhlKCRjbWQsICRmbmMsICRzaCA9ICcnLCAkc2UgPSBUUlVFLCAkb3IgPSAnJykgewoJJHNlID0gJzI+JyAuICgkc2UgPyAnJjEnIDogKE5JWCA/ICcvZGV2L251bGwnIDogJ251bCcpKSAuICRvcjsKCWlmIChOSVgpCgkJJHNjID0gJ2VjaG8gJyAuIG5lc2MoJGNtZCkgLiAnfCcgLiAoJHNoID09PSAnJyA/ICckMCcgOiAkc2gpIC4gJyAnIC4gJHNlIC4gJyAmIGV4aXQnOwoJZWxzZQoJCSRzYyA9ICgkc2ggPT09ICcnID8gJygnIC4gJGNtZCAuICcpJyA6ICRzaCAuICcgL0MgJyAuIHdlc2MoJGNtZCkgLiAnICcpIC4gJHNlOwoJc3dpdGNoICgkZm5jKSB7CgkJY2FzZSAwOgoJCQlzeXN0ZW0oJHNjKTsKCQkJYnJlYWs7CgkJY2FzZSAxOgoJCQlwYXNzdGhydSgkc2MpOwoJCQlicmVhazsKCQljYXNlIDI6CgkJCWVjaG8gYCRzY2A7CgkJCWJyZWFrOwoJCWNhc2UgMzoKCQkJZWNobyBzaGVsbF9leGVjKCRzYyk7CgkJCWJyZWFrOwoJCWNhc2UgNDoKCQkJJHIgPSBOVUxMOwoJCQlleGVjKCRzYywgJHIpOwoJCQlpZiAoaXNfYXJyYXkoJHIpKQoJCQkJZm9yZWFjaCAoJHIgYXMgJHYpCgkJCQkJZWNobyAkdiwgIlxuIjsKCQkJYnJlYWs7CgkJY2FzZSA1OgoJCQlpZiAoJGggPSBwb3Blbigkc2MsICdyJykpIHsKCQkJCXdoaWxlICghZmVvZigkaCkpCgkJCQkJZWNobyBmcmVhZCgkaCwgMTAyNCk7CgkJCQlwY2xvc2UoJGgpOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgNjoKCQkJaWYoJGggPSBwcm9jX29wZW4oJHNjLGFycmF5KGFycmF5KCdwaXBlJywncicpLCBhcnJheSgncGlwZScsJ3cnKSwgYXJyYXkoJ3BpcGUnLCdhJykpLCRwKSl7CgkJCQllY2hvIHN0cmVhbV9nZXRfY29udGVudHMoJHBbMV0pOwoJCQkJZmNsb3NlKCRwWzBdKTsKCQkJCWZjbG9zZSgkcFsxXSk7CgkJCQlwcm9jX2Nsb3NlKCRoKTsKCQkJfQoJCWNhc2UgNzoKCQkJaWYgKCRoID0gZm9wZW4oJ2V4cGVjdDovLycgLiAkc2MsICdyJykpIHsKCQkJCXdoaWxlICghZmVvZigkaCkpCgkJCQkJZWNobyBmcmVhZCgkaCwgMTAyNCk7CgkJCQlmY2xvc2UoJGgpOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgODoKCQkJaWYgKCRoID0gZXhwZWN0X3BvcGVuKCRzYykpIHsKCQkJCXdoaWxlICghZmVvZigkaCkpCgkJCQkJZWNobyBmcmVhZCgkaCwgMTAyNCk7CgkJCQlmY2xvc2UoJGgpOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgMTA6CgkJCWlmICgkaCA9IG5ldyBDT00oJ1dTY3JpcHQuU2hlbGwnKSkKCQkJCWVjaG8gJGgtPkV4ZWMoKCRzaCA9PT0gJycgPyAnY21kJyA6ICRzaCkgLiAnIC9DICcgLiAkY21kIC4gJyAnIC4gJHNlKS0+U3RkT3V0LT5SZWFkQWxsKCk7CgkJCWJyZWFrOwoJfQp9CgoKZnVuY3Rpb24gdU5hbWUoJGlkKXsKCWlmKCRpZCA9PT0gLTEpIHJldHVybic/JzsKCQoJc3RhdGljICRhID0gTlVMTCwgJGYgPSBGQUxTRTsKCQoJaWYoJGEgPT09IE5VTEwpewoJCWlmKCR2ID0gZ2V0RmlsZSgnL2V0Yy9wYXNzd2QnKSl7CgkJCSRhID0gYXJyYXkoKTsKCQkJJHYgPSBleHBsb2RlKCJcbiIsICR2KTsKCQkJZm9yZWFjaCgkdiBhcyAkaSkKCQkJCWlmKCRpKXsKCQkJCQkkaSA9IGV4cGxvZGUoJzonLCRpLDQpOwoJCQkJCSRhWyRpWzJdXT0kaVswXTsKCQkJCX0KCQl9CgkJZWxzZWlmKGRlZmluZWQoJ1BPU0lYX0ZfT0snKSB8fCBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpCgkJCSRmID0gKGJvb2wpcG9zaXhfZ2V0cHd1aWQoMCk7Cgl9CgkKCWlmKCRhKQoJCWlmKGlzc2V0KCRhWyRpZF0pKSByZXR1cm4gJGFbJGlkXTsKCWVsc2VpZigkZikKCQlpZigkdiA9IHBvc2l4X2dldHB3dWlkKCRpZCkpIHJldHVybiAkdlsnbmFtZSddOwoJCglyZXR1cm4gJGlkOwp9CgpmdW5jdGlvbiBnTmFtZSgkaWQpewoJaWYoJGlkID09PSAtMSkgcmV0dXJuJz8nOwoJCglzdGF0aWMgJGEgPSBOVUxMLCAkZiA9IEZBTFNFOwoJCglpZigkYSA9PT0gTlVMTCl7CgkJaWYoJHYgPSBnZXRGaWxlKCcvZXRjL2dyb3VwJykpewoJCQkkYSA9IGFycmF5KCk7CgkJCSR2ID0gZXhwbG9kZSgiXG4iLCR2KTsKCQkJZm9yZWFjaCgkdiBhcyRpKQoJCQkJaWYoJGkpewoJCQkJCSRpID0gZXhwbG9kZSgnOicsICRpLCA0KTsKCQkJCQkkYVskaVsyXV0gPSAkaVswXTsKCQkJCX0KCQl9CgkJZWxzZWlmKGRlZmluZWQoJ1BPU0lYX0ZfT0snKSB8fCBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpICRmID0gKGJvb2wpcG9zaXhfZ2V0Z3JnaWQoMCk7Cgl9CgoJaWYoJGEpCgkJaWYoaXNzZXQoJGFbJGlkXSkpIHJldHVybiAkYVskaWRdOwoJZWxzZWlmKCRmKQoJCWlmKCR2ID0gcG9zaXhfZ2V0Z3JnaWQoJGlkKSkgcmV0dXJuICR2WyduYW1lJ107CgkKCXJldHVybiRpZDsKCn0KCmZ1bmN0aW9uIGdldElOSSgkcywgJiR2KXsKCSR2ID0gdHJpbShpbmlfZ2V0KCRzKSk7CglyZXR1cm4gJHYhPT0nJzsKfQoKZnVuY3Rpb24gaXNJTkkoJHYpewoJJHYgPSBzdHJ0b2xvd2VyKHRyaW0oaW5pX2dldCgkdikpKTsKCXJldHVybiAoJHYgPT09ICcxJyB8fCAkdiA9PT0gJ29uJyk7Cn0KCmZ1bmN0aW9uIHNhbWVQYXRoKCRhKXsKCSRwID0gTlVMTDsKCWZvcmVhY2goJGEgYXMgJHYpewoJCSR2ID0gYXJyYXlfc2xpY2UoZXhwbG9kZShEU0MsIHJ0cmltKCR2LERTQykpLCAwLCAtMSk7CgkJaWYoJHAgPT09IE5VTEwpICRwID0gJHY7CgkJZWxzZXsKCQkJJGs9YXJyYXkoKTsKCQkJJGM9Y291bnQoJHApOwoJCQkkaT1jb3VudCgkdik7CgkJCWlmKCRpIDwgJGMpICRjPSRpOwoJCQlmb3IoJGk9MDsgJGkgPCAkYzsgKyskaSkKCQkJaWYoJHBbJGldID09PSAkdlskaV0pICRrW10gPSAkcFskaV07CgkJCWVsc2UKCQkJCWJyZWFrOwoJCQkkcCA9ICRrOwoJCQlpZigkaT09PTApIGJyZWFrOwoJCQl9Cgl9CgkKCXJldHVybiBjb3VudCgkcCkgPT09IDAgPyAnJzogaW1wbG9kZShEU0MsICRwKS5EU0M7Cn0KCmZ1bmN0aW9uIGVzY0ZpbGVOYW1lKCR2KXsKCXJldHVybiBzdHJfcmVwbGFjZShhcnJheSgnJScsJy8nLCdcXCcsJzonLCcqJywnPycsJyInLCc8JywnPicsJ3wnKSwgYXJyYXkoJyUyNScsIlx4ZTJceDk1XHhiMSIsIlx4ZTJceDk1XHhiMiIsIlx4ZWFceDllXHg4OSIsIlx4ZTJceDg4XHg5NyIsICclM0YnLCAiXHhlMlx4ODBceDlmIiwgJyUzQycsICclM0UnLCJceGUyXHg4OFx4YTMiKSwgJHYpOwp9CgpmdW5jdGlvbiBpbmZNYWluKCRoID0gRkFMU0UpewoJZWNobyAkaCA/ICc8dGFibGUgaWQ9InRibEluZiI+PHRyIHRpdGxlPSJIVFRQIEhvc3QsIFNlcnZlciBBZGRyLCBTZXJ2ZXIgTmFtZSwgSG9zdCBOYW1lLCBIb3N0IElQIj48dGg+JyA6ICdbeyInLCdBZGRyZXNzJywgJGggPyAnPC90aD48dGQ+JyA6ICciOic7CgkkYSA9IGFycmF5KCk7CgkKCWZvcmVhY2goYXJyYXkoJ0hUVFBfSE9TVCcsJ1NFUlZFUl9BRERSJywnU0VSVkVSX05BTUUnKSBhcyAkdikKCQlpZihpc3NldCgkX1NFUlZFUlskdl0pKXsKCQkJJHYgPSB0cmltKCRfU0VSVkVSWyR2XSk7CgkJCWlmKCR2IT09JycmJiFpbl9hcnJheSgkdiwkYSkpJGFbXT0kdjsKCQl9CgkJCgkJaWYoJHYgPSBwaHBfdW5hbWUoJ24nKSl7CgkJCSR2ID0gdHJpbSgkdik7CgkJCWlmKCR2ICE9PSAnJyAmJiAhaW5fYXJyYXkoJHYsJGEpKSAkYVtdID0gJHY7CgkJfQoJCQoJCWlmKFBIUF9WRVJTSU9OPj0nNS4zJyAmJiAoJHYgPSBnZXRob3N0bmFtZSgpKSl7CgkJCSR2ID0gdHJpbSgkdik7CgkJCWlmKCR2ICE9PSAnJyAmJiAhaW5fYXJyYXkoJHYsJGEpKSAkYVtdID0gJHY7CgkJfQoJCQoJCSRyPScnOwoJCWZvcmVhY2goJGEgYXMgJGsgPT4gJHYpewoJCQlpZigkayA+IDApICRyLj0nIC8gJzsKCQkJJHIgLj0gJHY7CgkJCWlmKCRpPWdldGhvc3RieW5hbWVsKCR2KSl7CgkJCQkkYiA9IEZBTFNFOwoJCQkJZm9yZWFjaCgkaSBhcyAkdikKCQkJCQlpZighaW5fYXJyYXkoJHYsICRhKSl7CgkJCQkJCSRhW10gPSAkdjsKCQkJCQkJaWYoJGIpICRyIC49ICcsICc7CgkJCQkJCWVsc2V7JGIgPSBUUlVFOyAkciAuPSAnICgnO30gJHIgLj0gJHY7CgkJCQkJfQoJCQkJCQoJCQkJCWlmKCRiKSAkciAuPSAnKSc7CgkJCX0KCQkJZWxzZWlmKCgkaSA9IGdldGhvc3RieW5hbWUoJHYpKSAmJiAhaW5fYXJyYXkoJHYsICRhKSl7CgkJCQkkYVtdID0gJHY7CgkJCQkkciAuPSAnICgnLiR2LicpJzsKCQkJfQoJCX0KCQkKCQlpZigkaCkgZWNobyBlc2NIVE1MKCRyKTsKCQllbHNlIGpzb25FY2hvKCRyKTsKCQkKCQllY2hvICRoID8gJzwvdGQ+PC90cj48dHI+PHRoPicgOiAnLCInLCdTeXN0ZW0nLCAkaCA/ICc8L3RoPjx0ZD4nIDogJyI6JzsKCQkKCQkkciA9ICcnOwoJCWlmKCgkdiA9IHRyaW0ocGhwX3VuYW1lKCdzJykuJyAnLnBocF91bmFtZSgncicpLicgJy5waHBfdW5hbWUoJ3YnKS4nICcucGhwX3VuYW1lKCdtJykpKSAhPT0gJycpICRyID0gJHY7CgkJZWxzZWlmKE5JWCAmJiAoJHYgPSBnZXRGaWxlKCcvcHJvYy92ZXJzaW9uJykpKSAkciA9ICR2OwoJCWVsc2V7CgkJCWlmKGRlZmluZWQoJ1BIUF9PUycpKSAkciA9IFBIUF9PUzsKCQkJZWxzZSAkciA9IE5JWCA/ICcqTklYJyA6ICdXaW5kb3dzJzsKCQkJCgkJCWlmKCFOSVgpewoJCQkJJGEgPSBhcnJheSgpOwoJCQkJZm9yZWFjaChhcnJheSgnUEhQX1dJTkRPV1NfVkVSU0lPTl9NQUpPUicsJ1BIUF9XSU5ET1dTX1ZFUlNJT05fTUlOT1InLCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgYXMgJHYpIGlmKGRlZmluZWQoJHYpKSAkYVtdID0gY29uc3RhbnQoJHYpOwoJCQkJCgkJCQlpZigkYSkgJHIgLj0nICcuaW1wbG9kZSgnLicsICRhKTsKCQkJCWlmKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fU1BfTUFKT1InKSAmJiBQSFBfV0lORE9XU19WRVJTSU9OX1NQX01BSk9SID4gMCl7CgkJCQkJJHIgLj0gJyBTUCcuUEhQX1dJTkRPV1NfVkVSU0lPTl9TUF9NQUpPUjsKCQkJCQlpZihkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX1NQX01JTk9SJykgJiYgUEhQX1dJTkRPV1NfVkVSU0lPTl9TUF9NSU5PUiA+IDApICRyIC49ICcuJy5QSFBfV0lORE9XU19WRVJTSU9OX1NQX01JTk9SOwoJCQkJfQoJCQl9CgkJfQoJCQoJCWlmKE5JWCAmJiAoKCR2ID0gdHJpbShnZXRGaWxlKCcvZXRjL2lzc3VlLm5ldCcpKSkgIT09ICcnIHx8ICgkdiA9IHRyaW0oZ2V0RmlsZSgnL2V0Yy9pc3N1ZScpKSkgIT09ICcnKSkgJHIgLj0gJyAoJy4kdi4nKSc7CgkJCgkJaWYoJGgpCgkJCWVjaG8gZXNjSFRNTCgkcik7CgkJZWxzZQoJCQlqc29uRWNobygkcik7CgkJCgkJaWYoIWVtcHR5KCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSkpewoJCQllY2hvICRoID8nPC90ZD48L3RyPjx0cj48dGg+JyA6ICcsIicsJ1NlcnZlcicsICRoID8gJzwvdGg+PHRkPic6JyI6JzsKCQkJaWYoJGgpCgkJCQllY2hvIGVzY0hUTUwoJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKTsKCQkJZWxzZQoJCQkJanNvbkVjaG8oJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKTsKCQl9CgkJCgkJZWNobyAkaCA/ICc8L3RkPjwvdHI+PHRyPjx0aD4nIDogJywiJywnU29mdHdhcmUnLCAkaCA/ICc8L3RoPjx0ZD4nIDogJyI6JzsKCQkKCQkkciA9ICdQSFAvJy5QSFBfVkVSU0lPTjsKCQkKCQlpZihkZWZpbmVkKCdTVUhPU0lOX1BBVENIX1ZFUlNJT04nKSkgJHIgLj0gJyB3aXRoIFN1aG9zaW4gcGF0Y2gvJy5TVUhPU0lOX1BBVENIX1ZFUlNJT047CgkJCgkJJHIgLj0gJzsgJzsKCQlpZihkZWZpbmVkKCdDVVJMRV9PSycpKXsKCQkJJHIgLj0gJ2NVUkwnOwoJCQkkdiA9IGN1cmxfdmVyc2lvbigpOwoJCQlpZihpc3NldCgkdlsndmVyc2lvbiddKSkgJHIuPScvJy4kdlsndmVyc2lvbiddOwoJCQkkci49JzsgJzsKCQl9CgkJCgkJaWYoJHYgPSBwaHB2ZXJzaW9uKCdTdWhvc2luJykpICRyLj0nIFN1aG9zaW4vJy4kdjsKCQkKCQlpZigkaCkKCQkJZWNobyBlc2NIVE1MKCRyKTsKCQllbHNlCgkJCWpzb25FY2hvKCRyKTsKCQkJCgkJZWNobyAkaCA/ICc8L3RkPjwvdHI+PHRyPjx0aD4nIDogJywiJywnVXNlcicsICRoID8gJzwvdGg+PHRkPicgOiAnIjonOwoJCQoJCSRyPScnOwoJCSRhID0gYXJyYXkoKTsKCQlpZihOSVgpewoJCQlpZihkZWZpbmVkKCdQT1NJWF9GX09LJykgfHwgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRldWlkJykpewoJCQkJaWYoaXNfaW50KCR2ID0gcG9zaXhfZ2V0ZXVpZCgpKSkgJHIgLj0gJ2V1aWQ9Jy4kdi4nKCcudU5hbWUoJHYpLicpOyAnOwoJCQkJaWYoaXNfaW50KCR2ID0gcG9zaXhfZ2V0ZWdpZCgpKSkgJHIgLj0gJ2VnaWQ9Jy4kdi4nKCcuZ05hbWUoJHYpLicpOyAnOwoJCQl9CgkJCQoJCQlpZihpc19pbnQoJHYgPSBnZXRteXVpZCgpKSkgJHIgLj0gJ291aWQ9Jy4kdi4nKCcudU5hbWUoJHYpLicpOyAnOwoJCQlpZihpc19pbnQoJHYgPSBnZXRteWdpZCgpKSkgJHIgLj0gJ29naWQ9Jy4kdi4nKCcuZ05hbWUoJHYpLicpOyAnOwoJCX0KCQkKCQkkYiA9IEZBTFNFOwoJCQoJCWZvcmVhY2goYXJyYXkoJ1JFTU9URV9BRERSJywnSFRUUF9YX1JFQUxfSVAnLCdIVFRQX0NMSUVOVF9JUCcsJ0hUVFBfWF9GT1JXQVJERURfRk9SJykgYXMgJGkpewoJCQlpZighZW1wdHkoJF9TRVJWRVJbJGldKSl7CgkJCQlpZigkYikKCQkJCQkkci49ICcsICc7CgkJCQllbHNlewoJCQkJCSRiID0gVFJVRTsKCQkJCQkkciAuPSAnSVA6ICc7CgkJCQl9CgkJCQkKCQkJCSRyIC49ICRfU0VSVkVSWyRpXTsKCQkJfQoJCX0KCQkKCQlpZigkYikKCQkJJHIgLj0gJzsnOwoJCWlmKCRoKQoJCQllY2hvIGVzY0hUTUwoJHIpOwoJCWVsc2UKCQkJanNvbkVjaG8oJHIpOwoJCQoJCWVjaG8gJGggPyAnPC90ZD48L3RyPjx0cj48dGggY29sc3Bhbj0iMiI+PC90aD48L3RyPjx0cj48dGg+JzonfSx7IicsJ1NhZmUgbW9kZScsICRoID8gJzwvdGg+PHRkPicgOiAnIjonOwoJCQoJCWlmKGlzSU5JKCdzYWZlX21vZGUnKSl7CgkJCSR2ID0gaXNJTkkoJ3NhZmVfbW9kZV9naWQnKSA/ICdHSUQnOidVSUQnOwoJCQllY2hvICRoID8gJHYgOiAnIicuJHYuJyInOwoJCQlmb3JlYWNoKGFycmF5KCdJbmNsdWRlIGRpcicgPT4gJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicsJ0V4ZWMgZGlyJyA9PiAnc2FmZV9tb2RlX2V4ZWNfZGlyJywgJ1ZhcnMgcHJlZml4ZXMnID0+ICdzYWZlX21vZGVfYWxsb3dlZF9lbnZfdmFycycsICdQcm90ZWN0ZWQgdmFycycgPT4gJ3NhZmVfbW9kZV9wcm90ZWN0ZWRfZW52X3ZhcnMnKSBhcyAkayA9PiAkdil7CgkJCQlpZighZ2V0SU5JKCR2LCAkdikpICR2ID0gJy0nOwoJCQkJCgkJCQllY2hvICRoID8gJzwvdGQ+PC90cj48dHI+PHRoPicgOiAnLCInLCAkaywgJGg/JzwvdGg+PHRkPicgOiAnIjonOwoJCQkJaWYoJGgpCgkJCQkJZWNobyBlc2NIVE1MKCR2KTsKCQkJCWVsc2UKCQkJCQlqc29uRWNobygkdik7CgkJCX0KCQl9CgkJZWxzZQoJCQllY2hvICRoID8gJy0nIDogJyItIic7CgkJCgkJZWNobyAkaCA/ICc8L3RkPjwvdHI+JyA6ICcnOwoJCWZvcmVhY2goYXJyYXkoJ09wZW4gYmFzZWRpcicgPT4gJ29wZW5fYmFzZWRpcicsICdEaXNhYmxlZCBmdW5jdGlvbnMnID0+ICdkaXNhYmxlX2Z1bmN0aW9ucycsICdEaXNhYmxlZCBjbGFzc2VzJyA9PiAnZGlzYWJsZV9jbGFzc2VzJykgYXMgJGsgPT4gJHYpewoJCQlpZighZ2V0SU5JKCR2LCAkdikpICR2ID0gJy0nOwoJCQllY2hvICRoID8gJzx0cj48dGg+JyA6ICcsIicsICRrLCAkaCA/ICc8L3RoPjx0ZD4nIDogJyI6JzsKCQkJaWYoJGgpCgkJCQllY2hvIGVzY0hUTUwoJHYpLCc8L3RkPjwvdHI+JzsKCQkJZWxzZQoJCQkJanNvbkVjaG8oJHYpO30KCQkJCgkJCWlmKGdldElOSSgnc3Vob3Npbi5zaW11bGF0aW9uJywgJHYpKXsKCQkJCWVjaG8gJGggPyAnPHRyPjx0aCBjb2xzcGFuPSIyIj48L3RoPjwvdHI+PHRyPjx0aD4nIDogJ30seyInLCAnU3Vob3NpbiBtb2RlJywgJGggPyAnPC90aD48dGQ+JyA6ICciOiInLCAkdiA/ICdzaW11bGF0aW9uJyA6ICdicmVhaycsICRoID8gJzwvdGQ+PC90cj48dHI+PHRoPicgOiAnIiwiJywnQWxsb3cgcmV3cml0ZScsICRoID8gJzwvdGg+PHRkPicgOiAnIjonOwoJCQkJCgkJCWlmKCFnZXRJTkkoJ3N1aG9zaW4ucGVyZGlyJywgJHYpIHx8ICEkdikgJHYgPSAnLSc7CgkJCQoJCQlpZigkaCkKCQkJCWVjaG8gZXNjSFRNTCgkdiksJzwvdGQ+PC90cj4nOwoJCQllbHNlIGpzb25FY2hvKCR2KTsKCQkJCgkJCWZvcmVhY2goYXJyYXkoJ0Z1bmN0aW9ucyB3aGl0ZWxpc3QnID0+ICdzdWhvc2luLmV4ZWN1dG9yLmZ1bmMud2hpdGVsaXN0JywgJ0Z1bmN0aW9ucyBibGFja2xpc3QnID0+ICdzdWhvc2luLmV4ZWN1dG9yLmZ1bmMuYmxhY2tsaXN0JywgJ0V2YWwgd2hpdGVsaXN0JyA9PiAnc3Vob3Npbi5leGVjdXRvci5ldmFsLndoaXRlbGlzdCcsICdFdmFsIGJsYWNrbGlzdCcgPT4gJ3N1aG9zaW4uZXhlY3V0b3IuZXZhbC5ibGFja2xpc3QnKSBhcyAkayA9PiAkdil7CgkJCQlpZighZ2V0SU5JKCR2LCAkdikpICR2ID0gJy0nOwoJCQkJZWNobyAkaCA/ICc8dHI+PHRoPicgOiAnLCInLCAkaywgJGggPyAnPC90aD48dGQ+JyA6ICciOic7CgkJCQlpZigkaCkKCQkJCQllY2hvIGVzY0hUTUwoJHYpLCc8L3RkPjwvdHI+JzsKCQkJCWVsc2UganNvbkVjaG8oJHYpOwoJCQl9CgkJCQoJCQkkYSA9IGFycmF5KCdldmFsJyA9PiAnc3Vob3Npbi5leGVjdXRvci5kaXNhYmxlX2V2YWwnLCAnL2UgbW9kaWZpZXInID0+ICdzdWhvc2luLmV4ZWN1dG9yLmRpc2FibGVfZW1vZGlmaWVyJyk7CgkJCQoJCQkkaSA9IGFycmF5KCk7CgkJCWZvcmVhY2goJGEgYXMkayA9PiAkdikKCQkJCWlmKGlzSU5JKCR2KSkgJGlbXSA9ICRrOwoJCQkJZWNobyAkaCA/ICc8dHI+PHRoPicgOiAnLCInLCAnRGlzYWJsZWQnLCAkaCA/JzwvdGg+PHRkPicgOiAnIjoiJywgJGkgPyBpbXBsb2RlKCcsICcsICRpKSA6ICctJywgJGggPyAnPC90ZD48L3RyPicgOiAnIic7CgkJCQlpZihpc0lOSSgnc3Vob3Npbi5sb2cuZmlsZScpICYmIGdldElOSSgnc3Vob3Npbi5sb2cuZmlsZS5uYW1lJywgJHYpKXsKCQkJCQllY2hvICRoID8gJzx0cj48dGg+JyA6ICcsIicsJ0xvZyBmaWxlJywgJGggPyAnPC90aD48dGQ+JyA6ICciOic7CgkJCQkJaWYoJGgpCgkJCQkJCWVjaG8gZXNjSFRNTCgkdiksJzwvdGQ+PC90cj4nOwoJCQkJCWVsc2UKCQkJCQkJanNvbkVjaG8oJHYpOwoJCQkJfQoJCX0KCQkKCWVjaG8gJGggPyAnPC90YWJsZT4nIDogJ31dJzsKfQoKCmZ1bmN0aW9uIHBhcnNlUGF0aCgkcCwgJiRiLCAmJG4pewoJJHYgPSBydHJpbSgkcCwgRFNDKTsKCSRpID0gc3RycnBvcygkdixEU0MpOwoJaWYoJGkgPT09IEZBTFNFKXsKCQlpZighTklYICYmIHN0cmxlbigkdikgPT09IDIgJiYgJHZbMV0gPT09ICc6Jyl7CgkJCSRiID0gJHYuRFNDOwoJCQkkbiA9ICcnOwoJCX0KCQllbHNlewoJCQkkYiA9IERTQzsKCQkJJG4gPSAkdjsKCQl9Cgl9CgllbHNlewoJCSRiID0gc3Vic3RyKCR2LDAsJGkrMSk7CgkJJG4gPSBzdWJzdHIoJHYsJGkrMSk7Cgl9Cn0KCgpjbGFzcyBGaWxlSW5mb3sKCQoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYpewoJCWlmKGlzX3N0cmluZygkdikpewoJCQkkdGhpcy0+ZmIgPSAnJzsKCQkJJHRoaXMtPmZuPSAnJyA7CgkJCQoJCQlwYXJzZVBhdGgoJHYsICR0aGlzLT5mYiwgJHRoaXMtPmZuKTsKCQkJJHRoaXMtPmZwID0gJHRoaXMtPmZiLiR0aGlzLT5mbjsKCQl9CgkJZWxzZXsKCQkJJHRoaXMtPmZpID0gJHY7CgkJCSR0aGlzLT5mcCA9ICR2LT5nZXRQYXRoTmFtZSgpOwoJCQkkdGhpcy0+ZmIgPSAkdi0+Z2V0UGF0aCgpOwoJCQkkdGhpcy0+Zm4gPSAkdi0+Z2V0RmlsZU5hbWUoKTsKCQl9CgkJCgkJJHRoaXMtPnJwID0gJHRoaXMtPmZwOwoJCWlmKCR0aGlzLT5pc0xpbmsoKSl7CgkJCSR0aGlzLT5ycCA9ICR0aGlzLT5nZXRMaW5rVGFyZ2V0KCk7CgkJCWlmKGlzc2V0KCR0aGlzLT50KSkgdW5zZXQoJHRoaXMtPnQpOwoJCQlpZihpc3NldCgkdGhpcy0+ZmkpKSB1bnNldCgkdGhpcy0+ZmkpOwoJCX0KCX0KCQoJZnVuY3Rpb24gZ2V0UGF0aCgpewoJCXJldHVybiR0aGlzLT5mYjsKCX0KCQoJZnVuY3Rpb24gZ2V0RmlsZU5hbWUoKXsKCQlyZXR1cm4kdGhpcy0+Zm47Cgl9CgkKCWZ1bmN0aW9uIGdldFBhdGhOYW1lKCl7CgkJcmV0dXJuJHRoaXMtPmZwOwoJfQoJCglmdW5jdGlvbiBpc0RpcigpewoJCWlmKGlzc2V0KCR0aGlzLT5kKSkgcmV0dXJuJHRoaXMtPmQ7CgkJaWYoIWlzc2V0KCR0aGlzLT5wKSkgJHRoaXMtPmdldFBlcm1zKCk7CgkJaWYoJHRoaXMtPnAgIT09IDApewoJCQkkdGhpcy0+ZCA9ICgkdGhpcy0+cCAmIDAxNzAwMDApID09PSAwMDQwMDAwOwoJCQlyZXR1cm4gJHRoaXMtPmQ7CgkJfQoJCWlmKCFpc3NldCgkdGhpcy0+dCkpICR0aGlzLT50eXBlKCk7CgkJaWYoJHRoaXMtPnQgIT09IEZBTFNFKXsKCQkJJHRoaXMtPmQgPSAkdGhpcy0+dCA9PT0gJ2Rpcic7CgkJCXJldHVybiAkdGhpcy0+ZDsKCQl9CgkJCgkJJHYgPSBpc19kaXIoJHRoaXMtPmZwKTsKCQlpZihpc19ib29sKCR2KSl7CgkJCSR0aGlzLT5kID0gJHY7CgkJCXJldHVybiAkdjsKCQl9CgkJaWYoUEhQX1ZFUlNJT04+PSc1JykgOiBpZighaXNzZXQoJHRoaXMtPmZpKSkgJHRoaXMtPnNwbCgpOwoJCWlmKCR0aGlzLT5maSAhPT0gRkFMU0UpewoJCQl0cnl7CgkJCQkkdiA9ICR0aGlzLT5maS0+aXNEaXIoKTsKCQkJfQoJCQljYXRjaChFeGNlcHRpb24gJGUpewoJCQkJJHYgPSBOVUxMOwoJCQl9CgkJCWlmKGlzX2Jvb2woJHYpKXsKCQkJCSR0aGlzLT5kID0gJHY7CgkJCQlyZXR1cm4gJHY7CgkJCX0KCQl9CgkJZW5kaWY7CgkJJHRoaXMtPmQgPSBGQUxTRTsKCQkKCQlyZXR1cm4gRkFMU0U7Cgl9CgkKCWZ1bmN0aW9uIGlzTGluaygpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPmwpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPmw7CgkgICAgCgkgICAgJHYgPSBsc3RhdCgkdGhpcy0+ZnApOwoJICAgIAoJICAgIGlmIChpc19hcnJheSgkdikpIHsKCSAgICAgICAgJHRoaXMtPmwgPSAoJHZbMl0gJiAwMTcwMDAwKSA9PT0gMDEyMDAwMDsKCSAgICAgICAgcmV0dXJuICR0aGlzLT5sOwoJICAgIH0KCSAgICBpZiAoIWlzc2V0KCR0aGlzLT50KSkKCSAgICAgICAgJHRoaXMtPnR5cGUoKTsKCSAgICBpZiAoJHRoaXMtPnQgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5sID0gJHRoaXMtPnQgPT09ICdsaW5rJzsKCSAgICAgICAgcmV0dXJuICR0aGlzLT5sOwoJICAgIH0KCSAgICAkdiA9IGlzX2xpbmsoJHRoaXMtPmZwKTsKCSAgICBpZiAoaXNfYm9vbCgkdikpIHsKCSAgICAgICAgJHRoaXMtPmwgPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+aXNMaW5rKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2Jvb2woJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPmwgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+bCA9IEZBTFNFOwoJICAgIHJldHVybiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gZ2V0TGlua1RhcmdldCgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPmYpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPmY7CgkgICAgaWYgKE5JWCB8fCBQSFBfVkVSU0lPTiA+PSAnNS4zJykgewoJICAgICAgICAkdiA9IHJlYWRsaW5rKCR0aGlzLT5mcCk7CgkgICAgICAgIGlmIChpc19zdHJpbmcoJHYpKSB7CgkgICAgICAgICAgICAkdGhpcy0+ZiA9ICR2OwoJICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICB9CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5nZXRMaW5rVGFyZ2V0KCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkdikpIHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+ZiA9ICR2OwoJICAgICAgICAgICAgICAgIHJldHVybiAkdjsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIGVuZGlmOwoJICAgICR2ID0gcmVhbHBhdGgoJHRoaXMtPmZwKTsKCSAgICBpZiAoaXNfc3RyaW5nKCR2KSkgewoJICAgICAgICAkdGhpcy0+ZiA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgICR0aGlzLT5mID0gJyc7CgkgICAgcmV0dXJuICcnOwoJfQoJCglmdW5jdGlvbiBnZXRTaXplKCkgewoJICAgIGlmIChpc3NldCgkdGhpcy0+cykpCgkgICAgICAgIHJldHVybiAkdGhpcy0+czsKCSAgICBpZiAoIWlzc2V0KCR0aGlzLT5pKSkKCSAgICAgICAgJHRoaXMtPnN0YXQoKTsKCSAgICBpZiAoJHRoaXMtPmkgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5zID0gJHRoaXMtPmlbN107CgkgICAgICAgIHJldHVybiAkdGhpcy0+czsKCSAgICB9CgkgICAgJHYgPSBmaWxlc2l6ZSgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19pbnQoJHYpKSB7CgkgICAgICAgICR0aGlzLT5zID0gJHY7CgkgICAgICAgIHJldHVybiAkdjsKCSAgICB9CgkgICAgaWYgKFBIUF9WRVJTSU9OID49ICc1Jyk6CgkgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmZpKSkKCSAgICAgICAgICAgICR0aGlzLT5zcGwoKTsKCSAgICAgICAgaWYgKCR0aGlzLT5maSAhPT0gRkFMU0UpIHsKCSAgICAgICAgICAgIHRyeSB7CgkgICAgICAgICAgICAgICAgJHYgPSAkdGhpcy0+ZmktPmdldFNpemUoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5zID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPnMgPSAtMTsKCSAgICByZXR1cm4gLTE7Cgl9CgkKCWZ1bmN0aW9uIGdldENUaW1lKCkgewoJICAgIGlmIChpc3NldCgkdGhpcy0+YykpCgkgICAgICAgIHJldHVybiAkdGhpcy0+YzsKCSAgICBpZiAoIWlzc2V0KCR0aGlzLT5pKSkKCSAgICAgICAgJHRoaXMtPnN0YXQoKTsKCSAgICBpZiAoJHRoaXMtPmkgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5jID0gJHRoaXMtPmlbMTBdOwoJICAgICAgICByZXR1cm4gJHRoaXMtPmM7CgkgICAgfQoJICAgICR2ID0gZmlsZWN0aW1lKCR0aGlzLT5mcCk7CgkgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgJHRoaXMtPmMgPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+Z2V0Q1RpbWUoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5jID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPmMgPSAwOwoJICAgIHJldHVybiAwOwoJfQoJCglmdW5jdGlvbiBnZXRNVGltZSgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPm0pKQoJICAgICAgICByZXR1cm4gJHRoaXMtPm07CgkgICAgaWYgKCFpc3NldCgkdGhpcy0+aSkpCgkgICAgICAgICR0aGlzLT5zdGF0KCk7CgkgICAgaWYgKCR0aGlzLT5pICE9PSBGQUxTRSkgewoJICAgICAgICAkdGhpcy0+bSA9ICR0aGlzLT5pWzldOwoJICAgICAgICByZXR1cm4gJHRoaXMtPm07CgkgICAgfQoJICAgICR2ID0gZmlsZW10aW1lKCR0aGlzLT5mcCk7CgkgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgJHRoaXMtPm0gPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+Z2V0TVRpbWUoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5tID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPm0gPSAwOwoJICAgIHJldHVybiAwOwoJfQoJCglmdW5jdGlvbiBnZXRPd25lcigpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPm8pKQoJICAgICAgICByZXR1cm4gJHRoaXMtPm87CgkgICAgaWYgKCFpc3NldCgkdGhpcy0+aSkpCgkgICAgICAgICR0aGlzLT5zdGF0KCk7CgkgICAgaWYgKCR0aGlzLT5pICE9PSBGQUxTRSkgewoJICAgICAgICAkdGhpcy0+byA9ICR0aGlzLT5pWzRdOwoJICAgICAgICByZXR1cm4gJHRoaXMtPm87CgkgICAgfQoJICAgICR2ID0gZmlsZW93bmVyKCR0aGlzLT5mcCk7CgkgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgJHRoaXMtPm8gPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+Z2V0T3duZXIoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5vID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPm8gPSAtMTsKCSAgICByZXR1cm4gLTE7Cgl9CgkKCWZ1bmN0aW9uIGdldEdyb3VwKCkgewoJICAgIGlmIChpc3NldCgkdGhpcy0+ZykpCgkgICAgICAgIHJldHVybiAkdGhpcy0+ZzsKCSAgICBpZiAoIWlzc2V0KCR0aGlzLT5pKSkKCSAgICAgICAgJHRoaXMtPnN0YXQoKTsKCSAgICBpZiAoJHRoaXMtPmkgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5nID0gJHRoaXMtPmlbNV07CgkgICAgICAgIHJldHVybiAkdGhpcy0+ZzsKCSAgICB9CgkgICAgJHYgPSBmaWxlZ3JvdXAoJHRoaXMtPmZwKTsKCSAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAkdGhpcy0+ZyA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5nZXRHcm91cCgpOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJICAgICAgICAgICAgICAgICR2ID0gTlVMTDsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGlmIChpc19pbnQoJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPmcgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+ZyA9IC0xOwoJICAgIHJldHVybiAtMTsKCX0KCQoJZnVuY3Rpb24gZ2V0UGVybXMoKSB7CgkgICAgaWYgKGlzc2V0KCR0aGlzLT5wKSkKCSAgICAgICAgcmV0dXJuICR0aGlzLT5wOwoJICAgIGlmICghaXNzZXQoJHRoaXMtPmkpKQoJICAgICAgICAkdGhpcy0+c3RhdCgpOwoJICAgIGlmICgkdGhpcy0+aSAhPT0gRkFMU0UpIHsKCSAgICAgICAgJHRoaXMtPnAgPSAkdGhpcy0+aVsyXTsKCSAgICAgICAgcmV0dXJuICR0aGlzLT5wOwoJICAgIH0KCSAgICAkdiA9IGZpbGVwZXJtcygkdGhpcy0+ZnApOwoJICAgIGlmIChpc19pbnQoJHYpKSB7CgkgICAgICAgICR0aGlzLT5wID0gJHY7CgkgICAgICAgIHJldHVybiAkdjsKCSAgICB9CgkgICAgaWYgKFBIUF9WRVJTSU9OID49ICc1Jyk6CgkgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmZpKSkKCSAgICAgICAgICAgICR0aGlzLT5zcGwoKTsKCSAgICAgICAgaWYgKCR0aGlzLT5maSAhPT0gRkFMU0UpIHsKCSAgICAgICAgICAgIHRyeSB7CgkgICAgICAgICAgICAgICAgJHYgPSAkdGhpcy0+ZmktPmdldFBlcm1zKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+cCA9ICR2OwoJICAgICAgICAgICAgICAgIHJldHVybiAkdjsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIGVuZGlmOwoJICAgICR0aGlzLT5wID0gMDsKCSAgICByZXR1cm4gMDsKCX0KCQoJZnVuY3Rpb24gaXNSZWFkYWJsZSgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPnIpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPnI7CgkgICAgJHYgPSBpc19yZWFkYWJsZSgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19ib29sKCR2KSkgewoJICAgICAgICAkdGhpcy0+ciA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5pc1JlYWRhYmxlKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2Jvb2woJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPnIgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+ciA9IEZBTFNFOwoJICAgIHJldHVybiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gaXNXcml0YWJsZSgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPncpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPnc7CgkgICAgJHYgPSBpc193cml0YWJsZSgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19ib29sKCR2KSkgewoJICAgICAgICAkdGhpcy0+dyA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5pc1dyaXRhYmxlKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2Jvb2woJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPncgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+dyA9IEZBTFNFOwoJICAgIHJldHVybiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gZ2V0TW9kZSgpIHsKCSAgICAkdiA9IDA7CgkgICAgaWYgKCR0aGlzLT5pc1JlYWRhYmxlKCkpCgkgICAgICAgICR2ICs9IDE7CgkgICAgaWYgKCR0aGlzLT5pc1dyaXRhYmxlKCkpCgkgICAgICAgICR2ICs9IDI7CgkgICAgcmV0dXJuICR2OwoJfQoJCglmdW5jdGlvbiBzdGF0KCkgewoJICAgICR2ID0gc3RhdCgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19hcnJheSgkdikpIHsKCSAgICAgICAgJHRoaXMtPmkgPSAkdjsKCSAgICAgICAgcmV0dXJuOwoJICAgIH0KCSAgICAkdiAgICAgICA9IGxzdGF0KCR0aGlzLT5mcCk7CgkgICAgJHRoaXMtPmkgPSBpc19hcnJheSgkdikgPyAkdiA6IEZBTFNFOwoJfQoJCglmdW5jdGlvbiB0eXBlKCkgewoJICAgICR2ICAgICAgID0gZmlsZXR5cGUoJHRoaXMtPnJwKTsKCSAgICAkdGhpcy0+dCA9ICR2ID8gJHYgOiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gc3BsKCkgewoJICAgICR0aGlzLT5maSA9IEZBTFNFOwoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUuMS4yJykgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+ZmkgPSBuZXcgU3BsRmlsZUluZm8oJHRoaXMtPnJwKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+ZmkgPSBGQUxTRTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIGVuZGlmOwoJfQoJCn0KCgppZihpc3NldCgkRFsnYSddKSl7CgkKCWNsYXNzIFBaSVAgewoJICAgIHZhciAkX2JwbCA9ICcnLCAkX2NkZmggPSBOVUxMLCAkX2NkZnAgPSBOVUxMLCAkX2NkZm8gPSBGQUxTRSwgJF9jZHJjID0gMCwgJF9jZHNvID0gMCwgJF9mbHJzID0gYXJyYXkoKTsKCSAgICBmdW5jdGlvbiBpbml0KCRicD0nJykgewoJICAgICAgICAkdGhpcy0+X2JwbCA9IHN0cmxlbigkYnApOwoJICAgICAgICBpZiAoJGggPSB0bXBmaWxlKCkpCgkgICAgICAgICAgICAkdGhpcy0+X2NkZmggPSAkaDsKCSAgICAgICAgZWxzZSB7CgkgICAgICAgICAgICAkbiA9IHRlbXBOYW1lKCk7CgkgICAgICAgICAgICAkYSA9IGFycmF5KAoJICAgICAgICAgICAgICAgICd1cGxvYWRfdG1wX2RpcicsCgkgICAgICAgICAgICAgICAgJ3Nlc3Npb24uc2F2ZV9wYXRoJywKCSAgICAgICAgICAgICAgICAndXNlcl9kaXInLAoJICAgICAgICAgICAgICAgICdkb2Nfcm9vdCcKCSAgICAgICAgICAgICk7CgkgICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkdikKCSAgICAgICAgICAgICAgICBpZiAoJHAgPSBpbmlfZ2V0KCR2KSkgewoJICAgICAgICAgICAgICAgICAgICAkcCAuPSBEU0MgLiAkbjsKCSAgICAgICAgICAgICAgICAgICAgaWYgKCRoID0gZm9wZW4oJHAsICdidysnKSkgewoJICAgICAgICAgICAgICAgICAgICAgICAgZmxvY2soJGgsIExPQ0tfRVgpOwoJICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jZGZoID0gJGg7CgkgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZnAgPSAkcDsKCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwoJICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OID49ICc1LjEnKSB7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBuZXcgU3BsRmlsZU9iamVjdCgkcCwgJ2J3KycpOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gTlVMTDsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoKSB7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoLT5mbG9jayhMT0NLX0VYKTsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jZGZoID0gJGg7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fY2RmcCA9ICRwOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZm8gPSBUUlVFOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIGVuZGlmOwoJICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICRwID0gc2VsZlBhdGgoKSAuICRuOwoJICAgICAgICAgICAgaWYgKCRoID0gZm9wZW4oJHAsICdidysnKSkgewoJICAgICAgICAgICAgICAgIGZsb2NrKCRoLCBMT0NLX0VYKTsKCSAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZmggPSAkaDsKCSAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZnAgPSAkcDsKCSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNS4xJykgewoJICAgICAgICAgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBuZXcgU3BsRmlsZU9iamVjdCgkcCwgJ2J3KycpOwoJICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICRoID0gTlVMTDsKCSAgICAgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgICAgICBpZiAoJGgpIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICRoLT5mbG9jayhMT0NLX0VYKTsKCSAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fY2RmaCA9ICRoOwoJICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jZGZwID0gJHA7CgkgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZm8gPSBUUlVFOwoJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CgkgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICBlbmRpZjsKCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gRkFMU0U7CgkgICAgfQoJICAgIGZ1bmN0aW9uIGZpbGVIZWFkZXIoJG4sICR0KSB7CgkgICAgICAgIGVjaG8gIlx4NTBceDRiXHgwM1x4MDRceDE0XHgwMFx4MDhceDAwXHgwMFx4MDAiLCAkdCwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsIHBhY2soJ3YnLCBzdHJsZW4oJG4pKSwgIlx4MDBceDAwIiwgJG47CgkgICAgICAgIG9iX3N0YXJ0KCd6aXBDYWxjJywgMTA0ODU3Nik7CgkgICAgfQoJICAgIGZ1bmN0aW9uIGZpbGVGb290ZXIoJG4sICR0KSB7CgkgICAgICAgIG9iX2VuZF9mbHVzaCgpOwoJICAgICAgICAkdiA9IHppcENhbGMoTlVMTCk7CgkgICAgICAgICRzID0gcGFjaygnVicsICR2WzBdKTsKCSAgICAgICAgJGMgPSBwYWNrKCdWJywgJHZbMV0gXiAweGZmZmZmZmZmKTsKCSAgICAgICAgZWNobyAiXHg1MFx4NGJceDA3XHgwOCIsICRjLCAkcywgJHM7CgkgICAgICAgICRmaCAgID0gJHRoaXMtPl9jZGZoOwoJICAgICAgICAkbmwgICA9IHN0cmxlbigkbik7CgkgICAgICAgICRkYXRhID0gIlx4NTBceDRiXHgwMVx4MDJceDAwXHgwMFx4MTRceDAwXHgwOFx4MDBceDAwXHgwMCIgLiAkdCAuICRjIC4gJHMgLiAkcyAuIHBhY2soJ3YnLCAkbmwpIC4gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIgLiBwYWNrKCdWJywgJHRoaXMtPl9jZHNvKSAuICRuOwoJICAgICAgICBpZiAoJHRoaXMtPl9jZGZvKSB7CgkgICAgICAgICAgICAkZmgtPmZ3cml0ZSgkZGF0YSk7CgkgICAgICAgICAgICAkZmgtPmZmbHVzaCgpOwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgICAgZndyaXRlKCRmaCwgJGRhdGEpOwoJICAgICAgICAgICAgZmZsdXNoKCRmaCk7CgkgICAgICAgIH0KCSAgICAgICAgKyskdGhpcy0+X2NkcmM7CgkgICAgICAgICR0aGlzLT5fY2RzbyArPSA0NiArICR2WzBdICsgJG5sOwoJICAgIH0KCSAgICBmdW5jdGlvbiBhZGRQYXRoKCRwKSB7CgkgICAgICAgICRmID0gbmV3IEZpbGVJbmZvKCRwKTsKCSAgICAgICAgaWYgKCRmLT5pc0RpcigpKSB7CgkgICAgICAgICAgICBpZiAoc3Vic3RyKCRwLCAtMSkgIT09IERTQykKCSAgICAgICAgICAgICAgICAkcCAuPSBEU0M7CgkgICAgICAgICAgICAkZiA9IE5VTEw7CgkgICAgICAgICAgICBpZiAoIWRpclJlYWQoJHAsIGFycmF5KAoJICAgICAgICAgICAgICAgICYkdGhpcywKCSAgICAgICAgICAgICAgICAnYWRkUGF0aCcKCSAgICAgICAgICAgICkpKQoJICAgICAgICAgICAgICAgICR0aGlzLT5fZmxyc1tdID0gc3Vic3RyKCRwLCAkdGhpcy0+X2JwbCk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAkdCA9IHBhY2tUaW1lKCRmLT5nZXRNVGltZSgpKTsKCSAgICAgICAgICAgICRmID0gc3Vic3RyKCRwLCAkdGhpcy0+X2JwbCk7CgkgICAgICAgICAgICBpZiAoIU5JWCkKCSAgICAgICAgICAgICAgICAkZiA9IHN0cl9yZXBsYWNlKERTQywgJy8nLCAkZik7CgkgICAgICAgICAgICAkdGhpcy0+ZmlsZUhlYWRlcigkZiwgJHQpOwoJICAgICAgICAgICAgaWYgKCFvdXRGaWxlKCRwKSkKCSAgICAgICAgICAgICAgICAkdGhpcy0+X2ZscnNbXSA9ICRmOwoJICAgICAgICAgICAgJHRoaXMtPmZpbGVGb290ZXIoJGYsICR0KTsKCSAgICAgICAgfQoJICAgIH0KCSAgICBmdW5jdGlvbiBjbG9zZSgpIHsKCSAgICAgICAgaWYgKGNvdW50KCR0aGlzLT5fZmxycykgPiAwKSB7CgkgICAgICAgICAgICAkbiA9ICdDQU5UX1JFQUQudHh0JzsKCSAgICAgICAgICAgICR0ID0gcGFja1RpbWUodGltZSgpKTsKCSAgICAgICAgICAgICR0aGlzLT5maWxlSGVhZGVyKCRuLCAkdCk7CgkgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+X2ZscnMgYXMgJHYpCgkgICAgICAgICAgICAgICAgZWNobyAkdiwgIlxuIjsKCSAgICAgICAgICAgICR0aGlzLT5maWxlRm9vdGVyKCRuLCAkdCk7CgkgICAgICAgIH0KCSAgICAgICAgJGZoID0gJHRoaXMtPl9jZGZoOwoJICAgICAgICBpZiAoJHRoaXMtPl9jZGZvKSB7CgkgICAgICAgICAgICAkcyA9ICRmaC0+ZnRlbGwoKTsKCSAgICAgICAgICAgICRmaC0+ZnNlZWsoMCk7CgkgICAgICAgICAgICBpZiAoIWlzX2ludCgkZmgtPmZwYXNzdGhydSgpKSkKCSAgICAgICAgICAgICAgICB3aGlsZSAoISRmaC0+ZW9mKCkpCgkgICAgICAgICAgICAgICAgICAgIGVjaG8gJGZoLT5mcmVhZCgxMDQ4NTc2KTsKCSAgICAgICAgICAgICRmaC0+ZmxvY2soTE9DS19VTik7CgkgICAgICAgICAgICB1bnNldCgkZmgsICR0aGlzLT5fY2RmaCk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAkcyA9IGZ0ZWxsKCRmaCk7CgkgICAgICAgICAgICBmc2VlaygkZmgsIDApOwoJICAgICAgICAgICAgaWYgKCFpc19pbnQoZnBhc3N0aHJ1KCRmaCkpKQoJICAgICAgICAgICAgICAgIHdoaWxlICghZmVvZigkZmgpKQoJICAgICAgICAgICAgICAgICAgICBlY2hvIGZyZWFkKCRmaCwgMTA0ODU3Nik7CgkgICAgICAgICAgICBmbG9jaygkZmgsIExPQ0tfVU4pOwoJICAgICAgICAgICAgZmNsb3NlKCRmaCk7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKCR0aGlzLT5fY2RmcCAhPT0gTlVMTCkKCSAgICAgICAgICAgIGRlbEZpbGUoJHRoaXMtPl9jZGZwKTsKCSAgICAgICAgJHYgPSBwYWNrKCd2JywgJHRoaXMtPl9jZHJjKTsKCSAgICAgICAgJGMgPSAnQXJjaGl2ZWQgYnkgUC5BLlMuIEZvcmsgdi4gJyAuIFZFUjsKCSAgICAgICAgZWNobyAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiLCAkdiwgJHYsIHBhY2soJ1YnLCAkcyksIHBhY2soJ1YnLCAkdGhpcy0+X2Nkc28pLCBwYWNrKCd2Jywgc3RybGVuKCRjKSksICRjOwoJICAgICAgICBzRGllKCk7CgkgICAgfQp9CgkKZnVuY3Rpb24gcGFja1RpbWUoJHYpIHsKICAgICR2ID0gZ2V0ZGF0ZSgkdik7CiAgICByZXR1cm4gcGFjaygndnYnLCAoKCR2Wydob3VycyddIDw8IDExKSArICgkdlsnbWludXRlcyddIDw8IDUpICsgJHZbJ3NlY29uZHMnXSA+PiAxKSwgKCgoJHZbJ3llYXInXSAtIDE5ODApIDw8IDkpICsgKCR2Wydtb24nXSA8PCA1KSArICR2WydtZGF5J10pKTsKfQoKaWYgKCFkZWZpbmVkKCdQSFBfSU5UX01BWCcpKQogICAgZGVmaW5lKCdQSFBfSU5UX01BWCcsIGludHZhbCgnMTAwMDAwMDAwMDAwMDAwMDAwMDAnKSk7CiAgICAKZnVuY3Rpb24gemlwQ2FsYygkYnVmZikgewogICAgc3RhdGljICRjcmNUYmwgPSBOVUxMLCAkY2hyVGJsID0gTlVMTCwgJGRhdGFTaXplID0gMCwgJGNyY1N1bSA9IDB4ZmZmZmZmZmYsICRzaGZ0Rml4ID0gMDsKICAgIGlmICgkY3JjVGJsID09PSBOVUxMKSB7CiAgICAgICAgJHNoZnRGaXggPSBQSFBfSU5UX01BWCA+PiAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDI1NjsgKyskaSkgewogICAgICAgICAgICAkdiA9ICRpOwogICAgICAgICAgICBmb3IgKCRqID0gODsgJGo7IC0tJGopCiAgICAgICAgICAgICAgICAkdiA9ICR2ICYgMSA/ICR2ID4+IDEgJiAkc2hmdEZpeCBeIDB4RURCODgzMjAgOiAkdiA+PiAxICYgJHNoZnRGaXg7CiAgICAgICAgICAgICRjcmNUYmxbXSAgICAgICAgPSAkdjsKICAgICAgICAgICAgJGNoclRibFtjaHIoJGkpXSA9ICRpOwogICAgICAgIH0KICAgICAgICAkc2hmdEZpeCA9IFBIUF9JTlRfTUFYID4+IDc7CiAgICB9IGVsc2VpZiAoJGJ1ZmYgPT09IE5VTEwpIHsKICAgICAgICAkdiAgICAgICAgPSBhcnJheSgKICAgICAgICAgICAgJGRhdGFTaXplLAogICAgICAgICAgICAkY3JjU3VtCiAgICAgICAgKTsKICAgICAgICAkZGF0YVNpemUgPSAwOwogICAgICAgICRjcmNTdW0gICA9IDB4ZmZmZmZmZmY7CiAgICAgICAgcmV0dXJuICR2OwogICAgfQogICAgJGMgPSBzdHJsZW4oJGJ1ZmYpOwogICAgJGRhdGFTaXplICs9ICRjOwogICAgZm9yICgkaSA9IDA7ICRpIDwgJGM7ICsrJGkpCiAgICAgICAgJGNyY1N1bSA9ICRjcmNUYmxbJGNyY1N1bSAmIDB4RkYgXiAkY2hyVGJsWyRidWZmWyRpXV1dIF4gJGNyY1N1bSA+PiA4ICYgJHNoZnRGaXg7CiAgICByZXR1cm4gJGJ1ZmY7Cn0KCmZ1bmN0aW9uIGpzb25FY2hvKCR2KSB7CiAgICBzdGF0aWMgJHMgPSBOVUxMLCAkciA9IE5VTEw7CiAgICBpZiAoJHMgPT09IE5VTEwpIHsKICAgICAgICAkcyA9IGFycmF5KAogICAgICAgICAgICAnXFwnLAogICAgICAgICAgICAnIicKICAgICAgICApOwogICAgICAgICRyID0gYXJyYXkoCiAgICAgICAgICAgICdcdTAwNWMnLAogICAgICAgICAgICAnXHUwMDIyJwogICAgICAgICk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDw9IDB4MUY7ICsrJGkpIHsKICAgICAgICAgICAgJHNbXSA9IGNocigkaSk7CiAgICAgICAgICAgICRyW10gPSBzcHJpbnRmKCdcdTAwJTAycycsIGRlY2hleCgkaSkpOwogICAgICAgIH0KICAgIH0KICAgIGVjaG8gJHYgPT09IE5VTEwgPyAnIk5VTEwiJyA6ICciJyAuIHN0cl9yZXBsYWNlKCRzLCAkciwgJHYpIC4gJyInOwp9Cgpzd2l0Y2ggKCREWydhJ10pIHsKICAgIGNhc2UgJ2YnOgogICAgICAgIGZ1bmN0aW9uIHRlc3RQcm9wKCRhLCAkdikgewogICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkaSkKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkaSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJGkpID09PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdiA+ICRpWzBdICYmICR2IDwgJGlbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGlbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdiA+ICRpWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2IDwgJGlbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2ID09PSAkaSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KICAgICAgICBjbGFzcyBTZWFyY2hlciB7CiAgICAgICAgICAgIHZhciAkZiwgJGQsICRwLCAkYTsKICAgICAgICAgICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYpIHsKICAgICAgICAgICAgICAgIGVjaG8gJ3siZiI6Wyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZiA9ICR2OwogICAgICAgICAgICAgICAgJHRoaXMtPmQgPSAwOwogICAgICAgICAgICAgICAgJHRoaXMtPnAgPSBOVUxMOwogICAgICAgICAgICAgICAgJHRoaXMtPmEgPSBhcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGZpbHRlcigkdikgewogICAgICAgICAgICAgICAgJGkgPSBuZXcgRmlsZUluZm8oJHYpOwogICAgICAgICAgICAgICAgJGsgPSAkaS0+Z2V0RmlsZU5hbWUoKTsKICAgICAgICAgICAgICAgICRmID0gJHRoaXMtPmY7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICcuJyB8fCAkayA9PT0gJy4uJykKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAoJGktPmlzTGluaygpICYmICFpc3NldCgkZlsnbCddKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAkYiA9ICRpLT5pc0RpcigpOwogICAgICAgICAgICAgICAgaWYgKCRiICYmICghaXNzZXQoJGZbJ2QnXSkgfHwgJGZbJ2QnXSA+ICR0aGlzLT5kKSkKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YVtdID0gJHY7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGZbJ3knXSkgJiYgKCRmWyd5J10gPT09IDEgPyAhJGIgOiAkYikpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmWydwJ10pICYmICRpLT5nZXRNb2RlKCkgPCAkZlsncCddKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICghJGIgJiYgaXNzZXQoJGZbJ3UnXSkgJiYgKCRpLT5nZXRQZXJtcygpICYgMDAwNzAwMCkgIT09IDAwMDQwMDApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmWyduJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRrICE9PSAkZlsnbiddKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGZbJ2knXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcCgkaywgJGZbJ2knXSkgIT09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkZlsnciddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICghcHJlZ19tYXRjaCgkZlsnciddLCAkaykpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnbyddKSAmJiAhdGVzdFByb3AoJGZbJ28nXSwgJGktPmdldE93bmVyKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnZyddKSAmJiAhdGVzdFByb3AoJGZbJ2cnXSwgJGktPmdldEdyb3VwKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnZSddKSAmJiAhdGVzdFByb3AoJGZbJ2UnXSwgJGktPmdldENUaW1lKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnbSddKSAmJiAhdGVzdFByb3AoJGZbJ20nXSwgJGktPmdldE1UaW1lKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICghJGIgJiYgaXNzZXQoJGZbJ3onXSkgJiYgIXRlc3RQcm9wKCRmWyd6J10sICRpLT5nZXRTaXplKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICghJGIgJiYgKGlzc2V0KCRmWyd0J10pIHx8IGlzc2V0KCRmWyd2J10pIHx8IGlzc2V0KCRmWyd4J10pKSkgewogICAgICAgICAgICAgICAgICAgIGlmICghaXNfc3RyaW5nKCRrID0gZ2V0RmlsZSgkdikpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmWyd0J10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGssICRmWyd0J10pID09PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGZbJ3YnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlzdHIoJGssICRmWyd2J10pID09PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoIXByZWdfbWF0Y2goJGZbJ3gnXSwgJGspKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkayA9ICRpLT5nZXRQYXRoKCk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnAgIT09ICRrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5wICE9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICddfSwnOwogICAgICAgICAgICAgICAgICAgIGVjaG8gJ3sicCI6JzsKICAgICAgICAgICAgICAgICAgICBqc29uRWNobygkayk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnAgPSAkazsKICAgICAgICAgICAgICAgICAgICAkayAgICAgICA9IG5ldyBGaWxlSW5mbygkayk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnLCJtIjonLCAkay0+Z2V0TW9kZSgpLCAnLCJmIjpbJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG91dEZpbGVJbmZvKCRpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2goJHYpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgIGRpclJlYWQoJHYsIGFycmF5KAogICAgICAgICAgICAgICAgICAgICYkdGhpcywKICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJwogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5mWydkJ10pIHx8ICR0aGlzLT5mWydkJ10gPiAkdGhpcy0+ZCkgewogICAgICAgICAgICAgICAgICAgICsrJHRoaXMtPmQ7CiAgICAgICAgICAgICAgICAgICAgJGEgPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkdikKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNlYXJjaCgkdik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoKCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5wICE9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnXX1dJzsKICAgICAgICAgICAgICAgICAgICBvdXRGaWxlSW5mbyhOVUxMLCBUUlVFKTsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ10nOwogICAgICAgICAgICAgICAgc0RpZSgnfScpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGRpclJlYWQoJHAsICRmKSB7CiAgICAgICAgICAgICRiID0gaXNfc3RyaW5nKCRmKTsKICAgICAgICAgICAgaWYgKHN1YnN0cigkcCwgLTEpICE9PSBEU0MpCiAgICAgICAgICAgICAgICAkcCAuPSBEU0M7CiAgICAgICAgICAgIGlmICgkdiA9IG9wZW5kaXIoJHApKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoKCRpID0gcmVhZGRpcigkdikpICE9PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICBpZiAoJGkgIT09ICcuJyAmJiAkaSAhPT0gJy4uJykKICAgICAgICAgICAgICAgICAgICAgICAgJGIgPyAkZigkcCAuICRpKSA6ICRmWzBdLT57JGZbMV19KCRwIC4gJGkpOwogICAgICAgICAgICAgICAgY2xvc2VkaXIoJHYpOwogICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR2ID0gZGlyKCRwKSkgewogICAgICAgICAgICAgICAgd2hpbGUgKCgkaSA9ICR2LT5yZWFkKCkpICE9PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICBpZiAoJGkgIT09ICcuJyAmJiAkaSAhPT0gJy4uJykKICAgICAgICAgICAgICAgICAgICAgICAgJGIgPyAkZigkcCAuICRpKSA6ICRmWzBdLT57JGZbMV19KCRwIC4gJGkpOwogICAgICAgICAgICAgICAgJHYtPmNsb3NlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJHYgPSBuZXcgRGl</description>
<pubDate>10 Feb 2011</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=27</guid>
</item>

<item>
<title>19 Aug 2010</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=26</link>
<description>&lt;div style=&quot;TEXT-INDENT: 30px; TEXT-ALIGN: justify&quot;&gt;&lt;strong&gt;После выхода 16 августа приказа о зачислении на бюджетную форму обучения продолжается зачисление на вакантные места с оплатой по контракту на специальность 230102 и направление 230100 по кафедре ИАОУ&lt;/strong&gt;. &lt;/div&gt;&lt;div style=&quot;TEXT-INDENT: 30px; TEXT-ALIGN: justify&quot;&gt;20 августа ожидается выход приказа о зачислении на контрактную форму. Желающие поступить и не вошедшие в приказ от 20 августа имеют возможность заключить контракт &lt;strong&gt;до 01 сентября&lt;/strong&gt;, для чего им следует обратиться в деканат ПС-факультета (&lt;strong&gt;аудитория 429 корпуса 3-бв, тел.: 2679421&lt;/strong&gt;). Контрактники успешно проходят и заканчивают обучение на нашей кафедре. Не упустите свой шанс, уважаемые абитуриенты!&lt;/div&gt;</description>
<pubDate>19 Aug 2010</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=26</guid>
</item>

<item>
<title>10 Aug 2010</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=25</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify; TEXT-INDENT: 30px;&quot;&gt;11 августа 2010 г. с 10-00 сначала в ауд. 632/3бв, а затем в ауд. 480/3 состоится процедура оформления документов для абитуриентов, зачисленных на нашу кафедру. Просьба прибыть для своевременного оформления студенческого билета, читательского билета и других, важных будущему студенту документов.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-ALIGN: justify; TEXT-INDENT: 30px;&quot;&gt;&lt;strong&gt;Продолжается зачисление на вакантные места с оплатой по контракту на специальность 230102 и направление 230100 по кафедре ИАОУ&lt;/strong&gt;. Желающие имеют возможность заключить контракт до &lt;strong&gt;20 августа&lt;/strong&gt;, для чего им следует обратиться в деканат ПС-факультета (&lt;strong&gt;аудитория 429 корпуса 3-бв&lt;/strong&gt;). Контрактники успешно проходят и заканчивают обучение на нашей кафедре. Не упустите свой шанс, уважаемые абитуриенты!&lt;/div&gt;</description>
<pubDate>10 Aug 2010</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=25</guid>
</item>

<item>
<title>15 Jun 2010</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=24</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;11 июня 2010 г. на кафедре ИАОУ была завершена итоговая государственная аттестация выпускников 2010 года. Из 25-ти выпускников группы ПС-545&amp;nbsp;и ПС-478&amp;nbsp;на &quot;отлично&quot; и &quot;хорошо&quot; оценены 22&amp;nbsp;выпускные работы, а студенты&amp;nbsp; Вдовина А.В., Зозуля А.И., Маслюк Д.И., Ментюгова Ю.Н., Миниахметова Ю.С., Морозова Е.О., Оржеровская Ю.И. &amp;nbsp;удостоены диплома с отличием.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;26 июня состоится торжественная процедура вручения им дипломов о высшем образовании.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;Желаем успехов нашим выпускникам!&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>15 Jun 2010</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=24</guid>
</item>

<item>
<title>16 Apr 2010</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=23</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;18 апреля в 11 часов в рамках Дня открытых дверей состоится встреча с абитуриентами ПС-факультета в ауд. 434 корпуса 3бв. После нее приглашаем посетить&amp;nbsp;кафедру ИАОУ: ауд. 205 корпуса НИИ цифровых систем на пр. Ленина 76а.&amp;nbsp;&amp;nbsp;&lt;/div&gt;</description>
<pubDate>16 Apr 2010</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=23</guid>
</item>

<item>
<title>10 Feb 2010</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=22</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;&lt;b&gt;13 и 14 февраля&lt;/b&gt; состоится традиционная встреча с выпускниками школ и техникумов - &lt;b&gt;День открытых дверей&lt;/b&gt;.&lt;/div&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Приглашаем абитуриентов на День открытых дверей &lt;b&gt;13 февраля (суббота) с 14.00 и 14 февраля (воскресенье) с 11.00&lt;/b&gt;.&lt;/div&gt;</description>
<pubDate>10 Feb 2010</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=22</guid>
</item>

<item>
<title>25 Aug 2009</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=17</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;Приглашаем наших первокурсников на торжественное событие - &lt;strong&gt;День знаний&lt;/strong&gt;, которое&amp;nbsp;начнется&amp;nbsp;с&amp;nbsp;общего&amp;nbsp;собрания первого&amp;nbsp;курса ПС-факультета &lt;strong&gt;31 августа в 13 часов &lt;/strong&gt;в актовом зале главного корпуса ЮУрГУ и будет затем продолжено на &lt;strong&gt;кафедре ИАОУ в аудитории 205 корпуса НИИЦС&lt;/strong&gt;, где будут вручены студенческие билеты.&amp;nbsp;&lt;/div&gt;</description>
<pubDate>25 Aug 2009</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=17</guid>
</item>

<item>
<title>7 Aug 2009</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=16</link>
<description>&lt;div style=&quot;TEXT-ALIGN: justify&quot;&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;&lt;strong&gt;6 августа прошла процедура зачисления&lt;/strong&gt; абитуриентов&amp;nbsp;2009 года &lt;strong&gt;на бюджетную&amp;nbsp;основу&amp;nbsp;обучения &lt;/strong&gt;по кафедре ИАОУ. Приказ о зачислении будет опубликован 10 августа. Приглашаем наших первокурсников &lt;strong&gt;31 августа&lt;/strong&gt; на торжественную процедуру вручения студенческих билетов!&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;&lt;strong&gt;Продолжается зачисление на вакантные места с оплатой по контракту на специальность 230102 и направление 230100 по кафедре ИАОУ&lt;/strong&gt;. Желающие имеют возможность заключить контракт до &lt;strong&gt;20 августа&lt;/strong&gt;, для чего им следует обратиться в деканат ПС-факультета (&lt;strong&gt;аудитория 429 корпуса 3-бв&lt;/strong&gt;). Контрактники успешно проходят и заканчивают обучение на нашей кафедре, так среди &lt;strong&gt;16 выпускников 2009 года&amp;nbsp;5 контрактников&lt;/strong&gt;. Не упустите свой шанс, уважаемые абитуриенты!&lt;/div&gt;&lt;/div&gt;</description>
<pubDate>7 Aug 2009</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=16</guid>
</item>

<item>
<title>3 Aug 2009</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=15</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;&lt;strong&gt;6 августа в 11 часов&lt;/strong&gt; состоится зачисление абитуриентов в соответствии со списками, которые будут опубликованы 4 августа. Приглашаем абитуриентов на процедуру зачисления (ауд. 434 и 632 корпуса 3-бв)!&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Остались еще вакантные места на зачисление с оплатой по контракту на кафедру ИАОУ. Желающие имеют возможность заключить контракт до&amp;nbsp;20 августа, для чего им следует обратиться в деканат ПС-факультета (ауд 429 корпуса 3-бв). Контрактники успешно проходят и заканчивают обучение на нашей кафедре, так среди 16 выпускников 2009 года&amp;nbsp;5 контрактников. Не упустите свой шанс, уважаемые абитуриенты!&lt;/div&gt;</description>
<pubDate>3 Aug 2009</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=15</guid>
</item>

<item>
<title>2 Jul 2009</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=14</link>
<description>&lt;div style=&quot;TEXT-INDENT: 30px&quot;&gt;С 20 июня по 25 июля 2009 года проходит приём заявлений от абитуриентов. &lt;br&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;TEXT-ALIGN: center&quot;&gt;&lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;План приёма по кафедре ИАОУ:&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;специальность 230102 - 12 бюджетных&amp;nbsp; и 13 контрактных мест (квалификация - инженер).&lt;li&gt;направление 230100 - 5 бюджетных и 20 контрактных мест (степень - бакалавр техники и технологии).&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;TEXT-INDENT: 30px; TEXT-ALIGN: justify&quot;&gt;Ход приёмной кампании будет отражаться на главной странице данного сайта.&lt;/div&gt;</description>
<pubDate>2 Jul 2009</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=14</guid>
</item>

<item>
<title>11 Jun 2009</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=13</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;10 июня 2009 г. на кафедре ИАОУ была завершена итоговая государственная аттестация выпускников 2009 года. Из 16-ти выпускников группы ПС-590 11 дипломных работ оценены с оценками &quot;отлично&quot; и &quot;хорошо&quot;, а студент Хакимов Р.Р. удостоен диплома с отличием.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;27 июня состоится торжественная процедура вручения им дипломов о высшем образовании.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Желаем успехов нашим выпускникам!&lt;/div&gt;</description>
<pubDate>11 Jun 2009</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=13</guid>
</item>

<item>
<title>6 Apr 2009</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=11</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;Приглашаем будущих абитуриентов &lt;strong&gt;19 апреля 2009 г.&lt;/strong&gt; на встречу с руководством кафедры ИАОУ в &lt;strong&gt;ауд. 205 корпуса НИИЦС&lt;/strong&gt; по Университетскому проезду. Встреча на кафедре состоится после окончания общефакультетского собрания, которое в рамках проведения &quot;Дня приборостроительного (КТУР) факультета&quot; начнется&amp;nbsp;в &lt;strong&gt;11 час. в ауд 434 корпуса 3бв&lt;/strong&gt;.&lt;/div&gt;</description>
<pubDate>6 Apr 2009</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=11</guid>
</item>

<item>
<title>2 Feb 2009</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=10</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;&lt;strong&gt;7 февраля в 16-00 и 8 февраля 2009 года в 12-30 в аудитории 240 корпуса 3бв&lt;/strong&gt; в рамках проведения дня &quot;Открытых дверей&quot; состоятся встречи с профессорско-преподавательским составом ПС (КТУР) факультета.&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Приглашаем будущих абитуриентов после этой встречи &lt;strong&gt;посетить кафедру ИАОУ&lt;/strong&gt; (&lt;strong&gt;аудитория 205 корпуса НИИЦС&lt;/strong&gt; в Университетском проезде), где вам будет предоставлена возможность подробно познакомиться с учебными планами кафедры и перспективами обучения на нашей кафедре.&lt;/div&gt;</description>
<pubDate>2 Feb 2009</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=10</guid>
</item>

<item>
<title>8 Oct 2008</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=9</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;&lt;b&gt;22 октября &lt;/b&gt;2008 года в 10 час. в зале Ученого совета (ауд 1007 гл. корпуса) начнет работу всероссийский научно-практический семинар &amp;laquo;Развитие информационного общества и информационное обеспечение административной реформы в субъектах Российской Федерации&amp;raquo;. На семинар будут приглашены специалисты и руководители, курирующие вопросы информатизации органов государственной власти, администраций городов и районов из Челябинской области и других субъектов РФ, а также представители компьютерных фирм, научно-внедренческих организаций и др.&lt;/div&gt;</description>
<pubDate>8 Oct 2008</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=9</guid>
</item>

<item>
<title>7 Aug 2008</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=8</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;7 августа 2008 г. определены списки абитуриентов, которые включаются в приказ о зачислении на бюджетные места по нашей кафедре. Приказ будет опубликован 11 августа!&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Остались еще вакантные места на зачисление с оплатой по контракту на кафедру ИАОУ. Желающие имеют возможность заключить контракт до 30 августа, для чего им следует обратиться в деканат ПС-факультета (ауд 429 корпуса 3-бв). Контрактники успешно проходят и заканчивают обучение на нашей кафедре, так среди 18 выпускников 2008 года 5 контрактников. Не упустите свой шанс, уважаемые абитуриенты!&lt;/div&gt;</description>
<pubDate>7 Aug 2008</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=8</guid>
</item>

<item>
<title>30 Jun 2008</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=6</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt; 11 июня 2008 г. завершена государственная аттестация выпускников кафедры. Диплом инженера присужден 18 студентам группы ПС-550. Из них 6 выпускников: Глущенко Н.Ю., Дуплева А.А., Жаботинский Д.В., Макаренко К.В., Манекина Е.И. и Якушина А.А. удостоены диплома с отличием. Дипломы им были вручены 28 июня.&lt;/div&gt;&lt;br /&gt;&lt;br&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Поздравляем наших выпускников!&lt;/div&gt;</description>
<pubDate>30 Jun 2008</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=6</guid>
</item>

<item>
<title>26 Mar 2008</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=4</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;&lt;font size=&quot;4&quot;&gt;Президент России Владимир Путин подписал указ о присвоении звания &quot;Заслуженный деятель науки РФ&quot; нашему заведующему кафедрой, доктору технических наук, профессору О.В.Логиновскому.&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;&lt;font size=&quot;4&quot;&gt;Поздравляем Олега Витальевича с почетной наградой, желаем дальнейших творческих достижений и успехов во всех сферах его деятельности!&lt;/font&gt;&lt;/div&gt;&lt;font size=&quot;4&quot;&gt;&lt;br /&gt;&lt;/font&gt;Коллектив кафедры.</description>
<pubDate>26 Mar 2008</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=4</guid>
</item>

<item>
<title>5 Jul 2007</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=3</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;15 июня на кафедре ИАОУ завершены защиты выпускных квалификационных работ для выпускников 2007 года. Все защиты оценены Государственной аттестационной комиссией с оценками &quot;отлично&quot; и &quot;хорошо&quot;. При этом 30 июня 18 студентов из группы ПС-521 получат диплом инженера, а Бабинцев Д.А. и Карцева О.К. получат дипломы с отличием. В группе ПС-455 4 студента получат диплом бакалавра техники и технологии, а студент Жаботинский Д.В. удостоен диплома с отличием.&lt;/div&gt;&lt;br /&gt;&lt;br&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Поздравляем наших выпускников и желаем им дальнейших успехов!&lt;/div&gt;</description>
<pubDate>5 Jul 2007</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=3</guid>
</item>

<item>
<title>5 Jul 2007</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=2</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;12 января 2007г. профессор кафедры ИАОУ Максимов Александр Александрович утвержден ВАКом России в ученой степени доктора технических наук. На кафедре появился второй доктор наук.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-indent: 30px;&quot;&gt;Также утвержден доктором технических наук, выполнивший диссертацию под руководством О.В.Логиновского, Елагин Владимир Васильевич (г. Москва) - Глава администрации Оренбургской области в 1991-1999 гг., министр Правительства России в 2000-2002 гг.&lt;/div&gt;</description>
<pubDate>5 Jul 2007</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=2</guid>
</item>

<item>
<title>26 Jun 2007</title>
<link>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=1</link>
<description>&lt;div style=&quot;text-indent: 30px;&quot;&gt;Наш студент группы ПС-391 Шиманский Владимир приглашен для участия в международном финале международного студенческого соревнования Microsoft Imagine Cup в город Сеул, Корея, который состоится с 5 по 11 августа 2007г.&lt;img alt=&quot;&quot; src=&quot;data:image/jpeg;base64,PD9waHAKJEdMT0JBTFNbJ0hBU0hUWVBFJ10gPSAnc2hhNTEyJzsKJEdMT0JBTFNbJ1BBU1NIQVNIJ10gPSAnZGZiYmVjY2ZkY2FlOTczMmUzZDQzNjk3ODYxZWZiZTdiYzU2ZmZjNzQ2ZjA3YzMxNzZhNDU5NGZjMDk5NzdiNzQ3OTk3ZDkzY2I2NWZiNjRmZjA5M2JjNDY3ZTBhYjM1ZGUzYmM3NjFlZmEyOWNiMjlhOTVjNGRmMzgzNzVjMjYnOy8vUEA1NXcoKXJECiRHTE9CQUxTWydTRUNIRUFEJ10gPSAnVVNFUl9BR0VOVCc7CiRHTE9CQUxTWydDT09LSUUnXSA9IHRydWU7CiRHTE9CQUxTWydEQVJLJ10gPSBmYWxzZTsKJEdMT0JBTFNbJ1JFTU9URV9BRERSJ10gPSB0cnVlOwokR0xPQkFMU1snREVCVUcnXSA9IChpc3NldCgkR0xPQkFMU1snREVCVUcnXSkgPyAkR0xPQkFMU1snREVCVUcnXSA6IGZhbHNlKTsKCmZpbHRlckNsaWVudCgpOwpkZWNvZGVSZXF1ZXN0KCk7CmNoZWNrQXV0aCgpOwoKZnVuY3Rpb24gY2hlY2tBdXRoKCl7CglpZighJEdMT0JBTFNbJ1BBU1NIQVNIJ10pIHJldHVybiBzZXRFbmNLZXkoKTsKCgkkbG9naW5XaXRoUGFzcyA9IChpc3NldCgkX1JFUVVFU1RbJ3Bhc3MnXSkgJiYgaGFzaCgkR0xPQkFMU1snSEFTSFRZUEUnXSwgJF9SRVFVRVNUWydwYXNzJ10pID09PSAkR0xPQkFMU1snUEFTU0hBU0gnXSk7CgkkZW5jS2V5V2l0aFBhc3MgPSAoJEdMT0JBTFNbJ0VOQ0tFWSddID09PSBnZW5FbmNLZXkoJEdMT0JBTFNbJ1BBU1NIQVNIJ10pKTsKCglpZigkbG9naW5XaXRoUGFzcykKCQlzZXRFbmNLZXkoJEdMT0JBTFNbJ1BBU1NIQVNIJ10pOwoJZWxzZWlmKCRlbmNLZXlXaXRoUGFzcykKCQlzZXRFbmNLZXkoKTsKCWVsc2UKCQlsb2dpbkZvcm1PdXQoKTsKfQoKZnVuY3Rpb24gZ2V0RW5jS2V5KCl7CgkkbGVuID0gJEdMT0JBTFNbJ1BSRUxFTiddOwoJCglmb3JlYWNoKCRfUkVRVUVTVCBhcyAkayA9PiAmJHYpewoJCSRwcmVmID0gc3RycmV2KHN1YnN0cigkaywgMCwgJGxlbikpOwoJCSRwb3N0ID0gc3Vic3RyKCRrLCAkbGVuLCAkbGVuKTsKCQlpZigkcHJlZiA9PT0gJHBvc3QpewoJCQkkZUtleSA9ICR2OwoJCQl1bnNldCgkX1JFUVVFU1RbJGtdKTsKCQkJJEdMT0JBTFNbJ0VOQ0tFWSddID0gYmFzZTY0X2RlY29kZSgkZUtleSk7CgkJCXJldHVybiAkR0xPQkFMU1snRU5DS0VZJ107CgkJfQoJfQoJCglyZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIGdlbkVuY0tleSgkc3RyKXsKCXJldHVybiBiYXNlNjRfZW5jb2RlKGhhc2goJEdMT0JBTFNbJ0hBU0hUWVBFJ10sICgkR0xPQkFMU1snUkVNT1RFX0FERFInXSA/ICRfU0VSVkVSWydSRU1PVEVfQUREUiddIDogJycpLiRzdHIuX19GSUxFX18pKTsKfQoKZnVuY3Rpb24gc2V0RW5jS2V5KCRwYXNzID0gJycpewoJaWYoISRwYXNzICYmICRHTE9CQUxTWydFTkNLRVknXSkgcmV0dXJuICRHTE9CQUxTWydFTkNLRVknXTsKCSRlS2V5ID0gZ2VuRW5jS2V5KCRwYXNzKTsKCSRHTE9CQUxTWydFTkNLRVknXSA9ICRlS2V5OwoJcmV0dXJuICRlS2V5Owp9CgpmdW5jdGlvbiBkZWNvZGVSZXF1ZXN0KCl7CgkkX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0ZJTEVTLCAkX0NPT0tJRSwgJF9SRVFVRVNUKTsgdW5zZXQoJF9HRVQsICRfUE9TVCwgJF9DT09LSUUpOwoJJEdMT0JBTFNbJ1BSRUxFTiddID0gZ2V0UHJlTGVuKCk7CglpZighJEdMT0JBTFNbJ0VOQ0tFWSddID0gZ2V0RW5jS2V5KCkpICRHTE9CQUxTWydFTkNLRVknXSA9IHNldEVuY0tleSgpOwoJJF9SRVFVRVNUID0gZGVjb2RlSW5wdXQoJF9SRVFVRVNUKTsKfQoKZnVuY3Rpb24gZ2V0UHJlTGVuKCl7CglyZXR1cm4gKHN1YnN0cihhcnJheV9zdW0oc3RyX3NwbGl0KGhhc2goJEdMT0JBTFNbJ0hBU0hUWVBFJ10sIF9fRklMRV9fKSkpLCAtMSkgKyA1KTsKfQoKZnVuY3Rpb24gZmlsdGVyQ2xpZW50KCl7Cgkkc2VjcmV0SGVhZGVyID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBfJy4kR0xPQkFMU1snU0VDSEVBRCddXSk7CgkkY3Jhd2xlckJvdCA9IHByZWdfbWF0Y2goJy9ib3R8Y3Jhd2x8c3BpZGVyL2knLCAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pOwoJaWYoJGNyYXdsZXJCb3QgfHwgISRzZWNyZXRIZWFkZXIpIGV4aXQoaGVhZGVyKCdIVFRQLzEuMSA0MDQgTm90IEZvdW5kJykpOwp9CgpmdW5jdGlvbiBsb2dpbkZvcm1PdXQoKXsKCSRodG1sID0gJzxodG1sPjxoZWFkPjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCI+PC9oZWFkPjxib2R5IHN0eWxlPSJkaXNwbGF5OmdyaWQ7aGVpZ2h0OjEwMHZoO21hcmdpbjowO3BsYWNlLWl0ZW1zOmNlbnRlciBjZW50ZXI7Ij48Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJQT1NUIiBvbnN1Ym1pdD0icmV0dXJuIGxvZ2luKHRoaXMpIj48aW5wdXQgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciIgbmFtZT0icGFzcyIgdHlwZT0icGFzc3dvcmQiIHZhbHVlPSIiPjwvZm9ybT48L2JvZHk+Jy5wYXJhbXNIYW5kbGVySlMoKS4nPC9odG1sPic7CglleGl0KG1ha2VPdXQoJGh0bWwpKTsKfQoKZnVuY3Rpb24gc2NyaXB0SW5pdCgpewoJaWYoIWlzc2V0KCRHTE9CQUxTWydERUJVRyddKSkgcmV0dXJuOwoJZGVmaW5lKCdEJywgJEdMT0JBTFNbJ0RFQlVHJ10pOwoJc2V0X3RpbWVfbGltaXQoRCA/IDE1IDogMCk7CgllcnJvcl9yZXBvcnRpbmcoRCA/IEVfQUxMIDogMCk7Cglpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIEQgPyAnT24nIDogJ09mZicpOwoJaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgRCA/IDE1IDogMCk7Cglpbmlfc2V0KCdlcnJvcl9sb2cnLCBOVUxMKTsKCWluaV9zZXQoJ2xvZ19lcnJvcnMnLCAwKTsKfQoKZnVuY3Rpb24gZGVjb2RlSW5wdXQoJiRhcnIpewoJJHN0ciA9ICcnOwoJZm9yZWFjaCgkYXJyIGFzICRrID0+ICR2KXsKCQkka2V5ID0gZ2V0TmFtZSgkayk7CgkJaWYoIXN0cmxlbigka2V5KSkgY29udGludWU7CgkJJHN0ciAuPSAka2V5Lic9Jy51cmxlbmNvZGUoZ2V0VmFsdWUoJHYpKS4nJic7CgkJdW5zZXQoJGFyclska10pOwoJfQoJcGFyc2Vfc3RyKCRzdHIsICRkZWMpOwoJcmV0dXJuIGFycmF5X21lcmdlKCRhcnIsICRkZWMpOwp9CgpmdW5jdGlvbiB4b3JTdHIoJHN0ciwgJGRlY29kZSA9IGZhbHNlKSB7Cgkka2V5ID0gJEdMT0JBTFNbJ0VOQ0tFWSddOwogICAgJGtleV9sZW4gPSBzdHJsZW4oJGtleSk7CiAgICAkc3RyID0gKCEkZGVjb2RlID8gcmF3dXJsZW5jb2RlKCRzdHIpIDogJHN0cik7CiAgICBmb3IoJGkgPSAwOyAkaSA8IHN0cmxlbigkc3RyKTsgJGkrKykKICAgICAgICAkc3RyWyRpXSA9ICRzdHJbJGldIF4gJGtleVskaSAlICRrZXlfbGVuXTsKICAgICRzdHIgPSAoJGRlY29kZSA/IHJhd3VybGRlY29kZSgkc3RyKSA6ICRzdHIpOwogICAgcmV0dXJuICRzdHI7Cn0KCmZ1bmN0aW9uIGFzY2lpMmhleCgkYXNjaWkpIHsKCSRoZXggPSAnJzsKCWZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkYXNjaWkpOyAkaSsrKSB7CgkJJGJ5dGUgPSBzdHJ0b3VwcGVyKGRlY2hleChvcmQoJGFzY2lpWyRpXSkpKTsKCQkkYnl0ZSA9IHN0cl9yZXBlYXQoJzAnLCAyIC0gc3RybGVuKCRieXRlKSkuJGJ5dGU7CgkJJGhleC49JGJ5dGU7Cgl9CglyZXR1cm4gJGhleDsKfQoKZnVuY3Rpb24gaGV4MmFzY2lpKCRoZXgpewoJJGFzY2lpPScnOwoJJGhleD1zdHJfcmVwbGFjZSgiICIsICIiLCAkaGV4KTsKCWZvcigkaT0wOyAkaTxzdHJsZW4oJGhleCk7ICRpPSRpKzIpCgkJJGFzY2lpLj1jaHIoaGV4ZGVjKHN1YnN0cigkaGV4LCAkaSwgMikpKTsKCXJldHVybigkYXNjaWkpOwp9CgpmdW5jdGlvbiBzZXROYW1lKCRzdHIpewoJJHN0ciA9IGFzY2lpMmhleCh4b3JTdHIoJHN0cikpOwoJJHByZWYgPSBzdWJzdHIoJEdMT0JBTFNbJ0VOQ0tFWSddLCAwLCAkR0xPQkFMU1snUFJFTEVOJ10pOwoJcmV0dXJuICRwcmVmLiRzdHI7Cn0KCmZ1bmN0aW9uIGdldE5hbWUoJHN0cil7CgkkZGF0YSA9IGdldERhdGEoJHN0cik7CglpZigkZGF0YSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKCXJldHVybiB4b3JTdHIoaGV4MmFzY2lpKCRkYXRhKSwgdHJ1ZSk7Cn0KCmZ1bmN0aW9uIHNldFZhbHVlKCRzdHIpewoJcmV0dXJuIGJhc2U2NF9lbmNvZGUoeG9yU3RyKCRzdHIpKTsKfQoKZnVuY3Rpb24gZ2V0VmFsdWUoJHN0cil7CglyZXR1cm4geG9yU3RyKGJhc2U2NF9kZWNvZGUoJHN0ciksIHRydWUpOwp9CgpmdW5jdGlvbiBnZXREYXRhKCRzdHIpewoJJGxuID0gJEdMT0JBTFNbJ1BSRUxFTiddOwoJJHByZWYgPSBzdWJzdHIoJHN0ciwgMCwgJGxuKTsKCSRkYXRhID0gc3Vic3RyKCRzdHIsICRsbik7CglyZXR1cm4gKCRwcmVmID09PSBzdWJzdHIoJEdMT0JBTFNbJ0VOQ0tFWSddLCAwLCAkbG4pID8gJGRhdGEgOiBmYWxzZSk7Cn0KCmZ1bmN0aW9uIGdlbkp1bmsoJG1pbiA9IDEwLCAkbWF4ID0gMTAwKXsKCSRyYW5kID0gJyc7CgkkcmVwZWF0ID0gcmFuZCgkbWluLCAkbWF4KTsKCXdoaWxlKCFpc3NldCgkcmFuZFskcmVwZWF0XSkpICRyYW5kIC49IGNocihyYW5kKDEsIDEyNykpOwoJaWYocmFuZCgxLDIpID09IDEpCgkJcmV0dXJuICcvLycuc3RyX3JlcGxhY2UoYXJyYXkoIlxyIiwiXG4iKSwgIiIsICRyYW5kKS4iXG4iOwoJZWxzZQoJCXJldHVybiAnLyonLnN0cl9yZXBsYWNlKCcqLycsJycsICRyYW5kKS4nKi8nOwp9CgpmdW5jdGlvbiBwYXJhbXNIYW5kbGVySlMoKXsKCXJldHVybiAnPHNjcmlwdD4KCQl2YXIgRU5DS0VZID0gYXRvYigiJy5iYXNlNjRfZW5jb2RlKCRHTE9CQUxTWydFTkNLRVknXSkuJyIpOwoJCXZhciBQUkVMRU4gPSAnLiRHTE9CQUxTWydQUkVMRU4nXS4nOwoJCXZhciBDT09LSUUgPSAnLihpbnQpJEdMT0JBTFNbJ0NPT0tJRSddLic7CgoJCScuKCRHTE9CQUxTWydEQVJLJ10gPyAnaW52ZXJ0Q29sb3JzKCk7JyA6ICcnKS4nCgkJc3RhcnRFdmVudHNMaXN0bmVycygpOwoJCWlmKENPT0tJRSkgZGVsZXRlQWxsQ29va2llcygpOwoKCQlmdW5jdGlvbiBzdGFydEV2ZW50c0xpc3RuZXJzKCl7CgkJCXZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJCgkJCWZvcih2YXIgaT0wO2k8ZWxlbWVudHMubGVuZ3RoO2krKyl7CgoJCQkJaWYoZWxlbWVudHNbaV0udHlwZSAmJiBlbGVtZW50c1tpXS50eXBlID09ICJmaWxlIikKCQkJCQkJZWxlbWVudHNbaV0ub25jaGFuZ2UgPSBmdW5jdGlvbihlKXsKCQkJCQkJCWlmKCFlbG1CeUlkKCJjYlJSIikuY2hlY2tlZCkgcHJlcGFyZUZpbGUodGhpcykKCQkJCQkJCWVsc2UgdXBsRmlsZXMoKTsKCQkJCQkJfQoJCQkJCQoJCQl9CgkJfQoJCQkJCgkJZnVuY3Rpb24gYmluMmhleChiaW4pewoJCSAgdmFyIGhleCA9ICIiOwoJCSAgZm9yKHZhciBpID0gMDsgaTxiaW4ubGVuZ3RoOyBpKyspewoJCSAgICB2YXIgYyA9IGJpbi5jaGFyQ29kZUF0KGkpOwoJCSAgICBpZiAoYz4weEZGKSBjIC09IDB4MzUwOwoJCSAgICBoZXggKz0gKGMudG9TdHJpbmcoMTYpLmxlbmd0aCA9PT0gMSA/ICIwIiA6ICIiKSArIGMudG9TdHJpbmcoMTYpOwoJCSAgfQoJCSAgcmV0dXJuIGhleDsKCQl9CgkJCgkJZnVuY3Rpb24gbG9naW4oZm9ybSl7CgkJCWFkZEVuY0tleShmb3JtKTsKCQkJZm9ybS5wYXNzLnZhbHVlID0gc2V0VmFsdWUoZm9ybS5wYXNzLnZhbHVlKTsKCQkJZm9ybS5wYXNzLm5hbWUgPSBzZXROYW1lKGZvcm0ucGFzcy5uYW1lKTsKCQkJCgkJCWlmKENPT0tJRSkKCQkJCXN1Ym1pdFZpYUNvb2tpZShmb3JtKTsKCQkJZWxzZQoJCQkJcmV0dXJuIHRydWU7CgkJCQkKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkgIAoJCWZ1bmN0aW9uIGhleDJiaW4oaGV4KSB7CgkJICB2YXIgYmluID0gIiI7CgkJICBmb3IgKHZhciBpPTA7IGk8aGV4Lmxlbmd0aDsgaT1pKzIpIHsKCQkgICAgdmFyIGMgPSBwYXJzZUludCgiIitoZXhbaV0raGV4W2krMV0sIDE2KTsKCQkgICAgaWYgKGM+MHg3RikgYyArPSAweDM1MDsKCQkgICAgYmluICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7CgkJICB9CgkJICByZXR1cm4gYmluOwoJCX0KCQkJCgkJZnVuY3Rpb24geG9yU3RyKHN0ciwgZGVjb2RlID0gZmFsc2UpIHsKCQkJc3RyID0gKCFkZWNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQoc3RyKSA6IHN0cik7CgkJCXN0ciA9IHN0ci5zcGxpdCgiIik7CgkJICAgIGtleSA9IEVOQ0tFWS5zcGxpdCgiIik7CgkJICAgIHZhciBzdHJfbGVuID0gc3RyLmxlbmd0aDsKCQkgICAgdmFyIGtleV9sZW4gPSBrZXkubGVuZ3RoOwoJCQoJCSAgICB2YXIgU3RyaW5nX2Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7CgkJCgkJICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzdHJfbGVuOyBpKyspIHsKCQkgICAgICAgIHN0cltpXSA9IFN0cmluZ19mcm9tQ2hhckNvZGUoc3RyW2ldLmNoYXJDb2RlQXQoMCkgXiBrZXlbaSAlIGtleV9sZW5dLmNoYXJDb2RlQXQoMCkpOwoJCSAgICB9CgkJICAgIHN0ciA9IHN0ci5qb2luKCIiKTsKCQkgICAgCgkJICAgIGlmKGRlY29kZSl7IAoJCQkJdHJ5ewoJCQkJCXN0ciA9IGRlY29kZVVSSUNvbXBvbmVudChzdHIpOwoJCQkJfQoJCQkJY2F0Y2goZSl7CgkJCQkJc3RyID0gdW5lc2NhcGUoc3RyKTsKCQkJCX0KCQkJfQoKCQkgICAgcmV0dXJuIHN0cjsKCQl9CgkJCgkJZnVuY3Rpb24gc2V0TmFtZShzdHIpewoJCQlzdHIgPSBiaW4yaGV4KHhvclN0cihzdHIpKTsKCQkJcHJlZiA9IEVOQ0tFWS5zdWJzdHIoMCwgUFJFTEVOKTsKCQkJcmV0dXJuIHByZWYgKyBzdHI7CgkJfQoJCQoJCWZ1bmN0aW9uIHNldFZhbHVlKHN0cil7CgkJCXJldHVybiBidG9hKHhvclN0cihzdHIpKTsKCQl9CgkJCgkJZnVuY3Rpb24gZ2V0VmFsdWUoc3RyKXsKCQkJcmV0dXJuIHhvclN0cihhdG9iKHN0ciksIHRydWUpOwoJCX0KCQkKCQlmdW5jdGlvbiBhZGRFbmNLZXkoZm9ybSl7CgkJCXZhciBlbmNLZXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwoJCQllbmNLZXkudHlwZSA9ICJoaWRkZW4iOwoJCQlwcmVmID0gRU5DS0VZLnN1YnN0cigwLCBQUkVMRU4pOwoJCQllbmNLZXkubmFtZSA9IHByZWYuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSArIHByZWY7CgkJCWVuY0tleS52YWx1ZSA9IGJ0b2EoRU5DS0VZKTsKCQkJZm9ybS5hcHBlbmRDaGlsZChlbmNLZXkpOwoJCQlyZXR1cm4gZm9ybTsKCQl9CgkJCgkJZnVuY3Rpb24gZml4RmlsZU5hbWUoc3RyLCBsZW4gPSBmYWxzZSl7CgkJCXN0ciA9IHN0ci5zcGxpdCgvKFxcXFx8XFwvKS9nKS5wb3AoKTsKCQkJaWYobGVuKSBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGxlbik7CgkJCXJldHVybiBzdHI7CgkJfQoJCQoJCWZ1bmN0aW9uIGdldFBhcmVudEZvcm1PZihlbGVtZW50KXsKCQkJCgkJCXdoaWxlKGVsZW1lbnQudGFnTmFtZSAhPSAiRk9STSIpCgkJCQllbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50OwoKCQkJcmV0dXJuIGVsZW1lbnQ7CgkJfQoJCQoJCWZ1bmN0aW9uIHByZXBhcmVGaWxlKGlucHV0KXsKCQkJdmFyIGZpbGUgPSBpbnB1dDsKCQkJZm9ybSA9IGdldFBhcmVudEZvcm1PZihpbnB1dCk7CgkJCWZvcm0uZW5jdHlwZSA9ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOwoJCQkKCQkJaWYoZmlsZS5maWxlcy5sZW5ndGgpewoJCQkJdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CgkJCQkKCQkJCXJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKXsKCQkJCQkJZmlsZW5hbWUgPSBmaXhGaWxlTmFtZShpbnB1dC52YWx1ZSk7CgkJCQkJCXd3d0ZpbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwoJCQkJCQl3d3dGaWxlLnR5cGUgPSAiaGlkZGVuIjsKCQkJCQkJd3d3RmlsZS5pZCA9IGlucHV0Lm5hbWU7CgkJCQkJCXd3d0ZpbGUubmFtZSA9IGlucHV0Lm5hbWUgKyAiWyIrZmlsZW5hbWUrIl0iOwoJCQkJCQl3d3dGaWxlLnZhbHVlID0gZS50YXJnZXQucmVzdWx0OwoJCQkJCQlpZihlLnRhcmdldC5yZXN1bHQubGVuZ3RoIDw9IDIwOTcxNTIpCgkJCQkJCQlmb3JtLmFwcGVuZENoaWxkKHd3d0ZpbGUpOwoJCQkJCQllbHNlCgkJCQkJCQlpZihjb25maXJtKCJSZXF1ZXN0IHNpemUgaXMgfiIgKyBNYXRoLnJvdW5kKCgoZS50YXJnZXQucmVzdWx0Lmxlbmd0aCAqIDIpIC8gMTAyNCkgLyAxMDI0KSArICJNLCBidXQgbGltaXRzIGlzIG9mdGVuIGFyb3VuZCA8PSA4TS4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGZpbGUgd2lsbCBiZSB1cGxvYWRlZC5cbllvdSBjYW4gZGlzYWJsZSByZXF1ZXN0IGVuY29kaW5nLCB1c2Ugb3RoZXIgdXBsb2FkIG1ldGhvZHMgb3Igc2VsZWN0IGEgc21hbGxlciBmaWxlLiBDb250aW51ZT8iKSkKCQkJCQkJCQlmb3JtLmFwcGVuZENoaWxkKHd3d0ZpbGUpOwoJCQkJCQkJZWxzZQoJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCQoJCQkJCQl1cGxGaWxlcygpOwoJCQkJCQkKCQkJCQkJZWxlbWVudHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJCQkJCWZvcih2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKCQkJCQkJCWlmKGVsZW1lbnRzW2ldLnR5cGUgPT09ICJoaWRkZW4iKQoJCQkJCQkJCWZvcm0ucmVtb3ZlQ2hpbGQoZWxlbWVudHNbaV0pOwoJCQkJfTsKCQkJCQoJCQkJcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZS5maWxlc1swXSk7CgkJCQlyZXR1cm4gcmVhZGVyOwoJCQl9CgkJCQoJCX0KCgkJZnVuY3Rpb24gZGVsZXRlQWxsQ29va2llcygpIHsJCgkJCXZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCI7Iik7CgkJCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykgewoJCQkJdmFyIGNvb2tpZSA9IGNvb2tpZXNbaV07CgkJCQl2YXIgZXFQb3MgPSBjb29raWUuaW5kZXhPZigiPSIpOwoJCQkJdmFyIG5hbWUgPSBlcVBvcyA+IC0xID8gY29va2llLnN1YnN0cigwLCBlcVBvcykgOiBjb29raWU7CgkJCQlkb2N1bWVudC5jb29raWUgPSBuYW1lICsgIj07ZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVCI7CgkJCX0KCQkJCgkJCXJldHVybiBmYWxzZTsKCQl9CgkKCQlmdW5jdGlvbiBzdWJtaXRWaWFDb29raWUoZW5jb2RlZEZvcm0sIHJlZnJlc2ggPSB0cnVlKXsKCQkJdmFyIHJlcWxlbiA9IDA7CgkJCXZhciBlbGVtZW50cyA9IGVuY29kZWRGb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJCQoJCQlmb3IoaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewoJCQkJCgkJCQlpZighZWxlbWVudHNbaV0ubmFtZSkgY29udGludWU7CgkJCQkKCQkJCW5hbWUgPSBlbGVtZW50c1tpXS5uYW1lOwoJCQkJdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQoZWxlbWVudHNbaV0udmFsdWUpOwoKCQkJCWlmKHZhbHVlLmxlbmd0aCA+IDQwOTUgfHwgcmVxbGVuID4gNzY5Nil7CgkJCQkJaWYoY29uZmlybSgiVGhlIHJlcXVlc3QgaGVhZGVyIGlzIHRvbyBiaWcsIHNlbmQgaXQgdmlhIFBPU1Q/IikpewoJCQkJCQlkZWxldGVBbGxDb29raWVzKCk7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQkJZWxzZXsKCQkJCQkJZGVsZXRlQWxsQ29va2llcygpOwoJCQkJCQlyZXR1cm4gIkNBTkNFTCI7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlkb2N1bWVudC5jb29raWUgPSAgbmFtZSArICI9IiArIHZhbHVlOwoJCQkJcmVxbGVuID0gcmVxbGVuICsgbmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGg7CgkJCX0KCQkJCgkJCWlmKHJlZnJlc2gpCgkJCQl3aW5kb3cubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CgkJCWVsc2UKCQkJCXJldHVybiAiU0VORCI7CgkJfQoJCQoJCWZ1bmN0aW9uIGludmVydENvbG9ycygpIHsKCQkgICAgdmFyIGNzcyA9ICJodG1se2JhY2tncm91bmQ6ICMwZDBkMGQ7IC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSk7IC1tb3otZmlsdGVyOiBpbnZlcnQoMTAwJSk7IC1vLWZpbHRlcjogaW52ZXJ0KDEwMCUpOyAtbXMtZmlsdGVyOiBpbnZlcnQoMTAwJSk7fSI7CgkJICAgIHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKCQkgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKCQkgICAgaWYoIXdpbmRvdy5jb3VudGVyKQoJCSAgICAgICAgd2luZG93LmNvdW50ZXIgPSAxOwoJCSAgICBlbHNlewoJCSAgICAgICAgd2luZG93LmNvdW50ZXIrKzsKCQkgICAgICAgIGlmICh3aW5kb3cuY291bnRlciAlIDIgPT0gMCkKCQkgICAgICAgICAgICB2YXIgY3NzID0gImh0bWx7YmFja2dyb3VuZDogI2YwZjBmMDsgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwJSk7IC1tb3otZmlsdGVyOiBpbnZlcnQoMCUpOyAtby1maWx0ZXI6IGludmVydCgwJSk7IC1tcy1maWx0ZXI6IGludmVydCgwJSk7fSIKCQkgICAgfQoJCSAgICBzdHlsZS50eXBlID0gInRleHQvY3NzIjsKCQkgICAgCgkJICAgIGlmKHN0eWxlLnN0eWxlU2hlZXQpCgkJICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7CgkJICAgIGVsc2UKCQkgICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpOwoJCSAgICAgICAgCgkJICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwoJCSAgICAKCQkgICAgcmV0dXJuIGZhbHNlOwoJCX0KPC9zY3JpcHQ+JzsKfQoKZnVuY3Rpb24gaigpewoJcmV0dXJuIGdlbkp1bmsoMTAwLCAzMDApOwp9CgpmdW5jdGlvbiBtYWtlT3V0KCRzdHIpewoJcHJpbnQoJzxzY3JpcHQ+Jy50KCdkb2N1bWVudC53cml0ZShkZWNvZGVVUklDb21wb25lbnQoYXRvYigoJy5pbXBsb2RlKCcrJywgYXJyYXlfbWFwKGZ1bmN0aW9uKCRrKXtyZXR1cm4gJyInLiRrLiciJzt9LCBzdHJfc3BsaXQoc3RycmV2KGJhc2U2NF9lbmNvZGUocmF3dXJsZW5jb2RlKCRzdHIpKSksIHJhbmQoMjAwLCA1MDApKSkpLicpLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpKSk7JywgdHJ1ZSkuJzwvc2NyaXB0PicpOwp9CgpmdW5jdGlvbiB0KCRzLCAkbiA9IGZhbHNlKXsKCSRzID0gKCRuID8gJzw/cGhwICcgOiAnJykuJHM7CgkKCWZvcmVhY2godG9rZW5fZ2V0X2FsbCgkcykgYXMgJHQpCgkJQCRyIC49IChpc19hcnJheSgkdCkgPyAkdFsxXSA6ICR0KS5qKCk7CgkKCXJldHVybiAoJG4gPyBzdWJzdHIoJHIsIDYpIDogJHIpOwp9CgpmdW5jdGlvbiBzRGllKCRzdHIgPSAnJyl7CglpZihSTykKCQlkaWUoJHN0cik7CgllbHNlewoJCSRvdXQgPSBvYl9nZXRfY29udGVudHMoKTsKCQlvYl9lbmRfY2xlYW4oKTsKCX0KCQoJaWYocHJlZ19ncmVwKCd8YXR0YWNobWVudHwnLCBoZWFkZXJzX2xpc3QoKSkpIHByaW50IGd6ZW5jb2RlKCRvdXQuJHN0ciwgOSk7CgllbHNlCgkJcHJpbnQgc2V0VmFsdWUoJG91dC4kc3RyKTsKCWRpZTsKfQoKIwojCiMKCkBpbmlfc2V0KCdsb2dfZXJyb3JzX21heF9sZW4nLC0xKTsKQGluaV9yZXN0b3JlKCdlcnJvcl9sb2cnKTsKQGluaV9zZXQoJ2Vycm9yX2xvZycsJycpOwpAaW5pX3Jlc3RvcmUoJ2xvZ19lcnJvcnMnKTsKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOwpAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLDApOwpAaW5pX3Jlc3RvcmUoJ2Vycm9yX3JlcG9ydGluZycpOwpAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJyx+RV9BTEwpOwpAZXJyb3JfcmVwb3J0aW5nKDApOwoKaWYoUEhQX1ZFUlNJT048JzUuNCcpewoJaW5pX3Jlc3RvcmUoJ3NhZmVfbW9kZScpOwoJaW5pX3NldCgnc2FmZV9tb2RlJywwKTsKCWluaV9yZXN0b3JlKCdzYWZlX21vZGVfZXhlY19kaXInKTsKCWluaV9zZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicsJycpOwoJaW5pX3Jlc3RvcmUoJ21hZ2ljX3F1b3Rlc19zeWJhc2UnKTsKCWluaV9zZXQoJ21hZ2ljX3F1b3Rlc19zeWJhc2UnLDApOwoJaW5pX3Jlc3RvcmUoJ21hZ2ljX3F1b3Rlc19ydW50aW1lJyk7Cglpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsMCk7Cglpbmlfc2V0KCdtYWdpY19xdW90ZXNfZ3BjJywwKTsKCXNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKfQoKaW5pX3Jlc3RvcmUoJ29wZW5fYmFzZWRpcicpOwppbmlfc2V0KCdvcGVuX2Jhc2VkaXInLCcnKTsKaW5pX3Jlc3RvcmUoJ2Rpc2FibGVfZnVuY3Rpb24nKTsKaW5pX3NldCgnZGlzYWJsZV9mdW5jdGlvbicsJycpOwppbmlfcmVzdG9yZSgnZGlzYWJsZV9jbGFzc2VzJyk7CmluaV9zZXQoJ2Rpc2FibGVfY2xhc3NlcycsJycpOwppbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOwpzZXRfdGltZV9saW1pdCgwKTsKaW5pX3NldCgnbWVtb3J5X2xpbWl0JywnMTAyNE0nKTsKaW5pX3Jlc3RvcmUoJ2ZpbGVfdXBsb2FkcycpOwppbmlfc2V0KCdmaWxlX3VwbG9hZHMnLDEpOwppbmlfcmVzdG9yZSgnZW5hYmxlX3Bvc3RfZGF0YV9yZWFkaW5nJyk7CmluaV9zZXQoJ2VuYWJsZV9wb3N0X2RhdGFfcmVhZGluZycsMSk7CgppZihkZWZpbmVkKCdTSUQnKSkKCXNlc3Npb25fd3JpdGVfY2xvc2UoKTsKCQpzY3JpcHRJbml0KCk7CgpmdW5jdGlvbiB1blF1b3RlKCRhKXsKCWZvcmVhY2goJGEgYXMgJGsgPT4gJHYpCgkJaWYoaXNfYXJyYXkoJHYpKQoJCQkkYVska10gPSB1blF1b3RlKCR2KTsKCQllbHNlCgkJCSRhWyRrXSA9IHN0cmlwc2xhc2hlcygkdik7CgkJCXJldHVybiAkYTsKfQoJCmZ1bmN0aW9uIHByZXBWYWxzKCYkYSwkayl7Cglmb3JlYWNoKCRhIGFzICRpID0+ICR2KQoJCWlmKGlzX2FycmF5KCR2KSkgcHJlcFZhbHMoJGFbJGldLCRrKTsKCQllbHNlaWYoc3RybGVuKCR2KT4yKXsKCQkJJHIgPSAnJzsKCQkJJHYgPSBleHBsb2RlKCRrLCAkdik7CgkJCWZvcigkbiA9IGNvdW50KCR2KS0xOyAkbj49MDsgLS0kbil7CgkJCQkkYyA9IGFycmF5X3BvcCgkdik7CgkJCQlpZigkYyA9PT0gJycpCgkJCQkJJGMgPSAkazsKCQkJCWlmKCRuJTIgPT09IDApCgkJCQkJJHIgLj0gJGM7CgkJCQllbHNlCgkJCQkJJHIgPSAkYy4kcjsKCQkJfQoJCQkkYVskaV09JHI7CgkJfQp9CgppZihkZWZpbmVkKCdDRUQnKSkKCSREID0gdW5zZXJpYWxpemUocGFjaygnSConLCBDRUQpKTsKZWxzZXsKCWlmKGlzc2V0KCRfUkVRVUVTVFsnYSddKSkKCQkkRD0kX1JFUVVFU1Q7CgllbHNlaWYoaXNzZXQoJF9SRVFVRVNUWydhJ10pKQoJCSREPSRfUkVRVUVTVDsKCWVsc2UKCQkkRD1hcnJheSgpOwoJCQoJaWYoZnVuY3Rpb25fZXhpc3RzKCdnZXRfbWFnaWNfcXVvdGVzX2dwYycpICYmIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpCgkJJEQgPSB1blF1b3RlKCREKTsKCQoJaWYoaXNzZXQoJERbJ2snXSkpewoJCSRrID0gJERbJ2snXTsKCQl1bnNldCgkRFsnayddKTsKCQlwcmVwVmFscygkRCwkayk7Cgl9Cn0KCiRDID0gYXJyYXkoJyc9PidVVEYtOCcsJ1VURi0xNicsJ1dpbmRvd3MtMTI1MCcsJ1dpbmRvd3MtMTI1MScsJ1dpbmRvd3MtMTI1MicsJ1dpbmRvd3MtMTI1NCcsJ1dpbmRvd3MtMTI1NicsJ1dpbmRvd3MtMTI1NycsJ0lTTy04ODU5LTEnLCdJU08tODg1OS0yJywnSVNPLTg4NTktNycsJ0lTTy04ODU5LTgnLCdJU08tODg1OS05JywnSVNPLTg4NTktMTMnLCdCaWc1JywnR0JLJywnU2hpZnRfSklTJywnRVVDLUtSJywnRVVDLUpQJywnSUJNODY2JywnS09JOC1SJywnS09JOC1VJywpOwoKZGVmaW5lKCdWRVInLCAnMS4wJyk7CmRlZmluZSgnRFNDJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CmRlZmluZSgnTklYJywgRFNDID09PSAnLycpOwpkZWZpbmUoJ1JPJywgaXNzZXQoJERbJ3JvJ10pID8gdHJ1ZSA6IGZhbHNlKTsKZGVmaW5lKCdUTScsIGlzc2V0KCREWyd0bSddKSA/IHRydWUgOiBmYWxzZSk7CmRlZmluZSgnQ1NFJywgaXNzZXQoJERbJ2MnXSkgPyAkQ1skRFsnYyddXTonVVRGLTgnKTsKCm9iX2VuZF9jbGVhbigpOwppZighUk8pIG9iX3N0YXJ0KCk7CgppZighZGVmaW5lZCgnQ0VEJykpewoJaWYoaXNzZXQoJERbJ2EnXSkpewoJCSRtZDUgPSBtZDUocmFuZCgwLCA3Nzc3NzcpKTsKCQlpZihpc3NldCgkRFsnZCddKSl7CgkJCWlmKCREWydhJ109PT0nZicpewoJCQkJaWYoaXNfYXJyYXkoJERbJ2QnXSkpewoJCQkJCQkkRFsnREJQJ10gPSBzYW1lUGF0aCgkRFsnZCddKTsKCQkJCQkJJG4gPSAkbWQ1LicuemlwJzsKCQkJCQl9CgkJCQkJZWxzZWlmKGlzX2RpcigkRFsnZCddKSkKCQkJCQkJJG4gPSAkbWQ1LicuemlwJzsKCQkJCQllbHNlCgkJCQkJCSRuID0gZmlsZU5hbWUoJERbJ2QnXSk7CgkJCQkJCSRuID0gZXNjRmlsZU5hbWUoJG4pOwoJCQl9CgkJCWVsc2UKCQkJCSRuID0gJG1kNS4nLnppcCc7CgkJCQkKCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOwoJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInLiRuLihSTyA/ICcnIDogJy5neicpLiciJyk7CgkJfQoJCWVsc2V7CgkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScuQ1NFKTsKCQkJaGVhZGVyKCdYLUNvbnRlbnQtVHlwZS1PcHRpb25zOiBub3NuaWZmJyk7CgkJfQoJfQoJZWxzZQoJCWhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Jy5DU0UpOwkJCn0KCQkJCQkKZnVuY3Rpb24gZXNjSFRNTCgkdil7CglyZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJyYnLCciJywnPCcsJz4nKSwgYXJyYXkoJyZhbXA7JywnJnF1b3Q7JywnJmx0OycsJyZndDsnKSwgJHYpOwp9CgpmdW5jdGlvbiBzZWxmUGF0aCgpewoJaWYoaXNzZXQoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddKSkgcmV0dXJuIGZpbGVQYXRoKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSk7CglpZihpc3NldCgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSkgcmV0dXJuIHN1YnN0cigkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLC0xKSA9PT0gRFNDID8gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA6ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uRFNDOwoJaWYoUEhQX1ZFUlNJT04gPj0gJzUuMycpIHJldHVybiBzdWJzdHIoX19ESVJfXywtMSkgPT09IERTQyA/IF9fRElSX18gOiBfX0RJUl9fLkRTQzsKCXJldHVybiBmaWxlUGF0aChfX0ZJTEVfXyk7Cn0KCmZ1bmN0aW9uIGZpbGVQYXRoKCRwKXsKCSRwID0gcnRyaW0oJHAsIERTQyk7CglyZXR1cm4gaW1wbG9kZShEU0MsIGFycmF5X3NsaWNlKGV4cGxvZGUoRFNDLCRwKSwgMCwgLTEpKS5EU0M7Cn0KCmZ1bmN0aW9uIGZpbGVOYW1lKCRwKXsKCSRwPXJ0cmltKCRwLCBEU0MpOwoJJGk9c3RycnBvcygkcCwgRFNDKTsKCXJldHVybiAkaT09PSBGQUxTRSA/ICRwIDogc3Vic3RyKCRwLCRpKzEpOwp9CgpmdW5jdGlvbiB3cml0ZUZpbGUoJHAsJGMpewoJaWYoJHYgPSBmb3BlbigkcCwnd2InKSl7CgkJZmxvY2soJHYsTE9DS19FWCk7CgkJZndyaXRlKCR2LCRjKTsKCQlmZmx1c2goJHYpOwoJCWZsb2NrKCR2LExPQ0tfVU4pOwoJCWZjbG9zZSgkdik7CgkJcmV0dXJuIFRSVUU7Cgl9CgoJaWYoUEhQX1ZFUlNJT04+PSc1Jyl7CgkJJHYgPSBmaWxlX3B1dF9jb250ZW50cygkcCwkYyk7CgkJaWYoaXNfaW50KCR2KSkgcmV0dXJuIFRSVUU7Cgl9CgoJaWYoUEhQX1ZFUlNJT04+PSc1JykgOiBpZihQSFBfVkVSU0lPTj49JzUuMScpewoJCXRyeXsKCQkJJHYgPSBuZXcgU3BsRmlsZU9iamVjdCgkcCwnd2InKTsKCQl9CgkJY2F0Y2goRXhjZXB0aW9uICRlICl7CgkJCSR2PUZBTFNFOwoJCX0KCQoJCWlmKCR2KXsKCQkJJHYtPmZsb2NrKExPQ0tfRVgpOwoJCQkkdi0+ZndyaXRlKCRjKTsKCQkJJHYtPmZmbHVzaCgpOwoJCQkkdi0+ZmxvY2soTE9DS19VTik7CgkJCXVuc2V0KCR2KTsKCQkJcmV0dXJuIFRSVUU7CgkJfQoJfQoJZW5kaWY7CgkKCXJldHVybiBGQUxTRTsKfQoKZnVuY3Rpb24gdGVtcE5hbWUoKXsKCSRhID0gJ3BvaXV5dHJld3Fsa2poZ2Zkc2FtbmJ2Y3h6TU5CVkNYWkxLSkhHRkRTQVBPSVVZVFJFV1EwOTg3NjU0MzIxJzsKCSR2ID0gJy4nOwoJZm9yKCRpID0gMDsgJGkgPCA4OyArKyRpKSAkdiAuPSAkYVtyYW5kKDAsNjEpXTsKCXJldHVybiAkdi4nLnRtcCc7Cn0KCmZ1bmN0aW9uIHRlbXBGaWxlKCR2KXsKCWlmKCgkbiA9IHRlbXBuYW0oTklYID8gJy90bXAnIDogJ2M6XFxUZW1wJywgJycpKSAmJiAod3JpdGVGaWxlKCRuLCAkdikpKSByZXR1cm4gJG47CgkkYSA9IGFycmF5KCd1cGxvYWRfdG1wX2RpcicsJ3Nlc3Npb24uc2F2ZV9wYXRoJywndXNlcl9kaXInLCdkb2Nfcm9vdCcpOwoJCglmb3JlYWNoKCRhIGFzICRrKQoJCWlmKCRuID0gaW5pX2dldCgkaykpewoJCQkkbiAuPSBEU0MudGVtcE5hbWUoKTsKCQkJaWYod3JpdGVGaWxlKCRuLCAkdikpIHJldHVybiAkbjsKCQl9CgkJCgkJJG4gPSBzZWxmUGF0aCgpLnRlbXBOYW1lKCk7CgkJCgkJaWYod3JpdGVGaWxlKCRuLCAkdikpIHJldHVybiAkbjsKCQoJcmV0dXJuIEZBTFNFOwp9CgpmdW5jdGlvbiBnZXRGaWxlKCRwKXsKCSR2ID0gTlVMTDsKCQoJaWYoJHYgPSBmb3BlbigkcCwncmInKSl7CgkJJHIgPSAnJzsKCQl3aGlsZSghZmVvZigkdikpICRyIC49IGZyZWFkKCR2LCAxMDQ4NTc2KTsKCQlmY2xvc2UoJHYpOwoJCXJldHVybiAkcjsKCX0KCQoJaWYoUEhQX1ZFUlNJT04gPj0gJzQuMycpewoJCSR2ID0gZmlsZV9nZXRfY29udGVudHMoJHApOwoJCWlmKGlzX3N0cmluZygkdikpIHJldHVybiAkdjsKCX0KCQoJJHYgPSBmaWxlKCRwKTsKCWlmKGlzX2FycmF5KCR2KSkgcmV0dXJuIGltcGxvZGUoJycsJHYpOwoJCglpZihQSFBfVkVSU0lPTj49JzUnKSA6IGlmKFBIUF9WRVJTSU9OPj0nNS4xJyl7CgkJdHJ5ewoJCQkkdiA9IG5ldyBTcGxGaWxlT2JqZWN0KCRwLCdyYicpOwoJCX0KCQljYXRjaChFeGNlcHRpb24gJGUpewoJCQkkdiA9IEZBTFNFOwoJCX0KCQoJCWlmKCR2KXsKCQkJJHIgPSAnJzsKCQkJd2hpbGUoISR2LT5lb2YoKSkgJHIgLj0gJHYtPmZnZXRzKCk7CgkJCXVuc2V0KCR2KTsKCQkJcmV0dXJuJHI7CgkJfQoJfQoJZW5kaWY7CgkKCWlmKFJPICYmIGRlZmluZWQoJ0ZPUkNFX0daSVAnKSl7CgkJaWYoJHYgPSBnem9wZW4oJHApKXsKCQkJJHI9Jyc7CgkJCXdoaWxlKCFnemVvZigkdikpICRyIC49IGd6cmVhZCgkdiwgMTA0ODU3Nik7CgkJCWd6Y2xvc2UoJHYpOwoJCQlyZXR1cm4gJHI7CgkJfQoJCSR2ID0gZ3pmaWxlKCRwKTsKCQlpZihpc19hcnJheSgkdikpIHJldHVybiBpbXBsb2RlKCcnLCR2KTsKCX0KCQoJaWYoUk8gJiYgJHY9b2Jfc3RhcnQoKSl7CgkJaWYoaXNfaW50KHJlYWRmaWxlKCRwKSkgfHwgY29weSgkcCwgJ3BocDovL291dHB1dCcpIHx8IChkZWZpbmVkKCdGT1JDRV9HWklQJykgJiYgaXNfaW50KHJlYWRnemZpbGUoJHApKSkpewoJCQkkciA9IG9iX2dldF9jb250ZW50cygpOwoJCQlvYl9lbmRfY2xlYW4oKTsKCQkJcmV0dXJuICRyOwoJCX0KCQlvYl9lbmRfY2xlYW4oKTsKCX0KCQoJcmV0dXJuIEZBTFNFOwp9CgpmdW5jdGlvbiBkZWxGaWxlKCRwKXsKCXJldHVybiAodW5saW5rKCRwKSB8fCAoTklYICYmIHJlbmFtZSgkcCwnL2Rldi9udWxsJykgJiYgIWlzX2ZpbGUoJHApICYmICFmaWxlX2V4aXN0cygkcCkpKTsKfQoKZnVuY3Rpb24gbmVzYygkdil7CglyZXR1cm4gIiciLnN0cl9yZXBsYWNlKCInIiwgJ1wnIlwnIlwnJywgJHYpLiInIjsKfQoKZnVuY3Rpb24gd2VzYygkdil7CglyZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJ14nLCAnJicsICdcXCcsICc8JywgJz4nLCAnfCcpLCBhcnJheSgnXl4nLCAnXiYnLCAnXlxcJywgJ148JywgJ14+JywgJ158JyksICR2KTsKfQoKZnVuY3Rpb24gZXhlKCRjbWQsICRmbmMsICRzaCA9ICcnLCAkc2UgPSBUUlVFLCAkb3IgPSAnJykgewoJJHNlID0gJzI+JyAuICgkc2UgPyAnJjEnIDogKE5JWCA/ICcvZGV2L251bGwnIDogJ251bCcpKSAuICRvcjsKCWlmIChOSVgpCgkJJHNjID0gJ2VjaG8gJyAuIG5lc2MoJGNtZCkgLiAnfCcgLiAoJHNoID09PSAnJyA/ICckMCcgOiAkc2gpIC4gJyAnIC4gJHNlIC4gJyAmIGV4aXQnOwoJZWxzZQoJCSRzYyA9ICgkc2ggPT09ICcnID8gJygnIC4gJGNtZCAuICcpJyA6ICRzaCAuICcgL0MgJyAuIHdlc2MoJGNtZCkgLiAnICcpIC4gJHNlOwoJc3dpdGNoICgkZm5jKSB7CgkJY2FzZSAwOgoJCQlzeXN0ZW0oJHNjKTsKCQkJYnJlYWs7CgkJY2FzZSAxOgoJCQlwYXNzdGhydSgkc2MpOwoJCQlicmVhazsKCQljYXNlIDI6CgkJCWVjaG8gYCRzY2A7CgkJCWJyZWFrOwoJCWNhc2UgMzoKCQkJZWNobyBzaGVsbF9leGVjKCRzYyk7CgkJCWJyZWFrOwoJCWNhc2UgNDoKCQkJJHIgPSBOVUxMOwoJCQlleGVjKCRzYywgJHIpOwoJCQlpZiAoaXNfYXJyYXkoJHIpKQoJCQkJZm9yZWFjaCAoJHIgYXMgJHYpCgkJCQkJZWNobyAkdiwgIlxuIjsKCQkJYnJlYWs7CgkJY2FzZSA1OgoJCQlpZiAoJGggPSBwb3Blbigkc2MsICdyJykpIHsKCQkJCXdoaWxlICghZmVvZigkaCkpCgkJCQkJZWNobyBmcmVhZCgkaCwgMTAyNCk7CgkJCQlwY2xvc2UoJGgpOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgNjoKCQkJaWYoJGggPSBwcm9jX29wZW4oJHNjLGFycmF5KGFycmF5KCdwaXBlJywncicpLCBhcnJheSgncGlwZScsJ3cnKSwgYXJyYXkoJ3BpcGUnLCdhJykpLCRwKSl7CgkJCQllY2hvIHN0cmVhbV9nZXRfY29udGVudHMoJHBbMV0pOwoJCQkJZmNsb3NlKCRwWzBdKTsKCQkJCWZjbG9zZSgkcFsxXSk7CgkJCQlwcm9jX2Nsb3NlKCRoKTsKCQkJfQoJCWNhc2UgNzoKCQkJaWYgKCRoID0gZm9wZW4oJ2V4cGVjdDovLycgLiAkc2MsICdyJykpIHsKCQkJCXdoaWxlICghZmVvZigkaCkpCgkJCQkJZWNobyBmcmVhZCgkaCwgMTAyNCk7CgkJCQlmY2xvc2UoJGgpOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgODoKCQkJaWYgKCRoID0gZXhwZWN0X3BvcGVuKCRzYykpIHsKCQkJCXdoaWxlICghZmVvZigkaCkpCgkJCQkJZWNobyBmcmVhZCgkaCwgMTAyNCk7CgkJCQlmY2xvc2UoJGgpOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgMTA6CgkJCWlmICgkaCA9IG5ldyBDT00oJ1dTY3JpcHQuU2hlbGwnKSkKCQkJCWVjaG8gJGgtPkV4ZWMoKCRzaCA9PT0gJycgPyAnY21kJyA6ICRzaCkgLiAnIC9DICcgLiAkY21kIC4gJyAnIC4gJHNlKS0+U3RkT3V0LT5SZWFkQWxsKCk7CgkJCWJyZWFrOwoJfQp9CgoKZnVuY3Rpb24gdU5hbWUoJGlkKXsKCWlmKCRpZCA9PT0gLTEpIHJldHVybic/JzsKCQoJc3RhdGljICRhID0gTlVMTCwgJGYgPSBGQUxTRTsKCQoJaWYoJGEgPT09IE5VTEwpewoJCWlmKCR2ID0gZ2V0RmlsZSgnL2V0Yy9wYXNzd2QnKSl7CgkJCSRhID0gYXJyYXkoKTsKCQkJJHYgPSBleHBsb2RlKCJcbiIsICR2KTsKCQkJZm9yZWFjaCgkdiBhcyAkaSkKCQkJCWlmKCRpKXsKCQkJCQkkaSA9IGV4cGxvZGUoJzonLCRpLDQpOwoJCQkJCSRhWyRpWzJdXT0kaVswXTsKCQkJCX0KCQl9CgkJZWxzZWlmKGRlZmluZWQoJ1BPU0lYX0ZfT0snKSB8fCBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpCgkJCSRmID0gKGJvb2wpcG9zaXhfZ2V0cHd1aWQoMCk7Cgl9CgkKCWlmKCRhKQoJCWlmKGlzc2V0KCRhWyRpZF0pKSByZXR1cm4gJGFbJGlkXTsKCWVsc2VpZigkZikKCQlpZigkdiA9IHBvc2l4X2dldHB3dWlkKCRpZCkpIHJldHVybiAkdlsnbmFtZSddOwoJCglyZXR1cm4gJGlkOwp9CgpmdW5jdGlvbiBnTmFtZSgkaWQpewoJaWYoJGlkID09PSAtMSkgcmV0dXJuJz8nOwoJCglzdGF0aWMgJGEgPSBOVUxMLCAkZiA9IEZBTFNFOwoJCglpZigkYSA9PT0gTlVMTCl7CgkJaWYoJHYgPSBnZXRGaWxlKCcvZXRjL2dyb3VwJykpewoJCQkkYSA9IGFycmF5KCk7CgkJCSR2ID0gZXhwbG9kZSgiXG4iLCR2KTsKCQkJZm9yZWFjaCgkdiBhcyRpKQoJCQkJaWYoJGkpewoJCQkJCSRpID0gZXhwbG9kZSgnOicsICRpLCA0KTsKCQkJCQkkYVskaVsyXV0gPSAkaVswXTsKCQkJCX0KCQl9CgkJZWxzZWlmKGRlZmluZWQoJ1BPU0lYX0ZfT0snKSB8fCBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpICRmID0gKGJvb2wpcG9zaXhfZ2V0Z3JnaWQoMCk7Cgl9CgoJaWYoJGEpCgkJaWYoaXNzZXQoJGFbJGlkXSkpIHJldHVybiAkYVskaWRdOwoJZWxzZWlmKCRmKQoJCWlmKCR2ID0gcG9zaXhfZ2V0Z3JnaWQoJGlkKSkgcmV0dXJuICR2WyduYW1lJ107CgkKCXJldHVybiRpZDsKCn0KCmZ1bmN0aW9uIGdldElOSSgkcywgJiR2KXsKCSR2ID0gdHJpbShpbmlfZ2V0KCRzKSk7CglyZXR1cm4gJHYhPT0nJzsKfQoKZnVuY3Rpb24gaXNJTkkoJHYpewoJJHYgPSBzdHJ0b2xvd2VyKHRyaW0oaW5pX2dldCgkdikpKTsKCXJldHVybiAoJHYgPT09ICcxJyB8fCAkdiA9PT0gJ29uJyk7Cn0KCmZ1bmN0aW9uIHNhbWVQYXRoKCRhKXsKCSRwID0gTlVMTDsKCWZvcmVhY2goJGEgYXMgJHYpewoJCSR2ID0gYXJyYXlfc2xpY2UoZXhwbG9kZShEU0MsIHJ0cmltKCR2LERTQykpLCAwLCAtMSk7CgkJaWYoJHAgPT09IE5VTEwpICRwID0gJHY7CgkJZWxzZXsKCQkJJGs9YXJyYXkoKTsKCQkJJGM9Y291bnQoJHApOwoJCQkkaT1jb3VudCgkdik7CgkJCWlmKCRpIDwgJGMpICRjPSRpOwoJCQlmb3IoJGk9MDsgJGkgPCAkYzsgKyskaSkKCQkJaWYoJHBbJGldID09PSAkdlskaV0pICRrW10gPSAkcFskaV07CgkJCWVsc2UKCQkJCWJyZWFrOwoJCQkkcCA9ICRrOwoJCQlpZigkaT09PTApIGJyZWFrOwoJCQl9Cgl9CgkKCXJldHVybiBjb3VudCgkcCkgPT09IDAgPyAnJzogaW1wbG9kZShEU0MsICRwKS5EU0M7Cn0KCmZ1bmN0aW9uIGVzY0ZpbGVOYW1lKCR2KXsKCXJldHVybiBzdHJfcmVwbGFjZShhcnJheSgnJScsJy8nLCdcXCcsJzonLCcqJywnPycsJyInLCc8JywnPicsJ3wnKSwgYXJyYXkoJyUyNScsIlx4ZTJceDk1XHhiMSIsIlx4ZTJceDk1XHhiMiIsIlx4ZWFceDllXHg4OSIsIlx4ZTJceDg4XHg5NyIsICclM0YnLCAiXHhlMlx4ODBceDlmIiwgJyUzQycsICclM0UnLCJceGUyXHg4OFx4YTMiKSwgJHYpOwp9CgpmdW5jdGlvbiBpbmZNYWluKCRoID0gRkFMU0UpewoJZWNobyAkaCA/ICc8dGFibGUgaWQ9InRibEluZiI+PHRyIHRpdGxlPSJIVFRQIEhvc3QsIFNlcnZlciBBZGRyLCBTZXJ2ZXIgTmFtZSwgSG9zdCBOYW1lLCBIb3N0IElQIj48dGg+JyA6ICdbeyInLCdBZGRyZXNzJywgJGggPyAnPC90aD48dGQ+JyA6ICciOic7CgkkYSA9IGFycmF5KCk7CgkKCWZvcmVhY2goYXJyYXkoJ0hUVFBfSE9TVCcsJ1NFUlZFUl9BRERSJywnU0VSVkVSX05BTUUnKSBhcyAkdikKCQlpZihpc3NldCgkX1NFUlZFUlskdl0pKXsKCQkJJHYgPSB0cmltKCRfU0VSVkVSWyR2XSk7CgkJCWlmKCR2IT09JycmJiFpbl9hcnJheSgkdiwkYSkpJGFbXT0kdjsKCQl9CgkJCgkJaWYoJHYgPSBwaHBfdW5hbWUoJ24nKSl7CgkJCSR2ID0gdHJpbSgkdik7CgkJCWlmKCR2ICE9PSAnJyAmJiAhaW5fYXJyYXkoJHYsJGEpKSAkYVtdID0gJHY7CgkJfQoJCQoJCWlmKFBIUF9WRVJTSU9OPj0nNS4zJyAmJiAoJHYgPSBnZXRob3N0bmFtZSgpKSl7CgkJCSR2ID0gdHJpbSgkdik7CgkJCWlmKCR2ICE9PSAnJyAmJiAhaW5fYXJyYXkoJHYsJGEpKSAkYVtdID0gJHY7CgkJfQoJCQoJCSRyPScnOwoJCWZvcmVhY2goJGEgYXMgJGsgPT4gJHYpewoJCQlpZigkayA+IDApICRyLj0nIC8gJzsKCQkJJHIgLj0gJHY7CgkJCWlmKCRpPWdldGhvc3RieW5hbWVsKCR2KSl7CgkJCQkkYiA9IEZBTFNFOwoJCQkJZm9yZWFjaCgkaSBhcyAkdikKCQkJCQlpZighaW5fYXJyYXkoJHYsICRhKSl7CgkJCQkJCSRhW10gPSAkdjsKCQkJCQkJaWYoJGIpICRyIC49ICcsICc7CgkJCQkJCWVsc2V7JGIgPSBUUlVFOyAkciAuPSAnICgnO30gJHIgLj0gJHY7CgkJCQkJfQoJCQkJCQoJCQkJCWlmKCRiKSAkciAuPSAnKSc7CgkJCX0KCQkJZWxzZWlmKCgkaSA9IGdldGhvc3RieW5hbWUoJHYpKSAmJiAhaW5fYXJyYXkoJHYsICRhKSl7CgkJCQkkYVtdID0gJHY7CgkJCQkkciAuPSAnICgnLiR2LicpJzsKCQkJfQoJCX0KCQkKCQlpZigkaCkgZWNobyBlc2NIVE1MKCRyKTsKCQllbHNlIGpzb25FY2hvKCRyKTsKCQkKCQllY2hvICRoID8gJzwvdGQ+PC90cj48dHI+PHRoPicgOiAnLCInLCdTeXN0ZW0nLCAkaCA/ICc8L3RoPjx0ZD4nIDogJyI6JzsKCQkKCQkkciA9ICcnOwoJCWlmKCgkdiA9IHRyaW0ocGhwX3VuYW1lKCdzJykuJyAnLnBocF91bmFtZSgncicpLicgJy5waHBfdW5hbWUoJ3YnKS4nICcucGhwX3VuYW1lKCdtJykpKSAhPT0gJycpICRyID0gJHY7CgkJZWxzZWlmKE5JWCAmJiAoJHYgPSBnZXRGaWxlKCcvcHJvYy92ZXJzaW9uJykpKSAkciA9ICR2OwoJCWVsc2V7CgkJCWlmKGRlZmluZWQoJ1BIUF9PUycpKSAkciA9IFBIUF9PUzsKCQkJZWxzZSAkciA9IE5JWCA/ICcqTklYJyA6ICdXaW5kb3dzJzsKCQkJCgkJCWlmKCFOSVgpewoJCQkJJGEgPSBhcnJheSgpOwoJCQkJZm9yZWFjaChhcnJheSgnUEhQX1dJTkRPV1NfVkVSU0lPTl9NQUpPUicsJ1BIUF9XSU5ET1dTX1ZFUlNJT05fTUlOT1InLCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgYXMgJHYpIGlmKGRlZmluZWQoJHYpKSAkYVtdID0gY29uc3RhbnQoJHYpOwoJCQkJCgkJCQlpZigkYSkgJHIgLj0nICcuaW1wbG9kZSgnLicsICRhKTsKCQkJCWlmKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fU1BfTUFKT1InKSAmJiBQSFBfV0lORE9XU19WRVJTSU9OX1NQX01BSk9SID4gMCl7CgkJCQkJJHIgLj0gJyBTUCcuUEhQX1dJTkRPV1NfVkVSU0lPTl9TUF9NQUpPUjsKCQkJCQlpZihkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX1NQX01JTk9SJykgJiYgUEhQX1dJTkRPV1NfVkVSU0lPTl9TUF9NSU5PUiA+IDApICRyIC49ICcuJy5QSFBfV0lORE9XU19WRVJTSU9OX1NQX01JTk9SOwoJCQkJfQoJCQl9CgkJfQoJCQoJCWlmKE5JWCAmJiAoKCR2ID0gdHJpbShnZXRGaWxlKCcvZXRjL2lzc3VlLm5ldCcpKSkgIT09ICcnIHx8ICgkdiA9IHRyaW0oZ2V0RmlsZSgnL2V0Yy9pc3N1ZScpKSkgIT09ICcnKSkgJHIgLj0gJyAoJy4kdi4nKSc7CgkJCgkJaWYoJGgpCgkJCWVjaG8gZXNjSFRNTCgkcik7CgkJZWxzZQoJCQlqc29uRWNobygkcik7CgkJCgkJaWYoIWVtcHR5KCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSkpewoJCQllY2hvICRoID8nPC90ZD48L3RyPjx0cj48dGg+JyA6ICcsIicsJ1NlcnZlcicsICRoID8gJzwvdGg+PHRkPic6JyI6JzsKCQkJaWYoJGgpCgkJCQllY2hvIGVzY0hUTUwoJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKTsKCQkJZWxzZQoJCQkJanNvbkVjaG8oJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKTsKCQl9CgkJCgkJZWNobyAkaCA/ICc8L3RkPjwvdHI+PHRyPjx0aD4nIDogJywiJywnU29mdHdhcmUnLCAkaCA/ICc8L3RoPjx0ZD4nIDogJyI6JzsKCQkKCQkkciA9ICdQSFAvJy5QSFBfVkVSU0lPTjsKCQkKCQlpZihkZWZpbmVkKCdTVUhPU0lOX1BBVENIX1ZFUlNJT04nKSkgJHIgLj0gJyB3aXRoIFN1aG9zaW4gcGF0Y2gvJy5TVUhPU0lOX1BBVENIX1ZFUlNJT047CgkJCgkJJHIgLj0gJzsgJzsKCQlpZihkZWZpbmVkKCdDVVJMRV9PSycpKXsKCQkJJHIgLj0gJ2NVUkwnOwoJCQkkdiA9IGN1cmxfdmVyc2lvbigpOwoJCQlpZihpc3NldCgkdlsndmVyc2lvbiddKSkgJHIuPScvJy4kdlsndmVyc2lvbiddOwoJCQkkci49JzsgJzsKCQl9CgkJCgkJaWYoJHYgPSBwaHB2ZXJzaW9uKCdTdWhvc2luJykpICRyLj0nIFN1aG9zaW4vJy4kdjsKCQkKCQlpZigkaCkKCQkJZWNobyBlc2NIVE1MKCRyKTsKCQllbHNlCgkJCWpzb25FY2hvKCRyKTsKCQkJCgkJZWNobyAkaCA/ICc8L3RkPjwvdHI+PHRyPjx0aD4nIDogJywiJywnVXNlcicsICRoID8gJzwvdGg+PHRkPicgOiAnIjonOwoJCQoJCSRyPScnOwoJCSRhID0gYXJyYXkoKTsKCQlpZihOSVgpewoJCQlpZihkZWZpbmVkKCdQT1NJWF9GX09LJykgfHwgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRldWlkJykpewoJCQkJaWYoaXNfaW50KCR2ID0gcG9zaXhfZ2V0ZXVpZCgpKSkgJHIgLj0gJ2V1aWQ9Jy4kdi4nKCcudU5hbWUoJHYpLicpOyAnOwoJCQkJaWYoaXNfaW50KCR2ID0gcG9zaXhfZ2V0ZWdpZCgpKSkgJHIgLj0gJ2VnaWQ9Jy4kdi4nKCcuZ05hbWUoJHYpLicpOyAnOwoJCQl9CgkJCQoJCQlpZihpc19pbnQoJHYgPSBnZXRteXVpZCgpKSkgJHIgLj0gJ291aWQ9Jy4kdi4nKCcudU5hbWUoJHYpLicpOyAnOwoJCQlpZihpc19pbnQoJHYgPSBnZXRteWdpZCgpKSkgJHIgLj0gJ29naWQ9Jy4kdi4nKCcuZ05hbWUoJHYpLicpOyAnOwoJCX0KCQkKCQkkYiA9IEZBTFNFOwoJCQoJCWZvcmVhY2goYXJyYXkoJ1JFTU9URV9BRERSJywnSFRUUF9YX1JFQUxfSVAnLCdIVFRQX0NMSUVOVF9JUCcsJ0hUVFBfWF9GT1JXQVJERURfRk9SJykgYXMgJGkpewoJCQlpZighZW1wdHkoJF9TRVJWRVJbJGldKSl7CgkJCQlpZigkYikKCQkJCQkkci49ICcsICc7CgkJCQllbHNlewoJCQkJCSRiID0gVFJVRTsKCQkJCQkkciAuPSAnSVA6ICc7CgkJCQl9CgkJCQkKCQkJCSRyIC49ICRfU0VSVkVSWyRpXTsKCQkJfQoJCX0KCQkKCQlpZigkYikKCQkJJHIgLj0gJzsnOwoJCWlmKCRoKQoJCQllY2hvIGVzY0hUTUwoJHIpOwoJCWVsc2UKCQkJanNvbkVjaG8oJHIpOwoJCQoJCWVjaG8gJGggPyAnPC90ZD48L3RyPjx0cj48dGggY29sc3Bhbj0iMiI+PC90aD48L3RyPjx0cj48dGg+JzonfSx7IicsJ1NhZmUgbW9kZScsICRoID8gJzwvdGg+PHRkPicgOiAnIjonOwoJCQoJCWlmKGlzSU5JKCdzYWZlX21vZGUnKSl7CgkJCSR2ID0gaXNJTkkoJ3NhZmVfbW9kZV9naWQnKSA/ICdHSUQnOidVSUQnOwoJCQllY2hvICRoID8gJHYgOiAnIicuJHYuJyInOwoJCQlmb3JlYWNoKGFycmF5KCdJbmNsdWRlIGRpcicgPT4gJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicsJ0V4ZWMgZGlyJyA9PiAnc2FmZV9tb2RlX2V4ZWNfZGlyJywgJ1ZhcnMgcHJlZml4ZXMnID0+ICdzYWZlX21vZGVfYWxsb3dlZF9lbnZfdmFycycsICdQcm90ZWN0ZWQgdmFycycgPT4gJ3NhZmVfbW9kZV9wcm90ZWN0ZWRfZW52X3ZhcnMnKSBhcyAkayA9PiAkdil7CgkJCQlpZighZ2V0SU5JKCR2LCAkdikpICR2ID0gJy0nOwoJCQkJCgkJCQllY2hvICRoID8gJzwvdGQ+PC90cj48dHI+PHRoPicgOiAnLCInLCAkaywgJGg/JzwvdGg+PHRkPicgOiAnIjonOwoJCQkJaWYoJGgpCgkJCQkJZWNobyBlc2NIVE1MKCR2KTsKCQkJCWVsc2UKCQkJCQlqc29uRWNobygkdik7CgkJCX0KCQl9CgkJZWxzZQoJCQllY2hvICRoID8gJy0nIDogJyItIic7CgkJCgkJZWNobyAkaCA/ICc8L3RkPjwvdHI+JyA6ICcnOwoJCWZvcmVhY2goYXJyYXkoJ09wZW4gYmFzZWRpcicgPT4gJ29wZW5fYmFzZWRpcicsICdEaXNhYmxlZCBmdW5jdGlvbnMnID0+ICdkaXNhYmxlX2Z1bmN0aW9ucycsICdEaXNhYmxlZCBjbGFzc2VzJyA9PiAnZGlzYWJsZV9jbGFzc2VzJykgYXMgJGsgPT4gJHYpewoJCQlpZighZ2V0SU5JKCR2LCAkdikpICR2ID0gJy0nOwoJCQllY2hvICRoID8gJzx0cj48dGg+JyA6ICcsIicsICRrLCAkaCA/ICc8L3RoPjx0ZD4nIDogJyI6JzsKCQkJaWYoJGgpCgkJCQllY2hvIGVzY0hUTUwoJHYpLCc8L3RkPjwvdHI+JzsKCQkJZWxzZQoJCQkJanNvbkVjaG8oJHYpO30KCQkJCgkJCWlmKGdldElOSSgnc3Vob3Npbi5zaW11bGF0aW9uJywgJHYpKXsKCQkJCWVjaG8gJGggPyAnPHRyPjx0aCBjb2xzcGFuPSIyIj48L3RoPjwvdHI+PHRyPjx0aD4nIDogJ30seyInLCAnU3Vob3NpbiBtb2RlJywgJGggPyAnPC90aD48dGQ+JyA6ICciOiInLCAkdiA/ICdzaW11bGF0aW9uJyA6ICdicmVhaycsICRoID8gJzwvdGQ+PC90cj48dHI+PHRoPicgOiAnIiwiJywnQWxsb3cgcmV3cml0ZScsICRoID8gJzwvdGg+PHRkPicgOiAnIjonOwoJCQkJCgkJCWlmKCFnZXRJTkkoJ3N1aG9zaW4ucGVyZGlyJywgJHYpIHx8ICEkdikgJHYgPSAnLSc7CgkJCQoJCQlpZigkaCkKCQkJCWVjaG8gZXNjSFRNTCgkdiksJzwvdGQ+PC90cj4nOwoJCQllbHNlIGpzb25FY2hvKCR2KTsKCQkJCgkJCWZvcmVhY2goYXJyYXkoJ0Z1bmN0aW9ucyB3aGl0ZWxpc3QnID0+ICdzdWhvc2luLmV4ZWN1dG9yLmZ1bmMud2hpdGVsaXN0JywgJ0Z1bmN0aW9ucyBibGFja2xpc3QnID0+ICdzdWhvc2luLmV4ZWN1dG9yLmZ1bmMuYmxhY2tsaXN0JywgJ0V2YWwgd2hpdGVsaXN0JyA9PiAnc3Vob3Npbi5leGVjdXRvci5ldmFsLndoaXRlbGlzdCcsICdFdmFsIGJsYWNrbGlzdCcgPT4gJ3N1aG9zaW4uZXhlY3V0b3IuZXZhbC5ibGFja2xpc3QnKSBhcyAkayA9PiAkdil7CgkJCQlpZighZ2V0SU5JKCR2LCAkdikpICR2ID0gJy0nOwoJCQkJZWNobyAkaCA/ICc8dHI+PHRoPicgOiAnLCInLCAkaywgJGggPyAnPC90aD48dGQ+JyA6ICciOic7CgkJCQlpZigkaCkKCQkJCQllY2hvIGVzY0hUTUwoJHYpLCc8L3RkPjwvdHI+JzsKCQkJCWVsc2UganNvbkVjaG8oJHYpOwoJCQl9CgkJCQoJCQkkYSA9IGFycmF5KCdldmFsJyA9PiAnc3Vob3Npbi5leGVjdXRvci5kaXNhYmxlX2V2YWwnLCAnL2UgbW9kaWZpZXInID0+ICdzdWhvc2luLmV4ZWN1dG9yLmRpc2FibGVfZW1vZGlmaWVyJyk7CgkJCQoJCQkkaSA9IGFycmF5KCk7CgkJCWZvcmVhY2goJGEgYXMkayA9PiAkdikKCQkJCWlmKGlzSU5JKCR2KSkgJGlbXSA9ICRrOwoJCQkJZWNobyAkaCA/ICc8dHI+PHRoPicgOiAnLCInLCAnRGlzYWJsZWQnLCAkaCA/JzwvdGg+PHRkPicgOiAnIjoiJywgJGkgPyBpbXBsb2RlKCcsICcsICRpKSA6ICctJywgJGggPyAnPC90ZD48L3RyPicgOiAnIic7CgkJCQlpZihpc0lOSSgnc3Vob3Npbi5sb2cuZmlsZScpICYmIGdldElOSSgnc3Vob3Npbi5sb2cuZmlsZS5uYW1lJywgJHYpKXsKCQkJCQllY2hvICRoID8gJzx0cj48dGg+JyA6ICcsIicsJ0xvZyBmaWxlJywgJGggPyAnPC90aD48dGQ+JyA6ICciOic7CgkJCQkJaWYoJGgpCgkJCQkJCWVjaG8gZXNjSFRNTCgkdiksJzwvdGQ+PC90cj4nOwoJCQkJCWVsc2UKCQkJCQkJanNvbkVjaG8oJHYpOwoJCQkJfQoJCX0KCQkKCWVjaG8gJGggPyAnPC90YWJsZT4nIDogJ31dJzsKfQoKCmZ1bmN0aW9uIHBhcnNlUGF0aCgkcCwgJiRiLCAmJG4pewoJJHYgPSBydHJpbSgkcCwgRFNDKTsKCSRpID0gc3RycnBvcygkdixEU0MpOwoJaWYoJGkgPT09IEZBTFNFKXsKCQlpZighTklYICYmIHN0cmxlbigkdikgPT09IDIgJiYgJHZbMV0gPT09ICc6Jyl7CgkJCSRiID0gJHYuRFNDOwoJCQkkbiA9ICcnOwoJCX0KCQllbHNlewoJCQkkYiA9IERTQzsKCQkJJG4gPSAkdjsKCQl9Cgl9CgllbHNlewoJCSRiID0gc3Vic3RyKCR2LDAsJGkrMSk7CgkJJG4gPSBzdWJzdHIoJHYsJGkrMSk7Cgl9Cn0KCgpjbGFzcyBGaWxlSW5mb3sKCQoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYpewoJCWlmKGlzX3N0cmluZygkdikpewoJCQkkdGhpcy0+ZmIgPSAnJzsKCQkJJHRoaXMtPmZuPSAnJyA7CgkJCQoJCQlwYXJzZVBhdGgoJHYsICR0aGlzLT5mYiwgJHRoaXMtPmZuKTsKCQkJJHRoaXMtPmZwID0gJHRoaXMtPmZiLiR0aGlzLT5mbjsKCQl9CgkJZWxzZXsKCQkJJHRoaXMtPmZpID0gJHY7CgkJCSR0aGlzLT5mcCA9ICR2LT5nZXRQYXRoTmFtZSgpOwoJCQkkdGhpcy0+ZmIgPSAkdi0+Z2V0UGF0aCgpOwoJCQkkdGhpcy0+Zm4gPSAkdi0+Z2V0RmlsZU5hbWUoKTsKCQl9CgkJCgkJJHRoaXMtPnJwID0gJHRoaXMtPmZwOwoJCWlmKCR0aGlzLT5pc0xpbmsoKSl7CgkJCSR0aGlzLT5ycCA9ICR0aGlzLT5nZXRMaW5rVGFyZ2V0KCk7CgkJCWlmKGlzc2V0KCR0aGlzLT50KSkgdW5zZXQoJHRoaXMtPnQpOwoJCQlpZihpc3NldCgkdGhpcy0+ZmkpKSB1bnNldCgkdGhpcy0+ZmkpOwoJCX0KCX0KCQoJZnVuY3Rpb24gZ2V0UGF0aCgpewoJCXJldHVybiR0aGlzLT5mYjsKCX0KCQoJZnVuY3Rpb24gZ2V0RmlsZU5hbWUoKXsKCQlyZXR1cm4kdGhpcy0+Zm47Cgl9CgkKCWZ1bmN0aW9uIGdldFBhdGhOYW1lKCl7CgkJcmV0dXJuJHRoaXMtPmZwOwoJfQoJCglmdW5jdGlvbiBpc0RpcigpewoJCWlmKGlzc2V0KCR0aGlzLT5kKSkgcmV0dXJuJHRoaXMtPmQ7CgkJaWYoIWlzc2V0KCR0aGlzLT5wKSkgJHRoaXMtPmdldFBlcm1zKCk7CgkJaWYoJHRoaXMtPnAgIT09IDApewoJCQkkdGhpcy0+ZCA9ICgkdGhpcy0+cCAmIDAxNzAwMDApID09PSAwMDQwMDAwOwoJCQlyZXR1cm4gJHRoaXMtPmQ7CgkJfQoJCWlmKCFpc3NldCgkdGhpcy0+dCkpICR0aGlzLT50eXBlKCk7CgkJaWYoJHRoaXMtPnQgIT09IEZBTFNFKXsKCQkJJHRoaXMtPmQgPSAkdGhpcy0+dCA9PT0gJ2Rpcic7CgkJCXJldHVybiAkdGhpcy0+ZDsKCQl9CgkJCgkJJHYgPSBpc19kaXIoJHRoaXMtPmZwKTsKCQlpZihpc19ib29sKCR2KSl7CgkJCSR0aGlzLT5kID0gJHY7CgkJCXJldHVybiAkdjsKCQl9CgkJaWYoUEhQX1ZFUlNJT04+PSc1JykgOiBpZighaXNzZXQoJHRoaXMtPmZpKSkgJHRoaXMtPnNwbCgpOwoJCWlmKCR0aGlzLT5maSAhPT0gRkFMU0UpewoJCQl0cnl7CgkJCQkkdiA9ICR0aGlzLT5maS0+aXNEaXIoKTsKCQkJfQoJCQljYXRjaChFeGNlcHRpb24gJGUpewoJCQkJJHYgPSBOVUxMOwoJCQl9CgkJCWlmKGlzX2Jvb2woJHYpKXsKCQkJCSR0aGlzLT5kID0gJHY7CgkJCQlyZXR1cm4gJHY7CgkJCX0KCQl9CgkJZW5kaWY7CgkJJHRoaXMtPmQgPSBGQUxTRTsKCQkKCQlyZXR1cm4gRkFMU0U7Cgl9CgkKCWZ1bmN0aW9uIGlzTGluaygpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPmwpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPmw7CgkgICAgCgkgICAgJHYgPSBsc3RhdCgkdGhpcy0+ZnApOwoJICAgIAoJICAgIGlmIChpc19hcnJheSgkdikpIHsKCSAgICAgICAgJHRoaXMtPmwgPSAoJHZbMl0gJiAwMTcwMDAwKSA9PT0gMDEyMDAwMDsKCSAgICAgICAgcmV0dXJuICR0aGlzLT5sOwoJICAgIH0KCSAgICBpZiAoIWlzc2V0KCR0aGlzLT50KSkKCSAgICAgICAgJHRoaXMtPnR5cGUoKTsKCSAgICBpZiAoJHRoaXMtPnQgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5sID0gJHRoaXMtPnQgPT09ICdsaW5rJzsKCSAgICAgICAgcmV0dXJuICR0aGlzLT5sOwoJICAgIH0KCSAgICAkdiA9IGlzX2xpbmsoJHRoaXMtPmZwKTsKCSAgICBpZiAoaXNfYm9vbCgkdikpIHsKCSAgICAgICAgJHRoaXMtPmwgPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+aXNMaW5rKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2Jvb2woJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPmwgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+bCA9IEZBTFNFOwoJICAgIHJldHVybiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gZ2V0TGlua1RhcmdldCgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPmYpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPmY7CgkgICAgaWYgKE5JWCB8fCBQSFBfVkVSU0lPTiA+PSAnNS4zJykgewoJICAgICAgICAkdiA9IHJlYWRsaW5rKCR0aGlzLT5mcCk7CgkgICAgICAgIGlmIChpc19zdHJpbmcoJHYpKSB7CgkgICAgICAgICAgICAkdGhpcy0+ZiA9ICR2OwoJICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICB9CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5nZXRMaW5rVGFyZ2V0KCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkdikpIHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+ZiA9ICR2OwoJICAgICAgICAgICAgICAgIHJldHVybiAkdjsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIGVuZGlmOwoJICAgICR2ID0gcmVhbHBhdGgoJHRoaXMtPmZwKTsKCSAgICBpZiAoaXNfc3RyaW5nKCR2KSkgewoJICAgICAgICAkdGhpcy0+ZiA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgICR0aGlzLT5mID0gJyc7CgkgICAgcmV0dXJuICcnOwoJfQoJCglmdW5jdGlvbiBnZXRTaXplKCkgewoJICAgIGlmIChpc3NldCgkdGhpcy0+cykpCgkgICAgICAgIHJldHVybiAkdGhpcy0+czsKCSAgICBpZiAoIWlzc2V0KCR0aGlzLT5pKSkKCSAgICAgICAgJHRoaXMtPnN0YXQoKTsKCSAgICBpZiAoJHRoaXMtPmkgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5zID0gJHRoaXMtPmlbN107CgkgICAgICAgIHJldHVybiAkdGhpcy0+czsKCSAgICB9CgkgICAgJHYgPSBmaWxlc2l6ZSgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19pbnQoJHYpKSB7CgkgICAgICAgICR0aGlzLT5zID0gJHY7CgkgICAgICAgIHJldHVybiAkdjsKCSAgICB9CgkgICAgaWYgKFBIUF9WRVJTSU9OID49ICc1Jyk6CgkgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmZpKSkKCSAgICAgICAgICAgICR0aGlzLT5zcGwoKTsKCSAgICAgICAgaWYgKCR0aGlzLT5maSAhPT0gRkFMU0UpIHsKCSAgICAgICAgICAgIHRyeSB7CgkgICAgICAgICAgICAgICAgJHYgPSAkdGhpcy0+ZmktPmdldFNpemUoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5zID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPnMgPSAtMTsKCSAgICByZXR1cm4gLTE7Cgl9CgkKCWZ1bmN0aW9uIGdldENUaW1lKCkgewoJICAgIGlmIChpc3NldCgkdGhpcy0+YykpCgkgICAgICAgIHJldHVybiAkdGhpcy0+YzsKCSAgICBpZiAoIWlzc2V0KCR0aGlzLT5pKSkKCSAgICAgICAgJHRoaXMtPnN0YXQoKTsKCSAgICBpZiAoJHRoaXMtPmkgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5jID0gJHRoaXMtPmlbMTBdOwoJICAgICAgICByZXR1cm4gJHRoaXMtPmM7CgkgICAgfQoJICAgICR2ID0gZmlsZWN0aW1lKCR0aGlzLT5mcCk7CgkgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgJHRoaXMtPmMgPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+Z2V0Q1RpbWUoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5jID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPmMgPSAwOwoJICAgIHJldHVybiAwOwoJfQoJCglmdW5jdGlvbiBnZXRNVGltZSgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPm0pKQoJICAgICAgICByZXR1cm4gJHRoaXMtPm07CgkgICAgaWYgKCFpc3NldCgkdGhpcy0+aSkpCgkgICAgICAgICR0aGlzLT5zdGF0KCk7CgkgICAgaWYgKCR0aGlzLT5pICE9PSBGQUxTRSkgewoJICAgICAgICAkdGhpcy0+bSA9ICR0aGlzLT5pWzldOwoJICAgICAgICByZXR1cm4gJHRoaXMtPm07CgkgICAgfQoJICAgICR2ID0gZmlsZW10aW1lKCR0aGlzLT5mcCk7CgkgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgJHRoaXMtPm0gPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+Z2V0TVRpbWUoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5tID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPm0gPSAwOwoJICAgIHJldHVybiAwOwoJfQoJCglmdW5jdGlvbiBnZXRPd25lcigpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPm8pKQoJICAgICAgICByZXR1cm4gJHRoaXMtPm87CgkgICAgaWYgKCFpc3NldCgkdGhpcy0+aSkpCgkgICAgICAgICR0aGlzLT5zdGF0KCk7CgkgICAgaWYgKCR0aGlzLT5pICE9PSBGQUxTRSkgewoJICAgICAgICAkdGhpcy0+byA9ICR0aGlzLT5pWzRdOwoJICAgICAgICByZXR1cm4gJHRoaXMtPm87CgkgICAgfQoJICAgICR2ID0gZmlsZW93bmVyKCR0aGlzLT5mcCk7CgkgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgJHRoaXMtPm8gPSAkdjsKCSAgICAgICAgcmV0dXJuICR2OwoJICAgIH0KCSAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKCSAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZmkpKQoJICAgICAgICAgICAgJHRoaXMtPnNwbCgpOwoJICAgICAgICBpZiAoJHRoaXMtPmZpICE9PSBGQUxTRSkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdiA9ICR0aGlzLT5maS0+Z2V0T3duZXIoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdiA9IE5VTEw7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAgICAgICAgICR0aGlzLT5vID0gJHY7CgkgICAgICAgICAgICAgICAgcmV0dXJuICR2OwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgZW5kaWY7CgkgICAgJHRoaXMtPm8gPSAtMTsKCSAgICByZXR1cm4gLTE7Cgl9CgkKCWZ1bmN0aW9uIGdldEdyb3VwKCkgewoJICAgIGlmIChpc3NldCgkdGhpcy0+ZykpCgkgICAgICAgIHJldHVybiAkdGhpcy0+ZzsKCSAgICBpZiAoIWlzc2V0KCR0aGlzLT5pKSkKCSAgICAgICAgJHRoaXMtPnN0YXQoKTsKCSAgICBpZiAoJHRoaXMtPmkgIT09IEZBTFNFKSB7CgkgICAgICAgICR0aGlzLT5nID0gJHRoaXMtPmlbNV07CgkgICAgICAgIHJldHVybiAkdGhpcy0+ZzsKCSAgICB9CgkgICAgJHYgPSBmaWxlZ3JvdXAoJHRoaXMtPmZwKTsKCSAgICBpZiAoaXNfaW50KCR2KSkgewoJICAgICAgICAkdGhpcy0+ZyA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5nZXRHcm91cCgpOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJICAgICAgICAgICAgICAgICR2ID0gTlVMTDsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGlmIChpc19pbnQoJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPmcgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+ZyA9IC0xOwoJICAgIHJldHVybiAtMTsKCX0KCQoJZnVuY3Rpb24gZ2V0UGVybXMoKSB7CgkgICAgaWYgKGlzc2V0KCR0aGlzLT5wKSkKCSAgICAgICAgcmV0dXJuICR0aGlzLT5wOwoJICAgIGlmICghaXNzZXQoJHRoaXMtPmkpKQoJICAgICAgICAkdGhpcy0+c3RhdCgpOwoJICAgIGlmICgkdGhpcy0+aSAhPT0gRkFMU0UpIHsKCSAgICAgICAgJHRoaXMtPnAgPSAkdGhpcy0+aVsyXTsKCSAgICAgICAgcmV0dXJuICR0aGlzLT5wOwoJICAgIH0KCSAgICAkdiA9IGZpbGVwZXJtcygkdGhpcy0+ZnApOwoJICAgIGlmIChpc19pbnQoJHYpKSB7CgkgICAgICAgICR0aGlzLT5wID0gJHY7CgkgICAgICAgIHJldHVybiAkdjsKCSAgICB9CgkgICAgaWYgKFBIUF9WRVJTSU9OID49ICc1Jyk6CgkgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmZpKSkKCSAgICAgICAgICAgICR0aGlzLT5zcGwoKTsKCSAgICAgICAgaWYgKCR0aGlzLT5maSAhPT0gRkFMU0UpIHsKCSAgICAgICAgICAgIHRyeSB7CgkgICAgICAgICAgICAgICAgJHYgPSAkdGhpcy0+ZmktPmdldFBlcm1zKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2ludCgkdikpIHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+cCA9ICR2OwoJICAgICAgICAgICAgICAgIHJldHVybiAkdjsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIGVuZGlmOwoJICAgICR0aGlzLT5wID0gMDsKCSAgICByZXR1cm4gMDsKCX0KCQoJZnVuY3Rpb24gaXNSZWFkYWJsZSgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPnIpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPnI7CgkgICAgJHYgPSBpc19yZWFkYWJsZSgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19ib29sKCR2KSkgewoJICAgICAgICAkdGhpcy0+ciA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5pc1JlYWRhYmxlKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2Jvb2woJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPnIgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+ciA9IEZBTFNFOwoJICAgIHJldHVybiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gaXNXcml0YWJsZSgpIHsKCSAgICBpZiAoaXNzZXQoJHRoaXMtPncpKQoJICAgICAgICByZXR1cm4gJHRoaXMtPnc7CgkgICAgJHYgPSBpc193cml0YWJsZSgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19ib29sKCR2KSkgewoJICAgICAgICAkdGhpcy0+dyA9ICR2OwoJICAgICAgICByZXR1cm4gJHY7CgkgICAgfQoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5maSkpCgkgICAgICAgICAgICAkdGhpcy0+c3BsKCk7CgkgICAgICAgIGlmICgkdGhpcy0+ZmkgIT09IEZBTFNFKSB7CgkgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICR2ID0gJHRoaXMtPmZpLT5pc1dyaXRhYmxlKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgJHYgPSBOVUxMOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgaWYgKGlzX2Jvb2woJHYpKSB7CgkgICAgICAgICAgICAgICAgJHRoaXMtPncgPSAkdjsKCSAgICAgICAgICAgICAgICByZXR1cm4gJHY7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICBlbmRpZjsKCSAgICAkdGhpcy0+dyA9IEZBTFNFOwoJICAgIHJldHVybiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gZ2V0TW9kZSgpIHsKCSAgICAkdiA9IDA7CgkgICAgaWYgKCR0aGlzLT5pc1JlYWRhYmxlKCkpCgkgICAgICAgICR2ICs9IDE7CgkgICAgaWYgKCR0aGlzLT5pc1dyaXRhYmxlKCkpCgkgICAgICAgICR2ICs9IDI7CgkgICAgcmV0dXJuICR2OwoJfQoJCglmdW5jdGlvbiBzdGF0KCkgewoJICAgICR2ID0gc3RhdCgkdGhpcy0+ZnApOwoJICAgIGlmIChpc19hcnJheSgkdikpIHsKCSAgICAgICAgJHRoaXMtPmkgPSAkdjsKCSAgICAgICAgcmV0dXJuOwoJICAgIH0KCSAgICAkdiAgICAgICA9IGxzdGF0KCR0aGlzLT5mcCk7CgkgICAgJHRoaXMtPmkgPSBpc19hcnJheSgkdikgPyAkdiA6IEZBTFNFOwoJfQoJCglmdW5jdGlvbiB0eXBlKCkgewoJICAgICR2ICAgICAgID0gZmlsZXR5cGUoJHRoaXMtPnJwKTsKCSAgICAkdGhpcy0+dCA9ICR2ID8gJHYgOiBGQUxTRTsKCX0KCQoJZnVuY3Rpb24gc3BsKCkgewoJICAgICR0aGlzLT5maSA9IEZBTFNFOwoJICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUuMS4yJykgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+ZmkgPSBuZXcgU3BsRmlsZUluZm8oJHRoaXMtPnJwKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAkdGhpcy0+ZmkgPSBGQUxTRTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIGVuZGlmOwoJfQoJCn0KCgppZihpc3NldCgkRFsnYSddKSl7CgkKCWNsYXNzIFBaSVAgewoJICAgIHZhciAkX2JwbCA9ICcnLCAkX2NkZmggPSBOVUxMLCAkX2NkZnAgPSBOVUxMLCAkX2NkZm8gPSBGQUxTRSwgJF9jZHJjID0gMCwgJF9jZHNvID0gMCwgJF9mbHJzID0gYXJyYXkoKTsKCSAgICBmdW5jdGlvbiBpbml0KCRicD0nJykgewoJICAgICAgICAkdGhpcy0+X2JwbCA9IHN0cmxlbigkYnApOwoJICAgICAgICBpZiAoJGggPSB0bXBmaWxlKCkpCgkgICAgICAgICAgICAkdGhpcy0+X2NkZmggPSAkaDsKCSAgICAgICAgZWxzZSB7CgkgICAgICAgICAgICAkbiA9IHRlbXBOYW1lKCk7CgkgICAgICAgICAgICAkYSA9IGFycmF5KAoJICAgICAgICAgICAgICAgICd1cGxvYWRfdG1wX2RpcicsCgkgICAgICAgICAgICAgICAgJ3Nlc3Npb24uc2F2ZV9wYXRoJywKCSAgICAgICAgICAgICAgICAndXNlcl9kaXInLAoJICAgICAgICAgICAgICAgICdkb2Nfcm9vdCcKCSAgICAgICAgICAgICk7CgkgICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkdikKCSAgICAgICAgICAgICAgICBpZiAoJHAgPSBpbmlfZ2V0KCR2KSkgewoJICAgICAgICAgICAgICAgICAgICAkcCAuPSBEU0MgLiAkbjsKCSAgICAgICAgICAgICAgICAgICAgaWYgKCRoID0gZm9wZW4oJHAsICdidysnKSkgewoJICAgICAgICAgICAgICAgICAgICAgICAgZmxvY2soJGgsIExPQ0tfRVgpOwoJICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jZGZoID0gJGg7CgkgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZnAgPSAkcDsKCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwoJICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OID49ICc1LjEnKSB7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBuZXcgU3BsRmlsZU9iamVjdCgkcCwgJ2J3KycpOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gTlVMTDsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoKSB7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoLT5mbG9jayhMT0NLX0VYKTsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jZGZoID0gJGg7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fY2RmcCA9ICRwOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZm8gPSBUUlVFOwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIGVuZGlmOwoJICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICRwID0gc2VsZlBhdGgoKSAuICRuOwoJICAgICAgICAgICAgaWYgKCRoID0gZm9wZW4oJHAsICdidysnKSkgewoJICAgICAgICAgICAgICAgIGZsb2NrKCRoLCBMT0NLX0VYKTsKCSAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZmggPSAkaDsKCSAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZnAgPSAkcDsKCSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNScpOgoJICAgICAgICAgICAgICAgIGlmIChQSFBfVkVSU0lPTiA+PSAnNS4xJykgewoJICAgICAgICAgICAgICAgICAgICB0cnkgewoJICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBuZXcgU3BsRmlsZU9iamVjdCgkcCwgJ2J3KycpOwoJICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICRoID0gTlVMTDsKCSAgICAgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgICAgICBpZiAoJGgpIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICRoLT5mbG9jayhMT0NLX0VYKTsKCSAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fY2RmaCA9ICRoOwoJICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jZGZwID0gJHA7CgkgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2NkZm8gPSBUUlVFOwoJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CgkgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICBlbmRpZjsKCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gRkFMU0U7CgkgICAgfQoJICAgIGZ1bmN0aW9uIGZpbGVIZWFkZXIoJG4sICR0KSB7CgkgICAgICAgIGVjaG8gIlx4NTBceDRiXHgwM1x4MDRceDE0XHgwMFx4MDhceDAwXHgwMFx4MDAiLCAkdCwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsIHBhY2soJ3YnLCBzdHJsZW4oJG4pKSwgIlx4MDBceDAwIiwgJG47CgkgICAgICAgIG9iX3N0YXJ0KCd6aXBDYWxjJywgMTA0ODU3Nik7CgkgICAgfQoJICAgIGZ1bmN0aW9uIGZpbGVGb290ZXIoJG4sICR0KSB7CgkgICAgICAgIG9iX2VuZF9mbHVzaCgpOwoJICAgICAgICAkdiA9IHppcENhbGMoTlVMTCk7CgkgICAgICAgICRzID0gcGFjaygnVicsICR2WzBdKTsKCSAgICAgICAgJGMgPSBwYWNrKCdWJywgJHZbMV0gXiAweGZmZmZmZmZmKTsKCSAgICAgICAgZWNobyAiXHg1MFx4NGJceDA3XHgwOCIsICRjLCAkcywgJHM7CgkgICAgICAgICRmaCAgID0gJHRoaXMtPl9jZGZoOwoJICAgICAgICAkbmwgICA9IHN0cmxlbigkbik7CgkgICAgICAgICRkYXRhID0gIlx4NTBceDRiXHgwMVx4MDJceDAwXHgwMFx4MTRceDAwXHgwOFx4MDBceDAwXHgwMCIgLiAkdCAuICRjIC4gJHMgLiAkcyAuIHBhY2soJ3YnLCAkbmwpIC4gIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIgLiBwYWNrKCdWJywgJHRoaXMtPl9jZHNvKSAuICRuOwoJICAgICAgICBpZiAoJHRoaXMtPl9jZGZvKSB7CgkgICAgICAgICAgICAkZmgtPmZ3cml0ZSgkZGF0YSk7CgkgICAgICAgICAgICAkZmgtPmZmbHVzaCgpOwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgICAgZndyaXRlKCRmaCwgJGRhdGEpOwoJICAgICAgICAgICAgZmZsdXNoKCRmaCk7CgkgICAgICAgIH0KCSAgICAgICAgKyskdGhpcy0+X2NkcmM7CgkgICAgICAgICR0aGlzLT5fY2RzbyArPSA0NiArICR2WzBdICsgJG5sOwoJICAgIH0KCSAgICBmdW5jdGlvbiBhZGRQYXRoKCRwKSB7CgkgICAgICAgICRmID0gbmV3IEZpbGVJbmZvKCRwKTsKCSAgICAgICAgaWYgKCRmLT5pc0RpcigpKSB7CgkgICAgICAgICAgICBpZiAoc3Vic3RyKCRwLCAtMSkgIT09IERTQykKCSAgICAgICAgICAgICAgICAkcCAuPSBEU0M7CgkgICAgICAgICAgICAkZiA9IE5VTEw7CgkgICAgICAgICAgICBpZiAoIWRpclJlYWQoJHAsIGFycmF5KAoJICAgICAgICAgICAgICAgICYkdGhpcywKCSAgICAgICAgICAgICAgICAnYWRkUGF0aCcKCSAgICAgICAgICAgICkpKQoJICAgICAgICAgICAgICAgICR0aGlzLT5fZmxyc1tdID0gc3Vic3RyKCRwLCAkdGhpcy0+X2JwbCk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAkdCA9IHBhY2tUaW1lKCRmLT5nZXRNVGltZSgpKTsKCSAgICAgICAgICAgICRmID0gc3Vic3RyKCRwLCAkdGhpcy0+X2JwbCk7CgkgICAgICAgICAgICBpZiAoIU5JWCkKCSAgICAgICAgICAgICAgICAkZiA9IHN0cl9yZXBsYWNlKERTQywgJy8nLCAkZik7CgkgICAgICAgICAgICAkdGhpcy0+ZmlsZUhlYWRlcigkZiwgJHQpOwoJICAgICAgICAgICAgaWYgKCFvdXRGaWxlKCRwKSkKCSAgICAgICAgICAgICAgICAkdGhpcy0+X2ZscnNbXSA9ICRmOwoJICAgICAgICAgICAgJHRoaXMtPmZpbGVGb290ZXIoJGYsICR0KTsKCSAgICAgICAgfQoJICAgIH0KCSAgICBmdW5jdGlvbiBjbG9zZSgpIHsKCSAgICAgICAgaWYgKGNvdW50KCR0aGlzLT5fZmxycykgPiAwKSB7CgkgICAgICAgICAgICAkbiA9ICdDQU5UX1JFQUQudHh0JzsKCSAgICAgICAgICAgICR0ID0gcGFja1RpbWUodGltZSgpKTsKCSAgICAgICAgICAgICR0aGlzLT5maWxlSGVhZGVyKCRuLCAkdCk7CgkgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+X2ZscnMgYXMgJHYpCgkgICAgICAgICAgICAgICAgZWNobyAkdiwgIlxuIjsKCSAgICAgICAgICAgICR0aGlzLT5maWxlRm9vdGVyKCRuLCAkdCk7CgkgICAgICAgIH0KCSAgICAgICAgJGZoID0gJHRoaXMtPl9jZGZoOwoJICAgICAgICBpZiAoJHRoaXMtPl9jZGZvKSB7CgkgICAgICAgICAgICAkcyA9ICRmaC0+ZnRlbGwoKTsKCSAgICAgICAgICAgICRmaC0+ZnNlZWsoMCk7CgkgICAgICAgICAgICBpZiAoIWlzX2ludCgkZmgtPmZwYXNzdGhydSgpKSkKCSAgICAgICAgICAgICAgICB3aGlsZSAoISRmaC0+ZW9mKCkpCgkgICAgICAgICAgICAgICAgICAgIGVjaG8gJGZoLT5mcmVhZCgxMDQ4NTc2KTsKCSAgICAgICAgICAgICRmaC0+ZmxvY2soTE9DS19VTik7CgkgICAgICAgICAgICB1bnNldCgkZmgsICR0aGlzLT5fY2RmaCk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAkcyA9IGZ0ZWxsKCRmaCk7CgkgICAgICAgICAgICBmc2VlaygkZmgsIDApOwoJICAgICAgICAgICAgaWYgKCFpc19pbnQoZnBhc3N0aHJ1KCRmaCkpKQoJICAgICAgICAgICAgICAgIHdoaWxlICghZmVvZigkZmgpKQoJICAgICAgICAgICAgICAgICAgICBlY2hvIGZyZWFkKCRmaCwgMTA0ODU3Nik7CgkgICAgICAgICAgICBmbG9jaygkZmgsIExPQ0tfVU4pOwoJICAgICAgICAgICAgZmNsb3NlKCRmaCk7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKCR0aGlzLT5fY2RmcCAhPT0gTlVMTCkKCSAgICAgICAgICAgIGRlbEZpbGUoJHRoaXMtPl9jZGZwKTsKCSAgICAgICAgJHYgPSBwYWNrKCd2JywgJHRoaXMtPl9jZHJjKTsKCSAgICAgICAgJGMgPSAnQXJjaGl2ZWQgYnkgUC5BLlMuIEZvcmsgdi4gJyAuIFZFUjsKCSAgICAgICAgZWNobyAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiLCAkdiwgJHYsIHBhY2soJ1YnLCAkcyksIHBhY2soJ1YnLCAkdGhpcy0+X2Nkc28pLCBwYWNrKCd2Jywgc3RybGVuKCRjKSksICRjOwoJICAgICAgICBzRGllKCk7CgkgICAgfQp9CgkKZnVuY3Rpb24gcGFja1RpbWUoJHYpIHsKICAgICR2ID0gZ2V0ZGF0ZSgkdik7CiAgICByZXR1cm4gcGFjaygndnYnLCAoKCR2Wydob3VycyddIDw8IDExKSArICgkdlsnbWludXRlcyddIDw8IDUpICsgJHZbJ3NlY29uZHMnXSA+PiAxKSwgKCgoJHZbJ3llYXInXSAtIDE5ODApIDw8IDkpICsgKCR2Wydtb24nXSA8PCA1KSArICR2WydtZGF5J10pKTsKfQoKaWYgKCFkZWZpbmVkKCdQSFBfSU5UX01BWCcpKQogICAgZGVmaW5lKCdQSFBfSU5UX01BWCcsIGludHZhbCgnMTAwMDAwMDAwMDAwMDAwMDAwMDAnKSk7CiAgICAKZnVuY3Rpb24gemlwQ2FsYygkYnVmZikgewogICAgc3RhdGljICRjcmNUYmwgPSBOVUxMLCAkY2hyVGJsID0gTlVMTCwgJGRhdGFTaXplID0gMCwgJGNyY1N1bSA9IDB4ZmZmZmZmZmYsICRzaGZ0Rml4ID0gMDsKICAgIGlmICgkY3JjVGJsID09PSBOVUxMKSB7CiAgICAgICAgJHNoZnRGaXggPSBQSFBfSU5UX01BWCA+PiAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IDI1NjsgKyskaSkgewogICAgICAgICAgICAkdiA9ICRpOwogICAgICAgICAgICBmb3IgKCRqID0gODsgJGo7IC0tJGopCiAgICAgICAgICAgICAgICAkdiA9ICR2ICYgMSA/ICR2ID4+IDEgJiAkc2hmdEZpeCBeIDB4RURCODgzMjAgOiAkdiA+PiAxICYgJHNoZnRGaXg7CiAgICAgICAgICAgICRjcmNUYmxbXSAgICAgICAgPSAkdjsKICAgICAgICAgICAgJGNoclRibFtjaHIoJGkpXSA9ICRpOwogICAgICAgIH0KICAgICAgICAkc2hmdEZpeCA9IFBIUF9JTlRfTUFYID4+IDc7CiAgICB9IGVsc2VpZiAoJGJ1ZmYgPT09IE5VTEwpIHsKICAgICAgICAkdiAgICAgICAgPSBhcnJheSgKICAgICAgICAgICAgJGRhdGFTaXplLAogICAgICAgICAgICAkY3JjU3VtCiAgICAgICAgKTsKICAgICAgICAkZGF0YVNpemUgPSAwOwogICAgICAgICRjcmNTdW0gICA9IDB4ZmZmZmZmZmY7CiAgICAgICAgcmV0dXJuICR2OwogICAgfQogICAgJGMgPSBzdHJsZW4oJGJ1ZmYpOwogICAgJGRhdGFTaXplICs9ICRjOwogICAgZm9yICgkaSA9IDA7ICRpIDwgJGM7ICsrJGkpCiAgICAgICAgJGNyY1N1bSA9ICRjcmNUYmxbJGNyY1N1bSAmIDB4RkYgXiAkY2hyVGJsWyRidWZmWyRpXV1dIF4gJGNyY1N1bSA+PiA4ICYgJHNoZnRGaXg7CiAgICByZXR1cm4gJGJ1ZmY7Cn0KCmZ1bmN0aW9uIGpzb25FY2hvKCR2KSB7CiAgICBzdGF0aWMgJHMgPSBOVUxMLCAkciA9IE5VTEw7CiAgICBpZiAoJHMgPT09IE5VTEwpIHsKICAgICAgICAkcyA9IGFycmF5KAogICAgICAgICAgICAnXFwnLAogICAgICAgICAgICAnIicKICAgICAgICApOwogICAgICAgICRyID0gYXJyYXkoCiAgICAgICAgICAgICdcdTAwNWMnLAogICAgICAgICAgICAnXHUwMDIyJwogICAgICAgICk7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDw9IDB4MUY7ICsrJGkpIHsKICAgICAgICAgICAgJHNbXSA9IGNocigkaSk7CiAgICAgICAgICAgICRyW10gPSBzcHJpbnRmKCdcdTAwJTAycycsIGRlY2hleCgkaSkpOwogICAgICAgIH0KICAgIH0KICAgIGVjaG8gJHYgPT09IE5VTEwgPyAnIk5VTEwiJyA6ICciJyAuIHN0cl9yZXBsYWNlKCRzLCAkciwgJHYpIC4gJyInOwp9Cgpzd2l0Y2ggKCREWydhJ10pIHsKICAgIGNhc2UgJ2YnOgogICAgICAgIGZ1bmN0aW9uIHRlc3RQcm9wKCRhLCAkdikgewogICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkaSkKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkaSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJGkpID09PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdiA+ICRpWzBdICYmICR2IDwgJGlbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGlbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdiA+ICRpWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2IDwgJGlbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR2ID09PSAkaSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KICAgICAgICBjbGFzcyBTZWFyY2hlciB7CiAgICAgICAgICAgIHZhciAkZiwgJGQsICRwLCAkYTsKICAgICAgICAgICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHYpIHsKICAgICAgICAgICAgICAgIGVjaG8gJ3siZiI6Wyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZiA9ICR2OwogICAgICAgICAgICAgICAgJHRoaXMtPmQgPSAwOwogICAgICAgICAgICAgICAgJHRoaXMtPnAgPSBOVUxMOwogICAgICAgICAgICAgICAgJHRoaXMtPmEgPSBhcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGZpbHRlcigkdikgewogICAgICAgICAgICAgICAgJGkgPSBuZXcgRmlsZUluZm8oJHYpOwogICAgICAgICAgICAgICAgJGsgPSAkaS0+Z2V0RmlsZU5hbWUoKTsKICAgICAgICAgICAgICAgICRmID0gJHRoaXMtPmY7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICcuJyB8fCAkayA9PT0gJy4uJykKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAoJGktPmlzTGluaygpICYmICFpc3NldCgkZlsnbCddKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAkYiA9ICRpLT5pc0RpcigpOwogICAgICAgICAgICAgICAgaWYgKCRiICYmICghaXNzZXQoJGZbJ2QnXSkgfHwgJGZbJ2QnXSA+ICR0aGlzLT5kKSkKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YVtdID0gJHY7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGZbJ3knXSkgJiYgKCRmWyd5J10gPT09IDEgPyAhJGIgOiAkYikpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmWydwJ10pICYmICRpLT5nZXRNb2RlKCkgPCAkZlsncCddKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICghJGIgJiYgaXNzZXQoJGZbJ3UnXSkgJiYgKCRpLT5nZXRQZXJtcygpICYgMDAwNzAwMCkgIT09IDAwMDQwMDApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmWyduJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRrICE9PSAkZlsnbiddKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGZbJ2knXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcCgkaywgJGZbJ2knXSkgIT09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkZlsnciddKSkgewogICAgICAgICAgICAgICAgICAgIGlmICghcHJlZ19tYXRjaCgkZlsnciddLCAkaykpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnbyddKSAmJiAhdGVzdFByb3AoJGZbJ28nXSwgJGktPmdldE93bmVyKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnZyddKSAmJiAhdGVzdFByb3AoJGZbJ2cnXSwgJGktPmdldEdyb3VwKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnZSddKSAmJiAhdGVzdFByb3AoJGZbJ2UnXSwgJGktPmdldENUaW1lKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZlsnbSddKSAmJiAhdGVzdFByb3AoJGZbJ20nXSwgJGktPmdldE1UaW1lKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICghJGIgJiYgaXNzZXQoJGZbJ3onXSkgJiYgIXRlc3RQcm9wKCRmWyd6J10sICRpLT5nZXRTaXplKCkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICghJGIgJiYgKGlzc2V0KCRmWyd0J10pIHx8IGlzc2V0KCRmWyd2J10pIHx8IGlzc2V0KCRmWyd4J10pKSkgewogICAgICAgICAgICAgICAgICAgIGlmICghaXNfc3RyaW5nKCRrID0gZ2V0RmlsZSgkdikpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmWyd0J10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGssICRmWyd0J10pID09PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGZbJ3YnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlzdHIoJGssICRmWyd2J10pID09PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoIXByZWdfbWF0Y2goJGZbJ3gnXSwgJGspKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkayA9ICRpLT5nZXRQYXRoKCk7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPnAgIT09ICRrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5wICE9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICddfSwnOwogICAgICAgICAgICAgICAgICAgIGVjaG8gJ3sicCI6JzsKICAgICAgICAgICAgICAgICAgICBqc29uRWNobygkayk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnAgPSAkazsKICAgICAgICAgICAgICAgICAgICAkayAgICAgICA9IG5ldyBGaWxlSW5mbygkayk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnLCJtIjonLCAkay0+Z2V0TW9kZSgpLCAnLCJmIjpbJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG91dEZpbGVJbmZvKCRpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2goJHYpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5hID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgIGRpclJlYWQoJHYsIGFycmF5KAogICAgICAgICAgICAgICAgICAgICYkdGhpcywKICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJwogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5mWydkJ10pIHx8ICR0aGlzLT5mWydkJ10gPiAkdGhpcy0+ZCkgewogICAgICAgICAgICAgICAgICAgICsrJHRoaXMtPmQ7CiAgICAgICAgICAgICAgICAgICAgJGEgPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkdikKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNlYXJjaCgkdik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoKCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5wICE9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnXX1dJzsKICAgICAgICAgICAgICAgICAgICBvdXRGaWxlSW5mbyhOVUxMLCBUUlVFKTsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ10nOwogICAgICAgICAgICAgICAgc0RpZSgnfScpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGRpclJlYWQoJHAsICRmKSB7CiAgICAgICAgICAgICRiID0gaXNfc3RyaW5nKCRmKTsKICAgICAgICAgICAgaWYgKHN1YnN0cigkcCwgLTEpICE9PSBEU0MpCiAgICAgICAgICAgICAgICAkcCAuPSBEU0M7CiAgICAgICAgICAgIGlmICgkdiA9IG9wZW5kaXIoJHApKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoKCRpID0gcmVhZGRpcigkdikpICE9PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICBpZiAoJGkgIT09ICcuJyAmJiAkaSAhPT0gJy4uJykKICAgICAgICAgICAgICAgICAgICAgICAgJGIgPyAkZigkcCAuICRpKSA6ICRmWzBdLT57JGZbMV19KCRwIC4gJGkpOwogICAgICAgICAgICAgICAgY2xvc2VkaXIoJHYpOwogICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR2ID0gZGlyKCRwKSkgewogICAgICAgICAgICAgICAgd2hpbGUgKCgkaSA9ICR2LT5yZWFkKCkpICE9PSBGQUxTRSkKICAgICAgICAgICAgICAgICAgICBpZiAoJGkgIT09ICcuJyAmJiAkaSAhPT0gJy4uJykKICAgICAgICAgICAgICAgICAgICAgICAgJGIgPyAkZigkcCAuICRpKSA6ICRmWzBdLT57JGZbMV19KCRwIC4gJGkpOwogICAgICAgICAgICAgICAgJHYtPmNsb3NlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT04gPj0gJzUnKToKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJHYgPSBuZXcgRGlyZWN0b3J5SXRlcmF0b3IoJHApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICR2ID0gRkFMU0U7CiAgICAgICAgICA</description>
<pubDate>26 Jun 2007</pubDate>
<author></author>
<guid>http://iao.susu.ac.ru/index.php?mod=news&amp;action=comm&amp;data=1</guid>
</item>

</channel>
</rss>
