HDR Merge Challenge

HDR Merge Challenge

Posted on 21. Apr, 2009 by Terry Reinert in Photography

One of the topics discussed a lot when comparing HDR software applications is the merge algorithms. Everyone has a different opinion on which application merges the exposures better. In order to provide better information on which is best, I took four of the prominent HDR applications and merged a few different exposure sets that I took this morning. I merged a 3 image set and a 9 image set with Adobe’s Photoshop, HDRSoft’s Photomatix, Unified Color’s HDR PhotoStudio, and Media Chance’s Dynamic Photo HDR. You might be surprised at the winner… I know I was!

All the images used in this challenge were taken this morning at the Moving Wall using a Canon 5D and a Cosina 19-35mm wide angle lens. In case you do not know, the Moving Wall is a traveling replica of the Vietnam Memorial in Washington D.C. The wall has the name of every US military member that died in combat or died as a result of the wounds they received in combat during Vietnam. It also includes the names of those still missing whose fate is unknown. The wall is just one more reminder that freedom is not free. It is my hope that I can turn some of the images that I shot this morning into another means of honoring our fallen service members who gave the ultimate sacrifice for our country.

The images of the wall are perfect for this merge challenge since there are so many unique points in the images that need to be aligned due to how the names are engraved on the wall. Additionally, since I took the exposures using a wide angle lens there is some amount of lens distortion that gives an even greater challenge to the merge algorithms to get them lined up properly.

All the images showing examples of the merges that I am posting were cropped as best I could to be identical to the others. All were cropped at 100% and no additional sharpening or processing was done on the images. I tried to make it as fair as possible so the only thing I did was adjust the brightness of each image to match the others. I also left them at a large size and resolution so it is easier for you to make your own decision on which one did a better job. I hope you love me for that… my servers bandwidth is going to hate me for it!

The merge settings used were the standard automatic settings for all the programs except for Dynamic Photo HDR (DP-HDR). The auto alignment for DP-HDR was so horrible that I am not even going to post it. The result that you see for DP-HDR here is 10 minutes spent using the manual alignment features in that program. All other programs were simple select-n-click to do the merge. So technically DP-HDR is disqualified since there was extra help by manually aligning the images and the automatic alignment failed so badly that I didn’t even include it. So just remember that the results you see from DP-HDR are from 10 minutes of manual alignment tweaking.

It is important to note that I did not time the merge to see which program completed the merge fastest. The reason I didn’t time them is because two of the programs were run on my Windows Server 2008 64-bit PC (HDR PhotoStudio and DP-HDR) and the other two were run on my OSX 10.5.6 32-bit MacBook Pro (Photoshop and Photomatix). So it would not have been fair to compare the merge time between the programs due to the difference in hardware and software platforms. That being said, all the merges took about the same amount of time anyway so it would have been a very close race had I measured it.

THREE IMAGE MERGE

The three exposure set consists of three exposures at a 2EV spread. Also contained in the photo is a large flag blowing in the wind which added a massive area of ghosting. Not a single one of them produced an image that was acceptable for the flag except for DP-HDR because of the use of the anti-ghosting brush during the manual alignment process. Again, it wouldn’t be fair to account for that in the merge challenge since all the other programs were select-n-merge and did it all automatically.

RESULTS

merge1-photoshop merge1-photomatix merge1-hdrphotostudio merge1-dphdr

From Left to Right: Photoshop CS3, Photomatix Pro, HDR PhotoStudio, DP-HDR

ALIGNMENT: Photoshop CS3 takes the trophy for general image alignment followed by HDR PhotoStudio with Photomatix coming in last place. You can tell from looking at the alignment of the names that Photoshop aligned them the best with the least amount of noise. It was really hard to decide between HDR PhotoStudio and Photomatix but HDR PhotoStudio finally won out because it contains less noise than the image produced by Photomatix. It was a very close call and I kept going back and forth on it so feel free to make up your own mind based on the images above. The manual aligned image from DP-HDR did quite well; I would have ranked it number 2 if that were the automatic alignment result.

ANTI-GHOSTING: HDR PhotoStudio takes the trophy for anti-ghosting followed by Photomatix and then Photoshop CS3. I was surprised to see how horrible Photoshop CS3 handled the moving flag. Although, none of them produced an image that didn’t need post processing on the flag. DP-HDR did an awesome job in this category because I used the anti-ghosting brush on the flag. It took a few seconds to paint over the flag with it and that was all that was required. Let me just say that if I were actually counting the manual processed DP-HDR image in this running then it would have demolished the other programs!

Well, I am not surprised to see Photoshop CS3 win the alignment challenge as I have always used for the merge for that reason. But to lose so badly in the anti-ghosting challenge… that hurts! You might still be wondering why I included the DP-HDR results even though I said it was disqualified from the challenge due to not being fully automated… If you are wondering that then look again at the image it produced from just 10 minutes playing around with the manual align tools! You can spend 10 minutes in Photoshop masking some of the single shots back in to get rid of the ghosting or you could just do it all pre-merge with DP-HDR. I am still working on my full review of DP-HDR so I don’t want to give too much away but that bad boy is going to turn some heads for sure!

NINE IMAGE MERGE

The nine exposure set consists of nine exposures at a 1EV spread ranging from -4EV to +4EV. Like the three exposure set there were multiple flags blowing in the wind that were in the composition of these images.

RESULTS

merge2-photomatix merge2-hdrps merge2-dphdr

From Left to Right: Photomatix Pro, HDR PhotoStudio, DP-HDR

I bet you are wondering why there is no result from Photoshop CS3 above. The reason is because after 30 minutes of waiting for it to finish merging the exposures I got tired of waiting and ended the process. It had both CPU cores pegged at 100% and my CPU temp at 171 degrees F. And the progress bar wasn’t even to 50% yet! Photoshop CS3 works great for merging 3 images and even 5 images… but 9 images… apparently not so good! I realized that all the 9 image merges I have done in the past were all with Photomatix and the 3 image merges were in Photoshop CS3. No idea why I did it that way… maybe it is because Photoshop CS3 was doing that to me a while back and I had forgotten about it. That is why there is no Photoshop CS3 result for this test!

ALIGNMENT: I am going to have to give the trophy for the nine image merge alignment challenge to Photomatix followed by HDR PhotoStudio. They are both really good but it looks like the Photomatix result is just slightly more crisp. This could be due to the color differences in the two images but I cannot be sure. Just like before this was a close one.

ANTI-GHOSTING: HDR PhotoStudio gets the trophy on this one too! Even using the anti-ghosting brush on the DP-HDR merge couldn’t compare to the HDR PhotoStudio result. This was a huge surprise as I figured the DP-HDR result would stomp it again if it were in the running… but even if it were in the running then it would have gotten slammed by HDR PhotoStudio.

CONCLUSION

I think my conclusion is going to have to be that it doesn’t really matter what program you use to do the merge. All the results are very close to each other and each seems to produce a decent image. At first I was thinking that Dynamic Photo HDR is the way to go for anti-ghosting but the nine image merge proved that thought to be incorrect. I think that the best application for the merge is going to be based on the specific images that you are merging… and who really wants to do the merge once in each application to choose which one to use? Not me!

So the moral of this story is that you should not choose a HDR processing application based on how well it merges the exposures together to create the HDR. Choose the application based on the results you get from the tone mapping process as this is what is going to make you the happiest. Regardless as to which application you use, you are still going to have to do some masking and playing in Photoshop to get rid of all the ghosting and blemishes introduced in the merge process.

HDR Photography FAQ

Have something to add or correct me on? Drop a comment and let your voice be heard!

Related posts:

  1. Photoshop CS5 HDR Pro
  2. HDR Expose Review
  3. HDR Photography FAQ
  4. Make HDR Ghosting Work For You!
  5. HDR PhotoStudio Review Follow Up

Tags: , , , , , , , ,

6 Responses to “HDR Merge Challenge”

  1. [...] Edit (4/21/09): I spent most of today putting the various HDR applications up against each other in a head-2-head challenge to see which one would merge a 3-image set and a 9-image set better. The results are very interesting! Take a look at the post HERE. [...]

    Reply to this comment   More from author
  2. Bryon Freeman & Julie Turcotte

    21. Apr, 2009

    again, amazing…just that you thought & explained your way through this…in “layman’s terms” – I become more & more impressed with your work each time I check it out.

    Reply to this comment
  3. photoshop image masking

    22. Apr, 2009

    Hi. first of all let me say that i like your site. This is awesome reading. The simplicity of article is amazing.

    Reply to this comment   More from author
  4. Kathy

    30. Apr, 2009

    Can you tell me how to get rid of the “ghosting” around the hdr?

    Reply to this comment
    • Terry

      30. Apr, 2009

      There are a few ways to do it but they all require Photoshop or a similar photo editing tool. Pick out a single exposure from the exposures that you merged that best matches the color tones of the tone mapped HDR. Put it on a separate layer in Photoshop and then mask in only the areas that are ghosted on the tone mapped layer. You might have to play with some adjustment layers to get it to look perfect but with a little practice it isn’t too hard.

      Reply to this comment   More from author
  5. Rick

    02. Jun, 2009

    I find that all of the HDR programs can, at times, have problems automagically aligning handheld HDR images. In these cases, I have found the best solution is to use PTGUI since it allows you to remove badly placed auto alignment points and manually place critical control points between images.

    My specific PTGUI workflow is:
    1) in Project Assistant tab, use “load images” to open your HDR images
    2) In Lens Settings tab, check that lens correction parameters are zero & under “Use individual parameters for:”, check “Shift” for all images.
    3) in Optimizer tab, under “Optimize globally”, uncheck first four boxes (“field of view”, “a (lens distortion)”, “b (lens distortion)”, & “c (lens distortion)”. If you don’t do this, images will be warped to remove lens distortion, outside edge curves will result, and therefore much will be lost to later cropping.
    4) in Optimizer tab, under “Optimize globally”, check boxes “horizontal shift” & “vertical shift”
    5) in Project Assistant tab, click “Align images…”
    6) in Control Points tab, delete worst control points & manually add control points between each pair of images, striving for uniform coverage across the image. Especially focus on control points in matching midtone areas since these will eventually contribute heavily in later HDR processing.
    7) in Optimizer tab, click “Run Optimizer”

    rerun steps 6 & 7 until average and worst control point distances stop improving

    8) in Create Panorama tab, create maximum sized “Photoshop (.psd)” file with “blended and layers”
    9) save current settings as a PTGUI project so you can come back and refine, if necessary
    10) in Photoshop, save layers out as separate files (use “duplicate layer”, new), then run favorite HDR program as usual (without first aligning images)
    11) If you find an alignment registration problem in a critical area of the resulting merged output, you can go back to PTGUI, open the saved project, and add more control points in that critical area.

    Reply to this comment

Leave a Reply

Additional comments powered by BackType

PHVsPjxsaT48c3Ryb25nPndvb19hYm91dF9idXR0b248L3N0cm9uZz4gLSBSZWFkIE1vcmUuLi48L2xpPjxsaT48c3Ryb25nPndvb19hYm91dF9oZWFkZXI8L3N0cm9uZz4gLSBBYm91dCBUZXJyeSBSZWluZXJ0PC9saT48bGk+PHN0cm9uZz53b29fYWJvdXRfcGhvdG88L3N0cm9uZz4gLSBodHRwOi8vZmFybTUuc3RhdGljLmZsaWNrci5jb20vNDA0Ni80MjUyMjAyODY1XzdkZGEyNzNhMTJfcy5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hYm91dF90ZXh0PC9zdHJvbmc+IC0gVGVycnkgUmVpbmVydCBpcyBhIHBob3RvZ3JhcGhlciBiYXNlZCBvdXQgb2YgTWVsYm91cm5lLCBGbG9yaWRhLiBIZSBzaG9vdHMgYSB3aWRlIHZhcmlldHkgb2YgcGhvdG9ncmFwaGljIHN0eWxlcyBhbmQgaXMgYXZhaWxhYmxlIG9uIGEgbGltaXRlZCBiYXNpcyBmb3IgbW9kZWwgcG9ydGZvbGlvIGRldmVsb3BtZW50LCBjb21tZXJjaWFsIHByb2plY3RzLCBhbmQgZW5nYWdlbWVudCAmIHdlZGRpbmcgZXZlbnRzLjwvbGk+PGxpPjxzdHJvbmc+d29vX2Fkc19yb3RhdGU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fYWRfMjUwX2Fkc2Vuc2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19hZF8yNTBfaW1hZ2U8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0yNTB4MjUwLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzI1MF91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF8zMDBfYWRzZW5zZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzMwMF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cucGhvdG9zaG9wdXNlci5jb20vbWVtYmVycy9kb3dubG9hZHMvbmFwcC1yZWZlcnJhbC1iYW5uZXJzL25hcHAtMTYweDYwMC0wNDA4LmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2FkXzMwMF91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3LnBob3Rvc2hvcHVzZXIuY29tLz9haWQ9cm14dHp0PC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudDwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29fYWRfY29udGVudF9hZHNlbnNlPC9zdHJvbmc+IC0gPGEgaHJlZj1cImh0dHA6Ly93d3cucGhvdG9zaG9wdXNlci5jb20vP2FpZD1ybXh0enRcIiB0aXRsZT1cIk15IGxpbmsgdG8gdGhlIE5hdGlvbmFsIEFzc29jaWF0aW9uIG9mIFBob3Rvc2hvcCBQcm9mZXNzaW9uYWxzXCI+PGltZyBzcmM9XCJodHRwOi8vd3d3LnBob3Rvc2hvcHVzZXIuY29tL21lbWJlcnMvZG93bmxvYWRzL25hcHAtcmVmZXJyYWwtYmFubmVycy83Mjh4OTAtcm9ja2V0bWFuLmpwZ1wiIGFsdD1cIldoZXJlIGV2ZXJ5b25lIGxlYXJucyBQaG90b3Nob3AgLSBOYXRpb25hbCBBc3NvY2lhdGlvbiBvZiBQaG90b3Nob3AgUHJvZmVzc2lvbmFsc1wiIC8+PC9hPjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2NvbnRlbnRfZGlzYWJsZTwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19hZF9jb250ZW50X2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5waG90b3Nob3B1c2VyLmNvbS9tZW1iZXJzL2Rvd25sb2Fkcy9uYXBwLXJlZmVycmFsLWJhbm5lcnMvNzI4eDkwLXJvY2tldG1hbi5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF9jb250ZW50X3VybDwvc3Ryb25nPiAtIGh0dHA6Ly93d3cucGhvdG9zaG9wdXNlci5jb20vP2FpZD1ybXh0enQ8L2xpPjxsaT48c3Ryb25nPndvb19hZF9oZWFkZXI8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2hlYWRlcl9jb2RlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfaGVhZGVyX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy80Njh4NjBhLmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2hlYWRlcl91cmw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV8xPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMTI1eDEyNS0xLmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzI8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0xMjV4MTI1LTIuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfMzwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtMy5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF9pbWFnZV80PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tL2Fkcy93b290aGVtZXMtMTI1eDEyNS00LmdpZjwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX2ltYWdlXzU8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vYWRzL3dvb3RoZW1lcy0xMjV4MTI1LTQuZ2lmPC9saT48bGk+PHN0cm9uZz53b29fYWRfaW1hZ2VfNjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbS9hZHMvd29vdGhlbWVzLTEyNXgxMjUtNC5naWY8L2xpPjxsaT48c3Ryb25nPndvb19hZF90b3A8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3RvcF9hZHNlbnNlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2Rpc2FibGU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fYWRfdG9wX2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5waG90b3Nob3B1c2VyLmNvbS9tZW1iZXJzL2Rvd25sb2Fkcy9uYXBwLXJlZmVycmFsLWJhbm5lcnMvNzI4eDkwLXJvY2tldG1hbi5qcGc8L2xpPjxsaT48c3Ryb25nPndvb19hZF90b3BfdXJsPC9zdHJvbmc+IC0gaHR0cDovL3d3dy5waG90b3Nob3B1c2VyLmNvbS8/YWlkPXJteHR6dDwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF8xPC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzI8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfMzwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FkX3VybF80PC9zdHJvbmc+IC0gaHR0cDovL3d3dy53b290aGVtZXMuY29tPC9saT48bGk+PHN0cm9uZz53b29fYWRfdXJsXzU8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb208L2xpPjxsaT48c3Ryb25nPndvb19hZF91cmxfNjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cud29vdGhlbWVzLmNvbTwvbGk+PGxpPjxzdHJvbmc+d29vX2FsdF9zdHlsZXNoZWV0PC9zdHJvbmc+IC0gZ3JleS5jc3M8L2xpPjxsaT48c3Ryb25nPndvb19hdXRvX2ltZzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ibG9nX2NhdDwvc3Ryb25nPiAtIDM3NzwvbGk+PGxpPjxzdHJvbmc+d29vX2Jsb2dfbmF2aWdhdGlvbjwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ibG9nX3Blcm1hbGluazwvc3Ryb25nPiAtIC9jYXRlZ29yeS9ibG9nLzwvbGk+PGxpPjxzdHJvbmc+d29vX2Jsb2dfc3VibmF2aWdhdGlvbjwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19idXR0b25fbGluazwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL2Fib3V0PC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTIzPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTIzX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xMjY8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xMjZfaW1hZ2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzE5PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTk2PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMTk2X2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8xOV9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMV9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMjE2PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMjE2X2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8yNTg8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8yNThfaW1hZ2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzI2Mjwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzI2Ml9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM0MDwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM0MF9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzcwPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzcwX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8zNzc8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8zNzdfaW1hZ2U8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM4MTwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzM4MV9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzgzPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfMzgzX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF8zX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF80PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE0PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzQxNF9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNi1TdGFjaWEtMTkuanBnPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF80MTU8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE1X2ltYWdlPC9zdHJvbmc+IC0gaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy84LUJvc3Rvbi0zNTAtMzUyLUZpbmFsLmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE2PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzQxNl9pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNy1EYW5pZWwtUG9ydHJhaXRzLVdlYi04LmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDE3PC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jYXRfYm94XzQxN19pbWFnZTwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvOS1NR18xNjIyX0xvUmVzLmpwZzwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDQxPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfNDQxX2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF80X2ltYWdlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fY2F0X2JveF84PC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9ib3hfOF9pbWFnZTwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NhdF9leDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2NvbW1lbnRfcG9zdHM8L3N0cm9uZz4gLSBTZWxlY3QgYSBudW1iZXI6PC9saT48bGk+PHN0cm9uZz53b29fY29udGVudDwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19jb250ZW50X2FyY2hpdmVzPC9zdHJvbmc+IC0gZmFsc2U8L2xpPjxsaT48c3Ryb25nPndvb19jb250ZW50X2ZlYXQ8L3N0cm9uZz4gLSBmYWxzZTwvbGk+PGxpPjxzdHJvbmc+d29vX2N1c3RvbV9jc3M8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19jdXN0b21fZmF2aWNvbjwvc3Ryb25nPiAtIGh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNC1VU0ZsYWcuaWNvPC9saT48bGk+PHN0cm9uZz53b29fZmVhdHVyZWRfcG9zdHM8L3N0cm9uZz4gLSBTZWxlY3QgYSBudW1iZXI6PC9saT48bGk+PHN0cm9uZz53b29fZmVlZGJ1cm5lcl9pZDwvc3Ryb25nPiAtIDwvbGk+PGxpPjxzdHJvbmc+d29vX2ZlZWRidXJuZXJfdXJsPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fZ29vZ2xlX2FuYWx5dGljczwvc3Ryb25nPiAtIDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPg0KdmFyIGdhSnNIb3N0ID0gKChcImh0dHBzOlwiID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKSA/IFwiaHR0cHM6Ly9zc2wuXCIgOiBcImh0dHA6Ly93d3cuXCIpOw0KZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoXCIlM0NzY3JpcHQgc3JjPVwnXCIgKyBnYUpzSG9zdCArIFwiZ29vZ2xlLWFuYWx5dGljcy5jb20vZ2EuanNcJyB0eXBlPVwndGV4dC9qYXZhc2NyaXB0XCclM0UlM0Mvc2NyaXB0JTNFXCIpKTsNCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+DQp0cnkgew0KdmFyIHBhZ2VUcmFja2VyID0gX2dhdC5fZ2V0VHJhY2tlcihcIlVBLTkyNjkyMDMtMVwiKTsNCnBhZ2VUcmFja2VyLl90cmFja1BhZ2V2aWV3KCk7DQp9IGNhdGNoKGVycikge308L3NjcmlwdD48L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2FyYzwvc3Ryb25nPiAtIHRydWU8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbms8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29faG9tZV9saW5rX2Rlc2M8L3N0cm9uZz4gLSA8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX2xpbmtfdGV4dDwvc3Ryb25nPiAtIEhvbWU8L2xpPjxsaT48c3Ryb25nPndvb19ob21lX3RodW1iX2hlaWdodDwvc3Ryb25nPiAtIDkyPC9saT48bGk+PHN0cm9uZz53b29faG9tZV90aHVtYl93aWR0aDwvc3Ryb25nPiAtIDI0NzwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX2hlaWdodDwvc3Ryb25nPiAtIDIxMDwvbGk+PGxpPjxzdHJvbmc+d29vX2ltYWdlX3NpbmdsZTwvc3Ryb25nPiAtIGZhbHNlPC9saT48bGk+PHN0cm9uZz53b29faW1hZ2Vfd2lkdGg8L3N0cm9uZz4gLSA1NDA8L2xpPjxsaT48c3Ryb25nPndvb19sb2dvPC9zdHJvbmc+IC0gaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8xMS1TaXRlLUxvZ28tMi5wbmc8L2xpPjxsaT48c3Ryb25nPndvb19tYW51YWw8L3N0cm9uZz4gLSBodHRwOi8vd3d3Lndvb3RoZW1lcy5jb20vc3VwcG9ydC90aGVtZS1kb2N1bWVudGF0aW9uL2J1c3ktYmVlLzwvbGk+PGxpPjxzdHJvbmc+d29vX25hdl9leGNsdWRlPC9zdHJvbmc+IC0gPC9saT48bGk+PHN0cm9uZz53b29fcG9wdWxhcl9wb3N0czwvc3Ryb25nPiAtIFNlbGVjdCBhIG51bWJlcjo8L2xpPjxsaT48c3Ryb25nPndvb19yZXNpemU8L3N0cm9uZz4gLSB0cnVlPC9saT48bGk+PHN0cm9uZz53b29fc2Nyb2xsZXJfcG9zdHM8L3N0cm9uZz4gLSAxMDwvbGk+PGxpPjxzdHJvbmc+d29vX3Nob3J0bmFtZTwvc3Ryb25nPiAtIHdvbzwvbGk+PGxpPjxzdHJvbmc+d29vX3NpbmdsZV9oZWlnaHQ8L3N0cm9uZz4gLSAxMjA8L2xpPjxsaT48c3Ryb25nPndvb19zaW5nbGVfd2lkdGg8L3N0cm9uZz4gLSAxODA8L2xpPjxsaT48c3Ryb25nPndvb190YWJzPC9zdHJvbmc+IC0gdHJ1ZTwvbGk+PGxpPjxzdHJvbmc+d29vX3RoZW1lbmFtZTwvc3Ryb25nPiAtIEJ1c3kgQmVlPC9saT48bGk+PHN0cm9uZz53b29fdGh1bWJfaGVpZ2h0PC9zdHJvbmc+IC0gODg8L2xpPjxsaT48c3Ryb25nPndvb190aHVtYl93aWR0aDwvc3Ryb25nPiAtIDg4PC9saT48bGk+PHN0cm9uZz53b29fdHdpdHRlcjwvc3Ryb25nPiAtIHRrcnBob3RvPC9saT48bGk+PHN0cm9uZz53b29fdXBsb2Fkczwvc3Ryb25nPiAtIGE6OTp7aTowO3M6NjU6Imh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvMTEtU2l0ZS1Mb2dvLTIucG5nIjtpOjE7czo2MzoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy8xMC1TaXRlLUxvZ28ucG5nIjtpOjI7czo2NjoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy85LU1HXzE2MjJfTG9SZXMuanBnIjtpOjM7czo3MzoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy84LUJvc3Rvbi0zNTAtMzUyLUZpbmFsLmpwZyI7aTo0O3M6NzU6Imh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNy1EYW5pZWwtUG9ydHJhaXRzLVdlYi04LmpwZyI7aTo1O3M6NjI6Imh0dHA6Ly93d3cudGtycGhvdG8uY29tL3dwLWNvbnRlbnQvd29vX3VwbG9hZHMvNi1TdGFjaWEtMTkuanBnIjtpOjY7czo2NjoiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy81LU1HXzE3MTRfTG9SZXMuanBnIjtpOjc7czo1OToiaHR0cDovL3d3dy50a3JwaG90by5jb20vd3AtY29udGVudC93b29fdXBsb2Fkcy80LVVTRmxhZy5pY28iO2k6ODtzOjY1OiJodHRwOi8vd3d3LnRrcnBob3RvLmNvbS93cC1jb250ZW50L3dvb191cGxvYWRzLzMtTG9nb19XaGl0ZV8yLnBuZyI7fTwvbGk+PGxpPjxzdHJvbmc+d29vX3ZpZGVvX2NhdGVnb3J5PC9zdHJvbmc+IC0gU2VsZWN0IGEgY2F0ZWdvcnk6PC9saT48L3VsPg==