From fb2219d4ac0925497cae40567d12de028905f9f1 Mon Sep 17 00:00:00 2001 From: r888888888 Date: Mon, 6 Oct 2014 14:20:17 -0700 Subject: [PATCH] integrate ugoira converted into upload flow --- app/logical/downloads/file.rb | 5 + app/logical/pixiv_ugoira_converter.rb | 44 +- app/logical/sources/strategies/pixiv.rb | 25 + app/models/upload.rb | 10 +- .../vcr_cassettes/ugoira-converter.yml | 1078 +++++++++++++++++ test/unit/pixiv_ugoira_converter_test.rb | 44 +- test/unit/upload_test.rb | 15 + 7 files changed, 1167 insertions(+), 54 deletions(-) diff --git a/app/logical/downloads/file.rb b/app/logical/downloads/file.rb index 6270dfcbf..0c201597e 100644 --- a/app/logical/downloads/file.rb +++ b/app/logical/downloads/file.rb @@ -11,6 +11,11 @@ module Downloads @tries = 0 end + def download_ugoira! + converter = PixivUgoiraConverter.new(source, file_path, :webm) + converter.process! + end + def download! http_get_streaming do |response| self.content_type = response["Content-Type"] diff --git a/app/logical/pixiv_ugoira_converter.rb b/app/logical/pixiv_ugoira_converter.rb index b574908c3..d1b176b46 100644 --- a/app/logical/pixiv_ugoira_converter.rb +++ b/app/logical/pixiv_ugoira_converter.rb @@ -1,14 +1,13 @@ class PixivUgoiraConverter attr_reader :agent, :url, :write_path, :format - def initialize(agent, url, write_path, format) - @agent = agent + def initialize(url, write_path, format) @url = url @write_path = write_path @format = format end - def process + def process! folder = unpack(fetch_zipped_body) if format == :gif @@ -78,23 +77,21 @@ class PixivUgoiraConverter end def write_apng(folder) - FileUtils.mkdir_p("pixiv_anim_#{pixiv_id}") + Dir.mktmpdir do |tmpdir| folder.each_with_index do |file, i| - frame_path = File.join("pixiv_anim_#{pixiv_id}", "frame#{"%03d" % i}.png") - delay_path = File.join("pixiv_anim_#{pixiv_id}", "frame#{"%03d" % i}.txt") + frame_path = File.join(tmpdir, "frame#{"%03d" % i}.png") + delay_path = File.join(tmpdir, "frame#{"%03d" % i}.txt") image_blob = file.get_input_stream.read - delay = @frame_data[i]["delay"] - image = Magick::Image.from_blob(image_blob).first - image.format="PNG" - image.write(frame_path) - File.open(delay_path, "wb") do |f| + delay = @frame_data[i]["delay"] + image = Magick::Image.from_blob(image_blob).first + image.format = "PNG" + image.write(frame_path) + File.open(delay_path, "wb") do |f| f.write("delay=#{delay}/1000") end end - system("apngasm pixiv_anim_#{pixiv_id}.png pixiv_anim_#{pixiv_id}/frame*.png") - FileUtils.rm_rf("pixiv_anim_#{pixiv_id}") - - puts "Animation successfully created as pixiv_anim_#{pixiv_id}.png" + system("apngasm -o -F #{write_path} #{tmpdir}/frame*.png") + end end def unpack(zipped_body) @@ -104,11 +101,18 @@ class PixivUgoiraConverter end def fetch_zipped_body - zip_uri, @frame_data = fetch_frames + zip_body = nil + zip_url, @frame_data = fetch_frames - zip_body = Net::HTTP.start(zip_uri.host) do |http| - http.get(zip_uri.path, {"Referer" => "http://pixiv.net"}).body + Downloads::File.new(zip_url, nil).http_get_streaming do |response| + zip_body = response.body end + + zip_body + end + + def agent + @agent ||= Sources::Strategies::Pixiv.new(url).agent end def fetch_frames @@ -123,9 +127,9 @@ class PixivUgoiraConverter javascript = scripts.first.text json = javascript.match(/;pixiv\.context\.ugokuIllustData\s+=\s+(\{.+?\});(?:$|pixiv\.context)/)[1] data = JSON.parse(json) - zip_uri = URI(data["src"].sub("_ugoira600x600.zip", "_ugoira1920x1080.zip")) + zip_url = data["src"].sub("_ugoira600x600.zip", "_ugoira1920x1080.zip") frame_data = data["frames"] - return [zip_uri, frame_data] + return [zip_url, frame_data] else raise "Can't find javascript with frame data" end diff --git a/app/logical/sources/strategies/pixiv.rb b/app/logical/sources/strategies/pixiv.rb index 67d107c82..eb1924d41 100644 --- a/app/logical/sources/strategies/pixiv.rb +++ b/app/logical/sources/strategies/pixiv.rb @@ -57,6 +57,31 @@ module Sources return thumbnail_url end + def agent + @agent ||= begin + mech = Mechanize.new + + phpsessid = Cache.get("pixiv-phpsessid") + if phpsessid + cookie = Mechanize::Cookie.new("PHPSESSID", phpsessid) + cookie.domain = ".pixiv.net" + cookie.path = "/" + mech.cookie_jar.add(cookie) + else + mech.get("http://www.pixiv.net") do |page| + page.form_with(:action => "/login.php") do |form| + form['pixiv_id'] = Danbooru.config.pixiv_login + form['pass'] = Danbooru.config.pixiv_password + end.click_button + end + phpsessid = mech.cookie_jar.cookies.select{|c| c.name == "PHPSESSID"}.first + Cache.put("pixiv-phpsessid", phpsessid.value, 1.month) if phpsessid + end + + mech + end + end + protected # http://i1.pixiv.net/c/600x600/img-master/img/2014/10/02/13/51/23/46304396_p1_master1200.jpg diff --git a/app/models/upload.rb b/app/models/upload.rb index d8f5105c9..17a369ccd 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -321,10 +321,18 @@ class Upload < ActiveRecord::Base source =~ /^https?:\/\// && file_path.blank? end + def is_ugoira? + tag_string =~ /\bugoira\b/i + end + # Downloads the file to destination_path def download_from_source(destination_path) download = Downloads::File.new(source, destination_path) - download.download! + if is_ugoira? + download.download_ugoira! + else + download.download! + end self.file_path = destination_path self.source = download.source end diff --git a/test/fixtures/vcr_cassettes/ugoira-converter.yml b/test/fixtures/vcr_cassettes/ugoira-converter.yml index 5a454b700..6ee3bc384 100644 --- a/test/fixtures/vcr_cassettes/ugoira-converter.yml +++ b/test/fixtures/vcr_cassettes/ugoira-converter.yml @@ -628,4 +628,1082 @@ http_interactions: AAAA http_version: recorded_at: Sun, 05 Oct 2014 22:33:22 GMT +- request: + method: get + uri: http://www.pixiv.net/ + body: + encoding: US-ASCII + string: '' + headers: + Accept: + - ! '*/*' + User-Agent: + - Mechanize/2.7.2 Ruby/1.9.3p327 (http://github.com/sparklemotion/mechanize/) + Accept-Encoding: + - gzip,deflate,identity + Accept-Charset: + - ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Accept-Language: + - en-us,en;q=0.5 + Host: + - www.pixiv.net + Connection: + - keep-alive + Keep-Alive: + - 300 + response: + status: + code: 200 + message: !binary |- + T0s= + headers: + !binary "U2VydmVy": + - !binary |- + bmdpbng= + !binary "RGF0ZQ==": + - !binary |- + TW9uLCAwNiBPY3QgMjAxNCAyMToxOToxNyBHTVQ= + !binary "Q29udGVudC1UeXBl": + - !binary |- + dGV4dC9odG1sOyBjaGFyc2V0PVVURi04 + !binary "VHJhbnNmZXItRW5jb2Rpbmc=": + - !binary |- + Y2h1bmtlZA== + !binary "Q29ubmVjdGlvbg==": + - !binary |- + a2VlcC1hbGl2ZQ== + !binary "VmFyeQ==": + - !binary |- + QWNjZXB0LUVuY29kaW5n + !binary "WC1Ib3N0LVRpbWU=": + - !binary |- + NjM= + !binary "U2V0LUNvb2tpZQ==": + - !binary |- + UEhQU0VTU0lEPWI5MzY1ODliYjM1NjkzN2I5ZjBmN2QxODkwZmZkYzk1OyBl + eHBpcmVzPU1vbiwgMDYtT2N0LTIwMTQgMjI6MTk6MTcgR01UOyBNYXgtQWdl + PTM2MDA7IHBhdGg9LzsgZG9tYWluPS5waXhpdi5uZXQ= + - !binary |- + cF9hYl9pZD01OyBleHBpcmVzPVN1biwgMDYtT2N0LTIwMTkgMjE6MTk6MTcg + R01UOyBNYXgtQWdlPTE1Nzc2NjQwMDsgcGF0aD0vOyBkb21haW49LnBpeGl2 + Lm5ldA== + - !binary |- + cF9hYl9pZD01OyBleHBpcmVzPVN1biwgMDYtT2N0LTIwMTkgMjE6MTk6MTcg + R01UOyBNYXgtQWdlPTE1Nzc2NjQwMDsgcGF0aD0vOyBkb21haW49LnBpeGl2 + Lm5ldA== + !binary "RXhwaXJlcw==": + - !binary |- + VGh1LCAxOSBOb3YgMTk4MSAwODo1MjowMCBHTVQ= + !binary "Q2FjaGUtQ29udHJvbA==": + - !binary |- + bm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hl + Y2s9MCwgcHJlLWNoZWNrPTA= + !binary "UHJhZ21h": + - !binary |- + bm8tY2FjaGU= + !binary "WC1GcmFtZS1PcHRpb25z": + - !binary |- + U0FNRU9SSUdJTg== + !binary "Q29udGVudC1FbmNvZGluZw==": + - !binary |- + Z3ppcA== + body: + encoding: ASCII-8BIT + string: !binary |- + H4sIAAAAAAAAA919WXcbx7XuO39FC1kUyWtiRmPgpENKlKMcy9IxlfhmOVpc + DXQDbAlAw+iGKB7Ha4mkE09x4ngeFCs+nu14iu14th/O+/0RgUBKT/kL99u7 + qhrdIEgCNM9ah1IcqdE17dpz7dpVPXPs1LmTF359flFb8WrVuZEZ+kerGvXK + bMSqR7RS1XDd2YjWMCpWtOQ41ahdN62rEappGSb+qVmeoZVWjKZrebORlleO + 5qmUX694XiNqPdiyr8xG/m/0l/PRk06tYXh2sWqha6fuWXW0ObM4a5kVy29V + N2rWbOSKba02nKYXqLhqm97KbCGX6Kladpo1w4ualmeVPNshsFXfnlW1GitO + 3ZqtO36rRtNpWE1vbTbiVKZc27OWachAq4Z91b7Sp3q5OGU0Gsu2GaibzCTy + yUQincrq2XQu06cVBrFrwF+gESFmKh53nVazZMV4uFjd8uKrq6txruvG+eVy + 1ak4sYpdPpFKJNMJPZXu379puaWm3eiZPHeh2a5m1DWnXrXrlmY0Pdv1gJ9a + rVW3vTVtdcVqWlrNqhWtpquVULPYdFZd1Kybmtsq1mxPW3Wal91J7ZJjo59y + 2S7ZRlWg2PXwnmqWnGrVKDpNw7MwlGihrdreiuZ4GEENEAP4kjcElYHOql0C + Szj16J5EENVrbrCBB3707EYAr+fELOfFLMFtYpY+0vr14npASqtZDXQjyQNq + BGhTWyMhiDVWGpE5wd79eqsbV4otz8N0gBKnGej0Z4lEIWsW94TFM9zLgSY8 + wBITYdpg1o62mvZsX/BajapjmATetA32D1bci81QNy6b4nFo4M4adSBFu584 + ZF8QBZct29Vqy/UOBCl0jGfXK27sILAuOM7lmjEIoEVZ80AwqsYHA/JMvehc + 3R+TbgXVDgRezXJdkOxg0J22LHNf4CBQpVJ8aC7kZpKwIzOe7VWtOSnPXXUF + VS91mPsAq7eLM3FRNaRWLltrUFqmG5Alrj3Z3nyuvfFxe+PL9uYLk+2NN9ub + 77U3vm5vPhb60d78W3vzO671TnvzM7R6Df+0N/42ufXdB9vPfTtZg4E00OSz + 9uaN9uZb7c0n25u/b2+8Mbl079Lk1hPPb7/7oyhFBbynAXpE62hpbGFd5kau + GE12Be6BqlkivXnBrlnarHbXeN1a1U5B+09Mj8zEVfWRGRidy1rTqs5GjKpn + NeuoEYExMG1jNrICw7FiVWFMV5pWGb+FUawFdC47G8TmhL29+oJ5W9MwrGXV + 2R6N14yrUfYXprRsJtG4OtEziue0Sit9R9LIRHXHclfghJRankZaNaJ5aw04 + J2yj41fqZqxml5qO65Q94lyUh6YSNiBl4wrVUSw+gj8zClOEvnKrzjp+fEJ7 + aIRR3XKtJrwNIDgSmeY3eIFOCOVjoc7HRLHRsKmor4FoNkrxS+6y1Ww6TUIp + moyMrALDzmoMDhK9RlsfCKknJjWYxkmNnAcCa0f9eqtanR6xy9r4MVTUjh/n + qtrs7KyWmGhaMKx1jBOPa3c7TqVqtdc/InGACG6+3958EXLRXv9De+NdksPN + 7zqPftNef7G9/kN7/U/t9Tfa62+3N56kJuvv3Pzq2tbLG9uvPNJe/6Dz8Q+d + R9/mQTFmjJnkXHmcp+3CrQIW3FiFx4tBdcSXwZAu3jbcKJSMZ5fiYxMSQkyJ + YD9reCuxJvjRqQH7c1oilkhOgG8F+A/zBM4sFn4arBKjPHKE8BYJoStJvyR+ + 4UXYFcMDoYgF5ivwk/1pRs4unVnUCrFEBJASloeYw5JRNpr2T5vGeHAeNA3t + t7+FSLNVCcxtIjS5xKCTExAOOzXFl8uuVTcVgEHWBQ8+jP9L9C57Qm35zE6r + nmU0RfvSpAYuWG5idbMmfkK3QN3Rc0ACxEhjECjqawwS4gg3NkYaYFJLTPKK + apBOp0fAYAoymsDeYjh4x2AMUthNy21VvUntwUmNFIccyaqXHNP65X1n4CU3 + IP91b3rEa65JZhob0+4KEXXsAad4CcsrbfEKql6EAD004hNde2BkjBTjlBZo + FqM3kyPBnmIwGRXLYy7xO/z5hbP3LPHqZbFq1bhz7QT646pT2kNus9TTL5fE + 8B4wjj08pk11a4fG53qAoNRqNtHvBdljsE6oCFUtmt35FcPtmUv3/eTIxRit + hMZB8zFYu4dHHgRSgQCpmmepe2tc/ppAnxJNskD+ogIoL/kST/SCtKx8wwqX + Xkm2Uq+DXMZ9YCCYCNWP+EUFjaZVs1s1LhiXNBcLQqgZfmDdop3Q7jp2rPs7 + JttpwPnYxMjF6ZGgbDDlWogAlAGpSYL/YKzRclfGR6B8uyIkoQm+IpBCciXr + hN5Rhwmq2RU5Wa37QtQZAebJZp6hhfX4BDPDrEbmDyxxgkjwoKTScUEkCGdp + RRtnM0e8u3vj/nSkfo+HKQmKQ1a5R8GgwrQqAnOLAEVFKb2gKQC5xDtQSviv + 6zEFHQ9vrWq5K5aFEEjIq+i7nCu5brxSdYpGNYbHE8mCYSEwUUqVM+lyolTI + ZgvFXEJPlkpGqVhIJcP+lHvAoZZTPFgmkbYsPZPOJXNlM5c307lcJl3SrUIi + ny2UM+WfOhgsN4+TyqYLekbPlPLFRMHI6NlU2cqUDKuULWcLBYsmNTJzLBp9 + ACYdJjJ/MeQ0Dj9J2+JhzaRumalEulAsZoxsOZ3RjWwxWc5ZeJ1IFlM0vWMP + gBfs8sVolH74IBR+OggFhsFK5XNJ08jm9LSZSevpdFFPpkumUUqZ+ZSR5pBb + CAbwmXS8h5+3Z2F5TlxUyholo1xOJ5JGNp/NGJaeNxDkyqbLejabLXEc7qcM + BF0TRYTLrvNoiKOZOSORKZrZTLGQzJr5ct7MJTOpQqKULCco9LWTvsKB1mAM + /AVEX/m45MardjFOKkl3V+wr3afYJTcyF5DAEBolKSsIa5HTdXGOiAsSDzms + e6WSgQlprhUdcy0e+hWzrfwOEKLRMEcNMVzZhtaguWJpUkfHJ4rJVCalZwp6 + OmEUMhnEoKyykcia5XwZIlQGWgOTH3oginLV1VB6rlRMWvliWTdSetoyTV3X + y6l0Af9LpZI546cNRWpAzilpgu9LVhGap2AUCqVcSdcTuVQuYxVSpPVCA0ka + Yv0paTg0+YxLxtUVxITc+FWzuYNYQdEfAn+eddWLW0wiHUolmUgWiukUhFy3 + kvlSXjcTxYyezEG8IWddEg0FvGCGrphJ9OXNVDJhZE3dgKJOZ4xcwcil9Fyu + UEgXS3gbHG8YVq80ENkjntMzplHIpQyzlE4VTT2TgxwXSxmzXCZKFQvBAdSE + 5kaEF2JCUKpOgzxBcoSNqmtNyyIh2eexWEOJiBf8Jv6bHWH031Ac/TfxiGpW + QhzYqS9xsH2AxqJ6qD12Kq5iBVYrn+HY5WIdOxgmxT4QBKk1CJhkJpnMpxP4 + E5HAYqmvWiFKWjH2adSlsB8UCHhl0JIVyzxT72KkT3329pcrBjmk/A/8jAfg + wY2M+wsdcn00jVYFFQO1TKfUIkTHEDlBaEY64ONjgo3hoqAa+/GoO8YMe8m4 + YshSLjTctXoJpV6zBTJpVJ8c81lNLcfH4DN2x1HuLNxMx3OgPOB/+ut2ePJ+ + 7AILDHhctFzHUj5mOi1gvIStgsu8T2KWwGUIYIipuMGZYH0hp+EurF0wKvdi + a6c7oQcSF6c1N9YwaEFwLxZAWFbD4fMWLEQWrXEE9TSXHLOJcfxNfwiPwsV9 + YAxrPm++VHJadY+cf+xnEclTmUI0PXYR9XvrnnJqhl0nAKi6oCZ2ebguhx36 + u+Ve0yhdRpSblsyikXoT++V99xAFQwNx4Xm4wbRjhoF2NiHYHtYsCNLebbke + TZpCIkHYaEx612XILmwUoIgp9twBHDB2EsF+p/YrownYkpNahA1+BA9rlot/ + 0v0wF2yTRtUGdiRRtzu+v0w5gUKx0omAeyJ12gqsompyv251dIu4imk1wx2L + dwN0kEUHMkAX7sE2Zev+ON8LJdiklBhBSCAstQihcdhss73xIQWn1zfaG39o + r3/SvrZ+86trnVdfQ5CsvbHR3vywvfEJR7Y/41jajZvfIKj2bnv9x/b6++31 + l/sQUthwUKkJLiISkn7AZu9lW+yMQrywDoWbtkw+DMUNiRlCrRBno+p46bea + QE8AmoD75u3dgGuvP8vAYTJPhtm6B00pYJth0AgGYEmyD9NZcXeYR4NcqRH6 + elFD0cWR/aYByQWjgncfGrGuNmwEU6Y07PcmtP+jZf2/Uhn8TGd1/A2+wli6 + tmZhS3wEy1uogKlAdMhxPdrWg4rZqTCCbD/QhB/qO68bAqvbj7zeXke89EWw + SL+5bzBDPDIk2plFGetYvQLx4xMTFL8K/elnm3p1CmkQGXcgwzKh9BaewW8P + YVU8Ig0pW9GaYxrVU/BcEco6afBON7HlPFbgYocZ5haxG5u8hjJsWQuEOkas + KtUh2e+mVcHmt9U8u8Yvqf2SXalrrYZWd1Y1z9Fmis05XtWfXRPwIHj2YAvL + IZdKxUAk89x1oGfmTNWtplHP9zgVDfvlaCYGO8gI/YA/bVxxmshZoDF+gTgU + GQoxwio2VjWjWsVU1pwWzwWjG6apdt8JGJQ0tTJ2651VQk/vHPzeeydxmpvQ + YDJXYFfkqkhwF7mUIABL3vR8/Ip+xEbkIJiVfQaB8hHrOUQ1OQARr3/n+4DN + gaRdcFpFyFJhlIystmJXKKkBLOZUW5S7sCurqT3nXXreQS21eSwzKGjUqn3Z + 6kcqv+sgVgiZRHFK2WCYqTW9VB3vCul9lLoxIE9V7CuWhlwPYLqvJHBfvWAR + lTg/hGHzVgxsqcFDBhIhXZhoL0M50PPYSAbpCSwlqMRLVv2Ss6bV4LAhHUUw + fw+Cum0DukJIydlAqotPzGiXlBrv7VHOjOkjTVIjBLOGvJZarEfDXLGRThQE + l/ary9iVPMY8SvIqhdWDPlvjQcRs0BvtvdGEzKYB56tCUwIO+U9ATF3YldLK + WVKH54XjQ+Pdb/3z2svAByhD7O9gv9LggYGmOmXhSDxpss0kNB55Stg1BTlQ + Qc8kYLLqxzSFaILcW0HyEDz1mkNMrlGqEM14IKgCiE9uP/8+vJCtT7C199HN + 7693nl1vbzxz86tr2y9/s/Xm9e3P/+tf360TgpJbL74FY5W8fe3T2y88S0/t + zX9sXcce4Udb12/Qq/V3tr94rb3xxK0fsD1/TXoP8Hrg+6w/xRuHL7evbRBV + BgLyfwPqmpbIvwmSNIC8zusvYr6dH18id2/jmVtvY0P0zfb6n3lzdKPz0eOd + Hzcl+jgf4XXKVMC26sYjt957/uYPr6PN1j+Awefb66/Q3unvnxL5CUGUof0u + KOsHHCGN926RJHGjvfFf7c2/3vzulc6z8DY+IJeCtmzfJXL6pN5j0D5kKgnz + vgs+ZKfrH91698POR6/QPN//29ZLf6S5Pfbe9nPwdF8mEMhLfoPApFwPyuIg + Jnrh0c6HL956/O+dNx/fevXz9ua3Wy9cxxs8dN58nx7IRX4P+6Oqq1626ufZ + COE0ihQ2BW7IdQm+ihnFZSpadhEqqFrLcFTKdqVF6hMypVydcBO5pDktMwLu + hfzxpr9YZYfr7tU9XB7aTRTNBgYqVqy2yBaI2Et3yr2RGhXhaDiNVtVoYnlM + qmnZayI/ENP0VwLoKrJXnXREYWzPHm3stfIW3jK5YD58gd0TuIwqXMV5GjtC + FiKDRaQGeEYFfXSfESwh0vkvYqUa4S78W0ZUwkszEU4xQ2GI3QIqIxXDdGPh + qAm/IoAx3A6QRWIHZry0dA+VU26HO7VPVAXToGFkJEY29iMt3TgLRVlGxuIU + L5MJE8AKkEs5Ji7nTuA3skbilYYnIi401zriJgDFDx7tH3IZoSZ7RF1MpJFS + FQpUcOhlJ9OJzJsd6JkLE0yEakLhri4BxbblUtXxxsfiqWRKL+QK+fh5SvZd + zmTzV7OJZUSlWC6x3nsAryaxxruIFaBpX4kCBVHDjCaxzYVk3GSqkEkno4mx + iRj8rSWBsvHuWI1WERTA4ijIUVbdQBhLVkYhzTa4+7cv93b7B3MeeK65VP5q + IbFcdhy4XzRTvJjUCrvMFIHhbCJxNGeKgOzVlJ5YDi5/O48/Rfl9lAX4I5kF + REs2PyAsoPKkhtp9CK6n88lCIZvJHzU0sM6Pnj+5/fhjUWk5N1/h3MavhkNC + JpFM5POZZFpPDMv1ShRikv3hoFat+8S6mmSgy9R+TQR/xiOUbr2MzAgK9vTN + aIuEGu8nXDNxeWKB9uDUwYa649EOJGLrONjgbzDKZDUN4WNNZDg3Nd72qzsi + 9j03Y5ebiOKIfcce/YnkUEDeZPVZd2O05XgCGRp3Xzgb1fXTd0dGViysH3Hw + IRFBMg4daaAn3qadjZi2i2Dn2lQdKTnTtJwo2lXk6U+t2KaJAxnYCBIj48EH + RqmNua5ZWp00J93J6qQ98dDqA9WLs/TXb3+LzQB6EIrjobGKV4vxunxsivMh + KH8TuRRQ57S1MT4xiVBb3Zviegi3Q1eR9i/PmlRlZ5DdnUB0fXLkEsrD1s+d + mDSrs9Vjs2Om4Rn3GGvQOifGjiP55a7q1NjY9CVhD2fZTblEVmt2h1EKIpXg + xiYTZb3cZd9lVqfLu5qWS5Nl1rIynD2pbNak2uKYDMA0OaZohJ2PrgWiLV9t + EcvBuzmlcAdXkNfh7zH6iQcwGRogjGAphlmDv8S5ima0aNSRbdmX4CBvY+7X + FKGRlTWsgV1yE7EOA6viQEaDzsRYZkw7X7WQpYTYVaVpwBxjiU9LyCqGghcq + m8Vm4o25mVZ1DmklczNGOI1EBPjdQAYrNr7iNs7hzNi1yt476mKLTB1VoazW + ZSRLNOoVn6MzeWStSD7H89wZWupj80NbvIqDCk2rORM3wMMEVz/YfH+Epai0 + gjXoQQETjfcEThL2JA+zJ2Bg/DJiwGUk3xO2Dogr1cVeCDsthulCEyc6ElfJ + M1mlquMimdqp87bYbERkq4rwQkxx3QIf5mnGoD6sBWa88YnI3H+/OBNHT8A/ + /z3EprXYUFa9q+34TCKVsAzDNMrYTc6m0iYSUxJFMw/3qlBOUraRL01qc1Ms + RlRHCkwkW68qMEMSGNhjJ3FTwkUngIpGM4p4aI2zOGg+3eKWHZVnhHAap+4h + Eg/BQzmEAoIh6klsGsh/XiU4RQ/in25PtBHZciG7aC/rdBcbaueaA9UisANH + fev63xDOwLpaTJULsZMAMaDID1V46d0dFSDkNg5YsQ/Kca/2Jhb02PP5Vhlt + PPyF3lDy9HV6ufk4rd0Dg5iGXV27z6jzHiLGOUW/Ea7jF2F4Vi3rcqju/fxC + k63DlTmSFKp9lmJL6Ltv9SYvAANw3Mcv+ldmmJebyXywPrZXcaaAgO8/QDJf + 6al+d/+aCHRZgZrnxXqVjr+pt8gAR9rMRHjCZWuAhqe5EjftMrniT7XjAOfC + azpmS5zh4r0MHE0RZyt3FoWZFXnHHCnYtTpxNA0Y1AsaWJ+HiQo1oZh2ZiWp + 6vGxGeLmlSSJhHotoy9UABFR4Rn6d0YcbJNHIMTZQH8W/qE3KWZy3ayVePcX + iydkhkRd7LaQmxUEF8cGrSrsFiLAXrRkISt+ToUgWy7FMoVyPiZ1VWCioTYz + tprAMpkjzW3QJokbreBMG3wmOf+ZuIATdlZVxxm9OQfWqHeyiH/WsNfhrTgw + 4ufPLV2IaOIInsgzo3MGtGoGdbDVFDhIwltBy2UD2Ungdz67ooZSL0XOG+Cy + 6w0EajlUEZEOnsZn/iKgHXT7FQOBmNkI+2h7VodF8msH+WmZecCHBn0MRUMF + MNqF8L4PxU7LyR82zeJEkwFIF3R0dqUT8WKrQfQ5QaePdmJtV9beFxtBZJWc + xhq8H2/M1S5BFCgqjw0k16ZQIHx+q+FKLN0nNyexOYcjbtrp+xYX5VYBNkEo + 5eSwsElul9QpkPteQ8fsexTV1WId58kQJIUewRk1iulo2K+3mtgRLmH7he39 + QIzBGAjJ7Q7dxlV61G4fPXZPeAtY+RYhUQqovZH9dJiiFvmEAY29mwYbStTF + IryvutZo1YYdMhzR2ykly6zZ9xUJiQo+ES4U+hHW53eQ4u5hUXFkn0VIKXFY + PVY/h0wvqcv30ERyD+R/ry5SIRucKUduVLTo4Nh/bSqZalydhjzs5lYtcgxY + M1aRPIAAkspVwdIe51MMF7kFnMCA4DHvDiNDnj0tl8MA2Mal3XOyGbR+Ufos + LnG1t9aSlXpdQ01sqsxGlovIsru8v1oL7GKfFzvQh6zZdjJFdyG22kQauFjF + BeJfpFJlAK2I5MlKEwbTFDcwTP3sdOp05nR2mhZgUaMKsz9VQljLak73EA6n + hKcbCObD6ZzSmYikZGW3lCbWnPpZuUwpvqDvL/w8WIrNyGNkWKkgfkcxfmQl + 1YUpkpGcGG2ILoUojhoUsqELSCB3yN2hCI/auqBtd8wTPSJxigZb4iNyNJga + gqM7XZvQRUfPLlgEGFOXbMSr5l2XXBxUnht5iJz7yL/JLbcIkidlkNUtIbPB + iDnNSmRS1CEPlSrcbxWXAK18TaFZ1YrSsEMHkpE+LRo3sMlQ97AjOM/LGLTg + gWlo1e0S7xvKcm6FUsGVew6ADOGI2HNkN84lb9eapV3CynGIiTn7kNqRtJq1 + ZRf7kvXKwwIsDIC8ruYatAtccBqFEr0QcjGFA76zYYRQQSlv/iovtOrCeTJ5 + M07Q+wvay+CqbmaPRR10R3eRprqNqtWaL/K+expe78A1wYrnnLgHhcJ04poX + dir5VpTuvQnkCGLtF4TXH04eYiNYUmr5smpV0SHCcPeLB4o5sqOFblKhbszA + dTRz/7x2fV5DTBu+mbhsRua3ECuD24/989pfZGavZtg1TrRDTjZlWmocRkZG + i7cGXoeMq1VcwIPyIfbXlrxwU0u1OPCBYzB0g4C/mGsgBTMinBo6uzsbQe4+ + jpYl0npOvSZVAcFAnK42G2mvP3Hze2TPIpXyo/MnKY3g5Y3OY9/K/AMcX0di + BaXiIsn1EU5+QFLEOpJXtj58o/PVV5QUEUo8FSkFyDN4pPPXzztPIzUDbZ9r + r7/AI+DoO2Ww/PPat6FRNp6RKQt0PP5G5wc0+ZjSOil99qO2v6WDar9/6tb7 + HyLblzJkKOcX9QEYjtP/lXNAHkHn2/945dbr6AFFPNz6k//67gZIPeBylFG6 + Z3URilz2HH9RSpHSANVwg1J4OFLOPkdfcqPMLytOldKzOYzOgy4zu+G4a0Qu + k7u/5VIZVDauVq16hXZVUrqOm6uI80RPsxGxLjhzSsMaaxGZuQg27PRrGrjy + qhuqCCKFSkixDAKpX1Us6Kmpj40QlOlUD5DnVdMwilTAhTYVBDbUGzn3e4jV + fdAQABILgH5TdI0rVhSCUnE8BgxBeArDqAEFyO5lultJRCdgEkqXceUMuqcn + qEk5KGK79+HUNl0fBQFDQF/0w8KqdJVIWdglXkIeBGXhh3wX9TIyd5qB1ATJ + FP5PcFR8oO4ZU2wefKacHU2d9tHkulUVjlniUA7scaUOswDbDC+isqJR3sU4 + T2FCBOMDikh5sfwqwN8hrdSiC6MChWxx6554GQhnSBXfEwig7MFwICDgpMNO + 21V2BmdY7al4lVBxSgnuif+eOAjtkeJEOfVLKTzVZUFbABsUBCGuMlRFVeE2 + IYUSHB4SN+rl36yrnPdE+yXoRS5KZayyB0+KY3tCjH1CYgwfDoUjtrIEemm/ + bHRDeyGihMcTk0VQkO4ikaP1XfNiusrshe2rbMrhzNUVcoagQWw/ZAm9Ao6j + xO/QUldAMRcm0lEKKkq2UAHBHtaQSBaqQmklSWKJctVSkXhXBJeL0f3xqhan + O4geEDPXoXvqQl5XoBTDUGq0NPih8/XkxypweZePrYasSQnmsxHOjJNv5BZ+ + OoNNfI6U0CZWlDrAxYm0pU0cgpFDOqACC9eCuHCDHT10waHwJR+qFHzH4CAR + I6snkL+USyZwBj4FM5cuyK74qiWkUVRt3Bzg71WFnCfpSKkQ4E7YfKG0eaM6 + BLdfVqyEMNtvCxE5UciNwmE7CsbRciKO3VNWxf+J5Aa6tMJzGpewXDvOmR74 + jXzk465VoROJuK8RT8ehTnAVSxmJx81lrsW6gHvksloZFb3LOFxRP17HbRe4 + hSCdyOl6IZsitKtsDdxQKTZb5IhRnP8zYNs4nbC78mX93sLdhqIymdAmjhyi + p+AetdCIgWvsTvC6g261atWOQ9lNixvuaIaZbBq3IaThhzClRUGUTHi3pAcK + NbpckCDwJk6twLzSAFHOT5f9iaa46w8XbA2j5XmpIoQ41B1duia9izN8ZSXE + tCcXwE4FNjtKcaSGXUXiFFIBKtGaQbub9BhHhlwmnkzEE5l4IhtP5OKJQlzN + eLmRgH2hqkikS8QuNZA1gNvBZiNhccjpSqBUHgEduyKq9kscGJIo2VQmp7z9 + MFFkyR1NFD2eTMb1QlxPEFF4xgMShUkgePl/gCrpdD4Pb7ifqIiSI0aV5LCi + AnpAYJgqjIsBqZJFikWYKPnDk5RcMp3pS5OsKLmjaQJJycbThXgyz5JCMx6Q + JnpO2WQlKPm8fkjaCxcqZJVyDGsvWXKH0wQSAvOi54gmPOMBaUL2pkdQktlC + 7rCoUkD2U19J0UXJnU6VDElKRmeq0IwHpEphJ1GITodj6DO4FUbRPCwqsuSO + Jgp8MFj5JHliEBWe8YBEIQPSY1J0viroEJyvTCapK4PVQxNRcsRoMqxHDJMC + 3ZUWNKEZD0gT+No9NKE3hyMneiarK4MVpoksuaNpopPTRT5xWpgU4GJQmhTS + PTRJ4osAh0SUbD5J0eE+/rAsOWJEGc4fhu+Vi6f0uC58L8LFgERJ4lKeHqrk + skhCP5Slo54iR64fUWTJESPKsNorlY6nUvG0kBTCxcBEoe0Y5mXlEeNuv+wh + UYXWh/0X9LLkDqcKxVdS8QQ7XzzjAamS98OWPlEOL8qSxtlBZbLCRkWWHDGi + DKe/eCWPAFhaEIVwMSBR+kVZsEd9SKKSzRVyymiFqSJLjhhVhlNgbFWwnE/z + 6pFnPCBVdrpf+cyhqa+UDgPVz6hAUqjkiNHkgJLCRoVnPCBN+khKLnFYRNFJ + S/Uliiw5YkQZTlAycVj6dEq6XzzjAYmCLRil9ZVRSWUObaWSzevwGvqJiiw5 + YlQZTlRYfVGQmEWFZzwgVZL6Dqqwn3w4XnE2gTPy/akiSu5wqiRgUVLkgtGG + Cs14QKrsjLNApR1WRDKTzezif8mSO5ooHPyCX5xiS88zHpAofeLEeR2f9juU + 9WM6k8n3lxRZcocTJZGkLeF0kiSFZzwgUXI7Ii3wYw+JJnohk+sfkZQlR4wm + w1l6RL+wmwJB4UALz3hAmuR37tEfXug+nS9k+ke/ZMkRI8pwhh4mHqF7RIqz + LCiEiwGJksOqpCfOksjyGfzDiN3n03nVfXjxmBEldzhRUojaJ2hLhfZTaMYD + EiWJXK1eqpBDdkg2JZ1OKpc7TJW0KLnDqUIpE4l4OsOiQjMekCpQVgptaqWS + xlckDokq+ETLLplfsuSIUWU4q4L1I8LEqXiKFRjPeECqYPnYS5VkFj7T4ciK + jmus+vtfsuSIUWU4swJbj5VjUsoKz3hAquRyCmtKVKDTDk2BpXR/y6ZHgYmS + O5ooIlKMfRXeEkbUKTVo7gSuY+ulSiqTPyyqZPL44lbfRb0sOWJUGVqBwdKn + KNWIjT1wMaCo6FkVNlSikgceD0d9we1Iqs3NsKTIkiNGk2HVVzIdR6wFaS0U + aCFcDEqTnHJbfZrAIwvQxL9fi7KzOUE6Speh+ieF+Ie6TU0laVdxRV6V4s3q + MBLV4hx3PMymE6OLudH53GghNbqYHs3jv4J8mD8lHxZO8kNqdD6j3qTlmwXI + cTqx/c4zuOOJzhDSJ6nxxWq6sjIYiRgMlvmqWXeMldh/Wk0cEA3+Gr6v07hl + Dkez8PfB2uIAFu60WavTNYiin7j/e/geKzjrbeBskfh3+Pa/OPeLc4zxxGgB + BMuP5nV+ALXwBgsnqtC+9vSt3z3dvvbn4fs/+3M4lPhr+JZLZ+5bvBfbfuLf + 4dtfOMcnJZC3pZ4O0AeuF7TpAip8VmfuQvfH8D2NnlwcBbencrip7f99d/xn + +HbbtHuAbkiSiFRno6fwUQpXkQ6EApHkywMRSvW0o+eTSz19n1z6CXArWqjh + kr9aGl3Mji7kRheS/KDTM97Mp0cXoDhypDXmYT8wPdUW8/vV0taXn2598eXW + G3/ffvy9w4RndDEzujDPCglg6aN5gdrA2De/eXPri/WfMCbPPTm6ILRgEmLG + b1KjC0JBQh2e9vHDM2+vf0+33ouPhx9EDFV3EHEwEAZQOlkqXrxZUEVCFQvp + B9b5kvs32xsfkP7dY2xaOPY1BIGxgU59lLQ/9Mw8Uxw/8RIUz9P7wryqLLDe + +d2Ht574tPPWo7c+fGWvscmWHeLYDER6dF5A49MFmMM6DCjpAYs+5w7SbD72 + k3hiCNyMLgJtBcYWHiA6oB2anwbf9IOv894rnXe+7fzp4y58bO/F3aiDWVBF + FzAQJLRAQ6bApBCRxOgCOAZmHu/ZggBt88KuEw9RncJJUlqoQ/IEzkMrsD+w + mwVGR+ezsitiCVCSEPz1t/GtTz7ffv4TfN8AhN+6fm37i42tT7/Zeuzt+NYT + X3QnUvWPqu7tjQTg98EAPZOj84uMu1P0TGgFE7L+KUBfZ0fTABIwY746zzEz + WugRTcCFWwg6T63jCwpbr/1jqvP4F9vP3diLWSmTeHdmTZJkYMwCQ0fIWxhd + yDP4KDoF9Kw/gW+IbL2KyxWe2hUPewujL/94UI5X1zkTiiA9WhBFqCOmDDkA + ZgAWirISIImNFMAFZPgcBvlo8Ndw7cNzfMs4vj+Bux1wKcSzu8K6qwcpBwNf + y1F9WIXmDAqmUKGQWeE/wngo11IiD0Ar6H259v1Q6CBfL9KNre3NP9EENp9i + ucYHxPAxDfifuDYcF49C2OGOvoXZ4vB5N6ockqO9aXwQ3A6Oz71pj7EVPqFC + 5KwVpX0CQ6nIIkFpoFqxRR7907dPNt8jYosPjGzga3K4m/WRXfGxH40lKD5n + gZA9wFERDfweMZQYe/OFg4+ncCDZBOP581OrFKgmwXddfhE8RcxFoHzMN9CC + 1cHwjzFf4KMw3x0EJqH7MR6UOnSiAAU4F1wdlFLFwwv+OqkAH7nzu3dvv4DP + vnzK8vcoL5O+Th0QktNSA4EZChA0qHWoQnhgnT890fnyL50fvj5Yv9Bj+I8U + 2qnReUwsT/4dmQ7M+fToAiSm8+qrW395/dbfP79947Ndx4B07qY9ob3ROxgW + KEx0rTdeSl72KauUBDl3nbdf2LoGmQYLg7dwt/Durt0eUg0snZIODdk2zA9u + K3gWM8b8FkZJajrff9r59NPbb7x6+9UDSQomhwU1VBUv0ci0wpSdZj2NMWCj + YB1wqXLn6T9v//jc7Ze/3xWHe0gjxoBFZmMN/U9CD2MN6cCo7JMTt2299Nft + 577d+uytrTeeOeAYBfYD2NOW3A5cCXkDU8CLwQVAN795sr2JLz/9uOsYlBS6 + iyXFPOB0oEeIFjubxMfCHwGb4BksACCwvGD7Dz6kB7a50t4Im4YPcHUee6Lz + yZ87b312+9E/dj7Ht5b+dEBrxjDNAyZJSMzyOt2Cvev89qTTvKI8ufOYDTNF + XggsPAVmE1h30qPCrUFAZevj525vvNF5+qnOp7/rvPle58Onu2MfwCUEawCT + EGGwDDwpiMfWF5/fev2NbqeDu2fM2XC6wNNQxYLfwBpwg8SCbGE+Mrf91mvb + H7y19eSz+KDawcYgeIWtF+4VezME+PYXX0DyYegP2O+iZCRmLXT3wx/BMAfp + y4/A+ELOkBaSP/+PyByiMJBuLAV//h8H7FusuiB4UL8L6PCJT29+9e0B+4Kr + DGceAnYSigl9PfVM5w+4XH8Xl2gPZgYsoDrrTDiXUkKgP2GkGQswQLTAEM43 + eG2eFhvEKMTYdNsCBv/y9dub7269/HHn6R/gf996//nttz6kooPAA8WAVTkE + B4NiblBHt9df3r5+44B9oRfMzZd+wA1FBJhvP4qFzbvbf33uYP1i5UJOC/qF + xabuPvpg68aBDAtMB/4Dtn2NCAbBapJVIy1EYP1vf/0j9N/NHz/qPPv4weCF + MSF+AbGxZFR+jL/+INEX0gibfPvbZ259gqUDFhOv4SMA3fF8JcUPvdfiyesq + y1XH8Ka0JkVYp3EnGt9QistP8O1icbWluIrIvxMPN7P4gW5ceyKuP+zeeI4b + OenTbnxHF+4dDV4FFb63XNzB6F90xncxwkIFLt6h26/khxhC/YgrpSj27rbw + PR7Xk1czypvexLVr/i1voWumlhg4DRdQ4ePAbs9w+ExKE6+CeAqC33tbUatY + wxc81e3xYtpR3ENH16KGLpYSHYpvaKl1j387jngdhsQvlN9XQ6ky3OrqFtwY + 7wHJ+K7Ibvn+si0um0XNyNzCuXMXfj6+/cnrnade4osG8WkruG/4+iM4Bx89 + xDMu+fsDvvzEX498UtxgFhwW9wuZdilwT8W+Q6N6ZI7jyvgoTmkN3xdo4GIa + gxm0p2dc+TVc39xA9X6SWvfr1qrH6NL9kiM+Ucf3tzNAuJLIqe47AWobmTvp + 8IeW8CkiVzuJN/0GAtNVTQwDbluL4eM1caseH3a0YB+4OpN6lEP3G9HGJ28d + 3FfJVybRiPvORrTAWowun3ycLoTcePZf34EDoDiwPMW3QD/713dSXfEtVLt9 + Dgi3XnWHNYr4HIMQ93l6VBd9dg1bmHvl1xC6HeB2nxpvhGHTgB7pC7S/dEP7 + Rfv0gA84XDFKawIIvtRdvNAaDm6zXWPs7fX9oC4s8qtJoqeTpH9KHoAZogdW + WiWFEBOfV/JsfHwJN/jyKN2eWCcTmo/Txf/TGplfeXvfhXP//utz2i/mz8/f + q7SRUBNSOeHWXtYp+K6M+qAX33yJD3Ks4bszRlR+g4YvYJSb8nRLKa68jSSs + UiKbwHYoDlQmC6Vc1sqkzKxVtMxC2ciauLCSz13WZHUzlbfKhVI+byazxWwi + lS6US2hl6EYZD2Va46mrswgq+mAaqT/6ktnc/wfsUejMMp4AAA== + http_version: + recorded_at: Mon, 06 Oct 2014 21:19:34 GMT +- request: + method: post + uri: http://www.pixiv.net/login.php + body: + encoding: UTF-8 + string: mode=login&return_to=%2F&pixiv_id=&pass=&skip=1 + headers: + Accept: + - ! '*/*' + User-Agent: + - Mechanize/2.7.2 Ruby/1.9.3p327 (http://github.com/sparklemotion/mechanize/) + Accept-Encoding: + - gzip,deflate,identity + Accept-Charset: + - ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Accept-Language: + - en-us,en;q=0.5 + Cookie: + - !binary |- + UEhQU0VTU0lEPWI5MzY1ODliYjM1NjkzN2I5ZjBmN2QxODkwZmZkYzk1OyBw + X2FiX2lkPTU= + Host: + - www.pixiv.net + Referer: + - &70232407743320 !ruby/object:URI::HTTP + scheme: http + user: + password: + host: www.pixiv.net + port: 80 + path: / + query: + opaque: + registry: + fragment: + parser: + Content-Type: + - application/x-www-form-urlencoded + Content-Length: + - '47' + Connection: + - keep-alive + Keep-Alive: + - 300 + response: + status: + code: 303 + message: See Other + headers: + Server: + - nginx + Date: + - Mon, 06 Oct 2014 21:19:18 GMT + Content-Type: + - text/html; charset=UTF-8 + Content-Length: + - '188' + Connection: + - keep-alive + X-Host-Time: + - '141' + Location: + - https://www.secure.pixiv.net/login.php?return_to=http%3A%2F%2Fwww.pixiv.net%2F + X-Frame-Options: + - SAMEORIGIN + body: + encoding: US-ASCII + string: ! 'Redirecting to https://www.secure.pixiv.net/login.php?return_to=http%3A%2F%2Fwww.pixiv.net%2F. + +' + http_version: + recorded_at: Mon, 06 Oct 2014 21:19:34 GMT +- request: + method: get + uri: https://www.secure.pixiv.net/login.php?return_to=http://www.pixiv.net/ + body: + encoding: US-ASCII + string: '' + headers: + Accept: + - ! '*/*' + User-Agent: + - Mechanize/2.7.2 Ruby/1.9.3p327 (http://github.com/sparklemotion/mechanize/) + Accept-Encoding: + - gzip,deflate,identity + Accept-Charset: + - ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Accept-Language: + - en-us,en;q=0.5 + Cookie: + - !binary |- + UEhQU0VTU0lEPWI5MzY1ODliYjM1NjkzN2I5ZjBmN2QxODkwZmZkYzk1OyBw + X2FiX2lkPTU= + Host: + - www.secure.pixiv.net + Referer: + - *70232407743320 + Connection: + - keep-alive + Keep-Alive: + - 300 + response: + status: + code: 200 + message: !binary |- + T0s= + headers: + !binary "U2VydmVy": + - !binary |- + bmdpbng= + !binary "RGF0ZQ==": + - !binary |- + TW9uLCAwNiBPY3QgMjAxNCAyMToxOToxOSBHTVQ= + !binary "Q29udGVudC1UeXBl": + - !binary |- + dGV4dC9odG1sOyBjaGFyc2V0PVVURi04 + !binary "VHJhbnNmZXItRW5jb2Rpbmc=": + - !binary |- + Y2h1bmtlZA== + !binary "Q29ubmVjdGlvbg==": + - !binary |- + a2VlcC1hbGl2ZQ== + !binary "WC1Ib3N0LVRpbWU=": + - !binary |- + MTM4 + !binary "RXhwaXJlcw==": + - !binary |- + VGh1LCAxOSBOb3YgMTk4MSAwODo1MjowMCBHTVQ= + !binary "Q2FjaGUtQ29udHJvbA==": + - !binary |- + bm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hl + Y2s9MCwgcHJlLWNoZWNrPTA= + !binary "UHJhZ21h": + - !binary |- + bm8tY2FjaGU= + body: + encoding: ASCII-8BIT + string: !binary |- + PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIiBjbGFzcz0iIj4KPGhl + YWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgaHR0cC1lcXVpdj0i + WC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KPG1ldGEgbmFt + ZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPTk3MCI+CjxtZXRhIG5hbWU9 + ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9InRlbGVwaG9uZT1ubyI+Cjxt + ZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9InBpeGl2Ij4K + PG1ldGEgcHJvcGVydHk9ImZiOmFwcF9pZCIgY29udGVudD0iMTQwODEwMDMy + NjU2Mzc0Ij4KPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJo + dHRwczovL3NvdXJjZS5zZWN1cmUucGl4aXYubmV0L3d3dy9pbWFnZXMvcGl4 + aXZfbG9nby5naWY/MjAxMzA1MjMiPgo8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVz + Y3JpcHRpb24iIGNvbnRlbnQ9InBpeGl2IGlzIGFuIG9ubGluZSBhcnRpc3Qg + Y29tbXVuaXR5IHdoZXJlIG1lbWJlcnMgY2FuIGJyb3dzZSBhbmQgc3VibWl0 + IHdvcmtzLCBqb2luIG9mZmljaWFsIGNvbnRlc3RzLCBhbmQgY29sbGFib3Jh + dGUgb24gd29ya3Mgd2l0aCBvdGhlciBtZW1iZXJzLiI+Cgo8bWV0YSBuYW1l + PSJhcHBsaWNhdGlvbi1uYW1lIiBjb250ZW50PSJwaXhpdiI+CjxtZXRhIG5h + bWU9Im1zYXBwbGljYXRpb24tdG9vbHRpcCIgY29udGVudD0iT25saW5lIEFy + dGlzdCBDb21tdW5pdHkiPgo8bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLXN0 + YXJ0dXJsIiBjb250ZW50PSJodHRwOi8vd3d3LnBpeGl2Lm5ldC9teXBhZ2Uu + cGhwIj48bWV0YSBuYW1lPSJtc2FwcGxpY2F0aW9uLW5hdmJ1dHRvbi1jb2xv + ciIgY29udGVudD0iIzAwOTZkYiI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRp + b24tdGFzayIgY29udGVudD0ibmFtZT1TdWJtaXQ7YWN0aW9uLXVyaT1odHRw + Oi8vd3d3LnBpeGl2Lm5ldC91cGxvYWQucGhwO2ljb24tdXJpPWh0dHBzOi8v + c291cmNlLnNlY3VyZS5waXhpdi5uZXQvd3d3L2ltYWdlcy9pY28vdXBsb2Fk + LmljbyI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tdGFzayIgY29udGVu + dD0ibmFtZT1NYW5hZ2UgV29ya3M7YWN0aW9uLXVyaT1odHRwOi8vd3d3LnBp + eGl2Lm5ldC9tZW1iZXJfaWxsdXN0LnBocDtpY29uLXVyaT1odHRwczovL3Nv + dXJjZS5zZWN1cmUucGl4aXYubmV0L3d3dy9pbWFnZXMvaWNvL3NldHRpbmdz + LmljbyI+CjxtZXRhIG5hbWU9Im1zYXBwbGljYXRpb24tdGFzayIgY29udGVu + dD0ibmFtZT1Cb29rbWFya3M7YWN0aW9uLXVyaT1odHRwOi8vd3d3LnBpeGl2 + Lm5ldC9ib29rbWFyay5waHA7aWNvbi11cmk9aHR0cHM6Ly9zb3VyY2Uuc2Vj + dXJlLnBpeGl2Lm5ldC93d3cvaW1hZ2VzL2ljby9ib29rbWFya3MuaWNvIj4K + PG1ldGEgbmFtZT0ibXNhcHBsaWNhdGlvbi10YXNrIiBjb250ZW50PSJuYW1l + PUluYm94O2FjdGlvbi11cmk9aHR0cDovL3d3dy5waXhpdi5uZXQvbXNnYm94 + LnBocDtpY29uLXVyaT1odHRwczovL3NvdXJjZS5zZWN1cmUucGl4aXYubmV0 + L3d3dy9pbWFnZXMvaWNvL21lc3NhZ2VzLmljbyI+CjxtZXRhIG5hbWU9Im1z + YXBwbGljYXRpb24tdGFzayIgY29udGVudD0ibmFtZT1GZWVkO2FjdGlvbi11 + cmk9aHR0cDovL3d3dy5waXhpdi5uZXQvc3RhY2MvO2ljb24tdXJpPWh0dHBz + Oi8vc291cmNlLnNlY3VyZS5waXhpdi5uZXQvd3d3L2ltYWdlcy9pY28vc3Rh + Y2MuaWNvIj4KCjx0aXRsZT5bcGl4aXZdIExvZ2luPC90aXRsZT4KPG1ldGEg + bmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9InBpeGl2LOODlOOCr+OCt+ODlizj + gqTjg6njgrnjg4gs44Kk44Op44K544OI44Os44O844K344On44OzLOODnuOD + s+OCrCzmvKvnlLssbWFuZ2Es44Kz44Of44Ol44OL44OG44KjLFNOUyzmipXn + qL8s44Kz44Oz44OG44K544OIIj4KPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24i + IGNvbnRlbnQ9InBpeGl2IGlzIGFuIG9ubGluZSBhcnRpc3QgY29tbXVuaXR5 + IHdoZXJlIG1lbWJlcnMgY2FuIGJyb3dzZSBhbmQgc3VibWl0IHdvcmtzLCBq + b2luIG9mZmljaWFsIGNvbnRlc3RzLCBhbmQgY29sbGFib3JhdGUgb24gd29y + a3Mgd2l0aCBvdGhlciBtZW1iZXJzLiI+Cgo8c2NyaXB0Pgp2YXIgcGFnZUxv + YWRTdGFydFRpbWUgPSArKG5ldyBEYXRlKTsKPC9zY3JpcHQ+Cgo8bGluayBy + ZWw9ImFsdGVybmF0ZSIgbWVkaWE9ImhhbmRoZWxkIiBocmVmPSJodHRwOi8v + bS5waXhpdi5uZXQvbG9naW4ucGhwP3JldHVybl90bz1odHRwJTNBJTJGJTJG + d3d3LnBpeGl2Lm5ldCUyRiI+CjxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBtZWRp + YT0ib25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KSIgaHJlZj0i + aHR0cDovL3RvdWNoLnBpeGl2Lm5ldC9sb2dpbi5waHA/cmV0dXJuX3RvPWh0 + dHAlM0ElMkYlMkZ3d3cucGl4aXYubmV0JTJGIiA+Cgo8bGluayByZWw9InNo + b3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIg + aHJlZj0iaHR0cHM6Ly9zc2wucGl4aXYubmV0L2Zhdmljb24uaWNvIj4KCgoK + Cgo8c2NyaXB0PgpuZXcgZnVuY3Rpb24oKSB7Cgp2YXIgdXNlcl9pZCA9ICIi + Owp2YXIgc2VydmljZSA9ICd3d3cuc2VjdXJlLnBpeGl2Lm5ldCc7CnZhciBh + cGkgPSAnaHR0cHM6Ly93d3cuc2VjdXJlLnBpeGl2Lm5ldC9ycGMvanNfZXJy + b3IucGhwJzsKCgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2Us + IHVybCwgbGluZSkgewp3aW5kb3cub25lcnJvciA9IG51bGw7CmlmICghdXJs + ICYmIGxpbmUgPT09IDApcmV0dXJuOwoKLy8gR29vZ2xl44Gu44K544Kv44Oq + 44OX44OI44GM44Ko44Op44O85Ye644GX44G+44GP44Gj44Gm44KL44Gu44Gn + 5LiA5pmC55qE44Gr5a++5YemCmlmICh1cmwuaW5kZXhPZignaHR0cHM6Ly9h + cGlzLmdvb2dsZS5jb20vXy9zY3MvYXBwcy1zdGF0aWMvJykgPT09IDApIHsK + aWYgKE1hdGgucmFuZG9tKCkgPiAwLjAxKSByZXR1cm47Cn0KCi8vIElFOeOB + jOOCqOODqeODvOWHuuOBl+OBvuOBj+OBo+OBpuOCi+OBruOBp+S4gOaZguea + hOOBq+WvvuWHpgppZiAobWVzc2FnZSA9PT0gIm51bGwiICYmIGxpbmUgPT09 + IDEgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJ + RSA5LjAiKSA+PSAwKSB7CmlmIChNYXRoLnJhbmRvbSgpID4gMC4wMSkgcmV0 + dXJuOwp9CgovLyBTYWZhcmnjgYzjgqjjg6njg7zlh7rjgZfjgb7jgY/jgaPj + gabjgovjga7jgafkuIDmmYLnmoTjgavlr77lh6YKaWYgKChtZXNzYWdlID09 + PSBudWxsIHx8IG1lc3NhZ2UgPT09ICJudWxsIikgJiYgbGluZSA9PT0gMCAm + JiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmki + KSA+PSAwKSB7CmlmIChNYXRoLnJhbmRvbSgpID4gMC4wMSkgcmV0dXJuOwp9 + CgoKd2luZG93Ll9zZW5kKG1lc3NhZ2UsIHVybCwgbGluZSk7Cgp9OwoKd2lu + ZG93Ll90aW1lID0gZnVuY3Rpb24oaHRtbF9lbmRfc2VjLCBkb21fcmVhZHlf + c2VjLCBvbmxvYWRfc2VjKSB7CndpbmRvdy5fc2VuZCgnanNfdGltZScsIGxv + Y2F0aW9uLmhyZWYsIDAsIGh0bWxfZW5kX3NlYywgZG9tX3JlYWR5X3NlYywg + b25sb2FkX3NlYyk7Cn0KCndpbmRvdy5fc2VuZCA9IGZ1bmN0aW9uKG1lc3Nh + Z2UsIHVybCwgbGluZSwgaHRtbF9lbmRfc2VjLCBkb21fcmVhZHlfc2VjLCBv + bmxvYWRfc2VjKSB7CnZhciByZXN1bHQsIHEsIGUgPSB3aW5kb3cuZW5jb2Rl + VVJJQ29tcG9uZW50Owp0cnkgewppZiAoJycgKyBtZXNzYWdlID09PSAnW29i + amVjdCBFdmVudF0nKSB7Cm1lc3NhZ2UgPSBbCid0eXBlOiAnICsgbWVzc2Fn + ZS50eXBlLAonJyArIG1lc3NhZ2UudGFyZ2V0ID09PSAnW29iamVjdCBIVE1M + U2NyaXB0RWxlbWVudF0nID8KJ3RhcmdldDoge3NyYzogJyArIG1lc3NhZ2Uu + dGFyZ2V0LnNyYyArICd9JyA6Cid0YXJnZXQ6ICcgKyBtZXNzYWdlLnRhcmdl + dCwKJ2N1cnJlbnRUYXJnZXQ6ICcgKyBtZXNzYWdlLmN1cnJlbnRUYXJnZXQs + CidldmVudFBoYXNlOiAnICsgbWVzc2FnZS5ldmVudFBoYXNlLApdLmpvaW4o + JywgJyk7Cn0KcSA9IFsKJ3NlcnZpY2U9JyArIGUoc2VydmljZSksCidtZXNz + YWdlPScgKyBlKG1lc3NhZ2UpLAondXJsPScgKyBlKHVybCksCidsaW5lPScg + KyBlKGxpbmUpLAonbG9jYXRpb249JyArIGUobG9jYXRpb24uaHJlZiksCid1 + c2VyX2lkPScgKyBlKHVzZXJfaWQpLAoncHJlbWl1bT0nICsgKHdpbmRvdy5w + aXhpdiAmJiBwaXhpdi51c2VyID8gKyEhcGl4aXYudXNlci5wcmVtaXVtIDog + JycpCl07Cmh0bWxfZW5kX3NlYyA9PT0gdW5kZWZpbmVkIHx8IHEucHVzaCgK + J2h0bWxfZW5kX3NlYz0nICsgZShodG1sX2VuZF9zZWMpLAonZG9tX3JlYWR5 + X3NlYz0nICsgZShkb21fcmVhZHlfc2VjIHx8IDApLAonb25sb2FkX3NlYz0n + ICsgZShvbmxvYWRfc2VjIHx8IDApCik7Cm5ldyBJbWFnZSgpLnNyYyA9IGFw + aSArICc/JyArIHEuam9pbignJicpOwp9CmNhdGNoIChlcnJvcikgewpuZXcg + SW1hZ2UoKS5zcmMgPSBhcGkgKyAnP3NlcnZpY2U9JyArIGUoc2VydmljZSkg + KyAnJm1lc3NhZ2U9JyArIGUoJ3NlbmQgZXJyb3I6ICcgKyBlcnJvci5tZXNz + YWdlKSArICcmbGluZT0nICsgZShlcnJvci5saW5lIHx8ICcnKTsKfQp9Owp9 + Owo8L3NjcmlwdD4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRw + czovL3NvdXJjZS5zZWN1cmUucGl4aXYubmV0L3d3dy9jc3MvZ2xvYmFsLmNz + cz8xOWFlNDA4YzJmNDNmMGM5NjY5YjcwNTFjY2FjYjkyMSI+CjxsaW5rIHJl + bD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBp + eGl2Lm5ldC93d3cvY3NzL2dsb2JhbF8yLmNzcz80MDNlZTU0MzcxN2ZkNzhk + Mzc3NDNjNWU5MDg2OWY0ZiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl + Zj0iaHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2Lm5ldC93d3cvY3NzL2Fw + cC5jc3M/MjYzOTU0NTRjOGIwOWE0NTYyZmU0Y2FlYzZmNjk5ZTEiPgoKPCEt + LVtpZiBJRSA4XT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRw + czovL3NvdXJjZS5zZWN1cmUucGl4aXYubmV0L3d3dy9jc3MvaWUuY3NzP2Qx + NWVkMjAzOWJiNGE2ZjM0NWE2YjFmN2U1ZWQwMWIyIj4KPCFbZW5kaWZdLS0+ + CjwhLS1baWYgSUUgOV0+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i + aHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2Lm5ldC93d3cvY3NzL2llOS5j + c3M/ZTI4NzFkYTY3NTNkNDM1MzNiNTEzY2RhYzJkODJhMzgiPgo8IVtlbmRp + Zl0tLT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Nv + dXJjZS5zZWN1cmUucGl4aXYubmV0L3d3dy9jc3MvdGVzdC5jc3M/YzZhY2Fm + ZjMwMWE2ODY0YWU1OGE2Mzc2M2Y1NjY2YzAiPgo8bGluayByZWw9InN0eWxl + c2hlZXQiIGhyZWY9Imh0dHBzOi8vc291cmNlLnNlY3VyZS5waXhpdi5uZXQv + d3d3L2Nzcy9wcmUtbG9naW4uY3NzPzA4MWQ3YTA0YmQ2NGI5MTZkOGY4ZDcx + NDI5MGMxZjAzIj4KCgo8IS0tW2lmIElFIDhdPgo8c2NyaXB0IHNyYz0iaHR0 + cHM6Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2Lm5ldC93d3cvanMvbGliL2h0bWw1 + c2hpdi9odG1sNXNoaXYuanMiPjwvc2NyaXB0Pgo8IVtlbmRpZl0tLT4KPCEt + LVtpZiBndGUgSUUgOV0+PCEtLT4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc291 + cmNlLnNlY3VyZS5waXhpdi5uZXQvd3d3L2pzL2xpYi9zdmc0ZXZlcnlib2R5 + L3N2ZzRldmVyeWJvZHkuaWU4LmpzIj48L3NjcmlwdD4KPCEtLTwhW2VuZGlm + XS0tPgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2 + Lm5ldC93d3cvanMvZmlsZXMvbGliLm1pbi5qcz9iMTI0MjU0OTUzMGE5NDQ5 + NmRlZmEwNmRmOGY0NTZmMyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRw + czovL3NvdXJjZS5zZWN1cmUucGl4aXYubmV0L3d3dy9qcy9maWxlcy9jb2xv + bi5taW4uanM/NTdjYjFlOGJmNWEyNTNlZGQ1NTVmMjM5MzkzMjIxN2EiPjwv + c2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBp + eGl2Lm5ldC93d3cvanMvZmlsZXMvYXBwLm1pbi5qcz8xZDJkOGNlYjQwMzlh + OTljN2M1NTA3Mjc0ZTkyMDhjMiI+PC9zY3JpcHQ+CjwhLS1baWYgbHRlIElF + IDldPgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2 + Lm5ldC93d3cvanMvbGliL2FqYXhob29rcy94ZHIuanMiPjwvc2NyaXB0Pgo8 + IVtlbmRpZl0tLT4KPHNjcmlwdCBzcmM9Imh0dHBzOi8vc291cmNlLnNlY3Vy + ZS5waXhpdi5uZXQvd3d3L2pzL3RleHQvZW4uanM/NWYzNDEwMTliMzIxZGE1 + ZTE4Yzg1ZDBiNDUxNzgyYTAiPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9Imh0 + dHBzOi8vc291cmNlLnNlY3VyZS5waXhpdi5uZXQvd3d3L2pzL2ZpbGVzL3By + ZS1sb2dpbi5taW4uanM/OGQyMTBhNmQ1YTc0MzM0YTc5YTcyNTc3OTkzYmNk + NWEiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zb3VyY2Uuc2Vj + dXJlLnBpeGl2Lm5ldC93d3cvanMvZ3BsdXMuanM/NTRkYTk3MmFkYzMyYmQ1 + NDdkNzFiYzRkZmY3YzU1YjkiPjwvc2NyaXB0PgoKPHNjcmlwdD4KcGl4aXYu + ZGV2ZWxvcG1lbnQgPSBmYWxzZTsKcGl4aXYuc291cmNlUGF0aCA9ICJodHRw + czpcL1wvc291cmNlLnNlY3VyZS5waXhpdi5uZXRcL3d3d1wvIjsKcGl4aXYu + Y29tbW9uU291cmNlUGF0aCA9ICJodHRwczpcL1wvc291cmNlLnNlY3VyZS5w + aXhpdi5uZXRcL2NvbW1vblwvIjsKcGl4aXYuY29udGV4dC5pbWZJbGx1c3RF + bmJsZWRUaW1lU3RhbXAgPSAiMTQxMTgzMDAwMCIKcGl4aXYuY29udGV4dC5p + bWZNYW5nYUVuYmxlZFRpbWVTdGFtcCA9ICIxNDExODMwMDAwIgo8L3Njcmlw + dD4KPHNjcmlwdD4KcGl4aXYudXNlci5sb2dnZWRJbiA9IGZhbHNlOwo8L3Nj + cmlwdD4KPHNjcmlwdD4KCnZhciBfZ2FxID0gX2dhcSB8fCBbXTsKCihmdW5j + dGlvbigpIHsKICB2YXIgZ2EgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz + Y3JpcHQnKTsgZ2EudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOyBnYS5hc3lu + YyA9IHRydWU7CiAgZ2Euc3JjID0gKCdodHRwczonID09IGRvY3VtZW50Lmxv + Y2F0aW9uLnByb3RvY29sID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyAn + c3RhdHMuZy5kb3VibGVjbGljay5uZXQvZGMuanMnOwogIHZhciBzID0gZG9j + dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyBzLnBh + cmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdhLCBzKTsKfSkoKTsKCgoKCl9nYXEu + cHVzaChbJ19zZXRBY2NvdW50JywgJ1VBLTE4MzAyNDktMyddKTsKX2dhcS5w + dXNoKFsnX3NldERvbWFpbk5hbWUnLCAncGl4aXYubmV0J10pOwoKaWYgKHdp + bmRvdy5waXhpdiAmJiBwaXhpdi50cmFja2luZyAmJiBwaXhpdi50cmFja2lu + Zy5VUkwpIHsKX2dhcS5wdXNoKFsnX3RyYWNrUGFnZXZpZXcnLCBwaXhpdi50 + cmFja2luZy5VUkxdKTsKfSBlbHNlIHsKX2dhcS5wdXNoKFsnX3RyYWNrUGFn + ZXZpZXcnXSk7Cn0KCgoKaWYgKHdpbmRvdy5waXhpdikgewppZiAocGl4aXYu + dXNlciAmJiBwaXhpdi51c2VyLmxvZ2dlZEluKSB7Cl9nYXEucHVzaChbJ19z + ZXRDdXN0b21WYXInLCAxLCAibG9naW4iLCAieWVzIiwgM10pOwpfZ2FxLnB1 + c2goWydfc2V0Q3VzdG9tVmFyJywgMywgInBsYW4iLCBwaXhpdi51c2VyLnBy + ZW1pdW0gPyAicHJlbWl1bSIgOiAibm9ybWFsIiwgMV0pOwpfZ2FxLnB1c2go + Wydfc2V0Q3VzdG9tVmFyJywgNSwgImdlbmRlciIsIHBpeGl2LnVzZXIuZ2Vu + ZGVyLCAxXSk7Cl9nYXEucHVzaChbJ19zZXRDdXN0b21WYXInLCA2LCAidXNl + cl9pZCIsIHBpeGl2LnVzZXIuaWQsIDFdKTsKfSBlbHNlIHsKX2dhcS5wdXNo + KFsnX3NldEN1c3RvbVZhcicsIDEsICJsb2dpbiIsICJubyIsIDNdKTsKfQoK + KGZ1bmN0aW9uKCkgewovLyDjgq/jg4Pjgq3jg7zjgYLjgozjgbDjgIHkuIDl + m57jgafjgoLjg63jgrDjgqTjg7PjgZfjgZ/kurrjgajjgb/jgarjgZkKaWYg + KHBpeGl2LnVzZXIgJiYgY29sb24uc3RvcmFnZSkgewp2YXIgY29va2llX25h + bWUgPSAnbG9naW5fZXZlcic7CgppZiAoY29sb24uc3RvcmFnZS5jb29raWUo + Y29va2llX25hbWUpKSB7Ly8g5LiA5bqm44Gn44KC44Ot44Kw44Kk44Oz44GX + 44Gf44GT44Go44GC44KLCl9nYXEucHVzaChbJ19zZXRDdXN0b21WYXInLCAy + LCAibG9naW4gZXZlciIsICJ5ZXMiLCAxXSk7Cgp9IGVsc2UgaWYgKHBpeGl2 + LnVzZXIubG9nZ2VkSW4pIHsgLy8g44Ot44Kw44Kk44Oz44GX44Gm44KLCmNv + bG9uLnN0b3JhZ2UuY29va2llKGNvb2tpZV9uYW1lLCAneWVzJywgewpleHBp + cmVzOiAxMDAwICogNjAgKiA2MCAqIDI0ICogMzY1ICogNSwgLy8gNSB5ZWFy + cwpkb21haW46IGxvY2F0aW9uLmhvc3RuYW1lCn0pOwpfZ2FxLnB1c2goWydf + c2V0Q3VzdG9tVmFyJywgMiwgImxvZ2luIGV2ZXIiLCAieWVzIiwgMV0pOwoK + fSBlbHNlIHsgLy8g44Ot44Kw44Kk44Oz44GX44Gf44GT44Go54Sh44GE44GX + 44CB44Ot44Kw44Kk44Oz44GX44Gm44KC44Gq44GECl9nYXEucHVzaChbJ19z + ZXRDdXN0b21WYXInLCAyLCAibG9naW4gZXZlciIsICJubyIsIDFdKTsKfQp9 + Cn0gKCkpCn0KCgoKCgoKCgoKCgoKCgo8L3NjcmlwdD4KPHNjcmlwdD4KCmlm + ICh3aW5kb3cucGl4aXYgJiYgIXBpeGl2LnRleHQpIHBpeGl2LnRleHQgPSB7 + fTsKCgpwaXhpdi50ZXh0Lm1vZGFsRGVmYXVsdENhcHRpb24gPSAnQW5kIG90 + aGVyIGNvbnZlbmllbnQgZmVhdHVyZXMhJzsKCnBpeGl2LnRleHQucmVnaXN0 + ZXJNeXBpeGl2ID0gJ1NpZ24gdXAgbm93IHRvIDxicj5zZW5kIE15IHBpeGl2 + IHJlcXVlc3RzIHRvIG90aGVyIHVzZXJzISc7CnBpeGl2LnRleHQubG9naW5N + eXBpeGl2ICAgID0gJ0xvZyBpbiB0byBwaXhpdiBub3cgdG8gPGJyPnNlbmQg + TXkgcGl4aXYgcmVxdWVzdHMgdG8gb3RoZXIgdXNlcnMhJzsKCnBpeGl2LnRl + eHQucmVnaXN0ZXJGYXZvcml0ZSA9ICdKb2luaW5nIHBpeGl2IHdpbGwgYWxs + b3cgeW91IDxicj50byBhZGQgbWVtYmVycyB0byB5b3VyIGZvbGxvdyEnOwpw + aXhpdi50ZXh0LmxvZ2luRmF2b3JpdGUgICAgPSAnTG9nIGluIHRvIEZvbGxv + d2luZyBtZW1iZXJzISc7CgpwaXhpdi50ZXh0LnJlZ2lzdGVyTWVzc2FnZSA9 + ICdTaWduIHVwIGFuZCBzdGFydCA8YnI+c2VuZGluZyBtZXNzYWdlcyB0byBv + dGhlciB1c2VycyEnOwpwaXhpdi50ZXh0LmxvZ2luTWVzc2FnZSAgICA9ICdM + b2cgaW50byBwaXhpdiB0bzxicj4gc3RhcnQgc2VuZGluZyBtZXNzYWdlcyB0 + byBvdGhlciBtZW1iZXJzISc7CgpwaXhpdi50ZXh0LnJlZ2lzdGVySW1hZ2Ug + PSAnSm9pbmluZyBwaXhpdiB3aWxsIGxldCB5b3UgPGJyPnZpZXcgaGlnaGVy + IHJlc29sdXRpb25zISc7CgpwaXhpdi50ZXh0LnJlZ2lzdGVyQm9va21hcmsg + PSAnSm9pbmluZyBwaXhpdiB3aWxsIGFsbG93IHlvdSA8YnI+dG8gYm9va21h + cmsgd29ya3MgeW91IGxpa2UhJzsKcGl4aXYudGV4dC5sb2dpbkJvb2ttYXJr + ICAgID0gJ0xvZyBpbiB0byBhZGQgd29yayB5b3UgbGlrZSB0byBib29rbWFy + a3MhJzsKCnBpeGl2LnRleHQucmVnaXN0ZXJSYXRlID0gJ0pvaW5pbmcgcGl4 + aXYgd2lsbCBhbGxvdyB5b3UgPGJyPnRvIGdpdmUgcmF0aW5ncyEnOwpwaXhp + di50ZXh0LmxvZ2luUmF0ZSAgICA9ICdMb2cgaW4gdG8gPGJyPnJhdGUgd29y + ayB0aGF0IGludGVyZXN0cyB5b3UhJzsKCnBpeGl2LnRleHQub3ZlcmFjY2Vz + cyA9ICdTaWduIHVwIGFuZCBlbmpveSBtb3JlIG9mIHBpeGl2ISc7CnBpeGl2 + LnRleHQub3ZlcmFjY2Vzc0NhcHRpb24gPSAncGl4aXYgTWVtYmVycyBjYW4g + dmlldyBoaWdoLXJlc29sdXRpb24gaW1hZ2VzIGFuZCBib29rbWFyayB3b3Jr + cyB0aGF0IGludGVyZXN0IHRoZW0uJzsKCnBpeGl2LnRleHQudmlzaXQgPSAn + U2lnbiB1cCBmb3IgZnJlZSE8YnI+IEpvaW4gcGl4aXYgdG9kYXkgYW5kIGVu + am95IHRoZSBmdW4gb2YgZHJhd2luZyEnOwogICAgICAgIHBpeGl2LnRleHQu + c2VhcmNoTW9kYWxQcmVtaXVtID0gJ1dl4oCZcmUgZ2l2aW5nIG91dCBhIGZy + ZWUgbW9udGggb2YgcGl4aXYgUHJlbWl1bSwgbm9ybWFsbHkgd29ydGggNTQw + IHllbiEgU2lnbiB1cCBmb3IgdGhpcyBwcm9tb3Rpb24gaGVyZS4nOwogICAg + ICAgIHBpeGl2LnRleHQuc2VhcmNoTW9kYWxQcmVtaXVtQ2FwdGlvbiA9ICcx + 55Wq5Lq65rCX44Gu5L2c5ZOB44KS5LiA55m65qSc57Si77yBPGJyPjHml6Xj + gIEx6YCx6ZaT44CBMeODtuaciOOBruacn+mWk+OBp+e1nuOCiui+vOOCgOOB + k+OBqOOCguOBp+OBjeOBvuOBmeOAgic7CgogICAgICAgIHBpeGl2LnRleHQu + c2VhcmNoTW9kYWxQcmVtaXVtID0gJ1dl4oCZcmUgZ2l2aW5nIG91dCBhIGZy + ZWUgbW9udGggb2YgcGl4aXYgUHJlbWl1bSwgbm9ybWFsbHkgd29ydGggNTQw + IHllbiEgU2lnbiB1cCBmb3IgdGhpcyBwcm9tb3Rpb24gaGVyZS4nOwogICAg + ICAgIHBpeGl2LnRleHQucmV1cGxvYWRNb2RhbFByZW1pdW1DYXB0aW9uID0g + J+Whl+OCiuW/mOOCjOOCkuimi+OBpOOBkeOBpuOCguWuieW/g++8gTxicj7j + grPjg6Hjg7Pjg4jjgoToqZXkvqHjgpLmtojjgZXjgZrjgavlho3mipXnqL/j + gafjgY3jgb7jgZnvvIEnOwoKICAgICAgICBwaXhpdi50ZXh0LnJldXBsb2Fk + TW9kYWxQcmVtaXVtID0gJ+ODl+ODrOODn+OCouODoOS8muWToeOBq+OBquOC + i+OBqDxicj7kvZzlk4HjgpLlho3mipXnqL/jgafjgY3jgb7jgZnvvIEnOwog + ICAgICAgIHBpeGl2LnRleHQuY2FwdGlvbk1vZGFsUHJlbWl1bUNhcHRpb24g + PSAn5L2c5ZOB44Gu6Kit5a6a44KE6Kqs5piO44Gr5Yip55So44GZ44KL44Kt + 44Oj44OX44K344On44Oz44Gu5paH5a2X6Imy5aSJ5pu044O75pac5a2X44O7 + 5aSq5a2X44Gq44Gp44GM5Yip55So44Gn44GN44G+44GZ44CCJzsKPC9zY3Jp + cHQ+CjxzY3JpcHQ+CgpwaXhpdi5hYnRlc3QgPSB7fTsKcGl4aXYuYWJ0ZXN0 + LmFiX3Rlc3Rfc2FtcGxlX2NvbmZpZ3VyYXRpb24gPSB7fTsKCgoKcGl4aXYu + YWJ0ZXN0LnByZW1pdW1GdW5jdGlvbk5vdGljZSA9IHRydWU7CgpwaXhpdi5h + YnRlc3QuYWJfdGVzdF9zYW1wbGVfY29uZmlndXJhdGlvbi5yZWQgPSBmYWxz + ZTsKcGl4aXYuYWJ0ZXN0LmFiX3Rlc3Rfc2FtcGxlX2NvbmZpZ3VyYXRpb24u + Ymx1ZSA9IHRydWU7PC9zY3JpcHQ+Cgo8c2NyaXB0PgpwaXhpdi5jb250ZXh0 + LnBvcHVsYXJfc2VhcmNoX3RyaWFsX2Nvb2tpZV9uYW1lID0gInBvcHVsYXJf + c2VhcmNoX3RyaWFsX2Nvb2tpZV8zIjsKcGl4aXYuY29udGV4dC5wb3B1bGFy + X3NlYXJjaF90cmlhbF9pc190YXJnZXRfdXNlciA9IGZhbHNlOwo8L3Njcmlw + dD4KCgoKPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgp2YXIgZ29v + Z2xldGFnID0gZ29vZ2xldGFnIHx8IHt9Owpnb29nbGV0YWcuY21kID0gZ29v + Z2xldGFnLmNtZCB8fCBbXTsKKGZ1bmN0aW9uKCkgewp2YXIgZ2FkcyA9IGRv + Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwpnYWRzLmFzeW5jID0g + dHJ1ZTsKZ2Fkcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CnZhciB1c2VT + U0wgPSAnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbDsK + Z2Fkcy5zcmMgPSAodXNlU1NMID8gJ2h0dHBzOicgOiAnaHR0cDonKSArCicv + L3d3dy5nb29nbGV0YWdzZXJ2aWNlcy5jb20vdGFnL2pzL2dwdC5qcyc7CnZh + ciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Njcmlw + dCcpWzBdOwpub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdhZHMsIG5v + ZGUpOwp9KSgpOwo8L3NjcmlwdD4KCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZh + c2NyaXB0Jz4KZ29vZ2xldGFnLmNtZC5wdXNoKGZ1bmN0aW9uKCkgewpnb29n + bGV0YWcuZGVmaW5lU2xvdCgnLzIxMjU5Nzk4L1BpeGl2XzQ2OHg2MF9yb3Rh + dGlvbicsIFs0NjgsIDYwXSwgJ2Rpdi1ncHQtYWQtMTM3MTIwMTEyOTQzMS0w + JykuYWRkU2VydmljZShnb29nbGV0YWcucHViYWRzKCkpOwpnb29nbGV0YWcu + ZW5hYmxlU2VydmljZXMoKTsKfSk7Cjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBl + PSd0ZXh0L2phdmFzY3JpcHQnPgpnb29nbGV0YWcuY21kLnB1c2goZnVuY3Rp + b24oKSB7Cmdvb2dsZXRhZy5kZWZpbmVTbG90KCcvMjEyNTk3OTgvUGl4aXZf + NzI4eDkwX2Zvb3RlcicsIFs3MjgsIDkwXSwgJ2Rpdi1ncHQtYWQtMTM3MTIw + MTI1NzYwMC0wJykuYWRkU2VydmljZShnb29nbGV0YWcucHViYWRzKCkpOwpn + b29nbGV0YWcuZW5hYmxlU2VydmljZXMoKTsKfSk7Cjwvc2NyaXB0PgoKPHNj + cmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgpnb29nbGV0YWcuY21kLnB1 + c2goZnVuY3Rpb24oKSB7Cmdvb2dsZXRhZy5kZWZpbmVTbG90KCcvMjEyNTk3 + OTgvUGl4aXZfMzAweDI1MF/jg63jgrDjgqTjg7PliY3jg6zjgq/jgr/jg7Pj + grDjg6snLCBbMzAwLCAyNTBdLCAnZGl2LWdwdC1hZC0xMzcxNTM4MTk5NjQ4 + LTAnKS5hZGRTZXJ2aWNlKGdvb2dsZXRhZy5wdWJhZHMoKSk7Cmdvb2dsZXRh + Zy5lbmFibGVTZXJ2aWNlcygpOwp9KTsKPC9zY3JpcHQ+Cgo8c2NyaXB0IHR5 + cGU9J3RleHQvamF2YXNjcmlwdCc+Cmdvb2dsZXRhZy5jbWQucHVzaChmdW5j + dGlvbigpIHsKZ29vZ2xldGFnLmRlZmluZVNsb3QoJy8yMTI1OTc5OC9waXhp + di1QQ+eJiC3kvZzlk4Hjg5rjg7zjgrjjg6zjgq/jgr/jg7PjgrDjg6snLCBb + MzAwLCAyNTBdLCAnZGl2LWdwdC1hZC0xNDAxMDg4NDEzNTAxLTAnKS5hZGRT + ZXJ2aWNlKGdvb2dsZXRhZy5wdWJhZHMoKSk7Cmdvb2dsZXRhZy5wdWJhZHMo + KS5lbmFibGVTaW5nbGVSZXF1ZXN0KCk7Cmdvb2dsZXRhZy5wdWJhZHMoKS5z + ZXQoInBhZ2VfdXJsIiwgImh0dHA6Ly93d3cucGl4aXYubmV0LyIpOwpnb29n + bGV0YWcuZW5hYmxlU2VydmljZXMoKTsKfSk7Cjwvc2NyaXB0Pgo8L2hlYWQ+ + Cjxib2R5IGNsYXNzPSJub3QtbG9nZ2VkLWluIj4KCgo8IS0tIEdvb2dsZSBU + YWcgTWFuYWdlciAtLT4KPG5vc2NyaXB0PjxpZnJhbWUgc3JjPSIvL3d3dy5n + b29nbGV0YWdtYW5hZ2VyLmNvbS9ucy5odG1sP2lkPUdUTS01NUZHIgpoZWln + aHQ9IjAiIHdpZHRoPSIwIiBzdHlsZT0iZGlzcGxheTpub25lO3Zpc2liaWxp + dHk6aGlkZGVuIj48L2lmcmFtZT48L25vc2NyaXB0Pgo8c2NyaXB0PihmdW5j + dGlvbih3LGQscyxsLGkpe3dbbF09d1tsXXx8W107d1tsXS5wdXNoKHsnZ3Rt + LnN0YXJ0JzoKbmV3IERhdGUoKS5nZXRUaW1lKCksZXZlbnQ6J2d0bS5qcyd9 + KTt2YXIgZj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdLApqPWQuY3Jl + YXRlRWxlbWVudChzKSxkbD1sIT0nZGF0YUxheWVyJz8nJmw9JytsOicnO2ou + YXN5bmM9dHJ1ZTtqLnNyYz0KJy8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29t + L2d0bS5qcz9pZD0nK2krZGw7Zi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShq + LGYpOwp9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2RhdGFMYXllcics + J0dUTS01NUZHJyk7PC9zY3JpcHQ+CjwhLS0gRW5kIEdvb2dsZSBUYWcgTWFu + YWdlciAtLT4KCgogICAgCjxoZWFkZXIgY2xhc3M9ImhlYWRlciI+PGRpdiBj + bGFzcz0ibGF5b3V0LXdyYXBwZXIiPjxoMSBjbGFzcz0idGl0bGUgaGVhZGVy + LWxvZ28iPjxhIGhyZWY9Imh0dHA6Ly93d3cucGl4aXYubmV0LyIgY2xhc3M9 + Il9pY29uIHNwcml0ZXMtbG9nbyI+cGl4aXY8L2E+PC9oMT48dWwgY2xhc3M9 + ImF1dGgtbGlzdCI+PGxpPjxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0i + c2lnbmluLWdvb2dsZS1idXR0b24gX3VpLXRvb2x0aXAgY3VzdG9tLWdwbHVz + LXNpZ25pbiIgZGF0YS10b29sdGlwPSJMb2cgaW4gd2l0aCBHb29nbGUiIGRh + dGEtcmVmPSJoZWFkZXJfaWNvbl9ncGx1cyI+PGkgY2xhc3M9Il9pY29uIHNw + cml0ZXMtZ29vZ2xlLXBsdXMtd2hpdGUiPjwvaT48L2J1dHRvbj48L2xpPjxs + aT48Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iaHR0cHM6Ly93d3cuc2Vj + dXJlLnBpeGl2Lm5ldC9sb2dpbl9mYWNlYm9vay5waHAiPjxpbnB1dCB0eXBl + PSJoaWRkZW4iIG5hbWU9Im1vZGUiIHZhbHVlPSJzdGFydCI+PGlucHV0IHR5 + cGU9ImhpZGRlbiIgbmFtZT0icmVmIiB2YWx1ZT0iaGVhZGVyX2ljb25fZmFj + ZWJvb2siPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InJldHVybl90byIg + dmFsdWU9Imh0dHA6Ly93d3cucGl4aXYubmV0LyI+PGJ1dHRvbiB0eXBlPSJz + dWJtaXQiIGNsYXNzPSJzaWduaW4tZmFjZWJvb2stYnV0dG9uIF91aS10b29s + dGlwIiBkYXRhLXRvb2x0aXA9IkxvZyBpbiB3aXRoIEZhY2Vib29rIj48aSBj + bGFzcz0iX2ljb24gc3ByaXRlcy1mYi13aGl0ZSI+PC9pPjwvYnV0dG9uPjwv + Zm9ybT48L2xpPjxsaT48YSBjbGFzcz0ibG9naW4tYnV0dG9uIiBocmVmPSJo + dHRwczovL3d3dy5zZWN1cmUucGl4aXYubmV0L2xvZ2luLnBocCIgb25jbGlj + az0icmV0dXJuIHBpeGl2LmxvZ2luLnRvZ2dsZSgpIj48c3BhbiBjbGFzcz0i + dGV4dCI+TG9naW48L3NwYW4+PGkgY2xhc3M9Imljb24tbWVudS10cmlnZ2Vy + Ij48L2k+PC9hPjxkaXYgY2xhc3M9InRvZ2dsZV9jb250YWluZXIgb2Zmc2Ny + ZWVuIj48Zm9ybSBjbGFzcz0ibG9naW4tZm9ybSIgYWN0aW9uPSIvbG9naW4u + cGhwIiBtZXRob2Q9InBvc3QiIGRhdGEtdGltZT0iMTQxMjYzMDM1OSIgZGF0 + YS10ZXh0LWNvbmZpcm09IuOBiuS9v+OBhOOBrlBD44Gu5pmC5Yi76Kit5a6a + 44GM44Ga44KM44Gm44GE44KL44Gf44KB44CB5q2j5bi444Gr44Ot44Kw44Kk + 44Oz44Gn44GN44Gq44GE5aC05ZCI44GM44GU44GW44GE44G+44GZ44CCJiN4 + MEE74oC75pmC5Yi76Kit5a6a44KS5aSJ5pu044GX44Gf5b6M44Gv44CB44GT + 44Gu44Oa44O844K444KS5YaN6Kqt44G/6L6844G/44GX44Gm44GP44Gg44GV + 44GE44CCJiN4MEE7JiN4MEE757aa6KGM44GX44G+44GZ44GL77yfIj48aW5w + dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtb2RlIiB2YWx1ZT0ibG9naW4iPjxp + bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InJldHVybl90byIgdmFsdWU9Imh0 + dHA6Ly93d3cucGl4aXYubmV0LyI+PGRpdiBjbGFzcz0iaGVhZGVyX2luZGV4 + X2xvZ2luIj48ZGl2IHN0eWxlPSJtYXJnaW46MDsiPjxzcGFuIGNsYXNzPSdl + cnJvcic+UGxlYXNlIGxvZyBpbi48L3NwYW4+PGJyIC8+PHA+cGl4aXYgSUQg + b3IgRW1haWw8L3A+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJqcy1wbGFj + ZWhvbGRlciIgaWQ9ImxvZ2luX3BpeGl2X2lkIiBuYW1lPSJwaXhpdl9pZCIg + dmFsdWU9IiIgbWF4bGVuZ3RoPSIyNTUiIHN0eWxlPSJ3aWR0aDoxNzBweDtw + YWRkaW5nOjRweCAwIDJweCA1cHg7IiAvPjxwPlBhc3N3b3JkPC9wPjxpbnB1 + dCB0eXBlPSJwYXNzd29yZCIgY2xhc3M9ImpzLXBsYWNlaG9sZGVyIiBpZD0i + bG9naW5fcGFzc3dvcmQiIG5hbWU9InBhc3MiIHZhbHVlPSIiIG1heGxlbmd0 + aD0iMzIiIHN0eWxlPSJ3aWR0aDoxNzBweDtwYWRkaW5nOjRweCAwIDJweCA1 + cHg7IiAvPjxsYWJlbD48aW5wdXQgbmFtZT0ic2tpcCIgdHlwZT0iY2hlY2ti + b3giIHZhbHVlPSIxIiAvPiBLZWVwIG1lIHNpZ25lZCBpbjwvbGFiZWw+PHA+ + PGEgaHJlZj0iaHR0cHM6Ly93d3cuc2VjdXJlLnBpeGl2Lm5ldC9sb2dpbi5w + aHAiPlNlY3VyZSBzaWduLWluIHRocm91Z2ggU1NMIChodHRwcyk8L2E+PC9w + PjxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJsb2dpbl9zdWJtaXQiIHZhbHVl + PSJMb2dpbiIgY2xhc3M9ImJ0bl90eXBlMDciIC8+PHA+PGEgaHJlZj0iaHR0 + cHM6Ly93d3cuc2VjdXJlLnBpeGl2Lm5ldC9yZW1pbmRlci5waHAiPkZvcmdv + dCBJRCBvciBwYXNzd29yZD88L2E+PC9wPjwvZGl2PjwvZGl2PjwvZm9ybT48 + L2Rpdj48L2xpPjwvdWw+PC9kaXY+PC9oZWFkZXI+ICAgICAgICAgICAgCiAg + ICAKPCEtLVtpZiBsdCBJRSA4XT4KPGRpdiBpZD0ib3V0ZGF0ZWQtYnJvd3Nl + ci1iYW5uZXIiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxwPllvdXIgYnJvd3Nl + ciB2ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1cGdyYWRlIHRv + IHRoZSBsYXRlc3QgdmVyc2lvbi48L3A+PHVsPjxsaT48YSBocmVmPSJodHRw + Oi8vd2luZG93cy5taWNyb3NvZnQuY29tL2llIj48aW1nIHNyYz0iaHR0cHM6 + Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2Lm5ldC9jb21tb24vaW1hZ2VzL2ljb25f + aWUucG5nIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiPkludGVybmV0IEV4cGxv + cmVyPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNv + bS9jaHJvbWUiPjxpbWcgc3JjPSJodHRwczovL3NvdXJjZS5zZWN1cmUucGl4 + aXYubmV0L2NvbW1vbi9pbWFnZXMvaWNvbl9jaHJvbWUucG5nIiB3aWR0aD0i + NDgiIGhlaWdodD0iNDgiPkdvb2dsZSBDaHJvbWU8L2E+PC9saT48bGk+PGEg + aHJlZj0iaHR0cDovL2dldGZpcmVmb3guY29tLyI+PGltZyBzcmM9Imh0dHBz + Oi8vc291cmNlLnNlY3VyZS5waXhpdi5uZXQvY29tbW9uL2ltYWdlcy9pY29u + X2ZpcmVmb3gucG5nIiB3aWR0aD0iNDgiIGhlaWdodD0iNDgiPkZpcmVmb3g8 + L2E+PC9saT48L3VsPjxkaXYgY2xhc3M9ImNsb3NlIiBvbmNsaWNrPSJyZXR1 + cm4gcGl4aXYub3V0ZGF0ZWRCcm93c2VyLmhpZGVCYW5uZXIoKSI+w5c8L2Rp + dj48L2Rpdj48c2NyaXB0IHNyYz0iaHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBp + eGl2Lm5ldC93d3cvanMvZmlsZXMvb3V0ZGF0ZWQubWluLmpzPzQwMjBlYWFk + YWYzMzQ2MjNkZGFjMGJkODc5ODlmMTIxIj48L3NjcmlwdD48c2NyaXB0PnBp + eGl2Lm91dGRhdGVkQnJvd3Nlci5zaG93QmFubmVyKCk7PC9zY3JpcHQ+Cjwh + W2VuZGlmXS0tPgoKCjxkaXYgaWQ9ImJhY2stdG8tdG9wIiBjbGFzcz0ic3By + aXRlcy1iYWNrLXRvLXRvcCB1aS1zY3JvbGwgaGlkZGVuIHRyYW5zcGFyZW50 + Ij48L2Rpdj4KCjxkaXYgaWQ9InRvb2xiYXItaXRlbXMiPjwvZGl2Pgo8ZGl2 + IGlkPSJ1aS10b29sdGlwLWNvbnRhaW5lciI+CjxwPjwvcD4KPGRpdiBjbGFz + cz0iYXJyb3ciPjwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InN0YXR1cy1iYXIi + PjwvZGl2PgoKCgo8c2NyaXB0PgpwaXhpdi50ZXh0LnRvZGF5ID0gJ+acrOaX + pSc7CnBpeGl2LnRleHQueWVzdGVyZGF5ID0gJ+aYqOaXpSc7CnBpeGl2LnRl + eHQubm90aWZpY2F0aW9ucyA9ICfjg6Hjg4Pjgrvjg7zjgrjjg7vjg53jg4Pj + g5fjg5zjg7zjg4knOwoKcGl4aXYudGV4dC5kYWlseVJhbmtpbmcgPSAnRGFp + bHkgcmFua2luZyc7CnBpeGl2LnRleHQud2Vla2x5UmFua2luZyA9ICdXZWVr + bHkgUmFua2luZyc7CnBpeGl2LnRleHQubW9udGhseVJhbmtpbmcgPSAnTW9u + dGhseSBSYW5raW5nJzsKcGl4aXYudGV4dC5yb29raWVSYW5raW5nID0gJ1Jv + b2tpZSBSYW5raW5nJzsKcGl4aXYudGV4dC5kYWlseV9yMThSYW5raW5nID0g + J1ItMTggRGFpbHkgUmFua2luZyc7CnBpeGl2LnRleHQucjE4Z1Jhbmtpbmcg + PSAnUi0xOEcgUmFua2luZyc7CnBpeGl2LnRleHQubWFsZVJhbmtpbmcgPSAn + UG9wdWxhcml0eSBSYW5raW5nIChNYWxlcyknOwpwaXhpdi50ZXh0LmZlbWFs + ZVJhbmtpbmcgPSAnUG9wdWxhcml0eSBSYW5raW5nIChGZW1hbGVzKSc7Cjwv + c2NyaXB0Pgo8ZGl2IGlkPSJwcmVtaXVtLWludHJvZHVjdGlvbi1tb2RhbCIg + Y2xhc3M9ImludHJvZHVjdGlvbi1tb2RhbC1jb250YWluZXIiPgo8c2VjdGlv + biBjbGFzcz0iaW50cm9kdWN0aW9uLW1vZGFsIj4KPGRpdiBjbGFzcz0iY2xv + c2UgdWktbW9kYWwtY2xvc2UiPjwvZGl2Pgo8aDEgY2xhc3M9InRpdGxlIiBz + dHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4OyI+PC9oMT4KPHAgY2xhc3M9ImNh + cHRpb24iPkVuYWJsZSBhd2Vzb21lIGZlYXR1cmVzIHN1Y2ggYXMgaGlkaW5n + IGFkcyBhbmQgcmUtc3VibWlzc2lvbiBvZiB3b3JrcyE8L3A+CjxhIGhyZWY9 + Ii9wcmVtaXVtLnBocCIgY2xhc3M9ImJ1dHRvbi1jb250YWluZXIgcHJlbWl1 + bSB1aS1tb2RhbC1jbG9zZSIgdGFyZ2V0PSJfYmxhbmsiPgo8ZGl2IGNsYXNz + PSJsYWJlbCBsYXlvdXQtY2VsbCI+Sm9pbiBwaXhpdiBQcmVtaXVtPC9kaXY+ + CjxkaXYgY2xhc3M9ImxheW91dC1jZWxsIj4KPGkgY2xhc3M9Il9pY29uIHNw + cml0ZXMtZ28iPjwvaT4KPC9kaXY+CjwvYT4KPC9zZWN0aW9uPgo8L2Rpdj4K + Cgo8ZGl2IGlkPSJ3cmFwcGVyIj4KPG5vc2NyaXB0Pgo8ZGl2IHN0eWxlPSJi + YWNrZ3JvdW5kLWNvbG9yOiNGMkY0RjY7dGV4dC1hbGlnbjpjZW50ZXI7bWFy + Z2luLWJvdHRvbToxMHB4O3BhZGRpbmc6NXB4OyI+CjxwIHN0eWxlPSJjb2xv + cjojZmYwMDAwOyI+SmF2YXNjcmlwdCBpcyBjdXJyZW50bHkgZGlzYWJsZWQg + b24geW91ciBicm93c2VyLjxicj5Tb21lIGZlYXR1cmVzIG9uIHRoZSBzaXRl + IHdpbGwgbm90IGZ1bmN0aW9uIHByb3Blcmx5IGlmIEphdmFTY3JpcHQgaXMg + ZGlzYWJsZWQuPC9wPgo8L2Rpdj4KPC9ub3NjcmlwdD4KCgo8c2NyaXB0Pmlm + IChsb2NhdGlvbi5ocmVmLmluZGV4T2YoImh0dHBzOlwvXC93d3cuc2VjdXJl + LnBpeGl2Lm5ldFwvIikgIT09IDApIGFsZXJ0KCJUaGlzIHBhZ2UgaXNuJ3Qg + b24gcGl4aXYubmV0ISIpOzwvc2NyaXB0Pgo8ZGl2IGlkPSJjb250ZW50cyIg + Y2xhc3M9InBhbmUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxNXB4OyI+Cgo8 + ZGl2IGNsYXNzPSJwYW5lIGZvcm0tc2lnbnVwIj4KPGgyIGNsYXNzPSJ0aXRs + ZSI+TG9nIGluIHRvIHBpeGl2PC9oMj4KPGZvcm0gY2xhc3M9ImxvZ2luLWZv + cm0iIGFjdGlvbj0iL2xvZ2luLnBocCIgbWV0aG9kPSJwb3N0IiBkYXRhLXRp + bWU9IjE0MTI2MzAzNTkiIGRhdGEtdGV4dC1jb25maXJtPSLjgYrkvb/jgYTj + ga5QQ+OBruaZguWIu+ioreWumuOBjOOBmuOCjOOBpuOBhOOCi+OBn+OCgeOA + geato+W4uOOBq+ODreOCsOOCpOODs+OBp+OBjeOBquOBhOWgtOWQiOOBjOOB + lOOBluOBhOOBvuOBmeOAgiYjeDBBO+KAu+aZguWIu+ioreWumuOCkuWkieab + tOOBl+OBn+W+jOOBr+OAgeOBk+OBruODmuODvOOCuOOCkuWGjeiqreOBv+i+ + vOOBv+OBl+OBpuOBj+OBoOOBleOBhOOAgiYjeDBBOyYjeDBBO+e2muihjOOB + l+OBvuOBmeOBi++8nyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1v + ZGUiIHZhbHVlPSJsb2dpbiIgLz4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFt + ZT0icmV0dXJuX3RvIiB2YWx1ZT0iaHR0cDovL3d3dy5waXhpdi5uZXQvIj48 + ZmllbGRzZXQ+CjxzcGFuIGNsYXNzPSdlcnJvcic+UGxlYXNlIGxvZyBpbi48 + L3NwYW4+PGJyIC8+PGxhYmVsIGZvcj0icGl4aXZfaWQiPnBpeGl2IElEIG9y + IEVtYWlsPC9sYWJlbD4KPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJqcy1w + bGFjZWhvbGRlciBmb3JtLWxvZ2luLWlucHV0IiBpZD0ibG9naW5fcGl4aXZf + aWQiIG1heGxlbmd0aD0iMjU1IiBuYW1lPSJwaXhpdl9pZCIgdmFsdWU9IiIg + YXV0b2ZvY3VzPgo8bGFiZWwgZm9yPSJwYXNzIj5QYXNzd29yZDwvbGFiZWw+ + CjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgY2xhc3M9ImpzLXBsYWNlaG9sZGVy + IGZvcm0tbG9naW4taW5wdXQiIGlkPSJsb2dpbl9wYXNzd29yZCIgbWF4bGVu + Z3RoPSIzMiIgbmFtZT0icGFzcyIgdmFsdWU9IiI+CjxsYWJlbD48aW5wdXQg + bmFtZT0ic2tpcCIgdmFsdWU9IjEiIHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0i + IiBjaGVja2VkPSJjaGVja2VkIiAvPiBLZWVwIG1lIHNpZ25lZCBpbjwvbGFi + ZWw+CgoKPGJ1dHRvbiBpZD0ibG9naW5fc3VibWl0IiBzdHlsZT0iZm9udC1z + aXplOjE4cHg7IG1hcmdpbjoxMHB4IDA7cGFkZGluZzo0cHggNTBweDsiIHR5 + cGU9InN1Ym1pdCIgdmFsdWU9IkxvZ2luIiA+TG9naW48L2J1dHRvbj4KCjxz + cGFuICBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyI+CjxzcGFuIGlkPSJzc19nbW9f + aW1nX3dyYXBwZXJfMTAwLTUwX2ltYWdlX2phIiBzdHlsZT0iZmxvYXQ6IHJp + Z2h0OyI+CjxhIGhyZWY9Imh0dHBzOi8vanAuZ2xvYmFsc2lnbi5jb20vIiB0 + YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyI+CiAgPGltZyBhbHQ9IlNT + TOOAgEdNT+OCsOODreODvOODkOODq+OCteOCpOODs+OBruOCteOCpOODiOOC + t+ODvOODqyIgYm9yZGVyPSIwIiBpZD0ic3NfaW1nIiBzcmM9Ii8vc2VhbC5n + bG9iYWxzaWduLmNvbS9TaXRlU2VhbC9pbWFnZXMvZ3Nfbm9zY3JpcHRfMTAw + LTUwX2phLmdpZiIgc3R5bGU9ImZsb2F0OiByaWdodDsiIC8+PC9hPjwvc3Bh + bj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLy9zZWFs + Lmdsb2JhbHNpZ24uY29tL1NpdGVTZWFsL2dtb2dzX2ltYWdlXzEwMC01MF9q + YS5qcyIgZGVmZXI9ImRlZmVyIj48L3NjcmlwdD4KPC9zcGFuPgo8L2ZpZWxk + c2V0Pgo8L2Zvcm0+Cgo8cD48YSBocmVmPSJodHRwOi8vd3d3LnBpeGl2Lm5l + dC9yZW1pbmRlci5waHAiPkZvcmdvdCBJRCBvciBwYXNzd29yZD88L2E+PC9w + PgoKICAgICAgICA8ZGl2IGNsYXNzPSJhdXRoLWxvZ2luIj4KICAgICAgICAg + ICAgPGJ1dHRvbiBjbGFzcz0ic2lnbnVwLWdvb2dsZS1idXR0b24gY3VzdG9t + LWdwbHVzLXNpZ25pbiIgZGF0YS1yZWY9ImxvZ2luX2dwbHVzIj48aSBjbGFz + cz0iX2ljb24gc3ByaXRlcy1nb29nbGUtcGx1cy13aGl0ZSI+PC9pPkxvZyBp + biB3aXRoIEdvb2dsZTwvYnV0dG9uPiAgICAgICAgPC9kaXY+CiAgICAgICAg + PGRpdiBjbGFzcz0iYXV0aC1sb2dpbiI+CiAgICAgICAgICAgIDxmb3JtIG1l + dGhvZD0iUE9TVCIgYWN0aW9uPSJodHRwczovL3d3dy5zZWN1cmUucGl4aXYu + bmV0L2xvZ2luX2ZhY2Vib29rLnBocCI+PGlucHV0IHR5cGU9ImhpZGRlbiIg + bmFtZT0ibW9kZSIgdmFsdWU9InN0YXJ0Ij48aW5wdXQgdHlwZT0iaGlkZGVu + IiBuYW1lPSJyZWYiIHZhbHVlPSJsb2dpbl9mYWNlYm9vayI+PGlucHV0IHR5 + cGU9ImhpZGRlbiIgbmFtZT0icmV0dXJuX3RvIiB2YWx1ZT0iaHR0cDovL3d3 + dy5waXhpdi5uZXQvIj48YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InNp + Z251cC1mYWNlYm9vay1idXR0b24iPjxpIGNsYXNzPSJfaWNvbiBzcHJpdGVz + LWZiLXdoaXRlIj48L2k+TG9nIGluIHdpdGggRmFjZWJvb2s8L2J1dHRvbj48 + L2Zvcm0+ICAgICAgICA8L2Rpdj4KCjwvZGl2PjwhLS0gL2Zvcm0tc2lnbnVw + IC0tPgoKPGRpdiBpZD0icmVnaXN0ZXJSb3ciPgoKCiAgICAgICAgPGRpdiBj + bGFzcz0iYXV0aC1zaWdudXAiPgo8cD5Gb3IgcGVvcGxlIHdobyBoYXZlIEdv + b2dsZSBvciBGYWNlYm9vayBhY2NvdW50czwvcD4KICAgICAgICAgICAgPGJ1 + dHRvbiBjbGFzcz0ic2lnbnVwLWdvb2dsZS1idXR0b24gY3VzdG9tLWdwbHVz + LXNpZ25pbiI+PGkgY2xhc3M9Il9pY29uIHNwcml0ZXMtZ29vZ2xlLXBsdXMt + d2hpdGUiPjwvaT5TaWduIHVwIG9yIGxvZyBpbiB3aXRoIEdvb2dsZTwvYnV0 + dG9uPiAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJo + dHRwczovL3d3dy5zZWN1cmUucGl4aXYubmV0L2xvZ2luX2ZhY2Vib29rLnBo + cCIgY2xhc3M9ImZhY2Vib29rLWxvZ2luIj48aW5wdXQgdHlwZT0iaGlkZGVu + IiBuYW1lPSJtb2RlIiB2YWx1ZT0ic3RhcnQiPjxpbnB1dCB0eXBlPSJoaWRk + ZW4iIG5hbWU9InJlZiIgdmFsdWU9InNpZ251cF9zdGVwMF9mYWNlYm9vayI+ + PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icmV0dXJuX3RvIiB2YWx1ZT0i + aHR0cDovL3d3dy5waXhpdi5uZXQvIj48YnV0dG9uIHR5cGU9InN1Ym1pdCIg + Y2xhc3M9InNpZ251cC1mYWNlYm9vay1idXR0b24iPjxpIGNsYXNzPSJfaWNv + biBzcHJpdGVzLWZiLXdoaXRlIj48L2k+U2lnbiB1cCBvciBsb2cgaW4gd2l0 + aCBGYWNlYm9vazwvYnV0dG9uPjwvZm9ybT48L2Rpdj4KICAgICAgICAKCjxk + aXYgY2xhc3M9Im5vdGUiPgo8aDEgY2xhc3M9ImxvZ2luX3RleHQiPk5ldyB0 + byBwaXhpdj8gR2V0IGEgcGl4aXYgYWNjb3VudCBoZXJlPC9oMT4KPHAgc3R5 + bGU9Im1hcmdpbjoxMHB4IDAgMDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij4KPGEg + aHJlZj0iaHR0cHM6Ly93d3cuc2VjdXJlLnBpeGl2Lm5ldC9zaWdudXAucGhw + P3JlZj1sb2dpbiIgY2xhc3M9Il9idXR0b24tbGFyZ2UiPlNpZ24gVXA8L2E+ + CjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9Im5vdGUiPgo8aDE+WW91IGNhbiBh + Y2Nlc3MgcGl4aXYgdGhyb3VnaCB5b3VyIHNtYXJ0cGhvbmUgYXMgd2VsbDwv + aDE+CjxpIGNsYXNzPSJkZXZpY2UtaW1hZ2UiIHN0eWxlPSJiYWNrZ3JvdW5k + OiB1cmwoaHR0cHM6Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2Lm5ldC93d3cvaW1h + Z2VzL3NpZ251cC10b3VjaC1kZXZpY2UucG5nKTsiPjwvaT4KPGRpdiBjbGFz + cz0icXItYXJlYSI+CjxpIHN0eWxlPSJiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6 + Ly9zb3VyY2Uuc2VjdXJlLnBpeGl2Lm5ldC93d3cvaW1hZ2VzL3NpZ251cC10 + b3VjaC1xci5wbmcpIj48L2k+CjxwPnBpeGl2IGZvciBTbWFydHBob25lPC9w + Pgo8aDM+PGEgaHJlZj0iaHR0cDovL3RvdWNoLnBpeGl2Lm5ldC8iIHRhcmdl + dD0iX2JsYW5rIj7igJxwaXhpdiBUb3VjaOKAnTwvYT48L2gzPgo8c3Bhbj48 + YSBocmVmPSJodHRwOi8vdG91Y2gucGl4aXYubmV0LyIgdGFyZ2V0PSJfYmxh + bmsiPmh0dHA6Ly90b3VjaC5waXhpdi5uZXQ8L2E+PC9zcGFuPgo8L2Rpdj4K + PC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPCEtLSAvI2NvbnRlbnRzIC0tPgoKPHNj + cmlwdD5waXhpdi5zZXR1cEJlZm9yZVJlYWR5KCk7PC9zY3JpcHQ+PGRpdiBz + dHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXI6IDJweCBzb2xpZCB0 + b21hdG87IGJhY2tncm91bmQ6ICNmZmY7IHBhZGRpbmc6IDEwcHggMHB4OyBm + b250LXNpemU6IDE2cHg7IiBjbGFzcz0iaG92ZXItaXRlbSI+PGEgaHJlZj0i + L3ByZW1pdW0ucGhwP3JlZj1jYW1wYWlnbl9mb290ZXIyIiBzdHlsZT0iY29s + b3I6dG9tYXRvOyI+PHN0cm9uZz5XZeKAmXJlIGdpdmluZyBvdXQgYSBmcmVl + IG1vbnRoIG9mIHBpeGl2IFByZW1pdW0sIG5vcm1hbGx5IHdvcnRoIDU0MCB5 + ZW4hIFNpZ24gdXAgZm9yIHRoaXMgcHJvbW90aW9uIGhlcmUuPC9zdHJvbmc+ + PC9hPjwvZGl2Pjxmb290ZXIgY2xhc3M9ImZvb3RlciI+PGRpdiBjbGFzcz0i + Y29udGFpbmVyIj48dWwgY2xhc3M9Imxhbmd1YWdlcyI+PGxpPjxhIGhyZWY9 + Ii9sb2dpbi5waHA/cmV0dXJuX3RvPWh0dHAlM0ElMkYlMkZ3d3cucGl4aXYu + bmV0JTJGJmFtcDtsYW5nPWphIj7ml6XmnKzoqp48L2E+PC9saT48bGkgY2xh + c3M9ImN1cnJlbnQiPkVuZ2xpc2g8L2xpPjxsaT48YSBocmVmPSIvbG9naW4u + cGhwP3JldHVybl90bz1odHRwJTNBJTJGJTJGd3d3LnBpeGl2Lm5ldCUyRiZh + bXA7bGFuZz1mciI+RnJhbsOnYWlzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii9s + b2dpbi5waHA/cmV0dXJuX3RvPWh0dHAlM0ElMkYlMkZ3d3cucGl4aXYubmV0 + JTJGJmFtcDtsYW5nPWtvIj7tlZzqta3slrQ8L2E+PC9saT48bGk+PGEgaHJl + Zj0iL2xvZ2luLnBocD9yZXR1cm5fdG89aHR0cCUzQSUyRiUyRnd3dy5waXhp + di5uZXQlMkYmYW1wO2xhbmc9cnUiPtCg0YPRgdGB0LrQuNC5PC9hPjwvbGk+ + PGxpPjxhIGhyZWY9Ii9sb2dpbi5waHA/cmV0dXJuX3RvPWh0dHAlM0ElMkYl + MkZ3d3cucGl4aXYubmV0JTJGJmFtcDtsYW5nPXRoIj7guYTguJfguKI8L2E+ + PC9saT48bGk+PGEgaHJlZj0iL2xvZ2luLnBocD9yZXR1cm5fdG89aHR0cCUz + QSUyRiUyRnd3dy5waXhpdi5uZXQlMkYmYW1wO2xhbmc9emgiPueugOS9k+S4 + reaWhzwvYT48L2xpPjxsaT48YSBocmVmPSIvbG9naW4ucGhwP3JldHVybl90 + bz1odHRwJTNBJTJGJTJGd3d3LnBpeGl2Lm5ldCUyRiZhbXA7bGFuZz16aF90 + dyI+57mB6auU5Lit5paHPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii9sb2dpbi5w + aHA/cmV0dXJuX3RvPWh0dHAlM0ElMkYlMkZ3d3cucGl4aXYubmV0JTJGJmFt + cDtsYW5nPWVzIj5Fc3Bhw7FvbDwvYT48L2xpPjwvdWw+PGRsIGNsYXNzPSJs + aW5rcyI+PGR0PlNlcnZpY2VzPC9kdD48ZGQ+PHVsPjxsaT48YSBocmVmPSJo + dHRwOi8vY29taWMucGl4aXYubmV0LyIgdGFyZ2V0PSJfYmxhbmsiPnBpeGl2 + IENvbWljPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYm9vdGgucG0i + IHRhcmdldD0iX2JsYW5rIj5CT09USDwvYT48L2xpPjxsaT48YSBocmVmPSJo + dHRwczovL2Jvb3RoLnBtL2Fwb2xsby8iIHRhcmdldD0iX2JsYW5rIiA+QVBP + TExPPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9lbi5kaWMucGl4aXYu + bmV0LyIgdGFyZ2V0PSJfYmxhbmsiPnBpeGl2IEVuY3ljbG9wZWRpYTwvYT48 + L2xpPjxsaT48YSBocmVmPSJodHRwOi8vZW4uY3VyZWNvcy5jb20vP3JlZj1w + aXhpdi1mb290ZXIiIHRhcmdldD0iX2JsYW5rIj5Db3NwbGF5ZXIncyBDdXJl + PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93b3JsZGNvc3BsYXkubmV0 + L2VuLz9yZWY9cGl4aXYtZm9vdGVyIiB0YXJnZXQ9Il9ibGFuayI+V29ybGRD + b3NwbGF5PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9kcmF3ci5uZXQv + IiB0YXJnZXQ9Il9ibGFuayI+ZHJhd3I8L2E+PC9saT48bGk+PGEgaHJlZj0i + aHR0cDovL2NoYXQucGl4aXYubmV0LyIgdGFyZ2V0PSJfYmxhbmsiPnBpeGl2 + IENoYXQoZHJhd2luZyBjaGF0KTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRw + Oi8vd3d3LnBpeGl2Lm5ldC9ncm91cC8iIHRhcmdldD0iX2JsYW5rIj5Hcm91 + cHM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL2lyYWNvbi5waXhpdi5u + ZXQvIiB0YXJnZXQ9Il9ibGFuayI+44GE44KJ44GT44KTPC9hPjwvbGk+PGxp + PjxhIGhyZWY9Imh0dHA6Ly93d3cucGl4aXYubmV0L3ByZW1pdW0ucGhwP3Jl + Zj1mb290ZXIiIGNsYXNzPSJfdWktdG9vbHRpcCIgZGF0YS10b29sdGlwPSJU + b25zIG9mIHBpeGl2IFByZW1pdW0gb25seSBmZWF0dXJlcyEiPjxpIGNsYXNz + PSJfaWNvbiBzcHJpdGVzLXByZW1pdW0iPjwvaT48c3BhbiBjbGFzcz0iaWNv + bi10ZXh0Ij5waXhpdiBQcmVtaXVtPC9zcGFuPjwvYT48L2xpPjwvdWw+PC9k + ZD48L2RsPjxkbCBjbGFzcz0ibGlua3MiPjxkdD5BYm91dCBwaXhpdjwvZHQ+ + PGRkPjx1bD48bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5waXhpdi5uZXQvdGVy + bXMucGhwIj5UZXJtcyBvZiBVc2U8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0 + cDovL3d3dy5waXhpdi5uZXQvZ3VpZGVsaW5lLnBocCI+R3VpZGVsaW5lczwv + YT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LnBpeGl2Lm5ldC9wcml2 + YWN5LnBocCI+b3VyIHByaXZhY3kgcG9saWN5PC9hPjwvbGk+PGxpPjxhIGhy + ZWY9Imh0dHA6Ly93d3cucGl4aXYubmV0L3N1cHBvcnQucGhwIj5Db250YWN0 + IFVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucGl4aXYubmV0 + L2hlbHAucGhwIj5IZWxwPC9hPjwvbGk+PC91bD48L2RkPjwvZGw+PGRsIGNs + YXNzPSJsaW5rcyI+PGR0PkluZm88L2R0PjxkZD48dWw+PGxpPjwvbGk+PGxp + PjxhIGhyZWY9Imh0dHA6Ly93d3cucGl4aXYubmV0L2luZm8ucGhwIj5JbmZv + PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly90aW1lcy5waXhpdi5uZXQv + IiB0YXJnZXQ9Il9ibGFuayI+cGl4aXYgVGltZXM8L2E+PC9saT48bGk+PGEg + aHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL3BpeGl2IiB0YXJnZXQ9Il9ibGFu + ayI+VHdpdHRlcjwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmZh + Y2Vib29rLmNvbS9waXhpdiIgdGFyZ2V0PSJfYmxhbmsiPkZhY2Vib29rPC9h + PjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vcGx1cy5nb29nbGUuY29tLzEw + ODY1MDIxMjcxMDU2MjIyNTUzOSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0icHVi + bGlzaGVyIj5Hb29nbGUrPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9z + ZXJ2LmFkcy5waXhpdi5vcmcvY2xpY2sucGhwP2Jhbm5lcl9pZD0xMTM1OSZw + YWdlX2lkPWFsbCZ1cmw9aHR0cCUzQSUyRiUyRiIgdGFyZ2V0PSJfYmxhbmsi + Pkluc3RhZ3JhbTwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LnBs + dXJrLmNvbS9waXhpdl90dyIgdGFyZ2V0PSJfYmxhbmsiPlBsdXJrPC9hPjwv + bGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93ZWliby5jb20vMjIzMDIyNzQ5NSIg + dGFyZ2V0PSJfYmxhbmsiPndlaWJvPC9hPjwvbGk+PC91bD48L2RkPjwvZGw+ + PGRsIGNsYXNzPSJsaW5rcyI+PGR0PkFkdmVydGlzaW5nPC9kdD48ZGQ+PHVs + PjxsaT48YSBocmVmPSJodHRwOi8vd3d3LnBpeGl2Lm5ldC9jb250YWN0LnBo + cCI+QWR2ZXJ0aXNlIG9uIHBpeGl2PC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0 + dHA6Ly93d3cucGl4aXYubmV0L2NvbnRhY3QucGhwIj5JbGx1c3QgY29udGVz + dCBvbiBwaXhpdjwvYT48L2xpPjwhLS0gPGxpPjxhIGhyZWY9Imh0dHA6Ly93 + d3cucGl4aXYubmV0L2FyY2hpdmUucGhwIj5BZHZlcnRpc2luZyBBcmNoaXZl + czwvYT48L2xpPiAtLT48L3VsPjwvZGQ+PC9kbD48ZGwgY2xhc3M9Imxpbmtz + Ij48ZHQ+Q29tcGFueSBJbmZvPC9kdD48ZGQ+PHVsPjxsaT48YSBocmVmPSJo + dHRwOi8vd3d3LnBpeGl2LmNvLmpwLyIgdGFyZ2V0PSJfYmxhbmsiPkFib3V0 + IHBpeGl2IEluYy48L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3JlY3J1 + aXQucGl4aXYubmV0L3JlY3J1aXQtam9iLWVuLmh0bWwiIHRhcmdldD0iX2Js + YW5rIiBvbmNsaWNrPSJwaXhpdi50cmFja2luZy5ldmVudCgncmVjcnVpdCcs + ICdGcm9tX0Zvb3Rlcl9lbicsICcnKSI+Q2FyZWVyczwvYT48L2xpPjwvdWw+ + PC9kZD48L2RsPjxkaXYgY2xhc3M9ImNvcHlyaWdodCI+JmNvcHk7IDIwMTQg + cGl4aXYgVE9LWU8gSkFQQU48L2Rpdj48L2Rpdj48L2Zvb3Rlcj4KCjxzY3Jp + cHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48IS0tLy88IVtDREFUQVsKalF1 + ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgIGpRdWVyeSgn + Lm11bHRpLWFkcy1hcmVhJykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICBp + ZiAoalF1ZXJ5KHRoaXMpLmZpbmQoJ2lmcmFtZScpLmxlbmd0aCA9PSAwKSB7 + CiAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5hcHBlbmQoJzxpZnJhbWUgc3Jj + PSJodHRwOi8vc2Vydi5hZHMucGl4aXYub3JnL2R1bW15Lmh0bWwiIHdpZHRo + PSIwIiBoZWlnaHQ9IjAiIHNjcm9sbGluZz0ibm8iIG1hcmdpbndpZHRoPSIw + IiBzdHlsZT0iYm9yZGVyOm5vbmU7IiBmcmFtZWJvcmRlcj0iMCIgc3R5bGU9 + InBvc2l0aW9uOiBhYnNvbHV0ZTsiPjwvaWZyYW1lPicpOwogICAgICAgIH0K + ICAgIH0pOwp9KTsKLy9dXT4tLT48L3NjcmlwdD4KPC9kaXY+CgoKCjxzY3Jp + cHQgaWQ9ImNhcHliYXJhLXN0YXR1cy1jaGVjayIgZGF0YS10LWNvZGU9IjBl + YzA2MDYzNDQyNjE5Yzc2ZTQyZDZlYmVkOWZhNmRkIiBkYXRhLW0tY29kZT0i + NGRmMGY4NzY0ZThjN2M1OGJlODlmZGQwNGM3ODNjMzkiPjwvc2NyaXB0PgoK + PC9ib2R5Pgo8L2h0bWw+ + http_version: + recorded_at: Mon, 06 Oct 2014 21:19:35 GMT recorded_with: VCR 2.9.0 diff --git a/test/unit/pixiv_ugoira_converter_test.rb b/test/unit/pixiv_ugoira_converter_test.rb index d20763385..5da8d6a7f 100644 --- a/test/unit/pixiv_ugoira_converter_test.rb +++ b/test/unit/pixiv_ugoira_converter_test.rb @@ -4,28 +4,6 @@ class PixivUgoiraConverterTest < ActiveSupport::TestCase context "An ugoira converter" do setup do @url = "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=46378654" - @agent = begin - mech = Mechanize.new - - phpsessid = Cache.get("pixiv-phpsessid") - if phpsessid - cookie = Mechanize::Cookie.new("PHPSESSID", phpsessid) - cookie.domain = ".pixiv.net" - cookie.path = "/" - mech.cookie_jar.add(cookie) - else - mech.get("http://www.pixiv.net") do |page| - page.form_with(:action => "/login.php") do |form| - form['pixiv_id'] = Danbooru.config.pixiv_login - form['pass'] = Danbooru.config.pixiv_password - end.click_button - end - phpsessid = mech.cookie_jar.cookies.select{|c| c.name == "PHPSESSID"}.first - Cache.put("pixiv-phpsessid", phpsessid.value, 1.month) if phpsessid - end - - mech - end @write_file = Tempfile.new("output") end @@ -34,27 +12,27 @@ class PixivUgoiraConverterTest < ActiveSupport::TestCase end should "output to gif" do - @converter = PixivUgoiraConverter.new(@agent, @url, @write_file.path, :gif) + @converter = PixivUgoiraConverter.new(@url, @write_file.path, :gif) VCR.use_cassette("ugoira-converter", :record => :new_episodes) do - @converter.process + @converter.process! end assert_operator(File.size(@converter.write_path), :>, 1_000) end should "output to webm" do - @converter = PixivUgoiraConverter.new(@agent, @url, @write_file.path, :webm) + @converter = PixivUgoiraConverter.new(@url, @write_file.path, :webm) VCR.use_cassette("ugoira-converter", :record => :new_episodes) do - @converter.process + @converter.process! end assert_operator(File.size(@converter.write_path), :>, 1_000) end - should "output to apng" do - @converter = PixivUgoiraConverter.new(@agent, @url, @write_file.path, :apng) - VCR.use_cassette("ugoira-converter", :record => :new_episodes) do - @converter.process - end - assert_operator(File.size(@converter.write_path), :>, 1_000) - end + # should "output to apng" do + # @converter = PixivUgoiraConverter.new(@url, @write_file.path, :apng) + # VCR.use_cassette("ugoira-converter", :record => :new_episodes) do + # @converter.process! + # end + # assert_operator(File.size(@converter.write_path), :>, 1_000) + # end end end \ No newline at end of file diff --git a/test/unit/upload_test.rb b/test/unit/upload_test.rb index 9001ad052..060e6cb51 100644 --- a/test/unit/upload_test.rb +++ b/test/unit/upload_test.rb @@ -101,6 +101,21 @@ class UploadTest < ActiveSupport::TestCase end context "downloader" do + context "that is an ugoira" do + setup do + @url = "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=46378654" + @upload = FactoryGirl.create(:source_upload, :source => @url, :tag_string => "ugoira") + @output_path = "#{Rails.root}/tmp/test.download.webm" + end + + should "process successfully" do + VCR.use_cassette("ugoira-converter", :record => :new_episodes) do + @upload.download_from_source(@output_path) + end + assert_operator(File.size(@output_path), :>, 1_000) + end + end + should "initialize the final path after downloading a file" do @upload = FactoryGirl.create(:source_upload) path = "#{Rails.root}/tmp/test.download.jpg"