Analyze

microsoft-silverlight.softonic.cn: Microsoft Silverlight 版 - 下载

Microsoft Silverlight 版,免费、安全下载。Microsoft Silverlight 最新版: 微软对Adobe Air的回答.

Page load speed analysis

  • 58/100

    Normal result
  • 6

    Successful tests
  • 2

    Failed tests
  • First response

    378 ms

  • Resources loaded

    4 sec

  • Page rendered

    417 ms

  • Total page load time

    4.8 sec

Welcome to microsoft-silverlight.softonic.cn homepage info - get ready to check Microsoft Silverlight Softonic best content for Malaysia right away, or after learning these important things about microsoft-silverlight.softonic.cn

We analyzed Microsoft-silverlight.softonic.cn page load time and found that the first response time was 378 ms and then it took 4.4 sec to load all DOM resources and completely render a web page. This is a poor result, as 65% of websites can load faster.

Page optimization

  • HTML 138.5 kB
    Images 1.4 MB
    Javascripts 1.3 MB
    CSS 63.0 kB

    In fact, the total size of Microsoft-silverlight.softonic.cn main page is 2.8 MB. This result falls beyond the top 1M of websites and identifies a large and not optimized web page that may take ages to load. 75% of websites need less resources to load and that’s why Accessify’s recommendations for optimization and resource minification can be helpful for this project. Images take 1.4 MB which makes up the majority of the site volume.

    • Original 138.5 kB
    • After minification 134.7 kB
    • After compression 35.4 kB

    HTML optimization

    HTML content can be minified and compressed by a website’s server. The most efficient way is to compress content using GZIP which reduces data amount travelling through the network between server and browser. HTML code on this page is well minified. It is highly recommended that content of this web page should be compressed using GZIP, as it can save up to 103.1 kB or 74% of the original size.

    • Original 1.4 MB
    • After optimization 1.3 MB

    Image optimization

    Image size optimization can help to speed up a website loading time. The chart above shows the difference between the size before and after optimization. Microsoft Silverlight Softonic images are well optimized though.

    • Original 1.3 MB
    • After minification 1.3 MB
    • After compression 398.9 kB

    JavaScript optimization

    It’s better to minify JavaScript in order to improve website performance. The diagram shows the current total size of all JavaScript files against the prospective JavaScript size after its minification and compression. It is highly recommended that all JavaScript files should be compressed and minified as it can save up to 866.2 kB or 68% of the original size.

    • Original 63.0 kB
    • After minification 62.7 kB
    • After compression 11.0 kB

    CSS optimization

    CSS files minification is very important to reduce a web page rendering time. The faster CSS files can load, the earlier a page can be rendered. Microsoft-silverlight.softonic.cn needs all CSS files to be minified and compressed as it can save up to 52.0 kB or 83% of the original size.

Network requests diagram

  • en.softonic.com
  • c2ef0-da323.css
  • 826d5-99712.js
  • px.js
  • px.js
  • amzn_ads.js
  • rta.js
  • bid
  • gpt.js
  • pubads_impl_81.js
  • show_companion_ad.js
  • container.html
  • corporative-logo.png
  • 5632_776x437.jpg
  • boca-image.png
  • softonic-logo-inline.png
  • 5631_386x217.jpg
  • 5629_386x217.jpg
  • messenger-overview-29022016-en_img350.jpg
  • hitman-go-definitive-edition-02-700x393.jpg
  • atrapame-si-puedes-664x374-304x170.jpg
  • Spotify-304x170.jpg
  • Untitled-1-664x374-664x374.jpg
  • compass-151722_960_720-370x208.png
  • lara-croft-and-the-guardian-of-light-14-700x327.jpg
  • apple_13-664x374-370x208.jpg
  • image-04-224x168.png
  • how-to-block-a-contact-on-whatsapp-android-370x208.jpg
  • image-01-700x393.jpg
  • sobre.png
  • gtm.js
  • ads
  • OpenSans-CondLight-webfont.woff
  • OpenSans-CondBold-webfont.woff
  • font-icon.woff
  • footer_social_icons.png
  • analytics.js
  • beacon.js
  • gw.js
  • blank.gif
  • measure.min.js
  • ads.min.js
  • collect
  • collect
  • blank.gif
  • 26977-82dbd.js
  • textlink-ads.jpg
  • textlink-ads.jpg
  • 7c1e4-7c85b.js
  • f4d6c-e44de.js
  • a.js
  • collect
  • widgets.js
  • sdk.js
  • ws2NWgnzXLiUnhI7lx3WXBBVC42x+edesNYzFGLsfyLq1wsHs3.png
  • ads
  • timeline.1b43d11859b7663a2225b885f87704a5.js
  • syndication
  • 479282808301445120
  • 10496.js
  • osd.js
  • sync
  • sync
  • 191516-57.js
  • 191516-10.js
  • xd_arbiter.php
  • xd_arbiter.php
  • sync
  • 191516-15.js
  • timeline.4d087f49a21e27038d9769d7c976b8fa.default.css
  • timeline.4d087f49a21e27038d9769d7c976b8fa.default.css
  • g9deccO5_normal.jpg
  • sync
  • 171152260.js
  • ads
  • emily.html
  • 191516-2.js
  • tap.php
  • sync
  • 191516-55.js
  • ads
  • pixel.htm
  • channels.js
  • expansion_embed.js
  • html_inpage_rendering_lib_200_117.js
  • push
  • abg.js
  • ddc.htm
  • tap.php
  • cms-2c-rubicon.html
  • activeview
  • rc
  • rubicon
  • tap.php
  • pixel
  • rb_match
  • match
  • rbcm
  • rubicon
  • tap.php
  • tap.php
  • tap.php
  • tap.php
  • tap.php
  • ping_match.gif
  • tap.php
  • tap.php
  • tap.php
  • tap.php
  • tap.php
  • tap.php
  • pixel
  • tap.php
  • tap.php
  • pixel
  • netseerads.js
  • jot
  • lidar.js
  • index.html
  • render.js
  • match-result
  • BannerServer
  • Enabler_01_93.js
  • bundle.js
  • index_boot.js
  • AdKit.js
  • Ad.js
  • bootstrap.js
  • rs
  • javascript;base64,%20KGZ1bmN0aW9uIChsaWIsIGltZywgY2pzKSB7DQoNCnZhciBwOyAvLyBzaG9ydGN1dCB0byByZWZlcmVuY2UgcHJvdG90eXBlcw0KDQovLyBsaWJyYXJ5IHByb3BlcnRpZXM6DQpsaWIucHJvcGVydGllcyA9IHsNCgl3aWR0aDogMzAwLA0KCWhlaWdodDogNjAwLA0KCWZwczogMjQsDQoJY29sb3I6ICIjMDAwMDAwIiwNCgltYW5pZmVzdDogWw0KCQl7c3JjOiJpbWFnZXMvRm9zc2lsX2xvZ29fMzAweDYwMC5wbmciLCBpZDoiRm9zc2lsX2xvZ29fMzAweDYwMCJ9LA0KCQl7c3JjOiJpbWFnZXMvR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMS5wbmciLCBpZDoiR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMSJ9LA0KCQl7c3JjOiJpbWFnZXMvR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMi5wbmciLCBpZDoiR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMiJ9LA0KCQl7c3JjOiJpbWFnZXMvR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMy5wbmciLCBpZDoiR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMyJ9DQoJXQ0KfTsNCg0KDQoNCi8vIHN5bWJvbHM6DQoNCg0KDQoobGliLkZvc3NpbF9sb2dvXzMwMHg2MDAgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoaW1nLkZvc3NpbF9sb2dvXzMwMHg2MDApOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQml0bWFwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsNzksMjYpOw0KDQoNCihsaWIuR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMSA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZShpbWcuR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5CaXRtYXAoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsMCwyNTYsMjU1KTsNCg0KDQoobGliLkdvb2dsZV9TdG9yZV9Gb3NzaWxfMzAweDYwMF9wcm9kdWN0XzIgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoaW1nLkdvb2dsZV9TdG9yZV9Gb3NzaWxfMzAweDYwMF9wcm9kdWN0XzIpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQml0bWFwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsMjY3LDI2Mik7DQoNCg0KKGxpYi5Hb29nbGVfU3RvcmVfRm9zc2lsXzMwMHg2MDBfcHJvZHVjdF8zID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKGltZy5Hb29nbGVfU3RvcmVfRm9zc2lsXzMwMHg2MDBfcHJvZHVjdF8zKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkJpdG1hcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDI4MSwyNTYpOw0KDQoNCihsaWIucmVwbGF5ID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBMYXllciAxDQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiM3NjdCN0UiKS5zKCkucCgiQWdyQXJRZ1RnU0FBZ1pRQUFnWUFUZ1NRQVJnVEFhQUFRQVpBQUFTQVRJQVVnVElBQUF2SWd5QUFJQVRnUlFnT2dQZ1NBQVFnVUFBZ05BT1FnT0FPQUFBU1FBQUFUQU9BT1FBTkFPQVVBQVFBUkFBQVBnT0lBS0FMUWdTQVNnWUFBUWdhQUFnUmdUZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDYuNCw2LjIpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDEyLjcsMTIuNSk7DQoNCg0KKGxpYi5tY19saWdodCA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5sZihbInJnYmEoMjU1LDI1NSwyNTUsMC4zNTcpIiwicmdiYSgyNTUsMjU1LDI1NSwwLjg4NikiXSxbMCwwLjk4NF0sMTA2LjIsMC4zLDIxMS44LDAuMykucygpLnAoIkVnZ2lBTThRQUFnTkhFc1hRSEVzVkFCZ3RRQUNneFpGQXZRTW5BWU5OQWhRQUtBQWs5TDJRazlMNGdNQUFRdVNBYXRvQVVReHBBYm1OQUFRallBQUFBZ0lnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oNTMuOCw4My43KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKC0xNTQuNSwwLDQxNi43LDE2Ny40KTsNCg0KDQoobGliLm1jX2hpZ2hsaWdodExpbmUgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MubGYoWyJyZ2JhKDI1NSwyNTUsMjU1LDApIiwicmdiYSgyNTUsMjU1LDI1NSwwLjgwNCkiLCJyZ2JhKDI1NSwyNTUsMjU1LDApIl0sWzAsMC41MzcsMV0sLTU5LjgsLTE5LjcsNDAuMSw0Mi41KS5zKCkucCgiQXllTXZNQVZWZ2pNSVBvSnZNZ1ZWQWpNZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDExOC4zLDE0My44KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsMCwyMzYuNiwyODcuNik7DQoNCg0KKGxpYi5tY19nb29nbGVTdG9yZV9Mb2dvID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBmbGFzaA0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRkZGRkZGIikucygpLnAoIkF1L0ppUWhGZzJnZ2hQSUNCZzJRQVVBd0FvQWhRQXZBbkEvQUFRQlZBQUF2Z3pRQXhnemdCaGdJQUFneElnRUFBUWdjQWhnc0FWUWd5QVdnNEFBUWlDQUJoZ2hpUWhpaGpBQWlNUUFBaUtCaWhsUUJnaGlDQ0FBUUE0QUFBeUFYUUFzQVVBY0FnSUFFQUFJQUFnM0lDT0FBSUFBSmRRQUFDeGhnQmRRaFZCU2lOQUFRaHdBQWhXaENnQXR6aHVRZzRBOEFBQldRQUFCWUE0QTZRQTJBNkJPZ0JRQk5BQkF6ZzZRQTFnNkFBaFlRQUFoV2cxZzhRZ3pnNmhOQUFRaE9BQWcyQTZnQWdWRVNRaGdoZ0FBaVBRQUFpU0JlaGhRQlpoZENGQUFRQjFBQUJUQlBRQThBNUFlQlBJQVFBbUluRUM1UUEwQm1Cd0FBUUJuQUFBK2hkSUIwQk5RZ21BNWc3QW1RaFNBMmhtQUFRaVFBQWhlaGlnQUJYaDVRZytBNkFEQlhJRXVoN1FnTWdnZ2pnVFFnaWdWZ3NBQlFoQkFBZzFBeGdBN0FFVVFoa2hnQUFpUlFBQWlRQmtoZ1FCaWhnQ05BQVFDT0FBQmlCZ1FCa0JnQUFDUVFBQUNSaGtCZ1FoaUJoaU9nQlFpTkFCaGloaGdBNVhodlFnNUE2QUFCWVFBQUJaQTVBNlFBNEE1Qk9BQVFCT0FBQTRnNVFBNWc3QUFoWVFBQWhZZzVnNlFnM2c1aFBBQVFoUEFBZzNBNWdFZ21sQUVVUWhqaGdBQWlSUUFBaVFCamhnUUJqaGdDT0FBUUNOQUFCaUJnUUJqQmdBQkNRUWdCQ1JoakJnUWhpQmhpTmdCUWlPQUJoamhoZ0VnazdnQnZRZzRBNkFBQllRQUFCWkE0QTZRQTRBNUJQQUFRQk9BQUEzZzVRQTVnN0FBaFlRQUFoWWc1ZzZRZzNnNWhPQUFRaFFBQWczQTVnRWcyY0FEYVFpZWlhQUFqV1FBQWpZQ2VpYlFDZGlhRGFBQVFEUUFBQ1hDUkloa0JsUWh0aG1pV2dCUWllQUFodUJ3UWh0QnZBQUNmUUFBQ2RCdEJ2UUJ1QndDZWdCUUJkQUFCSWdoUUEyZ2FBdWd0UUJBaEFBT2h6SWxYQUFJQUFpUElIakFBUUFIQW9BQkF4UUFBQmNnYkJQUWdnQmhoQ0JDUWlOQ1RqaGdCUWphQUFpZGlhZ0VBd3NBRVVRaFloZUFBaVFRQUFpSUJWaGdRQlhoa0NIQUFRQ05BQUJUQmJRQlVCY0FBQ1ZJZ0NBV0ludkFBUUFGQmZBOUE1UUE0QTFCT2dCUUE0QUFBcmdZUUF4Z2JBWGc0SUJwQXJRZ2ZCS2hCQXVRaExBMGhuQUFRaU9BQWhhaGdnRUF5VWdDU1FneEFwZ1NCR0lGc0FBUWdFZzJnbmdxUWcwZzNoWkFBUWhCZ0Jnd0FwZ0FmRkVVUWhiaGVBQWlRUUFBaU9CYmhmUUJiaGZDTkFBUUNNQUFCYkJmUUJiQmZBQUNPUUFBQ1FoYkJlUWhiQmdpTUFBUWlOQUFoYmhnZ0VBZ2ZnQi9RaEFCQkFCQmtRZ0JCbkJBQkFRQTZBN0JVQUFRQlRBQUE2ZzdRQS9oQUFBaG5RQUFoa2cvaEJRZzZnOGhUQUJRaFVnQmc2QThnQU9ZRTNRaGxoRmdkaDJJQnJnclFBVEJMQTdBelFBOUExQkpBQVFCTkFBQTBnblFBNWdwQUFoR1FBQWhNZzhndFFneGdsaDFna1FoNmdtZzhnN1FoQ2cvQUFoZlFBQWhpQk5oSFFCUmhMQjhBQVFCMEFBQlNCQlFCQUF6QVhCRklodEF0UWdMZ3JncGdpUWd5Z3BoSEFBUWhEQUJnd0FrUWd4QW1BQUE1UUFBQXpBd0FuUUFwQWdCVkFjUUNQQXRCQkEwUUJjQkxnQkI5UUFBQ0Foa0JKUWhWQS9oNUFBUWhqQUFoYWc5Z0FaVkUxUWcwZzBBQWhnSUFBbEhJaHVBQUlBQWhzSUJ1QUFJQUFpL0lCMkFBSUFBQy9JQ1pBQUlBQUJzSWlaQUFJQUFFK1FBQUJuQlVBQVFBaGdCQVZnS0lBcEJsUWduQVJnNEFBUWhpQUFnMGcxZ0VBcE9BRmdJQUFweUlCd0FBSUFBQm5JQUZBQVFBU2d6QTZnalFBMmdnQTBBQVFBekFBQWxBUElnc0J1UWdZZ0lnbmdCUWhCQUJndUF3UWcwQTFBQUJRSUFBRlhnQWxSRmdJQUF2ZklDVkFBSUFBUGZnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMzY0LjMsNjcuNyk7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsNzI4LjYsMTM1LjMpOw0KDQoNCihsaWIubGlnaHQxID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBMYXllciAxDQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmxmKFsicmdiYSgyNTUsMjU1LDI1NSwwKSIsInJnYmEoMjU1LDI1NSwyNTUsMC44MDQpIiwicmdiYSgyNTUsMjU1LDI1NSwwKSJdLFswLDAuNTM3LDFdLC01My4yLC0zMC42LDQ2LjcsMzEuNikucygpLnAoIkF0dkU4SU13MUFJT3ZMSklzeFZCZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDExMS43LDE1NC43KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDIzLjcsNTEuNywxNzYuMiwyMDYpOw0KDQoNCihsaWIubGlnaHQgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MubGYoWyJyZ2JhKDI1NSwyNTUsMjU1LDAuMzU3KSIsInJnYmEoMjU1LDI1NSwyNTUsMC44ODYpIl0sWzAsMC45ODRdLDE4MS4yLDAuMywyODYuOCwwLjMpLnMoKS5wKCJBMHpNOFFBQWdOSERzWFFIRXNWQUNndFFBQmd4WkdBdklDWEFFSXB5WktJa3FBSFF4bkFibU5BQVFqWEFBQUFnSWciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSgtMjEuMiw4My43KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKC0xNTQuNSwwLDI2Ni42LDE2Ny40KTsNCg0KDQoobGliLmhpdCA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gTGF5ZXIgMQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjNUU1RDVEIikucygpLnAoIkFodUJxSUFBalRJRGRBQUlBQURUZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDExLjEsMTAuNik7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsMjIuMywyMS4yKTsNCg0KDQoobGliLm1jX2N0YUNvcHkgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDINCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiIzQyQTZGNiIpLnMoKS5wKCJBQnBBalFnTGdOQUFnV1FBQWdXQUxnTVFBTGdOQVZBQVFBVUFBQUxBTlFBTUFOQUFBVlFBQUFXZ01BTlFnTEFOZ1VBQVFnVkFBZ0xnTmdBQnhnYlFnSUFLQUFBUlFBQUFTQUlBS1FBSUFLQVFBQVFBUEFBQUlnS1FBSWdLQUFnU1FBQWdTZ0lnSlFnSWdLZ1BBQVFnUUFBZ0lBS2dBalZBbVFnSmdKQUFnUUlBQWc2SUFMQUFJQUFBN1FBQUFMQUdBSFFBR0FHQU5BQVFBTUFBQUdnR1FBR2dIQUFnTElBQWc3SUFMQUFJQUFBNlFBQUFRZ0pBSlFnS0FLZ1JBQVFnUkFBZ0pnS2dBRVBBdUlnU2c4SWdEZ0xJZ0NnSElnRkFTSWdTQThJZ0xBQUlnWmhiSUFNQUFJQVBBM0lBRUFXUUFDZ0xBRGdMSUFSZzNJQU1BQUlBUkEzSUFGQVdJQUZnV0lBUGczSUFMQUFJZ1pCYmdBQThBdUlnemhNSUFBQUFJQUJBWklBQUF6SWdLQUFJQUFoYklBTUFBSUF6Qk1JQUFBQUlBQWdMSWdCZ09JQUFneklBTEFBSUFBQmJnQWhpQXVJQUFna0lnZmczSUFNQUFJQVpBdElBWmd0SUFNQUFJZ2dBM0lBQUFrZ0FreUF1SUFBaGJJQWFBQVFBVEFBQUlBRlFBSUFHQUFBTVFBQUFJZ0VBR1FnRkFGZ0pBQ0lBQUFBUUFWQUNBQUFUUUFBQU1nSUFIUWdKQUhnUEFBZ0Frb0FsSUFVQUFRQUxBQUFHZ0VRQUdnRkFBZ0pRQUFnSmdHZ0VRZ0dnRWdNQUFJZ1RBQWdBa29nRklBU0FBUUFNQUFBRmdFUUFGZ0RBQWdKUUFBZ0lnR2dEUWdGZ0VnTkFBSWdRQUFnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMzAuOCw0LjgpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDYxLjYsOS43KTsNCg0KDQoobGliLm1jX2N0YUJhc2UgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiIzQyQTZGNiIpLnMoKS5wKCJBbVpCdElBQWphSU15QUFJQUFEYWdBbVBCaklNZkFBSUFBakdJc2ZBQWciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg0MSwxMSk7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsODIsMjIpOw0KDQoNCihsaWIuYzNfMyA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gZmxhc2ggY29weQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRkNGQ0ZDIikucygpLnAoIkFCU0JWSUFBZ1ZRZ1pnQmdRZ0hJQUFnV1FBSkFGQU1BRFFBTUFEQUlBQUlBQWduSWdJZ0RRZ1JnRWdIZ0pRZ0lnSkFBZ09RQUFnT0FMZ0pRQUxnSkFTZ0NJQUFnUklBUEFBSUFBQVJRQVVBQkFTQUhJZ0hBVFFnUWdHZ1BnQ0lBQUFtSUFIQURRQVVBSEFIQUdRQUlBSmdCQU1RQUFBUGdMQUpRZ0tBS2dVQUNJQUFBV2dBQmhBc1FBUmdEQUJnTlFnQmdHZ0VnRFFnRWdFZ0pnRWdBQkdncVFnRUFFQUFBRlFBQUFHQUVBRVFBREFFQUpBRUlBQWdnUWdIQUJnRkFFZ0FHU0JESUFBZ1dRQUlBRkFMQURRQUtBQ0FKQUFRQVJBQUFKZ0hRQUlnSEFBZ09RQUFnYmdpQUFJZ01BQklnTkFDSWdLZ0VJQUdoS0lCTkFBSUFBQVdJZzVBQUlnREFsSUFKZ0NJQU5BQVFBV0FBQU5BTVFBTkFLQUFBVVFBQUFZZ09BT1FnUEFOZ2NBQVFnWkFBZ09nSWdBa29CRVFnTGdIZ0hnTlFnRmdOZ0JnU1FBQWdaQU9nUFFBTmdQQVhBQVFBWEFBQU9BUFFBTUFRQUFBWVFBQUFjZ05BUFFnTkFQZ1hBQVFnUEFBZ0xnSGdBa3FnUVFnS0FNQUFBVlFBQUFYQUtBTlFBSkFOQVRBQVFBVEFBQUpnTlFBTGdOZ0JnWFFBQmdWZ0xnTVFnSmdOZ1RBQVFnVEFBZ0pBTmdBRW9CSklBN2grSWhPQUFJQUFnVklCb0FBSUFBQVFJZzdDRGdBQ2ZCSklBQWdTSUFtZ25RQVNnUUFGZ0hRQUZnSEFEZ0hRQURnR0FBZ0hRQUFnTGdHZ0ZRZ0hnR2dLQUFRZ0pBQWdJQURRZ0lBRGdMQUlJZ01nUFFBTWdMQU1nRVFBTWdGQU5BQVFBVkFBQU1BTFFBTkFMQUFBU1FBQUFMZ0VBSlFnREFKZ0hBSVFnSUFKZ1NBUklnYUFaSUFBQUJJQkhBQUlBQUFWZ0FnekJKSUFBaEpRQUFnT2dHZ0lRZ0dnSGdPQUFRZ1FBQWdKQUpRZ0lBS0FBQVNJQUFCQklnTEFBSUFBaEtRQUFnY2daQUFRZ1NBQWdIQUtRZ0pBS0FCQVZJQUFBOUlnTEFBSUFBaHRJQUpBQUlBQ0FQSUFBQUFRQUZnSUFJZ0ZRQUpnRUFLQUFRQWFBQUFJQVRJQUFBQVFBR2dKQUpnRlFBS2dGQUxBQVFBU0FBQUpBSlFBSkFLQUFBVElBQUJKZ0FtTEJKSUFBaHRJQUtBQUlBQUFVSUFCQUFRQUhnTUFJZ0ZRQUhnRkFNQUFJQVBBQklnQ0FLUWdIZ0NnSEFBUWdQQUFnSkFNUWdKQU1BQUFSSUFBQTlnQW54QkpJQUFpVUlCU0FBSUFBQUtJaElBQUlBQUJBSUJFQUFJQUFBSEloRUFBSUFBQkRnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oNTQsNDAuMSk7DQoNCgkvLyBmbGFzaA0KCXRoaXMuc2hhcGVfMSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlXzEuZ3JhcGhpY3MuZigiI0ZDRkNGQyIpLnMoKS5wKCJBQlNCVklBQWdWUWdaZ0JnUWdISUFBZ1dRQUpBRkFNQURRQU1BREFJQUFJQUFnbklnSWdEUWdSZ0VnSGdKUWdJZ0pBQWdPUUFBZ09BTGdKUUFMZ0pBU2dDSUFBZ1JJQVBBQUlBQUFSUUFVQUJBU0FISWdIQVRRZ1FnR2dQZ0NJQUFBbUlBSEFEUUFVQUhBSEFHUUFJQUpnQkFNUUFBQVBnTEFKUWdLQUtnVUFDSUFBQVdnQUJoQXNRQVJnREFCZ05RZ0JnR2dFZ0RRZ0VnRWdKZ0VnQUJHZ3FRZ0VBRUFBQUZRQUFBR0FFQUVRQURBRUFKQUVJQUFnZ1FnSEFCZ0ZBRWdBR1NCRElBQWdXUUFJQUZBTEFEUUFLQUNBSkFBUUFSQUFBSmdIUUFJZ0hBQWdPUUFBZ2JnaUFBSWdNQUJJZ05BQ0lnS2dFSUFHaEtJQk5BQUlBQUFXSWc1QUFJZ0RBbElBSmdDSUFOQUFRQVdBQUFOQU1RQU5BS0FBQVVRQUFBWWdPQU9RZ1BBTmdjQUFRZ1pBQWdPZ0lnQWtvQkVRZ0xnSGdIZ05RZ0ZnTmdCZ1NRQUFnWkFPZ1BRQU5nUEFYQUFRQVhBQUFPQVBRQU1BUUFBQVlRQUFBY2dOQVBRZ05BUGdYQUFRZ1BBQWdMZ0hnQWtxZ1FRZ0tBTUFBQVZRQUFBWEFLQU5RQUpBTkFUQUFRQVRBQUFKZ05RQUxnTmdCZ1hRQUJnVmdMZ01RZ0pnTmdUQUFRZ1RBQWdKQU5nQUVvQkpJQTdoK0loT0FBSUFBZ1ZJQm9BQUlBQUFRSWc3Q0RnQUNmQkpJQUFnU0lBbWduUUFTZ1FBRmdIUUFGZ0hBRGdIUUFEZ0dBQWdIUUFBZ0xnR2dGUWdIZ0dnS0FBUWdKQUFnSUFEUWdJQURnTEFJSWdNZ1BRQU1nTEFNZ0VRQU1nRkFOQUFRQVZBQUFNQUxRQU5BTEFBQVNRQUFBTGdFQUpRZ0RBSmdIQUlRZ0lBSmdTQVJJZ2FBWklBQUFCSUJIQUFJQUFBVmdBZ3pCSklBQWhKUUFBZ09nR2dJUWdHZ0hnT0FBUWdRQUFnSkFKUWdJQUtBQUFTSUFBQkJJZ0xBQUlBQWhLUUFBZ2NnWkFBUWdTQUFnSEFLUWdKQUtBQkFWSUFBQTlJZ0xBQUlBQWh0SUFKQUFJQUNBUElBQUFBUUFGZ0lBSWdGUUFKZ0VBS0FBUUFhQUFBSUFUSUFBQUFRQUdnSkFKZ0ZRQUtnRkFMQUFRQVNBQUFKQUpRQUpBS0FBQVRJQUFCSmdBbUxCSklBQWh0SUFLQUFJQUFBVUlBQkFBUUFIZ01BSWdGUUFIZ0ZBTUFBSUFQQUJJZ0NBS1FnSGdDZ0hBQVFnUEFBZ0pBTVFnSkFNQUFBUklBQUE5Z0FueEJKSUFBaVVJQlNBQUlBQUFLSWhJQUFJQUFCQUlCRUFBSUFBQUhJaEVBQUlBQUJEZyIpOw0KCXRoaXMuc2hhcGVfMS5zZXRUcmFuc2Zvcm0oNTQsNDAuMSk7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuc2hhcGVfMSx0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwyMywxMDkuMSwzMi42KTsNCg0KDQoobGliLmMzXzIgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIGZsYXNoIGNvcHkNCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiI0ZDRkNGQyIpLnMoKS5wKCJBamtCaFFnTGdKQUFnT1FBQWdMQUhnSlFBSGdIQU1nQ1FnRmdEZ0RnRVFnRGdFQUFnRlFBQWdMQU9nSlFnSmdEZ0dnSFFnRmdKQUFnS1FBQWdTQUxnSlFBS2dMQVNBQVFBTEFCQUdBQ0lBa0FBSUFBQUdJZ1hBQ1FBSkFMQUFBT1FBQUFSZ0xBSFFnS0FLZ1NBQUlnTEFBUWdHQURnREFFUWdFQUZBQUFFUUFBQUZBRkFEUUFFQUNBSkFBSUFVQUFRQVNBQUFKQUlRQUtBSEFBQVBRQUFBUmdPQUtRZ1BBS2dhQUFRZ1ZnQmdNZ0hnQWprQkpRQUFBWEFpQUFRQXNBQUFBZ2NRQUFnS2dIZ0ZRZ0hnRWdQQUFJZ1RBQVFnZUFBQUFBWWdBalVncVFnSUFJQUFBT1FBQUFNQUlBSVFBSUFFQU5BQlFBT2dCQUhnRVFBSWdJQUFnTlFBQWdPZ0lnSVFnSWdHZ05nQlFnT0FBZ0hBSWdBSmxBdVFBQWdLQUpBQVFBSUFBQUFBS1FBQUFLZ0lBQVFnSkFBQUFnS2dBSDdBcFFnT2dQQUFnYVFBQWdhQU9nUVFBTmdRQVdBQVFBVUFBQUxBT1FBTEFPQUFBWElBQUFISWhRQUFRQUFBWEFMQU1RQUtBTUFVQUFRQUpBQUFJZ0NRQUhnQkFMZ0ZJQUFBS1FnSkFFZ0lBQlFnSUFDZ0tBQVFnWUFBZ09nUGdBSUVnbVFnS0FMZ0JBVUlCRkFBUUFBZ1VnSmdLUWdJZ01nUEFBUWdRQUFnS0FMZ0FFNEF4UWdMZ0hnR2dPUWdHZ01BQWdRUUFBZ2JBTmdRUUFOZ1BBWEFBUUFYQUJBT0FQUUFOQVBBQUFiUUFBQVpnT0FRUWdOQVBnWEFBUWdQQUFnTGdIZ0FFMmdqUWdLQU1BQUFYUUFBQVZBS0FOUUFLQU5BU0FBUUFUQUFBS2dOUUFLZ05BQWdWUUFBZ1hnS2dNUWdLZ09nVEFBUWdTQUFnS0FPZ0FEb0F3UWdIZ0lBQWdRSUFBaEdJZ1FBQUlBQWdISUFRZ0VJQUZnWklBR0FBSUFBQWJJQWdBQUlBQUFKSWdnQUFJQUFCRVFBQUFOQUVBR1FBRkFHQUpBQVFBS0FBQUhnQ0lBQUFJUWdIQURnS0FBUWdQQUFnSGdJZ0FCbkF5SUFBZ0xRQVFBSUFaZ0JRQVRBQUFMZ0lRQUxnSkFBZ05RQUFnSmdFZ0dRZ0VnRGdJZ0ZRZ0lnRWdRZ0dRZ1dnSWdKZ0pRZ0pnSkFBZ1BRQUFnUkFOZ0xRQU5nS0FWQUFRQVZBQUFUQUlJZ0VBSlFnVGdJZ1JBQVFnUUFBZ0tBSVFnS0FIQUFBT1FBQUFJQURBR1FBREFFQUhBRlFBSEFGQVFBRlFBU0FHQUpBR1FBSkFGQUVBSVFBRUFGQUFBTFFBQUFTZ09BTFFnT0FMZ1hBQVFnYkFBZ1BnR2dBZzhBcFFnT2dQQUFnYVFBQWdhQU5nUVFBTmdRQVdBQVFBVUFBQUtBT1FBTEFPQUFBWElBQUFISWhPQUFRQUFBWEFLQU1RQUxBTUFUQUFRQUtBQUFIZ0NRQUdnQkFLZ0ZJQUFBS1FnSkFFZ0dBQlFnSUFDZ0tBQVFnWUFBZ05nUGdBZ3pnbVFnS0FMZ0NBVUlCREFBUUFBZ1VnR2dLUWdKZ01nUEFBUWdRQUFnSkFMZ0FsTEF4UWdNZ0hnR2dPUWdHZ01BQWdRUUFBZ2JBT2dRUUFOZ1BBWEFBUUFYQUJBTkFQUUFOQVBBQUFiUUFBQVpnTkFRUWdOQVBnWUFBUWdPQUFnTGdIZ0FsT2dqUWdLQU1BQUFYUUFBQVZBS0FOUUFLQU5BVEFBUUFTQUFBS2dOUUFLZ05BQWdWUUFBZ1hnS2dNUWdLZ09nU0FBUWdUQUFnS0FPZ0FuR0F4UWdNZ0hnR2dPUWdHZ01BQWdRUUFBZ2JBT2dRUUFOZ1BBWEFBUUFYQUJBTkFQUUFOQVBBQUFiUUFBQVpnTkFRUWdOQVBnWUFBUWdPQUFnTGdIZ0FuSmdqUWdLQU1BQUFYUUFBQVZBS0FOUUFLQU5BVEFBUUFTQUFBS2dOUUFLZ05BQWdWUUFBZ1hnS2dNUWdLZ09nU0FBUWdUQUFnS0FPZ0FwaUFrUWdUZ1VBQWdqUUFBZ1dBS2dUUUFKZ1JBU2dLUUFSZ0tBWEFBUUFZQUFBVUFLSWdFQUpRZ1VnSmdWQUFRZ2RBQWdTQVNRZ1JBVEFBQWZRQUFBZ0FRQVJRQVJBUkFnQUFRQVZBQUFPZ0dJQUFneUlndEFBSUFBZ0tJQTRBQUlBQUJDUWdXQUpnYkFBUWdrQUFnVGdVZ0FHaUEySUFBaHRJQUpBQUlBQkFVSUFCQUFRQUhnTkFIZ0ZRQUlnRUFMZ0JJQVBBQ0lnQkFLUWdIZ0NnSUFBUWdPQUFnSkFNUWdKQU1BQUFTSUFBQThnQWh6QTJJQUFpZUlBS0FBSUFBQ2VnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oNjYuMywxOCk7DQoNCgkvLyBmbGFzaA0KCXRoaXMuc2hhcGVfMSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlXzEuZ3JhcGhpY3MuZigiI0ZDRkNGQyIpLnMoKS5wKCJBamtCaFFnTGdKQUFnT1FBQWdMQUhnSlFBSGdIQU1nQ1FnRmdEZ0RnRVFnRGdFQUFnRlFBQWdMQU9nSlFnSmdEZ0dnSFFnRmdKQUFnS1FBQWdTQUxnSlFBS2dMQVNBQVFBTEFCQUdBQ0lBa0FBSUFBQUdJZ1hBQ1FBSkFMQUFBT1FBQUFSZ0xBSFFnS0FLZ1NBQUlnTEFBUWdHQURnREFFUWdFQUZBQUFFUUFBQUZBRkFEUUFFQUNBSkFBSUFVQUFRQVNBQUFKQUlRQUtBSEFBQVBRQUFBUmdPQUtRZ1BBS2dhQUFRZ1ZnQmdNZ0hnQWprQkpRQUFBWEFpQUFRQXNBQUFBZ2NRQUFnS2dIZ0ZRZ0hnRWdQQUFJZ1RBQVFnZUFBQUFBWWdBalVncVFnSUFJQUFBT1FBQUFNQUlBSVFBSUFFQU5BQlFBT2dCQUhnRVFBSWdJQUFnTlFBQWdPZ0lnSVFnSWdHZ05nQlFnT0FBZ0hBSWdBSmxBdVFBQWdLQUpBQVFBSUFBQUFBS1FBQUFLZ0lBQVFnSkFBQUFnS2dBSDdBcFFnT2dQQUFnYVFBQWdhQU9nUVFBTmdRQVdBQVFBVUFBQUxBT1FBTEFPQUFBWElBQUFISWhRQUFRQUFBWEFMQU1RQUtBTUFVQUFRQUpBQUFJZ0NRQUhnQkFMZ0ZJQUFBS1FnSkFFZ0lBQlFnSUFDZ0tBQVFnWUFBZ09nUGdBSUVnbVFnS0FMZ0JBVUlCRkFBUUFBZ1VnSmdLUWdJZ01nUEFBUWdRQUFnS0FMZ0FFNEF4UWdMZ0hnR2dPUWdHZ01BQWdRUUFBZ2JBTmdRUUFOZ1BBWEFBUUFYQUJBT0FQUUFOQVBBQUFiUUFBQVpnT0FRUWdOQVBnWEFBUWdQQUFnTGdIZ0FFMmdqUWdLQU1BQUFYUUFBQVZBS0FOUUFLQU5BU0FBUUFUQUFBS2dOUUFLZ05BQWdWUUFBZ1hnS2dNUWdLZ09nVEFBUWdTQUFnS0FPZ0FEb0F3UWdIZ0lBQWdRSUFBaEdJZ1FBQUlBQWdISUFRZ0VJQUZnWklBR0FBSUFBQWJJQWdBQUlBQUFKSWdnQUFJQUFCRVFBQUFOQUVBR1FBRkFHQUpBQVFBS0FBQUhnQ0lBQUFJUWdIQURnS0FBUWdQQUFnSGdJZ0FCbkF5SUFBZ0xRQVFBSUFaZ0JRQVRBQUFMZ0lRQUxnSkFBZ05RQUFnSmdFZ0dRZ0VnRGdJZ0ZRZ0lnRWdRZ0dRZ1dnSWdKZ0pRZ0pnSkFBZ1BRQUFnUkFOZ0xRQU5nS0FWQUFRQVZBQUFUQUlJZ0VBSlFnVGdJZ1JBQVFnUUFBZ0tBSVFnS0FIQUFBT1FBQUFJQURBR1FBREFFQUhBRlFBSEFGQVFBRlFBU0FHQUpBR1FBSkFGQUVBSVFBRUFGQUFBTFFBQUFTZ09BTFFnT0FMZ1hBQVFnYkFBZ1BnR2dBZzhBcFFnT2dQQUFnYVFBQWdhQU5nUVFBTmdRQVdBQVFBVUFBQUtBT1FBTEFPQUFBWElBQUFISWhPQUFRQUFBWEFLQU1RQUxBTUFUQUFRQUtBQUFIZ0NRQUdnQkFLZ0ZJQUFBS1FnSkFFZ0dBQlFnSUFDZ0tBQVFnWUFBZ05nUGdBZ3pnbVFnS0FMZ0NBVUlCREFBUUFBZ1VnR2dLUWdKZ01nUEFBUWdRQUFnSkFMZ0FsTEF4UWdNZ0hnR2dPUWdHZ01BQWdRUUFBZ2JBT2dRUUFOZ1BBWEFBUUFYQUJBTkFQUUFOQVBBQUFiUUFBQVpnTkFRUWdOQVBnWUFBUWdPQUFnTGdIZ0FsT2dqUWdLQU1BQUFYUUFBQVZBS0FOUUFLQU5BVEFBUUFTQUFBS2dOUUFLZ05BQWdWUUFBZ1hnS2dNUWdLZ09nU0FBUWdUQUFnS0FPZ0FuR0F4UWdNZ0hnR2dPUWdHZ01BQWdRUUFBZ2JBT2dRUUFOZ1BBWEFBUUFYQUJBTkFQUUFOQVBBQUFiUUFBQVpnTkFRUWdOQVBnWUFBUWdPQUFnTGdIZ0FuSmdqUWdLQU1BQUFYUUFBQVZBS0FOUUFLQU5BVEFBUUFTQUFBS2dOUUFLZ05BQWdWUUFBZ1hnS2dNUWdLZ09nU0FBUWdUQUFnS0FPZ0FwaUFrUWdUZ1VBQWdqUUFBZ1dBS2dUUUFKZ1JBU2dLUUFSZ0tBWEFBUUFZQUFBVUFLSWdFQUpRZ1VnSmdWQUFRZ2RBQWdTQVNRZ1JBVEFBQWZRQUFBZ0FRQVJRQVJBUkFnQUFRQVZBQUFPZ0dJQUFneUlndEFBSUFBZ0tJQTRBQUlBQUJDUWdXQUpnYkFBUWdrQUFnVGdVZ0FHaUEySUFBaHRJQUpBQUlBQkFVSUFCQUFRQUhnTkFIZ0ZRQUlnRUFMZ0JJQVBBQ0lnQkFLUWdIZ0NnSUFBUWdPQUFnSkFNUWdKQU1BQUFTSUFBQThnQWh6QTJJQUFpZUlBS0FBSUFBQ2VnIik7DQoJdGhpcy5zaGFwZV8xLnNldFRyYW5zZm9ybSg2Ni4zLDE4KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZV8xLHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLC0xLDEzNi45LDYxLjIpOw0KDQoNCihsaWIuYzNfMSA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gZmxhc2ggY29weQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRjBGMUYxIikucygpLnAoIkFLQkJCUWdPZ1BBQWdiUUFBZ1lBT2dRUUFOZ1FBV0FBUUFUQUFBTUFOUUFMQU9BQUFXSUFBQUlJaFFBQVFBQUFYQUxBTVFBS0FNQVVBQVFBSkFBQUlnQlFBR2dDQU1nRUlBQUFKUWdKQUVnSUFDUWdKQUJnSkFBUWdaQUFnTmdQZ0FLS2dPUWdLQUxnQkFTSUJFQUFRQUFnUmdJZ0xRZ0pnTGdPQUFRZ1JBQWdKQUtnQUcrQklRZ0dnSGdCZ1JJQUFoR0lnUUFBSUFBZ0dJQVFnRklBRmdaSUFHQUFJQUFBYklBZ0FBSUFBQUpJZ2dBQUlBQUJFUUFBQU5BRUFHUUFGQUdBS0FBUUFKQUFBSWdCSUFBQUlRZ0lBQ2dKQUFRZ1BBQWdJZ0lnQUZCQklRZ0dnSEFBZ1JJQUFoR0lnUkFBSUFBZ0dJQVJnRklBRWdaSUFHQUFJQUFBYklBZ0FBSUFBQUpJZ2dBQUlBQUJFUUFBQU5BRUFHUUFGQUdBS0FBUUFKQUFBSWdCSUFBQUlRZ0lBQ2dKQUFRZ1BBQWdJZ0lnQURMQklRZ0pnSkFBZ09RQUFnUkFPZ0pRQU5nSkFhQUFJQVZnQklBQWdIUUFBZ09nR2dJUWdIZ0lnT0FBUWdQQUFnUkFJSWdFZ0pRQVNnSUFTQUFRQVRBQUFKQUpRQUpBS0FBQVNJQUFCS0lnSEFBSWdEZ1JJZ0JBQVFnSkFLZ0pBRlFnSUFFZ01BQVFnUkFBZ0pnSWdBRDRBV1FnWEFCZ0tBSFFnS0FHQUFBTlFBQUFLQUdBR1FBSEFHQUxBQVFBU0FBQUtnS1FBTGdLQUFnU0lBQWdMZ0FBVUJCUWdPZ1BBQWdiUUFBZ1lBT2dRUUFOZ1FBV0FBUUFUQUFBTUFOUUFMQU9BQUFXSUFBQUlJaFFBQVFBQUFYQUxBTVFBS0FNQVVBQVFBSkFBQUlnQlFBR2dDQU1nRUlBQUFKUWdKQUVnSkFDUWdJQUJnSkFBUWdaQUFnTmdQZ0FBZGdPUWdLQUxnQkFTSUJFQUFRQUFnUmdJZ0xRZ0pnTGdPQUFRZ1JBQWdKQUtnQWlFQkxRZ0tnRmdGZ0pJZ0JBQUlnREFSSWdIQUFJQUFpZElBTEFBSUFBQW9JZ0JBUUlBQUFKSUFCQUFRQUZnS0FLZ0ZRQUlnRUFOQUFRQVhBQUFOQU9RQUxBUEFBQWFRQUFBY2dNQVBRZ01BUGdYQUFRZ01BQWdKZ0ZnQWlMZ05RZ0lBTEFBQVlJQUFBQ1FBQUFaQUlBTFFBSkFMQVRBQVFBU0FBQUpnTVFBS2dOZ0JnWVFBQWd1Z2tBQVFnVUFBZ0lBTGdBa05CSVFnSmdKQUFnT1FBQWdSQU9nSlFBTmdKQWFBQUlBVmdCSUFBZ0hRQUFnT2dIZ0lRZ0ZnSWdQQUFRZ1BBQWdSQUlJZ0VnSlFBU2dJQVRBQVFBU0FBQUpBSlFBSkFLQUFBU0lBQUJLSWdJQUFJZ0NnUklnQkFBUWdKQUtnSUFGUWdKQUVnTkFBUWdQQUFnS2dJZ0FqZkFXUWdZQUJnS0FIUWdLQUdBQUFOUUFBQUtBR0FHUUFIQUdBTEFBUUFTQUFBTGdLUUFLZ0tBQWdTSUFBZ0xnQW5iQklRZ0pnSkFBZ09RQUFnUkFOZ0pRQU9nSkFaQUFJQVdnQklBQWdIUWdCZ09nR2dJUWdHZ0lnT0FBUWdRQUFnUkFJSWdEZ0pRQVNnSUFTQUFRQVNBQUFLQUpRQUpBS0FBQVNJQUFCS0lnSUFBSWdDZ1JJZ0JBQVFnSkFLZ0pBRlFnSUFFZ05BQVFnUUFBZ0pnSWdBbXVBV1FnWUFCZ0pBSFFnTEFHQUJBTlFBQUFLQUdBR1FBR0FHQU1BQVFBUkFBQUxnS1FBTGdLQUFnU0lBQWdMZ0FKTUJPSUFBaElRQUFnUGdJZ0hRZ0hnSWdPQUFRZ1VBQWdLQUtRZ0pBS0FBQVZJQUFBOUlnTEFBSUFBaWRJQUxBQUlnQkJCSUFCQUFRQUdnS0FLZ0ZRQUpnRUFQQUFRQW1BQWdCQW1JQUFCSmdBZ2hCT0lBQWlkSUFMQUFJQUFDZGdBazlCT0lBQWlkSUFLQUFJQUFDZGdBbHNCT0lBQWh0SUFLQUFJQUFCdGdBb2tCT0lncmh0SUFMQUFJQWNCS0lBSkFaSUFBQUFJQUpnYUlBZGhKSUFLQUFJZ3FCdGdBcGJCT0lnVmcxSWc5QUFJZ1ZBMUlnTEFBSUE4aVVJQUhBQUlBN0NVZ0FxVWdrSWdVQTBJQTFBQUlnVmcwSWdGZ1NJZ0hBU2dBbHVnK1FBQWdLQUdBQVFBRUFBQUNBRFFBQkFDQUFBRlFBQUFFZ0JBRFFnQ0FEZ0VBQVFnR0FBQUFnS2ciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg3My45LDE1LjYpOw0KDQoJLy8gZmxhc2gNCgl0aGlzLnNoYXBlXzEgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZV8xLmdyYXBoaWNzLmYoIiNGMEYxRjEiKS5zKCkucCgiQUtCQkJRZ09nUEFBZ2JRQUFnWUFPZ1FRQU5nUUFXQUFRQVRBQUFNQU5RQUxBT0FBQVdJQUFBSUloUUFBUUFBQVhBTEFNUUFLQU1BVUFBUUFKQUFBSWdCUUFHZ0NBTWdFSUFBQUpRZ0pBRWdJQUNRZ0pBQmdKQUFRZ1pBQWdOZ1BnQUtLZ09RZ0tBTGdCQVNJQkVBQVFBQWdSZ0lnTFFnSmdMZ09BQVFnUkFBZ0pBS2dBRytCSVFnR2dIZ0JnUklBQWhHSWdRQUFJQUFnR0lBUWdGSUFGZ1pJQUdBQUlBQUFiSUFnQUFJQUFBSklnZ0FBSUFBQkVRQUFBTkFFQUdRQUZBR0FLQUFRQUpBQUFJZ0JJQUFBSVFnSUFDZ0pBQVFnUEFBZ0lnSWdBRkJCSVFnR2dIQUFnUklBQWhHSWdSQUFJQUFnR0lBUmdGSUFFZ1pJQUdBQUlBQUFiSUFnQUFJQUFBSklnZ0FBSUFBQkVRQUFBTkFFQUdRQUZBR0FLQUFRQUpBQUFJZ0JJQUFBSVFnSUFDZ0pBQVFnUEFBZ0lnSWdBRExCSVFnSmdKQUFnT1FBQWdSQU9nSlFBTmdKQWFBQUlBVmdCSUFBZ0hRQUFnT2dHZ0lRZ0hnSWdPQUFRZ1BBQWdSQUlJZ0VnSlFBU2dJQVNBQVFBVEFBQUpBSlFBSkFLQUFBU0lBQUJLSWdIQUFJZ0RnUklnQkFBUWdKQUtnSkFGUWdJQUVnTUFBUWdSQUFnSmdJZ0FENEFXUWdYQUJnS0FIUWdLQUdBQUFOUUFBQUtBR0FHUUFIQUdBTEFBUUFTQUFBS2dLUUFMZ0tBQWdTSUFBZ0xnQUFVQkJRZ09nUEFBZ2JRQUFnWUFPZ1FRQU5nUUFXQUFRQVRBQUFNQU5RQUxBT0FBQVdJQUFBSUloUUFBUUFBQVhBTEFNUUFLQU1BVUFBUUFKQUFBSWdCUUFHZ0NBTWdFSUFBQUpRZ0pBRWdKQUNRZ0lBQmdKQUFRZ1pBQWdOZ1BnQUFkZ09RZ0tBTGdCQVNJQkVBQVFBQWdSZ0lnTFFnSmdMZ09BQVFnUkFBZ0pBS2dBaUVCTFFnS2dGZ0ZnSklnQkFBSWdEQVJJZ0hBQUlBQWlkSUFMQUFJQUFBb0lnQkFRSUFBQUpJQUJBQVFBRmdLQUtnRlFBSWdFQU5BQVFBWEFBQU5BT1FBTEFQQUFBYVFBQUFjZ01BUFFnTUFQZ1hBQVFnTUFBZ0pnRmdBaUxnTlFnSUFMQUFBWUlBQUFDUUFBQVpBSUFMUUFKQUxBVEFBUUFTQUFBSmdNUUFLZ05nQmdZUUFBZ3Vna0FBUWdVQUFnSUFMZ0FrTkJJUWdKZ0pBQWdPUUFBZ1JBT2dKUUFOZ0pBYUFBSUFWZ0JJQUFnSFFBQWdPZ0hnSVFnRmdJZ1BBQVFnUEFBZ1JBSUlnRWdKUUFTZ0lBVEFBUUFTQUFBSkFKUUFKQUtBQUFTSUFBQktJZ0lBQUlnQ2dSSWdCQUFRZ0pBS2dJQUZRZ0pBRWdOQUFRZ1BBQWdLZ0lnQWpmQVdRZ1lBQmdLQUhRZ0tBR0FBQU5RQUFBS0FHQUdRQUhBR0FMQUFRQVNBQUFMZ0tRQUtnS0FBZ1NJQUFnTGdBbmJCSVFnSmdKQUFnT1FBQWdSQU5nSlFBT2dKQVpBQUlBV2dCSUFBZ0hRZ0JnT2dHZ0lRZ0dnSWdPQUFRZ1FBQWdSQUlJZ0RnSlFBU2dJQVNBQVFBU0FBQUtBSlFBSkFLQUFBU0lBQUJLSWdJQUFJZ0NnUklnQkFBUWdKQUtnSkFGUWdJQUVnTkFBUWdRQUFnSmdJZ0FtdUFXUWdZQUJnSkFIUWdMQUdBQkFOUUFBQUtBR0FHUUFHQUdBTUFBUUFSQUFBTGdLUUFMZ0tBQWdTSUFBZ0xnQUpNQk9JQUFoSVFBQWdQZ0lnSFFnSGdJZ09BQVFnVUFBZ0tBS1FnSkFLQUFBVklBQUE5SWdMQUFJQUFpZElBTEFBSWdCQkJJQUJBQVFBR2dLQUtnRlFBSmdFQVBBQVFBbUFBZ0JBbUlBQUJKZ0FnaEJPSUFBaWRJQUxBQUlBQUNkZ0FrOUJPSUFBaWRJQUtBQUlBQUNkZ0Fsc0JPSUFBaHRJQUtBQUlBQUJ0Z0Fva0JPSWdyaHRJQUxBQUlBY0JLSUFKQVpJQUFBQUlBSmdhSUFkaEpJQUtBQUlncUJ0Z0FwYkJPSWdWZzFJZzlBQUlnVkExSWdMQUFJQThpVUlBSEFBSUE3Q1VnQXFVZ2tJZ1VBMElBMUFBSWdWZzBJZ0ZnU0lnSEFTZ0FsdWcrUUFBZ0tBR0FBUUFFQUFBQ0FEUUFCQUNBQUFGUUFBQUVnQkFEUWdDQURnRUFBUWdHQUFBQWdLZyIpOw0KCXRoaXMuc2hhcGVfMS5zZXRUcmFuc2Zvcm0oNzMuOSwxNS42KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZV8xLHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLC0xLDE1NS4yLDYxLjIpOw0KDQoNCihsaWIuYzJfMyA9IGZ1bmN0aW9uKCkgew0KCXRoaXMuaW5pdGlhbGl6ZSgpOw0KDQoJLy8gZmxhc2ggY29weQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjRjBGMUYxIikucygpLnAoIkFnNkJuSUFBZ0pRQUhBQkFHQUFRQUZBQUFGZ0NRQURnREFFZ0ZRQURnRkFFZ0xJQUdnUElncmh1SUFLQUFJQVlBOVFBTEFkQURBS0lBQkFBSUFMZ25JQVlnOUlBS0FBSWd3Q0FRZ0ZBUWdGQUdRZ0VBRmdGQURRZ0dBRGdIQUFRZ0hnQmdIZ0JnQURZQXVRQUFnS0FKQUFRQUhBQUFCQUtRZ0JBS2dIQUFRZ0pBQUFBZ0tnQUJ1QXBRZ09nUEFBZ2FRQUFnWkFOZ1FRQU5nUkFYQUJRQVRBQUFNQU5RQUxBT0FBQVhJQUFBSEloUUFBUUFBQVdBTEFNUUFLQU5BVEFBUUFLQUFBSGdDUUFJZ0JBS2dFSUFBQUpRZ0lBRWdKQUJRZ0hBQ2dMQUFRZ1hBQWdPZ1BnQUIzZ21RZ0tBTGdCQVRJQkZBQVFBQWdTZ0pnTVFnSmdMZ09BQlFnUkFBZ0pBS2dBaG5Bd1FnR2dIQUFnUklBQWhHSWdSQUFJQUFnSElBUmdFSUFFZ2FJQUdBQUlBQUFiSUFnQUFJQUFBS0lnZ0FBSUFBQkVRQUFBTkFFQUdRQUZBR0FLQUFRQUpBQUFJZ0NJQUFBSVFnSUFEZ0pBQVFnUEFBZ0lnSWdBam9BeUlBQWdLUUFRQUdBYUFCUUFTQUFBTGdKUUFMZ0pBQWdOUUFBZ0pnRWdGUWdEZ0VnSmdGUWdIZ0VnUWdHUWdYZ0hnSmdLUWdKZ0lBQWdRUUFBZ1JBT2dLUUFOZ0xBVUFBUUFXQUFBU0FJSWdFQUpRZ1NnSWdTQUFRZ1FBQWdLQUlRZ0tBSEFBQU9RQUFBSUFFQUZRQUNBRkFIQUZRQUhBRUFRQUdRQVNBR0FKQUdRQUpBR0FFQUhRQUVBRkFBQUtRQUFBVGdPQUxRZ09BTGdXQUFRZ2NBQWdQZ0dnQUEzQTJJQUFpZElBS0FBSUFBQ2RnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oMjYuNSw2Nik7DQoNCgkvLyBmbGFzaA0KCXRoaXMuc2hhcGVfMSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlXzEuZ3JhcGhpY3MuZigiI0YwRjFGMSIpLnMoKS5wKCJBZzZCbklBQWdKUUFIQUJBR0FBUUFGQUFBRmdDUUFEZ0RBRWdGUUFEZ0ZBRWdMSUFHZ1BJZ3JodUlBS0FBSUFZQTlRQUxBZEFEQUtJQUJBQUlBTGduSUFZZzlJQUtBQUlnd0NBUWdGQVFnRkFHUWdFQUZnRkFEUWdHQURnSEFBUWdIZ0JnSGdCZ0FEWUF1UUFBZ0tBSkFBUUFIQUFBQkFLUWdCQUtnSEFBUWdKQUFBQWdLZ0FCdUFwUWdPZ1BBQWdhUUFBZ1pBTmdRUUFOZ1JBWEFCUUFUQUFBTUFOUUFMQU9BQUFYSUFBQUhJaFFBQVFBQUFXQUxBTVFBS0FOQVRBQVFBS0FBQUhnQ1FBSWdCQUtnRUlBQUFKUWdJQUVnSkFCUWdIQUNnTEFBUWdYQUFnT2dQZ0FCM2dtUWdLQUxnQkFUSUJGQUFRQUFnU2dKZ01RZ0pnTGdPQUJRZ1JBQWdKQUtnQWhuQXdRZ0dnSEFBZ1JJQUFoR0lnUkFBSUFBZ0hJQVJnRUlBRWdhSUFHQUFJQUFBYklBZ0FBSUFBQUtJZ2dBQUlBQUJFUUFBQU5BRUFHUUFGQUdBS0FBUUFKQUFBSWdDSUFBQUlRZ0lBRGdKQUFRZ1BBQWdJZ0lnQWpvQXlJQUFnS1FBUUFHQWFBQlFBU0FBQUxnSlFBTGdKQUFnTlFBQWdKZ0VnRlFnRGdFZ0pnRlFnSGdFZ1FnR1FnWGdIZ0pnS1FnSmdJQUFnUVFBQWdSQU9nS1FBTmdMQVVBQVFBV0FBQVNBSUlnRUFKUWdTZ0lnU0FBUWdRQUFnS0FJUWdLQUhBQUFPUUFBQUlBRUFGUUFDQUZBSEFGUUFIQUVBUUFHUUFTQUdBSkFHUUFKQUdBRUFIUUFFQUZBQUFLUUFBQVRnT0FMUWdPQUxnV0FBUWdjQUFnUGdHZ0FBM0EySUFBaWRJQUtBQUlBQUNkZyIpOw0KCXRoaXMuc2hhcGVfMS5zZXRUcmFuc2Zvcm0oMjYuNSw2Nik7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuc2hhcGVfMSx0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCw0NywxMDQsMzIuNik7DQoNCg0KKGxpYi5jMl8yID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBmbGFzaCBjb3B5DQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiNGMEYxRjEiKS5zKCkucCgiQUlqQkJRZ09nUEFBZ2JRQUFnWUFPZ1FRQU5nUUFXQUFRQVVBQUFMQU5RQU1BT0FBQVdJQUFBSUloUUFBUUFBQVhBS0FNUUFLQU1BVUFBUUFKQUFBSWdCUUFIZ0NBTGdFSUFBQUpRZ0pBRWdJQUNRZ0lBQmdLQUFRZ1lBQWdPZ1BnQUlzZ09RZ0tBTGdCQVNJQkZBQVFBQWdSZ0pnTFFnSWdMZ1BBQVFnUUFBZ0tBS2dBR0pCTFFnSmdGZ0dnSklnQkFBSWdEQVJJZ0hBQUlBQWlkSUFMQUFJQUFBb0lnQkFRSUFBQUpJQUJBQVFBR2dLQUpnRlFBSmdFQU1BQVFBWUFBQU1BT1FBTUFQQUFBYVFBQUFjZ05BUFFnTUFQZ1hBQVFnTUFBZ0pnRmdBR0NnTlFnSUFMQUFBWUlBQUFDUUFBQVpBSUFMUUFLQUxBU0FBUUFUQUFBSmdNUUFKZ05BQWdZUUFBZ3VnbEFBUWdUQUFnSkFMZ0FFQkJJUWdKZ0pBQWdPUUFBZ1JBTmdKUUFPZ0pBYUFBSUFWZ0JJQUFnSFFnQmdPZ0dnSVFnR2dJZ09BQVFnUUFBZ1JBSUlnRGdKUUFTZ0lBU0FBUUFTQUFBSkFKUUFLQUtnQkFTSUFBQktJZ0hBQUlnQ2dSSWdCQUFRZ0pBS2dKQUZRZ0lBRWdOQUFRZ1FBQWdKZ0lnQUV1QVdRZ1lBQmdLQUhRZ0tBR0FCQU5RQUFBS0FHQUdRQUdBR0FNQUFRQVJBQUFMZ0tRQUxnS0FBZ1NJQUFnTGdBaXlCSlFnTGdIZ0hnTlFnRmdOQUFnU1FBQWdaQU5nUFFBTmdQQVhBQVFBWEFBQU5BUFFBT0FRQUFBWVFBQUFjZ09BUFFnTkFQZ1lBQVFnT0FBZ0xnSGdBaTBnTFFnTEFMQUJBV1FnQkFYQUxBTlFBSkFOQVRBQVFBU0FBQUtnTlFBS2dOQUFnWFFBQWdXZ0tnTFFnS2dOZ1NBQVFnVEFBZ0pBTmdBa0NCSVFnSGdIQUFnUklBQWhHSWdRQUFJQUFnR0lBUWdGSUFGZ1pJQUdBQUlBQUFiSUFnQUFJQUFBSklnZ0FBSUFBQkVRZ0JBTkFGQUdRQUZBR0FKQUFRQUtBQUFIZ0JJQUFBSVFnSEFDZ0tBQVFnUEFBZ0hnSWdBbDJCSklBQWdMUUFTQUpBU0FBUUFRQUFBSmdHUUFJZ0ZBQWdKUUFBZ0pnR2dGUWdIZ0dnUGdHUWdSZ0dnSGdFUWdIZ0VnRGdHUWdFZ0ZBQmdHUUFBZ05BS2dIUUFMZ0hBU0FBUUFUQUFBUEFHSWdEQUtRZ1JnSGdPQUFRZ09BQWdIQUVRZ0pBRkFCQUlRQUFBSEFHQUZRQUdBRkFTQUhRQVBBRkFIQUVRQUhBRkFFQUZRQURBR0FBQUhRQUFBUGdNQUlRZ0xBSWdWQUFRZ1hBQWdOZ0hnQW5vQW9JQUFoSElBS0FBSUFBQkdRZ0JBUkFJQUhRQUdBSUFQQUFRQVVBQUFLZ0tRQUpnS0FBZ1hJQUFnN0lBS0FBSUFBQnRJZ0pBQUlnQ2dQSUFBQUFRZ0xBUmdiQUFRZ21BQUFBZ29nQXBkQThRZ1NnVkFBZ2tRQUFnVkFKZ1JRQUlnU0FRZ0pRQVJnS0FWQUFRQVdBQUFSQUlJZ0VBS1FnUWdJZ1NBQVFnY0FBZ1FBU1FnUkFTQUFBZFFBQUFnQVFBU1FBUEFTQWNBQVFBVEFBQVBnRklBQUFKUWdPQUZnWEFBUWdmQUFnU2dVZ0FIdEJPSUFBaWRJQUtBQUlBQUNkZ0FDVkJPSUFBZ0dJQkNoZUlnK0FBSUFBZ0pJQk1BQUlBQUFHSWhFQmVJQkVBQUlBQUFKZ0FCd0JPSUFBaHRJQUtBQUlBQUJ0Z0FCQkJPSUFBaEpRQUJnT2dIZ0lRZ0dnSGdOQUFRZ1NBQWdJQUpRZ0lBS0FBQVNJQUFCQklnSUFBSUFBaE1RQUFnYWdhQUFRZ1JBQWdKQUtRZ0lBS0FBQVZJQUFBOUlnS0FBSUFBaHRJQUpBQUlBQkFQSUFCQUFRQUZnSUFKZ0ZRQUlnRUFLQUFRQWFBQUFHQVRJQUJBQVFBRmdKQUpnRlFBSmdGQU1BQVFBU0FBQUtBSlFBSUFLQUJBVElBQUJKZ0FCdWcrUUFBZ0tBR0FBUUFFQUFBQ0FEUUFDQUNBQUFGUUFBQUVnQ0FEUWdDQURnRUFBUWdHQUFBQWdLZyIpOw0KCXRoaXMuc2hhcGUuc2V0VHJhbnNmb3JtKDY1LjgsMzkuNik7DQoNCgkvLyBmbGFzaA0KCXRoaXMuc2hhcGVfMSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlXzEuZ3JhcGhpY3MuZigiI0YwRjFGMSIpLnMoKS5wKCJBSWpCQlFnT2dQQUFnYlFBQWdZQU9nUVFBTmdRQVdBQVFBVUFBQUxBTlFBTUFPQUFBV0lBQUFJSWhRQUFRQUFBWEFLQU1RQUtBTUFVQUFRQUpBQUFJZ0JRQUhnQ0FMZ0VJQUFBSlFnSkFFZ0lBQ1FnSUFCZ0tBQVFnWUFBZ09nUGdBSXNnT1FnS0FMZ0JBU0lCRkFBUUFBZ1JnSmdMUWdJZ0xnUEFBUWdRQUFnS0FLZ0FHSkJMUWdKZ0ZnR2dKSWdCQUFJZ0RBUklnSEFBSUFBaWRJQUxBQUlBQUFvSWdCQVFJQUFBSklBQkFBUUFHZ0tBSmdGUUFKZ0VBTUFBUUFZQUFBTUFPUUFNQVBBQUFhUUFBQWNnTkFQUWdNQVBnWEFBUWdNQUFnSmdGZ0FHQ2dOUWdJQUxBQUFZSUFBQUNRQUFBWkFJQUxRQUtBTEFTQUFRQVRBQUFKZ01RQUpnTkFBZ1lRQUFndWdsQUFRZ1RBQWdKQUxnQUVCQklRZ0pnSkFBZ09RQUFnUkFOZ0pRQU9nSkFhQUFJQVZnQklBQWdIUWdCZ09nR2dJUWdHZ0lnT0FBUWdRQUFnUkFJSWdEZ0pRQVNnSUFTQUFRQVNBQUFKQUpRQUtBS2dCQVNJQUFCS0lnSEFBSWdDZ1JJZ0JBQVFnSkFLZ0pBRlFnSUFFZ05BQVFnUUFBZ0pnSWdBRXVBV1FnWUFCZ0tBSFFnS0FHQUJBTlFBQUFLQUdBR1FBR0FHQU1BQVFBUkFBQUxnS1FBTGdLQUFnU0lBQWdMZ0FpeUJKUWdMZ0hnSGdOUWdGZ05BQWdTUUFBZ1pBTmdQUUFOZ1BBWEFBUUFYQUFBTkFQUUFPQVFBQUFZUUFBQWNnT0FQUWdOQVBnWUFBUWdPQUFnTGdIZ0FpMGdMUWdMQUxBQkFXUWdCQVhBTEFOUUFKQU5BVEFBUUFTQUFBS2dOUUFLZ05BQWdYUUFBZ1dnS2dMUWdLZ05nU0FBUWdUQUFnSkFOZ0FrQ0JJUWdIZ0hBQWdSSUFBaEdJZ1FBQUlBQWdHSUFRZ0ZJQUZnWklBR0FBSUFBQWJJQWdBQUlBQUFKSWdnQUFJQUFCRVFnQkFOQUZBR1FBRkFHQUpBQVFBS0FBQUhnQklBQUFJUWdIQUNnS0FBUWdQQUFnSGdJZ0FsMkJKSUFBZ0xRQVNBSkFTQUFRQVFBQUFKZ0dRQUlnRkFBZ0pRQUFnSmdHZ0ZRZ0hnR2dQZ0dRZ1JnR2dIZ0VRZ0hnRWdEZ0dRZ0VnRkFCZ0dRQUFnTkFLZ0hRQUxnSEFTQUFRQVRBQUFQQUdJZ0RBS1FnUmdIZ09BQVFnT0FBZ0hBRVFnSkFGQUJBSVFBQUFIQUdBRlFBR0FGQVNBSFFBUEFGQUhBRVFBSEFGQUVBRlFBREFHQUFBSFFBQUFQZ01BSVFnTEFJZ1ZBQVFnWEFBZ05nSGdBbm9Bb0lBQWhISUFLQUFJQUFCR1FnQkFSQUlBSFFBR0FJQVBBQVFBVUFBQUtnS1FBSmdLQUFnWElBQWc3SUFLQUFJQUFCdElnSkFBSWdDZ1BJQUFBQVFnTEFSZ2JBQVFnbUFBQUFnb2dBcGRBOFFnU2dWQUFna1FBQWdWQUpnUlFBSWdTQVFnSlFBUmdLQVZBQVFBV0FBQVJBSUlnRUFLUWdRZ0lnU0FBUWdjQUFnUUFTUWdSQVNBQUFkUUFBQWdBUUFTUUFQQVNBY0FBUUFUQUFBUGdGSUFBQUpRZ09BRmdYQUFRZ2ZBQWdTZ1VnQUh0Qk9JQUFpZElBS0FBSUFBQ2RnQUNWQk9JQUFnR0lCQ2hlSWcrQUFJQUFnSklCTUFBSUFBQUdJaEVCZUlCRUFBSUFBQUpnQUJ3Qk9JQUFodElBS0FBSUFBQnRnQUJCQk9JQUFoSlFBQmdPZ0hnSVFnR2dIZ05BQVFnU0FBZ0lBSlFnSUFLQUFBU0lBQUJCSWdJQUFJQUFoTVFBQWdhZ2FBQVFnUkFBZ0pBS1FnSUFLQUFBVklBQUE5SWdLQUFJQUFodElBSkFBSUFCQVBJQUJBQVFBRmdJQUpnRlFBSWdFQUtBQVFBYUFBQUdBVElBQkFBUUFGZ0pBSmdGUUFKZ0ZBTUFBUUFTQUFBS0FKUUFJQUtBQkFUSUFBQkpnQUJ1ZytRQUFnS0FHQUFRQUVBQUFDQURRQUNBQ0FBQUZRQUFBRWdDQURRZ0NBRGdFQUFRZ0dBQUFBZ0tnIik7DQoJdGhpcy5zaGFwZV8xLnNldFRyYW5zZm9ybSg2NS44LDM5LjYpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlXzEsdGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsMjMsMTQ2LjIsNjEuMik7DQoNCg0KKGxpYi5jMl8xID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBmbGFzaCBjb3B5DQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiNGMEYxRjEiKS5zKCkucCgiQUd6QmhRZ01nSkFBZ09RQUFnTEFJZ0pRQUhnSEFNZ0NRZ0ZnRGdEZ0VRZ0RnRUFBZ0ZRQUFnTEFPZ0pRZ0tnRGdGZ0hRZ0dnSkFBZ0tRQUFnU0FMZ0pRQUxnTEFTQUFRQUxBQkFHQUNJQWpBQUlBQUFHSWdYQUNRQUtBTEFBQU9RQUFBUmdMQUhRZ0xBS2dTQUFJZ0xBQVFnR0FEZ0RBRVFnREFGQUFBRVFBQUFGQUVBRFFBRUFDQUtBQUlBVEFBUUFTQUFBS0FJUUFLQUhBQUFQUUFBQVJnUEFLUWdPQUtnYkFBUWdWZ0JnTGdIZ0FHeUJKUUFBQVhBaUFBUUFzQUFBQWdjUUFBZ0tnSGdGUWdIZ0VnUEFBSWdTQUFRZ2ZBQUFBQVlnQUhDZ3FRZ0hBSUFBQU9RQUFBTUFJQUlRQUhBRUFOQUJRQU9nQkFJZ0VRQUhnSUFBZ05RQUFnT2dIZ0lRZ0lnR2dPZ0JRZ05BQWdJQUlnQUtVQlJRQUlnY0FEZ1lJQU1BQUlBQkFEUWdIQWJnTEFXZ0FFYUF4SUFBZ0xRQVJBSUFTQUFRQVJBQkFJZ0dRQUpnRkFBZ0tRQUFnSWdIZ0dRZ0hnR2dQZ0ZRZ1JnRWdIZ0VRZ0dnRWdFZ0dRZ0RnRkFBZ0pRQUFnTUFLZ0lRQUxnR0FUZ0JRQVNBQUFRQUhJZ0VBSlFnUWdHZ09nQlFnT0FBZ0lBRlFnSUFGQUFBSFFBQUFLQUdBRlFBR0FGQVNBR1FBUEFGQUhBRFFBSEFFQUVBR1FBREFGQUFBSVFBQUFQZ0xBSVFnTUFJZ1ZBQVFnV0FBZ05nSGdBQzRBcFFnT2dQQUFnYVFBQWdhQU5nUVFBTmdRQVdBQVFBVUFBQU1BT1FBTEFPQUFBWElBQUFISWhRQUFRQUFBWEFLQU1RQUxBTUFUQUFRQUtBQUFIZ0NRQUhnQkFMZ0ZJQUFBS1FnSkFFZ0lBQlFnSUFDZ0tBQVFnWUFBZ05nUGdBREJnbVFnS0FMZ0NBVUlCRkFBUUFBZ1VnSWdLUWdKZ01nUEFBUWdRQUFnSkFMZ0FpS0FwUWdOZ1BBQWdhUUFBZ2JBT2dQUUFPZ1BBWWdCUUFQQUJBTkFFSWdEQUpRZ09nRWdMZ0JRZ1VBQWdMQU9RZ0tBTUFBQVhRQUFBV0FLQU1RQUxBTkFUQUFRQVBBQUFOZ0ZJQUFBSlFnTEFGZ1JBQVFnWUFBZ09nUGdBa3NBeElBQWdMUUFSQUlBU0FBUUFSQUJBSWdHUUFKZ0ZBQWdLUUFBZ0lnSGdHUWdIZ0dnUGdGUWdSZ0VnSGdFUWdHZ0VnRWdHUWdEZ0ZBQWdKUUFBZ01BS2dJUUFMZ0dBVGdCUUFTQUFBUUFISWdFQUpRZ1FnR2dPZ0JRZ09BQWdJQUZRZ0lBRkFBQUhRQUFBS0FHQUZRQUdBRkFTQUdRQVBBRkFIQURRQUhBRUFFQUdRQURBRkFBQUlRQUFBUGdMQUlRZ01BSWdWQUFRZ1dBQWdOZ0hnQW1PQXhJQUFnTFFBUkFJQVNBQVFBUkFCQUlnR1FBSmdGQUFnS1FBQWdJZ0hnR1FnSGdHZ1BnRlFnUmdFZ0hnRVFnR2dFZ0VnR1FnRGdGQUFnSlFBQWdNQUtnSVFBTGdHQVRnQlFBU0FBQVFBSElnRUFKUWdRZ0dnT2dCUWdPQUFnSUFGUWdJQUZBQUFIUUFBQUtBR0FGUUFHQUZBU0FHUUFQQUZBSEFEUUFIQUVBRUFHUUFEQUZBQUFJUUFBQVBnTEFJUWdNQUlnVkFBUWdXQUFnTmdIZ0FuekF2UWdKZ0lBQWdPUUFBZ1JBTmdJUUFPZ0lBYUFBSUFWZ0JJQUFnSVFBQWdQZ0hnSlFnR2dIZ09nQlFnUUFBZ1FBSklnRWdKUUFTZ0pBU0FBUUFTQUFBS0FLUUFKQUtBQUFVSUFBQklJZ0lBQUlnQ2dTSWdCQUFRZ0pBTGdKQUZRZ0lBRWdOQUFRZ1FBQWdKZ0pnQW5HQUFRZ1hBQWdLQUdRZ0tBRkFBQU9RQUFBS0FHQUdRQUdBR0FNQUFRQVNBQUFLZ0xRQUxnS0FBZ1NJQUFnSWdBcVpBa1FnU2dWQUFnaVFBQWdYQUpnU1FBSWdSQVJnS1FBUWdKQVZBQVFBV0FBQVNBSUlnRkFKUWdRZ0hnU2dCUWdjQUJnUUFSUWdSQVRBQUFmUUFBQWVBUUFSUUFQQVRBY2dCUUFUQUFBUWdFSUFBQUpRZ1BBRmdXQUFRZ2dBQWdTZ1VnQUp4QTJJQUFoSFFBQWdRZ0hnSVFnSGdIZ1BnQlFnVUFBZ0pBTFFnSkFLQUFBV0lBQUE4SWdMQUFJQUFodElBSkFBSUFDQVBJQUJBQVFBS2dSQWNnQlFBbUFBQUFBcElBQUJIZ0FHR0EySUFBaHRJQUtBQUlBQUJ0Z0FBZUEySUFBaVVJQXBBQVFBa0FBQVRBVFFBU0FTQUFBbFFBQUFqZ1RBVVFnVUFUZ25BQWdBQXBBdElBWkFBUUJEQUFBQWhCUUFBZ2dnUWdSUWdSZ1FnZkFBSWdjQUFnQWpBQTJJQUFodElBS0FBSUFBQnRnQW9qQTJJQUFpZUlBS0FBSUFBQ2VnQUdFaFhRQUFnS0FIQUFRQURBQUFDQURRQUNBREFBQUVRQUFBRmdDQURRZ0NBQ2dEQUFRZ0hBQUFBZ0tnQWpDaFhRQUFnS0FIQUFRQURBQUFDQURRQUNBREFBQUVRQUFBRmdDQURRZ0NBQ2dEQUFRZ0hBQUFBZ0tnIik7DQoJdGhpcy5zaGFwZS5zZXRUcmFuc2Zvcm0oNzEuOCwxOCk7DQoNCgkvLyBmbGFzaA0KCXRoaXMuc2hhcGVfMSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlXzEuZ3JhcGhpY3MuZigiI0YwRjFGMSIpLnMoKS5wKCJBR3pCaFFnTWdKQUFnT1FBQWdMQUlnSlFBSGdIQU1nQ1FnRmdEZ0RnRVFnRGdFQUFnRlFBQWdMQU9nSlFnS2dEZ0ZnSFFnR2dKQUFnS1FBQWdTQUxnSlFBTGdMQVNBQVFBTEFCQUdBQ0lBakFBSUFBQUdJZ1hBQ1FBS0FMQUFBT1FBQUFSZ0xBSFFnTEFLZ1NBQUlnTEFBUWdHQURnREFFUWdEQUZBQUFFUUFBQUZBRUFEUUFFQUNBS0FBSUFUQUFRQVNBQUFLQUlRQUtBSEFBQVBRQUFBUmdQQUtRZ09BS2diQUFRZ1ZnQmdMZ0hnQUd5QkpRQUFBWEFpQUFRQXNBQUFBZ2NRQUFnS2dIZ0ZRZ0hnRWdQQUFJZ1NBQVFnZkFBQUFBWWdBSENncVFnSEFJQUFBT1FBQUFNQUlBSVFBSEFFQU5BQlFBT2dCQUlnRVFBSGdJQUFnTlFBQWdPZ0hnSVFnSWdHZ09nQlFnTkFBZ0lBSWdBS1VCUlFBSWdjQURnWUlBTUFBSUFCQURRZ0hBYmdMQVdnQUVhQXhJQUFnTFFBUkFJQVNBQVFBUkFCQUlnR1FBSmdGQUFnS1FBQWdJZ0hnR1FnSGdHZ1BnRlFnUmdFZ0hnRVFnR2dFZ0VnR1FnRGdGQUFnSlFBQWdNQUtnSVFBTGdHQVRnQlFBU0FBQVFBSElnRUFKUWdRZ0dnT2dCUWdPQUFnSUFGUWdJQUZBQUFIUUFBQUtBR0FGUUFHQUZBU0FHUUFQQUZBSEFEUUFIQUVBRUFHUUFEQUZBQUFJUUFBQVBnTEFJUWdNQUlnVkFBUWdXQUFnTmdIZ0FDNEFwUWdPZ1BBQWdhUUFBZ2FBTmdRUUFOZ1FBV0FBUUFVQUFBTUFPUUFMQU9BQUFYSUFBQUhJaFFBQVFBQUFYQUtBTVFBTEFNQVRBQVFBS0FBQUhnQ1FBSGdCQUxnRklBQUFLUWdKQUVnSUFCUWdJQUNnS0FBUWdZQUFnTmdQZ0FEQmdtUWdLQUxnQ0FVSUJGQUFRQUFnVWdJZ0tRZ0pnTWdQQUFRZ1FBQWdKQUxnQWlLQXBRZ05nUEFBZ2FRQUFnYkFPZ1BRQU9nUEFZZ0JRQVBBQkFOQUVJZ0RBSlFnT2dFZ0xnQlFnVUFBZ0xBT1FnS0FNQUFBWFFBQUFXQUtBTVFBTEFOQVRBQVFBUEFBQU5nRklBQUFKUWdMQUZnUkFBUWdZQUFnT2dQZ0Frc0F4SUFBZ0xRQVJBSUFTQUFRQVJBQkFJZ0dRQUpnRkFBZ0tRQUFnSWdIZ0dRZ0hnR2dQZ0ZRZ1JnRWdIZ0VRZ0dnRWdFZ0dRZ0RnRkFBZ0pRQUFnTUFLZ0lRQUxnR0FUZ0JRQVNBQUFRQUhJZ0VBSlFnUWdHZ09nQlFnT0FBZ0lBRlFnSUFGQUFBSFFBQUFLQUdBRlFBR0FGQVNBR1FBUEFGQUhBRFFBSEFFQUVBR1FBREFGQUFBSVFBQUFQZ0xBSVFnTUFJZ1ZBQVFnV0FBZ05nSGdBbU9BeElBQWdMUUFSQUlBU0FBUUFSQUJBSWdHUUFKZ0ZBQWdLUUFBZ0lnSGdHUWdIZ0dnUGdGUWdSZ0VnSGdFUWdHZ0VnRWdHUWdEZ0ZBQWdKUUFBZ01BS2dJUUFMZ0dBVGdCUUFTQUFBUUFISWdFQUpRZ1FnR2dPZ0JRZ09BQWdJQUZRZ0lBRkFBQUhRQUFBS0FHQUZRQUdBRkFTQUdRQVBBRkFIQURRQUhBRUFFQUdRQURBRkFBQUlRQUFBUGdMQUlRZ01BSWdWQUFRZ1dBQWdOZ0hnQW56QXZRZ0pnSUFBZ09RQUFnUkFOZ0lRQU9nSUFhQUFJQVZnQklBQWdJUUFBZ1BnSGdKUWdHZ0hnT2dCUWdRQUFnUUFKSWdFZ0pRQVNnSkFTQUFRQVNBQUFLQUtRQUpBS0FBQVVJQUFCSUlnSUFBSWdDZ1NJZ0JBQVFnSkFMZ0pBRlFnSUFFZ05BQVFnUUFBZ0pnSmdBbkdBQVFnWEFBZ0tBR1FnS0FGQUFBT1FBQUFLQUdBR1FBR0FHQU1BQVFBU0FBQUtnTFFBTGdLQUFnU0lBQWdJZ0FxWkFrUWdTZ1ZBQWdpUUFBZ1hBSmdTUUFJZ1JBUmdLUUFRZ0pBVkFBUUFXQUFBU0FJSWdGQUpRZ1FnSGdTZ0JRZ2NBQmdRQVJRZ1JBVEFBQWZRQUFBZUFRQVJRQVBBVEFjZ0JRQVRBQUFRZ0VJQUFBSlFnUEFGZ1dBQVFnZ0FBZ1NnVWdBSnhBMklBQWhIUUFBZ1FnSGdJUWdIZ0hnUGdCUWdVQUFnSkFMUWdKQUtBQUFXSUFBQThJZ0xBQUlBQWh0SUFKQUFJQUNBUElBQkFBUUFLZ1JBY2dCUUFtQUFBQUFwSUFBQkhnQUdHQTJJQUFodElBS0FBSUFBQnRnQUFlQTJJQUFpVUlBcEFBUUFrQUFBVEFUUUFTQVNBQUFsUUFBQWpnVEFVUWdVQVRnbkFBZ0FBcEF0SUFaQUFRQkRBQUFBaEJRQUFnZ2dRZ1JRZ1JnUWdmQUFJZ2NBQWdBakFBMklBQWh0SUFLQUFJQUFCdGdBb2pBMklBQWllSUFLQUFJQUFDZWdBR0VoWFFBQWdLQUhBQVFBREFBQUNBRFFBQ0FEQUFBRVFBQUFGZ0NBRFFnQ0FDZ0RBQVFnSEFBQUFnS2dBakNoWFFBQWdLQUhBQVFBREFBQUNBRFFBQ0FEQUFBRVFBQUFGZ0NBRFFnQ0FDZ0RBQVFnSEFBQUFnS2ciKTsNCgl0aGlzLnNoYXBlXzEuc2V0VHJhbnNmb3JtKDcxLjgsMTgpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlXzEsdGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsLTEsMTQ0LjUsNjEuMik7DQoNCg0KKGxpYi5jMV8yID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyB2ZWN0b3IgY29weSAyDQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiNGMEYxRjEiKS5zKCkucCgiQUQ1QkdRQUFnS0FJQUFRQUlBQUFBQUtRQUFBS2dJQUFRZ0lBQUFBZ0tnQUF3QkpJQUFnTFFBUkFKQVNBQVFBUkFBQUlnR1FBSmdGQUFnSlFBQWdKZ0hnRlFnSGdHZ1BnR1FnUmdHZ0hnRVFnR2dFZ0VnR1FnRGdGQUFnR1FBQWdOQUtnSFFBTGdIQVRBQVFBU0FBQVFBR0lnRUFLUWdRZ0hnT0FBUWdPQUFnSUFFUWdJQUZBQUFJUUFBQUhBR0FGUUFHQUZBU0FIUUFQQUZBSEFFUUFIQUZBRUFGUUFEQUdBQUFIUUFBQVBnTEFJUWdNQUlnVkFBUWdXQUFnTmdIZ0Fnd0JKSUFBZ0xRQVJBSkFTQUFRQVBBQUFJZ0dRQUpnRkFBZ0pRQUFnSmdIZ0ZRZ0hnR2dOZ0dRZ1JnR2dIZ0VRZ0dnRWdFZ0dRZ0RnRkFBZ0dRQUFnTkFLZ0hRQUxnSEFUQUFRQVFBQUFRQUdJZ0VBS1FnUWdIZ01BQVFnT0FBZ0lBRVFnSUFGQUFBSVFBQUFIQUdBRlFBR0FGQVNBSFFBTkFGQUhBRVFBSEFGQUVBRlFBREFHQUFBSFFBQUFQZ0xBSVFnTUFJZ1RBQVFnV0FBZ05nSGdBaVFCSlFnTWdIZ0dnTlFnR2dOQUFnU1FBQWdaQU9nUFFBTmdQQVhBQVFBWEFBQU5BUFFBTkFRQUFBWVFBQUFjZ05BUFFnTkFQZ1lBQVFnT0FBZ0xnSGdBaVRnTFFnS0FMQUFBV1FBQUFYQUtBTlFBS0FOQVRBQVFBU0FBQUtnTlFBS2dOQUFnWFFBQWdXZ0tnTFFnS2dOZ1NBQVFnVEFBZ0tBTmdBRExCT0lBQWlkSUFMQUFJQUFDZGdBQ2NCT0lBQWh0SUFLQUFJQUFCdGdBa0lCT0lBQWlVSUJTQUFJQUFBS0loSUFBSUFBQStJQkVBQUlBQUFKSWhFQUFJQUFCRGdBQ2FnK1FBQWdLQUhBQVFBREFBQUNBRFFBQ0FDQUFBRlFBQUFFZ0NBRFFnQ0FEZ0RBQVFnSEFBQUFnS2ciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSgzMC43LDM5LjYpOw0KDQoJLy8gdmVjdG9yIGNvcHkNCgl0aGlzLnNoYXBlXzEgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZV8xLmdyYXBoaWNzLmYoIiNGMEYxRjEiKS5zKCkucCgiQUQ1QkdRQUFnS0FJQUFRQUlBQUFBQUtRQUFBS2dJQUFRZ0lBQUFBZ0tnQUF3QkpJQUFnTFFBUkFKQVNBQVFBUkFBQUlnR1FBSmdGQUFnSlFBQWdKZ0hnRlFnSGdHZ1BnR1FnUmdHZ0hnRVFnR2dFZ0VnR1FnRGdGQUFnR1FBQWdOQUtnSFFBTGdIQVRBQVFBU0FBQVFBR0lnRUFLUWdRZ0hnT0FBUWdPQUFnSUFFUWdJQUZBQUFJUUFBQUhBR0FGUUFHQUZBU0FIUUFQQUZBSEFFUUFIQUZBRUFGUUFEQUdBQUFIUUFBQVBnTEFJUWdNQUlnVkFBUWdXQUFnTmdIZ0Fnd0JKSUFBZ0xRQVJBSkFTQUFRQVBBQUFJZ0dRQUpnRkFBZ0pRQUFnSmdIZ0ZRZ0hnR2dOZ0dRZ1JnR2dIZ0VRZ0dnRWdFZ0dRZ0RnRkFBZ0dRQUFnTkFLZ0hRQUxnSEFUQUFRQVFBQUFRQUdJZ0VBS1FnUWdIZ01BQVFnT0FBZ0lBRVFnSUFGQUFBSVFBQUFIQUdBRlFBR0FGQVNBSFFBTkFGQUhBRVFBSEFGQUVBRlFBREFHQUFBSFFBQUFQZ0xBSVFnTUFJZ1RBQVFnV0FBZ05nSGdBaVFCSlFnTWdIZ0dnTlFnR2dOQUFnU1FBQWdaQU9nUFFBTmdQQVhBQVFBWEFBQU5BUFFBTkFRQUFBWVFBQUFjZ05BUFFnTkFQZ1lBQVFnT0FBZ0xnSGdBaVRnTFFnS0FMQUFBV1FBQUFYQUtBTlFBS0FOQVRBQVFBU0FBQUtnTlFBS2dOQUFnWFFBQWdXZ0tnTFFnS2dOZ1NBQVFnVEFBZ0tBTmdBRExCT0lBQWlkSUFMQUFJQUFDZGdBQ2NCT0lBQWh0SUFLQUFJQUFCdGdBa0lCT0lBQWlVSUJTQUFJQUFBS0loSUFBSUFBQStJQkVBQUlBQUFKSWhFQUFJQUFCRGdBQ2FnK1FBQWdLQUhBQVFBREFBQUNBRFFBQ0FDQUFBRlFBQUFFZ0NBRFFnQ0FEZ0RBQVFnSEFBQUFnS2ciKTsNCgl0aGlzLnNoYXBlXzEuc2V0VHJhbnNmb3JtKDMwLjcsMzkuNik7DQoNCgl0aGlzLmFkZENoaWxkKHRoaXMuc2hhcGVfMSx0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwyMywxMDQsMzIuNik7DQoNCg0KKGxpYi5jMV8xID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyB2ZWN0b3IgY29weSAyDQoJdGhpcy5zaGFwZSA9IG5ldyBjanMuU2hhcGUoKTsNCgl0aGlzLnNoYXBlLmdyYXBoaWNzLmYoIiNGMEYxRjEiKS5zKCkucCgiQUdBQm5JQUFnSlFBR0FDQUdnQlFBR0FCQUVnRFFBRWdEQURnRlFBRGdFQUVnTUlBR2dPSWdyaHVJQUxBQUlBWEE4UUFMQWVBREFKSUFCQUFJQU9nbklBWGc4SUFMQUFJZ3lDQVFnR0FRZ0VBRlFnRkFHZ0ZBQ1FnR0FEZ0hBQVFnR0FBZ0hnQ2dBRXVBelFnSmdGZ0dnSUlnQkFBSWdEQVJJZ0dBQUlBQWllSUFLQUFJQUFBb0lBQUFRSWdCQUpJQUJBQVFBR2dLQUpnRlFBSmdFQU5BQVFBWEFBQU1BUFFBTUFQQUFBYlFBQUFhZ01BUFFnTkFQZ1dBQlFnTUFBZ0tnR2dBRW9nbFFnSkFMQUFBYUlBQUFCUUFBQVlBSkFNUUFKQUtBVEFCUUFTQUFBSmdOUUFKZ05BQWdXUUFBZ3dna0FBUWdVQUFnSUFMZ0FCbkFxUWdNZ09BQWdiUUFBZ2NBTWdQUUFNZ1BBWEFBUUFNQUFBSkFFUUFKQUZBSEFLSUFCQUFJZ0JnWklBQWdvSUFLQUFJQUFDZUlnSEFBSWdDZ1JJZ0JBQVFnTkFTZ1lBQlFnWEFBZ01nUGdBQnZnalFnSkFOQUFBV1FBQUF3QWtBQVFBVGdCQUpnS1FBSmdNQUFnWUlBQWdCUUFBZ1pnSmdNUWdJZ0xnVUFBUWdTQUFnSkFOZ0FnSkFwUWdPZ1BBQWdhUUFBZ1pBT2dRUUFMZ1FBV0FBUUFVQUFBTEFOUUFMQU9BQUFZSUFBQUdJaE9BQVFBQUFYQUxBTVFBSUFOQVVBQVFBSmdCQUlnQlFBSGdCQUxnRklBQUFKUWdKQUVnSUFDUWdJQUJnS0FCUWdZZ0JnTWdQZ0FBQWdtUWdLQUxnQkFVSUJEQUFRQUFnVGdKZ0xRZ0lnTGdQQUFRZ1FBQWdJQUtnQWhQQXhRZ0hnSUFBZ1JJQUFoR0lnUkFBSUFBZ0dJQVJnRklBRmdaSUFGQUFJQUFBYklBaEFBSUFBQUpJZ2hBQUlBQUJGUUFBQU1BRkFHUUFFQUhBS0FBUUFKZ0JBSWdCSUFBQUlRZ0lBQ2dKQUJRZ1BnQmdIZ0hnQWtGQXdRZ0pnSUFBZ1BRQUFnUUFPZ0pRQU5nSEFhZ0JJQVZnQklBQWdIUUFBZ1FnR2dJUWdHZ0lnUEFBUWdQQUFnUkFKSWdFZ0pRQVRnSkFTQUFRQVNBQUFKQUtRQUpBSkFBQVVJQUFCSklnSEFBSWdEZ1NJZ0JBQVFnSUFLZ0pBRlFnSkFFZ01BQlFnUUFBZ0tnSmdBalhBQVFnWUFBZ0tBR1FnS0FHQUFBTlFBQUFMQUhBRlFBR0FIQU1BQVFBUkFBQUxnTFFBS2dLQUFnU0lBQWdKZ0FuTUFrUWdUZ1ZBQWdpUUFBZ1dBSmdTUUFKZ1JBUWdLUUFRZ0pBV0FBUUFXQUFBUkFJSWdFQUpRZ1FnSWdUQUFRZ2NBQWdRQVNRZ1FBU0FBQWZRQUFBZkFQQVJRQVBBU0FkQUFRQVRBQUFQZ0ZJQUFBSlFnT0FHZ1hBQVFnZkFBZ1NnVmdBaVJBM0lBQWhsSWdVQUFJQUFnR0lBVWdFSUFBZ0pRQUFnVUFJZ0pRQUlnS0FSQUFRQUpBQUFKQURJZ0NBSlFnSWdEZ0pBQVFnTEFBZ0ZBSFFnRkFIQUFBUElBQUFMSUFhQUFJQUFBSklnYUFBSUFBQmxnQWxYQTNJQUFodUlBSkFBSUFCQVVJQUJBQVFBSGdNQUhnRlFBSWdGQUxBQUlBUEFCSWdCQUtRZ0hnQmdJQUFRZ09nQmdKQU1RZ0pBTkFBQVNJQUFBOGciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg1MS4zLDE4KTsNCg0KCS8vIHZlY3RvciBjb3B5DQoJdGhpcy5zaGFwZV8xID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGVfMS5ncmFwaGljcy5mKCIjRjBGMUYxIikucygpLnAoIkFHQUJuSUFBZ0pRQUdBQ0FHZ0JRQUdBQkFFZ0RRQUVnREFEZ0ZRQURnRUFFZ01JQUdnT0lncmh1SUFMQUFJQVhBOFFBTEFlQURBSklBQkFBSUFPZ25JQVhnOElBTEFBSWd5Q0FRZ0dBUWdFQUZRZ0ZBR2dGQUNRZ0dBRGdIQUFRZ0dBQWdIZ0NnQUV1QXpRZ0pnRmdHZ0lJZ0JBQUlnREFSSWdHQUFJQUFpZUlBS0FBSUFBQW9JQUFBUUlnQkFKSUFCQUFRQUdnS0FKZ0ZRQUpnRUFOQUFRQVhBQUFNQVBRQU1BUEFBQWJRQUFBYWdNQVBRZ05BUGdXQUJRZ01BQWdLZ0dnQUVvZ2xRZ0pBTEFBQWFJQUFBQlFBQUFZQUpBTVFBSkFLQVRBQlFBU0FBQUpnTlFBSmdOQUFnV1FBQWd3Z2tBQVFnVUFBZ0lBTGdBQm5BcVFnTWdPQUFnYlFBQWdjQU1nUFFBTWdQQVhBQVFBTUFBQUpBRVFBSkFGQUhBS0lBQkFBSWdCZ1pJQUFnb0lBS0FBSUFBQ2VJZ0hBQUlnQ2dSSWdCQUFRZ05BU2dZQUJRZ1hBQWdNZ1BnQUJ2Z2pRZ0pBTkFBQVdRQUFBd0FrQUFRQVRnQkFKZ0tRQUpnTUFBZ1lJQUFnQlFBQWdaZ0pnTVFnSWdMZ1VBQVFnU0FBZ0pBTmdBZ0pBcFFnT2dQQUFnYVFBQWdaQU9nUVFBTGdRQVdBQVFBVUFBQUxBTlFBTEFPQUFBWUlBQUFHSWhPQUFRQUFBWEFMQU1RQUlBTkFVQUFRQUpnQkFJZ0JRQUhnQkFMZ0ZJQUFBSlFnSkFFZ0lBQ1FnSUFCZ0tBQlFnWWdCZ01nUGdBQUFnbVFnS0FMZ0JBVUlCREFBUUFBZ1RnSmdMUWdJZ0xnUEFBUWdRQUFnSUFLZ0FoUEF4UWdIZ0lBQWdSSUFBaEdJZ1JBQUlBQWdHSUFSZ0ZJQUZnWklBRkFBSUFBQWJJQWhBQUlBQUFKSWdoQUFJQUFCRlFBQUFNQUZBR1FBRUFIQUtBQVFBSmdCQUlnQklBQUFJUWdJQUNnSkFCUWdQZ0JnSGdIZ0FrRkF3UWdKZ0lBQWdQUUFBZ1FBT2dKUUFOZ0hBYWdCSUFWZ0JJQUFnSFFBQWdRZ0dnSVFnR2dJZ1BBQVFnUEFBZ1JBSklnRWdKUUFUZ0pBU0FBUUFTQUFBSkFLUUFKQUpBQUFVSUFBQkpJZ0hBQUlnRGdTSWdCQUFRZ0lBS2dKQUZRZ0pBRWdNQUJRZ1FBQWdLZ0pnQWpYQUFRZ1lBQWdLQUdRZ0tBR0FBQU5RQUFBTEFIQUZRQUdBSEFNQUFRQVJBQUFMZ0xRQUtnS0FBZ1NJQUFnSmdBbk1Ba1FnVGdWQUFnaVFBQWdXQUpnU1FBSmdSQVFnS1FBUWdKQVdBQVFBV0FBQVJBSUlnRUFKUWdRZ0lnVEFBUWdjQUFnUUFTUWdRQVNBQUFmUUFBQWZBUEFSUUFQQVNBZEFBUUFUQUFBUGdGSUFBQUpRZ09BR2dYQUFRZ2ZBQWdTZ1ZnQWlSQTNJQUFobElnVUFBSUFBZ0dJQVVnRUlBQWdKUUFBZ1VBSWdKUUFJZ0tBUkFBUUFKQUFBSkFESWdDQUpRZ0lnRGdKQUFRZ0xBQWdGQUhRZ0ZBSEFBQVBJQUFBTElBYUFBSUFBQUpJZ2FBQUlBQUJsZ0FsWEEzSUFBaHVJQUpBQUlBQkFVSUFCQUFRQUhnTUFIZ0ZRQUlnRkFMQUFJQVBBQklnQkFLUWdIZ0JnSUFBUWdPZ0JnSkFNUWdKQU5BQUFTSUFBQThnIik7DQoJdGhpcy5zaGFwZV8xLnNldFRyYW5zZm9ybSg1MS4zLDE4KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZV8xLHRoaXMuc2hhcGUpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLC0xLDE1NCw2My45KTsNCg0KDQoobGliLmJsdWUgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiIzQyQTZGNiIpLnMoKS5wKCJFZ08xQXU0TUFBQWhkdklkcUFBTUFBQUJkdmciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSg5NSwzMDApOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDE5MCw2MDApOw0KDQoNCihsaWIuYmcgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLnNoYXBlID0gbmV3IGNqcy5TaGFwZSgpOw0KCXRoaXMuc2hhcGUuZ3JhcGhpY3MuZigiI0ZDRkNGQyIpLnMoKS5wKCJBM2JUaU1BQUFnbkRNQXUyQUFBTUFBQUFuRGciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSgxNTAsMzAwLDEsMi40KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5zaGFwZSk7DQp9KS5wcm90b3R5cGUgPSBwID0gbmV3IGNqcy5Db250YWluZXIoKTsNCnAubm9taW5hbEJvdW5kcyA9IG5ldyBjanMuUmVjdGFuZ2xlKDAsMCwzMDAsNjAwKTsNCg0KDQoobGliLmFzdXMgPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLmluc3RhbmNlID0gbmV3IGxpYi5Gb3NzaWxfbG9nb18zMDB4NjAwKCk7DQoJdGhpcy5pbnN0YW5jZS5zZXRUcmFuc2Zvcm0oLTEsLTgpOw0KDQoJdGhpcy5hZGRDaGlsZCh0aGlzLmluc3RhbmNlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTEsLTgsNzksMjYpOw0KDQoNCihsaWIud2F0Y2gzID0gZnVuY3Rpb24obW9kZSxzdGFydFBvc2l0aW9uLGxvb3ApIHsNCgl0aGlzLmluaXRpYWxpemUobW9kZSxzdGFydFBvc2l0aW9uLGxvb3Ase30pOw0KDQoJLy8gdGltZWxpbmUgZnVuY3Rpb25zOg0KCXRoaXMuZnJhbWVfMCA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLmdvdG9BbmRTdG9wKCk7DQoJfQ0KCXRoaXMuZnJhbWVfNTggPSBmdW5jdGlvbigpIHsNCgkJdGhpcy5nb3RvQW5kU3RvcCgpOw0KCX0NCg0KCS8vIGFjdGlvbnMgdHdlZW46DQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMpLmNhbGwodGhpcy5mcmFtZV8wKS53YWl0KDU4KS5jYWxsKHRoaXMuZnJhbWVfNTgpLndhaXQoMSkpOw0KDQoJLy8gTGF5ZXIgMiBjb3B5IDMgKG1hc2spDQoJdmFyIG1hc2sgPSBuZXcgY2pzLlNoYXBlKCk7DQoJbWFzay5fb2ZmID0gdHJ1ZTsNCgltYXNrLmdyYXBoaWNzLnAoIkFKd0p3UWpRZ2doN2lEUWhIaEpncGhiUWdwaGNnRWhlUWdNakFDTGg5UUNNaUREVUFXUURhQVhDV0NvUUNTQ2tnSkRKUWdDQW9nUEF4SWwzRXJJZ2RBQlFnakFBZ29nR2ciKTsNCgltYXNrLnNldFRyYW5zZm9ybSgxMTIuMSw2My4xKTsNCg0KCS8vIExheWVyIDUgY29weQ0KCXRoaXMuaW5zdGFuY2UgPSBuZXcgbGliLm1jX2xpZ2h0KCk7DQoJdGhpcy5pbnN0YW5jZS5zZXRUcmFuc2Zvcm0oNzk3LjQsMTYyLDIuODYyLDIuODYyLDgsMCwwLDEzNi4xLDgzLjgpOw0KDQoJdGhpcy5pbnN0YW5jZS5tYXNrID0gbWFzazsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlKS53YWl0KDQpLnRvKHtyZWdYOjUzLjgscmVnWTo4My43LHg6NTc4LjMseToxNDEuMyxhbHBoYTowLjg5OX0sMCkud2FpdCgxKS50byh7eDo1ODcuMSx5OjE0OSxhbHBoYTowLjgzNn0sMCkud2FpdCgxKS50byh7eDo1OTMuOCx5OjE1NC45LGFscGhhOjAuNzg4fSwwKS53YWl0KDEpLnRvKHt4OjU5OS40LHk6MTU5LjgsYWxwaGE6MC43NDh9LDApLndhaXQoMSkudG8oe3g6NjA0LjEseToxNjMuOSxhbHBoYTowLjcxNH0sMCkud2FpdCgxKS50byh7eDo2MDguMyx5OjE2Ny42LGFscGhhOjAuNjg1fSwwKS53YWl0KDEpLnRvKHt4OjYxMix5OjE3MC44LGFscGhhOjAuNjU4fSwwKS53YWl0KDEpLnRvKHt4OjYxNS4zLHk6MTczLjcsYWxwaGE6MC42MzR9LDApLndhaXQoMSkudG8oe3g6NjE4LjMseToxNzYuNCxhbHBoYTowLjYxM30sMCkud2FpdCgxKS50byh7eDo2MjEuMSx5OjE3OC44LGFscGhhOjAuNTkzfSwwKS53YWl0KDEpLnRvKHt4OjYyMy43LHk6MTgxLGFscGhhOjAuNTc0fSwwKS53YWl0KDEpLnRvKHt4OjYyNix5OjE4My4xLGFscGhhOjAuNTU4fSwwKS53YWl0KDEpLnRvKHt4OjYyOC4yLHk6MTg1LGFscGhhOjAuNTQyfSwwKS53YWl0KDEpLnRvKHt4OjYzMC4zLHk6MTg2LjgsYWxwaGE6MC41Mjd9LDApLndhaXQoMSkudG8oe3g6NjMyLjIseToxODguNSxhbHBoYTowLjUxNH0sMCkud2FpdCgxKS50byh7eDo2MzQseToxOTAuMSxhbHBoYTowLjUwMX0sMCkud2FpdCgxKS50byh7eDo2MzUuNix5OjE5MS41LGFscGhhOjAuNDg5fSwwKS53YWl0KDEpLnRvKHt4OjYzNy4yLHk6MTkyLjksYWxwaGE6MC40Nzh9LDApLndhaXQoMSkudG8oe3g6NjM4LjcseToxOTQuMixhbHBoYTowLjQ2N30sMCkud2FpdCgxKS50byh7eDo2NDAuMSx5OjE5NS40LGFscGhhOjAuNDU3fSwwKS53YWl0KDEpLnRvKHt4OjY0MS40LHk6MTk2LjUsYWxwaGE6MC40NDh9LDApLndhaXQoMSkudG8oe3g6NjQyLjYseToxOTcuNixhbHBoYTowLjQzOX0sMCkud2FpdCgxKS50byh7eDo2NDMuOCx5OjE5OC42LGFscGhhOjAuNDMxfSwwKS53YWl0KDEpLnRvKHt4OjY0NC44LHk6MTk5LjYsYWxwaGE6MC40MjN9LDApLndhaXQoMSkudG8oe3g6NjQ1LjkseToyMDAuNSxhbHBoYTowLjQxNn0sMCkud2FpdCgxKS50byh7eDo2NDYuOCx5OjIwMS4zLGFscGhhOjAuNDA5fSwwKS53YWl0KDEpLnRvKHt4OjY0Ny44LHk6MjAyLjEsYWxwaGE6MC40MDJ9LDApLndhaXQoMSkudG8oe3g6NjQ4LjYseToyMDIuOSxhbHBoYTowLjM5Nn0sMCkud2FpdCgxKS50byh7eDo2NDkuNCx5OjIwMy42LGFscGhhOjAuMzl9LDApLndhaXQoMSkudG8oe3g6NjUwLjIseToyMDQuMyxhbHBoYTowLjM4NX0sMCkud2FpdCgxKS50byh7eDo2NTAuOSx5OjIwNC45LGFscGhhOjAuMzh9LDApLndhaXQoMSkudG8oe3g6NjUxLjYseToyMDUuNSxhbHBoYTowLjM3NX0sMCkud2FpdCgxKS50byh7eDo2NTIuMix5OjIwNixhbHBoYTowLjM3fSwwKS53YWl0KDEpLnRvKHt4OjY1Mi44LHk6MjA2LjYsYWxwaGE6MC4zNjZ9LDApLndhaXQoMSkudG8oe3g6NjUzLjQseToyMDcsYWxwaGE6MC4zNjJ9LDApLndhaXQoMSkudG8oe3g6NjUzLjkseToyMDcuNSxhbHBoYTowLjM1OH0sMCkud2FpdCgxKS50byh7eDo2NTQuNCx5OjIwNy45LGFscGhhOjAuMzU1fSwwKS53YWl0KDEpLnRvKHt4OjY1NC44LHk6MjA4LjMsYWxwaGE6MC4zNTJ9LDApLndhaXQoMSkudG8oe3g6NjU1LjIseToyMDguNyxhbHBoYTowLjM0OX0sMCkud2FpdCgxKS50byh7eDo2NTUuNix5OjIwOSxhbHBoYTowLjM0Nn0sMCkud2FpdCgxKS50byh7eDo2NTUuOSx5OjIwOS4zLGFscGhhOjAuMzQ0fSwwKS53YWl0KDEpLnRvKHt4OjY1Ni4zLHk6MjA5LjYsYWxwaGE6MC4zNDF9LDApLndhaXQoMSkudG8oe3g6NjU2LjUseToyMDkuOCxhbHBoYTowLjMzOX0sMCkud2FpdCgxKS50byh7eDo2NTYuOCx5OjIxMC4xLGFscGhhOjAuMzM3fSwwKS53YWl0KDEpLnRvKHt4OjY1Nyx5OjIxMC4zLGFscGhhOjAuMzM2fSwwKS53YWl0KDEpLnRvKHt4OjY1Ny4zLHk6MjEwLjUsYWxwaGE6MC4zMzR9LDApLndhaXQoMSkudG8oe3g6NjU3LjQseToyMTAuNixhbHBoYTowLjMzM30sMCkud2FpdCgxKS50byh7eDo2NTcuNix5OjIxMC44LGFscGhhOjAuMzMyfSwwKS53YWl0KDEpLnRvKHt4OjY1Ny43LHk6MjEwLjksYWxwaGE6MC4zMzF9LDApLndhaXQoMSkudG8oe3g6NjU3LjkseToyMTEsYWxwaGE6MC4zM30sMCkud2FpdCgxKS50byh7eToyMTEuMSxhbHBoYTowLjMyOX0sMCkud2FpdCgxKS50byh7eDo2NTh9LDApLndhaXQoMSkudG8oe3g6NjU4LjEseToyMTEuMixhbHBoYTowLjMyOH0sMCkud2FpdCgyKS50byh7cmVnWDoxMzYseDo4OTEuMix5OjI0NC4yfSwwKS53YWl0KDEpKTsNCg0KCS8vIExheWVyIDIgY29weSAyIChtYXNrKQ0KCXZhciBtYXNrXzEgPSBuZXcgY2pzLlNoYXBlKCk7DQoJbWFza18xLl9vZmYgPSB0cnVlOw0KCW1hc2tfMS5ncmFwaGljcy5wKCJBQWFJTFFqT2dnaDhpRVFoR2hKZ3BoYlFncWhjZ0VoZVFnTGpBQ0xoOFFDTGlERFRBV1FEWkFXQ1hDcFFDU0NtZ0tER1FnQ0FvZ1BBeElsMkVzSWdjQUJRZ2pBQWdwZ0dnQW9KalBRQStpWENUaExRQktnbUE5Z0hJaGpnWklnbGdJUUFBZ0JBQUFBUWdCZ0JBQWdCUUFBQUFBQmdCUUFBQUFBQWdCUUE5Z0pBSWdDSUFEZ0JRQTBBTEFlQUxRQXVBVkFVQUNRQWNBSENQQVNRQjlBV0JjQkJRQXlBakEwQTNRQUdBRkFUQUhRQVVBSEFCQUNRQUVBSWdaQUZRZ0VnQmc2ZzVRaG1oSGhVZ2ZRaFhnZWg2Z0xRam9nS2lTQjZRZ3NBbWdmQXNJZ1VBbVFnSUFLZ0RBQUlnQ2dCZyIpOw0KCW1hc2tfMS5zZXRUcmFuc2Zvcm0oMTcxLjksNzMuMik7DQoNCgkvLyBMYXllciA0IGNvcHkNCgl0aGlzLmluc3RhbmNlXzEgPSBuZXcgbGliLm1jX2hpZ2hsaWdodExpbmUoKTsNCgl0aGlzLmluc3RhbmNlXzEuc2V0VHJhbnNmb3JtKC0zLjgsMTQuNywzLjI1NywyLjQ5MSwxNiwwLDAsMTE4LjMsMTQzLjgpOw0KCXRoaXMuaW5zdGFuY2VfMS5hbHBoYSA9IDAuMTcyOw0KDQoJdGhpcy5pbnN0YW5jZV8xLm1hc2sgPSBtYXNrXzE7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNi4yLHg6NDMuOSx5OjM3LjYsYWxwaGE6MC4xNDh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE2LjQseDo3NS41LHk6NTIuOSxhbHBoYTowLjEzM30sMCkud2FpdCgxKS50byh7cm90YXRpb246MTYuNix4Ojk5LjgseTo2NC42LGFscGhhOjAuMTIxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNi43LHg6MTE5LjYseTo3NC4xLGFscGhhOjAuMTExfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNi44LHg6MTM2LjUseTo4Mi4zLGFscGhhOjAuMTAyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNi45LHg6MTUxLjEseTo4OS4zLGFscGhhOjAuMDk1fSwwKS53YWl0KDEpLnRvKHt4OjE2NCx5Ojk1LjYsYWxwaGE6MC4wODl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LHg6MTc1LjUseToxMDEsYWxwaGE6MC4wODN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LjEseDoxODUuOCx5OjEwNixhbHBoYTowLjA3OH0sMCkud2FpdCgxKS50byh7eDoxOTUuMix5OjExMC42LGFscGhhOjAuMDczfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy4yLHg6MjAzLjcseToxMTQuNixhbHBoYTowLjA2OX0sMCkud2FpdCgxKS50byh7eDoyMTEuNix5OjExOC40LGFscGhhOjAuMDY1fSwwKS53YWl0KDEpLnRvKHt4OjIxOC43LHk6MTIxLjgsYWxwaGE6MC4wNjJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LjMseDoyMjUuMyx5OjEyNSxhbHBoYTowLjA1OX0sMCkud2FpdCgxKS50byh7eDoyMzEuNCx5OjEyOCxhbHBoYTowLjA1Nn0sMCkud2FpdCgxKS50byh7eDoyMzcseToxMzAuNyxhbHBoYTowLjA1M30sMCkud2FpdCgxKS50byh7cm90YXRpb246MTcuNCx4OjI0Mi4yLHk6MTMzLjIsYWxwaGE6MC4wNX0sMCkud2FpdCgxKS50byh7eDoyNDcseToxMzUuNSxhbHBoYTowLjA0OH0sMCkud2FpdCgxKS50byh7eDoyNTEuNSx5OjEzNy43LGFscGhhOjAuMDQ2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNy41LHg6MjU1LjcseToxMzkuNyxhbHBoYTowLjA0M30sMCkud2FpdCgxKS50byh7eDoyNTkuNSx5OjE0MS42LGFscGhhOjAuMDQyfSwwKS53YWl0KDEpLnRvKHt4OjI2My4xLHk6MTQzLjMsYWxwaGE6MC4wNH0sMCkud2FpdCgxKS50byh7eDoyNjYuNSx5OjE0NC45LGFscGhhOjAuMDM4fSwwKS53YWl0KDEpLnRvKHt4OjI2OS42LHk6MTQ2LjQsYWxwaGE6MC4wMzd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LjYseDoyNzIuNSx5OjE0Ny44LGFscGhhOjAuMDM1fSwwKS53YWl0KDEpLnRvKHt4OjI3NS4zLHk6MTQ5LjEsYWxwaGE6MC4wMzR9LDApLndhaXQoMSkudG8oe3g6Mjc3LjgseToxNTAuMyxhbHBoYTowLjAzM30sMCkud2FpdCgxKS50byh7eDoyODAuMSx5OjE1MS41LGFscGhhOjAuMDMxfSwwKS53YWl0KDEpLnRvKHt4OjI4Mi4zLHk6MTUyLjUsYWxwaGE6MC4wM30sMCkud2FpdCgxKS50byh7eDoyODQuMyx5OjE1My41LGFscGhhOjAuMDI5fSwwKS53YWl0KDEpLnRvKHt4OjI4Ni4yLHk6MTU0LjQsYWxwaGE6MC4wMjh9LDApLndhaXQoMSkudG8oe3g6Mjg4LHk6MTU1LjMsYWxwaGE6MC4wMjd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3LjcseDoyODkuNix5OjE1Ni4xfSwwKS53YWl0KDEpLnRvKHt4OjI5MS4xLHk6MTU2LjgsYWxwaGE6MC4wMjZ9LDApLndhaXQoMSkudG8oe3g6MjkyLjUseToxNTcuNCxhbHBoYTowLjAyNX0sMCkud2FpdCgxKS50byh7eDoyOTMuNyx5OjE1OH0sMCkud2FpdCgxKS50byh7eDoyOTQuOSx5OjE1OC42LGFscGhhOjAuMDI0fSwwKS53YWl0KDEpLnRvKHt4OjI5Nix5OjE1OS4yfSwwKS53YWl0KDEpLnRvKHt4OjI5Nyx5OjE1OS42LGFscGhhOjAuMDIzfSwwKS53YWl0KDEpLnRvKHt4OjI5Ny44LHk6MTYwfSwwKS53YWl0KDEpLnRvKHt4OjI5OC43LHk6MTYwLjUsYWxwaGE6MC4wMjJ9LDApLndhaXQoMSkudG8oe3g6Mjk5LjQseToxNjAuOH0sMCkud2FpdCgxKS50byh7eDozMDAuMSx5OjE2MS4yLGFscGhhOjAuMDIxfSwwKS53YWl0KDEpLnRvKHt4OjMwMC43LHk6MTYxLjR9LDApLndhaXQoMSkudG8oe3g6MzAxLjMseToxNjEuNn0sMCkud2FpdCgxKS50byh7eDozMDEuNyx5OjE2MS45fSwwKS53YWl0KDEpLnRvKHt4OjMwMi4xLHk6MTYyLjEsYWxwaGE6MC4wMn0sMCkud2FpdCgxKS50byh7eDozMDIuNSx5OjE2Mi4zfSwwKS53YWl0KDEpLnRvKHt4OjMwMi44LHk6MTYyLjR9LDApLndhaXQoMSkudG8oe3g6MzAzLjEseToxNjIuNn0sMCkud2FpdCgxKS50byh7eDozMDMuMyx5OjE2Mi43fSwwKS53YWl0KDEpLnRvKHt4OjMwMy41LHk6MTYyLjh9LDApLndhaXQoMSkudG8oe3g6MzAzLjd9LDApLndhaXQoMSkudG8oe3g6MzAzLjgseToxNjIuOX0sMCkud2FpdCgxKS50byh7eDozMDMuOX0sMCkud2FpdCgxKS50byh7eDozMDQseToxNjN9LDApLndhaXQoMikudG8oe3g6MzA0LjMseToxNjIuOH0sMCkud2FpdCgxKSk7DQoNCgkvLyBMYXllciAyIChtYXNrKQ0KCXZhciBtYXNrXzIgPSBuZXcgY2pzLlNoYXBlKCk7DQoJbWFza18yLl9vZmYgPSB0cnVlOw0KCW1hc2tfMi5ncmFwaGljcy5wKCJBa3VNUlFnd2dZZ21nblFpMGl6QUFqU1FBQWgxQXRoc1FBdmhzQlNoUlFDbmlpRG9BRVFEcUFFQ21DblFDa0NsQUFEcFFBQURvaWtDaFFnaEFoaEZBZGciKTsNCgltYXNrXzIuc2V0VHJhbnNmb3JtKDQ2LjUsNzguNSk7DQoNCgkvLyBMYXllciA1DQoJdGhpcy5pbnN0YW5jZV8yID0gbmV3IGxpYi5tY19saWdodCgpOw0KCXRoaXMuaW5zdGFuY2VfMi5zZXRUcmFuc2Zvcm0oNjU5LjksMTIwLjIsMi44NjIsMi44NjIsLTEuMiwwLDAsMTM2LjEsODMuOCk7DQoNCgl0aGlzLmluc3RhbmNlXzIubWFzayA9IG1hc2tfMjsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzIpLndhaXQoMSkudG8oe3JlZ1g6NTMuOCxyZWdZOjgzLjcscm90YXRpb246LTAuOSx4OjQ0Mi40LHk6MTMyLjEsYWxwaGE6MC45MDN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjgseDo0NTMuNyx5OjEzNi42LGFscGhhOjAuODQyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC42LHg6NDYyLjQseToxNDAuMSxhbHBoYTowLjc5NX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTAuNSx4OjQ2OS42LHk6MTQzLGFscGhhOjAuNzU2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC40LHg6NDc1LjgseToxNDUuNCxhbHBoYTowLjcyM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTAuMyx4OjQ4MS4yLHk6MTQ3LjYsYWxwaGE6MC42OTR9LDApLndhaXQoMSkudG8oe3g6NDg2LHk6MTQ5LjUsYWxwaGE6MC42Njd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjIseDo0OTAuMyx5OjE1MS4zLGFscGhhOjAuNjQ0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC4xLHg6NDk0LjMseToxNTIuOCxhbHBoYTowLjYyMn0sMCkud2FpdCgxKS50byh7eDo0OTcuOSx5OjE1NC4zLGFscGhhOjAuNjAzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLHg6NTAxLjMseToxNTUuNixhbHBoYTowLjU4NX0sMCkud2FpdCgxKS50byh7eDo1MDQuNCx5OjE1Ni45LGFscGhhOjAuNTY4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjEseDo1MDcuMyx5OjE1OCxhbHBoYTowLjU1Mn0sMCkud2FpdCgxKS50byh7eDo1MTAseToxNTkuMSxhbHBoYTowLjUzOH0sMCkud2FpdCgxKS50byh7eDo1MTIuNSx5OjE2MC4xLGFscGhhOjAuNTI0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjIseDo1MTQuOSx5OjE2MS4xLGFscGhhOjAuNTExfSwwKS53YWl0KDEpLnRvKHt4OjUxNy4xLHk6MTYxLjksYWxwaGE6MC40OTl9LDApLndhaXQoMSkudG8oe3g6NTE5LjIseToxNjIuOCxhbHBoYTowLjQ4OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC4zLHg6NTIxLjIseToxNjMuNixhbHBoYTowLjQ3N30sMCkud2FpdCgxKS50byh7eDo1MjMuMSx5OjE2NC4zLGFscGhhOjAuNDY3fSwwKS53YWl0KDEpLnRvKHt4OjUyNC44LHk6MTY1LGFscGhhOjAuNDU4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjQseDo1MjYuNCx5OjE2NS42LGFscGhhOjAuNDQ5fSwwKS53YWl0KDEpLnRvKHt4OjUyOCx5OjE2Ni4zLGFscGhhOjAuNDQxfSwwKS53YWl0KDEpLnRvKHt4OjUyOS41LHk6MTY2LjksYWxwaGE6MC40MzN9LDApLndhaXQoMSkudG8oe3g6NTMwLjgseToxNjcuNCxhbHBoYTowLjQyNX0sMCkud2FpdCgxKS50byh7eDo1MzIuMix5OjE2Ny45LGFscGhhOjAuNDE4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjUseDo1MzMuNCx5OjE2OC40LGFscGhhOjAuNDExfSwwKS53YWl0KDEpLnRvKHt4OjUzNC42LHk6MTY4LjksYWxwaGE6MC40MDV9LDApLndhaXQoMSkudG8oe3g6NTM1LjcseToxNjkuNCxhbHBoYTowLjM5OX0sMCkud2FpdCgxKS50byh7eDo1MzYuOCx5OjE2OS44LGFscGhhOjAuMzkzfSwwKS53YWl0KDEpLnRvKHt4OjUzNy44LHk6MTcwLjIsYWxwaGE6MC4zODh9LDApLndhaXQoMSkudG8oe3g6NTM4LjcseToxNzAuNSxhbHBoYTowLjM4M30sMCkud2FpdCgxKS50byh7cm90YXRpb246MC42LHg6NTM5LjYseToxNzAuOSxhbHBoYTowLjM3OH0sMCkud2FpdCgxKS50byh7eDo1NDAuNCx5OjE3MS4yLGFscGhhOjAuMzc0fSwwKS53YWl0KDEpLnRvKHt4OjU0MS4yLHk6MTcxLjUsYWxwaGE6MC4zNjl9LDApLndhaXQoMSkudG8oe3g6NTQxLjkseToxNzEuOCxhbHBoYTowLjM2NX0sMCkud2FpdCgxKS50byh7eDo1NDIuNix5OjE3Mi4xLGFscGhhOjAuMzYyfSwwKS53YWl0KDEpLnRvKHt4OjU0My4zLHk6MTcyLjMsYWxwaGE6MC4zNTh9LDApLndhaXQoMSkudG8oe3g6NTQzLjkseToxNzIuNixhbHBoYTowLjM1NX0sMCkud2FpdCgxKS50byh7eDo1NDQuNCx5OjE3Mi44LGFscGhhOjAuMzUyfSwwKS53YWl0KDEpLnRvKHt4OjU0NSx5OjE3MyxhbHBoYTowLjM0OX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC43LHg6NTQ1LjUseToxNzMuMixhbHBoYTowLjM0N30sMCkud2FpdCgxKS50byh7eDo1NDUuOSx5OjE3My4zLGFscGhhOjAuMzQ0fSwwKS53YWl0KDEpLnRvKHt4OjU0Ni4zLHk6MTczLjUsYWxwaGE6MC4zNDJ9LDApLndhaXQoMSkudG8oe3g6NTQ2LjcseToxNzMuNyxhbHBoYTowLjM0fSwwKS53YWl0KDEpLnRvKHt4OjU0Nyx5OjE3My44LGFscGhhOjAuMzM4fSwwKS53YWl0KDEpLnRvKHt4OjU0Ny4zLHk6MTc0LGFscGhhOjAuMzM2fSwwKS53YWl0KDEpLnRvKHt4OjU0Ny42LHk6MTc0LjEsYWxwaGE6MC4zMzV9LDApLndhaXQoMSkudG8oe3g6NTQ3LjgseToxNzQuMixhbHBoYTowLjMzM30sMCkud2FpdCgxKS50byh7eDo1NDguMSxhbHBoYTowLjMzMn0sMCkud2FpdCgxKS50byh7eDo1NDguMyx5OjE3NC4zLGFscGhhOjAuMzMxfSwwKS53YWl0KDEpLnRvKHt4OjU0OC41LHk6MTc0LjQsYWxwaGE6MC4zM30sMCkud2FpdCgxKS50byh7eDo1NDguNix5OjE3NC41fSwwKS53YWl0KDEpLnRvKHt4OjU0OC43LGFscGhhOjAuMzI5fSwwKS53YWl0KDIpLnRvKHt4OjU0OC44LGFscGhhOjAuMzI4fSwwKS53YWl0KDEpLnRvKHt5OjE3NC42fSwwKS53YWl0KDEpLnRvKHtyZWdYOjEzNix4Ojc4NC4yLHk6MTc3Ljd9LDApLndhaXQoMSkpOw0KDQoJLy8gd2F0Y2gwMw0KCXRoaXMuaW5zdGFuY2VfMyA9IG5ldyBsaWIuR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMygpOw0KCXRoaXMuaW5zdGFuY2VfMy5zZXRUcmFuc2Zvcm0oLTIxLC01KTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzMpLndhaXQoNTkpKTsNCg0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuTW92aWVDbGlwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgtMjEsLTUsMjgxLDI1Nik7DQoNCg0KKGxpYi53YXRjaDIgPSBmdW5jdGlvbihtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCkgew0KCXRoaXMuaW5pdGlhbGl6ZShtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCx7fSk7DQoNCgkvLyB0aW1lbGluZSBmdW5jdGlvbnM6DQoJdGhpcy5mcmFtZV8wID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuZ290b0FuZFN0b3AoKTsNCgl9DQoJdGhpcy5mcmFtZV81MiA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLmdvdG9BbmRTdG9wKCk7DQoJfQ0KDQoJLy8gYWN0aW9ucyB0d2VlbjoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcykuY2FsbCh0aGlzLmZyYW1lXzApLndhaXQoNTIpLmNhbGwodGhpcy5mcmFtZV81Mikud2FpdCgxKSk7DQoNCgkvLyBMYXllciAyIGNvcHkgKG1hc2spDQoJdmFyIG1hc2sgPSBuZXcgY2pzLlNoYXBlKCk7DQoJbWFzay5fb2ZmID0gdHJ1ZTsNCgltYXNrLmdyYXBoaWNzLnAoIkFBWE11UWdDZ01BRWdXUUFKZ2FBQmdMSUFIZ3hJQUFnbFFBQWdqZ0hnTUlnRmdkUWdEZ1JnVmdlUWdrZzNnSmdUUWhNaC9ncGpCUWdQaEFnQmc2UWdDZ1NBQWdQSUFCZ09RZ0NoMUFuaHVRQVZoQUFsaEJRQWhnOUFIZ1BRQWFnNkFSZ2RRQVFnaEFFZ2pRQUVna2dCZ0xJZ05oelFnUmhIQTVBVlFCTUFZQVNCOVFBU0I4Z2JBc1FpUkRmZ1REU1FnS0JoQWdDUlFBZUNRQVlBbVFBWEFsQXJCaFFBc0JnQUtBL1FBTEJBZ2dBOVFnZ0E5Z0xBQlFnWUFIZ1NBQVFnZEFBZ09nVGciKTsNCgltYXNrLnNldFRyYW5zZm9ybSgzOC41LDE0MC45KTsNCg0KCS8vIExheWVyIDUgY29weSAyDQoJdGhpcy5pbnN0YW5jZSA9IG5ldyBsaWIubGlnaHQxKCk7DQoJdGhpcy5pbnN0YW5jZS5zZXRUcmFuc2Zvcm0oLTYsMTAxLjEsMS4yODMsMS4wNjQsOC40LDAsMCwxMTguMywxNDMuOCk7DQoJdGhpcy5pbnN0YW5jZS5hbHBoYSA9IDAuNDE7DQoNCgl0aGlzLmluc3RhbmNlLm1hc2sgPSBtYXNrOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2UpLndhaXQoMSkudG8oe3JlZ1g6MTExLjcscmVnWToxNTQuNyxzY2FsZVg6MS4yOCxyb3RhdGlvbjo4LjMseDotMTIuNCx5OjExMy41LGFscGhhOjAuNDAyfSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yOCxyb3RhdGlvbjo4LjIseDotOC43LHk6MTE1LjgsYWxwaGE6MC4zOTR9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI3LHJvdGF0aW9uOjgseDotNC45LHk6MTE4LjIsYWxwaGE6MC4zODV9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI3LHJvdGF0aW9uOjcuOSx4Oi0xLHk6MTIwLjUsYWxwaGE6MC4zNzZ9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI3LHJvdGF0aW9uOjcuOCx4OjMuMSx5OjEyMyxhbHBoYTowLjM2N30sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjcscm90YXRpb246Ny42LHg6Ny4xLHk6MTI1LjYsYWxwaGE6MC4zNTh9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI2LHJvdGF0aW9uOjcuNSx4OjExLjMseToxMjguMixhbHBoYTowLjM0OH0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjYscm90YXRpb246Ny4zLHg6MTUuNix5OjEzMC45LGFscGhhOjAuMzM5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNixyb3RhdGlvbjo3LjIseDoxOS45LHk6MTMzLjUsYWxwaGE6MC4zMjl9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI2LHJvdGF0aW9uOjcuMSx4OjI0LjMseToxMzYuMixhbHBoYTowLjMxOX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjUscm90YXRpb246Ni45LHg6MjguNyx5OjEzOC45LGFscGhhOjAuMzA5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNSxyb3RhdGlvbjo2LjgseDozMy4xLHk6MTQxLjcsYWxwaGE6MC4yOTl9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI1LHJvdGF0aW9uOjYuNix4OjM3LjYseToxNDQuNCxhbHBoYTowLjI4OX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjQscm90YXRpb246Ni40LHg6NDIuMSx5OjE0Ny4yLGFscGhhOjAuMjc4fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yNCxyb3RhdGlvbjo2LjMseDo0Ni41LHk6MTQ5LjksYWxwaGE6MC4yNjh9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjI0LHJvdGF0aW9uOjYuMSx4OjUwLjkseToxNTIuNixhbHBoYTowLjI1OH0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjQscm90YXRpb246Nix4OjU1LjMseToxNTUuNCxhbHBoYTowLjI0OX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjMscm90YXRpb246NS45LHg6NTkuNix5OjE1OCxhbHBoYTowLjIzOX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjMscm90YXRpb246NS43LHg6NjMuOSx5OjE2MC42LGFscGhhOjAuMjI5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMyxyb3RhdGlvbjo1LjYseDo2OCx5OjE2My4xLGFscGhhOjAuMjJ9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIyLHJvdGF0aW9uOjUuNCx4OjcyLjEseToxNjUuNyxhbHBoYTowLjIxMX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjIscm90YXRpb246NS4zLHg6NzYseToxNjguMSxhbHBoYTowLjIwMn0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMjIscm90YXRpb246NS4yLHg6NzkuOCx5OjE3MC40LGFscGhhOjAuMTkzfSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMixyb3RhdGlvbjo1LHg6ODMuNSx5OjE3Mi43LGFscGhhOjAuMTg1fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMSxyb3RhdGlvbjo0LjkseDo4Ny4xLHk6MTc1LGFscGhhOjAuMTc3fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMSxyb3RhdGlvbjo0LjgseDo5MC41LHk6MTc3LGFscGhhOjAuMTY5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMSxyb3RhdGlvbjo0LjcseDo5My44LHk6MTc5LGFscGhhOjAuMTYxfSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMSxyb3RhdGlvbjo0LjYseDo5Ni45LHk6MTgxLGFscGhhOjAuMTU0fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yMSxyb3RhdGlvbjo0LjUseDo5OS45LHk6MTgyLjgsYWxwaGE6MC4xNDd9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIscm90YXRpb246NC40LHg6MTAyLjcseToxODQuNixhbHBoYTowLjE0MX0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMixyb3RhdGlvbjo0LjMseDoxMDUuNCx5OjE4Ni4yLGFscGhhOjAuMTM1fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4yLHJvdGF0aW9uOjQuMix4OjEwNy45LHk6MTg3LjgsYWxwaGE6MC4xMjl9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIscm90YXRpb246NC4xLHg6MTEwLjMseToxODkuMixhbHBoYTowLjEyNH0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMix4OjExMi42LHk6MTkwLjYsYWxwaGE6MC4xMTl9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIscm90YXRpb246NCx4OjExNC42LHk6MTkxLjksYWxwaGE6MC4xMTR9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjIscm90YXRpb246My45LHg6MTE2LjYseToxOTMuMSxhbHBoYTowLjExfSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4xOSx4OjExOC40LHk6MTk0LjIsYWxwaGE6MC4xMDV9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjE5LHJvdGF0aW9uOjMuOCx4OjEyMC4xLHk6MTk1LjIsYWxwaGE6MC4xMDJ9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjE5LHJvdGF0aW9uOjMuNyx4OjEyMS42LHk6MTk2LjIsYWxwaGE6MC4wOTh9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjE5LHg6MTIzLHk6MTk3LjEsYWxwaGE6MC4wOTV9LDApLndhaXQoMSkudG8oe3g6MTI0LjIseToxOTcuOCxhbHBoYTowLjA5Mn0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMTkscm90YXRpb246My42LHg6MTI1LjMseToxOTguNSxhbHBoYTowLjA5fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4xOSx4OjEyNi4zLHk6MTk5LjEsYWxwaGE6MC4wODd9LDApLndhaXQoMSkudG8oe3NjYWxlWDoxLjE5LHg6MTI3LjIseToxOTkuNyxhbHBoYTowLjA4NX0sMCkud2FpdCgxKS50byh7cm90YXRpb246My41LHg6MTI4LHk6MjAwLjEsYWxwaGE6MC4wODR9LDApLndhaXQoMSkudG8oe3g6MTI4LjcseToyMDAuNixhbHBoYTowLjA4Mn0sMCkud2FpdCgxKS50byh7c2NhbGVYOjEuMTkseDoxMjkuMix5OjIwMC45LGFscGhhOjAuMDgxfSwwKS53YWl0KDEpLnRvKHt4OjEyOS42LHk6MjAxLjIsYWxwaGE6MC4wOH0sMCkud2FpdCgxKS50byh7eDoxMzAseToyMDEuNCxhbHBoYTowLjA3OX0sMCkud2FpdCgxKS50byh7eDoxMzAuMyx5OjIwMS42fSwwKS53YWl0KDEpLnRvKHtzY2FsZVg6MS4xOSxyb3RhdGlvbjozLjQsYWxwaGE6MC4wNzh9LDApLndhaXQoMSkudG8oe3JlZ1g6MTE4LjMscmVnWToxNDMuOCx4OjEzOSx5OjE5MC42fSwwKS53YWl0KDEpKTsNCg0KCS8vIExheWVyIDIgKG1hc2spDQoJdmFyIG1hc2tfMSA9IG5ldyBjanMuU2hhcGUoKTsNCgltYXNrXzEuX29mZiA9IHRydWU7DQoJbWFza18xLmdyYXBoaWNzLnAoIkFnOE4xUWliaTZBSmpxUUFGaUJBdWg1UUF2aDRCTWhaUUNUaW9EQ0FFUUM2QUVCOENqUUI1Q2lnRERtUWdERHFpQkN5UWdhQWxnckFvSW9BQktRZ3BnY2dyZ3pnIik7DQoJbWFza18xLnNldFRyYW5zZm9ybSg3My44LDk2LjUpOw0KDQoJLy8gTGF5ZXIgNQ0KCXRoaXMuaW5zdGFuY2VfMSA9IG5ldyBsaWIubGlnaHQoKTsNCgl0aGlzLmluc3RhbmNlXzEuc2V0VHJhbnNmb3JtKDQwMiwxMjIuOCwxLjUwNywxLjUwNywtMS4yLDAsMCwxMzYuMSw4My44KTsNCg0KCXRoaXMuaW5zdGFuY2VfMS5tYXNrID0gbWFza18xOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMSkud2FpdCgxKS50byh7cmVnWDotMjEuMixyZWdZOjgzLjcscm90YXRpb246LTAuOSx4OjE4My4zLHk6MTMzLjgsYWxwaGE6MC44OTV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjcseDoxOTQuNSx5OjEzNy41LGFscGhhOjAuODN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjYseDoyMDMuMSx5OjE0MC40LGFscGhhOjAuNzgxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC41LHg6MjEwLjIseToxNDIuNyxhbHBoYTowLjc0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMC40LHg6MjE2LjIseToxNDQuNyxhbHBoYTowLjcwNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTAuMyx4OjIyMS41LHk6MTQ2LjUsYWxwaGE6MC42NzV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0wLjIseDoyMjYuMSx5OjE0OCxhbHBoYTowLjY0OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTAuMSx4OjIzMC4zLHk6MTQ5LjUsYWxwaGE6MC42MjR9LDApLndhaXQoMSkudG8oe3g6MjM0LjIseToxNTAuNyxhbHBoYTowLjYwMn0sMCkud2FpdCgxKS50byh7cm90YXRpb246MCx4OjIzNy43LHk6MTUxLjksYWxwaGE6MC41ODJ9LDApLndhaXQoMSkudG8oe3g6MjQwLjkseToxNTIuOSxhbHBoYTowLjU2NH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC4xLHg6MjQzLjkseToxNTMuOSxhbHBoYTowLjU0N30sMCkud2FpdCgxKS50byh7eDoyNDYuNix5OjE1NC44LGFscGhhOjAuNTMxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjIseDoyNDkuMix5OjE1NS43LGFscGhhOjAuNTE2fSwwKS53YWl0KDEpLnRvKHt4OjI1MS41LHk6MTU2LjUsYWxwaGE6MC41MDN9LDApLndhaXQoMSkudG8oe3g6MjUzLjcseToxNTcuMixhbHBoYTowLjQ5fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjMseDoyNTUuOCx5OjE1Ny45LGFscGhhOjAuNDc4fSwwKS53YWl0KDEpLnRvKHt4OjI1Ny44LHk6MTU4LjYsYWxwaGE6MC40Njd9LDApLndhaXQoMSkudG8oe3g6MjU5LjYseToxNTkuMSxhbHBoYTowLjQ1Nn0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC40LHg6MjYxLjMseToxNTkuNyxhbHBoYTowLjQ0Nn0sMCkud2FpdCgxKS50byh7eDoyNjIuOSx5OjE2MC4zLGFscGhhOjAuNDM3fSwwKS53YWl0KDEpLnRvKHt4OjI2NC40LHk6MTYwLjcsYWxwaGE6MC40Mjl9LDApLndhaXQoMSkudG8oe3g6MjY1LjgseToxNjEuMixhbHBoYTowLjQyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjowLjUseDoyNjcuMSx5OjE2MS43LGFscGhhOjAuNDEzfSwwKS53YWl0KDEpLnRvKHt4OjI2OC40LHk6MTYyLjEsYWxwaGE6MC40MDZ9LDApLndhaXQoMSkudG8oe3g6MjY5LjUseToxNjIuNCxhbHBoYTowLjM5OX0sMCkud2FpdCgxKS50byh7eDoyNzAuNix5OjE2Mi44LGFscGhhOjAuMzkzfSwwKS53YWl0KDEpLnRvKHt4OjI3MS42LHk6MTYzLjIsYWxwaGE6MC4zODd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjAuNix4OjI3Mi42LHk6MTYzLjUsYWxwaGE6MC4zODF9LDApLndhaXQoMSkudG8oe3g6MjczLjUseToxNjMuOCxhbHBoYTowLjM3Nn0sMCkud2FpdCgxKS50byh7eDoyNzQuNCx5OjE2NC4xLGFscGhhOjAuMzcxfSwwKS53YWl0KDEpLnRvKHt4OjI3NS4yLHk6MTY0LjMsYWxwaGE6MC4zNjd9LDApLndhaXQoMSkudG8oe3g6Mjc1LjkseToxNjQuNixhbHBoYTowLjM2Mn0sMCkud2FpdCgxKS50byh7eDoyNzYuNix5OjE2NC44LGFscGhhOjAuMzU5fSwwKS53YWl0KDEpLnRvKHt4OjI3Ny4yLHk6MTY1LGFscGhhOjAuMzU1fSwwKS53YWl0KDEpLnRvKHt4OjI3Ny44LHk6MTY1LjIsYWxwaGE6MC4zNTJ9LDApLndhaXQoMSkudG8oe3g6Mjc4LjQseToxNjUuNCxhbHBoYTowLjM0OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MC43LHg6Mjc4LjgseToxNjUuNixhbHBoYTowLjM0Nn0sMCkud2FpdCgxKS50byh7eDoyNzkuMyx5OjE2NS43LGFscGhhOjAuMzQzfSwwKS53YWl0KDEpLnRvKHt4OjI3OS43LHk6MTY1LjksYWxwaGE6MC4zNDF9LDApLndhaXQoMSkudG8oe3g6MjgwLjEsYWxwaGE6MC4zMzl9LDApLndhaXQoMSkudG8oe3g6MjgwLjQseToxNjYsYWxwaGE6MC4zMzd9LDApLndhaXQoMSkudG8oe3g6MjgwLjcseToxNjYuMSxhbHBoYTowLjMzNX0sMCkud2FpdCgxKS50byh7eDoyODEseToxNjYuMixhbHBoYTowLjMzM30sMCkud2FpdCgxKS50byh7eDoyODEuMix5OjE2Ni4zLGFscGhhOjAuMzMyfSwwKS53YWl0KDEpLnRvKHt4OjI4MS40LHk6MTY2LjQsYWxwaGE6MC4zMzF9LDApLndhaXQoMSkudG8oe3g6MjgxLjUsYWxwaGE6MC4zM30sMCkud2FpdCgxKS50byh7eDoyODEuNix5OjE2Ni41LGFscGhhOjAuMzI5fSwwKS53YWl0KDEpLnRvKHt4OjI4MS43fSwwKS53YWl0KDEpLnRvKHt4OjI4MS44LGFscGhhOjAuMzI4fSwwKS53YWl0KDEpLnRvKHt4OjI4MS45fSwwKS53YWl0KDEpLnRvKHtyZWdYOjEzNix4OjUxOC44LHk6MTY5LjZ9LDApLndhaXQoMSkpOw0KDQoJLy8gTGF5ZXIgNg0KCXRoaXMuaW5zdGFuY2VfMiA9IG5ldyBsaWIuR29vZ2xlX1N0b3JlX0Zvc3NpbF8zMDB4NjAwX3Byb2R1Y3RfMigpOw0KCXRoaXMuaW5zdGFuY2VfMi5zZXRUcmFuc2Zvcm0oLTczLDE1KTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzIpLndhaXQoNTMpKTsNCg0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuTW92aWVDbGlwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgtNzMsMTUsMjY3LDI2Mik7DQoNCg0KKGxpYi53YXRjaDEgPSBmdW5jdGlvbihtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCkgew0KCXRoaXMuaW5pdGlhbGl6ZShtb2RlLHN0YXJ0UG9zaXRpb24sbG9vcCx7fSk7DQoNCgkvLyB0aW1lbGluZSBmdW5jdGlvbnM6DQoJdGhpcy5mcmFtZV8wID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuZ290b0FuZFN0b3AoKTsNCgl9DQoJdGhpcy5mcmFtZV82OSA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLmdvdG9BbmRTdG9wKCk7DQoJfQ0KDQoJLy8gYWN0aW9ucyB0d2VlbjoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcykuY2FsbCh0aGlzLmZyYW1lXzApLndhaXQoNjkpLmNhbGwodGhpcy5mcmFtZV82OSkud2FpdCgxKSk7DQoNCgkvLyBtYXNrIChtYXNrKQ0KCXZhciBtYXNrID0gbmV3IGNqcy5TaGFwZSgpOw0KCW1hc2suX29mZiA9IHRydWU7DQoJbWFzay5ncmFwaGljcy5wKCJBbFJHNlFpTWk0QUFrQ1FBQWtDQ01pNFFDTmkzREVBQVFERkFBQ05DM1FDTUM0QUFFQ1FBQUVDaU1DNFFpTkM0akZBQVFqRUFBaU5pNGciKTsNCgltYXNrLnNldFRyYW5zZm9ybSgxNDksMTM4LjkpOw0KDQoJLy8gTGF5ZXIgNSBjb3B5DQoJdGhpcy5pbnN0YW5jZSA9IG5ldyBsaWIubWNfaGlnaGxpZ2h0TGluZSgpOw0KCXRoaXMuaW5zdGFuY2Uuc2V0VHJhbnNmb3JtKDI2LDE1My41LDIuODI4LDIuMTYzLC0zMCwwLDAsMTE4LjMsMTQzLjgpOw0KCXRoaXMuaW5zdGFuY2UuYWxwaGEgPSAwLjQzOw0KDQoJdGhpcy5pbnN0YW5jZS5tYXNrID0gbWFzazsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjkuNyx4OjQwLjEseToxNTIuNixhbHBoYTowLjQxNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI5LjQseDo1MS44LHk6MTUxLjcsYWxwaGE6MC40MDJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOS4yLHg6NjIuMix5OjE1MSxhbHBoYTowLjM5MX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI5LHg6NzEuOCx5OjE1MC40LGFscGhhOjAuMzh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOC44LHg6ODAuOSx5OjE0OS43LGFscGhhOjAuMzd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOC42LHg6ODkuNyx5OjE0OS4xLGFscGhhOjAuMzYxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjguNSx4Ojk4LHk6MTQ4LjYsYWxwaGE6MC4zNTJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOC4zLHg6MTA2LHk6MTQ4LGFscGhhOjAuMzQzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjguMSx4OjExMy43LHk6MTQ3LjQsYWxwaGE6MC4zMzV9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yOCx4OjEyMS4zLHk6MTQ3LGFscGhhOjAuMzI3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjcuOCx4OjEyOC42LHk6MTQ2LjQsYWxwaGE6MC4zMTl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNy43LHg6MTM1LjcseToxNDUuOSxhbHBoYTowLjMxMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI3LjUseDoxNDIuNix5OjE0NS41LGFscGhhOjAuMzA0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjcuNCx4OjE0OS4zLHk6MTQ1LGFscGhhOjAuMjk3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjcuMix4OjE1NS45LHk6MTQ0LjUsYWxwaGE6MC4yOX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI3LjEseDoxNjIuNCx5OjE0NC4xLGFscGhhOjAuMjgzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjYuOSx4OjE2OC42LHk6MTQzLjYsYWxwaGE6MC4yNzZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNi44LHg6MTc0LjcseToxNDMuMyxhbHBoYTowLjI2OX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI2LjcseDoxODAuNix5OjE0Mi44LGFscGhhOjAuMjYzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjYuNix4OjE4Ni41LHk6MTQyLjQsYWxwaGE6MC4yNTZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNi40LHg6MTkyLjIseToxNDIsYWxwaGE6MC4yNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI2LjMseDoxOTcuOCx5OjE0MS42LGFscGhhOjAuMjQ0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjYuMix4OjIwMy4yLHk6MTQxLjIsYWxwaGE6MC4yMzh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNi4xLHg6MjA4LjUseToxNDAuOCxhbHBoYTowLjIzM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI2LHg6MjEzLjcseToxNDAuNSxhbHBoYTowLjIyN30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI1LjkseDoyMTguOSx5OjE0MC4yLGFscGhhOjAuMjIyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjUuOCx4OjIyMy44LHk6MTM5LjgsYWxwaGE6MC4yMTZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNS43LHg6MjI4LjYseToxMzkuNSxhbHBoYTowLjIxMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI1LjYseDoyMzMuNCx5OjEzOS4xLGFscGhhOjAuMjA2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjUuNSx4OjIzOCx5OjEzOC44LGFscGhhOjAuMjAxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjUuNCx4OjI0Mi41LHk6MTM4LjUsYWxwaGE6MC4xOTZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNS4zLHg6MjQ2LjkseToxMzguMyxhbHBoYTowLjE5MX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI1LjIseDoyNTEuMix5OjEzOCxhbHBoYTowLjE4N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI1LjEseDoyNTUuNCx5OjEzNy43LGFscGhhOjAuMTgyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjUseDoyNTkuNSx5OjEzNy40LGFscGhhOjAuMTc4fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQuOSx4OjI2My40LHk6MTM3LjEsYWxwaGE6MC4xNzN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNC44LHg6MjY3LjIseToxMzYuOSxhbHBoYTowLjE2OX0sMCkud2FpdCgxKS50byh7eDoyNzAuOSx5OjEzNi42LGFscGhhOjAuMTY1fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQuNyx4OjI3NC42LHk6MTM2LjQsYWxwaGE6MC4xNjF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNC42LHg6Mjc4LjEseToxMzYuMSxhbHBoYTowLjE1OH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI0LjUseDoyODEuNSx5OjEzNS44LGFscGhhOjAuMTU0fSwwKS53YWl0KDEpLnRvKHt4OjI4NC44LHk6MTM1LjcsYWxwaGE6MC4xNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTI0LjQseDoyODcuOSx5OjEzNS40LGFscGhhOjAuMTQ3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQuMyx4OjI5MSx5OjEzNS4yLGFscGhhOjAuMTQ0fSwwKS53YWl0KDEpLnRvKHt4OjI5NCx5OjEzNSxhbHBoYTowLjE0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQuMix4OjI5Ni45LHk6MTM0LjgsYWxwaGE6MC4xMzd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yNC4xLHg6Mjk5LjYseToxMzQuNixhbHBoYTowLjEzNH0sMCkud2FpdCgxKS50byh7eDozMDIuMix5OjEzNC40LGFscGhhOjAuMTMyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjQseDozMDQuNyx5OjEzNC4yLGFscGhhOjAuMTI5fSwwKS53YWl0KDEpLnRvKHt4OjMwNy4xLHk6MTM0LjEsYWxwaGE6MC4xMjZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0yMy45LHg6MzA5LjQseToxMzMuOSxhbHBoYTowLjEyNH0sMCkud2FpdCgxKS50byh7eDozMTEuNSx5OjEzMy44LGFscGhhOjAuMTIxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjMuOCx4OjMxMy42LHk6MTMzLjYsYWxwaGE6MC4xMTl9LDApLndhaXQoMSkudG8oe3g6MzE1LjYseToxMzMuNSxhbHBoYTowLjExN30sMCkud2FpdCgxKS50byh7eDozMTcuNCx5OjEzMy4zLGFscGhhOjAuMTE1fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMjMuNyx4OjMxOS4xLHk6MTMzLjIsYWxwaGE6MC4xMTN9LDApLndhaXQoMSkudG8oe3g6MzIwLjcsYWxwaGE6MC4xMTJ9LDApLndhaXQoMSkudG8oe3g6MzIyLjIseToxMzMsYWxwaGE6MC4xMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTIzLjYseDozMjMuNSx5OjEzMi45LGFscGhhOjAuMTA5fSwwKS53YWl0KDEpLnRvKHt4OjMyNC43LHk6MTMyLjgsYWxwaGE6MC4xMDd9LDApLndhaXQoMSkudG8oe3g6MzI1LjgseToxMzIuNyxhbHBoYTowLjEwNn0sMCkud2FpdCgxKS50byh7eDozMjYuOCxhbHBoYTowLjEwNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTIzLjUseDozMjcuNixhbHBoYTowLjEwNH0sMCkud2FpdCgxKS50byh7eDozMjguNCx5OjEzMi42LGFscGhhOjAuMTAzfSwwKS53YWl0KDEpLnRvKHt4OjMyOSx5OjEzMi41fSwwKS53YWl0KDEpLnRvKHt4OjMyOS40LGFscGhhOjAuMTAyfSwwKS53YWl0KDEpLnRvKHt4OjMyOS44fSwwKS53YWl0KDEpLnRvKHt4OjMzMH0sMCkud2FpdCgxKS50byh7eToxMzIuNH0sMCkud2FpdCgxKSk7DQoNCgkvLyBMYXllciAzDQoJdGhpcy5pbnN0YW5jZV8xID0gbmV3IGxpYi5tY19saWdodCgpOw0KCXRoaXMuaW5zdGFuY2VfMS5zZXRUcmFuc2Zvcm0oNjUwLjMsLTU3LjcsMi40ODUsMi40ODUsLTIxLjIsMCwwLDEzNi4xLDgzLjcpOw0KDQoJdGhpcy5pbnN0YW5jZV8xLm1hc2sgPSBtYXNrOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMSkud2FpdCgxKS50byh7cmVnWDo1My44LHJvdGF0aW9uOi0yMC40LHg6NDc5LjIseToyMS4yLGFscGhhOjAuODc3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTkuOCx4OjQ5Mi43LHk6MjQuNSxhbHBoYTowLjc5Mn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE5LjMseDo1MDMuMyx5OjI3LjIsYWxwaGE6MC43MjZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xOSx4OjUxMix5OjI5LjQsYWxwaGE6MC42NzF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xOC42LHg6NTE5LjUseTozMS4yLGFscGhhOjAuNjI0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTguNCx4OjUyNi4xLHk6MzIuOCxhbHBoYTowLjU4M30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE4LjEseDo1MzIseTozNC4yLGFscGhhOjAuNTQ3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTcuOSx4OjUzNy4yLHk6MzUuNSxhbHBoYTowLjUxNH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE3LjcseDo1NDEuOSx5OjM2LjcsYWxwaGE6MC40ODR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNy41LHg6NTQ2LjMseTozNy44LGFscGhhOjAuNDU3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTcuMyx4OjU1MC4zLHk6MzguNyxhbHBoYTowLjQzMn0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE3LjIseDo1NTQseTozOS42LGFscGhhOjAuNDA5fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTcseDo1NTcuNCx5OjQwLjUsYWxwaGE6MC4zODh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNi45LHg6NTYwLjUseTo0MS4zLGFscGhhOjAuMzY5fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTYuOCx4OjU2My41LHk6NDIsYWxwaGE6MC4zNX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE2LjcseDo1NjYuMix5OjQyLjYsYWxwaGE6MC4zMzN9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNi42LHg6NTY4LjcseTo0My4yLGFscGhhOjAuMzE3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTYuNSx4OjU3MS4xLHk6NDMuOCxhbHBoYTowLjMwM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE2LjQseDo1NzMuMyx5OjQ0LjMsYWxwaGE6MC4yODl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNi4zLHg6NTc1LjUseTo0NC45LGFscGhhOjAuMjc2fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTYuMix4OjU3Ny40LHk6NDUuNCxhbHBoYTowLjI2M30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE2LjEseDo1NzkuMyx5OjQ1LjgsYWxwaGE6MC4yNTJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNix4OjU4MSx5OjQ2LjMsYWxwaGE6MC4yNDF9LDApLndhaXQoMSkudG8oe3g6NTgyLjcseTo0Ni42LGFscGhhOjAuMjMxfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotMTUuOSx4OjU4NC4yLHk6NDcsYWxwaGE6MC4yMjF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS44LHg6NTg1LjYseTo0Ny4zLGFscGhhOjAuMjEyfSwwKS53YWl0KDEpLnRvKHt4OjU4Nyx5OjQ3LjcsYWxwaGE6MC4yMDR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS43LHg6NTg4LjMseTo0OCxhbHBoYTowLjE5Nn0sMCkud2FpdCgxKS50byh7eDo1ODkuNSx5OjQ4LjMsYWxwaGE6MC4xODh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS42LHg6NTkwLjYseTo0OC42LGFscGhhOjAuMTgxfSwwKS53YWl0KDEpLnRvKHt4OjU5MS43LHk6NDguOCxhbHBoYTowLjE3NH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE1LjUseDo1OTIuNyx5OjQ5LjEsYWxwaGE6MC4xNjh9LDApLndhaXQoMSkudG8oe3g6NTkzLjcseTo0OS4zLGFscGhhOjAuMTYyfSwwKS53YWl0KDEpLnRvKHt4OjU5NC42LHk6NDkuNSxhbHBoYTowLjE1N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE1LjQseDo1OTUuNCx5OjQ5LjcsYWxwaGE6MC4xNTF9LDApLndhaXQoMSkudG8oe3g6NTk2LjMseTo1MCxhbHBoYTowLjE0N30sMCkud2FpdCgxKS50byh7eDo1OTYuOSx5OjUwLjEsYWxwaGE6MC4xNDJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS4zLHg6NTk3LjcseTo1MC4zLGFscGhhOjAuMTM4fSwwKS53YWl0KDEpLnRvKHt4OjU5OC4zLHk6NTAuNCxhbHBoYTowLjEzNH0sMCkud2FpdCgxKS50byh7eDo1OTguOSx5OjUwLjYsYWxwaGE6MC4xM30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTE1LjIseDo1OTkuNSx5OjUwLjcsYWxwaGE6MC4xMjZ9LDApLndhaXQoMSkudG8oe3g6NjAwLHk6NTAuOSxhbHBoYTowLjEyM30sMCkud2FpdCgxKS50byh7eDo2MDAuNix5OjUxLGFscGhhOjAuMTJ9LDApLndhaXQoMSkudG8oe3g6NjAxLHk6NTEuMSxhbHBoYTowLjExN30sMCkud2FpdCgxKS50byh7eDo2MDEuNSx5OjUxLjIsYWxwaGE6MC4xMTR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNS4xLHg6NjAxLjkseTo1MS4zLGFscGhhOjAuMTEyfSwwKS53YWl0KDEpLnRvKHt4OjYwMi4yLGFscGhhOjAuMTA5fSwwKS53YWl0KDEpLnRvKHt4OjYwMi42LHk6NTEuNSxhbHBoYTowLjEwN30sMCkud2FpdCgxKS50byh7eDo2MDIuOSxhbHBoYTowLjEwNX0sMCkud2FpdCgxKS50byh7eDo2MDMuMix5OjUxLjYsYWxwaGE6MC4xMDN9LDApLndhaXQoMSkudG8oe3g6NjAzLjUsYWxwaGE6MC4xMDJ9LDApLndhaXQoMSkudG8oe3g6NjAzLjcseTo1MS44LGFscGhhOjAuMX0sMCkud2FpdCgxKS50byh7eDo2MDQsYWxwaGE6MC4wOTl9LDApLndhaXQoMSkudG8oe3g6NjA0LjEsYWxwaGE6MC4wOTd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xNSx4OjYwNC4zLHk6NTEuOSxhbHBoYTowLjA5Nn0sMCkud2FpdCgxKS50byh7eDo2MDQuNSxhbHBoYTowLjA5NX0sMCkud2FpdCgxKS50byh7eDo2MDQuNyx5OjUyLGFscGhhOjAuMDk0fSwwKS53YWl0KDIpLnRvKHt4OjYwNC45LGFscGhhOjAuMDkzfSwwKS53YWl0KDEpLnRvKHt4OjYwNSxhbHBoYTowLjA5Mn0sMCkud2FpdCgyKS50byh7eDo2MDUuMSx5OjUyLjEsYWxwaGE6MC4wOTF9LDApLndhaXQoMSkudG8oe3g6NjA1LjJ9LDApLndhaXQoMSkudG8oe3g6NjA1LjMsYWxwaGE6MC4wOX0sMCkud2FpdCgyKS50byh7eDo2MDUuNH0sMCkud2FpdCgzKS50byh7cmVnWDoxMzYuMSx4OjgwMyx5Oi0wLjd9LDApLndhaXQoMSkpOw0KDQoJLy8gd2F0Y2gNCgl0aGlzLmluc3RhbmNlXzIgPSBuZXcgbGliLkdvb2dsZV9TdG9yZV9Gb3NzaWxfMzAweDYwMF9wcm9kdWN0XzEoKTsNCgl0aGlzLmluc3RhbmNlXzIuc2V0VHJhbnNmb3JtKC0xMSwxNCk7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8yKS53YWl0KDcwKSk7DQoNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLk1vdmllQ2xpcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTExLDE0LDI1NiwyNTUpOw0KDQoNCihsaWIucmVwbGF5Q29weSA9IGZ1bmN0aW9uKG1vZGUsc3RhcnRQb3NpdGlvbixsb29wKSB7DQoJdGhpcy5pbml0aWFsaXplKG1vZGUsc3RhcnRQb3NpdGlvbixsb29wLHtvdmVyOjEsb3V0OjE1fSk7DQoNCgkvLyB0aW1lbGluZSBmdW5jdGlvbnM6DQoJdGhpcy5mcmFtZV8wID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuc3RvcCgpOw0KCX0NCgl0aGlzLmZyYW1lXzE0ID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMuc3RvcCgpOw0KCX0NCg0KCS8vIGFjdGlvbnMgdHdlZW46DQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMpLmNhbGwodGhpcy5mcmFtZV8wKS53YWl0KDE0KS5jYWxsKHRoaXMuZnJhbWVfMTQpLndhaXQoMTApKTsNCg0KCS8vIExheWVyIDENCgl0aGlzLmluc3RhbmNlID0gbmV3IGxpYi5yZXBsYXkoKTsNCgl0aGlzLmluc3RhbmNlLnNldFRyYW5zZm9ybSgwLjEsMTAsMSwxLDAsMCwwLDYuNCw2LjIpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2UpLndhaXQoMikudG8oe3JlZ1g6Ni4zLHJvdGF0aW9uOjMuNSx4OjB9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE4LjF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjYwLjgseTo5Ljl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjE3NC4xLHg6MC4xLHk6MTB9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjI1Mi42LHg6MCx5OjEwLjF9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjI5Mi43fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjozMTcuNCx5OjEwfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjozMzMuN30sMCkud2FpdCgxKS50byh7cm90YXRpb246MzQ0Ljh9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjM1Mi4xfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjozNTYuOH0sMCkud2FpdCgxKS50byh7cm90YXRpb246MzU5LjJ9LDApLndhaXQoMSkudG8oe3JlZ1g6Ni40LHJvdGF0aW9uOjM2MCx4OjAuMX0sMCkud2FpdCgxMCkpOw0KDQoJLy8gaGl0QXJlYSAocmVzaXplIG1lKQ0KCXRoaXMuaGl0ID0gbmV3IGxpYi5oaXQoKTsNCgl0aGlzLmhpdC5zZXRUcmFuc2Zvcm0oLTAuMSwxMSwxLDEsMCwwLDAsMTIsMTMpOw0KCXRoaXMuaGl0LmZpbHRlcnMgPSBbbmV3IGNqcy5Db2xvckZpbHRlcigwLCAwLCAwLCAxLCAyNTIsIDI1MiwgMjUyLCAwKV07DQoJdGhpcy5oaXQuY2FjaGUoLTIsLTIsMjYsMjUpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaGl0KS53YWl0KDI0KSk7DQoNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLk1vdmllQ2xpcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTEyLjEsLTIsMjIuMywyMS4yKTsNCg0KDQoobGliLkNUQSA9IGZ1bmN0aW9uKG1vZGUsc3RhcnRQb3NpdGlvbixsb29wKSB7DQoJdGhpcy5pbml0aWFsaXplKG1vZGUsc3RhcnRQb3NpdGlvbixsb29wLHsib3ZlciI6MSwib3V0IjoyMH0pOw0KDQoJLy8gdGltZWxpbmUgZnVuY3Rpb25zOg0KCXRoaXMuZnJhbWVfMCA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLnN0b3AoKTsNCgl9DQoJdGhpcy5mcmFtZV8xOSA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLnN0b3AoKTsNCgl9DQoJdGhpcy5mcmFtZV8yNyA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLnN0b3AoKTsNCgl9DQoNCgkvLyBhY3Rpb25zIHR3ZWVuOg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzKS5jYWxsKHRoaXMuZnJhbWVfMCkud2FpdCgxOSkuY2FsbCh0aGlzLmZyYW1lXzE5KS53YWl0KDgpLmNhbGwodGhpcy5mcmFtZV8yNykud2FpdCgxKSk7DQoNCgkvLyBIaXRab25lDQoJdGhpcy5oaXQgPSBuZXcgbGliLmhpdCgpOw0KCXRoaXMuaGl0LnNldFRyYW5zZm9ybSg0NiwxMywzLjY4LDEuMDQsMCwwLDAsMTIuNSwxMi41KTsNCgl0aGlzLmhpdC5hbHBoYSA9IDA7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5oaXQpLndhaXQoMjgpKTsNCg0KCS8vIENvcHkgY29weSAobWFzaykNCgl2YXIgbWFzayA9IG5ldyBjanMuU2hhcGUoKTsNCgltYXNrLl9vZmYgPSB0cnVlOw0KCW1hc2suZ3JhcGhpY3MucCgiQUNiQkJRZ0xnTkFBZ1hRQUFnWEFMZ0tRQUxnTkFWQUFRQVVBQUFMQU5RQU1BTEFBQVdRQUFBWGdNQU5RZ0xBTmdVQUFRZ1ZBQWdMZ05nQUNqQUJRZ0lBS0FBQVNRQUFBVEFJQUtRQUlBS0FRQUFRQVBBQUFJZ0tRQUlnS0FBZ1RRQUFnVGdJZ0pRZ0lnSWdQQUFRZ1FBQWdJQUlnQWlqQkVRZ0pnSkFBZ1FJQUFnNklBTEFBSUFBQTdRQUFBTEFHQUhRQUdBR0FOQUFRQU1BQUFHZ0dRQUdnSEFBZ0xJQUFnN0lBTEFBSUFBQTZRQUFBUWdKQUpRZ0tBS2dSQUFRZ1JBQWdKZ0tnQUZCQk1JZ1NnK0lnRGdMSWdDZ0ZJZ0ZBUUlnU0ErSWdMQUFJZ1poYklBTUFBSUFQQTNJQUVBV1FBQ2dMQURnTElBUmczSUFNQUFJQVJBM0lBRkFXSUFGZ1dJQVBnM0lBTEFBSWdaQmJnQUJ1Qk1JZ3poTUlBQUFBSUFCQVhJQUFBMUlnS0FBSUFBaGJJQU1BQUlBekJNSUFBQUFJQUFnTElnQmdPSUFBZ3pJQUxBQUlBQUJiZ0Fnd0JNSUFBZ2tJZ2ZnM0lBTUFBSUFaQXNJQVpnc0lBTUFBSWdnQTNJQUFBa2dBa0FCTUlBQWhiSUFhQUFRQVRBQUFJQUZRQUlBR0FBQUtRQUFBSWdFQUdRZ0ZBRmdKQUNJQUFBQVFBVkFFQUFBVFFBQUFNZ0lBSFFnSkFIZ1BBQWdBajJCRElBVUFBUUFMQUFBR2dFUUFHZ0ZBQWdKUUFBZ0pnR2dFUWdHZ0VnTUFBSWdUQUFnQWoyQVhJQVNBQVFBTUFBQUZnRVFBRmdEQUFnSlFBQWdIZ0dnQ1FnRmdFZ05BQUlnUUFBZyIpOw0KCW1hc2suc2V0VHJhbnNmb3JtKDM1LjgsNy44KTsNCg0KCS8vIHNoaW5lIGNvcHkNCgl0aGlzLmluc3RhbmNlID0gbmV3IGxpYi5saWdodDEoKTsNCgl0aGlzLmluc3RhbmNlLnNldFRyYW5zZm9ybSgtMjAsLTI2LDAuNTI3LDAuNTI3LDAsMCwwLDExOC4zLDE0My44KTsNCgl0aGlzLmluc3RhbmNlLl9vZmYgPSB0cnVlOw0KDQoJdGhpcy5pbnN0YW5jZS5tYXNrID0gbWFzazsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlKS53YWl0KDQpLnRvKHtfb2ZmOmZhbHNlfSwwKS53YWl0KDEpLnRvKHtyZWdYOjExMS43LHJlZ1k6MTU0Ljcscm90YXRpb246LTAuNix4Oi0xMy42LHk6LTE3LjIsYWxwaGE6MC45NTd9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xLjIseDotMy43LHk6LTE0LjMsYWxwaGE6MC45MTR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi0xLjgseDo2LjIseTotMTEuMyxhbHBoYTowLjg3MX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTIuNCx4OjE2LHk6LTguNCxhbHBoYTowLjgyOH0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTMseDoyNS45LHk6LTUuNCxhbHBoYTowLjc4NX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTMuNix4OjM1LjgseTotMi40LGFscGhhOjAuNzQyfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotNC4yLHg6NDUuNix5OjAuNSxhbHBoYTowLjY5OX0sMCkud2FpdCgxKS50byh7cm90YXRpb246LTQuOCx4OjU1LjUseTozLjUsYWxwaGE6MC42NTZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi01LjQseDo2NS40LHk6Ni41LGFscGhhOjAuNjEzfSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotNix4Ojc1LjIseTo5LjQsYWxwaGE6MC41N30sMCkud2FpdCgxKS50byh7cm90YXRpb246LTYuNix4Ojg1LjEseToxMi40LGFscGhhOjAuNTI3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjotNy4yLHg6OTQuOSx5OjE1LjQsYWxwaGE6MC40ODR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOi03LjgseDoxMDQuOCx5OjE4LjMsYWxwaGE6MC40NDF9LDApLndhaXQoMSkudG8oe3JlZ1g6MTE4LjIscmVnWToxNDQscm90YXRpb246LTguNCx4OjExNy40LHk6MTUuMSxhbHBoYTowLjM5OH0sMCkud2FpdCgxMCkpOw0KDQoJLy8gQmFzZSBtYXNrIChtYXNrKQ0KCXZhciBtYXNrXzEgPSBuZXcgY2pzLlNoYXBlKCk7DQoJbWFza18xLl9vZmYgPSB0cnVlOw0KCW1hc2tfMS5ncmFwaGljcy5wKCJBbVpCdElBQWphSU15QUFJQUFEYWdBbVBCaklNZkFBSUFBakdJc2ZBQWciKTsNCgltYXNrXzEuc2V0VHJhbnNmb3JtKDQxLDExKTsNCg0KCS8vIHNoaW5lDQoJdGhpcy5pbnN0YW5jZV8xID0gbmV3IGxpYi5saWdodDEoKTsNCgl0aGlzLmluc3RhbmNlXzEuc2V0VHJhbnNmb3JtKC0yMCwtMjYsMC41MjcsMC41MjcsMCwwLDAsMTE4LjMsMTQzLjgpOw0KDQoJdGhpcy5pbnN0YW5jZV8xLm1hc2sgPSBtYXNrXzE7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xKS53YWl0KDEpLnRvKHtyZWdYOjExMS43LHJlZ1k6MTU0Ljcscm90YXRpb246MSx4Oi0xNS4yLHk6LTE2LjYsYWxwaGE6MC45NjJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjIseDotNyx5Oi0xMi45LGFscGhhOjAuOTI1fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjozLHg6MS4yLHk6LTkuMyxhbHBoYTowLjg4N30sMCkud2FpdCgxKS50byh7cm90YXRpb246NCx4OjkuNCx5Oi01LjcsYWxwaGE6MC44NX0sMCkud2FpdCgxKS50byh7cm90YXRpb246NC45LHg6MTcuNix5Oi0yLjEsYWxwaGE6MC44MTJ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjUuOSx4OjI1LjgseToxLjUsYWxwaGE6MC43NzR9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjYuOSx4OjM0LHk6NS4yLGFscGhhOjAuNzM3fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjo3LjkseDo0Mi4yLHk6OC43LGFscGhhOjAuNjk5fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjo4LjkseDo1MC4zLHk6MTIuNCxhbHBoYTowLjY2Mn0sMCkud2FpdCgxKS50byh7cm90YXRpb246OS45LHg6NTguNSx5OjE2LGFscGhhOjAuNjI0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxMC45LHg6NjYuOCx5OjE5LjYsYWxwaGE6MC41ODZ9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjExLjkseDo3NSx5OjIzLjIsYWxwaGE6MC41NDl9LDApLndhaXQoMSkudG8oe3JvdGF0aW9uOjEyLjgseDo4My4yLHk6MjYuOCxhbHBoYTowLjUxMX0sMCkud2FpdCgxKS50byh7cm90YXRpb246MTMuOCx4OjkxLjQseTozMC40LGFscGhhOjAuNDc0fSwwKS53YWl0KDEpLnRvKHtyb3RhdGlvbjoxNC44LHg6OTkuNix5OjM0LGFscGhhOjAuNDM2fSwwKS53YWl0KDEpLnRvKHtyZWdYOjExOC4zLHJlZ1k6MTQzLjgscm90YXRpb246MTUuOCx4OjExMi44LHk6MzMsYWxwaGE6MC4zOTh9LDApLndhaXQoMTIpKTsNCg0KCS8vIENvcHkNCgl0aGlzLmluc3RhbmNlXzIgPSBuZXcgbGliLm1jX2N0YUNvcHkoKTsNCgl0aGlzLmluc3RhbmNlXzIuc2V0VHJhbnNmb3JtKDM2LjIsMTAuMSwxLDEsMCwwLDAsMjYuMiw0LjEpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMikud2FpdCgyOCkpOw0KDQoJLy8gQmFzZQ0KCXRoaXMuaW5zdGFuY2VfMyA9IG5ldyBsaWIubWNfY3RhQmFzZSgpOw0KCXRoaXMuaW5zdGFuY2VfMy5zZXRUcmFuc2Zvcm0oNDUsMTEuNSwxLDEsMCwwLDAsNDUsMTEuNSk7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8zKS53YWl0KDI4KSk7DQoNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLk1vdmllQ2xpcCgpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoMCwwLDgyLDIyLjEpOw0KDQoNCihsaWIuX2NhdGNoID0gZnVuY3Rpb24oKSB7DQoJdGhpcy5pbml0aWFsaXplKCk7DQoNCgkvLyBMYXllciAxDQoJdGhpcy5oaXQgPSBuZXcgbGliLmhpdCgpOw0KCXRoaXMuaGl0LnNldFRyYW5zZm9ybSgxMy41LDM2LjgsMS4xMjQsMi44MzIsMCwwLDAsMTIsMTMpOw0KCXRoaXMuaGl0LmFscGhhID0gMDsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5oaXQpOw0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuQ29udGFpbmVyKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgwLDAsMjUsNjAuMSk7DQoNCg0KKGxpYi5tYWluID0gZnVuY3Rpb24obW9kZSxzdGFydFBvc2l0aW9uLGxvb3ApIHsNCgl0aGlzLmluaXRpYWxpemUobW9kZSxzdGFydFBvc2l0aW9uLGxvb3Ase30pOw0KDQoJLy8gdGltZWxpbmUgZnVuY3Rpb25zOg0KCXRoaXMuZnJhbWVfMCA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLmN0YU92ZXIgPSBmdW5jdGlvbiAoZSkgew0KCQkJLy8gU3RhcnQgeW91ciBjdXN0b20gY29kZQ0KCQkJdGhpcy5jdGEuZ290b0FuZFBsYXkoIm92ZXIiKTsNCgkJCS8vIFRoaXMgZXhhbXBsZSBjb2RlIGRpc3BsYXlzIHRoZSB3b3JkcyAiTW91c2VkIG92ZXIiIGluIHRoZSBPdXRwdXQgcGFuZWwuDQoJCQljb25zb2xlLmxvZygiQ1RBOiBtb3VzZSBvdmVyIik7DQoJCQkvLyBFbmQgeW91ciBjdXN0b20gY29kZQ0KCQl9LmJpbmQodGhpcyk7DQoJCQ0KCQl0aGlzLmN0YU91dCA9IGZ1bmN0aW9uIChlKSB7DQoJCQkvLyBTdGFydCB5b3VyIGN1c3RvbSBjb2RlDQoJCQl0aGlzLmN0YS5nb3RvQW5kUGxheSgib3V0Iik7DQoJCQkvLyBUaGlzIGV4YW1wbGUgY29kZSBkaXNwbGF5cyB0aGUgd29yZHMgIk1vdXNlZCBvdXQiIGluIHRoZSBPdXRwdXQgcGFuZWwuDQoJCQljb25zb2xlLmxvZygiQ1RBOiBtb3VzZSBvdXQiKTsNCgkJCS8vIEVuZCB5b3VyIGN1c3RvbSBjb2RlDQoJCX0uYmluZCh0aGlzKTsNCgkJDQoJCQ0KCQkNCgkJdGhpcy5yZXBsYXlPdmVyID0gZnVuY3Rpb24gKGUpIHsNCgkJCS8vIFN0YXJ0IHlvdXIgY3VzdG9tIGNvZGUNCgkJCXRoaXMucmVwbGF5LmdvdG9BbmRQbGF5KCJvdmVyIik7DQoJCQkvLyBUaGlzIGV4YW1wbGUgY29kZSBkaXNwbGF5cyB0aGUgd29yZHMgIk1vdXNlZCBvdmVyIiBpbiB0aGUgT3V0cHV0IHBhbmVsLg0KCQkJY29uc29sZS5sb2coInJlcGxheTogbW91c2Ugb3ZlciIpOw0KCQkJLy8gRW5kIHlvdXIgY3VzdG9tIGNvZGUNCgkJfS5iaW5kKHRoaXMpOw0KCQkNCgkJdGhpcy5yZXBsYXlPdXQgPSBmdW5jdGlvbiAoZSkgew0KCQkJLy8gU3RhcnQgeW91ciBjdXN0b20gY29kZQ0KCQkJdGhpcy5yZXBsYXkuZ290b0FuZFBsYXkoIm91dCIpOw0KCQkJLy8gVGhpcyBleGFtcGxlIGNvZGUgZGlzcGxheXMgdGhlIHdvcmRzICJNb3VzZWQgb3V0IiBpbiB0aGUgT3V0cHV0IHBhbmVsLg0KCQkJY29uc29sZS5sb2coInJlcGxheTogbW91c2Ugb3V0Iik7DQoJCQkvLyBFbmQgeW91ciBjdXN0b20gY29kZQ0KCQl9LmJpbmQodGhpcyk7DQoJCQ0KCQkNCgkJDQoJCWlmICghdGhpcy5jdGEuaGFzRXZlbnRMaXN0ZW5lciAoImNsaWNrIikpIHsNCgkJCXRoaXMuY2F0Y2hhbGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhZEtpdC5leGl0LmNhdGNoYWxsKTsNCgkJCQ0KCQkJdGhpcy5yZXBsYXkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhZEtpdC5yZXBsYXkpOw0KCQkJdGhpcy5yZXBsYXkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwgdGhpcy5yZXBsYXlPdmVyKTsJDQoJCQl0aGlzLnJlcGxheS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIHRoaXMucmVwbGF5T3V0KTsNCgkJCQ0KCQkJdGhpcy5jdGEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhZEtpdC5leGl0LmN0YSk7DQoJCQl0aGlzLmN0YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLCB0aGlzLmN0YU92ZXIpOw0KCQkJdGhpcy5jdGEuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCB0aGlzLmN0YU91dCk7DQoJCQkNCgkJfQ0KCQkNCgkJYWRLaXQuY3JlYXRlQnV0dG9uKHRoaXMucmVwbGF5KTsNCgkJYWRLaXQuY3JlYXRlQnV0dG9uKHRoaXMuY2F0Y2hhbGwpOw0KCQlhZEtpdC5jcmVhdGVCdXR0b24odGhpcy5jdGEpOw0KCX0NCgl0aGlzLmZyYW1lXzEyID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMud2F0Y2gwMS5nb3RvQW5kUGxheSgxKTsNCgl9DQoJdGhpcy5mcmFtZV85MyA9IGZ1bmN0aW9uKCkgew0KCQl0aGlzLndhdGNoMDIuZ290b0FuZFBsYXkoMSk7DQoJfQ0KCXRoaXMuZnJhbWVfMTc0ID0gZnVuY3Rpb24oKSB7DQoJCXRoaXMud2F0Y2gwMy5nb3RvQW5kUGxheSgxKTsNCgl9DQoJdGhpcy5mcmFtZV8yMTQgPSBmdW5jdGlvbigpIHsNCgkJdGhpcy5zdG9wKCk7DQoJfQ0KDQoJLy8gYWN0aW9ucyB0d2VlbjoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcykuY2FsbCh0aGlzLmZyYW1lXzApLndhaXQoMTIpLmNhbGwodGhpcy5mcmFtZV8xMikud2FpdCg4MSkuY2FsbCh0aGlzLmZyYW1lXzkzKS53YWl0KDgxKS5jYWxsKHRoaXMuZnJhbWVfMTc0KS53YWl0KDQwKS5jYWxsKHRoaXMuZnJhbWVfMjE0KS53YWl0KDIpKTsNCg0KCS8vIHJlcGxheQ0KCXRoaXMucmVwbGF5ID0gbmV3IGxpYi5yZXBsYXlDb3B5KCk7DQoJdGhpcy5yZXBsYXkuc2V0VHJhbnNmb3JtKDI5Ny41LDI0LDEsMSwwLDAsMCwxMC41LDIyKTsNCgl0aGlzLnJlcGxheS5hbHBoYSA9IDA7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5yZXBsYXkpLndhaXQoMjA2KS50byh7YWxwaGE6MX0sOCkudG8oe19vZmY6dHJ1ZX0sMSkud2FpdCgxKSk7DQoNCgkvLyBDVEENCgl0aGlzLmN0YSA9IG5ldyBsaWIuQ1RBKCk7DQoJdGhpcy5jdGEuc2V0VHJhbnNmb3JtKDI2NSwyMzIuNSwxLDEsMCwwLDAsNDUsMTEuNSk7DQoJdGhpcy5jdGEuYWxwaGEgPSAwOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuY3RhKS53YWl0KDMzKS50byh7eDoyNDkseTo1NzUuNX0sMCkud2FpdCgxKS50byh7cmVnWDo0MSxyZWdZOjExLHg6MjQ1LHk6NTc1LGFscGhhOjAuMDEyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wOTh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTY3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI0OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zNH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40Mzd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTM3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYzNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43MzF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODE3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg5MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NDl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTg3fSwwKS53YWl0KDEpLnRvKHtyZWdYOjQ1LHJlZ1k6MTEuNSx4OjI0OSx5OjU3NS41LGFscGhhOjF9LDApLnRvKHtfb2ZmOnRydWV9LDE2Nykud2FpdCgxKSk7DQoNCgkvLyBjYXRjaGFsbA0KCXRoaXMuY2F0Y2hhbGwgPSBuZXcgbGliLl9jYXRjaCgpOw0KCXRoaXMuY2F0Y2hhbGwuc2V0VHJhbnNmb3JtKDMwMCwyNTAsMTIsMTAsMCwwLDAsMjUsMjUpOw0KCXRoaXMuY2F0Y2hhbGwuYWxwaGEgPSAwLjAxMjsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmNhdGNoYWxsKS50byh7X29mZjp0cnVlfSwyMTUpLndhaXQoMSkpOw0KDQoJLy8gY29weSAzIGxuIDMNCgl0aGlzLmluc3RhbmNlID0gbmV3IGxpYi5jM18yKCk7DQoJdGhpcy5pbnN0YW5jZS5zZXRUcmFuc2Zvcm0oNDksNzMuOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZS5hbHBoYSA9IDA7DQoNCgl0aGlzLmluc3RhbmNlXzEgPSBuZXcgbGliLmMzXzMoKTsNCgl0aGlzLmluc3RhbmNlXzEuc2V0VHJhbnNmb3JtKDY5LDEyNy45LDEsMSwwLDAsMCw1MiwxMi45KTsNCgl0aGlzLmluc3RhbmNlXzEuYWxwaGEgPSAwOw0KCXRoaXMuaW5zdGFuY2VfMS5fb2ZmID0gdHJ1ZTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh7fSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlfV19KS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfMX1dfSwxNzQpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV8xfV19LDEpLnRvKHtzdGF0ZTpbXX0sMjApLndhaXQoMSkpOw0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzEpLndhaXQoMTc0KS50byh7X29mZjpmYWxzZX0sMCkud2FpdCgxKS50byh7cmVnWDo1NCxyZWdZOjQwLjEseDo3MSx5OjE1NS4xLGFscGhhOjAuMDA3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAyNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNTV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDk1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE0M30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xOTh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjU5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMyNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zOTR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDY0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjUzNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42MDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc0MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44MDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODU3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkwNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NDV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk5M30sMCkud2FpdCgxKS50byh7cmVnWDo1MixyZWdZOjEyLjkseDo2OSx5OjEyNy45LGFscGhhOjF9LDApLnRvKHtfb2ZmOnRydWV9LDIwKS53YWl0KDEpKTsNCg0KCS8vIGNvcHkgMyBsbiAyDQoJdGhpcy5pbnN0YW5jZV8yID0gbmV3IGxpYi5jM18yKCk7DQoJdGhpcy5pbnN0YW5jZV8yLnNldFRyYW5zZm9ybSg0OSw3My45LDEsMSwwLDAsMCw1MiwxMi45KTsNCgl0aGlzLmluc3RhbmNlXzIuYWxwaGEgPSAwOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMikud2FpdCgxNzIpLnRvKHt4OjY5LHk6MTI3Ljl9LDApLndhaXQoMSkudG8oe3JlZ1g6NjYuMyxyZWdZOjE4LHg6ODMuMyx5OjEzMyxhbHBoYTowLjAwN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDU1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA5NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNDN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTk4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI1OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zMjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzk0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ2NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41MzZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjA2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODAyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg1N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC45MDV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTQ1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45OTN9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6NjkseToxMjcuOSxhbHBoYToxfSwwKS50byh7X29mZjp0cnVlfSwyMikud2FpdCgxKSk7DQoNCgkvLyBjb3B5IDMgbG4gMQ0KCXRoaXMuaW5zdGFuY2VfMyA9IG5ldyBsaWIuYzNfMSgpOw0KCXRoaXMuaW5zdGFuY2VfMy5zZXRUcmFuc2Zvcm0oMzEuMiw1NS45LDEsMSwwLDAsMCwzNS4yLDEyLjkpOw0KCXRoaXMuaW5zdGFuY2VfMy5hbHBoYSA9IDA7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8zKS53YWl0KDE3MCkudG8oe3g6NTIuMix5OjEwMy45fSwwKS53YWl0KDEpLnRvKHtyZWdYOjczLjgscmVnWToxNS42LHg6OTAuOCx5OjEwNi42LGFscGhhOjAuMDA3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAyOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNjF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTA0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE1Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjgyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjM1Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40MjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41NzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjQ4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjcxOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43ODR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODQ0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg5Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45Mzl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTcyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk5M30sMCkud2FpdCgxKS50byh7cmVnWDozNS4yLHJlZ1k6MTIuOSx4OjUyLjIseToxMDMuOSxhbHBoYToxfSwwKS50byh7X29mZjp0cnVlfSwyNSkud2FpdCgxKSk7DQoNCgkvLyBtY193YXRjaDAzDQoJdGhpcy53YXRjaDAzID0gbmV3IGxpYi53YXRjaDMoKTsNCgl0aGlzLndhdGNoMDMuc2V0VHJhbnNmb3JtKDEzMiwzMTEuNSwxLDEsMCwwLDAsNTMsOTAuNSk7DQoJdGhpcy53YXRjaDAzLmFscGhhID0gMDsNCgl0aGlzLndhdGNoMDMuX29mZiA9IHRydWU7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy53YXRjaDAzKS53YWl0KDE2NykudG8oe19vZmY6ZmFsc2V9LDApLndhaXQoMSkudG8oe3JlZ1g6MTE5LjUscmVnWToxMjMseDoxOTEuNCx5OjM0NCxhbHBoYTowLjE4M30sMCkud2FpdCgxKS50byh7eDoxODcuMixhbHBoYTowLjI5fSwwKS53YWl0KDEpLnRvKHt4OjE4My45LGFscGhhOjAuMzc0fSwwKS53YWl0KDEpLnRvKHt4OjE4MS4yLGFscGhhOjAuNDQ0fSwwKS53YWl0KDEpLnRvKHt4OjE3OC44LGFscGhhOjAuNTA2fSwwKS53YWl0KDEpLnRvKHt4OjE3Ni43LGFscGhhOjAuNTZ9LDApLndhaXQoMSkudG8oe3g6MTc0LjgsYWxwaGE6MC42MDl9LDApLndhaXQoMSkudG8oe3g6MTczLGFscGhhOjAuNjUzfSwwKS53YWl0KDEpLnRvKHt4OjE3MS40LGFscGhhOjAuNjk0fSwwKS53YWl0KDEpLnRvKHt4OjE3MCxhbHBoYTowLjczMX0sMCkud2FpdCgxKS50byh7eDoxNjguNyxhbHBoYTowLjc2NX0sMCkud2FpdCgxKS50byh7eDoxNjcuNCxhbHBoYTowLjc5Nn0sMCkud2FpdCgxKS50byh7eDoxNjYuMyxhbHBoYTowLjgyNX0sMCkud2FpdCgxKS50byh7eDoxNjUuMyxhbHBoYTowLjg1MX0sMCkud2FpdCgxKS50byh7eDoxNjQuNCxhbHBoYTowLjg3NX0sMCkud2FpdCgxKS50byh7eDoxNjMuNSxhbHBoYTowLjg5N30sMCkud2FpdCgxKS50byh7eDoxNjIuOCxhbHBoYTowLjkxNn0sMCkud2FpdCgxKS50byh7eDoxNjIuMSxhbHBoYTowLjkzNH0sMCkud2FpdCgxKS50byh7eDoxNjEuNSxhbHBoYTowLjk0OX0sMCkud2FpdCgxKS50byh7eDoxNjEsYWxwaGE6MC45NjJ9LDApLndhaXQoMSkudG8oe3g6MTYwLjUsYWxwaGE6MC45NzR9LDApLndhaXQoMSkudG8oe3g6MTYwLjIsYWxwaGE6MC45ODN9LDApLndhaXQoMSkudG8oe3g6MTU5LjksYWxwaGE6MC45OX0sMCkud2FpdCgxKS50byh7eDoxNTkuNyxhbHBoYTowLjk5Nn0sMCkud2FpdCgxKS50byh7eDoxNTkuNSxhbHBoYTowLjk5OX0sMCkud2FpdCgxKS50byh7cmVnWDo1MyxyZWdZOjkwLjUseDo5Myx5OjMxMS41LGFscGhhOjF9LDApLnRvKHtfb2ZmOnRydWV9LDIyKS53YWl0KDEpKTsNCg0KCS8vIGNvcHkgMiBsbiAzDQoJdGhpcy5pbnN0YW5jZV80ID0gbmV3IGxpYi5jMl8zKCk7DQoJdGhpcy5pbnN0YW5jZV80LnNldFRyYW5zZm9ybSg2NCw1NS45LDEsMSwwLDAsMCw1MiwxMi45KTsNCgl0aGlzLmluc3RhbmNlXzQuYWxwaGEgPSAwOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfNCkud2FpdCg5NikudG8oe3g6NjkseToxMDMuOX0sMCkud2FpdCgxKS50byh7cmVnWDoyNi40LHJlZ1k6NjYseDo0My40LHk6MTU3LGFscGhhOjAuMDA3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAyNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDk3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjY0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMzfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjM5OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NzF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTQyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYxM30sMCkud2FpdCgxKS50byh7YWxwaGE6MC42ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzQ2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjgwNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NjF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTA4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTk0fSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjY5LHk6MTAzLjksYWxwaGE6MX0sMCkud2FpdCgzNSkudG8oe3JlZ1g6MjYuNCxyZWdZOjY2LHg6NDMuNCx5OjE1NyxhbHBoYTowLjk5NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTU4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC44ODl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODQ1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc5Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjg2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC41NjZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTA0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ0MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNjJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjA4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE1OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMTR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA0NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMDV9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6NjkseToxMDMuOSxhbHBoYTowfSwwKS50byh7X29mZjp0cnVlfSw0MCkud2FpdCgxKSk7DQoNCgkvLyBjb3B5IDIgbG4gMg0KCXRoaXMuaW5zdGFuY2VfNSA9IG5ldyBsaWIuYzJfMSgpOw0KCXRoaXMuaW5zdGFuY2VfNS5zZXRUcmFuc2Zvcm0oNjQsNTUuOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV81LmFscGhhID0gMDsNCg0KCXRoaXMuaW5zdGFuY2VfNiA9IG5ldyBsaWIuYzJfMigpOw0KCXRoaXMuaW5zdGFuY2VfNi5zZXRUcmFuc2Zvcm0oNjksMTAzLjksMSwxLDAsMCwwLDUyLDEyLjkpOw0KCXRoaXMuaW5zdGFuY2VfNi5hbHBoYSA9IDA7DQoJdGhpcy5pbnN0YW5jZV82Ll9vZmYgPSB0cnVlOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHt9KS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNX1dfSkudG8oe3N0YXRlOlt7dDp0aGlzLmluc3RhbmNlXzZ9XX0sOTQpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDEpLnRvKHtzdGF0ZTpbe3Q6dGhpcy5pbnN0YW5jZV82fV19LDM0KS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W3t0OnRoaXMuaW5zdGFuY2VfNn1dfSwxKS50byh7c3RhdGU6W119LDQyKS53YWl0KDEpKTsNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV82KS53YWl0KDk0KS50byh7X29mZjpmYWxzZX0sMCkud2FpdCgxKS50byh7cmVnWDo2NS44LHJlZ1k6MzkuNix4OjgyLjgseToxMzAuNixhbHBoYTowLjAwN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMjZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDU3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA5N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjAyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI2NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zM30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zOTl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDcxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU0Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42MTN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjgxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44MDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODYxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkwOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NDZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk5NH0sMCkud2FpdCgxKS50byh7cmVnWDo1MixyZWdZOjEyLjkseDo2OSx5OjEwMy45LGFscGhhOjF9LDApLndhaXQoMzUpLnRvKHtyZWdYOjY1LjgscmVnWTozOS42LHg6ODIuOCx5OjEzMC42LGFscGhhOjAuOTk1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk4MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NTh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTI3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg4OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NDV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzk2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc0M30sMCkud2FpdCgxKS50byh7YWxwaGE6MC42ODZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjI3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU2Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41MDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDQxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjM4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI2Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMDh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTU5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjExNH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDQ0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAwNX0sMCkud2FpdCgxKS50byh7cmVnWDo1MixyZWdZOjEyLjkseDo2OSx5OjEwMy45LGFscGhhOjB9LDApLnRvKHtfb2ZmOnRydWV9LDQyKS53YWl0KDEpKTsNCg0KCS8vIGNvcHkgMiBsbiAxDQoJdGhpcy5pbnN0YW5jZV83ID0gbmV3IGxpYi5jMl8xKCk7DQoJdGhpcy5pbnN0YW5jZV83LnNldFRyYW5zZm9ybSg2NCw1NS45LDEsMSwwLDAsMCw1MiwxMi45KTsNCgl0aGlzLmluc3RhbmNlXzcuYWxwaGEgPSAwOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfNykud2FpdCg5MikudG8oe3g6NjkseToxMDMuOX0sMCkud2FpdCgxKS50byh7cmVnWDo3MS44LHJlZ1k6MTgseDo4OC44LHk6MTA5LGFscGhhOjAuMDA3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjAyNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDk3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjY0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMzfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjM5OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NzF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTQyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYxM30sMCkud2FpdCgxKS50byh7YWxwaGE6MC42ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzQ2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjgwNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NjF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTA4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NzV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTk0fSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjY5LHk6MTAzLjksYWxwaGE6MX0sMCkud2FpdCgzNSkudG8oe3JlZ1g6NzEuOCxyZWdZOjE4LHg6ODguOCx5OjEwOSxhbHBoYTowLjk5NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTU4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC44ODl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODQ1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc5Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjg2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC41NjZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTA0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ0MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNjJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjA4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjE1OX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMTR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA0NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMDV9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6NjkseToxMDMuOSxhbHBoYTowfSwwKS50byh7X29mZjp0cnVlfSw0NCkud2FpdCgxKSk7DQoNCgkvLyB3YXRjaDAyDQoJdGhpcy53YXRjaDAyID0gbmV3IGxpYi53YXRjaDIoKTsNCgl0aGlzLndhdGNoMDIuc2V0VHJhbnNmb3JtKDE5MS41LDI3OSwxLDEsMCwwLDAsMjkuNSw4NCk7DQoJdGhpcy53YXRjaDAyLmFscGhhID0gMDsNCgl0aGlzLndhdGNoMDIuX29mZiA9IHRydWU7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy53YXRjaDAyKS53YWl0KDg5KS50byh7X29mZjpmYWxzZX0sMCkud2FpdCgxKS50byh7cmVnWDo2MC41LHJlZ1k6MTM4LjUseDoyMDcuNix5OjMzMy41LGFscGhhOjAuMjY2fSwwKS53YWl0KDEpLnRvKHt4OjE5OS4xLGFscGhhOjAuNDE5fSwwKS53YWl0KDEpLnRvKHt4OjE5My4yLGFscGhhOjAuNTIzfSwwKS53YWl0KDEpLnRvKHt4OjE4OC44LGFscGhhOjAuNjAxfSwwKS53YWl0KDEpLnRvKHt4OjE4NS4zLGFscGhhOjAuNjYzfSwwKS53YWl0KDEpLnRvKHt4OjE4Mi41LGFscGhhOjAuNzE0fSwwKS53YWl0KDEpLnRvKHt4OjE4MC4xLGFscGhhOjAuNzU2fSwwKS53YWl0KDEpLnRvKHt4OjE3OC4xLGFscGhhOjAuNzkyfSwwKS53YWl0KDEpLnRvKHt4OjE3Ni40LGFscGhhOjAuODIzfSwwKS53YWl0KDEpLnRvKHt4OjE3NC45LGFscGhhOjAuODQ5fSwwKS53YWl0KDEpLnRvKHt4OjE3My43LGFscGhhOjAuODcyfSwwKS53YWl0KDEpLnRvKHt4OjE3Mi41LGFscGhhOjAuODkyfSwwKS53YWl0KDEpLnRvKHt4OjE3MS42LGFscGhhOjAuOTF9LDApLndhaXQoMSkudG8oe3g6MTcwLjcsYWxwaGE6MC45MjV9LDApLndhaXQoMSkudG8oe3g6MTcwLGFscGhhOjAuOTM4fSwwKS53YWl0KDEpLnRvKHt4OjE2OS4zLGFscGhhOjAuOTV9LDApLndhaXQoMSkudG8oe3g6MTY4LjgsYWxwaGE6MC45Nn0sMCkud2FpdCgxKS50byh7eDoxNjguMyxhbHBoYTowLjk2OH0sMCkud2FpdCgxKS50byh7eDoxNjcuOSxhbHBoYTowLjk3Nn0sMCkud2FpdCgxKS50byh7eDoxNjcuNSxhbHBoYTowLjk4Mn0sMCkud2FpdCgxKS50byh7eDoxNjcuMixhbHBoYTowLjk4N30sMCkud2FpdCgxKS50byh7eDoxNjcsYWxwaGE6MC45OTF9LDApLndhaXQoMSkudG8oe3g6MTY2LjgsYWxwaGE6MC45OTV9LDApLndhaXQoMSkudG8oe3g6MTY2LjcsYWxwaGE6MC45OTd9LDApLndhaXQoMSkudG8oe3g6MTY2LjYsYWxwaGE6MC45OTl9LDApLndhaXQoMSkudG8oe3g6MTY2LjUsYWxwaGE6MX0sMCkud2FpdCgxKS50byh7cmVnWDoyOS41LHJlZ1k6ODQseDoxMzUuNSx5OjI3OX0sMCkud2FpdCgzMikudG8oe3JlZ1g6NjAuNSxyZWdZOjEzOC41LHg6MTY0LjQseTozMzMuNSxhbHBoYTowLjkxMn0sMCkud2FpdCgxKS50byh7eDoxNjIuMixhbHBoYTowLjgyMn0sMCkud2FpdCgxKS50byh7eDoxNjAuMSxhbHBoYTowLjczMn0sMCkud2FpdCgxKS50byh7eDoxNTcuOSxhbHBoYTowLjY0Mn0sMCkud2FpdCgxKS50byh7eDoxNTUuOCxhbHBoYTowLjU1NX0sMCkud2FpdCgxKS50byh7eDoxNTMuOCxhbHBoYTowLjQ3MX0sMCkud2FpdCgxKS50byh7eDoxNTEuOSxhbHBoYTowLjM5Mn0sMCkud2FpdCgxKS50byh7eDoxNTAuMSxhbHBoYTowLjMxN30sMCkud2FpdCgxKS50byh7eDoxNDguNCxhbHBoYTowLjI0OH0sMCkud2FpdCgxKS50byh7eDoxNDYuOSxhbHBoYTowLjE4NX0sMCkud2FpdCgxKS50byh7eDoxNDUuNixhbHBoYTowLjEyOH0sMCkud2FpdCgxKS50byh7eDoxNDQuNCxhbHBoYTowLjA3OX0sMCkud2FpdCgxKS50byh7eDoxNDMuNCxhbHBoYTowLjAzNn0sMCkud2FpdCgxKS50byh7cmVnWDoyOS41LHJlZ1k6ODQseDoxMTEuNSx5OjI3OSxhbHBoYTowfSwwKS50byh7X29mZjp0cnVlfSw1NCkud2FpdCgxKSk7DQoNCgkvLyBjb3B5IDEgbG4gMg0KCXRoaXMuaW5zdGFuY2VfOCA9IG5ldyBsaWIuYzFfMigpOw0KCXRoaXMuaW5zdGFuY2VfOC5zZXRUcmFuc2Zvcm0oNjksMTAzLjksMSwxLDAsMCwwLDUyLDEyLjkpOw0KCXRoaXMuaW5zdGFuY2VfOC5hbHBoYSA9IDA7DQoJdGhpcy5pbnN0YW5jZV84Ll9vZmYgPSB0cnVlOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfOCkud2FpdCgxNikudG8oe19vZmY6ZmFsc2V9LDApLndhaXQoMSkudG8oe3JlZ1g6MzAuNyxyZWdZOjM5LjYseDo0Ny43LHk6MTMwLjYsYWxwaGE6MC4wMDd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDI4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA2MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTU2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjIxNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yODJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzUyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQyNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU3NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42NDh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzE4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc4NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44NDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODk2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkzOX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45NzJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTkzfSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjY5LHk6MTAzLjksYWxwaGE6MX0sMCkud2FpdCgzOSkudG8oe3JlZ1g6MzAuNyxyZWdZOjM5LjYseDo0Ny43LHk6MTMwLjYsYWxwaGE6MC45OTV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTgxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk1OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45Mjd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODg5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg0Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43OTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzQ0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY4OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC42Mjh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTY3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjUwNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NDN9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzgyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMyMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yNjR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTE1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA3Nn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wNDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDA1fSwwKS53YWl0KDEpLnRvKHtyZWdYOjUyLHJlZ1k6MTIuOSx4OjY5LHk6MTAzLjksYWxwaGE6MH0sMCkudG8oe19vZmY6dHJ1ZX0sMTE3KS53YWl0KDEpKTsNCg0KCS8vIGNvcHkgMSBsbiAxDQoJdGhpcy5pbnN0YW5jZV85ID0gbmV3IGxpYi5jMV8xKCk7DQoJdGhpcy5pbnN0YW5jZV85LnNldFRyYW5zZm9ybSg2OSwxMDMuOSwxLDEsMCwwLDAsNTIsMTIuOSk7DQoJdGhpcy5pbnN0YW5jZV85LmFscGhhID0gMDsNCgl0aGlzLmluc3RhbmNlXzkuX29mZiA9IHRydWU7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV85KS53YWl0KDE0KS50byh7X29mZjpmYWxzZX0sMCkud2FpdCgxKS50byh7cmVnWDo1MS4zLHJlZ1k6MTcuOSx4OjY4LjMseToxMDguOSxhbHBoYTowLjAwN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMjh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDYxfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjEwNH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMjE2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI4Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zNTJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNDI1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTc1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjY0OH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43MTh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNzg0fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjg0NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44OTZ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTM5fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjk3Mn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45OTN9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6NjkseToxMDMuOSxhbHBoYToxfSwwKS53YWl0KDM5KS50byh7cmVnWDo1MS4zLHJlZ1k6MTcuOSx4OjY4LjMseToxMDguOSxhbHBoYTowLjk5NX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC45ODF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuOTU4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjkyN30sMCkud2FpdCgxKS50byh7YWxwaGE6MC44ODl9LDApLndhaXQoMSkudG8oe2FscGhhOjAuODQ2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjc5N30sMCkud2FpdCgxKS50byh7YWxwaGE6MC43NDR9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjg4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjYyOH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC41Njd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNTA1fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjQ0M30sMCkud2FpdCgxKS50byh7YWxwaGE6MC4zODJ9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzIyfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjI2NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xNn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4xMTV9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMDc2fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA0NH0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMDV9LDApLndhaXQoMSkudG8oe3JlZ1g6NTIscmVnWToxMi45LHg6NjkseToxMDMuOSxhbHBoYTowfSwwKS50byh7X29mZjp0cnVlfSwxMTkpLndhaXQoMSkpOw0KDQoJLy8gd2F0Y2gwMQ0KCXRoaXMud2F0Y2gwMSA9IG5ldyBsaWIud2F0Y2gxKCk7DQoJdGhpcy53YXRjaDAxLnNldFRyYW5zZm9ybSgxODUsMjY4LjUsMSwxLDAsMCwwLDg4LDcyLjUpOw0KCXRoaXMud2F0Y2gwMS5hbHBoYSA9IDA7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy53YXRjaDAxKS53YWl0KDEpLnRvKHtyZWdYOjExNyxyZWdZOjE0MS41LHg6MjA5LjkseTozMzcuNSxhbHBoYTowLjA5N30sMCkud2FpdCgxKS50byh7eDoyMDYuOCxhbHBoYTowLjE3M30sMCkud2FpdCgxKS50byh7eDoyMDMuOSxhbHBoYTowLjI0fSwwKS53YWl0KDEpLnRvKHt4OjIwMS4zLGFscGhhOjAuMzAxfSwwKS53YWl0KDEpLnRvKHt4OjE5OSxhbHBoYTowLjM1OH0sMCkud2FpdCgxKS50byh7eDoxOTYuNyxhbHBoYTowLjQxMX0sMCkud2FpdCgxKS50byh7eDoxOTQuNyxhbHBoYTowLjQ2fSwwKS53YWl0KDEpLnRvKHt4OjE5Mi43LGFscGhhOjAuNTA2fSwwKS53YWl0KDEpLnRvKHt4OjE5MC45LGFscGhhOjAuNTQ5fSwwKS53YWl0KDEpLnRvKHt4OjE4OS4yLGFscGhhOjAuNTl9LDApLndhaXQoMSkudG8oe3g6MTg3LjYsYWxwaGE6MC42Mjh9LDApLndhaXQoMSkudG8oe3g6MTg2LjEsYWxwaGE6MC42NjN9LDApLndhaXQoMSkudG8oe3g6MTg0LjcsYWxwaGE6MC42OTZ9LDApLndhaXQoMSkudG8oe3g6MTgzLjQsYWxwaGE6MC43Mjh9LDApLndhaXQoMSkudG8oe3g6MTgyLjIsYWxwaGE6MC43NTd9LDApLndhaXQoMSkudG8oe3g6MTgxLjEsYWxwaGE6MC43ODR9LDApLndhaXQoMSkudG8oe3g6MTgwLGFscGhhOjAuODA5fSwwKS53YWl0KDEpLnRvKHt4OjE3OSxhbHBoYTowLjgzMn0sMCkud2FpdCgxKS50byh7eDoxNzguMSxhbHBoYTowLjg1NH0sMCkud2FpdCgxKS50byh7eDoxNzcuMyxhbHBoYTowLjg3NH0sMCkud2FpdCgxKS50byh7eDoxNzYuNSxhbHBoYTowLjg5Mn0sMCkud2FpdCgxKS50byh7eDoxNzUuOCxhbHBoYTowLjkwOX0sMCkud2FpdCgxKS50byh7eDoxNzUuMixhbHBoYTowLjkyNH0sMCkud2FpdCgxKS50byh7eDoxNzQuNixhbHBoYTowLjkzOH0sMCkud2FpdCgxKS50byh7eDoxNzQuMSxhbHBoYTowLjk1fSwwKS53YWl0KDEpLnRvKHt4OjE3My43LGFscGhhOjAuOTYxfSwwKS53YWl0KDEpLnRvKHt4OjE3My4zLGFscGhhOjAuOTd9LDApLndhaXQoMSkudG8oe3g6MTcyLjksYWxwaGE6MC45Nzh9LDApLndhaXQoMSkudG8oe3g6MTcyLjYsYWxwaGE6MC45ODV9LDApLndhaXQoMSkudG8oe3g6MTcyLjQsYWxwaGE6MC45OX0sMCkud2FpdCgxKS50byh7eDoxNzIuMixhbHBoYTowLjk5NX0sMCkud2FpdCgxKS50byh7eDoxNzIuMSxhbHBoYTowLjk5OH0sMCkud2FpdCgxKS50byh7eDoxNzIsYWxwaGE6MC45OTl9LDApLndhaXQoMSkudG8oe3JlZ1g6ODgscmVnWTo3Mi41LHg6MTQzLHk6MjY4LjUsYWxwaGE6MX0sMCkud2FpdCgzOSkudG8oe3JlZ1g6MTE3LHJlZ1k6MTQxLjUseDoxNzIseTozMzcuNSxhbHBoYTowLjkwNX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC44MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC43MTh9LDApLndhaXQoMSkudG8oe2FscGhhOjAuNjI4fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjU0MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC40NTd9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMzc3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjMwMn0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4yMzF9LDApLndhaXQoMSkudG8oe2FscGhhOjAuMTY3fSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjExfSwwKS53YWl0KDEpLnRvKHthbHBoYTowLjA2MX0sMCkud2FpdCgxKS50byh7YWxwaGE6MC4wMjN9LDApLndhaXQoMSkudG8oe3JlZ1g6ODgscmVnWTo3Mi41LHg6MTQzLHk6MjY4LjUsYWxwaGE6MH0sMCkudG8oe19vZmY6dHJ1ZX0sMTI5KS53YWl0KDEpKTsNCg0KCS8vIGJnIHdoaXRlIGNvcHkNCgl0aGlzLmluc3RhbmNlXzEwID0gbmV3IGxpYi5iZygpOw0KCXRoaXMuaW5zdGFuY2VfMTAuc2V0VHJhbnNmb3JtKDE1MCwxMjUsMSwxLDAsMCwwLDE1MCwxMjUpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMTApLndhaXQoNCkudG8oe3g6MTQwfSwwKS53YWl0KDEpLnRvKHtyZWdZOjMwMCx4OjE4Ny44LHk6MzAwfSwwKS53YWl0KDEpLnRvKHt4OjIwNy4xfSwwKS53YWl0KDEpLnRvKHt4OjIyMS40fSwwKS53YWl0KDEpLnRvKHt4OjIzMy4xfSwwKS53YWl0KDEpLnRvKHt4OjI0M30sMCkud2FpdCgxKS50byh7eDoyNTEuN30sMCkud2FpdCgxKS50byh7eDoyNTkuNH0sMCkud2FpdCgxKS50byh7eDoyNjYuMn0sMCkud2FpdCgxKS50byh7eDoyNzIuNH0sMCkud2FpdCgxKS50byh7eDoyNzguMX0sMCkud2FpdCgxKS50byh7eDoyODMuM30sMCkud2FpdCgxKS50byh7eDoyODh9LDApLndhaXQoMSkudG8oe3g6MjkyLjR9LDApLndhaXQoMSkudG8oe3g6Mjk2LjV9LDApLndhaXQoMSkudG8oe3g6MzAwLjJ9LDApLndhaXQoMSkudG8oe3g6MzAzLjd9LDApLndhaXQoMSkudG8oe3g6MzA3fSwwKS53YWl0KDEpLnRvKHt4OjMxMH0sMCkud2FpdCgxKS50byh7eDozMTIuOH0sMCkud2FpdCgxKS50byh7eDozMTUuNH0sMCkud2FpdCgxKS50byh7eDozMTcuOH0sMCkud2FpdCgxKS50byh7eDozMjB9LDApLndhaXQoMSkudG8oe3g6MzIyLjF9LDApLndhaXQoMSkudG8oe3g6MzI0fSwwKS53YWl0KDEpLnRvKHt4OjMyNS44fSwwKS53YWl0KDEpLnRvKHt4OjMyNy40fSwwKS53YWl0KDEpLnRvKHt4OjMyOX0sMCkud2FpdCgxKS50byh7eDozMzAuNH0sMCkud2FpdCgxKS50byh7eDozMzEuN30sMCkud2FpdCgxKS50byh7eDozMzIuOH0sMCkud2FpdCgxKS50byh7eDozMzMuOX0sMCkud2FpdCgxKS50byh7eDozMzQuOX0sMCkud2FpdCgxKS50byh7eDozMzUuN30sMCkud2FpdCgxKS50byh7eDozMzYuNX0sMCkud2FpdCgxKS50byh7eDozMzcuMn0sMCkud2FpdCgxKS50byh7eDozMzcuOH0sMCkud2FpdCgxKS50byh7eDozMzguNH0sMCkud2FpdCgxKS50byh7eDozMzguOH0sMCkud2FpdCgxKS50byh7eDozMzkuMn0sMCkud2FpdCgxKS50byh7eDozMzkuNX0sMCkud2FpdCgxKS50byh7eDozMzkuN30sMCkud2FpdCgxKS50byh7eDozMzkuOX0sMCkud2FpdCgxKS50byh7eDozNDB9LDApLndhaXQoMSkudG8oe3JlZ1k6MTI1LHk6MTI1fSwwKS50byh7X29mZjp0cnVlfSwxKS53YWl0KDE2NykpOw0KDQoJLy8gZm9zc2lsIGxvZ28NCgl0aGlzLmluc3RhbmNlXzExID0gbmV3IGxpYi5hc3VzKCk7DQoJdGhpcy5pbnN0YW5jZV8xMS5zZXRUcmFuc2Zvcm0oMTgsNTY1KTsNCg0KCXRoaXMudGltZWxpbmUuYWRkVHdlZW4oY2pzLlR3ZWVuLmdldCh0aGlzLmluc3RhbmNlXzExKS50byh7X29mZjp0cnVlfSwyMTUpLndhaXQoMSkpOw0KDQoJLy8gZ29vZ2xlU3RvcmVfTG9nbw0KCXRoaXMuaW5zdGFuY2VfMTIgPSBuZXcgbGliLm1jX2dvb2dsZVN0b3JlX0xvZ28oKTsNCgl0aGlzLmluc3RhbmNlXzEyLnNldFRyYW5zZm9ybSgxMDguMiwzNS43LDAuMjA3LDAuMTk2LDAsMCwwLDQyNS40LDgwLjMpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMTIpLndhaXQoMjE2KSk7DQoNCgkvLyBiZyBibHVlDQoJdGhpcy5pbnN0YW5jZV8xMyA9IG5ldyBsaWIuYmx1ZSgpOw0KDQoJdGhpcy50aW1lbGluZS5hZGRUd2VlbihjanMuVHdlZW4uZ2V0KHRoaXMuaW5zdGFuY2VfMTMpLnRvKHtfb2ZmOnRydWV9LDIxNSkud2FpdCgxKSk7DQoNCgkvLyBiZyB3aGl0ZQ0KCXRoaXMuaW5zdGFuY2VfMTQgPSBuZXcgbGliLmJnKCk7DQoJdGhpcy5pbnN0YW5jZV8xNC5zZXRUcmFuc2Zvcm0oMTUwLDEyNSwxLDEsMCwwLDAsMTUwLDEyNSk7DQoNCgl0aGlzLnRpbWVsaW5lLmFkZFR3ZWVuKGNqcy5Ud2Vlbi5nZXQodGhpcy5pbnN0YW5jZV8xNCkudG8oe19vZmY6dHJ1ZX0sMjE1KS53YWl0KDEpKTsNCg0KfSkucHJvdG90eXBlID0gcCA9IG5ldyBjanMuTW92aWVDbGlwKCk7DQpwLm5vbWluYWxCb3VuZHMgPSBuZXcgY2pzLlJlY3RhbmdsZSgtMzIyLjIsLTE2OC45LDE0MzYuOCw5NTUuMSk7DQoNCg0KLy8gc3RhZ2UgY29udGVudDoNCg0KDQoNCihsaWIuaW5kZXggPSBmdW5jdGlvbigpIHsNCgl0aGlzLmluaXRpYWxpemUoKTsNCg0KCS8vIFN0cm9rZQ0KCXRoaXMuc2hhcGUgPSBuZXcgY2pzLlNoYXBlKCk7DQoJdGhpcy5zaGFwZS5ncmFwaGljcy5mKCIjNjY2NjY2IikucygpLnAoIkVnWGJBdTRNQUFBaGR2TUF1MkFBQU1BQUFCZHZnRWdYUkF1dE1BdWlBQUFNQUFBaGRhTWd1aUFBQWciKTsNCgl0aGlzLnNoYXBlLnNldFRyYW5zZm9ybSgxNTAsMzAwKTsNCg0KCS8vIE1haW4NCgl0aGlzLl9tYWluID0gbmV3IGxpYi5tYWluKCk7DQoJdGhpcy5fbWFpbi5zZXRUcmFuc2Zvcm0oMjUsMjUsMSwxLDAsMCwwLDI1LDI1KTsNCg0KCXRoaXMuYWRkQ2hpbGQodGhpcy5fbWFpbix0aGlzLnNoYXBlKTsNCn0pLnByb3RvdHlwZSA9IHAgPSBuZXcgY2pzLkNvbnRhaW5lcigpOw0KcC5ub21pbmFsQm91bmRzID0gbmV3IGNqcy5SZWN0YW5nbGUoLTE3Mi4yLDEzMS4xLDE0MzYuOCw5NTUuMSk7DQoNCn0pKGxpYiA9IGxpYnx8e30sIGltYWdlcyA9IGltYWdlc3x8e30sIGNyZWF0ZWpzID0gY3JlYXRlanN8fHt9KTsNCnZhciBsaWIsIGltYWdlcywgY3JlYXRlanM7
  • jot
  • tap.php
  • Fossil_logo_300x600.png
  • tap.php
  • Google_Store_Fossil_300x600_product_1.png
  • Google_Store_Fossil_300x600_product_2.png
  • 21432_blue_fade_4759.png
  • Google_Store_Fossil_300x600_product_3.png
  • 21432_navy_arrow1_3367.png
  • activeview
  • tap.php

Our browser made a total of 142 requests to load all elements on the main page. We found that 0% of them (0 request) were addressed to the original Microsoft-silverlight.softonic.cn, 10% (14 requests) were made to Screenshots.en.sftcdn.net and 8% (12 requests) were made to S0.2mdn.net. The less responsive or slowest element that took the longest time to load (1.6 sec) relates to the external source Screenshots.en.sftcdn.net.

Additional info on microsoft-silverlight.softonic.cn

Requests

The browser has sent 130 CSS, Javascripts, AJAX and image requests in order to completely render the main page of Microsoft Silverlight Softonic. We recommend that multiple CSS and JavaScript files should be merged into one by each type, as it can help reduce assets requests from 53 to 1 for JavaScripts and as a result speed up the page load time.

53

Javascripts

64

Images

3

CSS

10

AJAX

130

All

Possible request optimization

1

Javascripts

26

Images

3

CSS

10

AJAX

90

Optimized

40

All

Normal result

IP address

Microsoft-silverlight.softonic.cn uses IP address which is currently shared with 4 other domains. The more sites share the same IP address, the higher the host server’s workload is. It is strongly recommended that the host server should be changed or the hosting provider should be requested to give a different (separate) IP address for this domain.

Poor result

IP Trace

microsoft-silverlight.softonic.cn

softonic.com.br

softonic.pl

en.softonic.com

softonic.com

35.227.233.104

DNS records

Type Host Target/ip TTL Other
A

microsoft-silverlight.softonic.cn

35.227.233.104 300

Language and encoding

Normal result

Language

ZH zh language flag

Detected

EN en language flag

Claimed

Encoding

UTF-8

Claimed

Language claimed in HTML meta tag should match the language actually used on the web page. Otherwise Microsoft-silverlight.softonic.cn can be misinterpreted by Google and other search engines. Our service has detected that Chinese is used on the page, and it does not match the claimed English language. Our system also found out that Microsoft-silverlight.softonic.cn main page’s claimed encoding is utf-8. Use of this encoding format is the best practice as the main page visitors from all over the world won’t have any issues with symbol transcription.

HTTPS certificate

SSL Certificate

Microsoft-silverlight.softonic.cn has no SSL certificate. Web browsing can be safer with HTTPS connection, so we suggest that it should be obtained for this site.

Normal result

Visitor World Map

Country of origin for 11.6% of all visits is Malaysia. It lies approximately 8000 miles away from the server location (United States) and such a long distance can negatively affect website speed, as it takes some time for data to travel back and forth between those places. That’s why one of the best ways to speed up Microsoft-silverlight.softonic.cn page load time for the majority of users is moving the server to Malaysia or just closer to the user base.

Poor result

Good result

Social Sharing Optimization

Open Graph data is detected on the main page of Microsoft Silverlight Softonic. This is the best way to make the web page social media friendly. Here is how it looks like on Facebook:

microsoft-silverlight.softonic.cn

Share this report in social media

Analyze another website

Analyze