I built this game to practice Korean the way I actually use it: ordering coffee, finding my way, making small talk with new people. Twelve quests take you from your first 안녕하세요 to handling daily life with confidence. Learn the words, live them in a short story, then speak them out loud — the game listens and coaches your pronunciation, syllable by syllable. It is free, it works on desktop and mobile, and the voice features work best in Chrome. Take it slowly, and have fun.
PHN0eWxlPgogIDpyb290IHsKICAgIC0tYmc6dHJhbnNwYXJlbnQ7IC0tY2FyZDojRkJGNkVBOyAtLWNhcmQyOiNFQ0UzQ0I7IC0tYWNjZW50OiNDNjhGM0U7IC0tYWNjZW50MjojNTAzQUE4OwogICAgLS1nb2xkOiNCMDdEMjg7IC0tZ3JlZW46IzJGN0Q0RjsgLS1yZWQ6I0NGMkUyRTsgLS10ZXh0OiMyQTJBMkE7IC0tbXV0ZWQ6Izc1NjY0RDsKICB9CiAgKiB7IG1hcmdpbjowOyBwYWRkaW5nOjA7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50OyB9CiAgI2txLWFwcCB7CiAgICB3aWR0aDoxMDB2dzsKICAgIHBvc2l0aW9uOnJlbGF0aXZlOwogICAgbGVmdDo1MCU7CiAgICBtYXJnaW4tbGVmdDotNTB2dzsKICAgIHBhZGRpbmc6MThweCAwIDUwcHg7CiAgICBmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUkiLCJBcHBsZSBTRCBHb3RoaWMgTmVvIixzYW5zLXNlcmlmOwogICAgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGNvbG9yOnZhcigtLXRleHQpOyBtaW4taGVpZ2h0OjEwMHZoOwogICAgYmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAxMCUsICNDNjhGM0UxOCAwJSwgdHJhbnNwYXJlbnQgNTAlKSwKICAgICAgICAgICAgICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgOTAlLCAjNTAzQUE4MTAgMCUsIHRyYW5zcGFyZW50IDUwJSk7CiAgfQogIC53cmFwIHsgbWF4LXdpZHRoOjY0MHB4OyBtYXJnaW46MCBhdXRvOyBwYWRkaW5nOjE2cHggMTRweCA3MHB4OyB9CiAgLyogZGVza3RvcDogdXNlIHRoZSByb29tIOKAlCBtYXAgc2NyZWVucyBnbyB3aWRlLCBmb2N1c2VkIHNjcmVlbnMgc3RheSByZWFkYWJsZSAqLwogIEBtZWRpYSAobWluLXdpZHRoOjkwMHB4KSB7CiAgICAud3JhcCB7IG1heC13aWR0aDoxMDgwcHg7IH0KICAgIC53cmFwIC5tYXAtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCwgMWZyKTsgfQogICAgI2xlc3NvbiwgI2ZyZWUsICNxdWl6LCAjbWF0Y2gsICNidWlsZGVyLCAjYm9zcywgI3Jlc3VsdCB7IG1heC13aWR0aDo3MjBweDsgbWFyZ2luOjAgYXV0bzsgfQogIH0KCiAgLyogSFVEICovCiAgLmh1ZCB7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTJweDsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNnB4OyBwYWRkaW5nOjEwcHggMTRweDsgbWFyZ2luLWJvdHRvbToxNHB4OyBib3gtc2hhZG93OjAgNHB4IDIwcHggcmdiYSgwLDAsMCwuMDgpOyB9CiAgLmF2YXRhciB7IHdpZHRoOjQ2cHg7IGhlaWdodDo0NnB4OyBib3JkZXItcmFkaXVzOjEycHg7IGZvbnQtc2l6ZToyNnB4OyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsI0M2OEYzRTMzLCM1MDNBQTgzMyk7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBib3JkZXI6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7IGZsZXg6bm9uZTsgfQogIC5odWQtbWlkIHsgZmxleDoxOyBtaW4td2lkdGg6MDsgfQogIC5odWQtdGl0bGUgeyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxNHB4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IG92ZXJmbG93OmhpZGRlbjsgdGV4dC1vdmVyZmxvdzplbGxpcHNpczsgfQogIC54cGJhciB7IGhlaWdodDo5cHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTApOyBib3JkZXItcmFkaXVzOjZweDsgbWFyZ2luLXRvcDo1cHg7IG92ZXJmbG93OmhpZGRlbjsgfQogIC54cGZpbGwgeyBoZWlnaHQ6MTAwJTsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdmFyKC0tYWNjZW50KSx2YXIoLS1nb2xkKSk7IGJvcmRlci1yYWRpdXM6NnB4OyB0cmFuc2l0aW9uOndpZHRoIC41czsgfQogIC5odWQtc3ViIHsgZm9udC1zaXplOjEwLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjNweDsgfQogIC8qIGZpcnN0IHNlc3Npb25zIG9ubHk6IHdoYXQgdGhlIG51bWJlcnMgbWVhbiwgaW4gb25lIGxpbmUsIGRpc21pc3NpYmxlICovCiAgLmh1ZC1oaW50IHsgZGlzcGxheTpmbGV4OyBnYXA6MTBweDsgYWxpZ24taXRlbXM6ZmxleC1zdGFydDsgZm9udC1zaXplOjEyLjVweDsgbGluZS1oZWlnaHQ6MS41OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlci1yYWRpdXM6MTJweDsgcGFkZGluZzo5cHggMTJweDsgbWFyZ2luOi02cHggMCAxNHB4OyB9CiAgLmh1ZC1oaW50IGIgeyBjb2xvcjp2YXIoLS10ZXh0KTsgfQogIC5odWQtaGludCBidXR0b24geyBiYWNrZ3JvdW5kOm5vbmU7IGJvcmRlcjowOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxNXB4OyBjdXJzb3I6cG9pbnRlcjsgZm9udC1mYW1pbHk6aW5oZXJpdDsgcGFkZGluZzowIDJweDsgZmxleDpub25lOyB9CiAgLnN0cmVhayB7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmbGV4Om5vbmU7IH0KICAuc3BkYnRuIHsgYm9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWFjY2VudCk7IGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7IGNvbG9yOnZhcigtLWFjY2VudCk7IGJvcmRlci1yYWRpdXM6OTk5cHg7IHBhZGRpbmc6M3B4IDEwcHg7IGZvbnQtc2l6ZToxMXB4OyBmb250LXdlaWdodDo3MDA7IGN1cnNvcjpwb2ludGVyOyBmb250LWZhbWlseTppbmhlcml0OyB3aGl0ZS1zcGFjZTpub3dyYXA7IH0KICAuc3RyZWFrIGIgeyBkaXNwbGF5OmJsb2NrOyBmb250LXNpemU6MThweDsgY29sb3I6dmFyKC0tZ29sZCk7IH0KCiAgLnNjcmVlbiB7IGRpc3BsYXk6bm9uZTsgYW5pbWF0aW9uOnBvcCAuMjVzIGVhc2U7IH0KICAuc2NyZWVuLmFjdGl2ZSB7IGRpc3BsYXk6YmxvY2s7IH0KICBAa2V5ZnJhbWVzIHBvcCB7IGZyb20geyBvcGFjaXR5OjA7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwcHgpIHNjYWxlKC45OCk7fSB0byB7IG9wYWNpdHk6MTsgdHJhbnNmb3JtOm5vbmU7IH0gfQogIGgxIHsgZm9udC1zaXplOjIzcHg7IG1hcmdpbi1ib3R0b206MnB4OyB9CiAgLnN1YnRpdGxlIHsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXNpemU6MTNweDsgbWFyZ2luLWJvdHRvbToxNHB4OyB9CgogIC8qIE1BUCAqLwogIC5tYXAtZ3JpZCB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoxMHB4OyB9CiAgQG1lZGlhIChtaW4td2lkdGg6NTIwcHgpIHsgLm1hcC1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyOyB9IH0KICAubGNhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjE2cHg7IHBhZGRpbmc6MTRweCAxMnB4OyBjdXJzb3I6cG9pbnRlcjsgYm9yZGVyOjJweCBzb2xpZCB0cmFuc3BhcmVudDsgdHJhbnNpdGlvbjphbGwgLjE1czsgcG9zaXRpb246cmVsYXRpdmU7IH0KICAubGNhcmQ6aG92ZXIgeyBib3JkZXItY29sb3I6dmFyKC0tYWNjZW50Mik7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpOyB9CiAgLmxjYXJkIC5sbnVtIHsgZm9udC1zaXplOjEwcHg7IGZvbnQtd2VpZ2h0OjgwMDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBsZXR0ZXItc3BhY2luZzoxcHg7IH0KICAubGNhcmQgLmxlbW9qaSB7IGZvbnQtc2l6ZTozMHB4OyBtYXJnaW46NHB4IDA7IH0KICAubGNhcmQgLmxrciB7IGZvbnQtc2l6ZToxN3B4OyBmb250LXdlaWdodDo4MDA7IH0KICAubGNhcmQgLmxlbiB7IGZvbnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IH0KICAubGNhcmQgLmxzdGFycyB7IG1hcmdpbi10b3A6NnB4OyBmb250LXNpemU6MTJweDsgbGV0dGVyLXNwYWNpbmc6MXB4OyB9CiAgLmxjYXJkIC5scHJvZyB7IGhlaWdodDo1cHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTApOyBib3JkZXItcmFkaXVzOjRweDsgbWFyZ2luLXRvcDo2cHg7IG92ZXJmbG93OmhpZGRlbjsgfQogIC5sY2FyZCAubHByb2cgaSB7IGRpc3BsYXk6YmxvY2s7IGhlaWdodDoxMDAlOyBiYWNrZ3JvdW5kOnZhcigtLWdyZWVuKTsgYm9yZGVyLXJhZGl1czo0cHg7IH0KCiAgLyogTEVTU09OIGhlYWRlciArIHRhYnMgKi8KICAubGhlYWQgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEwcHg7IG1hcmdpbi1ib3R0b206MTJweDsgfQogIC8qIEEgYmFyZSBncmV5IGFycm93IG9uIGEgY3JlYW0gY2FyZCByZWFkcyBhcyBkZWNvcmF0aW9uLCBub3QgYSBjb250cm9sIC0tIGEKICAgICBmaXJzdC10aW1lIHRlc3RlciBjb3VsZCBub3QgZmluZCBpdC4gSXQgbm93IGNhcnJpZXMgdGhlIGFwcCdzIG93biBidXR0b24KICAgICBsYW5ndWFnZTogZ29sZCBib3JkZXIsIHRoZSB3b3JkIEJhY2ssIGFuZCBhIDQ0cHggdGFwIHRhcmdldC4gKi8KICAuYmFjayB7IGN1cnNvcjpwb2ludGVyOyBjb2xvcjp2YXIoLS1nb2xkKTsgZm9udC1zaXplOjE1cHg7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlcjoycHggc29saWQgdmFyKC0tZ29sZCk7IGZvbnQtd2VpZ2h0OjgwMDsgcGFkZGluZzoxMHB4IDE1cHg7IGJvcmRlci1yYWRpdXM6MTJweDsgbWluLWhlaWdodDo0NHB4OyBkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGdhcDo2cHg7IHdoaXRlLXNwYWNlOm5vd3JhcDsgZmxleDpub25lOyB9CiAgLmJhY2s6bm90KC5iYWNrLWxhYmVsbGVkKTo6YWZ0ZXIgeyBjb250ZW50OiJCYWNrIjsgfQogIC5iYWNrOmFjdGl2ZSB7IG9wYWNpdHk6LjY1OyB9CiAgLmxoZWFkIC50IHsgZmxleDoxOyB9CiAgLmxoZWFkIC50IGIgeyBmb250LXNpemU6MThweDsgZGlzcGxheTpibG9jazsgfQogIC5saGVhZCAudCBzcGFuIHsgZm9udC1zaXplOjExLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyB9CiAgLnRhYnMgeyBkaXNwbGF5OmZsZXg7IGdhcDo2cHg7IG1hcmdpbi1ib3R0b206MTRweDsgb3ZlcmZsb3cteDphdXRvOyBwYWRkaW5nLWJvdHRvbToycHg7IH0KICAudGFiIHsgZmxleDoxOyBtaW4td2lkdGg6NzBweDsgcGFkZGluZzo5cHggNHB4OyBib3JkZXItcmFkaXVzOjEycHg7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxMnB4OyBjdXJzb3I6cG9pbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfQogIC50YWIub24geyBib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTsgY29sb3I6dmFyKC0tdGV4dCk7IGJhY2tncm91bmQ6I0M2OEYzRTFhOyB9CgogIC8qIExFQVJOIGNhcmQgKi8KICAud2NhcmQgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQpOyBib3JkZXItcmFkaXVzOjIycHg7IHBhZGRpbmc6MjRweCAxOHB4IDE4cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3gtc2hhZG93OjAgNHB4IDI0cHggcmdiYSgwLDAsMCwuMTApOyB9CiAgLndjYXJkIC53ZW1vamkgeyBmb250LXNpemU6NjRweDsgbGluZS1oZWlnaHQ6MS4xOyBmaWx0ZXI6ZHJvcC1zaGFkb3coMCA2cHggMTRweCAjMDAwMDAwNjYpOyB9CiAgLndjYXJkIC53a3IgeyBmb250LXNpemU6MzJweDsgZm9udC13ZWlnaHQ6ODAwOyBtYXJnaW4tdG9wOjhweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAud2NhcmQgLndybyB7IGZvbnQtc2l6ZToxM3B4OyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgbWFyZ2luLXRvcDoycHg7IH0KICAud2NhcmQgLndtZWFuIHsgZm9udC1zaXplOjE4cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tZ29sZCk7IG1hcmdpbi10b3A6MTBweDsgfQogIC53Y2FyZCAud3ZpIHsgZm9udC1zaXplOjEzcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDoycHg7IH0KICAud2NhcmQgLndleCB7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYpOyBib3JkZXItcmFkaXVzOjE0cHg7IHBhZGRpbmc6MTJweDsgbWFyZ2luLXRvcDoxNHB4OyBmb250LXNpemU6MTVweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAud2NhcmQgLndleCAuZXhlbiB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc3R5bGU6aXRhbGljOyBtYXJnaW4tdG9wOjRweDsgfQogIC5sZWFybi1uYXYgeyBkaXNwbGF5OmZsZXg7IGdhcDo4cHg7IG1hcmdpbi10b3A6MTJweDsgfQogIC5sZWFybi1uYXYgLmJ0biB7IGZsZXg6MTsgfQogIC8qIHRoZSBtYWluIGFjdGlvbiBnZXRzIHRoZSByb29tOyBhcnJvd3Mgc3RheSB0YXBwYWJsZSBidXQgc21hbGwgLS0gb24gYSBwaG9uZSB0aGUgb2xkCiAgICAgZXF1YWwgc3BsaXQgd3JhcHBlZCAiR290IGl0ISAoKzMgWFApIiBvbnRvIHRocmVlIGxpbmVzICovCiAgLmxlYXJuLW5hdiAuYnRuLmtub3cgeyBmbGV4OjIuNDsgd2hpdGUtc3BhY2U6bm93cmFwOyB9CiAgQG1lZGlhIChtYXgtd2lkdGg6NDgwcHgpIHsKICAgIC8qIHNpeCBsZXNzb24gdGFicyBkbyBub3QgZml0IG9uZSByb3cgb24gYSBwaG9uZTogdGhlIGxhc3QgdHdvIHdlcmUgY2xpcHBlZCBvZmYtc2NyZWVuLAogICAgICAgc28gYSBmaXJzdC10aW1lIGxlYXJuZXIgbmV2ZXIgc2F3IFNwZWFrIG9yIFBsYXkuIFR3byByb3dzIG9mIHRocmVlIGluc3RlYWQuICovCiAgICAudGFicyB7IGZsZXgtd3JhcDp3cmFwOyBvdmVyZmxvdzp2aXNpYmxlOyB9CiAgICAudGFiIHsgZmxleDoxIDEgMzAlOyBtaW4td2lkdGg6MDsgZm9udC1zaXplOjEzLjVweDsgcGFkZGluZzo5cHggMnB4OyB9CiAgICAvKiB0aGUgSFVEIGF0ZSBhIGZpZnRoIG9mIHRoZSBzY3JlZW4gb24gZXZlcnkgcGFnZTsga2VlcCBpdCwgYnV0IGxpZ2h0ZXIgKi8KICAgIC5odWQgeyBwYWRkaW5nOjhweCAxMnB4OyBnYXA6MTBweDsgbWFyZ2luLWJvdHRvbToxMHB4OyB9CiAgICAuaHVkIC5hdmF0YXIsIC5odWQgLmF2YSB7IHdpZHRoOjQ2cHg7IGhlaWdodDo0NnB4OyBmb250LXNpemU6MjZweDsgfQogICAgLmh1ZC10aXRsZSB7IHdoaXRlLXNwYWNlOm5vcm1hbDsgb3ZlcmZsb3c6dmlzaWJsZTsgZm9udC1zaXplOjEzLjVweDsgbGluZS1oZWlnaHQ6MS4yOyB9CiAgICAubGVhcm4tbmF2IC5idG4geyBwYWRkaW5nOjEycHggNnB4OyBmb250LXNpemU6MTVweDsgfQogIH0KICAua25vdyB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyx2YXIoLS1ncmVlbiksIzFGNUEzOCkgIWltcG9ydGFudDsgfQogIC5sZWFybi1jb3VudCB7IHRleHQtYWxpZ246Y2VudGVyOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMnB4OyBtYXJnaW4tdG9wOjEwcHg7IH0KICAuc25kYnRuIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7IGNvbG9yOnZhcigtLXRleHQpOyBib3JkZXItcmFkaXVzOjEycHg7IHBhZGRpbmc6N3B4IDE0cHg7IGZvbnQtc2l6ZToxNHB4OyBjdXJzb3I6cG9pbnRlcjsgZm9udC13ZWlnaHQ6NzAwOyBtYXJnaW46MTBweCAzcHggMDsgfQogIC5zbmRidG46YWN0aXZlIHsgdHJhbnNmb3JtOnNjYWxlKC45NSk7IH0KCiAgLyogU1RPUlkgKi8KICAuc3RhZ2UgeyBib3JkZXItcmFkaXVzOjIwcHg7IG1pbi1oZWlnaHQ6MTUwcHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBnYXA6MTRweDsgcGFkZGluZzoxOHB4OyBtYXJnaW4tYm90dG9tOjEycHg7IGJveC1zaGFkb3c6aW5zZXQgMCAtMzBweCA0MHB4IHJnYmEoMCwwLDAsLjA2KSwgMCA0cHggMjBweCByZ2JhKDAsMCwwLC4wOCk7IHBvc2l0aW9uOnJlbGF0aXZlOyBvdmVyZmxvdzpoaWRkZW47IH0KICAuc3RhZ2UgLmFjdG9yIHsgZm9udC1zaXplOjQ2cHg7IGFuaW1hdGlvbjpib2IgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZTsgZmlsdGVyOmRyb3Atc2hhZG93KDAgNnB4IDEwcHggcmdiYSgwLDAsMCwuMTApKTsgfQogIC5zdGFnZSAuYWN0b3I6bnRoLWNoaWxkKDIpIHsgYW5pbWF0aW9uLWRlbGF5Oi40czsgZm9udC1zaXplOjUycHg7IH0KICAuc3RhZ2UgLmFjdG9yOm50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTouOHM7IH0KICBAa2V5ZnJhbWVzIGJvYiB7IDUwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVZKC05cHgpOyB9IH0KICAuc3RhZ2UuZngtc2hha2UgLmFjdG9yIHsgYW5pbWF0aW9uOnN0c2hha2UgLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOyB9CiAgQGtleWZyYW1lcyBzdHNoYWtlIHsgMjUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTVweCkgcm90YXRlKC00ZGVnKTt9IDc1JSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKDVweCkgcm90YXRlKDRkZWcpO30gfQogIC5zdGFnZS5meC1ydW4gLmFjdG9yOmZpcnN0LWNoaWxkIHsgYW5pbWF0aW9uOnJ1bmJ5IDEuNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH0KICBAa2V5ZnJhbWVzIHJ1bmJ5IHsgMCUsMTAwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xNHB4KTt9IDUwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKDE0cHgpIHJvdGF0ZSg2ZGVnKTt9IH0KICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgeyAuc3RhZ2UgLmFjdG9yIHsgYW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudDsgfSB9CiAgLmJnLWRhd24geyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzJiMWE0YSwjYjg1YzdhKTsgfQogIC5iZy1kYXkgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzFkMzU1NywjNDU3YjlkKTsgfQogIC5iZy1uaWdodCB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjMGIwZDJhLCMyYjJkNmUpOyB9CiAgLmJnLWluZG9vciB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjM2EyZTJhLCM2YjRmM2EpOyB9CiAgLmJnLWZlc3RpdmUgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzRhMTk0MiwjOGYyZDU2KTsgfQogIC5iZy1uYXR1cmUgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzE0NDMyYSwjM2E3ZDQ0KTsgfQogIC5iZy1jaXR5IHsgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCMyMzI5NDYsIzVmNmM4YSk7IH0KICAuYmctc2hvcCB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjNDAzNTZiLCM3YTVjYTMpOyB9CiAgLnN0LW5hciB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlci1yYWRpdXM6MTRweDsgcGFkZGluZzoxMnB4IDE0cHg7IGZvbnQtc2l6ZToxMy41cHg7IGxpbmUtaGVpZ2h0OjEuNTsgY29sb3I6dmFyKC0tdGV4dCk7IG1hcmdpbi1ib3R0b206MTBweDsgYm9yZGVyLWxlZnQ6M3B4IHNvbGlkIHZhcigtLWdvbGQpOyB9CiAgLmJ1YmJsZSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXItcmFkaXVzOjE2cHggMTZweCAxNnB4IDRweDsgcGFkZGluZzoxMnB4IDE0cHg7IG1hcmdpbi1ib3R0b206MTJweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAuYnViYmxlIC53aG8geyBmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tYWNjZW50Mik7IGZvbnQtd2VpZ2h0OjgwMDsgfQogIC5idWJibGUgLmJrciB7IGZvbnQtc2l6ZToxOHB4OyBmb250LXdlaWdodDo3MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLmJ1YmJsZSAuYmVuIHsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6M3B4OyB9CiAgLnN0LWRvdHMgeyB0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luLXRvcDoxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxM3B4OyBsZXR0ZXItc3BhY2luZzozcHg7IH0KICAuYW5zIC5hZW4geyBmb250LXNpemU6MTEuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtd2VpZ2h0OjQwMDsgbWFyZ2luLXRvcDoycHg7IH0KCiAgLyogVEFMSyAoY29udmVyc2F0aW9uKSAqLwogIC5jaGF0IHsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDo4cHg7IG1pbi1oZWlnaHQ6MTQwcHg7IG1hcmdpbi1ib3R0b206MTBweDsgfQogIC5tc2cgeyBtYXgtd2lkdGg6ODYlOyBwYWRkaW5nOjEwcHggMTNweDsgYm9yZGVyLXJhZGl1czoxNnB4OyBmb250LXNpemU6MTUuNXB4OyBsaW5lLWhlaWdodDoxLjQ1OyBhbmltYXRpb246cG9wIC4yNXMgZWFzZTsgfQogIC5tc2cgLm1lbiB7IGZvbnQtc2l6ZToxMS41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6M3B4OyB9CiAgLm1zZy5ucGMgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTsgYWxpZ24tc2VsZjpmbGV4LXN0YXJ0OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDsgY3Vyc29yOnBvaW50ZXI7IH0KICAubXNnLm5wYyAud2hvIHsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLWFjY2VudDIpOyBmb250LXdlaWdodDo4MDA7IG1hcmdpbi1ib3R0b206MnB4OyB9CiAgLm1zZy5tZSB7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjQzY4RjNFMmUsI0EwNkYyNDNkKTsgYm9yZGVyOjFweCBzb2xpZCAjQzY4RjNFNTU7IGFsaWduLXNlbGY6ZmxleC1lbmQ7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDsgfQogIC5tc2cubWUgLnNjb3JlIHsgZm9udC1zaXplOjExLjVweDsgY29sb3I6dmFyKC0tZ3JlZW4pOyBmb250LXdlaWdodDo4MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLm1zZy5zeXMgeyBhbGlnbi1zZWxmOmNlbnRlcjsgYmFja2dyb3VuZDpub25lOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMnB4OyB9CiAgLm1zZy50eXBpbmcgc3BhbiB7IGRpc3BsYXk6aW5saW5lLWJsb2NrOyBhbmltYXRpb246YmxpbmsgMXMgaW5maW5pdGU7IH0KICAubXNnLnR5cGluZyBzcGFuOm50aC1jaGlsZCgyKSB7IGFuaW1hdGlvbi1kZWxheTouMnM7IH0gLm1zZy50eXBpbmcgc3BhbjpudGgtY2hpbGQoMykgeyBhbmltYXRpb24tZGVsYXk6LjRzOyB9CiAgQGtleWZyYW1lcyBibGluayB7IDUwJSB7IG9wYWNpdHk6LjI7IH0gfQogIC5tYXNrZWQgeyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgZm9udC13ZWlnaHQ6NzAwOyB9CiAgLnRrLXRhc2sgeyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA2KTsgYm9yZGVyOjFweCBkYXNoZWQgI0Q5QzlBODsgYm9yZGVyLXJhZGl1czoxMnB4OyBwYWRkaW5nOjEwcHggMTJweDsgZm9udC1zaXplOjEzLjVweDsgbWFyZ2luLWJvdHRvbToxMHB4OyBsaW5lLWhlaWdodDoxLjU7IH0KICAudGstdGFzayAuaGludGxpbmUgeyBtYXJnaW4tdG9wOjZweDsgZm9udC1zaXplOjE2cHg7IGZvbnQtd2VpZ2h0OjcwMDsgfQogIC50ay1jb250cm9scyB7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBnYXA6MTRweDsgbWFyZ2luLXRvcDoycHg7IH0KICAudGstbWljIHsgd2lkdGg6NjRweDsgaGVpZ2h0OjY0cHg7IGZvbnQtc2l6ZToyNnB4OyBtYXJnaW4tdG9wOjA7IH0KCiAgLyogR1JBTU1BUiAqLwogIC5nY2FyZCB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlci1yYWRpdXM6MThweDsgcGFkZGluZzoxOHB4OyBtYXJnaW4tYm90dG9tOjEycHg7IH0KICAuZ3BhdCB7IGZvbnQtc2l6ZToyMnB4OyBmb250LXdlaWdodDo4MDA7IGNvbG9yOnZhcigtLWFjY2VudDIpOyB9CiAgLmdtZWFuIHsgZm9udC1zaXplOjE0cHg7IGNvbG9yOnZhcigtLWdvbGQpOyBmb250LXdlaWdodDo3MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLmd2aSB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IH0KICAuZ25vdGUgeyBmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tdGV4dCk7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYpOyBib3JkZXItbGVmdDozcHggc29saWQgdmFyKC0tYWNjZW50KTsgYm9yZGVyLXJhZGl1czo4cHg7IHBhZGRpbmc6MTBweCAxMnB4OyBtYXJnaW4tdG9wOjEwcHg7IGxpbmUtaGVpZ2h0OjEuNTsgfQogIC5nZXggeyBtYXJnaW4tdG9wOjEwcHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpOyBib3JkZXItcmFkaXVzOjEycHg7IHBhZGRpbmc6MTBweCAxMnB4OyBjdXJzb3I6cG9pbnRlcjsgfQogIC5nZXggLmsgeyBmb250LXNpemU6MTUuNXB4OyBmb250LXdlaWdodDo2MDA7IH0KICAuZ2V4IC5lIHsgZm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6MnB4OyB9CiAgLmdleCAuc3BrIHsgY29sb3I6dmFyKC0tYWNjZW50Mik7IGZvbnQtc2l6ZToxMnB4OyB9CgogIC8qIFNQRUFLICovCiAgLnNjYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoyMHB4OyBwYWRkaW5nOjIycHggMThweDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAuc2NhcmQgLnNrciB7IGZvbnQtc2l6ZToyNHB4OyBmb250LXdlaWdodDo4MDA7IGxpbmUtaGVpZ2h0OjEuNDsgfQogIC5zY2FyZCAuc2VuIHsgZm9udC1zaXplOjEzcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zdHlsZTppdGFsaWM7IG1hcmdpbi10b3A6NnB4OyB9CiAgLm1pYyB7IHdpZHRoOjg0cHg7IGhlaWdodDo4NHB4OyBib3JkZXItcmFkaXVzOjUwJTsgYm9yZGVyOm5vbmU7IGZvbnQtc2l6ZTozNnB4OyBtYXJnaW4tdG9wOjE2cHg7IGN1cnNvcjpwb2ludGVyOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tYWNjZW50KSwjQTA2RjI0KTsgY29sb3I6I2ZmZjsgYm94LXNoYWRvdzowIDZweCAyNHB4ICNDNjhGM0U1NTsgdHJhbnNpdGlvbjphbGwgLjJzOyB9CiAgLm1pYy5saXN0ZW5pbmcgeyBhbmltYXRpb246cHVsc2UyIDFzIGluZmluaXRlOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tcmVkKSwjOEYxRjFGKTsgfQogIEBrZXlmcmFtZXMgcHVsc2UyIHsgNTAlIHsgdHJhbnNmb3JtOnNjYWxlKDEuMSk7IGJveC1zaGFkb3c6MCAwIDAgMThweCAjQ0YyRTJFMjI7IH0gfQogIC5zcmVzdWx0IHsgbWluLWhlaWdodDo0NHB4OyBtYXJnaW4tdG9wOjEycHg7IGZvbnQtc2l6ZToxNXB4OyBmb250LXdlaWdodDo3MDA7IH0KICAuc3Jlc3VsdCAuaGVhcmQgeyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxM3B4OyBmb250LXdlaWdodDo0MDA7IG1hcmdpbi10b3A6M3B4OyB9CiAgLnNlbGZncmFkZSB7IGRpc3BsYXk6bm9uZTsgZ2FwOjhweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgbWFyZ2luLXRvcDoxMHB4OyB9CiAgLnNway1kaWZmIHsgZm9udC1zaXplOjI0cHg7IGZvbnQtd2VpZ2h0OjgwMDsgbGluZS1oZWlnaHQ6MS42OyBtYXJnaW4tdG9wOjhweDsgbGV0dGVyLXNwYWNpbmc6MXB4OyB9CiAgLnN5bC1vayB7IGNvbG9yOnZhcigtLWdyZWVuKTsgfQogIC5zeWwtYmFkIHsgY29sb3I6dmFyKC0tcmVkKTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7IGN1cnNvcjpwb2ludGVyOyB9CiAgLm1pYy1oaW50IHsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDo2cHg7IH0KICAuZml4bGluZSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MXB4IHNvbGlkICNEOUM5QTg7IGJvcmRlci1sZWZ0OjNweCBzb2xpZCB2YXIoLS1yZWQpOyBib3JkZXItcmFkaXVzOjEwcHg7IHBhZGRpbmc6OXB4IDExcHg7IG1hcmdpbi10b3A6N3B4OyBmb250LXNpemU6MTNweDsgbGluZS1oZWlnaHQ6MS41OyBjdXJzb3I6cG9pbnRlcjsgdGV4dC1hbGlnbjpsZWZ0OyB9CiAgLmZpeGxpbmUgYiB7IGZvbnQtc2l6ZToxNnB4OyB9CiAgLnNheXJvdyB7IGRpc3BsYXk6ZmxleDsgZ2FwOjhweDsgbWFyZ2luLXRvcDoxMnB4OyBhbGlnbi1pdGVtczpzdHJldGNoOyB9CiAgLnNheWJ0biB7IGZsZXg6MTsgbWFyZ2luOjA7IHBhZGRpbmc6MTRweCAxNnB4OyBmb250LXNpemU6MTUuNXB4OyBib3JkZXItcmFkaXVzOjE0cHg7IH0KICAuc2F5cm93IC5zbmRidG4geyBtYXJnaW46MDsgfQogIC5zYXlidG4uc3RvcG1vZGUgeyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tcmVkKSwjOEYxRjFGKTsgYW5pbWF0aW9uOnB1bHNlMiAxcyBpbmZpbml0ZTsgfQogIC5zYXlidG4uY2hlY2tpbmcgeyBiYWNrZ3JvdW5kOnZhcigtLW11dGVkKTsgYW5pbWF0aW9uOm5vbmU7IG9wYWNpdHk6Ljk7IH0KICAvKiB0aGUgbWljIHByb21wdCB3aGlsZSBsaXN0ZW5pbmc6IGJpZyBlbm91Z2ggdGhhdCBub2JvZHkgbWlzc2VzICJ0aHJlZSB0aW1lcyIgb3IgInRhcCBzdG9wIiAqLwogIC5zcmVzdWx0Lm1pY0NvYWNoIHsgZm9udC1zaXplOjE3cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjp2YXIoLS10ZXh0KTsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyOjJweCBzb2xpZCB2YXIoLS1nb2xkKTsgYm9yZGVyLXJhZGl1czoxNHB4OyBwYWRkaW5nOjEycHggMTRweDsgbWFyZ2luLXRvcDoxMHB4OyBsaW5lLWhlaWdodDoxLjQ1OyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogIC5zcmVzdWx0Lm1pY0NvYWNoIHNtYWxsIHsgZGlzcGxheTpibG9jazsgZm9udC13ZWlnaHQ6NTAwOyBmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjVweDsgfQogIC5taWNNaXNzIHsgZm9udC1zaXplOjE0LjVweDsgZm9udC13ZWlnaHQ6NjAwOyBjb2xvcjp2YXIoLS10ZXh0KTsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWNhcmQyKTsgYm9yZGVyLXJhZGl1czoxMnB4OyBwYWRkaW5nOjExcHggMTNweDsgbWFyZ2luLXRvcDo4cHg7IGxpbmUtaGVpZ2h0OjEuNTsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAubWljVHJ5IHsgZGlzcGxheTpmbGV4OyBnYXA6OHB4OyBmbGV4LXdyYXA6d3JhcDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgbWFyZ2luLXRvcDo5cHg7IH0KICAubWljVHJ5IC5zbmRidG4geyBtYXJnaW46MDsgZm9udC1zaXplOjEzLjVweDsgcGFkZGluZzo5cHggMTNweDsgfQogIC8qIHRoZSBsaXZlIG1pY3JvcGhvbmUgbGV2ZWw6IHByb29mIHRoYXQgaXQgaXMgaGVhcmluZyB5b3UsIGJlZm9yZSB5b3UgaGF2ZSB0byB3b25kZXIgKi8KICAubWljTWV0ZXIgeyBoZWlnaHQ6N3B4OyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTsgYm9yZGVyLXJhZGl1czo0cHg7IG92ZXJmbG93OmhpZGRlbjsgbWFyZ2luOjhweCBhdXRvIDJweDsgbWF4LXdpZHRoOjI0MHB4OyB9CiAgLyogdGhlIGxpc3RlbmluZyBzaGVldDogdGhlIHdob2xlIGF0dGVtcHQgaW4gb25lIGJpZyBwYW5lbCAtLSB3b3JkLCB3aGF0IHRoZSBtaWMgaGVhcnMsIHRoZSB2ZXJkaWN0IC0tIG5vIHRhcCB0byBmaW5pc2ggKi8KICAja3FNaWNTaGVldCB7IHBvc2l0aW9uOmZpeGVkOyBpbnNldDowOyB6LWluZGV4OjEwMDAwMjsgYmFja2dyb3VuZDpyZ2JhKDIwLDE0LDQsLjU1KTsgYmFja2Ryb3AtZmlsdGVyOmJsdXIoM3B4KTsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IHBhZGRpbmc6MjBweDsgfQogIC5rcW1zIHsgd2lkdGg6MTAwJTsgbWF4LXdpZHRoOjUyMHB4OyBiYWNrZ3JvdW5kOiNGNEU5RDU7IGNvbG9yOiMyQTJBMkE7IGJvcmRlci1yYWRpdXM6MjRweDsgcGFkZGluZzoyNHB4IDIycHggMjZweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJveC1zaGFkb3c6MCAxOHB4IDUwcHggcmdiYSgwLDAsMCwuMzIpOyBhbmltYXRpb246a3Ftc1VwIC4yMnMgZWFzZTsgZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixzYW5zLXNlcmlmOyB9CiAgQGtleWZyYW1lcyBrcW1zVXAgeyBmcm9tIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTZweCkgc2NhbGUoLjk4KTsgb3BhY2l0eTowOyB9IHRvIHsgdHJhbnNmb3JtOm5vbmU7IG9wYWNpdHk6MTsgfSB9CiAgLmtxbXMtdGFnIHsgZm9udC1zaXplOjEycHg7IGxldHRlci1zcGFjaW5nOjJweDsgZm9udC13ZWlnaHQ6ODAwOyBjb2xvcjp2YXIoLS1yZWQpOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IH0KICAua3Ftcy10YXJnZXQgeyBmb250LXNpemU6NDBweDsgZm9udC13ZWlnaHQ6ODAwOyBtYXJnaW4tdG9wOjhweDsgbGluZS1oZWlnaHQ6MS4xNTsgY29sb3I6IzJBMkEyQTsgd29yZC1icmVhazprZWVwLWFsbDsgfQogIC5rcW1zLXRhcmdldC5zbWFsbCB7IGZvbnQtc2l6ZToyMnB4OyBsaW5lLWhlaWdodDoxLjM7IH0KICAua3Ftcy1oaW50IHsgZm9udC1zaXplOjE0cHg7IGNvbG9yOiM2YjVkNDM7IG1hcmdpbi10b3A6NnB4OyBsaW5lLWhlaWdodDoxLjQ1OyB9CiAgLmtxbXMgLm1pY01ldGVyIHsgbWF4LXdpZHRoOjMwMHB4OyBoZWlnaHQ6MTBweDsgbWFyZ2luOjE2cHggYXV0byAxNHB4OyB9CiAgLmtxbXMtaGVhcmQgeyBtaW4taGVpZ2h0OjU2cHg7IGZvbnQtc2l6ZToyNnB4OyBmb250LXdlaWdodDo4MDA7IGNvbG9yOiM4NTdhNjM7IGJhY2tncm91bmQ6I0ZCRjZFQTsgYm9yZGVyOjJweCBkYXNoZWQgI0UzRDVCODsgYm9yZGVyLXJhZGl1czoxNnB4OyBwYWRkaW5nOjEycHggMTRweDsgbGluZS1oZWlnaHQ6MS4zOyB3b3JkLWJyZWFrOmtlZXAtYWxsOyB9CiAgLmtxbXMtaGVhcmQub24geyBjb2xvcjojMkEyQTJBOyBib3JkZXItc3R5bGU6c29saWQ7IGJvcmRlci1jb2xvcjojQzY4RjNFOyB9CiAgLmtxbXMtZm9vdCB7IGZvbnQtc2l6ZToxM3B4OyBjb2xvcjojNmI1ZDQzOyBtYXJnaW4tdG9wOjE0cHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBnYXA6MTJweDsgZmxleC13cmFwOndyYXA7IH0KICAua3Ftcy1zdG9wIHsgYmFja2dyb3VuZDpub25lOyBib3JkZXI6MS41cHggc29saWQgI0UzRDVCODsgYm9yZGVyLXJhZGl1czo5OTlweDsgcGFkZGluZzo3cHggMTRweDsgZm9udC1zaXplOjEzcHg7IGNvbG9yOiM2YjVkNDM7IGN1cnNvcjpwb2ludGVyOyBmb250LWZhbWlseTppbmhlcml0OyB9CiAgLmtxbXMtcmVzLWVtb2ppIHsgZm9udC1zaXplOjU0cHg7IGxpbmUtaGVpZ2h0OjE7IH0KICAua3Ftcy1yZXMtdGl0bGUgeyBmb250LXNpemU6MjZweDsgZm9udC13ZWlnaHQ6ODAwOyBtYXJnaW4tdG9wOjhweDsgbGluZS1oZWlnaHQ6MS4yOyB9CiAgLmtxbXMtcmVzLXN1YiB7IGZvbnQtc2l6ZToxNS41cHg7IGNvbG9yOiM2YjVkNDM7IG1hcmdpbi10b3A6OHB4OyBsaW5lLWhlaWdodDoxLjU7IH0KICAua3Ftcy1yZXMtaGVhcmQgeyBmb250LXNpemU6MjJweDsgZm9udC13ZWlnaHQ6ODAwOyBjb2xvcjojMkEyQTJBOyBtYXJnaW4tdG9wOjEwcHg7IHdvcmQtYnJlYWs6a2VlcC1hbGw7IH0KICAua3Ftcy1yZXMtZGlmZiB7IGZvbnQtc2l6ZToyNnB4OyBtYXJnaW4tdG9wOjhweDsgfQogIC5rcW1zLWJ0bnMgeyBkaXNwbGF5OmZsZXg7IGdhcDoxMHB4OyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBtYXJnaW4tdG9wOjE4cHg7IGZsZXgtd3JhcDp3cmFwOyB9CiAgLmtxbXMtYnRucyAuYnRuIHsgbWFyZ2luOjA7IHBhZGRpbmc6MTNweCAyMHB4OyBmb250LXNpemU6MTVweDsgfQogIC5rcW1zLWJ0bnMgLnNuZGJ0biB7IG1hcmdpbjowOyBmb250LXNpemU6MTRweDsgcGFkZGluZzoxMXB4IDE2cHg7IH0KICAubWljTWV0ZXIgaSB7IGRpc3BsYXk6YmxvY2s7IGhlaWdodDoxMDAlOyB3aWR0aDowOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1ncmVlbiksdmFyKC0tZ29sZCkpOyBib3JkZXItcmFkaXVzOjRweDsgdHJhbnNpdGlvbjp3aWR0aCAuMDdzIGxpbmVhcjsgfQogICNrcU1pY0NvYWNoV3JhcCB7IHBvc2l0aW9uOmZpeGVkOyBpbnNldDowOyB6LWluZGV4OjEwMDAwMDsgYmFja2dyb3VuZDpyZ2JhKDIwLDE2LDEwLC41NSk7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBwYWRkaW5nOjIwcHg7IH0KICAua3FNaWNDb2FjaCB7IGJhY2tncm91bmQ6I0Y0RTlENTsgY29sb3I6IzJBMkEyQTsgYm9yZGVyLXJhZGl1czoyMHB4OyBwYWRkaW5nOjI0cHggMjJweDsgbWF4LXdpZHRoOjQwMHB4OyB3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgYm94LXNoYWRvdzowIDE4cHggNTBweCByZ2JhKDAsMCwwLC4zNSk7IGZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsc2Fucy1zZXJpZjsgfQogIC5rcU1pY0NvYWNoIG9sIHsgdGV4dC1hbGlnbjpsZWZ0OyBmb250LXNpemU6MTUuNXB4OyBsaW5lLWhlaWdodDoxLjU1OyBtYXJnaW46MTRweCAwIDEwcHg7IHBhZGRpbmctbGVmdDoyMnB4OyB9CiAgLmtxTWljQ29hY2ggbGkgeyBtYXJnaW4tYm90dG9tOjhweDsgfQoKICAvKiBEQUlMWSBHT0FMUyAmIEFDSElFVkVNRU5UUyAqLwogIC5kYWlseSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZCk7IGJvcmRlcjoycHggc29saWQgI0IwN0QyODQ0OyBib3JkZXItcmFkaXVzOjE2cHg7IHBhZGRpbmc6MTRweCAxNnB4OyBtYXJnaW4tYm90dG9tOjE0cHg7IH0KICAuZGFpbHkgaDMgeyBmb250LXNpemU6MTMuNXB4OyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjRweDsgfQogIC5kYWlseSBoMyAuc3RyZWFrbGJsIHsgY29sb3I6dmFyKC0tZ29sZCk7IGZvbnQtc2l6ZToxMnB4OyB9CiAgLmdvYWwgeyBkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjhweDsgZm9udC1zaXplOjEzcHg7IG1hcmdpbi10b3A6OXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IH0KICAuZ29hbC5kb25lIHsgY29sb3I6dmFyKC0tZ3JlZW4pOyB9CiAgLmdvYWwgLmdsYWJlbCB7IGZsZXg6MTsgfQogIC5nb2FsIC5iYXIgeyB3aWR0aDo3MHB4OyBoZWlnaHQ6NnB4OyBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA2KTsgYm9yZGVyLXJhZGl1czo0cHg7IG92ZXJmbG93OmhpZGRlbjsgZmxleDpub25lOyB9CiAgLmdvYWwgLmJhciBpIHsgZGlzcGxheTpibG9jazsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6dmFyKC0tZ29sZCk7IGJvcmRlci1yYWRpdXM6NHB4OyB9CiAgLmdvYWwuZG9uZSAuYmFyIGkgeyBiYWNrZ3JvdW5kOnZhcigtLWdyZWVuKTsgfQogIC5jbGFpbWJ0biB7IG1hcmdpbjoxMnB4IDAgMDsgd2lkdGg6MTAwJTsgcGFkZGluZzoxMXB4OyBmb250LXNpemU6MTRweDsgfQogIC5hY2hyb3cgeyBmb250LXNpemU6MTlweDsgbGV0dGVyLXNwYWNpbmc6M3B4OyBtYXJnaW4tdG9wOjEwcHg7IH0KICAuYWNocm93IC5hY2hjb3VudCB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGxldHRlci1zcGFjaW5nOjA7IG1hcmdpbi1yaWdodDo0cHg7IH0KICAucHJvZ2xpbmUgeyBmb250LXNpemU6MTEuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6N3B4OyB9CiAgI3Nwa1BsYXliYWNrIHsgZGlzcGxheTpub25lOyBtYXJnaW4tdG9wOjEwcHg7IH0KCiAgLyogUExBWSB0YWIgKi8KICAubW9kZXMgeyBkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyOyBnYXA6MTBweDsgfQogIC5tb2RlIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNnB4OyBwYWRkaW5nOjE2cHggMTRweDsgY3Vyc29yOnBvaW50ZXI7IGJvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7IHRyYW5zaXRpb246YWxsIC4xNXM7IHBvc2l0aW9uOnJlbGF0aXZlOyB9CiAgLm1vZGU6aG92ZXIgeyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTsgYm9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7IH0KICAubW9kZSAuZW1vamkgeyBmb250LXNpemU6MzBweDsgfQogIC5tb2RlIGgzIHsgZm9udC1zaXplOjE0cHg7IG1hcmdpbjo2cHggMCAzcHg7IH0KICAubW9kZSBwIHsgZm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbGluZS1oZWlnaHQ6MS40OyB9CgogIC8qIEdBTUVTIHNoYXJlZCAqLwogIC5nYW1lYmFyIHsgZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6Y2VudGVyOyBtYXJnaW4tYm90dG9tOjE0cHg7IGZvbnQtd2VpZ2h0OjcwMDsgZ2FwOjhweDsgfQogIC50aW1lciB7IGZvbnQtc2l6ZToxOHB4OyBjb2xvcjp2YXIoLS1hY2NlbnQyKTsgZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zOyB9CiAgLnRpbWVyLmxvdyB7IGNvbG9yOnZhcigtLXJlZCk7IGFuaW1hdGlvbjpwdWxzZSAuNXMgaW5maW5pdGUgYWx0ZXJuYXRlOyB9CiAgQGtleWZyYW1lcyBwdWxzZSB7IHRvIHsgdHJhbnNmb3JtOnNjYWxlKDEuMTUpOyB9IH0KICAuc2NvcmUtcGlsbCB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBwYWRkaW5nOjZweCAxM3B4OyBib3JkZXItcmFkaXVzOjIwcHg7IGZvbnQtc2l6ZToxM3B4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IH0KICAuY29tYm8geyBjb2xvcjp2YXIoLS1nb2xkKTsgZm9udC1zaXplOjEycHg7IG1hcmdpbi1sZWZ0OjVweDsgfQogIC5xdWVzdGlvbi1jYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxOHB4OyBwYWRkaW5nOjIycHggMTZweDsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi1ib3R0b206MTRweDsgYm94LXNoYWRvdzowIDRweCAyMHB4IHJnYmEoMCwwLDAsLjA4KTsgfQogIC5xLWxhYmVsIHsgZm9udC1zaXplOjEwLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IGxldHRlci1zcGFjaW5nOjFweDsgbWFyZ2luLWJvdHRvbTo4cHg7IH0KICAucS13b3JkIHsgZm9udC1zaXplOjI4cHg7IGZvbnQtd2VpZ2h0OjgwMDsgbGluZS1oZWlnaHQ6MS4zOyB9CiAgLnEtaGludCB7IGZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6NnB4OyB9CiAgLmFuc3dlcnMgeyBkaXNwbGF5OmdyaWQ7IGdhcDo5cHg7IH0KICAuYW5zIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkMik7IGJvcmRlcjoycHggc29saWQgI0Q5QzlBODsgYm9yZGVyLXJhZGl1czoxM3B4OyBwYWRkaW5nOjEzcHggMTVweDsgZm9udC1zaXplOjE2cHg7IGZvbnQtd2VpZ2h0OjYwMDsgY29sb3I6dmFyKC0tdGV4dCk7IGN1cnNvcjpwb2ludGVyOyB0ZXh0LWFsaWduOmxlZnQ7IHRyYW5zaXRpb246YWxsIC4xMnM7IHdpZHRoOjEwMCU7IH0KICAuYW5zLmNvcnJlY3QgeyBiYWNrZ3JvdW5kOiMyRjdENEYzMzsgYm9yZGVyLWNvbG9yOnZhcigtLWdyZWVuKTsgfQogIC5hbnMud3JvbmcgeyBiYWNrZ3JvdW5kOiNDRjJFMkUzMzsgYm9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGFuaW1hdGlvbjpzaGFrZSAuM3M7IH0KICBAa2V5ZnJhbWVzIHNoYWtlIHsgMjUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTZweCk7fSA3NSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlWCg2cHgpO30gfQoKICAubWF0Y2gtZ3JpZCB7IGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDo5cHg7IH0KICAudGlsZSB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7IGJvcmRlci1yYWRpdXM6MTNweDsgcGFkZGluZzoxNHB4IDhweDsgZm9udC1zaXplOjE1cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY3Vyc29yOnBvaW50ZXI7IHRleHQtYWxpZ246Y2VudGVyOyB0cmFuc2l0aW9uOmFsbCAuMTVzOyBtaW4taGVpZ2h0OjU4cHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB9CiAgLnRpbGUuc2VsIHsgYm9yZGVyLWNvbG9yOnZhcigtLWdvbGQpOyBiYWNrZ3JvdW5kOiNCMDdEMjgyMjsgdHJhbnNmb3JtOnNjYWxlKDEuMDQpOyB9CiAgLnRpbGUuZG9uZSB7IG9wYWNpdHk6MDsgcG9pbnRlci1ldmVudHM6bm9uZTsgdHJhbnNmb3JtOnNjYWxlKC44KTsgfQogIC50aWxlLmJhZCB7IGJvcmRlci1jb2xvcjp2YXIoLS1yZWQpOyBiYWNrZ3JvdW5kOiNDRjJFMkUzMzsgYW5pbWF0aW9uOnNoYWtlIC4zczsgfQoKICAuYnVpbGQtdGFyZ2V0IHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoxNXB4OyBwYWRkaW5nOjE2cHg7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tYm90dG9tOjEycHg7IH0KICAuYnVpbGQtZW4geyBmb250LXNpemU6MTdweDsgZm9udC13ZWlnaHQ6NzAwOyB9CiAgLmJ1aWxkLXNsb3QgeyBtaW4taGVpZ2h0OjYwcHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDYpOyBib3JkZXI6MnB4IGRhc2hlZCAjRDlDOUE4OyBib3JkZXItcmFkaXVzOjEzcHg7IHBhZGRpbmc6OXB4OyBkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDp3cmFwOyBnYXA6N3B4OyBtYXJnaW4tYm90dG9tOjEycHg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgfQogIC5idWlsZC1wb29sIHsgZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjdweDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgfQogIC53b3JkY2hpcCB7IGJhY2tncm91bmQ6dmFyKC0tY2FyZDIpOyBib3JkZXI6MnB4IHNvbGlkICNEOUM5QTg7IGJvcmRlci1yYWRpdXM6MTFweDsgcGFkZGluZzo5cHggMTNweDsgZm9udC1zaXplOjE3cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY3Vyc29yOnBvaW50ZXI7IHRyYW5zaXRpb246YWxsIC4xMnM7IH0KICAud29yZGNoaXAucGxhY2VkIHsgYmFja2dyb3VuZDojNTAzQUE4MjI7IGJvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQyKTsgb3BhY2l0eTouNDsgfQoKICAuYm9zcy1hcmVuYSB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tYm90dG9tOjEycHg7IH0KICAuYm9zcy1zcHJpdGUgeyBmb250LXNpemU6NTZweDsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHRyYW5zaXRpb246dHJhbnNmb3JtIC4xNXM7IH0KICAuYm9zcy1zcHJpdGUuaGl0IHsgYW5pbWF0aW9uOmJvc3NoaXQgLjM1czsgfQogIEBrZXlmcmFtZXMgYm9zc2hpdCB7IDMwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMHB4KSByb3RhdGUoLThkZWcpOyBmaWx0ZXI6YnJpZ2h0bmVzcygyKTt9IDYwJSB7IHRyYW5zZm9ybTp0cmFuc2xhdGVYKDhweCk7fSB9CiAgLmhwYmFyIHsgaGVpZ2h0OjE0cHg7IGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTApOyBib3JkZXItcmFkaXVzOjhweDsgb3ZlcmZsb3c6aGlkZGVuOyBtYXJnaW46N3B4IGF1dG87IG1heC13aWR0aDozMDBweDsgYm9yZGVyOjFweCBzb2xpZCAjRDlDOUE4OyB9CiAgLmhwZmlsbCB7IGhlaWdodDoxMDAlOyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1yZWQpLCNEOUE4NTYpOyB0cmFuc2l0aW9uOndpZHRoIC40czsgfQogIC5ib3NzLW5hbWUgeyBmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDo3MDA7IH0KICAuaGVhcnRzIHsgZm9udC1zaXplOjIwcHg7IGxldHRlci1zcGFjaW5nOjNweDsgbWFyZ2luLXRvcDo0cHg7IH0KCiAgLnJlc3VsdC1jYXJkIHsgYmFja2dyb3VuZDp2YXIoLS1jYXJkKTsgYm9yZGVyLXJhZGl1czoyMnB4OyBwYWRkaW5nOjMycHggMjBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAucmVzdWx0LWVtb2ppIHsgZm9udC1zaXplOjU2cHg7IH0KICAucmVzdWx0LXRpdGxlIHsgZm9udC1zaXplOjI0cHg7IGZvbnQtd2VpZ2h0OjgwMDsgbWFyZ2luOjhweCAwIDRweDsgfQogIC5yZXN1bHQtc3RhdHMgeyBkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGdhcDoyMnB4OyBtYXJnaW46MThweCAwOyB9CiAgLnJzdGF0IGIgeyBkaXNwbGF5OmJsb2NrOyBmb250LXNpemU6MjRweDsgY29sb3I6dmFyKC0tZ29sZCk7IH0KICAucnN0YXQgc3BhbiB7IGZvbnQtc2l6ZToxMC41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBsZXR0ZXItc3BhY2luZzoxcHg7IH0KICAucmVzLW5leHQgeyBmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBsaW5lLWhlaWdodDoxLjY7IG1hcmdpbjotNnB4IDAgMTRweDsgfQogIC5idG4geyBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsdmFyKC0tYWNjZW50KSwjQTA2RjI0KTsgY29sb3I6I2ZmZjsgYm9yZGVyOm5vbmU7IHBhZGRpbmc6MTNweCAyNHB4OyBib3JkZXItcmFkaXVzOjEzcHg7IGZvbnQtc2l6ZToxNXB4OyBmb250LXdlaWdodDo4MDA7IGN1cnNvcjpwb2ludGVyOyB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTJzOyBtYXJnaW46M3B4OyB9CiAgLmJ0bjphY3RpdmUgeyB0cmFuc2Zvcm06c2NhbGUoLjk2KTsgfQogIC5idG4uZ2hvc3QgeyBiYWNrZ3JvdW5kOnZhcigtLWNhcmQyKTsgYm9yZGVyOjJweCBzb2xpZCAjRDlDOUE4OyB9CgogIC5meC1mbG9hdCB7IHBvc2l0aW9uOmZpeGVkOyBmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToyMXB4OyBwb2ludGVyLWV2ZW50czpub25lOyB6LWluZGV4Ojk5OyBhbmltYXRpb246ZmxvYXR1cCAxcyBlYXNlIGZvcndhcmRzOyB9CiAgQGtleWZyYW1lcyBmbG9hdHVwIHsgdG8geyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNzBweCk7IG9wYWNpdHk6MDsgfSB9CiAgLmxldmVsdXAtYmFubmVyIHsgcG9zaXRpb246Zml4ZWQ7IHRvcDozMCU7IGxlZnQ6NTAlOyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7IGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZyx2YXIoLS1nb2xkKSwjRDlBODU2KTsgY29sb3I6IzNhMjAwMDsgcGFkZGluZzoxOHB4IDM0cHg7IGJvcmRlci1yYWRpdXM6MThweDsgZm9udC1zaXplOjIycHg7IGZvbnQtd2VpZ2h0OjgwMDsgei1pbmRleDoxMDA7IGFuaW1hdGlvbjpiYW5uZXIgMnMgZWFzZSBmb3J3YXJkczsgYm94LXNoYWRvdzowIDEwcHggNTBweCAjQjA3RDI4ODg7IHdoaXRlLXNwYWNlOm5vd3JhcDsgfQogIEBrZXlmcmFtZXMgYmFubmVyIHsgMTUlIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEuMSk7fSAyNSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSk7fSA4NSUgeyB0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSk7IG9wYWNpdHk6MTt9IDEwMCUgeyBvcGFjaXR5OjA7IHRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtODAlKSBzY2FsZSgxKTt9IH0KICAuY29uZmV0dGkgeyBwb3NpdGlvbjpmaXhlZDsgd2lkdGg6MTBweDsgaGVpZ2h0OjEwcHg7IHotaW5kZXg6OTg7IHBvaW50ZXItZXZlbnRzOm5vbmU7IGFuaW1hdGlvbjpmYWxsIGxpbmVhciBmb3J3YXJkczsgfQogIEBrZXlmcmFtZXMgZmFsbCB7IHRvIHsgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTEwdmgpIHJvdGF0ZSg3MjBkZWcpOyB9IH0KCiAgYm9keSB7IG92ZXJmbG93LXg6IGNsaXA7IH0KICBib2R5LnBhZ2UtaWQtMjk0IG1haW4geyBtYXJnaW4tYmxvY2stc3RhcnQ6IDAgIWltcG9ydGFudDsgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsgfQogIGJvZHkucGFnZS1pZC0yOTQgbWFpbiA+IC53cC1ibG9jay1ncm91cC5hbGlnbmZ1bGwgeyBwYWRkaW5nLXRvcDogMjBweCAhaW1wb3J0YW50OyBwYWRkaW5nLWJvdHRvbTogMzZweCAhaW1wb3J0YW50OyB9CiAgYm9keS5wYWdlLWlkLTI5NCBoMS53cC1ibG9jay1wb3N0LXRpdGxlIHsgZm9udC1zaXplOiBjbGFtcCgyMnB4LCAyLjR2dywgMjhweCk7IG1hcmdpbjogMCAwIDEwcHg7IH0KICBib2R5LnBhZ2UtaWQtMjk0IC5lbnRyeS1jb250ZW50IHsgbWFyZ2luLWJsb2NrLXN0YXJ0OiAxMHB4ICFpbXBvcnRhbnQ7IH0KICBib2R5LnBhZ2UtaWQtMjk0IC5lbnRyeS1jb250ZW50ID4gcCB7IG1hcmdpbjogMCAwIDEycHg7IH0KICBib2R5LnBhZ2UtaWQtMjk0IC53cC1ibG9jay1wb3N0LWZlYXR1cmVkLWltYWdlIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Cjwvc3R5bGU+CjxkaXYgaWQ9ImtxLWFwcCI+CjxkaXYgY2xhc3M9IndyYXAiPgoKICA8ZGl2IGNsYXNzPSJodWQiPgogICAgPGRpdiBjbGFzcz0iYXZhdGFyIj7wn5CvPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJodWQtbWlkIj4KICAgICAgPGRpdiBjbGFzcz0iaHVkLXRpdGxlIj5MdiA8c3BhbiBpZD0iaHVkTGV2ZWwiPjE8L3NwYW4+IMK3IDxzcGFuIGlkPSJodWRSYW5rIj5IYW5nZXVsIEhhdGNobGluZzwvc3Bhbj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ieHBiYXIiPjxkaXYgY2xhc3M9InhwZmlsbCIgaWQ9InhwRmlsbCIgc3R5bGU9IndpZHRoOjAlIj48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaHVkLXN1YiI+PHNwYW4gaWQ9Imh1ZFhwIj4wPC9zcGFuPiBYUCDCtyA8c3BhbiBpZD0iaHVkTmV4dCI+MTAwPC9zcGFuPiB0byBuZXh0IMK3IPCfk5ogPHNwYW4gaWQ9Imh1ZFdvcmRzIj4wPC9zcGFuPiB3b3JkczwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2dhcDo1cHg7Ij4KICAgICAgPGRpdiBjbGFzcz0ic3RyZWFrIj7wn5SlPGIgaWQ9Imh1ZFN0cmVhayI+MDwvYj5kYXkgc3RyZWFrPC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9InNwZGJ0biIgaWQ9InNwZEJ0biIgb25jbGljaz0ib3BlblZvaWNlU2V0KCkiIHRpdGxlPSJDaG9vc2UgdGhlIEtvcmVhbiB2b2ljZSBhbmQgaG93IGZhc3QgaXQgc3BlYWtzIj7wn46ZIFZvaWNlIMK3IOKWtiBOb3JtYWwgc3BlZWQ8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Imh1ZC1oaW50IiBpZD0iaHVkSGludCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvZGl2PgoKICA8IS0tIE1BUCAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4gYWN0aXZlIiBpZD0ibWFwIj4KICAgIDxoMT5Ub20ncyBLb3JlYW4gUXVlc3Qg8J+HsPCfh7c8L2gxPgogICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPlJlYWwtbGlmZSBLb3JlYW4sIG9uZSBxdWVzdCBhdCBhIHRpbWUg4oCUIDEyIHF1ZXN0cyBmcm9tIHlvdXIgZmlyc3Qg7JWI64WV7ZWY7IS47JqUIHRvIGxpdmluZyBsaWtlIGEgbG9jYWwuPC9kaXY+CiAgICA8ZGl2IGlkPSJkYWlseUJveCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtYXAtZ3JpZCIgaWQ9Im1hcEdyaWQiPjwvZGl2PgogIDwvZGl2PgoKICA8IS0tIExFU1NPTiAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJsZXNzb24iPgogICAgPGRpdiBjbGFzcz0ibGhlYWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrIiBvbmNsaWNrPSJnb01hcCgpIj7ihpA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0idCI+PGIgaWQ9ImxUaXRsZSI+PC9iPjxzcGFuIGlkPSJsU3ViIj48L3NwYW4+PC9kaXY+CiAgICAgIDxkaXYgaWQ9ImxTdGFycyIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4OyI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InRhYnMiPgogICAgICA8ZGl2IGNsYXNzPSJ0YWIgb24iIGRhdGEtdGFiPSJsZWFybiIgb25jbGljaz0ic2V0VGFiKCdsZWFybicpIj7wn5OWIExlYXJuPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgZGF0YS10YWI9InN0b3J5IiBvbmNsaWNrPSJzZXRUYWIoJ3N0b3J5JykiPvCfjq0gU3Rvcnk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGFiIiBkYXRhLXRhYj0idGFsayIgb25jbGljaz0ic2V0VGFiKCd0YWxrJykiPvCfkqwgVGFsazwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0YWIiIGRhdGEtdGFiPSJncmFtbWFyIiBvbmNsaWNrPSJzZXRUYWIoJ2dyYW1tYXInKSI+8J+nqSBQYXR0ZXJuczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0YWIiIGRhdGEtdGFiPSJzcGVhayIgb25jbGljaz0ic2V0VGFiKCdzcGVhaycpIj7wn5ej77iPIFNwZWFrPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRhYiIgZGF0YS10YWI9InBsYXkiIG9uY2xpY2s9InNldFRhYigncGxheScpIj7wn46uIFBsYXk8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InRhYi1sZWFybiI+CiAgICAgIDxkaXYgY2xhc3M9IndjYXJkIiBpZD0id2NhcmQiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsZWFybi1uYXYiPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgb25jbGljaz0ibGVhcm5Nb3ZlKC0xKSI+4oaQPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGtub3ciIGlkPSJrbm93QnRuIiBvbmNsaWNrPSJsZWFybktub3coKSI+4pyTIEdvdCBpdCDCtyArMyBYUDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgb25jbGljaz0ibGVhcm5Nb3ZlKDEpIj7ihpI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlYXJuLWNvdW50IiBpZD0ibGVhcm5Db3VudCI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJ0YWItc3RvcnkiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6ODAwO21hcmdpbi1ib3R0b206MTBweDsiIGlkPSJzdFRpdGxlIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3RhZ2UiIGlkPSJzdFN0YWdlIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3QtbmFyIiBpZD0ic3ROYXIiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJidWJibGUiIGlkPSJzdEJ1YmJsZSIgb25jbGljaz0ic2F5U3RvcnkoKSI+CiAgICAgICAgPGRpdiBjbGFzcz0id2hvIiBpZD0ic3RXaG8iPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJrciIgaWQ9InN0S3IiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJlbiIgaWQ9InN0RW4iPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icS1sYWJlbCIgaWQ9InN0UHJvbXB0IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHg7Ij5XaGF0IGRvIHlvdSBzYXk/PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFuc3dlcnMiIGlkPSJzdENob2ljZXMiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdC1kb3RzIiBpZD0ic3REb3RzIj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InRhYi10YWxrIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTo4cHg7Z2FwOjhweDsiPgogICAgICAgIDxkaXYgaWQ9InRrVGl0bGUiIHN0eWxlPSJmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0cHg7Ij48L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBpZD0idGtFYXIiIG9uY2xpY2s9InRvZ2dsZUVhcigpIiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEycHg7Ij7wn46nIExpc3RlbmluZyBtb2RlPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InRrUmVzdGFydCgpIiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjEycHg7Ij7ihro8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoYXQiIGlkPSJ0a0NoYXQiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ0ay10YXNrIiBpZD0idGtUYXNrIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGstY29udHJvbHMiPgogICAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0idGtIaW50KCkiIHN0eWxlPSJtYXJnaW46MDsiPvCfkqEgSGludDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1pYyB0ay1taWMiIGlkPSJ0a01pYyIgb25jbGljaz0idGtNaWNUYXAoKSI+8J+OpDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0idGtTa2lwKCkiIHN0eWxlPSJtYXJnaW46MDsiPuKPrSBTa2lwPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0idGtSZXN1bHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzcGstZGlmZiIgaWQ9InRrRGlmZiIgc3R5bGU9ImZvbnQtc2l6ZToyMHB4O3RleHQtYWxpZ246Y2VudGVyOyI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRrRml4ZXMiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWxmZ3JhZGUiIGlkPSJ0a1NlbGZHcmFkZSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBvbmNsaWNrPSJ0a0dyYWRlKGZhbHNlKSI+8J+YhSBUcnkgYWdhaW48L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIG9uY2xpY2s9InRrR3JhZGUodHJ1ZSkiPvCfmI4gSSBzYWlkIGl0PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0idGFiLWdyYW1tYXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48L2Rpdj4KCiAgICA8ZGl2IGlkPSJ0YWItc3BlYWsiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgPGRpdiBjbGFzcz0ic2NhcmQiPgogICAgICAgIDxkaXYgY2xhc3M9InEtbGFiZWwiPkxpc3RlbiwgdGhlbiBzYXkgaXQgb3V0IGxvdWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJza3IiIGlkPSJzcGtLciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VuIiBpZD0ic3BrRW4iPjwvZGl2PgogICAgICAgIDxkaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InNheUN1cigpIj7ilrbvuI8gTGlzdGVuPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InNheUN1cigwLjYpIj7wn5CiIFNsb3c8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtaWMiIGlkPSJtaWNCdG4iIG9uY2xpY2s9Im1pY1RhcCgpIj7wn46kPC9idXR0b24+CiAgICAgICAgPGRpdiBjbGFzcz0ibWljLWhpbnQiIGlkPSJtaWNIaW50Ij5UYXAg8J+OpCBhbmQgcmVhZCB0aGUgc2VudGVuY2Ug4oCUIGl0IGNoZWNrcyB3aGVuIHlvdSBwYXVzZSAob3IgdGFwIOKPuSk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0ic3BrUmVzdWx0Ij48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGstZGlmZiIgaWQ9InNwa0RpZmYiPjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InNwa0ZpeGVzIj48L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJzcGtQbGF5YmFjayI+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InBsYXlNeVJlYygpIj7ilrbvuI8gTXkgdm9pY2U8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0ic2F5Q3VyKCkiPvCflIogTmF0aXZlPC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InNheUN1cigwLjYpIj7wn5CiIFNsb3c8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWxmZ3JhZGUiIGlkPSJzZWxmR3JhZGUiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBvbmNsaWNrPSJzcGVha0dyYWRlKGZhbHNlKSI+8J+YhSBBbG1vc3Q8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgb25jbGljaz0ic3BlYWtHcmFkZSh0cnVlKSI+8J+YjiBOYWlsZWQgaXQ8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxlYXJuLW5hdiI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBvbmNsaWNrPSJzcGVha01vdmUoLTEpIj7ihpA8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIG9uY2xpY2s9InNwZWFrTW92ZSgxKSI+4oaSPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsZWFybi1jb3VudCIgaWQ9InNwZWFrQ291bnQiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0idGFiLXBsYXkiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgPGRpdiBjbGFzcz0ibW9kZXMiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGUiIG9uY2xpY2s9InN0YXJ0UXVpeigpIj48ZGl2IGNsYXNzPSJlbW9qaSI+4pqhPC9kaXY+PGgzPlNwZWVkIFF1aXo8L2gzPjxwPjYwcywgY29tYm8gbXVsdGlwbGllcnM8L3A+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kZSIgb25jbGljaz0ic3RhcnRNYXRjaCgpIj48ZGl2IGNsYXNzPSJlbW9qaSI+8J+nqTwvZGl2PjxoMz5Xb3JkIE1hdGNoPC9oMz48cD5QYWlyIEtSIOKGlCBFTiBmYXN0PC9wPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGUiIG9uY2xpY2s9InN0YXJ0QnVpbGRlcigpIj48ZGl2IGNsYXNzPSJlbW9qaSI+8J+UqDwvZGl2PjxoMz5TZW50ZW5jZSBCdWlsZGVyPC9oMz48cD5SZWJ1aWxkIHJlYWwgc2VudGVuY2VzPC9wPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGUiIG9uY2xpY2s9InN0YXJ0Qm9zcygpIj48ZGl2IGNsYXNzPSJlbW9qaSI+8J+RuTwvZGl2PjxoMz5Cb3NzIEJhdHRsZTwvaDM+PHA+QmVhdCB0aGUgbGVzc29uIGd1YXJkaWFuIOKtkDwvcD48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBGUkVFIFRBTEsgLS0+CiAgPGRpdiBjbGFzcz0ic2NyZWVuIiBpZD0iZnJlZSI+CiAgICA8ZGl2IGNsYXNzPSJnYW1lYmFyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFjayIgb25jbGljaz0iZ29NYXAoKSI+4oaQPC9idXR0b24+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjgwMDsiIGlkPSJmdFRpdGxlIj7wn46ZIEZyZWUgVGFsazwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIGlkPSJmdEVuZ2luZSIgb25jbGljaz0iZnRFbmdpbmVUYXAoKSIgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToxMnB4OyI+8J+kliBCdWlsdC1pbjwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjaGF0IiBpZD0iZnRDaGF0Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InRrLWNvbnRyb2xzIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4OyI+CiAgICAgIDxidXR0b24gY2xhc3M9InNuZGJ0biIgaWQ9ImZ0QXV0byIgb25jbGljaz0iZnRUb2dnbGVBdXRvKCkiIHN0eWxlPSJtYXJnaW46MDsiPvCflIEgQXV0bzogb2ZmPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9Im1pYyB0ay1taWMiIGlkPSJmdE1pYyIgb25jbGljaz0iZnRNaWNUYXAoKSI+8J+OpDwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9ImZ0TnVkZ2UoKSIgc3R5bGU9Im1hcmdpbjowOyI+4p2TIE5ldyB0b3BpYzwvYnV0dG9uPgogICAgICA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIGlkPSJmdFN0dWNrQnRuIiBvbmNsaWNrPSJmdFN0dWNrKCkiIHN0eWxlPSJtYXJnaW46MDtkaXNwbGF5Om5vbmU7Ij7wn4aYIFN0dWNrPzwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJmdFN0dWNrQm94IiBzdHlsZT0iZGlzcGxheTpub25lOyI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0iZnRTdGF0dXMiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttaW4taGVpZ2h0OjIwcHg7Ij48L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi10b3A6NnB4OyI+CiAgICAgIDxpbnB1dCBpZD0iZnRUZXh0IiBwbGFjZWhvbGRlcj0i4oCmb3IgdHlwZSBpbiBLb3JlYW4gYW5kIHByZXNzIEVudGVyIgogICAgICAgIHN0eWxlPSJmbGV4OjE7YmFja2dyb3VuZDp2YXIoLS1jYXJkMik7Ym9yZGVyOjJweCBzb2xpZCAjRDlDOUE4O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHggMTNweDtjb2xvcjp2YXIoLS10ZXh0KTtmb250LXNpemU6MTVweDtvdXRsaW5lOm5vbmU7Ij4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBzdHlsZT0icGFkZGluZzoxMXB4IDE2cHg7IiBvbmNsaWNrPSJmdFNlbmRUZXh0KCkiPuKepDwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDwhLS0gUVVJWiAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJxdWl6Ij4KICAgIDxkaXYgY2xhc3M9ImdhbWViYXIiPgogICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrIiBvbmNsaWNrPSJiYWNrVG9MZXNzb24oKSI+4oaQPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9InRpbWVyIiBpZD0icXVpelRpbWVyIj42MDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzY29yZS1waWxsIj7irZAgPHNwYW4gaWQ9InF1aXpTY29yZSI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iY29tYm8iIGlkPSJxdWl6Q29tYm8iPjwvc3Bhbj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icXVlc3Rpb24tY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9InEtbGFiZWwiIGlkPSJxdWl6TGFiZWwiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJxLXdvcmQiIGlkPSJxdWl6V29yZCI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InEtaGludCIgaWQ9InF1aXpIaW50Ij48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYW5zd2VycyIgaWQ9InF1aXpBbnN3ZXJzIj48L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBNQVRDSCAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJtYXRjaCI+CiAgICA8ZGl2IGNsYXNzPSJnYW1lYmFyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFjayIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPuKGkDwvYnV0dG9uPgogICAgICA8ZGl2IGNsYXNzPSJ0aW1lciIgaWQ9Im1hdGNoVGltZXIiPjkwPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLXBpbGwiPvCfp6kgPHNwYW4gaWQ9Im1hdGNoTGVmdCI+ODwvc3Bhbj4gbGVmdDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJtYXRjaC1ncmlkIiBpZD0ibWF0Y2hHcmlkIj48L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBCVUlMREVSIC0tPgogIDxkaXYgY2xhc3M9InNjcmVlbiIgaWQ9ImJ1aWxkZXIiPgogICAgPGRpdiBjbGFzcz0iZ2FtZWJhciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJhY2siIG9uY2xpY2s9ImJhY2tUb0xlc3NvbigpIj7ihpA8L2J1dHRvbj4KICAgICAgPGRpdiBpZD0iYnVpbGRQcm9ncmVzcyIgc3R5bGU9ImNvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTRweDsiPjEgLyA1PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLXBpbGwiPuKtkCA8c3BhbiBpZD0iYnVpbGRTY29yZSI+MDwvc3Bhbj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYnVpbGQtdGFyZ2V0Ij4KICAgICAgPGRpdiBjbGFzcz0icS1sYWJlbCI+QnVpbGQgdGhpcyBzZW50ZW5jZSBpbiBLb3JlYW48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYnVpbGQtZW4iIGlkPSJidWlsZEVuIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYnVpbGQtc2xvdCIgaWQ9ImJ1aWxkU2xvdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJidWlsZC1wb29sIiBpZD0iYnVpbGRQb29sIj48L2Rpdj4KICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6MTRweDsiPgogICAgICA8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIG9uY2xpY2s9ImJ1aWxkZXJSZXNldCgpIj7ihro8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJidWlsZGVyQ2hlY2soKSI+Q2hlY2sg4pyTPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBCT1NTIC0tPgogIDxkaXYgY2xhc3M9InNjcmVlbiIgaWQ9ImJvc3MiPgogICAgPGRpdiBjbGFzcz0iZ2FtZWJhciI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJhY2sgYmFjay1sYWJlbGxlZCIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPuKGkCBGbGVlPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImJvc3MtbmFtZSIgaWQ9ImJvc3NUaXRsZSI+8J+RuSBHdWFyZGlhbjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzY29yZS1waWxsIj7impTvuI8gPHNwYW4gaWQ9ImJvc3NEbWciPjA8L3NwYW4+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImJvc3MtYXJlbmEiPgogICAgICA8ZGl2IGNsYXNzPSJib3NzLXNwcml0ZSIgaWQ9ImJvc3NTcHJpdGUiPvCfkbk8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaHBiYXIiPjxkaXYgY2xhc3M9ImhwZmlsbCIgaWQ9ImJvc3NIcCIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoZWFydHMiIGlkPSJib3NzSGVhcnRzIj7inaTvuI/inaTvuI/inaTvuI88L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icXVlc3Rpb24tY2FyZCIgc3R5bGU9InBhZGRpbmc6MTZweDsiPgogICAgICA8ZGl2IGNsYXNzPSJxLWxhYmVsIiBpZD0iYm9zc0xhYmVsIj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icS13b3JkIiBpZD0iYm9zc1dvcmQiIHN0eWxlPSJmb250LXNpemU6MjJweDsiPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJhbnN3ZXJzIiBpZD0iYm9zc0Fuc3dlcnMiPjwvZGl2PgogIDwvZGl2PgoKICA8IS0tIFJFU1VMVCAtLT4KICA8ZGl2IGNsYXNzPSJzY3JlZW4iIGlkPSJyZXN1bHQiPgogICAgPGRpdiBjbGFzcz0icmVzdWx0LWNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtZW1vamkiIGlkPSJyZXNFbW9qaSI+8J+OiTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtdGl0bGUiIGlkPSJyZXNUaXRsZSI+PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTNweDsiIGlkPSJyZXNTdWIiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJyZXN1bHQtc3RhdHMiPgogICAgICAgIDxkaXYgY2xhc3M9InJzdGF0Ij48YiBpZD0icmVzU2NvcmUiPjA8L2I+PHNwYW4+c2NvcmU8L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icnN0YXQiPjxiIGlkPSJyZXNYcCI+KzA8L2I+PHNwYW4+eHA8L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icnN0YXQiPjxiIGlkPSJyZXNDb21ibyI+MDwvYj48c3Bhbj5jb21ibzwvc3Bhbj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InJlcy1uZXh0IiBpZD0icmVzTmV4dCI+PC9kaXY+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InJlc1JlcGxheSI+UGxheSBhZ2FpbiDwn5SBPC9idXR0b24+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBnaG9zdCIgb25jbGljaz0iYmFja1RvTGVzc29uKCkiPkxlc3NvbiDwn5OaPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCjwvZGl2PgoKPHNjcmlwdD4KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBEQVRBIOKAlCBUb20ncyBLb3JlYW4gUXVlc3Q6IDEyIG9yaWdpbmFsIGRhaWx5LWxpZmUgcXVlc3RzLgogICBWb2NhYnVsYXJ5IGRyYXduIGZyb20gdGhlIHN0YW5kYXJkIFRPUElLIDEgYmVnaW5uZXIgd29yZCBwb29sOwogICBhcnJhbmdlbWVudCwgZXhhbXBsZXMsIHN0b3JpZXMgYW5kIGNvbnZlcnNhdGlvbnMgYXJlIG9yaWdpbmFsLgogICBXb3JkOiBba3IsIHJvbWFuaXphdGlvbiwgZW4sIHZpLCBlbW9qaSwgZXhhbXBsZUtyLCBleGFtcGxlRW5dCiAgIEdyYW1tYXI6IFtwYXR0ZXJuLCBtZWFuaW5nLWVuLCBtZWFuaW5nLXZpLCB1c2FnZSBub3RlLCBleDFrciwgZXgxZW4sIGV4MmtyLCBleDJlbl0KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCBMRVNTT05TID0gWwp7bjoxLCBrcjoi7LKrIOunjOuCqCIsIGVuOiJGaXJzdCBNZWV0aW5ncyIsIHZpOiJZb3VyIGZpcnN0IGhlbGxvIiwgZW1vamk6IvCfpJ0iLCBib3NzOiLwn5G6IiwgYm9zc05hbWU6IkF3a3dhcmQtU2lsZW5jZSBJbXAiLAogd29yZHM6WwogIFsi7JWI64WV7ZWY7IS47JqUIiwiYW4tbnllb25nLWhhLXNlLXlvIiwiaGVsbG8iLCJUaGUgYWxsLXB1cnBvc2UgcG9saXRlIGhlbGxvIOKAlCB3b3JrcyBtb3JuaW5nLCBub29uIGFuZCBuaWdodCIsIvCfkYsiLCLslYjrhZXtlZjshLjsmpQhIOunjOuCmOyEnCDrsJjqsJHsirXri4jri6QuIiwiSGVsbG8hIEdsYWQgdG8gbWVldCB5b3UuIl0sCiAgWyLsnbTrpoQiLCJpLXJldW0iLCJuYW1lIiwiQXNrIOydtOumhOydtCDrrZDsmIjsmpQ/IOKAlCBXaGF0IGlzIHlvdXIgbmFtZT8iLCLwn5ObIiwi7J2066aE7J20IOutkOyYiOyalD8iLCJXaGF0IGlzIHlvdXIgbmFtZT8iXSwKICBbIuunjOuCmOyEnCDrsJjqsJHsirXri4jri6QiLCJtYW4tbmEtc2VvIGJhbi1nYXAtc2V1bS1uaS1kYSIsImdsYWQgdG8gbWVldCB5b3UiLCJTYXkgaXQgcmlnaHQgYWZ0ZXIgaW50cm9kdWN0aW9ucyDigJQgaW5zdGFudCB3YXJtdGgiLCLwn5iKIiwi66eM64KY7IScIOygleunkCDrsJjqsJHsirXri4jri6QhIiwiUmVhbGx5IGdsYWQgdG8gbWVldCB5b3UhIl0sCiAgWyLrgpjrnbwiLCJuYS1yYSIsImNvdW50cnkiLCLslrTripAg64KY6528ID0gd2hpY2ggY291bnRyeSDigJQgdGhlICMxIHF1ZXN0aW9uIHlvdSB3aWxsIGhlYXIiLCLwn4yNIiwi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IiwiV2hpY2ggY291bnRyeSBhcmUgeW91IGZyb20/Il0sCiAgWyLsgqzrnowiLCJzYS1yYW0iLCJwZXJzb24iLCJDb3VudHJ5ICsg7IKs656MID0gbmF0aW9uYWxpdHk6IOy6kOuCmOuLpCDsgqzrnowiLCLwn6eRIiwi7KCA64qUIOy6kOuCmOuLpCDsgqzrnozsnbTsl5DsmpQuIiwiSSBhbSBDYW5hZGlhbi4iXSwKICBbIuy5nOq1rCIsImNoaW4tZ3UiLCJmcmllbmQiLCJBbHNvIHVzZWQgbG9vc2VseSBmb3IgcGVvcGxlIHlvdXIgYWdlIiwi8J+RqyIsIuyasOumrCDsoovsnYAg7Lmc6rWsIO2VtOyalCEiLCJMZXQgdXMgYmUgZ29vZCBmcmllbmRzISJdLAogIFsi6rCQ7IKs7ZWp64uI64ukIiwiZ2FtLXNhLWhhbS1uaS1kYSIsInRoYW5rIHlvdSIsIlRoZSBzYWZlLCBwb2xpdGUgdGhhbmsteW91IGZvciBhbnkgc2l0dWF0aW9uIiwi8J+ZjyIsIuuPhOyZgOyjvOyFlOyEnCDqsJDsgqztlanri4jri6QuIiwiVGhhbmsgeW91IGZvciBoZWxwaW5nIG1lLiJdLAogIFsi7KOE7Iah7ZWp64uI64ukIiwiam9lLXNvbmctaGFtLW5pLWRhIiwiSSBhbSBzb3JyeSIsIk1vcmUgZm9ybWFsIHRoYW4g66+47JWI7ZW07JqUIOKAlCB1c2Ugd2l0aCBzdHJhbmdlcnMiLCLwn5mHIiwi64qm7Ja07IScIOyjhOyGoe2VqeuLiOuLpC4iLCJTb3JyeSBmb3IgYmVpbmcgbGF0ZS4iXSwKICBbIuuEpCAvIOyVhOuLiOyalCIsIm5lIC8gYS1uaS15byIsInllcyAvIG5vIiwi64SkIGFsc28gd29ya3MgYXMgJ0kgaGVhciB5b3UnIHdoaWxlIGxpc3RlbmluZyIsIuKchSIsIuuEpCwg66ee7JWE7JqULiIsIlllcywgdGhhdCBpcyByaWdodC4iXSwKICBbIuyemCDrtoDtg4Hrk5zrpr3ri4jri6QiLCJqYWwgYnUtdGFrLWRldS1yaW0tbmktZGEiLCJwbGVhc2UgdGFrZSBjYXJlIG9mIG1lIiwiU2FpZCB3aGVuIGpvaW5pbmcgYSBncm91cCBvciBzdGFydGluZyBzb21ldGhpbmcgdG9nZXRoZXIiLCLwn6SyIiwi7JWe7Jy866GcIOyemCDrtoDtg4Hrk5zrpr3ri4jri6QhIiwiSSBsb29rIGZvcndhcmQgdG8gd29ya2luZyB3aXRoIHlvdSEiXSwKICBbIuyViOuFle2eiCDqsIDshLjsmpQiLCJhbi1ueWVvbmctaGkgZ2Etc2UteW8iLCJnb29kYnllICh0aGV5IGxlYXZlKSIsIlRvIHRoZSBwZXJzb24gbGVhdmluZzsg7JWI64WV7Z6IIOqzhOyEuOyalCBpZiBZT1UgbGVhdmUiLCLwn5qqIiwi7JWI64WV7Z6IIOqwgOyEuOyalCEiLCJHb29kYnllIOKAlCBnbyB3ZWxsISJdLAogIFsi65iQIOunjOuCmOyalCIsInR0byBtYW4tbmEteW8iLCJzZWUgeW91IGFnYWluIiwiRnJpZW5kbHkgY2xvc2VyIHRoYXQga2VlcHMgdGhlIGRvb3Igb3BlbiIsIvCflIEiLCLri6TsnYzsl5Ag65iQIOunjOuCmOyalCEiLCJTZWUgeW91IGFnYWluIG5leHQgdGltZSEiXSwKICBbIuyggCIsICJqZW8iLCAiSSAvIG1lIChodW1ibGUpIiwgIlRoZSBwb2xpdGUgd2F5IHRvIHNheSAnSScg4oCUIHVzZSBpdCB3aXRoIHN0cmFuZ2VycyBhbmQgZWxkZXJzIiwgIvCfmYsiLCAi7KCA64qUIO2VmeyDneydtOyXkOyalC4iLCAiSSBhbSBhIHN0dWRlbnQuIl0sCiAgWyLsp4Hsl4UiLCAiamlnLWVvcCIsICJqb2IgLyBvY2N1cGF0aW9uIiwgIuyngeyXheydtCDrrZDsmIjsmpQ/IGlzIGEgbmF0dXJhbCBnZXQtdG8ta25vdy15b3UgcXVlc3Rpb24iLCAi8J+SvCIsICLsp4Hsl4XsnbQg662Q7JiI7JqUPyIsICJXaGF0IGlzIHlvdXIgam9iPyJdLAogIFsi7ZWZ7IOdIiwgImhhay1zYWVuZyIsICJzdHVkZW50IiwgIldvcmtzIGZvciBhbnkga2luZCBvZiBzdHVkZW50LCB1bml2ZXJzaXR5IGluY2x1ZGVkIiwgIvCfjpMiLCAi7KCA64qUIO2VnOq1reyWtCDtlZnsg53snbTsl5DsmpQuIiwgIkkgYW0gYSBLb3JlYW4tbGFuZ3VhZ2Ugc3R1ZGVudC4iXSwKICBbIu2ajOyCrOybkCIsICJob2Utc2Etd29uIiwgIm9mZmljZSB3b3JrZXIiLCAiVGhlIG1vc3QgY29tbW9uIGpvYiBhbnN3ZXIgaW4gS29yZWEiLCAi8J+PoiIsICLsoJwg7Lmc6rWs64qUIO2ajOyCrOybkOydtOyXkOyalC4iLCAiTXkgZnJpZW5kIGlzIGFuIG9mZmljZSB3b3JrZXIuIl0sCiAgWyLrgpjsnbQiLCAibmEtaSIsICJhZ2UiLCAiQXNrZWQgb2Z0ZW4gaW4gS29yZWEg4oCUIGFnZSBkZWNpZGVzIHNwZWVjaCBzdHlsZSEiLCAi8J+OgiIsICLrgpjsnbTqsIAg7Ja065a76rKMIOuQmOyEuOyalD8iLCAiTWF5IEkgYXNrIHlvdXIgYWdlPyJdLAogIFsi7LKY7J2MIiwgImNoZW8tZXVtIiwgImZpcnN0IHRpbWUiLCAi7ZWc6rWt7J2AIOyymOydjOydtOyXkOyalCA9IGl0IGlzIG15IGZpcnN0IHRpbWUgaW4gS29yZWEiLCAiMe+4j+KDoyIsICLtlZzqta3snYAg7J2067KI7J20IOyymOydjOydtOyXkOyalC4iLCAiVGhpcyBpcyBteSBmaXJzdCB0aW1lIGluIEtvcmVhLiJdLAogIFsi7Jik656c66eM7J207JeQ7JqUIiwgIm8tcmFlbi1tYW4taS1lLXlvIiwgImxvbmcgdGltZSBubyBzZWUiLCAiU2F5IGl0IHdoZW4gbWVldGluZyBzb21lb25lIGFmdGVyIGEgd2hpbGUiLCAi8J+VsO+4jyIsICLsmYAsIOygleunkCDsmKTrnpzrp4zsnbTsl5DsmpQhIiwgIldvdywgaXQgaGFzIHJlYWxseSBiZWVuIGEgd2hpbGUhIl0sCiAgWyLsnpgg7KeA64OI7Ja07JqUPyIsICJqYWwgamktbmFlc3MtZW8teW8iLCAiaG93IGhhdmUgeW91IGJlZW4/IiwgIlRoZSBuYXR1cmFsIGZvbGxvdy11cCB0byDsmKTrnpzrp4zsnbTsl5DsmpQiLCAi8J+ZgiIsICLsmpTsppgg7J6YIOyngOuDiOyWtOyalD8iLCAiSGF2ZSB5b3UgYmVlbiB3ZWxsIGxhdGVseT8iXSwKICBbIuyXsOudveyymCIsICJ5ZW9sLWxhay1jaGVvIiwgImNvbnRhY3QgaW5mbyIsICJFeGNoYW5nZSBpdCB0byBrZWVwIHRoZSBmcmllbmRzaGlwIGdvaW5nIiwgIvCfk4ciLCAi7Jew65297LKY66W8IOyVjOugpCDso7zshLjsmpQuIiwgIlBsZWFzZSBnaXZlIG1lIHlvdXIgY29udGFjdCBpbmZvLiJdLAogIFsi66qF7ZWoIiwgIm15ZW9uZy1oYW0iLCAiYnVzaW5lc3MgY2FyZCIsICJHaXZlIGFuZCByZWNlaXZlIHdpdGggdHdvIGhhbmRzIOKAlCBnb29kIG1hbm5lcnMiLCAi8J+qqiIsICLrqoXtlagg7Jes6riwIOyeiOyWtOyalC4iLCAiSGVyZSBpcyBteSBidXNpbmVzcyBjYXJkLiJdLAogIFsi7IaM6rCc7ZWY64ukIiwgInNvLWdhZS1oYS1kYSIsICJ0byBpbnRyb2R1Y2UiLCAi7KCcIOy5nOq1rOulvCDshozqsJztlaDqsozsmpQgPSBsZXQgbWUgaW50cm9kdWNlIG15IGZyaWVuZCIsICLwn6SdIiwgIuygnCDsuZzqtazrpbwg7IaM6rCc7ZWg6rKM7JqULiIsICJMZXQgbWUgaW50cm9kdWNlIG15IGZyaWVuZC4iXSwKICBbIu2ZmOyYge2VtOyalCIsICJod2FuLXllb25nLWhhZS15byIsICJ3ZWxjb21lISIsICJHcmVldCBuZXdjb21lcnMgd2FybWx5IHdpdGggdGhpcyIsICLwn46JIiwgIuyasOumrCDrqqjsnoTsl5Ag7ZmY7JiB7ZW07JqUISIsICJXZWxjb21lIHRvIG91ciBncm91cCEiXV0sCiBncmFtbWFyOlsKICBbIuyggOuKlCBO7J207JeQ7JqUL+yYiOyalCIsIkkgYW0gTiIsIkludHJvZHVjaW5nIHlvdXJzZWxmIOKAlCBuYW1lLCBqb2IsIG5hdGlvbmFsaXR5Iiwi7J207JeQ7JqUIGFmdGVyIGEgY29uc29uYW50ICjsgqzrnozsnbTsl5DsmpQpLCDsmIjsmpQgYWZ0ZXIgYSB2b3dlbCAo66+87IiY7JiI7JqUKS4iLCLsoIDripQg7Yaw7J207JeQ7JqULiIsIkkgYW0gVG9tLiIsIuyggOuKlCDsupDrgpjri6Qg7IKs656M7J207JeQ7JqULiIsIkkgYW0gQ2FuYWRpYW4uIl0sCiAgWyJO7J20L+qwgCDrrZDsmIjsmpQ/Iiwid2hhdCBpcyBOPyIsIkFza2luZyBhYm91dCBhbnl0aGluZyB5b3UgcG9pbnQgYXQgb3Igd2FudCB0byBrbm93Iiwi7J20IGFmdGVyIGNvbnNvbmFudCwg6rCAIGFmdGVyIHZvd2VsLiBUaGUgdW5pdmVyc2FsIHF1ZXN0aW9uIHN0YXJ0ZXIuIiwi7J2066aE7J20IOutkOyYiOyalD8iLCJXaGF0IGlzIHlvdXIgbmFtZT8iLCLsnbTqsbDripQg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhpcz8iXSwKICBbIk7sl5DshJwg7JmU7Ja07JqUIiwiSSBjYW1lIGZyb20gTiIsIlNoYXJpbmcgKG9yIGFza2luZykgd2hlcmUgc29tZW9uZSBpcyBmcm9tIiwi7JeQ7IScIG1hcmtzIHRoZSBvcmlnaW4uIFF1ZXN0aW9uOiDslrTrlJTsl5DshJwg7JmU7Ja07JqUPyIsIuyggOuKlCDrsqDtirjrgqjsl5DshJwg7JmU7Ja07JqULiIsIkkgY2FtZSBmcm9tIFZpZXRuYW0uIiwi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IiwiV2hpY2ggY291bnRyeSBkaWQgeW91IGNvbWUgZnJvbT8iXV19LAoKe246Miwga3I6Iuy5tO2OmCIsIGVuOiJBdCB0aGUgQ2Fmw6kiLCB2aToiT3JkZXIgbGlrZSBhIHJlZ3VsYXIiLCBlbW9qaToi4piVIiwgYm9zczoi8J+QsiIsIGJvc3NOYW1lOiJEZWNhZiBEcmFnb24iLAogd29yZHM6WwogIFsi7Luk7ZS8Iiwia2VvLXBpIiwiY29mZmVlIiwiS29yZWEgcnVucyBvbiBjb2ZmZWUg4oCUIGNhZsOpcyBvbiBldmVyeSBjb3JuZXIiLCLimJUiLCLsu6TtlLwg7ZWcIOyelCDso7zshLjsmpQuIiwiT25lIGNvZmZlZSwgcGxlYXNlLiJdLAogIFsi7KO87IS47JqUIiwianUtc2UteW8iLCJwbGVhc2UgZ2l2ZSBtZSIsIlRIRSBtYWdpYyB3b3JkIOKAlCBhdHRhY2ggaXQgdG8gYW55dGhpbmcgeW91IHdhbnQiLCLwn6SyIiwi66y8IOyigCDso7zshLjsmpQuIiwiU29tZSB3YXRlciwgcGxlYXNlLiJdLAogIFsi7JWE7J207IqkIiwiYS1pLXNldSIsImljZWQiLCJLb3JlYW5zIGRyaW5rIGljZWQgY29mZmVlIGV2ZW4gaW4gd2ludGVyIiwi8J+niiIsIuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7KO87IS47JqULiIsIkFuIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIl0sCiAgWyLrlLDrnLvtlZwiLCJ0dGEtdHRldS10YW4iLCJob3QgKGRyaW5rKSIsIkxpdGVyYWxseSAnd2FybScg4oCUIHRoZSBzdGFuZGFyZCB3b3JkIGZvciBob3QgZHJpbmtzIiwi4pmo77iPIiwi65Sw65y77ZWcIOudvO2FjCDso7zshLjsmpQuIiwiQSBob3QgbGF0dGUsIHBsZWFzZS4iXSwKICBbIu2VnCDsnpQiLCJoYW4gamFuIiwib25lIGN1cCIsIuyelCA9IGN1cCBjb3VudGVyOiDtlZwg7J6ULCDrkZAg7J6ULCDshLgg7J6UIiwi8J+lpCIsIuy7pO2UvCDrkZAg7J6UIOyjvOyEuOyalC4iLCJUd28gY29mZmVlcywgcGxlYXNlLiJdLAogIFsi7Y+s7J6lIiwicG8tamFuZyIsInRha2VvdXQiLCLtj6zsnqXtlbQg7KO87IS47JqUID0gdG8gZ287IOuoueqzoCDqsIjqsozsmpQgPSBmb3IgaGVyZSIsIvCfpaEiLCLtj6zsnqXtlbQg7KO87IS47JqULiIsIlRvIGdvLCBwbGVhc2UuIl0sCiAgWyLslrzrp4jsmIjsmpQiLCJlb2wtbWEteWUteW8iLCJob3cgbXVjaCBpcyBpdCIsIldvcmtzIGZvciBldmVyeXRoaW5nIHdpdGggYSBwcmljZSB0YWciLCLwn5KwIiwi7J206rGwIOyWvOuniOyYiOyalD8iLCJIb3cgbXVjaCBpcyB0aGlzPyJdLAogIFsi7Lm065OcIiwia2EtZGV1IiwiY2FyZCIsIuy5tOuTnOuhnCA9IGJ5IGNhcmQ7IG5lYXJseSBldmVyeXdoZXJlIHRha2VzIGNhcmRzIiwi8J+SsyIsIuy5tOuTnOuhnCDtlaDqsozsmpQuIiwiSSB3aWxsIHBheSBieSBjYXJkLiJdLAogIFsi7ZiE6riIIiwiaHllb24tZ2V1bSIsImNhc2giLCJTb21lIG1hcmtldHMgYXJlIHN0aWxsIGNhc2gtb25seSIsIvCfkrUiLCLtmITquIjrp4wg64+87JqUPyIsIklzIGl0IGNhc2ggb25seT8iXSwKICBbIuy8gOydtO2BrCIsImtlLWkta2V1IiwiY2FrZSIsIkNhZsOpIGNha2VzIGFyZSBhIHdob2xlIGN1bHR1cmUgaW4gS29yZWEiLCLwn42wIiwi7LmY7KaIIOy8gOydtO2BrCDtlZjrgpgg7KO87IS47JqULiIsIk9uZSBjaGVlc2VjYWtlLCBwbGVhc2UuIl0sCiAgWyLshKTtg5UiLCJzZW9sLXRhbmciLCJzdWdhciIsIuu5vCDso7zshLjsmpQgPSBsZWF2ZSBpdCBvdXQiLCLwn42sIiwi7ISk7YOVIOu5vCDso7zshLjsmpQuIiwiTm8gc3VnYXIsIHBsZWFzZS4iXSwKICBbIuyekOumrCIsImphLXJpIiwic2VhdCIsIkNoZWNrIGJlZm9yZSB5b3Ugb3JkZXIgYXQgYnVzeSBjYWbDqXMiLCLwn6qRIiwi7J6Q66asIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBhIHNlYXQ/Il0sCiAgWyLrnbzthYwiLCAibGEtdGUiLCAibGF0dGUiLCAiQ2Fmw6kgbGF0dGVzIGNvbWUgaW4gbWFueSBmbGF2b3JzOiDrsJTri5DrnbwsIOuFueywqOKApiIsICLwn6WbIiwgIuuwlOuLkOudvCDrnbzthYwg7KO87IS47JqULiIsICJBIHZhbmlsbGEgbGF0dGUsIHBsZWFzZS4iXSwKICBbIuuFueywqCIsICJub2stY2hhIiwgImdyZWVuIHRlYSIsICJBbHNvIGEgYmVsb3ZlZCBsYXR0ZSBhbmQgaWNlLWNyZWFtIGZsYXZvciIsICLwn421IiwgIuuFueywqCDrnbzthYzrj4Qg7J6I7Ja07JqUPyIsICJEbyB5b3UgYWxzbyBoYXZlIGdyZWVuIHRlYSBsYXR0ZXM/Il0sCiAgWyLso7zsiqQiLCAianUtc2V1IiwgImp1aWNlIiwgIktvbmdsaXNoIOKAlCBzb3VuZHMganVzdCBsaWtlICdqdWljZSciLCAi8J+ngyIsICLsmKTroIzsp4Ag7KO87IqkIOyjvOyEuOyalC4iLCAiT3JhbmdlIGp1aWNlLCBwbGVhc2UuIl0sCiAgWyLsmrDsnKAiLCAidS15dSIsICJtaWxrIiwgIuuRkOycoCA9IHNveSBtaWxrIGlmIHlvdSBhdm9pZCBkYWlyeSIsICLwn6WbIiwgIuyasOycoCDrjIDsi6Ag65GQ7Jyg66GcIOyjvOyEuOyalC4iLCAiU295IG1pbGsgaW5zdGVhZCBvZiBtaWxrLCBwbGVhc2UuIl0sCiAgWyLslrzsnYwiLCAiZW9sLWV1bSIsICJpY2UiLCAi7Ja87J2MIOunjuydtC/sobDquIggPSBsb3RzIG9mIC8gYSBsaXR0bGUgaWNlIiwgIvCfp4oiLCAi7Ja87J2MIOyhsOq4iOunjCDso7zshLjsmpQuIiwgIkp1c3QgYSBsaXR0bGUgaWNlLCBwbGVhc2UuIl0sCiAgWyLri6zri6QiLCAiZGFsLWRhIiwgInN3ZWV0IiwgIuuEiOustCDri6zslYTsmpQgPSB0b28gc3dlZXQgKEtvcmVhbiBjYWbDqSBkcmlua3Mgb2Z0ZW4gYXJlISkiLCAi8J+NryIsICLsnbQg7J2M66OM7IiY64qUIOuEiOustCDri6zslYTsmpQuIiwgIlRoaXMgZHJpbmsgaXMgdG9vIHN3ZWV0LiJdLAogIFsi7JOw64ukIiwgInNzZXUtZGEiLCAiYml0dGVyIiwgIkRlc2NyaWJlcyBzdHJvbmcgY29mZmVlIHBlcmZlY3RseSIsICLimJUiLCAi7J20IOy7pO2UvOuKlCDsobDquIgg7I2o7JqULiIsICJUaGlzIGNvZmZlZSBpcyBhIGJpdCBiaXR0ZXIuIl0sCiAgWyLsp4Trj5nrsqgiLCAiamluLWRvbmctYmVsIiwgImJ1enplciBwYWdlciIsICJLb3JlYW4gY2Fmw6lzIGhhbmQgeW91IG9uZSDigJQgaXQgYnV6emVzIHdoZW4geW91ciBvcmRlciBpcyByZWFkeSIsICLwn5OzIiwgIuynhOuPmeuyqOydtCDsmrjrpqzrqbQg7Jik7IS47JqULiIsICJDb21lIHdoZW4gdGhlIGJ1enplciByaW5ncy4iXSwKICBbIuumrO2VhCIsICJyaS1waWwiLCAicmVmaWxsIiwgIuumrO2VhCDrj7zsmpQ/ID0gZG8geW91IGRvIHJlZmlsbHM/IiwgIvCflIQiLCAi66as7ZWEIOuPvOyalD8iLCAiQ2FuIEkgZ2V0IGEgcmVmaWxsPyJdLAogIFsi7L2Y7IS87Yq4IiwgImtvbi1zZW4tdGV1IiwgInBvd2VyIG91dGxldCIsICJDYWbDqS13b3JrZXIgc3Vydml2YWwgd29yZCIsICLwn5SMIiwgIuy9mOyEvO2KuCDsnojripQg7J6Q66asIOyeiOyWtOyalD8iLCAiSXMgdGhlcmUgYSBzZWF0IHdpdGggYW4gb3V0bGV0PyJdLAogIFsi66i46re47Lu1IiwgIm1lby1nZXUta2VvcCIsICJtdWciLCAi66i46re47Lu17JeQIOyjvOyEuOyalCA9IGZvciBoZXJlLCBpbiBhIG11ZyAoZWNvLWZyaWVuZGx5ISkiLCAi4piVIiwgIuuouOq3uOy7teyXkCDso7zshLjsmpQuIiwgIkluIGEgbXVnLCBwbGVhc2UuIl0sCiAgWyLruajrjIAiLCAicHBhbC1kYWUiLCAic3RyYXciLCAiVXN1YWxseSBhdCB0aGUgcGlja3VwIGNvdW50ZXIiLCAi8J+lpCIsICLruajrjIDripQg7Ja065SU7JeQIOyeiOyWtOyalD8iLCAiV2hlcmUgYXJlIHRoZSBzdHJhd3M/Il1dLAogZ3JhbW1hcjpbCiAgWyJOIOyjvOyEuOyalCIsInBsZWFzZSBnaXZlIG1lIE4iLCJPcmRlcmluZyBBTllUSElORyDigJQgZHJpbmtzLCBmb29kLCB0aGUgYmlsbCIsIk5vdW4gKyDso7zshLjsmpQuIEFkZCDsooAgdG8gc29mdGVuOiDrrLwg7KKAIOyjvOyEuOyalC4iLCLslYTsnbTsiqQg7JWE66mU66as7Lm064W4IOyjvOyEuOyalC4iLCJBbiBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsIuuplOuJtCDsooAg7KO87IS47JqULiIsIlRoZSBtZW51LCBwbGVhc2UuIl0sCiAgWyJOKOycvCnroZwg7ZWg6rKM7JqUIiwiSSB3aWxsIGdvIHdpdGggTiIsIkNob29zaW5nIGFuIG9wdGlvbiDigJQgcGF5bWVudCwgZmxhdm9yLCBzaXplIiwiKOycvCnroZwgbWFya3MgeW91ciBjaG9pY2U7IH7jhLnqsozsmpQgPSBmcmllbmRseSAnSSB3aWxsJy4iLCLsubTrk5zroZwg7ZWg6rKM7JqULiIsIkkgd2lsbCBwYXkgYnkgY2FyZC4iLCLtgbAg7IKs7J207KaI66GcIO2VoOqyjOyalC4iLCJJIHdpbGwgdGFrZSB0aGUgbGFyZ2Ugc2l6ZS4iXSwKICBbIk4g67m8IOyjvOyEuOyalCIsIndpdGhvdXQgTiwgcGxlYXNlIiwiQ3VzdG9taXppbmcgeW91ciBvcmRlciIsIuu5vOuLpCA9IHJlbW92ZS4gT3Bwb3NpdGU6IOuNlCDso7zshLjsmpQgKG1vcmUgcGxlYXNlKS4iLCLshKTtg5Ug67m8IOyjvOyEuOyalC4iLCJXaXRob3V0IHN1Z2FyLCBwbGVhc2UuIiwi7Ja87J2MIOu5vCDso7zshLjsmpQuIiwiTm8gaWNlLCBwbGVhc2UuIl1dfSwKCntuOjMsIGtyOiLsi53ri7kiLCBlbjoiQXQgdGhlIFJlc3RhdXJhbnQiLCB2aToiTmV2ZXIgZ28gaHVuZ3J5IiwgZW1vamk6IvCfjZwiLCBib3NzOiLwn4y277iPIiwgYm9zc05hbWU6IlNwaWNlIEdvYmxpbiIsCiB3b3JkczpbCiAgWyLrqZTribQiLCJtZS1ueXUiLCJtZW51Iiwi66mU64m07YyQID0gdGhlIHBoeXNpY2FsIG1lbnUgYm9hcmQvYm9vayIsIvCfk4siLCLrqZTribQg7KKAIOyjvOyEuOyalC4iLCJUaGUgbWVudSwgcGxlYXNlLiJdLAogIFsi7LaU7LKcIiwiY2h1LWNoZW9uIiwicmVjb21tZW5kYXRpb24iLCJTZXJ2ZXJzIGxvdmUgdGhpcyBxdWVzdGlvbiDigJQgaW5zdGFudCBnb29kIGZvb2QiLCLwn5GNIiwi7LaU7LKc7ZW0IOyjvOyEuOyalCEiLCJQbGVhc2UgcmVjb21tZW5kIHNvbWV0aGluZyEiXSwKICBbIuunteuLpCIsIm1hZXAtZGEiLCJzcGljeSIsIkVzc2VudGlhbCBzdXJ2aXZhbCBjaGVjazog66ek7JuM7JqUPyA9IGlzIGl0IHNwaWN5PyIsIvCfjLbvuI8iLCLsnbTqsbAg66eO7J20IOunpOybjOyalD8iLCJJcyB0aGlzIHZlcnkgc3BpY3k/Il0sCiAgWyLrrLwiLCJtdWwiLCJ3YXRlciIsIlVzdWFsbHkgc2VsZi1zZXJ2ZSDigJQgbG9vayBmb3IgdGhlIHdhdGVyIHN0YXRpb24iLCLwn5KnIiwi66y87J2AIOyFgO2UhOyYiOyalC4iLCJXYXRlciBpcyBzZWxmLXNlcnZlLiJdLAogIFsi67CY7LCsIiwiYmFuLWNoYW4iLCJzaWRlIGRpc2hlcyIsIkZyZWUgYW5kIHJlZmlsbGFibGUgYXQgbW9zdCBLb3JlYW4gcmVzdGF1cmFudHMhIiwi8J+loiIsIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iXSwKICBbIuunm+yeiOuLpCIsIm1hcy1pdC1kYSIsImRlbGljaW91cyIsIkNvbXBsaW1lbnQgdGhlIGZvb2Qg4oCUIGl0IG1ha2VzIGV2ZXJ5b25lIGhhcHB5Iiwi8J+YiyIsIuyZgCwg7KCV66eQIOunm+yeiOyWtOyalCEiLCJXb3csIHRoaXMgaXMgcmVhbGx5IGRlbGljaW91cyEiXSwKICBbIuqzhOyCsOyEnCIsImd5ZS1zYW4tc2VvIiwiYmlsbCIsIk9mdGVuIHlvdSBqdXN0IHBheSBhdCB0aGUgY291bnRlciBieSB0aGUgZG9vciIsIvCfp74iLCLqs4TsgrDshJwg7KO87IS47JqULiIsIlRoZSBiaWxsLCBwbGVhc2UuIl0sCiAgWyLrlLDroZwiLCJ0dGEtcm8iLCJzZXBhcmF0ZWx5Iiwi65Sw66Gc65Sw66GcIOqzhOyCsCA9IHNwbGl0IHRoZSBiaWxsIiwi8J+SuCIsIuuUsOuhnCDqs4TsgrDtlbQg7KO87IS47JqULiIsIlNlcGFyYXRlIGJpbGxzLCBwbGVhc2UuIl0sCiAgWyLtmZTsnqXsi6QiLCJod2EtamFuZy1zaWwiLCJyZXN0cm9vbSIsIlNvbWV0aW1lcyBvdXRzaWRlIHRoZSByZXN0YXVyYW50IOKAlCBhc2sgZm9yIHRoZSBjb2RlISIsIvCfmrsiLCLtmZTsnqXsi6TsnbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSByZXN0cm9vbT8iXSwKICBbIuyYiOyVvSIsInllLXlhayIsInJlc2VydmF0aW9uIiwi7JiI7JW97ZaI7Ja07JqUID0gSSBoYXZlIGEgcmVzZXJ2YXRpb24iLCLwn5OFIiwi65GQIOuqheycvOuhnCDsmIjslb3tlojslrTsmpQuIiwiSSByZXNlcnZlZCBmb3IgdHdvIHBlb3BsZS4iXSwKICBbIuygk+qwgOudvSIsImplb3QtZ2EtcmFrIiwiY2hvcHN0aWNrcyIsIk9mdGVuIGluIGEgYm94IG9uIHRoZSB0YWJsZSBzaWRlIGRyYXdlciIsIvCfpaIiLCLsoJPqsIDrnb0g7ZWY64KYIOuNlCDso7zshLjsmpQuIiwiT25lIG1vcmUgcGFpciBvZiBjaG9wc3RpY2tzLCBwbGVhc2UuIl0sCiAgWyLrsLDrtoDrpbTri6QiLCJiYWUtYnUtcmV1LWRhIiwidG8gYmUgZnVsbCIsIlRoZSBoYXBwaWVzdCBzZW50ZW5jZSBhZnRlciBhIGdvb2QgbWVhbCIsIvCfq4MiLCLslYQsIOuwsOu2iOufrOyalCEiLCJBaCwgSSBhbSBmdWxsISJdLAogIFsi67ClIiwgImJhcCIsICJyaWNlIC8gYSBtZWFsIiwgIuuwpSDrqLnsl4jslrTsmpQ/ID0gZGlkIHlvdSBlYXQ/IChhIGdyZWV0aW5nIG9mIGNhcmUhKSIsICLwn42aIiwgIuuwpSDrqLnsl4jslrTsmpQ/IiwgIkhhdmUgeW91IGVhdGVuPyJdLAogIFsi6rWtIiwgImd1ayIsICJzb3VwIiwgIktvcmVhbiBtZWFscyBhbG1vc3QgYWx3YXlzIGluY2x1ZGUgb25lIiwgIvCfjbIiLCAi6rWt7J20IOygleunkCDrlLDrnLvtlbTsmpQuIiwgIlRoZSBzb3VwIGlzIHJlYWxseSB3YXJtLiJdLAogIFsi6rOg6riwIiwgImdvLWdpIiwgIm1lYXQiLCAi6rOg6riwIOq1rOybjCDrqLnslrTsmpQgPSBLb3JlYW4gQkJRIG5pZ2h0IiwgIvCfpakiLCAi6rOg6riwIOyii+yVhO2VtOyalD8iLCAiRG8geW91IGxpa2UgbWVhdD8iXSwKICBbIuuPvOyngOqzoOq4sCIsICJkd2FlLWppLWdvLWdpIiwgInBvcmsiLCAi64+87KeAIHBpZyArIOqzoOq4sCBtZWF0IOKAlCB0aGUgcGF0dGVybiBmb3IgYWxsIG1lYXRzIiwgIvCfkLciLCAi64+87KeA6rOg6riw66GcIOyjvOyEuOyalC4iLCAiUG9yaywgcGxlYXNlLiJdLAogIFsi64ut6rOg6riwIiwgImRhay1nby1naSIsICJjaGlja2VuIiwgIuy5mO2CqCA9IGZyaWVkIGNoaWNrZW47IOuLreqzoOq4sCA9IGNoaWNrZW4gbWVhdCIsICLwn42XIiwgIuuLreqzoOq4sCDsmpTrpqzqsIAg66eb7J6I7Ja07JqULiIsICJUaGUgY2hpY2tlbiBkaXNoZXMgYXJlIGRlbGljaW91cy4iXSwKICBbIu2VtOusvCIsICJoYWUtbXVsIiwgInNlYWZvb2QiLCAi7ZW066y8IO2MjOyghCA9IHNlYWZvb2QgcGFuY2FrZSwgYSBjbGFzc2ljIiwgIvCfppAiLCAi7ZW066y87J2EIOuquyDrqLnslrTsmpQuIiwgIkkgY2Fubm90IGVhdCBzZWFmb29kLiJdLAogIFsi7LGE7IaMIiwgImNoYWUtc28iLCAidmVnZXRhYmxlcyIsICLslbzssYQgaXMgYWxzbyB1c2VkIOKAlCBib3RoIGFyZSBmaW5lIiwgIvCfpawiLCAi7LGE7IaM66W8IOunjuydtCDrqLnslrTsmpQuIiwgIkkgZWF0IGEgbG90IG9mIHZlZ2V0YWJsZXMuIl0sCiAgWyLsiJ/qsIDrnb0iLCAic3V0LWdhLXJhayIsICJzcG9vbiIsICJLb3JlYW5zIGVhdCByaWNlIHdpdGggYSBzcG9vbiwgbm90IGNob3BzdGlja3MiLCAi8J+lhCIsICLsiJ/qsIDrnb0g7ZWY64KYIOyjvOyEuOyalC4iLCAiT25lIHNwb29uLCBwbGVhc2UuIl0sCiAgWyLsp5zri6QiLCAiamphLWRhIiwgInNhbHR5IiwgIuyigCDsp5zsmpQgPSBhIGJpdCBzYWx0eSIsICLwn6eCIiwgIuydtCDqta3snYAg7KKAIOynnOyalC4iLCAiVGhpcyBzb3VwIGlzIGEgYml0IHNhbHR5LiJdLAogIFsi67Cw64usIiwgImJhZS1kYWwiLCAiZGVsaXZlcnkiLCAiS29yZWEncyBkZWxpdmVyeSBjdWx0dXJlIGlzIHdvcmxkLWZhbW91cyIsICLwn5u1IiwgIuuwsOuLrCDrj7zsmpQ/IiwgIkRvIHlvdSBkZWxpdmVyPyJdLAogIFsi66eb7KeRIiwgIm1hdC1qaXAiLCAiZmFtb3VzIHRhc3R5IHJlc3RhdXJhbnQiLCAi66ebIHRhc3RlICsg7KeRIGhvdXNlIOKAlCBldmVyeW9uZSBodW50cyDrp5vsp5EhIiwgIuKtkCIsICLsl6zquLDqsIAg7Jyg66qF7ZWcIOunm+ynkeydtOyXkOyalC4iLCAiVGhpcyBpcyBhIGZhbW91cyBtdXN0LWVhdCBwbGFjZS4iXSwKICBbIuyCrOyepeuLmCIsICJzYS1qYW5nLW5pbSIsICJvd25lciAvIGJvc3MiLCAiUG9saXRlbHkgY2FsbCByZXN0YXVyYW50IG93bmVycyB0aGlzIOKAlCB0aGV5IGxvdmUgaXQiLCAi8J+ZiyIsICLsgqzsnqXri5gsIOusvCDsooAg7KO87IS47JqUISIsICJFeGN1c2UgbWUsIHNvbWUgd2F0ZXIgcGxlYXNlISJdXSwKIGdyYW1tYXI6WwogIFsiTiDrjZQg7KO87IS47JqUIiwibW9yZSBOLCBwbGVhc2UiLCJSZWZpbGxzIOKAlCBzaWRlIGRpc2hlcywgd2F0ZXIsIGFueXRoaW5nIiwi642UID0gbW9yZS4gS29yZWFuIHJlc3RhdXJhbnRzIGV4cGVjdCB0aGlzLCBkbyBub3QgYmUgc2h5LiIsIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLCLrrLwg642UIOyjvOyEuOyalC4iLCJNb3JlIHdhdGVyLCBwbGVhc2UuIl0sCiAgWyLslYggKyBhZGplY3RpdmUiLCJub3QgfiIsIkFza2luZyBmb3IgZm9vZCB5b3VyIHdheSIsIuyViCDrp7XqsowgPSBub3Qgc3BpY3kobHkpLiDslYggZ29lcyByaWdodCBiZWZvcmUgdGhlIHdvcmQuIiwi7JWIIOunteqyjCDtlbQg7KO87IS47JqULiIsIlBsZWFzZSBtYWtlIGl0IG5vdCBzcGljeS4iLCLslYgg7Kec6rKMIO2VtCDso7zshLjsmpQuIiwiUGxlYXNlIG1ha2UgaXQgbm90IHNhbHR5LiJdLAogIFsifijsnLwp44S5IOyImCDsnojslrTsmpQ/IiwiY2FuIHlvdSAvIGlzIGl0IHBvc3NpYmxlPyIsIlBvbGl0ZWx5IGNoZWNraW5nIGlmIHNvbWV0aGluZyBjYW4gYmUgZG9uZSIsIlZlcmIgc3RlbSArICjsnLwp44S5IOyImCDsnojslrTsmpQuIFRoZSB1bml2ZXJzYWwgcG9zc2liaWxpdHkgY2hlY2suIiwi642cIOunteqyjCDtlaAg7IiYIOyeiOyWtOyalD8iLCJDYW4geW91IG1ha2UgaXQgbGVzcyBzcGljeT8iLCLsp4DquIgg7KO866y47ZWgIOyImCDsnojslrTsmpQ/IiwiQ2FuIEkgb3JkZXIgbm93PyJdXX0sCgp7bjo0LCBrcjoi6ri4IOywvuq4sCIsIGVuOiJBc2tpbmcgRGlyZWN0aW9ucyIsIHZpOiJOZXZlciB0cnVseSBsb3N0IiwgZW1vamk6IvCfl7rvuI8iLCBib3NzOiLwn4yAIiwgYm9zc05hbWU6Ik1hemUgUGhhbnRvbSIsCiB3b3JkczpbCiAgWyLslrTrlJQiLCJlby1kaSIsIndoZXJlIiwi7Ja065SU7JiI7JqUPyB3b3JrcyBmb3IgcGxhY2VzLCByZXN0cm9vbXMsIGV4aXRzLCBldmVyeXRoaW5nIiwi4p2TIiwi7KeA7ZWY7LKg7Jet7J20IOyWtOuUlOyYiOyalD8iLCJXaGVyZSBpcyB0aGUgc3Vid2F5IHN0YXRpb24/Il0sCiAgWyLsmbzsqr0iLCJvZW4tampvayIsImxlZnQiLCIo7Jy8KeuhnCBtYXJrcyB0aGUgZGlyZWN0aW9uOiDsmbzsqr3snLzroZwiLCLirIXvuI8iLCLsmbzsqr3snLzroZwg6rCA7IS47JqULiIsIkdvIHRvIHRoZSBsZWZ0LiJdLAogIFsi7Jik66W47Kq9Iiwiby1yZXVuLWpqb2siLCJyaWdodCIsIkxlYXJuIOyZvOyqvS/smKTrpbjsqr0gYXMgYSBwYWlyIiwi4p6h77iPIiwi7Jik66W47Kq97Jy866GcIOuPhOyEuOyalC4iLCJUdXJuIHJpZ2h0LiJdLAogIFsi7K2JIiwiamp1ayIsInN0cmFpZ2h0IGFoZWFkIiwi7K2JIOqwgOyEuOyalCA9IGtlZXAgZ29pbmcgc3RyYWlnaHQg4oCUIHlvdSB3aWxsIGhlYXIgdGhpcyBhIGxvdCIsIuKshu+4jyIsIuydtCDquLjroZwg7K2JIOqwgOyEuOyalC4iLCJHbyBzdHJhaWdodCBhbG9uZyB0aGlzIHJvYWQuIl0sCiAgWyLsgqzqsbDrpqwiLCJzYS1nZW8tcmkiLCJpbnRlcnNlY3Rpb24iLCLsgqwgPSBmb3VyLCDqsbDrpqwgPSB3YXk6IGEgZm91ci13YXkgY3Jvc3NpbmciLCLinpUiLCLsgqzqsbDrpqzsl5DshJwg7Jm87Kq97J207JeQ7JqULiIsIkF0IHRoZSBpbnRlcnNlY3Rpb24sIGl0IGlzIG9uIHRoZSBsZWZ0LiJdLAogIFsi7Iug7Zi465OxIiwic2luLWhvLWRldW5nIiwidHJhZmZpYyBsaWdodCIsIkEgZmF2b3JpdGUgbGFuZG1hcmsgaW4gZGlyZWN0aW9ucyIsIvCfmqYiLCLsi6DtmLjrk7Hsl5DshJwg6rG064SI7IS47JqULiIsIkNyb3NzIGF0IHRoZSB0cmFmZmljIGxpZ2h0LiJdLAogIFsi6rG064SI64ukIiwiZ2Vvbi1uZW8tZGEiLCJ0byBjcm9zcyIsIuq4uOydhCDqsbTrhIjri6QgPSBjcm9zcyB0aGUgc3RyZWV0Iiwi8J+atiIsIu2aoeuLqOuztOuPhOyXkOyEnCDquLjsnYQg6rG064SI7IS47JqULiIsIkNyb3NzIHRoZSBzdHJlZXQgYXQgdGhlIGNyb3Nzd2Fsay4iXSwKICBbIuqwgOq5neuLpCIsImdhLWtrYXAtZGEiLCJuZWFyIiwi6rCA6rmM7JuM7JqUPyA9IGlzIGl0IGNsb3NlPyBHcmVhdCBiZWZvcmUgY29tbWl0dGluZyB0byB3YWxrIiwi8J+TjSIsIuyXrOq4sOyEnCDqsIDquYzsm4zsmpQ/IiwiSXMgaXQgbmVhciBoZXJlPyJdLAogIFsi66mA64ukIiwibWVvbC1kYSIsImZhciIsIuupgOyWtOyalCA9IGl0IGlzIGZhciDihpIgdGFrZSBhIGJ1cyBpbnN0ZWFkIiwi8J+alyIsIuqxuOyWtOyEnCDsooAg66mA7Ja07JqULiIsIkl0IGlzIGEgYml0IGZhciBvbiBmb290LiJdLAogIFsi7JiGIiwieWVvcCIsIm5leHQgdG8iLCJOIOyYhuyXkCA9IGJlc2lkZSBOOiDsnYDtlokg7JiG7JeQIiwi4oaU77iPIiwi7Lm07Y6Y64qUIOydgO2WiSDsmIbsl5Ag7J6I7Ja07JqULiIsIlRoZSBjYWbDqSBpcyBuZXh0IHRvIHRoZSBiYW5rLiJdLAogIFsi7JWeIiwiYXAiLCJpbiBmcm9udCBvZiIsIk4g7JWe7JeQ7IScIOunjOuCmOyalCA9IGNsYXNzaWMgbWVldGluZyBpbnN0cnVjdGlvbiIsIvCfj6IiLCLtjrjsnZjsoJAg7JWe7JeQ7IScIOunjOuCmOyalC4iLCJMZXQgdXMgbWVldCBpbiBmcm9udCBvZiB0aGUgY29udmVuaWVuY2Ugc3RvcmUuIl0sCiAgWyLrqocg67aEIiwibXllb3QgYnVuIiwiaG93IG1hbnkgbWludXRlcyIsIuqxuOyWtOyEnCDrqocg67aE7J207JeQ7JqUPyA9IGhvdyBtYW55IG1pbnV0ZXMgb24gZm9vdD8iLCLij7HvuI8iLCLqsbjslrTshJwg66qHIOu2hCDqsbjroKTsmpQ/IiwiSG93IG1hbnkgbWludXRlcyBkb2VzIGl0IHRha2Ugb24gZm9vdD8iXSwKICBbIuy2nOq1rCIsICJjaHVsLWd1IiwgImV4aXQiLCAiU3Vid2F5IGV4aXRzIGFyZSBudW1iZXJlZCDigJQgM+uyiCDstpzqtawgPSBleGl0IDMiLCAi8J+aqiIsICIz67KIIOy2nOq1rOuhnCDrgpjsmKTshLjsmpQuIiwgIkNvbWUgb3V0IG9mIGV4aXQgMy4iXSwKICBbIuyeheq1rCIsICJpcC1ndSIsICJlbnRyYW5jZSIsICJUaGUgcGFpciBvZiDstpzqtawiLCAi4p6h77iPIiwgIuyeheq1rOqwgCDslrTrlJTsmIjsmpQ/IiwgIldoZXJlIGlzIHRoZSBlbnRyYW5jZT8iXSwKICBbIuqzqOuqqSIsICJnb2wtbW9rIiwgImFsbGV5IiwgIlRoZSBiZXN0IHJlc3RhdXJhbnRzIGhpZGUgaW4gYWxsZXlzIiwgIvCfj5jvuI8iLCAi7J20IOqzqOuqqeyXkCDrp5vsp5HsnbQg66eO7JWE7JqULiIsICJUaGlzIGFsbGV5IGhhcyBtYW55IGdyZWF0IGVhdGVyaWVzLiJdLAogIFsi66qo7YmB7J20IiwgIm1vLXR1bmctaSIsICJjb3JuZXIiLCAi66qo7YmB7J2066W8IOuPjOuptCA9IGFyb3VuZCB0aGUgY29ybmVyIiwgIvCfk5AiLCAi66qo7YmB7J2066W8IOuPjOuptCDrsJTroZwg7J6I7Ja07JqULiIsICJJdCBpcyByaWdodCBhcm91bmQgdGhlIGNvcm5lci4iXSwKICBbIuqxtOusvCIsICJnZW9uLW11bCIsICJidWlsZGluZyIsICLsoIAg6rG066y8ID0gdGhhdCBidWlsZGluZyAocG9pbnQgYXQgaXQhKSIsICLwn4+iIiwgIuyggCDtgbAg6rG066y8IOyYhuydtOyXkOyalC4iLCAiSXQgaXMgbmV4dCB0byB0aGF0IGJpZyBidWlsZGluZy4iXSwKICBbIu2OuOydmOygkCIsICJweWVvbi11aS1qZW9tIiwgImNvbnZlbmllbmNlIHN0b3JlIiwgIktvcmVhJ3MgbGFuZG1hcmsga2luZyDigJQgb25lIG9uIGV2ZXJ5IGJsb2NrIiwgIvCfj6oiLCAi7Y647J2Y7KCQ7JeQ7IScIOyYpOuluOyqveycvOuhnCDqsIDshLjsmpQuIiwgIlR1cm4gcmlnaHQgYXQgdGhlIGNvbnZlbmllbmNlIHN0b3JlLiJdLAogIFsi7J2A7ZaJIiwgImV1bi1oYWVuZyIsICJiYW5rIiwgIkEgY2xhc3NpYyBkaXJlY3Rpb24gbGFuZG1hcmsiLCAi8J+PpiIsICLsnYDtlokg7JWe7JeQ7IScIOunjOuCmOyalC4iLCAiTGV0IHVzIG1lZXQgaW4gZnJvbnQgb2YgdGhlIGJhbmsuIl0sCiAgWyLqs7Xsm5AiLCAiZ29uZy13b24iLCAicGFyayIsICLtlZzqsJUg6rO17JuQID0gSGFuIFJpdmVyIFBhcmssIFNlb3VsJ3MgZmF2b3JpdGUiLCAi8J+MsyIsICLqs7Xsm5DquYzsp4Ag6rG47Ja06rCA7JqULiIsICJMZXQgdXMgd2FsayB0byB0aGUgcGFyay4iXSwKICBbIuuLpOumrCIsICJkYS1yaSIsICJicmlkZ2UiLCAiQWxzbyBtZWFucyAnbGVnJyDigJQgY29udGV4dCB0ZWxscyB5b3Ugd2hpY2ghIiwgIvCfjIkiLCAi64uk66as66W8IOqxtOuEiOuptCDsi5zsnqXsnbQg7J6I7Ja07JqULiIsICJDcm9zcyB0aGUgYnJpZGdlIGFuZCB0aGVyZSBpcyBhIG1hcmtldC4iXSwKICBbIuuPjOuLpCIsICJkb2wtZGEiLCAidG8gdHVybiIsICLsmbzsqr3snLzroZwg64+E7IS47JqUID0gdHVybiBsZWZ0IiwgIuKGqe+4jyIsICLsoIDquLDsl5DshJwg7Jm87Kq97Jy866GcIOuPhOyEuOyalC4iLCAiVHVybiBsZWZ0IG92ZXIgdGhlcmUuIl0sCiAgWyLsp4Drj4QiLCAiamktZG8iLCAibWFwIiwgIuyngOuPhOuhnCDrs7Tsl6wg7KO87IS47JqUID0gc2hvdyBtZSBvbiB0aGUgbWFwIiwgIvCfl7rvuI8iLCAi7KeA64+E66W8IOuztOyXrCDso7zsi5zqsqDslrTsmpQ/IiwgIkNvdWxkIHlvdSBzaG93IG1lIG9uIHRoZSBtYXA/Il0sCiAgWyLquLjsnYQg7J6D64ukIiwgImdpbC1ldWwgaWwtdGEiLCAidG8gZ2V0IGxvc3QiLCAi6ri47J2EIOyeg+yXiOyWtOyalCBnZXRzIHlvdSBpbnN0YW50IGhlbHAiLCAi8J+YtSIsICLquLjsnYQg7J6D7JeI7Ja07JqULiDrj4TsmYDso7zshLjsmpQhIiwgIkkgZ290IGxvc3QuIFBsZWFzZSBoZWxwIG1lISJdXSwKIGdyYW1tYXI6WwogIFsiTuydtC/qsIAg7Ja065SU7JiI7JqUPyIsIndoZXJlIGlzIE4/IiwiVGhlIG9uZSBzZW50ZW5jZSB0aGF0IHVubG9ja3MgYW55IGNpdHkiLCJKdXN0IG5hbWUgKyDslrTrlJTsmIjsmpQuIFBvaW50IGF0IHlvdXIgcGhvbmUgbWFwIGZvciBib251cyBjbGFyaXR5LiIsIu2ZlOyepeyLpOydtCDslrTrlJTsmIjsmpQ/IiwiV2hlcmUgaXMgdGhlIHJlc3Ryb29tPyIsIuuyhOyKpCDsoJXrpZjsnqXsnbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSBidXMgc3RvcD8iXSwKICBbIn4o7Jy8KeuhnCDqsIDshLjsmpQiLCJnbyB0b3dhcmQgfiIsIlVuZGVyc3RhbmRpbmcgdGhlIGRpcmVjdGlvbnMgeW91IGdldCBiYWNrIiwiKOycvCnroZwgPSBkaXJlY3Rpb24gbWFya2VyLiDrj4TshLjsmpQgPSB0dXJuLiIsIuyZvOyqveycvOuhnCDqsIDshLjsmpQuIiwiR28gbGVmdC4iLCLsoIAg7Iug7Zi465Ox7JeQ7IScIOyYpOuluOyqveycvOuhnCDrj4TshLjsmpQuIiwiVHVybiByaWdodCBhdCB0aGF0IHRyYWZmaWMgbGlnaHQuIl0sCiAgWyJ+7JeQ7IScIOqwgOq5jOybjOyalC/rqYDslrTsmpQiLCJuZWFyIC8gZmFyIGZyb20gfiIsIkp1ZGdpbmcgZGlzdGFuY2UgYmVmb3JlIHlvdSBzdGFydCB3YWxraW5nIiwi7JeQ7IScID0gZnJvbS4gQWRkIOqxuOyWtOyEnCA9IG9uIGZvb3QuIiwi7Zi47YWU7JeQ7IScIOqwgOq5jOybjOyalC4iLCJJdCBpcyBjbG9zZSB0byB0aGUgaG90ZWwuIiwi7Jes6riw7IScIOupgOyWtOyalD8iLCJJcyBpdCBmYXIgZnJvbSBoZXJlPyJdXX0sCgp7bjo1LCBrcjoi64yA7KSR6rWQ7Ya1IiwgZW46IkJ1c2VzLCBUcmFpbnMgJiBUYXhpcyIsIHZpOiJNb3ZlIGxpa2UgYSBsb2NhbCIsIGVtb2ppOiLwn5qHIiwgYm9zczoi8J+XvyIsIGJvc3NOYW1lOiJSdXNoLUhvdXIgR29sZW0iLAogd29yZHM6WwogIFsi7KeA7ZWY7LKgIiwiamktaGEtY2hlb2wiLCJzdWJ3YXkiLCJTZW91bCdzIHN1YndheSBpcyB3b3JsZC1jbGFzcyDigJQgc2lnbnMgaGF2ZSBFbmdsaXNoIHRvbyIsIvCfmociLCLsp4DtlZjssqDsnbQg7KCc7J28IOu5qOudvOyalC4iLCJUaGUgc3Vid2F5IGlzIHRoZSBmYXN0ZXN0LiJdLAogIFsi67KE7IqkIiwiYmVvLXNldSIsImJ1cyIsIlRhcCB5b3VyIGNhcmQgd2hlbiBib2FyZGluZyBBTkQgbGVhdmluZyIsIvCfmowiLCLsnbQg67KE7Iqk6rCAIOyLnOyyreyXkCDqsIDsmpQ/IiwiRG9lcyB0aGlzIGJ1cyBnbyB0byBDaXR5IEhhbGw/Il0sCiAgWyLtg53si5wiLCJ0YWVrLXNpIiwidGF4aSIsIlNob3cgdGhlIGFkZHJlc3MgaW4gS29yZWFuIGZvciBzbW9vdGggcmlkZXMiLCLwn5qVIiwi7YOd7Iuc66W8IO2DgOqzoCDqsIjqsozsmpQuIiwiSSB3aWxsIHRha2UgYSB0YXhpLiJdLAogIFsi7JetIiwieWVvayIsInN0YXRpb24gKHRyYWluL3N1YndheSkiLCJBdHRhY2ggdG8gbmFtZXM6IOyEnOyauOyXrSwg6rCV64Ko7JetIiwi8J+aiSIsIuuLpOydjCDsl63snbQg7Ja065SU7JiI7JqUPyIsIldoYXQgaXMgdGhlIG5leHQgc3RhdGlvbj8iXSwKICBbIuygleulmOyepSIsImplb25nLW55dS1qYW5nIiwiYnVzIHN0b3AiLCLrsoTsiqQg7KCV66WY7J6lIOKAlCBkaWZmZXJlbnQgd29yZCBmcm9tIOyXrSEiLCLwn5qPIiwi7KCV66WY7J6l7J20IOyWtOuUlOyXkCDsnojslrTsmpQ/IiwiV2hlcmUgaXMgdGhlIGJ1cyBzdG9wPyJdLAogIFsi7YOA64ukIiwidGEtZGEiLCJ0byByaWRlIC8gdGFrZSIsIlVzZWQgZm9yIGV2ZXJ5IHZlaGljbGU6IOuyhOyKpOulvCDtg4DsmpQsIOyngO2VmOyyoOydhCDtg4DsmpQiLCLwn46rIiwi7Jes6riw7IScIDLtmLjshKDsnYQg7YOA7IS47JqULiIsIlRha2UgbGluZSAyIGZyb20gaGVyZS4iXSwKICBbIuuCtOumrOuLpCIsIm5hZS1yaS1kYSIsInRvIGdldCBvZmYiLCLsoIAg64K066Ck7JqUISA9IEkgYW0gZ2V0dGluZyBvZmYhIChidXMgc3Vydml2YWwgcGhyYXNlKSIsIuKsh++4jyIsIuuLpOydjCDsoJXrpZjsnqXsl5DshJwg64K066as7IS47JqULiIsIkdldCBvZmYgYXQgdGhlIG5leHQgc3RvcC4iXSwKICBbIuqwiOyVhO2DgOuLpCIsImdhbC1hLXRhLWRhIiwidG8gdHJhbnNmZXIiLCLqsIjslYTtg4DripQg6rOzID0gdHJhbnNmZXIgcG9pbnQgKGZvbGxvdyB0aGUgc2lnbnMpIiwi8J+UgCIsIuyLnOyyreyXreyXkOyEnCDqsIjslYTtg4DshLjsmpQuIiwiVHJhbnNmZXIgYXQgQ2l0eSBIYWxsIFN0YXRpb24uIl0sCiAgWyLqtZDthrXsubTrk5wiLCJneW8tdG9uZy1rYS1kZXUiLCJ0cmFuc2l0IGNhcmQiLCJULW1vbmV5IGNhcmQg4oCUIGJ1eSBvbmUgYXQgYW55IGNvbnZlbmllbmNlIHN0b3JlIiwi8J+SsyIsIuq1kO2Gtey5tOuTnOulvCDstqnsoITtlbQg7KO87IS47JqULiIsIlBsZWFzZSByZWNoYXJnZSBteSB0cmFuc2l0IGNhcmQuIl0sCiAgWyLrqocg7Zi47ISgIiwibXllb3QgaG8tc2VvbiIsIndoaWNoIGxpbmUiLCJTdWJ3YXkgbGluZXMgYXJlIG51bWJlcnMgKyBjb2xvcnMiLCLwn5SiIiwi66qHIO2YuOyEoOydhCDtg4Dslbwg7ZW07JqUPyIsIldoaWNoIGxpbmUgc2hvdWxkIEkgdGFrZT8iXSwKICBbIuyWvOuniOuCmCDqsbjroKTsmpQiLCJlb2wtbWEtbmEgZ2VvbC1seWVvLXlvIiwiaG93IGxvbmcgZG9lcyBpdCB0YWtlIiwiV29ya3MgZm9yIGFueSB0cmlwLCBhbnkgdHJhbnNwb3J0Iiwi4o+zIiwi6rO17ZWt6rmM7KeAIOyWvOuniOuCmCDqsbjroKTsmpQ/IiwiSG93IGxvbmcgZG9lcyBpdCB0YWtlIHRvIHRoZSBhaXJwb3J0PyJdLAogIFsi7IS47JuMIOyjvOyEuOyalCIsInNlLXdvIGp1LXNlLXlvIiwicGxlYXNlIHN0b3AgKHRoZSBjYXIpIiwiSW4gYSB0YXhpOiDsl6zquLDshJwg7IS47JuMIOyjvOyEuOyalCA9IHN0b3AgaGVyZSIsIvCfm5EiLCLsoIAg7Y647J2Y7KCQIOyVnuyXkOyEnCDshLjsm4wg7KO87IS47JqULiIsIlBsZWFzZSBzdG9wIGluIGZyb250IG9mIHRoYXQgY29udmVuaWVuY2Ugc3RvcmUuIl0sCiAgWyLquLDssKgiLCAiZ2ktY2hhIiwgInRyYWluIiwgIktUWCA9IEtvcmVhJ3MgYnVsbGV0IHRyYWluIiwgIvCfmoYiLCAi67aA7IKw6rmM7KeAIOq4sOywqOuhnCDqsIDsmpQuIiwgIkkgYW0gZ29pbmcgdG8gQnVzYW4gYnkgdHJhaW4uIl0sCiAgWyLruYTtlonquLAiLCAiYmktaGFlbmctZ2kiLCAiYWlycGxhbmUiLCAi67mE7ZaJ6riwIO2RnCA9IHBsYW5lIHRpY2tldCIsICLinIjvuI8iLCAi67mE7ZaJ6riw6rCAIOuNlCDruajrnbzsmpQuIiwgIlRoZSBwbGFuZSBpcyBmYXN0ZXIuIl0sCiAgWyLqs7Xtla0iLCAiZ29uZy1oYW5nIiwgImFpcnBvcnQiLCAi7J247LKc6rO17ZWtID0gS29yZWEncyBtYWluIGdhdGV3YXkiLCAi8J+bqyIsICLqs7Xtla3rsoTsiqTqsIAg7Ja065SU7JeQIOyeiOyWtOyalD8iLCAiV2hlcmUgaXMgdGhlIGFpcnBvcnQgYnVzPyJdLAogIFsi7J6Q7KCE6rGwIiwgImphLWplb24tZ2VvIiwgImJpY3ljbGUiLCAiUmVudGFibGUgYnkgYXBwIGFsb25nIHRoZSBIYW4gUml2ZXIiLCAi8J+asiIsICLsnpDsoITqsbDrpbwg7YOA6rOgIOqzteybkOyXkCDqsIDsmpQuIiwgIkkgcmlkZSBhIGJpa2UgdG8gdGhlIHBhcmsuIl0sCiAgWyLrhbjshKDrj4QiLCAibm8tc2Vvbi1kbyIsICJyb3V0ZSBtYXAiLCAiVGhlIGNvbG9yZnVsIHN1YndheSBtYXAg4oCUIHlvdXIgYmVzdCBmcmllbmQiLCAi8J+Xuu+4jyIsICLrhbjshKDrj4Trpbwg67O06rOgIOyeiOyWtOyalC4iLCAiSSBhbSBsb29raW5nIGF0IHRoZSByb3V0ZSBtYXAuIl0sCiAgWyLstpzrsJwiLCAiY2h1bC1iYWwiLCAiZGVwYXJ0dXJlIiwgIuy2nOuwnO2WiOyWtOyalD8gPSBoYXZlIHlvdSBsZWZ0IHlldD8iLCAi4pa277iPIiwgIuuqhyDsi5zsl5Ag7Lac67Cc7ZW07JqUPyIsICJXaGF0IHRpbWUgZG8gd2UgZGVwYXJ0PyJdLAogIFsi64+E7LCpIiwgImRvLWNoYWsiLCAiYXJyaXZhbCIsICLqs6cg64+E7LCp7ZW07JqUID0gYXJyaXZpbmcgc29vbiIsICLwn5ONIiwgIuuPhOywqe2VmOuptCDsoITtmZTtlbQg7KO87IS47JqULiIsICJDYWxsIG1lIHdoZW4geW91IGFycml2ZS4iXSwKICBbIuunieywqCIsICJtYWstY2hhIiwgImxhc3QgdHJhaW4gLyBidXMiLCAiTWlzcyBpdCBhbmQgaXQgaXMgdGF4aSB0aW1lIiwgIvCfjJkiLCAi66eJ7LCo6rCAIOuqhyDsi5zsmIjsmpQ/IiwgIldoYXQgdGltZSBpcyB0aGUgbGFzdCB0cmFpbj8iXSwKICBbIu2ZmOyKuSIsICJod2FuLXNldW5nIiwgInRyYW5zZmVyIChub3VuKSIsICJUaGUgd29yZCBvbiBhbGwgdGhlIG9yYW5nZSBzdWJ3YXkgc2lnbnMiLCAi8J+UgCIsICLsl6zquLDshJwg7ZmY7Iq57ZWY7IS47JqULiIsICJUcmFuc2ZlciBoZXJlLiJdLAogIFsi7JqU6riIIiwgInlvLWdldW0iLCAiZmFyZSIsICLtg53si5wg7JqU6riILCDrsoTsiqQg7JqU6riIIOKAlCBhbnkgdHJhbnNwb3J0IGNvc3QiLCAi8J+SsCIsICLsmpTquIjsnbQg7Ja866eI7JiI7JqUPyIsICJIb3cgbXVjaCBpcyB0aGUgZmFyZT8iXSwKICBbIuu5oOultOuLpCIsICJwcGEtcmV1LWRhIiwgImZhc3QiLCAi7KeA7ZWY7LKg7J20IOygnOydvCDruajrnbzsmpQg4oCUIHVzdWFsbHkgdHJ1ZSEiLCAi4pqhIiwgIuyngO2VmOyyoOydtCDsoJzsnbwg67mo65287JqULiIsICJUaGUgc3Vid2F5IGlzIHRoZSBmYXN0ZXN0LiJdLAogIFsi64qQ66as64ukIiwgIm5ldS1yaS1kYSIsICJzbG93IiwgIuuyhOyKpOuKlCDsooAg64qQ66Ck7JqUIGluIHJ1c2ggaG91ciIsICLwn5CiIiwgIuuyhOyKpOuKlCDsobDquIgg64qQ66Ck7JqULiIsICJUaGUgYnVzIGlzIGEgbGl0dGxlIHNsb3cuIl1dLAogZ3JhbW1hcjpbCiAgWyJO7J2EL+ulvCDtg4DshLjsmpQiLCJ0YWtlIHRoZSBOIiwiR2V0dGluZyB0b2xkIHdoaWNoIGJ1cy90cmFpbiB0byBjYXRjaCIsIu2DgOuLpCA9IHJpZGUuIOydhCBhZnRlciBjb25zb25hbnQsIOulvCBhZnRlciB2b3dlbC4iLCIyNzPrsogg67KE7Iqk66W8IO2DgOyEuOyalC4iLCJUYWtlIGJ1cyBudW1iZXIgMjczLiIsIjLtmLjshKDsnYQg7YOA7IS47JqULiIsIlRha2UgbGluZSAyLiJdLAogIFsifuyXkOyEnCDrgrTrpqzshLjsmpQgLyDqsIjslYTtg4DshLjsmpQiLCJnZXQgb2ZmIC8gdHJhbnNmZXIgYXQgfiIsIlRoZSB0d28gdmVyYnMgdGhhdCBjb21wbGV0ZSBhbnkgcm91dGUiLCLsl5DshJwgbWFya3MgdGhlIHN0YXRpb24gd2hlcmUgdGhlIGFjdGlvbiBoYXBwZW5zLiIsIuqwleuCqOyXreyXkOyEnCDrgrTrpqzshLjsmpQuIiwiR2V0IG9mZiBhdCBHYW5nbmFtIFN0YXRpb24uIiwi7Iuc7LKt7Jet7JeQ7IScIDPtmLjshKDsnLzroZwg6rCI7JWE7YOA7IS47JqULiIsIlRyYW5zZmVyIHRvIGxpbmUgMyBhdCBDaXR5IEhhbGwuIl0sCiAgWyJO6rmM7KeAIOyWvOuniOuCmCDqsbjroKTsmpQ/IiwiaG93IGxvbmcgdG8gTj8iLCJQbGFubmluZyB5b3VyIHRpbWUgbGlrZSBhIGxvY2FsIiwi6rmM7KeAID0gdXAgdG8vdW50aWwuIEFuc3dlciBjb21lcyBhcyB+67aEL+yLnOqwhCDqsbjroKTsmpQuIiwi6rO17ZWt6rmM7KeAIOyWvOuniOuCmCDqsbjroKTsmpQ/IiwiSG93IGxvbmcgZG9lcyBpdCB0YWtlIHRvIHRoZSBhaXJwb3J0PyIsIuqxuOyWtOyEnCAxMOu2hCDqsbjroKTsmpQuIiwiSXQgdGFrZXMgMTAgbWludXRlcyBvbiBmb290LiJdXX0sCgp7bjo2LCBrcjoi7Ie87ZWRIiwgZW46IlNob3BwaW5nICYgUHJpY2VzIiwgdmk6IlNob3Agc21hcnQiLCBlbW9qaToi8J+bje+4jyIsIGJvc3M6IvCfpooiLCBib3NzTmFtZToiT3ZlcnByaWNlIEZveCIsCiB3b3JkczpbCiAgWyLslrzrp4giLCJlb2wtbWEiLCJob3cgbXVjaCIsIuydtOqxsCDslrzrp4jsmIjsmpQ/IOKAlCB5b3VyIG1vc3QtdXNlZCBzaG9wcGluZyBzZW50ZW5jZSIsIvCfkrAiLCLsnbTqsbAg7Ja866eI7JiI7JqUPyIsIkhvdyBtdWNoIGlzIHRoaXM/Il0sCiAgWyLruYTsi7jri6QiLCJiaS1zc2EtZGEiLCJleHBlbnNpdmUiLCLrhIjrrLQg67mE7Iu47JqUID0gdG9vIGV4cGVuc2l2ZSAoYSBoYWdnbGluZyBvcGVuZXIpIiwi8J+SuCIsIuyigCDruYTsi7jrhKTsmpQuIiwiVGhhdCBpcyBhIGJpdCBleHBlbnNpdmUuIl0sCiAgWyLsi7jri6QiLCJzc2EtZGEiLCJjaGVhcCIsIuyLuOqzoCDsoovslYTsmpQgPSBjaGVhcCBhbmQgZ29vZCDigJQgdGhlIGRyZWFtIiwi8J+Pt++4jyIsIuydtOqyjCDrjZQg7Iu47JqULiIsIlRoaXMgb25lIGlzIGNoZWFwZXIuIl0sCiAgWyLquY7slYQg7KO87IS47JqUIiwia2tha2stYSBqdS1zZS15byIsInBsZWFzZSBnaXZlIGEgZGlzY291bnQiLCJXb3JrcyBhdCBtYXJrZXRzOyBub3QgYXQgZGVwYXJ0bWVudCBzdG9yZXMiLCLinILvuI8iLCLsobDquIjrp4wg6rmO7JWEIOyjvOyEuOyalC4iLCJKdXN0IGEgc21hbGwgZGlzY291bnQsIHBsZWFzZS4iXSwKICBbIuyeheyWtCDrs7Tri6QiLCJpYi1lbyBiby1kYSIsInRvIHRyeSBvbiIsIuyeheyWtCDrtJDrj4Qg64+87JqUPyA9IG1heSBJIHRyeSBpdCBvbj8iLCLwn5GVIiwi7J206rGwIOyeheyWtCDrtJDrj4Qg64+87JqUPyIsIk1heSBJIHRyeSB0aGlzIG9uPyJdLAogIFsi7IKs7J207KaIIiwic2EtaS1qZXUiLCJzaXplIiwi642UIO2BsC/snpHsnYAg7IKs7J207KaIID0gYmlnZ2VyL3NtYWxsZXIgc2l6ZSIsIvCfk48iLCLrjZQg7YGwIOyCrOydtOymiCDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgYSBiaWdnZXIgc2l6ZT8iXSwKICBbIuyDieq5lCIsInNhZWsta2thbCIsImNvbG9yIiwi64uk66W4IOyDieq5lCA9IG90aGVyIGNvbG9ycyIsIvCfjqgiLCLri6Trpbgg7IOJ6rmU64+EIOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSBvdGhlciBjb2xvcnM/Il0sCiAgWyLsnbTqsbAiLCJpLWdlbyIsInRoaXMgb25lIiwi7J206rGwL+q3uOqxsC/soIDqsbAgPSB0aGlzL3RoYXQvdGhhdCBvdmVyIHRoZXJlIiwi8J+RiSIsIuydtOqxsCDso7zshLjsmpQuIiwiSSB3aWxsIHRha2UgdGhpcyBvbmUuIl0sCiAgWyLtlZjrgpgg642UIiwiaGEtbmEgZGVvIiwib25lIG1vcmUiLCJCdXkgdHdvLCBoYWdnbGUgaGFyZGVyIiwi4p6VIiwi7ZWY64KYIOuNlCDso7zshLjsmpQuIiwiT25lIG1vcmUsIHBsZWFzZS4iXSwKICBbIuu0ie2IrCIsImJvbmctdHUiLCJiYWciLCJQbGFzdGljIGJhZ3MgdXN1YWxseSBjb3N0IGV4dHJhIOKAlCBicmluZyB5b3VyIG93biIsIvCfm43vuI8iLCLrtIntiKwg7ZWE7JqUIOyXhuyWtOyalC4iLCJJIGRvIG5vdCBuZWVkIGEgYmFnLiJdLAogIFsi7ZmY67aIIiwiaHdhbi1idWwiLCJyZWZ1bmQiLCLtmZjrtogg64+87JqUPyA9IGNhbiBJIGdldCBhIHJlZnVuZD8gS2VlcCB0aGUgcmVjZWlwdCIsIvCfkrEiLCLsnbTqsbAg7ZmY67aIIOuPvOyalD8iLCJDYW4gSSBnZXQgYSByZWZ1bmQgb24gdGhpcz8iXSwKICBbIuyEoOusvCIsInNlb24tbXVsIiwiZ2lmdCIsIuyEoOusvCDtj6zsnqUgPSBnaWZ0IHdyYXBwaW5nIChvZnRlbiBmcmVlISkiLCLwn46BIiwi7ISg66y8IO2PrOyepSDrj7zsmpQ/IiwiQ2FuIHlvdSBnaWZ0LXdyYXAgaXQ/Il0sCiAgWyLqsIDqsowiLCAiZ2EtZ2UiLCAic2hvcCAvIHN0b3JlIiwgIlRoZSBldmVyeWRheSB3b3JkIGZvciBhbnkgc21hbGwgc3RvcmUiLCAi8J+PrCIsICLsnbQg6rCA6rKMIOygleunkCDsoovslYTsmpQuIiwgIlRoaXMgc2hvcCBpcyByZWFsbHkgbmljZS4iXSwKICBbIuyLnOyepSIsICJzaS1qYW5nIiwgIm1hcmtldCIsICJUcmFkaXRpb25hbCBtYXJrZXRzID0gYmVzdCBwcmljZXMgKyBiZXN0IHN0cmVldCBmb29kIiwgIvCfj64iLCAi7Iuc7J6l7JeQ7IScIOqzvOydvOydhCDsgqzsmpQuIiwgIkkgYnV5IGZydWl0IGF0IHRoZSBtYXJrZXQuIl0sCiAgWyLrsLHtmZTsoJAiLCAiYmFlay1od2EtamVvbSIsICJkZXBhcnRtZW50IHN0b3JlIiwgIkZhbmN5LCBmaXhlZCBwcmljZXMg4oCUIG5vIGhhZ2dsaW5nIGhlcmUhIiwgIvCfj6IiLCAi67Cx7ZmU7KCQ7J2AIOyigCDruYTsi7jsmpQuIiwgIkRlcGFydG1lbnQgc3RvcmVzIGFyZSBhIGJpdCBleHBlbnNpdmUuIl0sCiAgWyLsmLciLCAib3QiLCAiY2xvdGhlcyIsICLsmLcg6rCA6rKMID0gY2xvdGhpbmcgc3RvcmUiLCAi8J+RlSIsICLsmLfsnYQg7IKs65+sIOyZlOyWtOyalC4iLCAiSSBjYW1lIHRvIGJ1eSBjbG90aGVzLiJdLAogIFsi7Iug67CcIiwgInNpbi1iYWwiLCAic2hvZXMiLCAiVGFrZSB0aGVtIG9mZiBpbmRvb3JzIOKAlCBhbHdheXMhIiwgIvCfkZ8iLCAi7J20IOyLoOuwnCDsmIjsgZjrhKTsmpQuIiwgIlRoZXNlIHNob2VzIGFyZSBwcmV0dHkuIl0sCiAgWyLqsIDrsKkiLCAiZ2EtYmFuZyIsICJiYWciLCAiSGFuZGJhZ3MsIGJhY2twYWNrcyDigJQgYWxsIOqwgOuwqSIsICLwn5GcIiwgIuydtCDqsIDrsKkg7Ja866eI7JiI7JqUPyIsICJIb3cgbXVjaCBpcyB0aGlzIGJhZz8iXSwKICBbIuuqqOyekCIsICJtby1qYSIsICJoYXQgLyBjYXAiLCAiU3VuIHByb3RlY3Rpb24gKyBzdHlsZSIsICLwn6eiIiwgIuuqqOyekOulvCDsjagg67O07IS47JqULiIsICJUcnkgb24gdGhlIGhhdC4iXSwKICBbIuuwlOyngCIsICJiYS1qaSIsICJwYW50cyIsICLssq3rsJTsp4AgPSBqZWFucyAobGl0ZXJhbGx5ICdibHVlIHBhbnRzJykiLCAi8J+RliIsICLrsJTsp4DqsIAg7KKAIOq4uOyWtOyalC4iLCAiVGhlIHBhbnRzIGFyZSBhIGJpdCBsb25nLiJdLAogIFsi7YGs64ukIiwgImtldS1kYSIsICJiaWciLCAi7Luk7JqUID0gaXQgaXMgYmlnIiwgIvCfkJgiLCAi7J20IOyYt+ydgCDrhIjrrLQg7Luk7JqULiIsICJUaGVzZSBjbG90aGVzIGFyZSB0b28gYmlnLiJdLAogIFsi7J6R64ukIiwgImphay1kYSIsICJzbWFsbCIsICLsnpHslYTsmpQgPSBpdCBpcyBzbWFsbCDigJQgdGhlIGZpdHRpbmctcm9vbSBwYWlyIiwgIvCfkK0iLCAi7Iug67Cc7J20IOyhsOq4iCDsnpHslYTsmpQuIiwgIlRoZSBzaG9lcyBhcmUgYSBsaXR0bGUgc21hbGwuIl0sCiAgWyLshLjsnbwiLCAic2UtaWwiLCAic2FsZSIsICLshLjsnbwg7KSRID0gb24gc2FsZSwgdGhlIG1hZ2ljIHdvcmRzIiwgIvCfj7fvuI8iLCAi7KeA6riIIOyEuOydvCDspJHsnbTsl5DsmpQuIiwgIkl0IGlzIG9uIHNhbGUgbm93LiJdLAogIFsi7JiB7IiY7KadIiwgInllb25nLXN1LWpldW5nIiwgInJlY2VpcHQiLCAiTmVlZGVkIGZvciByZWZ1bmRzIOKAlCBrZWVwIGl0ISIsICLwn6e+IiwgIuyYgeyImOymnSDso7zshLjsmpQuIiwgIlRoZSByZWNlaXB0LCBwbGVhc2UuIl1dLAogZ3JhbW1hcjpbCiAgWyJ+7JWEL+yWtCDrtJDrj4Qg64+87JqUPyIsIm1heSBJIHRyeSB+PyIsIlRyeWluZyBjbG90aGVzLCBzYW1wbGVzLCB0ZXN0ZXJzIiwi67O064ukIGFkZHMgJ3RyeSc7IOuPhCDrj7zsmpQgYXNrcyBwZXJtaXNzaW9uLiIsIuyeheyWtCDrtJDrj4Qg64+87JqUPyIsIk1heSBJIHRyeSBpdCBvbj8iLCLrqLnslrQg67SQ64+EIOuPvOyalD8iLCJNYXkgSSB0YXN0ZSBpdD8iXSwKICBbIuuEiOustCB+7ZW07JqUIiwidG9vIH4gLyBzbyB+IiwiUmVhY3RpbmcgdG8gcHJpY2VzIGFuZCBxdWFsaXR5Iiwi64SI66y0IGFtcGxpZmllcyBhbnl0aGluZzog64SI66y0IOyYiOu7kOyalCwg64SI66y0IOu5hOyLuOyalC4iLCLrhIjrrLQg67mE7Iu47JqUISIsIkl0IGlzIHRvbyBleHBlbnNpdmUhIiwi7J206rGwIOuEiOustCDsmIjru5DsmpQuIiwiVGhpcyBpcyBzbyBwcmV0dHkuIl0sCiAgWyJOIOuPvOyalD8iLCJkb2VzIE4gd29yayAvIGlzIE4gcG9zc2libGU/IiwiUXVpY2sgeWVzL25vIGNoZWNrczogcmVmdW5kPyBjYXJkPyBkZWxpdmVyeT8iLCJUaGUgc2hvcnRlc3QgdXNlZnVsIHF1ZXN0aW9uIGluIHNob3BwaW5nLiIsIuy5tOuTnCDrj7zsmpQ/IiwiRG8geW91IHRha2UgY2FyZHM/Iiwi6rWQ7ZmYIOuPvOyalD8iLCJDYW4gSSBleGNoYW5nZSBpdD8iXV19LAoKe246Nywga3I6IuyKpOuqsO2GoO2BrCIsIGVuOiJTbWFsbCBUYWxrIiwgdmk6Ik1ha2UgYSBuZXcgZnJpZW5kIiwgZW1vamk6IvCfkqwiLCBib3NzOiLwn6aBIiwgYm9zc05hbWU6IlNtYWxsLVRhbGsgU3BoaW54IiwKIHdvcmRzOlsKICBbIuy3qOuvuCIsImNod2ktbWkiLCJob2JieSIsIuy3qOuvuOqwgCDrrZDsmIjsmpQ/IOKAlCB0aGUgZnJpZW5kbGllc3QgaWNlYnJlYWtlciIsIvCfjqgiLCLst6jrr7jqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgeW91ciBob2JieT8iXSwKICBbIuuCoOyUqCIsIm5hbC1zc2kiLCJ3ZWF0aGVyIiwiVGhlIHVuaXZlcnNhbCBzbWFsbC10YWxrIHN0YXJ0ZXIsIGluIEtvcmVhIHRvbyIsIuKYgO+4jyIsIuyYpOuKmCDrgqDslKgg7KeE7KecIOyii+uEpOyalCEiLCJUaGUgd2VhdGhlciBpcyByZWFsbHkgbmljZSB0b2RheSEiXSwKICBbIuyjvOunkCIsImp1LW1hbCIsIndlZWtlbmQiLCLso7zrp5Dsl5Ag662QIO2VtOyalD8gPSBpbnN0YW50IGNvbnZlcnNhdGlvbiIsIvCfk4YiLCLso7zrp5Dsl5Ag67O07Ya1IOutkCDtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgdXN1YWxseSBkbyBvbiB3ZWVrZW5kcz8iXSwKICBbIuyii+yVhO2VmOuLpCIsImpvLWEtaGEtZGEiLCJ0byBsaWtlIiwiTuydhC/rpbwg7KKL7JWE7ZW07JqUIOKAlCBzaGFyZSB3aGF0IHlvdSBsb3ZlIiwi4p2k77iPIiwi7KCA64qUIO2VnOq1rSDsnYzsi53snYQg7KKL7JWE7ZW07JqULiIsIkkgbGlrZSBLb3JlYW4gZm9vZC4iXSwKICBbIuyatOuPmSIsInVuLWRvbmciLCJleGVyY2lzZSAvIHNwb3J0cyIsIkFsc28gbWVhbnMgd29ya2luZyBvdXQgYXQgdGhlIGd5bSIsIvCfj4MiLCLsmrTrj5nsnYQg7J6Q7KO8IO2VtOyalD8iLCJEbyB5b3UgZXhlcmNpc2Ugb2Z0ZW4/Il0sCiAgWyLsnYzslYUiLCJldW0tYWsiLCJtdXNpYyIsIuustOyKqCDsnYzslYUgPSB3aGF0IGtpbmQgb2YgbXVzaWMiLCLwn461Iiwi66y07IqoIOydjOyVheydhCDrk6TslrTsmpQ/IiwiV2hhdCBtdXNpYyBkbyB5b3UgbGlzdGVuIHRvPyJdLAogIFsi7Jes7ZaJIiwieWVvLWhhZW5nIiwidHJhdmVsIiwiRXZlcnlvbmUgaGFzIGEgdHJhdmVsIHN0b3J5IOKAlCBhc2sgZm9yIGl0Iiwi4pyI77iPIiwi7Jes7ZaJ7J2EIOygleunkCDsoovslYTtlbTsmpQuIiwiSSByZWFsbHkgbG92ZSB0cmF2ZWxpbmcuIl0sCiAgWyLsmpTsppgiLCJ5by1qZXVtIiwidGhlc2UgZGF5cyIsIuyalOymmCDslrTrlYzsmpQ/ID0gaG93IGFyZSB0aGluZ3MgbGF0ZWx5PyIsIvCflZAiLCLsmpTsppgg7Ja065a76rKMIOyngOuCtOyalD8iLCJIb3cgaGF2ZSB5b3UgYmVlbiB0aGVzZSBkYXlzPyJdLAogIFsi7J6s66+47J6I64ukIiwiamFlLW1pLWl0LWRhIiwiZnVuIC8gaW50ZXJlc3RpbmciLCLsnqzrr7jsnojslrTsmpQhID0gaXQncyBmdW4hIOyerOuvuOyXhuyWtOyalCA9IGJvcmluZyIsIvCfmIQiLCLqt7jqsbAg7KeE7KecIOyerOuvuOyeiOyWtOyalCEiLCJUaGF0IGlzIHJlYWxseSBmdW4hIl0sCiAgWyLqsJnsnbQiLCJnYS1jaGkiLCJ0b2dldGhlciIsIuqwmeydtCDqsIDsmpQhID0gbGV0J3MgZ28gdG9nZXRoZXIgKHByb25vdW5jZWQg6rCA7LmYKSIsIvCfpJ0iLCLri6TsnYzsl5Ag6rCZ7J20IOqwgOyalCEiLCJMZXQgdXMgZ28gdG9nZXRoZXIgbmV4dCB0aW1lISJdLAogIFsi7KeE7KecIiwiamluLWpqYSIsInJlYWxseSIsIuynhOynnOyalD8gPSByZWFsbHk/ISDigJQgeW91ciAjMSBsaXN0ZW5pbmcgcmVhY3Rpb24iLCLwn5iyIiwi7KeE7Kec7JqUPyDrjIDri6jtlbTsmpQhIiwiUmVhbGx5PyBUaGF0IGlzIGFtYXppbmchIl0sCiAgWyLrjIDrsJUiLCJkYWUtYmFrIiwiYXdlc29tZSAvIG5vIHdheSIsIkNhc3VhbCBzbGFuZyBmb3IgYW55dGhpbmcgaW1wcmVzc2l2ZSIsIvCfpKkiLCLrjIDrsJUhIOy2le2VmO2VtOyalCEiLCJObyB3YXkhIENvbmdyYXR1bGF0aW9ucyEiXSwKICBbIuyYge2ZlCIsICJ5ZW9uZy1od2EiLCAibW92aWUiLCAi7JiB7ZmUIOuzvOuemOyalD8gPSB0aGUgY2xhc3NpYyBoYW5nb3V0IGludml0ZSIsICLwn46sIiwgIuyjvOunkOyXkCDsmIHtmZQg67Sk7Ja07JqULiIsICJJIHdhdGNoZWQgYSBtb3ZpZSBvbiB0aGUgd2Vla2VuZC4iXSwKICBbIuuTnOudvOuniCIsICJkZXUtcmEtbWEiLCAiZHJhbWEgLyBUViBzZXJpZXMiLCAiSy1kcmFtYSB0YWxrID0gaW5zdGFudCBmcmllbmRzaGlwIiwgIvCfk7oiLCAi7JqU7KaYIOustOyKqCDrk5zrnbzrp4gg67SQ7JqUPyIsICJXaGF0IGRyYW1hIGFyZSB5b3Ugd2F0Y2hpbmcgbGF0ZWx5PyJdLAogIFsi64W4656YIiwgIm5vLXJhZSIsICJzb25nIiwgIuuFuOuemOuwqSA9IGthcmFva2Ugcm9vbSwgS29yZWEncyBwbGF5Z3JvdW5kIiwgIvCfjqQiLCAi7J20IOuFuOuemCDsp4Tsp5wg7KKL7JWE7JqULiIsICJUaGlzIHNvbmcgaXMgcmVhbGx5IGdvb2QuIl0sCiAgWyLstpXqtawiLCAiY2h1ay1ndSIsICJzb2NjZXIiLCAiVGhlIHNhZmVzdCBzcG9ydHMgc21hbGwtdGFsayBpbiBLb3JlYSIsICLimr0iLCAi7LaV6rWsIOuztOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqULiIsICJJIGxpa2Ugd2F0Y2hpbmcgc29jY2VyLiJdLAogIFsi65Ox7IKwIiwgImRldW5nLXNhbiIsICJoaWtpbmciLCAiS29yZWEncyBuYXRpb25hbCB3ZWVrZW5kIGhvYmJ5IiwgIuKbsO+4jyIsICLso7zrp5Drp4jri6Qg65Ox7IKw7J2EIOqwgOyalC4iLCAiSSBnbyBoaWtpbmcgZXZlcnkgd2Vla2VuZC4iXSwKICBbIuuPheyEnCIsICJkb2stc2VvIiwgInJlYWRpbmciLCAi7LGFIOydveq4sCB3b3JrcyB0b28g4oCUIOuPheyEnCBzb3VuZHMgY2xhc3NpZXIiLCAi8J+TmiIsICLsoJwg7Leo66+464qUIOuPheyEnOyYiOyalC4iLCAiTXkgaG9iYnkgaXMgcmVhZGluZy4iXSwKICBbIuyalOumrCIsICJ5by1yaSIsICJjb29raW5nIiwgIuyalOumrO2VmOuLpCA9IHRvIGNvb2siLCAi8J+NsyIsICLsmpTrpqzrpbwg67Cw7Jqw6rOgIOyeiOyWtOyalC4iLCAiSSBhbSBsZWFybmluZyB0byBjb29rLiJdLAogIFsi6rKM7J6EIiwgImdlLWltIiwgImdhbWUiLCAiUEPrsKkgPSBLb3JlYSdzIGdhbWluZyBjYWbDqSBjdWx0dXJlIiwgIvCfjq4iLCAi6rKM7J6E7J2EIOyekOyjvCDtlbTsmpQ/IiwgIkRvIHlvdSBnYW1lIG9mdGVuPyJdLAogIFsi6re466a8IiwgImdldS1yaW0iLCAiZHJhd2luZyAvIHBhaW50aW5nIiwgIuq3uOumvOydhCDqt7jrpqzri6QgPSB0byBkcmF3IiwgIvCfjqgiLCAi6re466a8IOq3uOumrOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqULiIsICJJIGxpa2UgZHJhd2luZy4iXSwKICBbIuyekOyjvCIsICJqYS1qdSIsICJvZnRlbiIsICLslrzrp4jrgpgg7J6Q7KO84oCmPyA9IGhvdyBvZnRlbuKApj8iLCAi8J+UgSIsICLslrzrp4jrgpgg7J6Q7KO8IOyatOuPme2VtOyalD8iLCAiSG93IG9mdGVuIGRvIHlvdSBleGVyY2lzZT8iXSwKICBbIuqwgOuBlCIsICJnYS1ra2V1bSIsICJzb21ldGltZXMiLCAiVGhlIGhvbmVzdCBhbnN3ZXIgdG8gbW9zdCDsnpDso7wgcXVlc3Rpb25zIiwgIvCfjJciLCAi6rCA64GUIOuTseyCsOydhCDqsIDsmpQuIiwgIkkgc29tZXRpbWVzIGdvIGhpa2luZy4iXSwKICBbIuyCsOyxhSIsICJzYW4tY2hhZWsiLCAiYSB3YWxrIC8gc3Ryb2xsIiwgIu2VnOqwlSDsgrDssYUgPSB0aGUgY2xhc3NpYyBTZW91bCBldmVuaW5nIiwgIvCfmrYiLCAi7KCA64WB7JeQIOyCsOyxheydhCDtlbTsmpQuIiwgIkkgdGFrZSBhIHdhbGsgaW4gdGhlIGV2ZW5pbmcuIl1dLAogZ3JhbW1hcjpbCiAgWyJ+64qUIOqyg+ydhCDsoovslYTtlbTsmpQiLCJJIGxpa2UgfmluZyIsIlRhbGtpbmcgYWJvdXQgaG9iYmllcyBuYXR1cmFsbHkiLCJWZXJiICsg64qUIOqygyB0dXJucyBhbiBhY3Rpb24gaW50byBhIHRoaW5nIHlvdSBjYW4gbGlrZS4iLCLsoIDripQg7JqU66as7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQuIiwiSSBsaWtlIGNvb2tpbmcuIiwi7JiB7ZmUIOuztOuKlCDqsoPsnYQg7KKL7JWE7ZW07JqUPyIsIkRvIHlvdSBsaWtlIHdhdGNoaW5nIG1vdmllcz8iXSwKICBbIuqwmeydtCB+KOycvCnjhLnrnpjsmpQ/Iiwic2hhbGwgd2UgfiB0b2dldGhlcj8iLCJUdXJuaW5nIHNtYWxsIHRhbGsgaW50byBhY3R1YWwgcGxhbnMiLCJGcmllbmRseSBpbnZpdGF0aW9uOyDrnpjsmpQga2VlcHMgaXQgY2FzdWFsIGFuZCBsaWdodC4iLCLqsJnsnbQg7Luk7ZS8IOuniOyLpOuemOyalD8iLCJTaGFsbCB3ZSBnZXQgY29mZmVlIHRvZ2V0aGVyPyIsIuyjvOunkOyXkCDqsJnsnbQg65Ox7IKwIOqwiOuemOyalD8iLCJXYW50IHRvIGdvIGhpa2luZyB0b2dldGhlciB0aGlzIHdlZWtlbmQ/Il0sCiAgWyJO7J2AL+uKlCDslrTrlYzsmpQ/IiwiaG93IGFib3V0IE4/IiwiQm91bmNpbmcgdGhlIHF1ZXN0aW9uIGJhY2sg4oCUIGNvbnZlcnNhdGlvbnMgYXJlIHR3by13YXkiLCJBbHNvIGdyZWF0IGZvciBzdWdnZXN0aW9uczog6riI7JqU7J287J2AIOyWtOuVjOyalD8iLCLsoIDripQg7J6YIOyngOuCtOyalC4g66+87IiYIOyUqOuKlCDslrTrlYzsmpQ/IiwiSSBhbSBkb2luZyB3ZWxsLiBIb3cgYWJvdXQgeW91LCBNaW5zdT8iLCLsnbQg7Lm07Y6Y64qUIOyWtOuVjOyalD8iLCJIb3cgYWJvdXQgdGhpcyBjYWbDqT8iXV19LAoKe246OCwga3I6IuyghO2ZlOyZgCDslb3sho0iLCBlbjoiQ2FsbHMgJiBQbGFucyIsIHZpOiJOZXZlciBtaXNzIGEgbWVldHVwIiwgZW1vamk6IvCfk7EiLCBib3NzOiLwn5G5IiwgYm9zc05hbWU6Ik5vLVNob3cgR3JlbWxpbiIsCiB3b3JkczpbCiAgWyLsl6zrs7TshLjsmpQiLCJ5ZW8tYm8tc2UteW8iLCJoZWxsbyAob24gdGhlIHBob25lKSIsIk9ubHkgZm9yIGFuc3dlcmluZyB0aGUgcGhvbmUg4oCUIG5ldmVyIGluIHBlcnNvbiIsIuKYju+4jyIsIuyXrOuztOyEuOyalCwg64iE6rWs7IS47JqUPyIsIkhlbGxvLCB3aG8gaXMgdGhpcz8iXSwKICBbIuyghO2ZlO2VmOuLpCIsImplb24taHdhLWhhLWRhIiwidG8gY2FsbCIsIuydtOuUsOqwgCDsoITtmZTtlaDqsozsmpQgPSBJIHdpbGwgY2FsbCB5b3UgbGF0ZXIiLCLwn5OeIiwi64K07J28IOyghO2ZlO2VoOqyjOyalC4iLCJJIHdpbGwgY2FsbCB5b3UgdG9tb3Jyb3cuIl0sCiAgWyLrrLjsnpAiLCJtdW4tamEiLCJ0ZXh0IG1lc3NhZ2UiLCLrrLjsnpAg67O064K86rKM7JqUID0gSSB3aWxsIHRleHQgeW91Iiwi8J+TqSIsIuusuOyekOuhnCDrs7TrgrQg7KO87IS47JqULiIsIlBsZWFzZSBzZW5kIGl0IGJ5IHRleHQuIl0sCiAgWyLslb3sho0iLCJ5YWstc29rIiwicGxhbnMgLyBhcHBvaW50bWVudCIsIuyVveyGjSDsnojslrTsmpQgPSBJIGhhdmUgcGxhbnMgKHRoZSBwb2xpdGUgZXhjdXNlISkiLCLwn5OFIiwi7Jik64qYIOyggOuFgeyXkCDslb3sho3snbQg7J6I7Ja07JqULiIsIkkgaGF2ZSBwbGFucyB0aGlzIGV2ZW5pbmcuIl0sCiAgWyLsi5zqsIQg7J6I7Ja07JqUPyIsInNpLWdhbiBpc3MtZW8teW8iLCJkbyB5b3UgaGF2ZSB0aW1lPyIsIlRoZSBnZW50bGUgd2F5IHRvIHN0YXJ0IGFuIGludml0YXRpb24iLCLij7AiLCLrgrTsnbwg7Iuc6rCEIOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSB0aW1lIHRvbW9ycm93PyJdLAogIFsi64qm64ukIiwibmV1dC1kYSIsInRvIGJlIGxhdGUiLCLsobDquIgg64qm7Ja07JqUID0gcnVubmluZyBhIGxpdHRsZSBsYXRlIOKAlCBzZW5kIGl0IGVhcmx5ISIsIuKPsyIsIuuvuOyViO2VtOyalCwgMTDrtoQg64qm7Ja07JqULiIsIlNvcnJ5LCBJIGFtIDEwIG1pbnV0ZXMgbGF0ZS4iXSwKICBbIuuPhOywqe2VmOuLpCIsImRvLWNoYS1rYS1kYSIsInRvIGFycml2ZSIsIuqxsOydmCDrj4TssKntlojslrTsmpQgPSBhbG1vc3QgdGhlcmUgKHdlIGFsbCBzZW5kIHRoaXMpIiwi8J+TjSIsIuyngOq4iCDqsbDsnZgg64+E7LCp7ZaI7Ja07JqULiIsIkkgaGF2ZSBhbG1vc3QgYXJyaXZlZC4iXSwKICBbIuq4sOuLpOumrOuLpCIsImdpLWRhLXJpLWRhIiwidG8gd2FpdCIsIuyynOyynO2eiCDsmKTshLjsmpQsIOq4sOuLpOumtOqyjOyalCA9IHRha2UgeW91ciB0aW1lLCBJIHdpbGwgd2FpdCIsIvCfp40iLCLsubTtjpjsl5DshJwg6riw64uk66a06rKM7JqULiIsIkkgd2lsbCB3YWl0IGF0IHRoZSBjYWbDqS4iXSwKICBbIuuwlOq+uOuLpCIsImJhLWtrdS1kYSIsInRvIGNoYW5nZSIsIuyLnOqwhOydhCDrsJTqvrjri6QgPSBjaGFuZ2UgdGhlIHRpbWUiLCLwn5SEIiwi7JW97IaNIOyLnOqwhOydhCDrsJTqv4Ag7IiYIOyeiOyWtOyalD8iLCJDYW4gd2UgY2hhbmdlIHRoZSBtZWV0aW5nIHRpbWU/Il0sCiAgWyLst6jshoztlZjri6QiLCJjaHdpLXNvLWhhLWRhIiwidG8gY2FuY2VsIiwiQmV0dGVyIHRvIHJlc2NoZWR1bGUgdGhhbiBnaG9zdCEiLCLwn5qrIiwi66+47JWI7ZWY7KeA66eMIOy3qOyGjO2VtOyVvCDtlbTsmpQuIiwiU29ycnksIGJ1dCBJIGhhdmUgdG8gY2FuY2VsLiJdLAogIFsi6rSc7LCu7JWE7JqUIiwiZ3dhZW4tY2hhbi1hLXlvIiwiaXQgaXMgb2theSIsIkFsc286IG5vIHRoYW5rcywgSSdtIGZpbmUsIG5vIHByb2JsZW0g4oCUIHN1cGVyIHZlcnNhdGlsZSIsIvCfkYwiLCLqtJzssK7slYTsmpQsIOyynOyynO2eiCDsmKTshLjsmpQuIiwiSXQgaXMgZmluZSwgdGFrZSB5b3VyIHRpbWUuIl0sCiAgWyLsnbTrlLDqsIAiLCJpLXR0YS1nYSIsImxhdGVyICh0b2RheSkiLCLsnbTrlLDqsIAg67SQ7JqUID0gc2VlIHlvdSBpbiBhIGJpdCIsIvCflJwiLCLsnbTrlLDqsIAg7Jew65297ZWg6rKM7JqULiIsIkkgd2lsbCBjb250YWN0IHlvdSBsYXRlci4iXSwKICBbIuyLnOqwhCIsICJzaS1nYW4iLCAidGltZSIsICLsi5zqsIQg7J6I7Ja07JqUPyA9IHRoZSBpbnZpdGF0aW9uIG9wZW5lciIsICLij7AiLCAi64K07J28IOyLnOqwhCDsnojslrTsmpQ/IiwgIkRvIHlvdSBoYXZlIHRpbWUgdG9tb3Jyb3c/Il0sCiAgWyLsmKTsoIQiLCAiby1qZW9uIiwgIm1vcm5pbmcgKGEubS4pIiwgIuyYpOyghCAxMOyLnCA9IDEwIGEubS4iLCAi8J+MhSIsICLsmKTsoITsl5Ag7Iuc6rCEIOyeiOyWtOyalD8iLCAiQXJlIHlvdSBmcmVlIGluIHRoZSBtb3JuaW5nPyJdLAogIFsi7Jik7ZuEIiwgIm8taHUiLCAiYWZ0ZXJub29uIChwLm0uKSIsICLsmKTtm4QgM+yLnCA9IDMgcC5tLiIsICLwn4yHIiwgIuyYpO2bhCAz7Iuc7JeQIOunjOuCmOyalC4iLCAiTGV0IHVzIG1lZXQgYXQgMyBwLm0uIl0sCiAgWyLrtoQiLCAiYnVuIiwgIm1pbnV0ZSIsICIxMOu2hCDriqbslrTsmpQgPSAxMCBtaW51dGVzIGxhdGUiLCAi4o+x77iPIiwgIjXrtoTrp4wg6riw64uk66CkIOyjvOyEuOyalC4iLCAiUGxlYXNlIHdhaXQganVzdCBmaXZlIG1pbnV0ZXMuIl0sCiAgWyLrgrTsnbwiLCAibmFlLWlsIiwgInRvbW9ycm93IiwgIuuCtOydvCDrtJDsmpQgPSBzZWUgeW91IHRvbW9ycm93IiwgIvCfk4UiLCAi64K07J28IOutkCDtlbTsmpQ/IiwgIldoYXQgYXJlIHlvdSBkb2luZyB0b21vcnJvdz8iXSwKICBbIuuqqOugiCIsICJtby1yZSIsICJkYXkgYWZ0ZXIgdG9tb3Jyb3ciLCAiQSB3b3JkIEVuZ2xpc2ggd2lzaGVzIGl0IGhhZCIsICLwn5OGIiwgIuuqqOugiOuKlCDslrTrlYzsmpQ/IiwgIkhvdyBhYm91dCB0aGUgZGF5IGFmdGVyIHRvbW9ycm93PyJdLAogIFsi64uk7J2MIOyjvCIsICJkYS1ldW0ganUiLCAibmV4dCB3ZWVrIiwgIuuLpOydjCDso7zsl5Ag66eM64KY7JqUID0gc2VlIHlvdSBuZXh0IHdlZWsiLCAi8J+Xk++4jyIsICLri6TsnYwg7KO87JeQIOyLnOqwhCDsnojslrTsmpQ/IiwgIkRvIHlvdSBoYXZlIHRpbWUgbmV4dCB3ZWVrPyJdLAogIFsi7J287LCNIiwgImlsLWpqaWsiLCAiZWFybHkiLCAi7J287LCNIOqwiOqyjOyalCA9IEkgd2lsbCBjb21lIGVhcmx5IiwgIvCfjIQiLCAi7KGw6riIIOydvOywjSDrj4TssKntlojslrTsmpQuIiwgIkkgYXJyaXZlZCBhIGxpdHRsZSBlYXJseS4iXSwKICBbIuuvuOumrCIsICJtaS1yaSIsICJpbiBhZHZhbmNlIiwgIuuvuOumrCDsmIjslb3tlZjshLjsmpQgPSBib29rIGFoZWFkIiwgIvCfk50iLCAi66+466asIOyXsOudve2VtCDso7zshLjsmpQuIiwgIlBsZWFzZSBjb250YWN0IG1lIGluIGFkdmFuY2UuIl0sCiAgWyLsl7Drnb3tlZjri6QiLCAieWVvbC1sYS1rYS1kYSIsICJ0byBjb250YWN0IiwgIuyXsOudve2VoOqyjOyalCA9IEkgd2lsbCBiZSBpbiB0b3VjaCIsICLwn5OyIiwgIuuPhOywqe2VmOuptCDsl7Drnb3tlaDqsozsmpQuIiwgIkkgd2lsbCBjb250YWN0IHlvdSB3aGVuIEkgYXJyaXZlLiJdLAogIFsi67Cb64ukIiwgImJhdC1kYSIsICJ0byByZWNlaXZlIiwgIuyghO2ZlOulvCDrsJvri6QgPSB0byBhbnN3ZXIgdGhlIHBob25lIiwgIvCfk6UiLCAi66y47J6Q66W8IOuwm+yVmOyWtOyalD8iLCAiRGlkIHlvdSBnZXQgbXkgdGV4dD8iXSwKICBbIuuBiuuLpCIsICJra2V1bi10YSIsICJ0byBoYW5nIHVwIiwgIuydtOunjCDrgYrsnYTqsozsmpQgPSBwb2xpdGUgY2FsbCBjbG9zZXIiLCAi8J+TtCIsICLrqLzsoIAg64GK7J2E6rKM7JqUISIsICJJIHdpbGwgaGFuZyB1cCBmaXJzdCEiXV0sCiBncmFtbWFyOlsKICBbIn4o7Jy8KeOEueqyjOyalCIsIkkgd2lsbCAocHJvbWlzZSkiLCJDb25maXJtaW5nIHBsYW5zIGFuZCBwcm9taXNlcyIsIlNwZWFrZXIncyBmcmllbmRseSBjb21taXRtZW50OiDqsIjqsozsmpQsIOq4sOuLpOumtOqyjOyalCwg7KCE7ZmU7ZWg6rKM7JqULiIsIjbsi5zquYzsp4Ag6rCI6rKM7JqULiIsIkkgd2lsbCBiZSB0aGVyZSBieSA2LiIsIuuPhOywqe2VmOuptCDrrLjsnpDtlaDqsozsmpQuIiwiSSB3aWxsIHRleHQgeW91IHdoZW4gSSBhcnJpdmUuIl0sCiAgWyJ+6rOgIOyeiOyWtOyalCIsIkkgYW0gfmluZyByaWdodCBub3ciLCJMaXZlIHVwZGF0ZXMgd2hlbiBtZWV0aW5nIHVwIiwiUHJvZ3Jlc3NpdmU6IHdoYXQgaXMgaGFwcGVuaW5nIGF0IHRoaXMgbW9tZW50LiIsIuyngOq4iCDqsIDqs6Ag7J6I7Ja07JqUISIsIkkgYW0gb24gbXkgd2F5IG5vdyEiLCLsubTtjpjsl5DshJwg6riw64uk66as6rOgIOyeiOyWtOyalC4iLCJJIGFtIHdhaXRpbmcgYXQgdGhlIGNhZsOpLiJdLAogIFsifuq4sOuhnCDtlbTsmpQiLCJsZXQgdXMgZGVjaWRlIHRvIH4iLCJMb2NraW5nIGluIHRoZSBwbGFuIiwiRml4ZXMgdGhlIGRlY2lzaW9uOiB0aW1lLCBwbGFjZSwgYWN0aXZpdHkuIiwi7Yag7JqU7J287JeQIOunjOuCmOq4sOuhnCDtlbTsmpQuIiwiTGV0IHVzIG1lZXQgb24gU2F0dXJkYXkuIiwiN+yLnOyXkCDrs7TquLDroZwg7ZW07JqULiIsIkxldCB1cyBwbGFuIHRvIG1lZXQgYXQgNy4iXV19LAoKe246OSwga3I6IuqwkOygleqzvCDrpqzslaHshZgiLCBlbjoiUmVhY3Rpb25zICYgRmVlbGluZ3MiLCB2aToiU291bmQgaHVtYW4sIG5vdCB0ZXh0Ym9vayIsIGVtb2ppOiLwn46tIiwgYm9zczoi4piB77iPIiwgYm9zc05hbWU6Ikdsb29tIENsb3VkIiwKIHdvcmRzOlsKICBbIuq4sOu2hCIsImdpLWJ1biIsIm1vb2QgLyBmZWVsaW5nIiwi6riw67aE7J20IOyii+yVhOyalC/rgpjruaDsmpQgPSBnb29kL2JhZCBtb29kIiwi8J+ZgiIsIuyYpOuKmCDquLDrtoTsnbQg7KCV66eQIOyii+yVhOyalC4iLCJJIGFtIGluIGEgcmVhbGx5IGdvb2QgbW9vZCB0b2RheS4iXSwKICBbIu2Wieuzte2VmOuLpCIsImhhZW5nLWJvLWthLWRhIiwidG8gYmUgaGFwcHkiLCJUaGUgYmlnIHdvcmQg4oCUIGZvciByZWFsIGhhcHBpbmVzcyIsIvCfmIoiLCLsmpTsppgg7KCV66eQIO2Wieuzte2VtOyalC4iLCJJIGFtIHJlYWxseSBoYXBweSB0aGVzZSBkYXlzLiJdLAogIFsi7ZS86rOk7ZWY64ukIiwicGktZ29uLWhhLWRhIiwidG8gYmUgdGlyZWQiLCJLb3JlYSdzIG1vc3QtdXNlZCBmZWVsaW5nIHdvcmQsIGhvbmVzdGx5Iiwi8J+lsSIsIuyYpOuKmCDrhIjrrLQg7ZS86rOk7ZW07JqULiIsIkkgYW0gc28gdGlyZWQgdG9kYXkuIl0sCiAgWyLrsLDqs6DtlITri6QiLCJiYWUtZ28tcGV1LWRhIiwidG8gYmUgaHVuZ3J5Iiwi67Cw6rOg7YyM7JqUISDigJQgbGVhZHMgbmF0dXJhbGx5IHRvIOutkCDrqLnsnYTquYzsmpQ/Iiwi8J+NmiIsIuyVhCwg67Cw6rOg7YyM7JqULiDrsKUg66i57Jy865+sIOqwgOyalCEiLCJBaCwgSSBhbSBodW5ncnkuIExldCB1cyBnbyBlYXQhIl0sCiAgWyLsi6zsi6ztlZjri6QiLCJzaW0tc2ltLWhhLWRhIiwidG8gYmUgYm9yZWQiLCLsi6zsi6ztlbTsmpQg4oaSIHBlcmZlY3QgZXhjdXNlIHRvIGludml0ZSBzb21lb25lIG91dCIsIvCfmJAiLCLso7zrp5Dsl5Ag7Ius7Ius7ZaI7Ja07JqULiIsIkkgd2FzIGJvcmVkIG9uIHRoZSB3ZWVrZW5kLiJdLAogIFsi6rGx7KCV7ZWY64ukIiwiZ2Vvay1qZW9uZy1oYS1kYSIsInRvIHdvcnJ5Iiwi6rGx7KCV7ZWY7KeAIOuniOyEuOyalCA9IGRvbid0IHdvcnJ5IOKAlCBpbnN0YW50IGNvbWZvcnQiLCLwn5ifIiwi64SI66y0IOqxseygle2VmOyngCDrp4jshLjsmpQuIiwiRG8gbm90IHdvcnJ5IHRvbyBtdWNoLiJdLAogIFsi7ZmU7J207YyFIiwiaHdhLWktdGluZyIsInlvdSBjYW4gZG8gaXQhIiwiS29yZWEncyBmYXZvcml0ZSBjaGVlciDigJQgdXNlIGl0IGdlbmVyb3VzbHkiLCLwn5KqIiwi7Iuc7ZeYIOyemCDrtJDsmpQhIO2ZlOydtO2MhSEiLCJHb29kIGx1Y2sgb24gdGhlIGV4YW0hIEZpZ2h0aW5nISJdLAogIFsi7LaV7ZWY7ZW07JqUIiwiY2h1ay1hLWhhZS15byIsImNvbmdyYXR1bGF0aW9ucyIsIkZvciBiaXJ0aGRheXMsIGpvYnMsIHdpbnMg4oCUIGFkZCDsoJXrp5AgZm9yIGVtcGhhc2lzIiwi8J+OiSIsIu2VqeqyqSDstpXtlZjtlbTsmpQhIiwiQ29uZ3JhdHVsYXRpb25zIG9uIHBhc3NpbmchIl0sCiAgWyLsnpjtlojslrTsmpQiLCJqYWwtaGFlc3MtZW8teW8iLCJ3ZWxsIGRvbmUiLCJQcmFpc2UgdGhhdCB3b3JrcyBmb3IgZXZlcnlvbmUiLCLwn5GPIiwi7JmALCDsoJXrp5Ag7J6Y7ZaI7Ja07JqUISIsIldvdywgcmVhbGx5IHdlbGwgZG9uZSEiXSwKICBbIuyVhOyJveuLpCIsImEtc3dpcC1kYSIsInRvIGJlIGEgcGl0eSIsIuyVhOyJrOybjOyalCA9IHdoYXQgYSBzaGFtZSAvIEkgd2lzaCBpdCB3b3JrZWQgb3V0Iiwi8J+YlCIsIuuquyDqsIDshJwg64SI66y0IOyVhOyJrOybjOyalC4iLCJJdCBpcyBzdWNoIGEgcGl0eSBJIGNhbm5vdCBnby4iXSwKICBbIu2emOuTpOuLpCIsImhpbS1kZXVsLWRhIiwidG8gYmUgaGFyZCAvIHRvdWdoIiwi7Z6Y65Ok7Ja07JqUID0gSSdtIGhhdmluZyBhIGhhcmQgdGltZSAocGh5c2ljYWwgb3IgZW1vdGlvbmFsKSIsIvCfmK7igI3wn5KoIiwi7JqU7KaYIOydvOydtCDsooAg7Z6Y65Ok7Ja07JqULiIsIldvcmsgaGFzIGJlZW4gYSBiaXQgdG91Z2ggbGF0ZWx5LiJdLAogIFsi6rSc7LCu7JWE7JqUPyIsImd3YWVuLWNoYW4tYS15byIsImFyZSB5b3Ugb2theT8iLCJDaGVja2luZyBvbiBzb21lb25lIOKAlCB0aGUgY2FyaW5nIHF1ZXN0aW9uIiwi8J+klyIsIuustOyKqCDsnbwg7J6I7Ja07JqUPyDqtJzssK7slYTsmpQ/IiwiSXMgc29tZXRoaW5nIHdyb25nPyBBcmUgeW91IG9rYXk/Il0sCiAgWyLsiqztlITri6QiLCAic2V1bC1wZXUtZGEiLCAic2FkIiwgIuyKrO2NvOyalCDigJQgZHJhbWEgZW5kaW5ncywgZ29vZGJ5ZXMiLCAi8J+YoiIsICLsmIHtmZTqsIAg64SI66y0IOyKrO2OkOyWtOyalC4iLCAiVGhlIG1vdmllIHdhcyBzbyBzYWQuIl0sCiAgWyLquLDsgZjri6QiLCAiZ2ktcHBldS1kYSIsICJnbGFkIC8gam95ZnVsIiwgIu2Vqeqyqe2VtOyEnCDsoJXrp5Ag6riw67uQ7JqUID0gc28gZ2xhZCBJIHBhc3NlZCIsICLwn5iKIiwgIuygleunkCDquLDru5DsmpQhIiwgIkkgYW0gc28gZ2xhZCEiXSwKICBbIuustOyEreuLpCIsICJtdS1zZW9wLWRhIiwgInNjYXJ5IC8gc2NhcmVkIiwgIuustOyEnOybjOyalCA9IEkgYW0gc2NhcmVkIC8gaXQgaXMgc2NhcnkiLCAi8J+YsSIsICLqs7Xtj6wg7JiB7ZmU64qUIOustOyEnOybjOyalC4iLCAiSG9ycm9yIG1vdmllcyBhcmUgc2NhcnkuIl0sCiAgWyLrhoDrnbzri6QiLCAibm9sLWxhLWRhIiwgInRvIGJlIHN1cnByaXNlZCIsICLquZzsp50g64aA656Q7Ja07JqUID0gSSB3YXMgc3RhcnRsZWQhIiwgIvCfmLIiLCAi6rmc7KedIOuGgOuekOyWtOyalCEiLCAiWW91IHN0YXJ0bGVkIG1lISJdLAogIFsi7Iug64KY64ukIiwgInNpbi1uYS1kYSIsICJ0byBiZSBleGNpdGVkIiwgIuyLoOuCmOyalCEgPSB0aGlzIGlzIHNvIGZ1biEiLCAi8J+lsyIsICLsl6ztlokg6rCA7IScIOygleunkCDsi6DrgpjsmpQhIiwgIkkgYW0gc28gZXhjaXRlZCB0byB0cmF2ZWwhIl0sCiAgWyLrtoDrn73ri6QiLCAiYnUtcmVvcC1kYSIsICJlbnZpb3VzIChuaWNlbHkpIiwgIuu2gOufrOybjOyalCEgPSBJIGFtIGplYWxvdXMhIChhIGNvbXBsaW1lbnQgaGVyZSkiLCAi8J+kqSIsICLsmYAsIOu2gOufrOybjOyalCEiLCAiV293LCBJIGFtIGplYWxvdXMhIl0sCiAgWyLqt4Dsl73ri6QiLCAiZ3dpLXllb3AtZGEiLCAiY3V0ZSIsICLqsJXslYTsp4DqsIAg6reA7Jes7JuM7JqUIOKAlCBwdXBwaWVzLCBiYWJpZXMsIGtleWNoYWlucyIsICLwn5C2IiwgIuyVhOq4sOqwgCDsoJXrp5Ag6reA7Jes7JuM7JqULiIsICJUaGUgYmFieSBpcyBzbyBjdXRlLiJdLAogIFsi66mL7J6I64ukIiwgIm1lb3MtaXQtZGEiLCAiY29vbCAvIGF3ZXNvbWUiLCAiUGVvcGxlLCBvdXRmaXRzLCB2aWV3cyDigJQgYWxsIGNhbiBiZSDrqYvsnojslrTsmpQiLCAi8J+YjiIsICLsmKTripgg7KCV66eQIOupi+yeiOyWtOyalCEiLCAiWW91IGxvb2sgcmVhbGx5IGNvb2wgdG9kYXkhIl0sCiAgWyLsm4Pri6QiLCAidXQtZGEiLCAidG8gbGF1Z2giLCAi66eO7J20IOybg+yXiOyWtOyalCA9IEkgbGF1Z2hlZCBhIGxvdCIsICLwn5iEIiwgIuuEiOustCDrp47snbQg7JuD7JeI7Ja07JqULiIsICJJIGxhdWdoZWQgc28gbXVjaC4iXSwKICBbIuyauOuLpCIsICJ1bC1kYSIsICJ0byBjcnkiLCAi7Jq47KeAIOuniOyEuOyalCA9IGRvIG5vdCBjcnkiLCAi8J+YrSIsICLsmIHtmZQg67O06rOgIOyauOyXiOyWtOyalC4iLCAiSSBjcmllZCB3YXRjaGluZyB0aGUgbW92aWUuIl0sCiAgWyLsgqzrnpHtlZjri6QiLCAic2EtcmFuZy1oYS1kYSIsICJ0byBsb3ZlIiwgIuyCrOueke2VtOyalCDigJQgeW91IGtub3cgdGhpcyBvbmUgZnJvbSBkcmFtYXMiLCAi4p2k77iPIiwgIuqwgOyhseydhCDsgqzrnpHtlbTsmpQuIiwgIkkgbG92ZSBteSBmYW1pbHkuIl0sCiAgWyLquLDrtoTsnbQg7KKL64ukIiwgImdpLWJ1bi1pIGpvLXRhIiwgInRvIGZlZWwgZ3JlYXQiLCAi7Jik64qYIOq4sOu2hOydtCDsoovslYTsmpQgPSBmZWVsaW5nIGdvb2QgdG9kYXkiLCAi8J+MiCIsICLrgqDslKjqsIAg7KKL7JWE7IScIOq4sOu2hOydtCDsoovslYTsmpQuIiwgIlRoZSBuaWNlIHdlYXRoZXIgcHV0cyBtZSBpbiBhIGdvb2QgbW9vZC4iXV0sCiBncmFtbWFyOlsKICBbIn7sp4Ag66eI7IS47JqUIiwicGxlYXNlIGRvIG5vdCB+IiwiQ29tZm9ydGluZyBhbmQgZ2VudGxlIHdhcm5pbmdzIiwi6rGx7KCV7ZWY7KeAIOuniOyEuOyalCwg64qm7KeAIOuniOyEuOyalCDigJQgdmVyYiArIOyngCDrp4jshLjsmpQuIiwi6rGx7KCV7ZWY7KeAIOuniOyEuOyalC4g64ukIOyemCDrkKAg6rGw7JiI7JqULiIsIkRvIG5vdCB3b3JyeS4gRXZlcnl0aGluZyB3aWxsIGJlIGZpbmUuIiwi7Y+s6riw7ZWY7KeAIOuniOyEuOyalCEiLCJEbyBub3QgZ2l2ZSB1cCEiXSwKICBbIn7slYQv7Ja0IOuztOyXrOyalCIsInlvdSBsb29rIH4iLCJOb3RpY2luZyBob3cgc29tZW9uZSBzZWVtcyIsIkFkamVjdGl2ZSArIOuztOyXrOyalDog7ZS86rOk7ZW0IOuztOyXrOyalCA9IHlvdSBsb29rIHRpcmVkLiIsIuyYpOuKmCDtlLzqs6TtlbQg67O07Jes7JqULiIsIllvdSBsb29rIHRpcmVkIHRvZGF5LiIsIuq4sOu2hOydtCDsoovslYQg67O07Jes7JqUISIsIllvdSBsb29rIGhhcHB5ISJdLAogIFsi64SI66y0IH7slYQv7Ja07IScIiwiYmVjYXVzZSAoaXQgaXMpIHNvIH4iLCJFeHBsYWluaW5nIHlvdXIgZmVlbGluZ3MiLCJSZWFzb24gKyBmZWVsaW5nOiB0b28gdGlyZWQg4oaSIGdvaW5nIGhvbWUgZWFybHkuIiwi64SI66y0IO2UvOqzpO2VtOyEnCDsnbzssI0g7J6YIOqxsOyYiOyalC4iLCJJIGFtIHNvIHRpcmVkIHRoYXQgSSB3aWxsIHNsZWVwIGVhcmx5LiIsIuyYge2ZlOqwgCDrhIjrrLQg7Iqs7Y287IScIOyauOyXiOyWtOyalC4iLCJUaGUgbW92aWUgd2FzIHNvIHNhZCB0aGF0IEkgY3JpZWQuIl1dfSwKCntuOjEwLCBrcjoi7JWE7ZSMIOuVjCIsIGVuOiJGZWVsaW5nIFNpY2siLCB2aToiR2V0IGhlbHAgZmFzdCIsIGVtb2ppOiLwn6SSIiwgYm9zczoi8J+moCIsIGJvc3NOYW1lOiJTbmlmZmxlIFNsaW1lIiwKIHdvcmRzOlsKICBbIuyVhO2UhOuLpCIsImEtcGV1LWRhIiwidG8gaHVydCAvIGJlIHNpY2siLCJCb2R5IHBhcnQgKyDsnbQv6rCAIOyVhO2MjOyalCBjb3ZlcnMgYWxtb3N0IGV2ZXJ5dGhpbmciLCLwn6SVIiwi66i466as6rCAIOyVhO2MjOyalC4iLCJNeSBoZWFkIGh1cnRzLiJdLAogIFsi66i466asIiwibWVvLXJpIiwiaGVhZCIsIkFsc28gbWVhbnMgaGFpciEiLCLwn6egIiwi7Ja07KCc67aA7YSwIOuouOumrOqwgCDslYTtjIzsmpQuIiwiTXkgaGVhZCBoYXMgaHVydCBzaW5jZSB5ZXN0ZXJkYXkuIl0sCiAgWyLrsLAiLCJiYWUiLCJzdG9tYWNoIiwi67Cw6rCAIOyVhO2MjOyalCDigJQgdGhlIGNsYXNzaWMiLCLwn6uDIiwi67Cw6rCAIOuEiOustCDslYTtjIzsmpQuIiwiTXkgc3RvbWFjaCByZWFsbHkgaHVydHMuIl0sCiAgWyLqsJDquLAiLCJnYW0tZ2kiLCJhIGNvbGQiLCLqsJDquLDsl5Ag6rG466C47Ja07JqUID0gSSBjYXVnaHQgYSBjb2xkIiwi8J+kpyIsIuqwkOq4sOyXkCDqsbjrprAg6rKDIOqwmeyVhOyalC4iLCJJIHRoaW5rIEkgY2F1Z2h0IGEgY29sZC4iXSwKICBbIuyXtCIsInllb2wiLCJmZXZlciIsIuyXtOydtCDrgpjsmpQgPSBJIGhhdmUgYSBmZXZlciIsIvCfjKHvuI8iLCLsl7TsnbQg7KKAIOyeiOyWtOyalC4iLCJJIGhhdmUgYSBzbGlnaHQgZmV2ZXIuIl0sCiAgWyLslb3qta0iLCJ5YWstZ3VrIiwicGhhcm1hY3kiLCJHcmVlbiBjcm9zcyBzaWduIOKAlCBwaGFybWFjaXN0cyBnaXZlIGdyZWF0IGFkdmljZSIsIuKale+4jyIsIuyVveq1reydtCDslrTrlJTsl5Ag7J6I7Ja07JqUPyIsIldoZXJlIGlzIGEgcGhhcm1hY3k/Il0sCiAgWyLslb0iLCJ5YWsiLCJtZWRpY2luZSIsIuqwkOq4sOyVvSA9IGNvbGQgbWVkaWNpbmUsIOuRkO2GteyVvSA9IGhlYWRhY2hlIG1lZGljaW5lIiwi8J+SiiIsIuqwkOq4sOyVvSDsnojslrTsmpQ/IiwiRG8geW91IGhhdmUgY29sZCBtZWRpY2luZT8iXSwKICBbIuuzkeybkCIsImJ5ZW9uZy13b24iLCJob3NwaXRhbCAvIGNsaW5pYyIsIktvcmVhbiBjbGluaWNzIGFyZSBmYXN0IGFuZCBhZmZvcmRhYmxlIiwi8J+PpSIsIuuzkeybkOyXkCDqsIAg67O07IS47JqULiIsIllvdSBzaG91bGQgZ28gc2VlIGEgZG9jdG9yLiJdLAogIFsi7ZG5IOyJrOuLpCIsInB1ayBzd2ktZGEiLCJ0byByZXN0IHdlbGwiLCLtkbkgPSBkZWVwbHkvY29tcGxldGVseSDigJQg7ZG5IOyJrOyEuOyalCEiLCLwn5i0Iiwi7Jik64qY7J2AIOynkeyXkOyEnCDtkbkg7Ims7IS47JqULiIsIlJlc3Qgd2VsbCBhdCBob21lIHRvZGF5LiJdLAogIFsi64Kr64ukIiwibmF0LWRhIiwidG8gZ2V0IGJldHRlciIsIuu5qOumrCDrgpjsnLzshLjsmpQhID0gZ2V0IHdlbGwgc29vbiEiLCLinKgiLCLruajrpqwg64KY7Jy87IS47JqUISIsIkdldCB3ZWxsIHNvb24hIl0sCiAgWyLslYzroIjrpbTquLAiLCJhbC1sZS1yZXUtZ2kiLCJhbGxlcmd5IiwiQ3JpdGljYWwgZm9yIGZvb2QgYW5kIG1lZGljaW5lIOKAlCBrbm93IHRoaXMgd29yZCIsIvCfpZwiLCLrlYXsvakg7JWM66CI66W06riw6rCAIOyeiOyWtOyalC4iLCJJIGhhdmUgYSBwZWFudXQgYWxsZXJneS4iXSwKICBbIuuwtOuTnCIsImJhZW4tZGV1IiwiYmFuZC1haWQiLCJLb25nbGlzaCDigJQgc29sZCBhdCBldmVyeSBjb252ZW5pZW5jZSBzdG9yZSIsIvCfqbkiLCLrsLTrk5wg7KKAIOyjvOyEuOyalC4iLCJBIGJhbmQtYWlkLCBwbGVhc2UuIl0sCiAgWyLrqqkiLCAibW9rIiwgInRocm9hdCAvIG5lY2siLCAi66qp7J20IOyVhO2MjOyalCA9IHNvcmUgdGhyb2F0IiwgIvCfl6PvuI8iLCAi66qp7J20IOyVhO2UhOqzoCDquLDsuajtlbTsmpQuIiwgIk15IHRocm9hdCBodXJ0cyBhbmQgSSBjb3VnaC4iXSwKICBbIuuIiCIsICJudW4iLCAiZXllIiwgIkFsc28gbWVhbnMgc25vdyEgQ29udGV4dCBkZWNpZGVzIiwgIvCfkYHvuI8iLCAi64iI7J20IOyigCDslYTtjIzsmpQuIiwgIk15IGV5ZSBodXJ0cyBhIGJpdC4iXSwKICBbIuy9lCIsICJrbyIsICJub3NlIiwgIuy9lOqwgCDrp4ntmJTslrTsmpQgPSBzdHVmZnkgbm9zZSIsICLwn5GDIiwgIuy9lOqwgCDrp4ntmJTslrTsmpQuIiwgIk15IG5vc2UgaXMgc3R1ZmZlZC4iXSwKICBbIuq3gCIsICJnd2kiLCAiZWFyIiwgIuq3gOqwgCDslYTtjIzsmpQgb24gYWlycGxhbmVzIiwgIvCfkYIiLCAi6reA6rCAIOyhsOq4iCDslYTtjIzsmpQuIiwgIk15IGVhciBodXJ0cyBhIGxpdHRsZS4iXSwKICBbIuyGkCIsICJzb24iLCAiaGFuZCIsICLshpDsnYQg7JS77Jy87IS47JqUID0gd2FzaCB5b3VyIGhhbmRzIiwgIuKciyIsICLshpDsnYQg7J6Q7KO8IOyUu+ycvOyEuOyalC4iLCAiV2FzaCB5b3VyIGhhbmRzIG9mdGVuLiJdLAogIFsi67CcIiwgImJhbCIsICJmb290IiwgIuuwnOydtCDslYTtjIzsmpQgYWZ0ZXIgYSBkYXkgb2Ygd2Fsa2luZyIsICLwn6a2IiwgIuunjuydtCDqsbjslrTshJwg67Cc7J20IOyVhO2MjOyalC4iLCAiTXkgZmVldCBodXJ0IGZyb20gd2Fsa2luZyBhIGxvdC4iXSwKICBbIuq4sOy5qCIsICJnaS1jaGltIiwgImNvdWdoIChub3VuKSIsICLquLDsuajsnbQg64KY7JqUID0gSSBoYXZlIGEgY291Z2giLCAi8J+YtyIsICLquLDsuajsnbQg6rOE7IaNIOuCmOyalC4iLCAiSSBrZWVwIGNvdWdoaW5nLiJdLAogIFsi7L2n66y8IiwgImtvbi1tdWwiLCAicnVubnkgbm9zZSIsICLsvafrrLzsnbQg64KY7JqUIOKAlCBjb2xkLXNlYXNvbiByZWd1bGFyIiwgIvCfkqciLCAi7L2n66y87J20IOuCmOqzoCDsl7Trj4Qg7J6I7Ja07JqULiIsICJJIGhhdmUgYSBydW5ueSBub3NlIGFuZCBhIGZldmVyLiJdLAogIFsi7Ja07KeA65+964ukIiwgImVvLWppLXJlb3AtZGEiLCAiZGl6enkiLCAi7Ja07KeA65+s7JuM7JqUID0gSSBmZWVsIGRpenp5IiwgIvCfkqsiLCAi7KGw6riIIOyWtOyngOufrOybjOyalC4iLCAiSSBmZWVsIGEgbGl0dGxlIGRpenp5LiJdLAogIFsi64uk7LmY64ukIiwgImRhLWNoaS1kYSIsICJ0byBnZXQgaHVydCIsICLri6Tss6TslrTsmpQgPSBJIGdvdCBodXJ0IC8gaW5qdXJlZCIsICLwn6SVIiwgIuuEmOyWtOyguOyEnCDri6Tss6TslrTsmpQuIiwgIkkgZmVsbCBhbmQgZ290IGh1cnQuIl0sCiAgWyLso7zsgqwiLCAianUtc2EiLCAiaW5qZWN0aW9uIC8gc2hvdCIsICLso7zsgqzrpbwg66ee64ukID0gdG8gZ2V0IGEgc2hvdCIsICLwn5KJIiwgIuyjvOyCrOulvCDrp57slYTslbwg7ZW07JqUPyIsICJEbyBJIG5lZWQgdG8gZ2V0IGEgc2hvdD8iXSwKICBbIuyVveyCrCIsICJ5YWstc2EiLCAicGhhcm1hY2lzdCIsICJLb3JlYSdzIHBoYXJtYWNpc3RzIGdpdmUgZ3JlYXQgYWR2aWNlIiwgIvCfp5HigI3impXvuI8iLCAi7JW97IKs64uY7J20IOy5nOygiO2VtOyalC4iLCAiVGhlIHBoYXJtYWNpc3QgaXMga2luZC4iXV0sCiBncmFtbWFyOlsKICBbIk7snbQv6rCAIOyVhO2MjOyalCIsIm15IE4gaHVydHMiLCJUZWxsaW5nIGFueW9uZSBleGFjdGx5IHdoZXJlIGl0IGh1cnRzIiwiUG9pbnQgKyBzYXkgaXQuIOuouOumrOqwgCwg67Cw6rCALCDrqqnsnbQg7JWE7YyM7JqULiIsIuuqqeydtCDslYTtjIzsmpQuIiwiTXkgdGhyb2F0IGh1cnRzLiIsIuyXrOq4sOqwgCDslYTtjIzsmpQuIiwiSXQgaHVydHMgaGVyZS4iXSwKICBbIn7rtoDthLAiLCJzaW5jZSB+IiwiRXhwbGFpbmluZyB3aGVuIGl0IHN0YXJ0ZWQiLCJUaW1lICsg67aA7YSwOiDslrTsoJzrtoDthLAsIOyVhOy5qOu2gO2EsC4iLCLslrTsoJzrtoDthLAg7Je07J20IOuCmOyalC4iLCJJIGhhdmUgaGFkIGEgZmV2ZXIgc2luY2UgeWVzdGVyZGF5LiIsIuyVhOy5qOu2gO2EsCDrsLDqsIAg7JWE7YyM7JqULiIsIk15IHN0b21hY2ggaGFzIGh1cnQgc2luY2UgbW9ybmluZy4iXSwKICBbIu2VmOujqOyXkCB+IOuyiCIsIn4gdGltZXMgYSBkYXkiLCJVbmRlcnN0YW5kaW5nIG1lZGljaW5lIGluc3RydWN0aW9ucyIsIu2VmOujqOyXkCDshLgg67KIID0gdGhyZWUgdGltZXMgYSBkYXkuIOyLne2bhCA9IGFmdGVyIG1lYWxzLiIsIu2VmOujqOyXkCDshLgg67KIIOuTnOyEuOyalC4iLCJUYWtlIGl0IHRocmVlIHRpbWVzIGEgZGF5LiIsIu2VmOujqOyXkCDrkZAg67KIIOuoueyWtOyalD8iLCJEbyBJIHRha2UgaXQgdHdpY2UgYSBkYXk/Il1dfSwKCntuOjExLCBrcjoi7Jes7ZaJ6rO8IOyImeyGjCIsIGVuOiJUcmF2ZWwgJiBIb3RlbHMiLCB2aToiV2Vla2VuZCBhZHZlbnR1cmVyIiwgZW1vamk6IvCfp7MiLCBib3NzOiLwn6ajIiwgYm9zc05hbWU6Ikxvc3QtTHVnZ2FnZSBZZXRpIiwKIHdvcmRzOlsKICBbIuyYiOyVve2VmOuLpCIsInllLXlhLWthLWRhIiwidG8gcmVzZXJ2ZSIsIuyYiOyVve2WiOyWtOyalCA9IEkgaGF2ZSBhIHJlc2VydmF0aW9uIChtYWdpYyBjaGVjay1pbiB3b3JkcykiLCLwn5OFIiwi7Jio65287J247Jy866GcIOyYiOyVve2WiOyWtOyalC4iLCJJIHJlc2VydmVkIG9ubGluZS4iXSwKICBbIuyytO2BrOyduCIsImNoZS1rZXUtaW4iLCJjaGVjay1pbiIsIktvbmdsaXNoIOKAlCDssrTtgazsnbjtlaDqsozsmpQgPSBJIHdvdWxkIGxpa2UgdG8gY2hlY2sgaW4iLCLwn5uO77iPIiwi7LK07YGs7J247ZWY6rOgIOyLtuyWtOyalC4iLCJJIHdvdWxkIGxpa2UgdG8gY2hlY2sgaW4uIl0sCiAgWyLrsKkiLCJiYW5nIiwicm9vbSIsIuuwqSDtgqQgPSByb29tIGtleTsg66qHIO2YuCA9IHdoYXQgcm9vbSBudW1iZXIiLCLwn5qqIiwi67Cp7J20IOuqhyDtmLjsmIjsmpQ/IiwiV2hhdCBpcyBteSByb29tIG51bWJlcj8iXSwKICBbIu2VmOuju+uwpCIsImhhLXJ1dC1iYW0iLCJvbmUgbmlnaHQiLCLtlZjro7vrsKTsl5Ag7Ja866eI7JiI7JqUPyA9IGhvdyBtdWNoIHBlciBuaWdodD8iLCLwn4yZIiwi7ZWY66O767Ck7JeQIOyWvOuniOyYiOyalD8iLCJIb3cgbXVjaCBmb3Igb25lIG5pZ2h0PyJdLAogIFsi7JmA7J207YyM7J20Iiwid2EtaS1wYS1pIiwid2lmaSIsIlRoZSByZWFsIGZpcnN0IHF1ZXN0aW9uIGF0IGFueSBob3RlbCIsIvCfk7YiLCLsmYDsnbTtjIzsnbQg67mE67CA67KI7Zi46rCAIOutkOyYiOyalD8iLCJXaGF0IGlzIHRoZSB3aWZpIHBhc3N3b3JkPyJdLAogIFsi67mE67CA67KI7Zi4IiwiYmktbWlsLWJlb24taG8iLCJwYXNzd29yZCIsIuu5hOuwgCA9IHNlY3JldCwg67KI7Zi4ID0gbnVtYmVyIiwi8J+UkCIsIuu5hOuwgOuyiO2YuOulvCDslYzroKQg7KO87IS47JqULiIsIlBsZWFzZSB0ZWxsIG1lIHRoZSBwYXNzd29yZC4iXSwKICBbIuynkCIsImppbSIsImx1Z2dhZ2UiLCLsp5DsnYQg66eh6riw64ukID0gbGVhdmUgbHVnZ2FnZSAoYmVmb3JlIGNoZWNrLWluISkiLCLwn6ezIiwi7KeQ7J2EIOunoeq4uCDsiJgg7J6I7Ja07JqUPyIsIkNhbiBJIGxlYXZlIG15IGx1Z2dhZ2U/Il0sCiAgWyLqsr3suZgiLCJneWVvbmctY2hpIiwic2NlbmVyeSAvIHZpZXciLCLqsr3suZjqsIAg7KKL7J2AIOuwqSA9IHJvb20gd2l0aCBhIHZpZXciLCLwn4+e77iPIiwi7JmALCDqsr3suZjqsIAg7KCV66eQIOyii+uEpOyalCEiLCJXb3csIHRoZSB2aWV3IGlzIGFtYXppbmchIl0sCiAgWyLsgqzsp4QiLCJzYS1qaW4iLCJwaG90byIsIuyCrOynhCDsooAg7LCN7Ja0IOyjvOyEuOyalCA9IHBsZWFzZSB0YWtlIGEgcGhvdG8gb2YgbWUiLCLwn5O4Iiwi7IKs7KeEIOyigCDssI3slrQg7KO87Iuc6rKg7Ja07JqUPyIsIkNvdWxkIHlvdSB0YWtlIGEgcGhvdG8gZm9yIG1lPyJdLAogIFsi7ZGcIiwicHlvIiwidGlja2V0Iiwi6riw7LCo7ZGcLCDsmIHtmZTtkZwsIOyeheyepeq2jCDigJQgYWxsIHRpY2tldHMiLCLwn46rIiwi7J6F7J6lIO2RnCDrkZAg7J6lIOyjvOyEuOyalC4iLCJUd28gZW50cmFuY2UgdGlja2V0cywgcGxlYXNlLiJdLAogIFsi6rSA6rSR7KeAIiwiZ3dhbi1nd2FuZy1qaSIsInRvdXJpc3QgYXR0cmFjdGlvbiIsIuycoOuqhe2VnCDqtIDqtJHsp4AgPSBmYW1vdXMgc2lnaHRzIiwi8J+XvCIsIuycoOuqhe2VnCDqtIDqtJHsp4DqsIAg7Ja065SU7JiI7JqUPyIsIldoZXJlIGFyZSB0aGUgZmFtb3VzIHNpZ2h0cz8iXSwKICBbIuq3vOyymCIsImdldW4tY2hlbyIsIm5lYXJieSIsIuq3vOyymOyXkCB+IOyeiOyWtOyalD8gPSBpcyB0aGVyZSBhIH4gbmVhcmJ5PyIsIvCfk40iLCLqt7zsspjsl5Ag66eb7KeRIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBhIGdvb2QgcmVzdGF1cmFudCBuZWFyYnk/Il0sCiAgWyLsl6zqtowiLCAieWVvLWd3b24iLCAicGFzc3BvcnQiLCAiQ2hlY2sgdGhlIGhvdGVsIHNhZmUgYmVmb3JlIHlvdSBsZWF2ZSEiLCAi8J+bgiIsICLsl6zqtozsnYQg7ZmV7J247ZWY7IS47JqULiIsICJDaGVjayB5b3VyIHBhc3Nwb3J0LiJdLAogIFsi67mE7J6QIiwgImJpLWphIiwgInZpc2EiLCAiQ2hlY2sgYmVmb3JlIHlvdSBmbHkhIiwgIvCfm4MiLCAi67mE7J6Q6rCAIO2VhOyalO2VtOyalD8iLCAiRG8gSSBuZWVkIGEgdmlzYT8iXSwKICBbIu2ZmOyghCIsICJod2FuLWplb24iLCAiY3VycmVuY3kgZXhjaGFuZ2UiLCAi7ZmY7KCE7IaMID0gZXhjaGFuZ2UgYm9vdGgiLCAi8J+SsSIsICLslrTrlJTsl5DshJwg7ZmY7KCE7ZWgIOyImCDsnojslrTsmpQ/IiwgIldoZXJlIGNhbiBJIGV4Y2hhbmdlIG1vbmV5PyJdLAogIFsi6rSA6rSRIiwgImd3YW4tZ3dhbmciLCAic2lnaHRzZWVpbmciLCAi6rSA6rSR6rCdID0gdG91cmlzdCIsICLwn5O4IiwgIuyYpOuKmOydgCDsi5zrgrQg6rSA6rSR7J2EIO2VtOyalC4iLCAiVG9kYXkgd2Ugc2lnaHRzZWUgZG93bnRvd24uIl0sCiAgWyLquLDrhZDtkogiLCAiZ2ktbnllb20tcHVtIiwgInNvdXZlbmlyIiwgIuq4sOuFkO2SiCDqsIDqsowgPSBzb3V2ZW5pciBzaG9wIiwgIvCfjoEiLCAi6riw64WQ7ZKI7J2EIOyCrOqzoCDsi7bslrTsmpQuIiwgIkkgd2FudCB0byBidXkgc291dmVuaXJzLiJdLAogIFsi7ZW067OAIiwgImhhZS1ieWVvbiIsICJiZWFjaCIsICLrsJTri7fqsIAgd29ya3MgdG9vIiwgIvCfj5bvuI8iLCAi7ZW067OA7JeQ7IScIOyImOyYge2WiOyWtOyalC4iLCAiSSBzd2FtIGF0IHRoZSBiZWFjaC4iXSwKICBbIuyCsCIsICJzYW4iLCAibW91bnRhaW4iLCAi7ZWc65287IKwLCDshKTslYXsgrAg4oCUIEtvcmVhIGxvdmVzIGl0cyBtb3VudGFpbnMiLCAi4puw77iPIiwgIuyCsCDqsr3suZjqsIAg7KCV66eQIOupi+yeiOyWtOyalC4iLCAiVGhlIG1vdW50YWluIHNjZW5lcnkgaXMgYW1hemluZy4iXSwKICBbIuyErCIsICJzZW9tIiwgImlzbGFuZCIsICLsoJzso7zrj4TsnZgg64+EIGFsc28gbWVhbnMgaXNsYW5kIiwgIvCfj53vuI8iLCAi7J6R7J2AIOyErOyXkCDqsIAg67O06rOgIOyLtuyWtOyalC4iLCAiSSB3YW50IHRvIHZpc2l0IGEgc21hbGwgaXNsYW5kLiJdLAogIFsi67CV66y86rSAIiwgImJhay1tdWwtZ3dhbiIsICJtdXNldW0iLCAiTWFueSBhcmUgZnJlZSBpbiBTZW91bCIsICLwn4+b77iPIiwgIuuwleusvOq0gOydgCDsm5TsmpTsnbzsl5Ag7Ims7Ja07JqULiIsICJUaGUgbXVzZXVtIGlzIGNsb3NlZCBvbiBNb25kYXlzLiJdLAogIFsi7J287KCVIiwgImlsLWplb25nIiwgInNjaGVkdWxlIC8gaXRpbmVyYXJ5IiwgIuyXrO2WiSDsnbzsoJUgPSB0cmF2ZWwgaXRpbmVyYXJ5IiwgIvCfk4siLCAi64K07J28IOydvOygleydtCDslrTrlrvqsowg64+87JqUPyIsICJXaGF0IGlzIHRvbW9ycm93J3Mgc2NoZWR1bGU/Il0sCiAgWyLst6jshowiLCAiY2h3aS1zbyIsICJjYW5jZWxsYXRpb24iLCAi7Leo7IaMIOyImOyImOujjCA9IGNhbmNlbGxhdGlvbiBmZWUg4oCUIHJlYWQgdGhlIGZpbmUgcHJpbnQiLCAi8J+aqyIsICLsmIjslb3snYQg7Leo7IaM7ZWY6rOgIOyLtuyWtOyalC4iLCAiSSB3b3VsZCBsaWtlIHRvIGNhbmNlbCBteSByZXNlcnZhdGlvbi4iXSwKICBbIu2MgSIsICJ0aXAiLCAidGlwIChncmF0dWl0eSkiLCAiS29yZWEgaGFzIE5PIHRpcHBpbmcgY3VsdHVyZSDigJQga2VlcCB5b3VyIGNoYW5nZSEiLCAi8J+StSIsICLtlZzqta3snYAg7YyB7J20IOyXhuyWtOyalC4iLCAiS29yZWEgaGFzIG5vIHRpcHBpbmcuIl1dLAogZ3JhbW1hcjpbCiAgWyJ+7JWEL+yWtCDso7zshLjsmpQiLCJwbGVhc2UgZG8gfiBmb3IgbWUiLCJSZXF1ZXN0cyBvZiBldmVyeSBraW5kIOKAlCB0aGUgdHJhdmVsZXIncyBiZXN0IHBhdHRlcm4iLCJWZXJiICsg7JWEL+yWtCDso7zshLjsmpQ6IOywjeyWtCDso7zshLjsmpQsIOyVjOugpCDso7zshLjsmpQsIOuPhOyZgOyjvOyEuOyalC4iLCLsgqzsp4Qg7KKAIOywjeyWtCDso7zshLjsmpQuIiwiUGxlYXNlIHRha2UgYSBwaG90byBmb3IgbWUuIiwi7YOd7Iuc66W8IOu2iOufrCDso7zshLjsmpQuIiwiUGxlYXNlIGNhbGwgYSB0YXhpIGZvciBtZS4iXSwKICBbIuq3vOyymOyXkCBOIOyeiOyWtOyalD8iLCJpcyB0aGVyZSBhIE4gbmVhcmJ5PyIsIkZpbmRpbmcgZm9vZCwgQVRNcywgcGhhcm1hY2llcyB3aGVyZXZlciB5b3UgYXJlIiwi6re87LKYID0gdmljaW5pdHkuIExvY2FscyBhbHdheXMga25vdyB0aGUgYmVzdCBhbnN3ZXIuIiwi6re87LKY7JeQIO2OuOydmOygkCDsnojslrTsmpQ/IiwiSXMgdGhlcmUgYSBjb252ZW5pZW5jZSBzdG9yZSBuZWFyYnk/Iiwi6re87LKY7JeQIOyii+ydgCDsi53ri7kg7J6I7Ja07JqUPyIsIklzIHRoZXJlIGEgZ29vZCByZXN0YXVyYW50IG5lYXJieT8iXSwKICBbIuuqhyDsi5zsl5Agfu2VtOyalD8iLCJhdCB3aGF0IHRpbWUgfj8iLCJDaGVjay1vdXQsIGJyZWFrZmFzdCwgb3BlbmluZyBob3VycyIsIuuqhyDsi5wgPSB3aGF0IHRpbWUuIOu2gO2EsC/quYzsp4AgPSBmcm9tL3VudGlsLiIsIuyhsOyLneydgCDrqocg7Iuc7JeQIOyLnOyeke2VtOyalD8iLCJXaGF0IHRpbWUgZG9lcyBicmVha2Zhc3Qgc3RhcnQ/Iiwi7LK07YGs7JWE7JuD7J2AIOuqhyDsi5zquYzsp4DsmIjsmpQ/IiwiVW50aWwgd2hhdCB0aW1lIGlzIGNoZWNrLW91dD8iXV19LAoKe246MTIsIGtyOiLrj4Tsm4Ag7JqU7LKtIiwgZW46IldoZW4gWW91IE5lZWQgSGVscCIsIHZpOiJDb25maWRlbmNlIGFueXdoZXJlIiwgZW1vamk6IvCfhpgiLCBib3NzOiLwn5CZIiwgYm9zc05hbWU6IkNvbmZ1c2lvbiBLcmFrZW4iLAogd29yZHM6WwogIFsi64+E7JmA7KO87IS47JqUIiwiZG8td2EtanUtc2UteW8iLCJwbGVhc2UgaGVscCBtZSIsIlRoZSBzZW50ZW5jZSB0byBrbm93IGJlZm9yZSB5b3UgbmVlZCBpdCIsIvCfhpgiLCLsoIAg7KKAIOuPhOyZgOyjvOyEuOyalCEiLCJQbGVhc2UgaGVscCBtZSEiXSwKICBbIuyeg+yWtOuyhOumrOuLpCIsImlsLWVvLWJlby1yaS1kYSIsInRvIGxvc2UgKHNvbWV0aGluZykiLCLsnoPslrTrsoTroLjslrTsmpQgPSBJIGxvc3QgaXQg4oCUIGhvcGVmdWxseSBuZXZlciBuZWVkZWQiLCLwn5ixIiwi7KeA6rCR7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJJIGxvc3QgbXkgd2FsbGV0LiJdLAogIFsi7KeA6rCRIiwiamktZ2FwIiwid2FsbGV0IiwiS29yZWEgaXMgZmFtb3VzbHkgZ29vZCBhdCByZXR1cm5pbmcgbG9zdCB3YWxsZXRzIiwi8J+RmyIsIuyngOqwkeydhCDrqrsg7LC+6rKg7Ja07JqULiIsIkkgY2Fubm90IGZpbmQgbXkgd2FsbGV0LiJdLAogIFsi7Zy064yA7Y+wIiwiaHl1LWRhZS1wb24iLCJjZWxsIHBob25lIiwiQWxzbyDtlbjrk5ztj7Ag4oCUIGJvdGggd29yayBldmVyeXdoZXJlIiwi8J+TsSIsIu2ctOuMgO2PsOydhCDsnoPslrTrsoTroLjslrTsmpQuIiwiSSBsb3N0IG15IHBob25lLiJdLAogIFsi6rK97LCwIiwiZ3llb25nLWNoYWwiLCJwb2xpY2UiLCLqsr3ssLDshJwgPSBwb2xpY2Ugc3RhdGlvbjsg7KeA6rWs64yAID0gbG9jYWwgcG9saWNlIGJveCIsIvCfka4iLCLqsr3ssLDsl5Ag7Iug6rOg7ZaI7Ja07JqULiIsIkkgcmVwb3J0ZWQgaXQgdG8gdGhlIHBvbGljZS4iXSwKICBbIuyynOyynO2eiCIsImNoZW9uLWNoZW9uLWhpIiwic2xvd2x5Iiwi7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQg4oCUIHNhdmVzIGV2ZXJ5IGNvbnZlcnNhdGlvbiIsIvCfkKIiLCLsspzsspztnogg66eQ7ZW0IOyjvOyEuOyalC4iLCJQbGVhc2Ugc3BlYWsgc2xvd2x5LiJdLAogIFsi64uk7IucIiwiZGEtc2kiLCJhZ2FpbiIsIuuLpOyLnCDtlZzrsoggPSBvbmUgbW9yZSB0aW1lIiwi8J+UgSIsIuuLpOyLnCDtlZzrsogg66eQ7ZW0IOyjvOyEuOyalC4iLCJQbGVhc2Ugc2F5IHRoYXQgb25lIG1vcmUgdGltZS4iXSwKICBbIuuqsOudvOyalCIsIm1vbC1sYS15byIsIkkgZG8gbm90IGtub3ciLCJIb25lc3QgYW5kIHVzZWZ1bCDigJQgbm9ib2R5IG1pbmRzIiwi8J+ktyIsIuyjhOyGoe2VtOyalCwg7J6YIOuqsOudvOyalC4iLCJTb3JyeSwgSSBkbyBub3QgcmVhbGx5IGtub3cuIl0sCiAgWyLslYzslYTsmpQiLCJhbC1hLXlvIiwiSSBrbm93Iiwi7JWM6rKg7Ja07JqUID0gdW5kZXJzdG9vZCAvIGdvdCBpdCIsIvCfkqEiLCLrhKQsIOyVjOqyoOyWtOyalCEiLCJZZXMsIGdvdCBpdCEiXSwKICBbIu2VnOq1reyWtCIsImhhbi1ndWctZW8iLCJLb3JlYW4gKGxhbmd1YWdlKSIsIuyhsOq4iCDtlaAg7IiYIOyeiOyWtOyalCA9IEkgY2FuIHNwZWFrIGEgbGl0dGxlIiwi8J+HsPCfh7ciLCLtlZzqta3slrTrpbwg7KGw6riIIO2VoCDsiJgg7J6I7Ja07JqULiIsIkkgY2FuIHNwZWFrIGEgbGl0dGxlIEtvcmVhbi4iXSwKICBbIuyYgeyWtCIsInllb25nLWVvIiwiRW5nbGlzaCIsIuyYgeyWtCDtlaAg7IiYIOyeiOyWtOyalD8g4oCUIHdvcnRoIGFza2luZyBwb2xpdGVseSIsIvCfjJAiLCLsmIHslrQg7ZWgIOyImCDsnojripQg67aEIOyeiOyWtOyalD8iLCJJcyB0aGVyZSBzb21lb25lIHdobyBzcGVha3MgRW5nbGlzaD8iXSwKICBbIuydtO2VtO2VmOuLpCIsImktaGFlLWhhLWRhIiwidG8gdW5kZXJzdGFuZCIsIuydtO2VtO2WiOyWtOyalCA9IHVuZGVyc3Rvb2Q7IOydtO2VtCDrqrsg7ZaI7Ja07JqUID0gSSBkaWRuJ3QgZ2V0IGl0Iiwi8J+noCIsIuyVhCwg7J207KCcIOydtO2VtO2WiOyWtOyalCEiLCJBaCwgbm93IEkgdW5kZXJzdGFuZCEiXSwKICBbIuusuOygnCIsICJtdW4tamUiLCAicHJvYmxlbSIsICLrrLjsoJzqsIAg7J6I7Ja07JqUID0gdGhlcmUgaXMgYSBwcm9ibGVtIiwgIuKaoO+4jyIsICLrrLjsoJzqsIAg7IOd6rK87Ja07JqULiIsICJBIHByb2JsZW0gY2FtZSB1cC4iXSwKICBbIuqzoOyepSDrgpjri6QiLCAiZ28tamFuZyBuYS1kYSIsICJ0byBicmVhayBkb3duIiwgIuqzoOyepSDrgqzslrTsmpQgPSBpdCBpcyBicm9rZW4gKG1hY2hpbmVzKSIsICLwn5SnIiwgIuyXmOumrOuyoOydtO2EsOqwgCDqs6DsnqUg64Ks7Ja07JqULiIsICJUaGUgZWxldmF0b3IgaXMgYnJva2VuLiJdLAogIFsi7Je07IegIiwgInllb2wtc29lIiwgImtleSIsICLrsKkg7Je07IegID0gcm9vbSBrZXkiLCAi8J+UkSIsICLsl7Tsh6Drpbwg67Cp7JeQIOuRkOqzoCDrgpjsmZTslrTsmpQuIiwgIkkgbGVmdCB0aGUga2V5IGluIHRoZSByb29tLiJdLAogIFsi7LC+64ukIiwgImNoYXQtZGEiLCAidG8gZmluZCAvIGxvb2sgZm9yIiwgIuywvuqzoCDsnojslrTsmpQgPSBJIGFtIGxvb2tpbmcgZm9y4oCmIiwgIvCflI0iLCAi7ZmU7J6l7Iuk7J2EIOywvuqzoCDsnojslrTsmpQuIiwgIkkgYW0gbG9va2luZyBmb3IgdGhlIHJlc3Ryb29tLiJdLAogIFsi7J6K7Ja067KE66as64ukIiwgImlqLWVvLWJlby1yaS1kYSIsICJ0byBmb3JnZXQiLCAi7J6K7Ja067KE66C47Ja07JqUID0gSSBmb3Jnb3QgKOyeg+yWtOuyhOumrOuLpCA9IGxvc3QgYSB0aGluZykiLCAi8J+kryIsICLruYTrsIDrsojtmLjrpbwg7J6K7Ja067KE66C47Ja07JqULiIsICJJIGZvcmdvdCB0aGUgcGFzc3dvcmQuIl0sCiAgWyLrtoDtg4HtlZjri6QiLCAiYnUtdGFrLWEtZGEiLCAidG8gYXNrIGEgZmF2b3IiLCAi67aA7YOB7J20IOyeiOyWtOyalCA9IEkgaGF2ZSBhIGZhdm9yIHRvIGFzayIsICLwn5mPIiwgIuu2gO2DgSDtlZjrgpgg7ZW064+EIOuPvOyalD8iLCAiTWF5IEkgYXNrIHlvdSBhIGZhdm9yPyJdLAogIFsi7JyE7ZeY7ZWY64ukIiwgIndpLWhlb20taGEtZGEiLCAiZGFuZ2Vyb3VzIiwgIuychO2XmO2VtOyalCEgPSBpdCBpcyBkYW5nZXJvdXMhIiwgIuKaoO+4jyIsICLrsKTsl5DripQg7KGw6riIIOychO2XmO2VtOyalC4iLCAiSXQgaXMgYSBiaXQgZGFuZ2Vyb3VzIGF0IG5pZ2h0LiJdLAogIFsi7KGw7Ius7ZWY64ukIiwgImpvLXNpbS1oYS1kYSIsICJ0byBiZSBjYXJlZnVsIiwgIuyhsOyLrO2VmOyEuOyalCA9IGJlIGNhcmVmdWwgLyB0YWtlIGNhcmUiLCAi8J+muiIsICLquLjsnbQg66+464GE65+s7JuM7JqULiDsobDsi6ztlZjshLjsmpQhIiwgIlRoZSByb2FkIGlzIHNsaXBwZXJ5LiBCZSBjYXJlZnVsISJdLAogIFsi64yA7IKs6rSAIiwgImRhZS1zYS1nd2FuIiwgImVtYmFzc3kiLCAiTG9zdCBwYXNzcG9ydD8gVGhpcyBpcyB3aGVyZSB5b3UgZ28iLCAi8J+Pm++4jyIsICLrjIDsgqzqtIDsl5Ag7KCE7ZmU7ZW0IOuztOyEuOyalC4iLCAiVHJ5IGNhbGxpbmcgdGhlIGVtYmFzc3kuIl0sCiAgWyLsi6Dqs6DtlZjri6QiLCAic2luLWdvLWhhLWRhIiwgInRvIHJlcG9ydCIsICLqsr3ssLDsl5Ag7Iug6rOg7ZWY64ukID0gcmVwb3J0IHRvIHRoZSBwb2xpY2UiLCAi8J+aqCIsICLrtoTsi6TrrLzsnYQg7Iug6rOg7ZaI7Ja07JqULiIsICJJIHJlcG9ydGVkIHRoZSBsb3N0IGl0ZW0uIl0sCiAgWyLso7zshowiLCAianUtc28iLCAiYWRkcmVzcyIsICJTaG93IGl0IHdyaXR0ZW4gaW4gS29yZWFuIHRvIHRheGkgZHJpdmVycyIsICLwn4+gIiwgIuyjvOyGjOulvCDsl6zquLDsl5Ag7I2oIOyjvOyEuOyalC4iLCAiUGxlYXNlIHdyaXRlIHRoZSBhZGRyZXNzIGhlcmUuIl0sCiAgWyLsoITtmZTrsojtmLgiLCAiamVvbi1od2EtYmVvbi1obyIsICJwaG9uZSBudW1iZXIiLCAiMDEwLVhYWFgtWFhYWCBmb3JtYXQgaW4gS29yZWEiLCAi8J+TniIsICLsoITtmZTrsojtmLjqsIAg7Ja065a76rKMIOuQmOyEuOyalD8iLCAiV2hhdCBpcyB5b3VyIHBob25lIG51bWJlcj8iXV0sCiBncmFtbWFyOlsKICBbIuyynOyynO2eiC/ri6Tsi5wg66eQ7ZW0IOyjvOyEuOyalCIsInNwZWFrIHNsb3dseSAvIHNheSBpdCBhZ2FpbiIsIlJlc2N1aW5nIGFueSBjb252ZXJzYXRpb24gdGhhdCBtb3ZlcyB0b28gZmFzdCIsIk5vYm9keSBpcyBhbm5veWVkIGJ5IHRoaXMg4oCUIEtvcmVhbnMgYXBwcmVjaWF0ZSB0aGUgZWZmb3J0LiIsIuyjhOyGoe2VmOyngOunjCwg7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQuIiwiU29ycnksIGJ1dCBwbGVhc2Ugc3BlYWsgc2xvd2x5LiIsIuuLpOyLnCDtlZzrsogg66eQ7ZW0IOyjvOyLnOqyoOyWtOyalD8iLCJDb3VsZCB5b3Ugc2F5IHRoYXQgb25jZSBtb3JlPyJdLAogIFsiTuydhC/rpbwg7J6D7Ja067KE66C47Ja07JqUIiwiSSBsb3N0IG15IE4iLCJSZXBvcnRpbmcgbG9zdCBpdGVtcyBhdCBwb2xpY2UgYm94ZXMgYW5kIGNvdW50ZXJzIiwiRm9sbG93IHdpdGgg7Ja065SU7JeQ7IScIOywvuydhCDsiJgg7J6I7Ja07JqUPyA9IHdoZXJlIGNhbiBJIGZpbmQgaXQ/Iiwi7Jes6raM7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJJIGxvc3QgbXkgcGFzc3BvcnQuIiwi7KeA7ZWY7LKg7JeQ7IScIOqwgOuwqeydhCDsnoPslrTrsoTroLjslrTsmpQuIiwiSSBsb3N0IG15IGJhZyBvbiB0aGUgc3Vid2F5LiJdLAogIFsifijsnLwp44S5IOyImCDsnojslrTsmpQv7JeG7Ja07JqUIiwiSSBjYW4gLyBjYW5ub3QgfiIsIlN0YXRpbmcgeW91ciBhYmlsaXRpZXMgaG9uZXN0bHkiLCLtlZzqta3slrTrpbwg7KGw6riIIO2VoCDsiJgg7J6I7Ja07JqUIG9wZW5zIGV2ZXJ5IGRvb3Igd2l0aCBhIHNtaWxlLiIsIu2VnOq1reyWtOulvCDsobDquIgg7ZWgIOyImCDsnojslrTsmpQuIiwiSSBjYW4gc3BlYWsgYSBsaXR0bGUgS29yZWFuLiIsIuyngOq4iOydgCDqsIgg7IiYIOyXhuyWtOyalC4iLCJJIGNhbm5vdCBnbyByaWdodCBub3cuIl1dfQpdOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBTVE9SSUVTIOKAlCBvbmUgaWxsdXN0cmF0ZWQgc2NlbmFyaW8gcGVyIHF1ZXN0IChhbGwgb3JpZ2luYWwpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmNvbnN0IFNUT1JJRVMgPSB7CjE6e3Q6IvCfkYsgVGhlIE5ldyBOZWlnaGJvciIsIHN0ZXBzOlsKIHtiZzoiZGF5IixzYzoi8J+TpvCfj6Dwn5mCIixuYXI6Ik1vdmluZyBkYXkhIFlvdSBhcmUgY2FycnlpbmcgYm94ZXMgaW50byB5b3VyIG5ldyBwbGFjZSB3aGVuIHRoZSBuZWlnaGJvcidzIGRvb3Igb3BlbnMuIix3aG86IvCfmYIg7J207JuDIixrcjoi7JWI64WV7ZWY7IS47JqUISDsg4jroZwg7J207IKsIOyYpOyFqOyWtOyalD8iLGVuOiJIZWxsbyEgRGlkIHlvdSBqdXN0IG1vdmUgaW4/IixjaDpbWyLrhKQsIOyViOuFle2VmOyEuOyalCEg66eM64KY7IScIOuwmOqwkeyKteuLiOuLpC4iLCJZZXMsIGhlbGxvISBHbGFkIHRvIG1lZXQgeW91LiIsMV0sWyLqs4TsgrDshJwg7KO87IS47JqULiIsIlRoZSBiaWxsLCBwbGVhc2UuIiwwXSxbIuyggCDtjrjsnZjsoJAg7JWe7JeQ7IScIOyEuOybjCDso7zshLjsmpQuIiwiUGxlYXNlIHN0b3AgaW4gZnJvbnQgb2YgdGhhdCBjb252ZW5pZW5jZSBzdG9yZS4iLDBdXX0sCiB7Ymc6ImRheSIsc2M6IvCfpJ3wn5mC8J+YiiIsbmFyOiJTaGUgc21pbGVzIHdhcm1seS4gVGltZSB0byBpbnRyb2R1Y2UgeW91cnNlbGYgcHJvcGVybHkuIix3aG86IvCfmYIg7J207JuDIixrcjoi7KCA64qUIOq5gO2VmOuCmOyYiOyalC4g7J2066aE7J20IOutkOyYiOyalD8iLGVuOiJJIGFtIEtpbSBIYW5hLiBXaGF0IGlzIHlvdXIgbmFtZT8iLGNoOltbIuyggOuKlCDthrDsnbTsl5DsmpQuIOyemCDrtoDtg4Hrk5zrpr3ri4jri6QhIiwiSSBhbSBUb20uIFBsZWFzZSB0YWtlIGNhcmUgb2YgbWUhIiwxXSxbIu2ZmOu2iCDrj7zsmpQ/IiwiQ2FuIEkgZ2V0IGEgcmVmdW5kPyIsMF0sWyLri6TsnYwg7Jet7JeQ7IScIOuCtOumrOyEuOyalC4iLCJHZXQgb2ZmIGF0IHRoZSBuZXh0IHN0YXRpb24uIiwwXV19LAoge2JnOiJkYXkiLHNjOiLwn4yN4pyI77iP8J+ZgiIsbmFyOiJTaGUgaXMgY3VyaW91cyBhYm91dCB0aGUgbmV3IGZhY2UgaW4gdGhlIGJ1aWxkaW5nLiIsd2hvOiLwn5mCIO2VmOuCmCIsa3I6IuyWtOuKkCDrgpjrnbzsl5DshJwg7JmU7Ja07JqUPyIsZW46IldoaWNoIGNvdW50cnkgYXJlIHlvdSBmcm9tPyIsY2g6W1si7LqQ64KY64uk7JeQ7IScIOyZlOyWtOyalC4g7LqQ64KY64ukIOyCrOuejOydtOyXkOyalC4iLCJJIGNhbWUgZnJvbSBDYW5hZGEuIEkgYW0gQ2FuYWRpYW4uIiwxXSxbIuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7KO87IS47JqULiIsIkFuIGljZWQgYW1lcmljYW5vLCBwbGVhc2UuIiwwXSxbIuyXtOydtCDsooAg7J6I7Ja07JqULiIsIkkgaGF2ZSBhIHNsaWdodCBmZXZlci4iLDBdXX0sCiB7Ymc6ImRhd24iLHNjOiLwn4+g8J+Ri/CfmIoiLG5hcjoiVGhlIGJveGVzIHdpbGwgbm90IGNhcnJ5IHRoZW1zZWx2ZXMuIFdyYXAgaXQgdXAgbGlrZSBhIHBybyDigJQgYW5kIGtlZXAgdGhlIGRvb3Igb3BlbiBmb3IgbmV4dCB0aW1lLiIsd2hvOiLwn5mCIO2VmOuCmCIsa3I6Iu2VhOyalO2VnCDqsbAg7J6I7Jy866m0IOyWuOygnOuToOyngCDrp5DtlbTsmpQhIixlbjoiSWYgeW91IG5lZWQgYW55dGhpbmcsIGp1c3Qgc2F5IHNvIGFueXRpbWUhIixjaDpbWyLqsJDsgqztlanri4jri6QhIOuLpOydjOyXkCDrmJAg66eM64KY7JqUISIsIlRoYW5rIHlvdSEgU2VlIHlvdSBhZ2FpbiBuZXh0IHRpbWUhIiwxXSxbIuyjhOyGoe2VmOyngOunjCwg7J206rGwIOuEiOustCDruYTsi7jsmpQuIiwiU29ycnksIGJ1dCB0aGlzIGlzIHRvbyBleHBlbnNpdmUuIiwwXSxbIuyZgOydtO2MjOydtCDruYTrsIDrsojtmLjqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/IiwwXV19XX0sCjI6e3Q6IuKYlSBSdXNoIEhvdXIgYXQgdGhlIENhZsOpIiwgc3RlcHM6Wwoge2JnOiJpbmRvb3IiLHNjOiLimJXwn6eR4oCN8J+Ns/Cfk4siLG5hcjoiTW9ybmluZyBydXNoLiBUaGUgbGluZSBmaW5hbGx5IG1vdmVzIOKAlCB5b3UgYXJlIHVwLiBUaGUgYmFyaXN0YSBsb29rcyBhdCB5b3UgZXhwZWN0YW50bHkuIix3aG86IvCfp5HigI3wn42zIOuwlOumrOyKpO2DgCIsa3I6IuyWtOyEnCDsmKTshLjsmpQhIOyjvOusuO2VmOyLnOqyoOyWtOyalD8iLGVuOiJXZWxjb21lISBXb3VsZCB5b3UgbGlrZSB0byBvcmRlcj8iLGNoOltbIuuEpCEg7JWE7J207IqkIOyVhOuplOumrOy5tOuFuCDtlZwg7J6UIOyjvOyEuOyalC4iLCJZZXMhIE9uZSBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsMV0sWyLsp4DqsJHsnYQg7J6D7Ja067KE66C47Ja07JqULiIsIkkgbG9zdCBteSB3YWxsZXQuIiwwXSxbIuu5qOumrCDrgpjsnLzshLjsmpQhIiwiR2V0IHdlbGwgc29vbiEiLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfjbDwn5GA8J+YiyIsbmFyOiJUaGUgY2FrZSBkaXNwbGF5IGlzIHJpZ2h0IHRoZXJlLiBHbGlzdGVuaW5nLiBDYWxsaW5nIHlvdXIgbmFtZS4iLHdobzoi8J+nkeKAjfCfjbMg67CU66as7Iqk7YOAIixrcjoi64uk66W4IOqxtCDtlYTsmpQg7JeG7Jy87IS47JqUPyIsZW46IkFueXRoaW5nIGVsc2U/IixjaDpbWyLsuZjspogg7LyA7J207YGs64+EIO2VmOuCmCDso7zshLjsmpQuIiwiT25lIGNoZWVzZWNha2UgdG9vLCBwbGVhc2UuIiwxXSxbIuyZvOyqveycvOuhnCDqsIDshLjsmpQuIiwiR28gdG8gdGhlIGxlZnQuIiwwXSxbIuqyveywsOyXkCDsi6Dqs6DtlojslrTsmpQuIiwiSSByZXBvcnRlZCBpdCB0byB0aGUgcG9saWNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+loeKdk/CfmYIiLG5hcjoiVGhlIGNhZsOpIGlzIHBhY2tlZCDigJQgbm90IGEgc2luZ2xlIGZyZWUgdGFibGUgaW4gc2lnaHQuIix3aG86IvCfp5HigI3wn42zIOuwlOumrOyKpO2DgCIsa3I6IuuTnOyLnOqzoCDqsIDshLjsmpQsIOyVhOuLiOuptCDtj6zsnqXsnbTshLjsmpQ/IixlbjoiRm9yIGhlcmUsIG9yIHRvIGdvPyIsY2g6W1si7J6Q66as6rCAIOyXhuycvOuLiOq5jCDtj6zsnqXtlbQg7KO87IS47JqULiIsIlRoZXJlIGFyZSBubyBzZWF0cywgc28gbWFrZSBpdCB0byBnbywgcGxlYXNlLiIsMV0sWyLrqLjrpqzqsIAg7JWE7YyM7JqULiIsIk15IGhlYWQgaHVydHMuIiwwXSxbIuq1kO2Gtey5tOuTnOulvCDstqnsoITtlbQg7KO87IS47JqULiIsIlBsZWFzZSByZWNoYXJnZSBteSB0cmFuc2l0IGNhcmQuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn5Kz8J+nvuKchSIsbmFyOiJUb3RhbDogMTEsMDAwIHdvbi4gVGltZSB0byBwYXkgYW5kIGNsYWltIHlvdXIgYnJlYWtmYXN0LiIsd2hvOiLwn6eR4oCN8J+NsyDrsJTrpqzsiqTtg4AiLGtyOiLrp4zsspwg7JuQ7J6F64uI64ukLiDslrTrlrvqsowg6rOE7IKw7ZWY7Iuc6rKg7Ja07JqUPyIsZW46IlRoYXQgaXMgMTEsMDAwIHdvbi4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIHBheT8iLGNoOltbIuy5tOuTnOuhnCDtlaDqsozsmpQuIOqwkOyCrO2VqeuLiOuLpCEiLCJCeSBjYXJkLCBwbGVhc2UuIFRoYW5rIHlvdSEiLDFdLFsi7Iug7Zi465Ox7JeQ7IScIOqxtOuEiOyEuOyalC4iLCJDcm9zcyBhdCB0aGUgdHJhZmZpYyBsaWdodC4iLDBdLFsi7ZG5IOyJrOyEuOyalC4iLCJSZXN0IHdlbGwuIiwwXV19XX0sCjM6e3Q6IvCfjZwgVGhlIExlZ2VuZGFyeSBOb29kbGUgSG91c2UiLCBzdGVwczpbCiB7Ymc6ImluZG9vciIsc2M6IvCfjZzwn5mL8J+loiIsbmFyOiJBIHRpbnkgcmVzdGF1cmFudCB3aXRoIGEgbG9uZyBsaW5lIOKAlCBhbHdheXMgYSBnb29kIHNpZ24uIFlvdSBmaW5hbGx5IGdldCBhIHRhYmxlLiIsd2hvOiLwn5mLIOyCrOyepeuLmCIsa3I6IuyWtOyEnCDsmKTshLjsmpQhIOutkCDrk5zrprTquYzsmpQ/IixlbjoiV2VsY29tZSEgV2hhdCBjYW4gSSBnZXQgeW91PyIsY2g6W1si66mU64m0IOyigCDso7zshLjsmpQuIOq3uOumrOqzoCDstpTsspztlbQg7KO87IS47JqUISIsIlRoZSBtZW51LCBwbGVhc2UuIEFuZCBwbGVhc2UgcmVjb21tZW5kIHNvbWV0aGluZyEiLDFdLFsi67Cp7J20IOuqhyDtmLjsmIjsmpQ/IiwiV2hhdCBpcyBteSByb29tIG51bWJlcj8iLDBdLFsi67C065OcIOyigCDso7zshLjsmpQuIiwiQSBiYW5kLWFpZCwgcGxlYXNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+Mtu+4j/CfmLDinZMiLG5hcjoiU2hlIHBvaW50cyBhdCB0aGUgaG91c2Ugc3BlY2lhbC4gSXQgaXMgR0xPV0lORyByZWQuIFlvdSBoYXZl4oCmIHF1ZXN0aW9ucy4iLHdobzoi8J+ZiyDsgqzsnqXri5giLGtyOiLsnbTqsowg7KCc7J28IOunm+yeiOyWtOyalC4g66ek7Jq0IOq1reyImOyYiOyalCEiLGVuOiJUaGlzIGlzIHRoZSBiZXN0IOKAlCBzcGljeSBub29kbGVzISIsY2g6W1si66eO7J20IOunpOybjOyalD8g7JWIIOunteqyjCDtlaAg7IiYIOyeiOyWtOyalD8iLCJJcyBpdCB2ZXJ5IHNwaWN5PyBDYW4geW91IG1ha2UgaXQgbm90IHNwaWN5PyIsMV0sWyLqtZDthrXsubTrk5wg7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIGEgdHJhbnNpdCBjYXJkPyIsMF0sWyLssrTtgazsnbjtlZjqs6Ag7Iu27Ja07JqULiIsIkkgd291bGQgbGlrZSB0byBjaGVjayBpbi4iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfpaLwn5iL8J+NnCIsbmFyOiJUaGUgbm9vZGxlcyBhcnJpdmUg4oCUIG1pbGQgdmVyc2lvbiwgaW5jcmVkaWJsZSBzbWVsbC4gVGhlIHNpZGUgZGlzaGVzIHZhbmlzaCBmYXN0LiIsd2hvOiLwn5mLIOyCrOyepeuLmCIsa3I6Iuunm+ydtCDslrTrlYzsmpQ/IixlbjoiSG93IGlzIHRoZSB0YXN0ZT8iLGNoOltbIuygleunkCDrp5vsnojslrTsmpQhIOuwmOywrCDrjZQg7KO87IS47JqULiIsIlJlYWxseSBkZWxpY2lvdXMhIE1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLDFdLFsi66qHIO2YuOyEoOydhCDtg4Dslbwg7ZW07JqUPyIsIldoaWNoIGxpbmUgc2hvdWxkIEkgdGFrZT8iLDBdLFsi7Ius7Ius7ZW07JqULiIsIkkgYW0gYm9yZWQuIiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLwn6e+8J+SsPCfmIoiLG5hcjoiQm93bHMgZW1wdHksIHN0b21hY2ggZnVsbCwgaGVhcnQgaGFwcHkuIFRpbWUgdG8gc2V0dGxlIHVwIGF0IHRoZSBjb3VudGVyLiIsd2hvOiLwn5mLIOyCrOyepeuLmCIsa3I6Iu2MlOyynCDsm5DsnoXri4jri6QhIixlbjoiVGhhdCB3aWxsIGJlIDgsMDAwIHdvbiEiLGNoOltbIuyXrOq4sOyalC4g7J6YIOuoueyXiOyKteuLiOuLpCEg65iQIOyYrOqyjOyalC4iLCJIZXJlIHlvdSBnby4gVGhhbmsgeW91IGZvciB0aGUgbWVhbCEgSSB3aWxsIGNvbWUgYWdhaW4uIiwxXSxbIuyynOyynO2eiCDrp5DtlbQg7KO87IS47JqULiIsIlBsZWFzZSBzcGVhayBzbG93bHkuIiwwXSxbIuuLpOuluCDsg4nquZTrj4Qg7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIG90aGVyIGNvbG9ycz8iLDBdXX1dfSwKNDp7dDoi8J+Xuu+4jyBUaGUgSGlkZGVuIEJvb2tzaG9wIiwgc3RlcHM6Wwoge2JnOiJjaXR5IixzYzoi8J+TsfCfmJXwn4+Z77iPIixuYXI6IkEgZnJpZW5kIHRvbGQgeW91IGFib3V0IGEgbWFnaWNhbCBsaXR0bGUgYm9va3Nob3AuIFlvdXIgbWFwIGFwcCBzYXlzIHlvdSBoYXZlIGFycml2ZWQuIFlvdSBjbGVhcmx5IGhhdmUgbm90LiIsd2hvOiLwn5q2IO2WieyduCIsa3I6IuutkCDssL7snLzshLjsmpQ/IOuPhOyZgOuTnOumtOq5jOyalD8iLGVuOiJMb29raW5nIGZvciBzb21ldGhpbmc/IENhbiBJIGhlbHA/IixjaDpbWyLrhKQhIO2VnOu5myDshJzsoJDsnbQg7Ja065SU7JiI7JqUPyIsIlllcyEgV2hlcmUgaXMgSGFuYml0IEJvb2tzaG9wPyIsMV0sWyLshKTtg5Ug67m8IOyjvOyEuOyalC4iLCJObyBzdWdhciwgcGxlYXNlLiIsMF0sWyLtlZjro7vrsKTsl5Ag7Ja866eI7JiI7JqUPyIsIkhvdyBtdWNoIGZvciBvbmUgbmlnaHQ/IiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+apvCfkYninpUiLG5hcjoiSGUgcG9pbnRzIGRvd24gdGhlIHN0cmVldCB3aXRoIGNvbmZpZGVuY2UuIix3aG86IvCfmrYg7ZaJ7J24Iixrcjoi7J20IOq4uOuhnCDsrYkg6rCA7IS47JqULiDqt7jrpqzqs6Ag7IKs6rGw66as7JeQ7IScIOyZvOyqveycvOuhnCDrj4TshLjsmpQuIixlbjoiR28gc3RyYWlnaHQgYWxvbmcgdGhpcyByb2FkLCB0aGVuIHR1cm4gbGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uLiIsY2g6W1si7IKs6rGw66as7JeQ7IScIOyZvOyqveydtOyalD8g7Jes6riw7IScIOqwgOq5jOybjOyalD8iLCJMZWZ0IGF0IHRoZSBpbnRlcnNlY3Rpb24/IElzIGl0IGNsb3NlIHRvIGhlcmU/IiwxXSxbIuqwkOq4sOyXkCDqsbjrprAg6rKDIOqwmeyVhOyalC4iLCJJIHRoaW5rIEkgY2F1Z2h0IGEgY29sZC4iLDBdLFsi7ISg66y8IO2PrOyepSDrj7zsmpQ/IiwiQ2FuIHlvdSBnaWZ0LXdyYXAgaXQ/IiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+atuKshe+4j/Cfj6IiLG5hcjoiRml2ZSBtaW51dGVzIG9uIGZvb3QsIGhlIHNheXMuIFlvdSBmb2xsb3cgdGhlIHJvYWQsIHR1cm4gbGVmdOKApiBhbmQgc2VlIGEgc21hbGwgYmFuayBvbiB0aGUgY29ybmVyLiIsd2hvOiLwn5q2IO2WieyduCIsa3I6IuydgO2WiSDrs7TsnbTso6A/IOyEnOygkOydgCDqt7gg7J2A7ZaJIOuwlOuhnCDsmIbsl5Ag7J6I7Ja07JqULiIsZW46IlNlZSB0aGUgYmFuaz8gVGhlIGJvb2tzaG9wIGlzIHJpZ2h0IG5leHQgdG8gaXQuIixjaDpbWyLslYQsIOydgO2WiSDsmIbsnbTsmpQhIOqwkOyCrO2VqeuLiOuLpCEiLCJBaCwgbmV4dCB0byB0aGUgYmFuayEgVGhhbmsgeW91ISIsMV0sWyLtlZjrgpgg642UIOyjvOyEuOyalC4iLCJPbmUgbW9yZSwgcGxlYXNlLiIsMF0sWyLrrLjsnpDroZwg67O064K0IOyjvOyEuOyalC4iLCJQbGVhc2Ugc2VuZCBpdCBieSB0ZXh0LiIsMF1dfSwKIHtiZzoiZGF3biIsc2M6IvCfk5rinKjwn5iKIixuYXI6IlRoZXJlIGl0IGlzIOKAlCB3YXJtIGxpZ2h0LCB3b29kZW4gc2hlbHZlcywgYSBzbGVlcGluZyBjYXQgaW4gdGhlIHdpbmRvdy4gV29ydGggZXZlcnkgd3JvbmcgdHVybi4iLHdobzoi8J+TmiDso7zsnbgiLGtyOiLslrTshJwg7Jik7IS47JqULiDsnpgg7LC+7JWE7Jik7IWo64Sk7JqUISIsZW46IldlbGNvbWUuIFlvdSBmb3VuZCB1cyB3ZWxsISIsY2g6W1si64SkLCDquLjsnYQg66y87Ja067SQ7IScIOyZlOyWtOyalC4g7Jes6riwIOygleunkCDsoovrhKTsmpQhIiwiWWVzLCBJIGFza2VkIGZvciBkaXJlY3Rpb25zLiBUaGlzIHBsYWNlIGlzIHdvbmRlcmZ1bCEiLDFdLFsi65Sw66GcIOqzhOyCsO2VtCDso7zshLjsmpQuIiwiU2VwYXJhdGUgYmlsbHMsIHBsZWFzZS4iLDBdLFsi7JW97IaNIOyLnOqwhOydhCDrsJTqv4Ag7IiYIOyeiOyWtOyalD8iLCJDYW4gd2UgY2hhbmdlIHRoZSBtZWV0aW5nIHRpbWU/IiwwXV19XX0sCjU6e3Q6IvCfmocgQ29uY2VydCBBY3Jvc3MgVG93biIsIHN0ZXBzOlsKIHtiZzoiY2l0eSIsc2M6IvCfjqvwn5WW8J+ahyIsbmFyOiJZb3Ugc2NvcmVkIGEgdGlja2V0IHRvIHRvbmlnaHQncyBjb25jZXJ0IOKAlCBidXQgdGhlIHZlbnVlIGlzIGFjcm9zcyB0aGUgY2l0eSBhbmQgZG9vcnMgb3BlbiBpbiBvbmUgaG91ci4gQSBzdGF0aW9uIGF0dGVuZGFudCBpcyBuZWFyYnkuIix3aG86IvCfp5HigI3inIjvuI8g7Jet66y07JuQIixrcjoi64SkLCDrrZgg64+E7JmA65Oc66a06rmM7JqUPyIsZW46IlllcywgaG93IGNhbiBJIGhlbHAgeW91PyIsY2g6W1si7Jis66a87ZS9IOqzteybkOq5jOyngCDslrTrlrvqsowg6rCA7JqUPyDrqocg7Zi47ISg7J207JeQ7JqUPyIsIkhvdyBkbyBJIGdldCB0byBPbHltcGljIFBhcms/IFdoaWNoIGxpbmUgaXMgaXQ/IiwxXSxbIuy5mOymiCDsvIDsnbTtgawg7ZWY64KYIOyjvOyEuOyalC4iLCJPbmUgY2hlZXNlY2FrZSwgcGxlYXNlLiIsMF0sWyLruajrpqwg64KY7Jy87IS47JqUISIsIkdldCB3ZWxsIHNvb24hIiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+UgPCfmonwn5e677iPIixuYXI6IkhlIGNoZWNrcyB0aGUgbWFwIGFuZCB0cmFjZXMgdGhlIHJvdXRlIHdpdGggaGlzIGZpbmdlci4iLHdobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AiLGtyOiIy7Zi47ISg7J2EIO2DgOyEuOyalC4g6re466as6rOgIOyeoOyLpOyXreyXkOyEnCA47Zi47ISg7Jy866GcIOqwiOyVhO2DgOyEuOyalC4iLGVuOiJUYWtlIGxpbmUgMiwgdGhlbiB0cmFuc2ZlciB0byBsaW5lIDggYXQgSmFtc2lsIFN0YXRpb24uIixjaDpbWyLsnqDsi6Tsl63sl5DshJwg6rCI7JWE7YOA7JqUPyDslrzrp4jrgpgg6rG466Ck7JqUPyIsIlRyYW5zZmVyIGF0IEphbXNpbD8gSG93IGxvbmcgZG9lcyBpdCB0YWtlPyIsMV0sWyLsnoXslrQg67SQ64+EIOuPvOyalD8iLCJNYXkgSSB0cnkgaXQgb24/IiwwXSxbIuuVhey9qSDslYzroIjrpbTquLDqsIAg7J6I7Ja07JqULiIsIkkgaGF2ZSBhIHBlYW51dCBhbGxlcmd5LiIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLwn5qH8J+YheKPsCIsbmFyOiI0MCBtaW51dGVzLCBoZSBzYXlzLiBUaWdodCBidXQgZG9hYmxlLiBPbiB0aGUgdHJhaW4sIGFuIGFubm91bmNlbWVudCBjcmFja2xlcyDigJQgeW91IGNhdGNoIHRoZSB3b3JkIOyeoOyLpCEiLHdobzoi8J+ToiDslYjrgrTrsKnshqEiLGtyOiLsnbTrsogg7Jet7J2AIOyeoOyLpCwg7J6g7Iuk7Jet7J6F64uI64ukLiIsZW46IlRoaXMgc3RvcCBpcyBKYW1zaWwsIEphbXNpbCBTdGF0aW9uLiIsY2g6W1si7Jes6riw7IScIOuCtOugpOyEnCA47Zi47ISg7Jy866GcIOqwiOyVhO2DgOyVvCDtlbTsmpQhIiwiSSBuZWVkIHRvIGdldCBvZmYgaGVyZSBhbmQgdHJhbnNmZXIgdG8gbGluZSA4ISIsMV0sWyLrsJjssKwg642UIOyjvOyEuOyalC4iLCJNb3JlIHNpZGUgZGlzaGVzLCBwbGVhc2UuIiwwXSxbIuyZgOydtO2MjOydtCDruYTrsIDrsojtmLjqsIAg662Q7JiI7JqUPyIsIldoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/IiwwXV19LAoge2JnOiJuaWdodCIsc2M6IvCfmpXwn4628J+Pn++4jyIsbmFyOiJMaW5lIDggaXMgZGVsYXllZCEgRW1lcmdlbmN5IHBsYW46IHRheGkgZm9yIHRoZSBsYXN0IHN0cmV0Y2guIFRoZSBkcml2ZXIgbm9kcyBhcyB0aGUgYXJlbmEgbGlnaHRzIGFwcGVhci4iLHdobzoi8J+alSDquLDsgqzri5giLGtyOiLqs7Xsl7DsnqUg7KCV66y4IOyVnuyXkCDshLjsm4wg65Oc66a06rmM7JqUPyIsZW46IlNoYWxsIEkgc3RvcCBpbiBmcm9udCBvZiB0aGUgbWFpbiBnYXRlPyIsY2g6W1si64SkISDsoIDquLAg7J6F6rWsIOyVnuyXkOyEnCDshLjsm4wg7KO87IS47JqUISIsIlllcyEgUGxlYXNlIHN0b3AgaW4gZnJvbnQgb2YgdGhhdCBlbnRyYW5jZSEiLDFdLFsi66qw65287JqULiIsIkkgZG8gbm90IGtub3cuIiwwXSxbIuyEpO2DlSDrubwg7KO87IS47JqULiIsIk5vIHN1Z2FyLCBwbGVhc2UuIiwwXV19XX0sCjY6e3Q6IvCfm43vuI8gR2lmdCBIdW50IGF0IHRoZSBNYXJrZXQiLCBzdGVwczpbCiB7Ymc6InNob3AiLHNjOiLwn46B8J+klPCfj6oiLG5hcjoiWW91ciBiZXN0IGZyaWVuZCdzIGJpcnRoZGF5IGlzIHRvbW9ycm93LiBUaGUgdHJhZGl0aW9uYWwgbWFya2V0IGlzIGJ1enppbmcg4oCUIGFuZCBvbmUgc2NhcmYgc3RhbGwgY2F0Y2hlcyB5b3VyIGV5ZS4iLHdobzoi8J+nkyDsgqzsnqXri5giLGtyOiLslrTshJwg7Jik7IS47JqUISDqtazqsr3tlZjqs6Ag6rCA7IS47JqUISIsZW46IldlbGNvbWUhIENvbWUgdGFrZSBhIGxvb2shIixjaDpbWyLsnbQg7Iqk7Lm07ZSEIOyYiOyBmOuEpOyalC4g7Ja866eI7JiI7JqUPyIsIlRoaXMgc2NhcmYgaXMgcHJldHR5LiBIb3cgbXVjaCBpcyBpdD8iLDFdLFsi7Je07J20IOyigCDsnojslrTsmpQuIiwiSSBoYXZlIGEgc2xpZ2h0IGZldmVyLiIsMF0sWyLssrTtgazsnbjtlZjqs6Ag7Iu27Ja07JqULiIsIkkgd291bGQgbGlrZSB0byBjaGVjayBpbi4iLDBdXX0sCiB7Ymc6InNob3AiLHNjOiLwn5Kw8J+YsuKcgu+4jyIsbmFyOiIzNSwwMDAgd29uPyEgRm9yIHRoYXQgcHJpY2UgaXQgc2hvdWxkIGNvbWUgd2l0aCBhIGZyZWUgbHVuY2guIFRpbWUgdG8gbmVnb3RpYXRlLCBtYXJrZXQtc3R5bGUuIix3aG86IvCfp5Mg7IKs7J6l64uYIixrcjoi7IK866eMIOyYpOyynCDsm5DsnbTsl5DsmpQuIO2SiOyniOydtCDslYTso7wg7KKL7JWE7JqUISIsZW46Ikl0IGlzIDM1LDAwMCB3b24uIFRoZSBxdWFsaXR5IGlzIGV4Y2VsbGVudCEiLGNoOltbIuuEiOustCDruYTsi7jsmpQhIOyhsOq4iOunjCDquY7slYQg7KO87IS47JqULiIsIlRoYXQgaXMgdG9vIGV4cGVuc2l2ZSEgUGxlYXNlIGdpdmUgbWUgYSBzbWFsbCBkaXNjb3VudC4iLDFdLFsi64uk7IucIO2VnOuyiCDrp5DtlbQg7KO87IS47JqULiIsIlBsZWFzZSBzYXkgdGhhdCBhZ2Fpbi4iLDBdLFsi7ZG5IOyJrOyEuOyalC4iLCJSZXN0IHdlbGwuIiwwXV19LAoge2JnOiJzaG9wIixzYzoi8J+OqOKdk/Cfp6MiLG5hcjoiU2hlIGxhdWdocyBhbmQgZHJvcHMgaXQgdG8gMjgsMDAwLiBQcm9ncmVzcyEgQnV0IHlvdXIgZnJpZW5kJ3MgZmF2b3JpdGUgY29sb3IgaXMgYmx1ZeKApiIsd2hvOiLwn6eTIOyCrOyepeuLmCIsa3I6Iuyii+yVhOyalCwg7J2066eMIO2MlOyynCDsm5AhIOydtCDruajqsITsg4kg7Ja065WM7JqUPyIsZW46IkZpbmUsIDI4LDAwMCEgSG93IGFib3V0IHRoaXMgcmVkIG9uZT8iLGNoOltbIu2YueyLnCDtjIzrnoDsg4nrj4Qg7J6I7Ja07JqUPyDshKDrrLzsnbTsl5DsmpQuIiwiRG8geW91IGhhdmUgaXQgaW4gYmx1ZT8gSXQgaXMgYSBnaWZ0LiIsMV0sWyLrsLDqsIAg64SI66y0IOyVhO2MjOyalC4iLCJNeSBzdG9tYWNoIHJlYWxseSBodXJ0cy4iLDBdLFsi64uk7J2MIOygleulmOyepeyXkOyEnCDrgrTrpqzshLjsmpQuIiwiR2V0IG9mZiBhdCB0aGUgbmV4dCBzdG9wLiIsMF1dfSwKIHtiZzoic2hvcCIsc2M6IvCfjoHwn5KZ8J+YiiIsbmFyOiJTaGUgZGlncyBvdXQgYSBiZWF1dGlmdWwgYmx1ZSBvbmUgQU5EIHdyYXBzIGl0IGFzIGEgZ2lmdC4gTWFya2V0IGdyYW5kbW90aGVycyBhcmUgdGhlIGJlc3QuIix3aG86IvCfp5Mg7IKs7J6l64uYIixrcjoi7ISg66y8IO2PrOyepSDtlbQg65Oc66a06rKM7JqULiDsuZzqtazqsIAg7KKL7JWE7ZWgIOqxsOyYiOyalCEiLGVuOiJJIHdpbGwgZ2lmdC13cmFwIGl0IGZvciB5b3UuIFlvdXIgZnJpZW5kIHdpbGwgbG92ZSBpdCEiLGNoOltbIuqwkOyCrO2VqeuLiOuLpCEg7Lm065OcIOuPvOyalD8iLCJUaGFuayB5b3UhIERvIHlvdSB0YWtlIGNhcmRzPyIsMV0sWyLsoIDripQg7Ius7Ius7ZW07JqULiIsIkkgYW0gYm9yZWQuIiwwXSxbIuuzkeybkOyXkCDqsIAg67O07IS47JqULiIsIllvdSBzaG91bGQgZ28gc2VlIGEgZG9jdG9yLiIsMF1dfV19LAo3Ont0OiLwn5KsIFRoZSBIaWtpbmcgQ2x1YiBOZXdiaWUiLCBzdGVwczpbCiB7Ymc6Im5hdHVyZSIsc2M6IuKbsO+4j/CfmYLwn5GfIixuYXI6IllvdSBqb2luZWQgYSBsb2NhbCBoaWtpbmcgY2x1YiB0byBtZWV0IHBlb3BsZS4gQXQgdGhlIHRyYWlsaGVhZCwgYW5vdGhlciBtZW1iZXIgZmFsbHMgaW4gc3RlcCBiZXNpZGUgeW91LiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuyViOuFle2VmOyEuOyalCEg7LKY7J2MIOyYpOyFqOyjoD8g7Jik64qYIOuCoOyUqCDsp4Tsp5wg7KKL64Sk7JqUISIsZW46IkhpISBGaXJzdCB0aW1lIGhlcmUsIHJpZ2h0PyBUaGUgd2VhdGhlciBpcyBhbWF6aW5nIHRvZGF5ISIsY2g6W1si64SkLCDsspjsnYzsnbTsl5DsmpQhIOuCoOyUqOqwgCDsoJXrp5Ag7KKL7JWE7JqULiIsIlllcywgaXQgaXMgbXkgZmlyc3QgdGltZSEgVGhlIHdlYXRoZXIgaXMgcmVhbGx5IG5pY2UuIiwxXSxbIuqzhOyCsOyEnCDso7zshLjsmpQuIiwiVGhlIGJpbGwsIHBsZWFzZS4iLDBdLFsi7ZmY67aIIOuPvOyalD8iLCJDYW4gSSBnZXQgYSByZWZ1bmQ/IiwwXV19LAoge2JnOiJuYXR1cmUiLHNjOiLwn46o8J+OtfCfpJQiLG5hcjoiVGhlIHRyYWlsIHdpbmRzIHVwIGdlbnRseS4gVGltZSBmb3IgdGhlIGNsYXNzaWMgZ2V0dGluZy10by1rbm93LXlvdSBxdWVzdGlvbi4iLHdobzoi8J+ZgiDsp4DsiJgiLGtyOiLrk7HsgrAg66eQ6rOgIOy3qOuvuOqwgCDrrZDsmIjsmpQ/IixlbjoiQmVzaWRlcyBoaWtpbmcsIHdoYXQgYXJlIHlvdXIgaG9iYmllcz8iLGNoOltbIuyggOuKlCDsmpTrpqztlZjripQg6rKD7J2EIOyii+yVhO2VtOyalC4g7KeA7IiYIOyUqOuKlOyalD8iLCJJIGxpa2UgY29va2luZy4gSG93IGFib3V0IHlvdSwgSmlzdT8iLDFdLFsi7J2067KIIOyXreydgCDsnqDsi6TsnoXri4jri6QuIiwiVGhpcyBzdG9wIGlzIEphbXNpbC4iLDBdLFsi67SJ7YisIO2VhOyalCDsl4bslrTsmpQuIiwiSSBkbyBub3QgbmVlZCBhIGJhZy4iLDBdXX0sCiB7Ymc6Im5hdHVyZSIsc2M6IvCfmLLwn42c8J+SrCIsbmFyOiJIZXIgZXllcyBsaWdodCB1cCDigJQgc2hlIGlzIGEgY2VydGlmaWVkIGZvb2RpZS4gWW91IG1lbnRpb24gdGhlIGxlZ2VuZGFyeSBub29kbGUgaG91c2UgeW91IGZvdW5kLiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuynhOynnOyalD8g7KCA64+EIOq1reyImCDsmYTsoIQg7KKL7JWE7ZW07JqUISDqsbDquLAg7Ja065SU7JiI7JqUPyIsZW46IlJlYWxseT8gSSBMT1ZFIG5vb2RsZXMgdG9vISBXaGVyZSBpcyB0aGF0IHBsYWNlPyIsY2g6W1si7Iuc7J6lIOq3vOyymOyXkCDsnojslrTsmpQuIOuLpOydjOyXkCDqsJnsnbQg6rCI656Y7JqUPyIsIkl0IGlzIG5lYXIgdGhlIG1hcmtldC4gU2hhbGwgd2UgZ28gdG9nZXRoZXIgc29tZXRpbWU/IiwxXSxbIuyXtOydtCDrgpjsmpQuIiwiSSBoYXZlIGEgZmV2ZXIuIiwwXSxbIuq1kO2Gtey5tOuTnOulvCDstqnsoITtlbQg7KO87IS47JqULiIsIlBsZWFzZSByZWNoYXJnZSBteSB0cmFuc2l0IGNhcmQuIiwwXV19LAoge2JnOiJkYXduIixzYzoi8J+MhPCfpJ3wn5OxIixuYXI6IlN1bW1pdCByZWFjaGVkISBDaXR5IHZpZXcsIHZpY3Rvcnkgc25hY2tzLCBhbmQg4oCUIGV2ZW4gYmV0dGVyIOKAlCBhIG5ldyBmcmllbmQuIix3aG86IvCfmYIg7KeA7IiYIixrcjoi7KKL7JWE7JqUISDsl7Drnb3sspgg7JWM66CkIOyjvOyEuOyalC4g7KO866eQ7J2AIOyWtOuVjOyalD8iLGVuOiJEZWFsISBHaXZlIG1lIHlvdXIgbnVtYmVyLiBIb3cgYWJvdXQgdGhpcyB3ZWVrZW5kPyIsY2g6W1si7KO866eQIOyii+yVhOyalCEg7Yag7JqU7J287JeQIOunjOuCmOq4sOuhnCDtlbTsmpQuIiwiVGhlIHdlZWtlbmQgd29ya3MhIExldCB1cyBtZWV0IG9uIFNhdHVyZGF5LiIsMV0sWyLso4TshqHtlZjsp4Drp4wg7J6YIOuqsOudvOyalC4iLCJTb3JyeSwgSSBkbyBub3QgcmVhbGx5IGtub3cuIiwwXSxbIuyVveq1reydtCDslrTrlJTsl5Ag7J6I7Ja07JqUPyIsIldoZXJlIGlzIGEgcGhhcm1hY3k/IiwwXV19XX0sCjg6e3Q6IvCfk7EgVGhlIER5aW5nIFBob25lIENyaXNpcyIsIHN0ZXBzOlsKIHtiZzoibmlnaHQiLHNjOiLwn5Ox8J+Ui/CfmLEiLG5hcjoiWW91IGFyZSBtZWV0aW5nIEppc3UgYXQgNy4gSXQgaXMgNjo0MCwgeW91IGFyZSBvbiB0aGUgYnVzLCBhbmQgeW91ciBwaG9uZSBzaG93cyAyJSBiYXR0ZXJ5LiBJdCByaW5ncyDigJQgSmlzdSEiLHdobzoi8J+TsSDsp4DsiJgiLGtyOiLsl6zrs7TshLjsmpQhIOyngOq4iCDslrTrlJTsmIjsmpQ/IixlbjoiSGVsbG8hIFdoZXJlIGFyZSB5b3Ugbm93PyIsY2g6W1si67KE7Iqk7JeQ7IScIOqwgOqzoCDsnojslrTsmpQhIOyhsOq4iCDriqbslrTsmpQsIOuvuOyViO2VtOyalCEiLCJJIGFtIG9uIHRoZSBidXMgb24gbXkgd2F5ISBJIGFtIGEgbGl0dGxlIGxhdGUsIHNvcnJ5ISIsMV0sWyLsnbTqsbAg7J6F7Ja0IOu0kOuPhCDrj7zsmpQ/IiwiTWF5IEkgdHJ5IHRoaXMgb24/IiwwXSxbIuuwmOywrCDrjZQg7KO87IS47JqULiIsIk1vcmUgc2lkZSBkaXNoZXMsIHBsZWFzZS4iLDBdXX0sCiB7Ymc6Im5pZ2h0IixzYzoi8J+Ui+KaofCfmLAiLG5hcjoiMSUuIFlvdSB0YWxrIGZhc3Qg4oCUIHRoZXJlIGlzIG9uZSBjcnVjaWFsIHRoaW5nIHRvIHNheSBiZWZvcmUgdGhlIHNjcmVlbiBnb2VzIGRhcmsuIix3aG86IvCfk7Eg7KeA7IiYIixrcjoi6rSc7LCu7JWE7JqULCDsspzsspztnogg7Jik7IS47JqUISDqt7zrjbAg66qp7IaM66as6rCAIOyZnCDqt7jrnpjsmpQ/IixlbjoiTm8gcHJvYmxlbSwgdGFrZSB5b3VyIHRpbWUhIEJ1dCB3aHkgZG8geW91IHNvdW5kIHN0cmVzc2VkPyIsY2g6W1si7Zy064yA7Y+wIOuwsO2EsOumrOqwgCDsl4bslrTsmpQhIOy5tO2OmCDslZ7sl5DshJwg6riw64uk66CkIOyjvOyEuOyalCEiLCJNeSBwaG9uZSBiYXR0ZXJ5IGlzIGR5aW5nISBQbGVhc2Ugd2FpdCBpbiBmcm9udCBvZiB0aGUgY2Fmw6khIiwxXSxbIuyVveq1reydtCDslrTrlJTsl5Ag7J6I7Ja07JqUPyIsIldoZXJlIGlzIHRoZSBwaGFybWFjeT8iLDBdLFsi7J206rKMIOuNlCDsi7jsmpQuIiwiVGhpcyBvbmUgaXMgY2hlYXBlci4iLDBdXX0sCiB7Ymc6Im5pZ2h0IixzYzoi8J+TtfCfmozwn6SeIixuYXI6IkJsYWNrIHNjcmVlbi4gTm8gbWFwLCBubyBtZXNzYWdlcyDigJQgb2xkIHNjaG9vbCBuYXZpZ2F0aW9uIG9ubHkuIFlvdSBzcG90IGEgbGFuZG1hcms6IHRoZSBiaWcgYmFuayBmcm9tIGxhc3Qgd2VlayEiLHdobzoi8J+noCAo7IOd6rCBKSIsa3I6IijsnYDtlonigKYg6re4IOyYhuyXkCDshJzsoJDigKYg7Lm07Y6Y64qUIOq3uCDslZ7snbTslbwhKSIsZW46IihUaGUgYmFua+KApiB0aGUgYm9va3Nob3AgbmV4dCB0byBpdOKApiB0aGUgY2Fmw6kgaXMgcmlnaHQgaW4gZnJvbnQhKSIsY2g6W1si7Jes6riw7IScIOuCtOugpOyEnCDqsbjslrTqsIDslbzqsqDslrTsmpQhIiwiSSBzaG91bGQgZ2V0IG9mZiBoZXJlIGFuZCB3YWxrISIsMV0sWyLtlZjro6jsl5Ag7IS4IOuyiCDrk5zshLjsmpQuIiwiVGFrZSBpdCB0aHJlZSB0aW1lcyBhIGRheS4iLDBdLFsi66qHIOyLnOyXkCDssrTtgazsnbjtlbTsmpQ/IiwiV2hhdCB0aW1lIGlzIGNoZWNrLWluPyIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLimJXwn5iF8J+ZjCIsbmFyOiI3OjA0IHBtLiBZb3Ugam9nIGFyb3VuZCB0aGUgY29ybmVyIOKAlCBKaXN1IGlzIHRoZXJlLCB0d28gd2FybSBkcmlua3MgaW4gaGFuZCwgbGF1Z2hpbmcgYXQgeW91ciBkcmFtYXRpYyBhcnJpdmFsLiIsd2hvOiLwn5mCIOyngOyImCIsa3I6IuyZlOuEpOyalCEgNOu2hCDriqbsl4jslrTsmpQuIO2VmO2VmCEiLGVuOiJZb3UgbWFkZSBpdCEgRm91ciBtaW51dGVzIGxhdGUuIEhhaGEhIixjaDpbWyLriqbslrTshJwg66+47JWI7ZW07JqUISDri6TsnYzsl5DripQg7JWIIOuKpuydhOqyjOyalCwg7JW97IaN7ZW07JqUISIsIlNvcnJ5IGZvciBiZWluZyBsYXRlISBOZXh0IHRpbWUgSSB3aWxsIG5vdCBiZSBsYXRlLCBJIHByb21pc2UhIiwxXSxbIuydtOqxsCDslrzrp4jsmIjsmpQ/IiwiSG93IG11Y2ggaXMgdGhpcz8iLDBdLFsi7ZGcIOuRkCDsnqUg7KO87IS47JqULiIsIlR3byB0aWNrZXRzLCBwbGVhc2UuIiwwXV19XX0sCjk6e3Q6IvCfjq0gVGhlIFJhaW55IERheSBSZXNjdWUiLCBzdGVwczpbCiB7Ymc6ImRhd24iLHNjOiLwn4yn77iP8J+YlPCfk7EiLG5hcjoiU3VuZGF5IGV2ZW5pbmcuIEppc3UgdGV4dHMg4oCUIGhlciBiaWcgY29va2luZyBjb250ZXN0IGRpZCBub3QgZ28gd2VsbC4gU2hlIHNvdW5kcyBkb3duLiBZb3UgY2FsbCBoZXIgcmlnaHQgYXdheS4iLHdobzoi8J+TsSDsp4DsiJgiLGtyOiLsl6zrs7TshLjsmpTigKYg7JWELCDslYjrhZXtlZjshLjsmpQuIixlbjoiSGVsbG/igKYgb2gsIGhpLiIsY2g6W1si66qp7IaM66as6rCAIOyViCDsoovslYQg67O07Jes7JqULiDqtJzssK7slYTsmpQ/IiwiWW91IGRvIG5vdCBzb3VuZCBnb29kLiBBcmUgeW91IG9rYXk/IiwxXSxbIuuMgOuwlSEg7LaV7ZWY7ZW07JqUISIsIk5vIHdheSEgQ29uZ3JhdHVsYXRpb25zISIsMF0sWyLrtIntiKwg7ZWE7JqU7ZWY7IS47JqUPyIsIkRvIHlvdSBuZWVkIGEgYmFnPyIsMF1dfSwKIHtiZzoiZGF3biIsc2M6IvCfmJTwn6WI8J+SrCIsbmFyOiJTaGUgZ290IHNlY29uZCBwbGFjZSDigJQgb25lIHBvaW50IGJlaGluZCB0aGUgd2lubmVyLiBTbyBjbG9zZSBpdCBodXJ0cy4iLHdobzoi8J+TsSDsp4DsiJgiLGtyOiIx7KCQIOywqOydtOuhnCAy65OxIO2WiOyWtOyalOKApiDrhIjrrLQg7JWE7Ims7JuM7JqULiIsZW46IkkgZ290IHNlY29uZCBwbGFjZSBieSBvbmUgcG9pbnTigKYgaXQgaXMgc3VjaCBhIHBpdHkuIixjaDpbWyLsl5DsnbQsIDLrk7Hrj4Qg64yA64uo7ZW07JqUISDsoJXrp5Ag7J6Y7ZaI7Ja07JqUISIsIkhleSwgc2Vjb25kIHBsYWNlIGlzIGFtYXppbmchIFlvdSBkaWQgcmVhbGx5IHdlbGwhIiwxXSxbIuuqhyDtmLjshKDsnbTsl5DsmpQ/IiwiV2hpY2ggbGluZSBpcyBpdD8iLDBdLFsi7Y+s7J6l7ZW0IOyjvOyEuOyalC4iLCJUbyBnbywgcGxlYXNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+NnPCfkqrwn5mCIixuYXI6IllvdSBrbm93IGV4YWN0bHkgd2hhdCBmaXhlcyBhIGhhcmQgZGF5LiBZb3UgbmFtZSB0aGUgcGxhY2U7IHNoZSBjYW5ub3QgcmVzaXN0LiIsd2hvOiLwn5OxIOyngOyImCIsa3I6Iu2VmO2VmCwg6rOg66eI7JuM7JqULiDquLDrtoTsnbQg7KKAIOuCmOyVhOyhjOyWtOyalC4iLGVuOiJIYWhhLCB0aGFuayB5b3UuIEkgZmVlbCBhIGJpdCBiZXR0ZXIgbm93LiIsY2g6W1si67Cw6rOg7ZSE7KOgPyDqta3siJgg66i57Jy865+sIOqwgOyalCEg7KCc6rCAIOyCtOqyjOyalC4iLCJZb3UgYXJlIGh1bmdyeSwgcmlnaHQ/IExldCB1cyBnZXQgbm9vZGxlcyEgTXkgdHJlYXQuIiwxXSxbIuyYpOuluOyqveycvOuhnCDrj4TshLjsmpQuIiwiVHVybiByaWdodC4iLDBdLFsi67CpIO2CpOulvCDsnoPslrTrsoTroLjslrTsmpQuIiwiSSBsb3N0IHRoZSByb29tIGtleS4iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfjZzwn5iE8J+lgiIsbmFyOiJPdmVyIHN0ZWFtaW5nIGJvd2xzLCB0aGUgY29udGVzdCBiZWNvbWVzIGEgZnVubnkgc3RvcnkgaW5zdGVhZCBvZiBhIHNhZCBvbmUuIE5leHQgeWVhciwgZ29sZC4iLHdobzoi8J+ZgiDsp4DsiJgiLGtyOiLrgrTrhYTsl5DripQg6rytIDHrk7Eg7ZWgIOqxsOyYiOyalCEiLGVuOiJOZXh0IHllYXIgSSB3aWxsIGRlZmluaXRlbHkgd2luIGZpcnN0IHBsYWNlISIsY2g6W1si64u57Jew7ZWY7KOgISDtmZTsnbTtjIUhIOyggOuKlCDsnZHsm5DtlaDqsozsmpQuIiwiT2YgY291cnNlISBGaWdodGluZyEgSSB3aWxsIGJlIGNoZWVyaW5nIGZvciB5b3UuIiwxXSxbIu2YhOq4iOunjCDrj7zsmpQ/IiwiSXMgaXQgY2FzaCBvbmx5PyIsMF0sWyLsp4DtlZjssqDsl63snbQg7Ja065SU7JiI7JqUPyIsIldoZXJlIGlzIHRoZSBzdWJ3YXkgc3RhdGlvbj8iLDBdXX1dfSwKMTA6e3Q6IvCfpJIgVGhlIENvbnZlbmllbmNlIFN0b3JlIERvY3RvciIsIHN0ZXBzOlsKIHtiZzoiZGF3biIsc2M6IvCfpKfwn5uP77iP8J+Moe+4jyIsbmFyOiJZb3Ugd2FrZSB1cCB3aXRoIGEgYnVybmluZyB0aHJvYXQgYW5kIGEgaGVhdnkgaGVhZC4gVGhlIGhpa2luZyB0cmlwIGlzIE9GRi4gVGltZSB0byBmaW5kIG1lZGljaW5lIOKAlCB0aGUgcGhhcm1hY3kgZmlyc3QuIix3aG86IuKale+4jyDslb3sgqwiLGtyOiLslrTshJwg7Jik7IS47JqULiDslrTrlJTqsIAg67aI7Y647ZWY7IS47JqUPyIsZW46IldlbGNvbWUuIFdoYXQgc2VlbXMgdG8gYmUgdGhlIHByb2JsZW0/IixjaDpbWyLslrTsoJzrtoDthLAg66qp7J20IOyVhO2UhOqzoCDsl7TsnbQg64KY7JqULiIsIlNpbmNlIHllc3RlcmRheSBteSB0aHJvYXQgaHVydHMgYW5kIEkgaGF2ZSBhIGZldmVyLiIsMV0sWyLsgqzqsbDrpqzsl5DshJwg7Jm87Kq97Jy866GcIOuPhOyEuOyalC4iLCJUdXJuIGxlZnQgYXQgdGhlIGludGVyc2VjdGlvbi4iLDBdLFsi7ISg66y8IO2PrOyepSDrj7zsmpQ/IiwiQ2FuIHlvdSBnaWZ0LXdyYXAgaXQ/IiwwXV19LAoge2JnOiJpbmRvb3IiLHNjOiLimpXvuI/wn5KK4p2TIixuYXI6IlRoZSBwaGFybWFjaXN0IG5vZHMga25vd2luZ2x5IGFuZCByZWFjaGVzIGZvciBhIGJveC4gQnV0IHlvdSByZW1lbWJlciBzb21ldGhpbmcgaW1wb3J0YW50LiIsd2hvOiLimpXvuI8g7JW97IKsIixrcjoi6rCQ6riw64Sk7JqULiDsnbQg7JW97J2EIOuTnOyEuOyalC4iLGVuOiJJdCBpcyBhIGNvbGQuIFRha2UgdGhpcyBtZWRpY2luZS4iLGNoOltbIuqwkOyCrO2VqeuLiOuLpC4g6re465+w642wIOyggOuKlCDrlYXsvakg7JWM66CI66W06riw6rCAIOyeiOyWtOyalC4g6rSc7LCu7JWE7JqUPyIsIlRoYW5rIHlvdS4gQnV0IEkgaGF2ZSBhIHBlYW51dCBhbGxlcmd5LiBJcyBpdCBva2F5PyIsMV0sWyLrtIntiKwg7ZWE7JqUIOyXhuyWtOyalC4iLCJJIGRvIG5vdCBuZWVkIGEgYmFnLiIsMF0sWyLqsJnsnbQg65Ox7IKwIOqwiOuemOyalD8iLCJXYW50IHRvIGdvIGhpa2luZyB0b2dldGhlcj8iLDBdXX0sCiB7Ymc6ImluZG9vciIsc2M6IvCfkorwn5Od8J+VkCIsbmFyOiJTYWZlIHRvIHRha2UuIE5vdyDigJQgdGhlIGNydWNpYWwgcXVlc3Rpb24gZXZlcnkgcGhhcm1hY2lzdCBleHBlY3RzLiIsd2hvOiLimpXvuI8g7JW97IKsIixrcjoi64SkLCDqtJzssK7slYTsmpQuIOyLneyCrCDtm4Tsl5Ag65Oc7IS47JqULiIsZW46IlllcywgaXQgaXMgZmluZS4gVGFrZSBpdCBhZnRlciBtZWFscy4iLGNoOltbIu2VmOujqOyXkCDrqocg67KIIOuoueyWtOyVvCDtlbTsmpQ/IiwiSG93IG1hbnkgdGltZXMgYSBkYXkgc2hvdWxkIEkgdGFrZSBpdD8iLDFdLFsi7Ja064qQIOuCmOudvOyXkOyEnCDsmZTslrTsmpQ/IiwiV2hpY2ggY291bnRyeSBhcmUgeW91IGZyb20/IiwwXSxbIuydtOqxsCDrhIjrrLQg7JiI67uQ7JqULiIsIlRoaXMgaXMgc28gcHJldHR5LiIsMF1dfSwKIHtiZzoibmlnaHQiLHNjOiLwn5uP77iP8J+NtfCfmLQiLG5hcjoiVGhyZWUgdGltZXMgYSBkYXksIGFmdGVyIG1lYWxzLCBhbmQg4oCUIHRoZSBwaGFybWFjaXN0IGluc2lzdHMg4oCUIFJFU1QuIEppc3UgdGV4dHM6ICdHZXQgYmV0dGVyIG9yIGVsc2UhIPCfmKQnIix3aG86IvCfk7Eg7KeA7IiYIixrcjoi7JW9IOuoueyXiOyWtOyalD8g7Jik64qY7J2AIO2RuSDsiazshLjsmpQhIixlbjoiRGlkIHlvdSB0YWtlIHRoZSBtZWRpY2luZT8gUmVzdCB3ZWxsIHRvZGF5ISIsY2g6W1si64SkLCDrqLnsl4jslrTsmpQuIOqxseygle2VmOyngCDrp4jshLjsmpQuIO2RuSDsibTqsozsmpQhIiwiWWVzLCBJIHRvb2sgaXQuIERvIG5vdCB3b3JyeS4gSSB3aWxsIHJlc3Qgd2VsbCEiLDFdLFsi65iQIOunjOuCmOyalCEiLCJTZWUgeW91IGFnYWluISIsMF0sWyLsnbQg67KE7Iqk6rCAIOyLnOyyreyXkCDqsIDsmpQ/IiwiRG9lcyB0aGlzIGJ1cyBnbyB0byBDaXR5IEhhbGw/IiwwXV19XX0sCjExOnt0OiLwn6ezIFRoZSBTZWFzaWRlIEd1ZXN0aG91c2UiLCBzdGVwczpbCiB7Ymc6Im5hdHVyZSIsc2M6IvCfjIrwn5qJ8J+nsyIsbmFyOiJSZWNvdmVyZWQgYW5kIHJlc3RsZXNzLCB5b3UgYm9vayBhIHdlZWtlbmQgYnkgdGhlIHNlYS4gVGhlIGd1ZXN0aG91c2Ugc2l0cyBvbiBhIGhpbGwg4oCUIHRoZSBvd25lciB3YXZlcyBmcm9tIHRoZSBwb3JjaC4iLHdobzoi8J+ZgiDsgqzsnqXri5giLGtyOiLslrTshJwg7Jik7IS47JqUISDsmIjslb3tlZjshajslrTsmpQ/IixlbjoiV2VsY29tZSEgRG8geW91IGhhdmUgYSByZXNlcnZhdGlvbj8iLGNoOltbIuuEpCwg7Jio65287J247Jy866GcIOyYiOyVve2WiOyWtOyalC4g7LK07YGs7J247ZWY6rOgIOyLtuyWtOyalC4iLCJZZXMsIEkgcmVzZXJ2ZWQgb25saW5lLiBJIHdvdWxkIGxpa2UgdG8gY2hlY2sgaW4uIiwxXSxbIuuNnCDrp7Xqsowg7ZWgIOyImCDsnojslrTsmpQ/IiwiQ2FuIHlvdSBtYWtlIGl0IGxlc3Mgc3BpY3k/IiwwXSxbIuqyveywsOyXkCDsi6Dqs6DtlojslrTsmpQuIiwiSSByZXBvcnRlZCBpdCB0byB0aGUgcG9saWNlLiIsMF1dfSwKIHtiZzoiaW5kb29yIixzYzoi8J+UkfCfk7bwn5mCIixuYXI6IlJvb20gMjAzLCBvY2VhbiBzaWRlLiBCZWZvcmUgc2hlIGRpc2FwcGVhcnMsIGdyYWIgdGhlIHR3byBmYWN0cyBldmVyeSB0cmF2ZWxlciBuZWVkcy4iLHdobzoi8J+ZgiDsgqzsnqXri5giLGtyOiLrsKnsnYAgMjAz7Zi47JiI7JqULiDtlYTsmpTtlZwg6rGwIOyeiOycvOyEuOyalD8iLGVuOiJZb3VyIHJvb20gaXMgMjAzLiBEbyB5b3UgbmVlZCBhbnl0aGluZz8iLGNoOltbIuuEpCEg7JmA7J207YyM7J20IOu5hOuwgOuyiO2YuOqwgCDrrZDsmIjsmpQ/IOq3uOumrOqzoCDsobDsi53snYAg66qHIOyLnOyXkCDsi5zsnpHtlbTsmpQ/IiwiWWVzISBXaGF0IGlzIHRoZSB3aWZpIHBhc3N3b3JkPyBBbmQgd2hhdCB0aW1lIGRvZXMgYnJlYWtmYXN0IHN0YXJ0PyIsMV0sWyLrlLDroZwg6rOE7IKw7ZW0IOyjvOyEuOyalC4iLCJTZXBhcmF0ZSBiaWxscywgcGxlYXNlLiIsMF0sWyLsoIAg7KKAIOuPhOyZgOyjvOyEuOyalCEiLCJQbGVhc2UgaGVscCBtZSEiLDBdXX0sCiB7Ymc6Im5hdHVyZSIsc2M6IvCfjIXwn5O48J+ksyIsbmFyOiJUaGUgc3Vuc2V0IG92ZXIgdGhlIHdhdGVyIGlzIHVucmVhbC4gQSBjb3VwbGUgd2Fsa3MgYnkg4oCUIHBlcmZlY3QgcGhvdG8gb3Bwb3J0dW5pdHkgKGZvciB5b3UsIGJ5IHRoZW0pLiIsd2hvOiLwn5q2IOyXrO2WieqwnSIsa3I6IuuEpD8g662Q65286rOgIO2VmOyFqOyWtOyalD8iLGVuOiJZZXM/IFdoYXQgZGlkIHlvdSBzYXk/IixjaDpbWyLsgqzsp4Qg7KKAIOywjeyWtCDso7zsi5zqsqDslrTsmpQ/IOqyvey5mOqwgCDrhIjrrLQg7KKL7JWE7ISc7JqUISIsIkNvdWxkIHlvdSB0YWtlIGEgcGhvdG8gZm9yIG1lPyBUaGUgdmlldyBpcyBzbyBiZWF1dGlmdWwhIiwxXSxbIuyVveyGjeydhCDst6jshoztlbTslbwg7ZW07JqULiIsIkkgaGF2ZSB0byBjYW5jZWwgdGhlIHBsYW5zLiIsMF0sWyLsubTrk5zroZwg7ZWg6rKM7JqULiIsIkkgd2lsbCBwYXkgYnkgY2FyZC4iLDBdXX0sCiB7Ymc6Im5pZ2h0IixzYzoi8J+mkfCfjb3vuI/irZAiLG5hcjoiQmFjayBhdCB0aGUgZ3Vlc3Rob3VzZSwgdGhlIG93bmVyIGlzIGdyaWxsaW5nIHNvbWV0aGluZyB0aGF0IHNtZWxscyBpbmNyZWRpYmxlLiBPbmUgbGFzdCBxdWVzdGlvbiBiZWZvcmUgZGlubmVy4oCmIix3aG86IvCfmYIg7IKs7J6l64uYIixrcjoi64K07J287J2AIOutkCDtlaAg6rGw7JiI7JqUPyIsZW46IldoYXQgd2lsbCB5b3UgZG8gdG9tb3Jyb3c/IixjaDpbWyLqt7zsspjsl5Ag7Jyg66qF7ZWcIOq0gOq0keyngCDsnojslrTsmpQ/IOy2lOyynO2VtCDso7zshLjsmpQhIiwiQXJlIHRoZXJlIGZhbW91cyBzaWdodHMgbmVhcmJ5PyBQbGVhc2UgcmVjb21tZW5kIHNvbWUhIiwxXSxbIuygk+qwgOudvSDtlZjrgpgg642UIOyjvOyEuOyalC4iLCJPbmUgbW9yZSBwYWlyIG9mIGNob3BzdGlja3MsIHBsZWFzZS4iLDBdLFsi66y47J6Q66GcIOuztOuCtCDso7zshLjsmpQuIiwiU2VuZCBpdCBieSB0ZXh0LCBwbGVhc2UuIiwwXV19XX0sCjEyOnt0OiLwn4aYIFRoZSBMb3N0IFdhbGxldCBNaXJhY2xlIiwgc3RlcHM6Wwoge2JnOiJjaXR5IixzYzoi8J+Rm/CfmLHwn5qHIixuYXI6IkJhY2sgaW4gdGhlIGNpdHksIHlvdSByZWFjaCBmb3IgeW91ciB3YWxsZXQgYXQgdGhlIHR1cm5zdGlsZSDigJQgR09ORS4gQ2FyZHMsIGNhc2gsIGV2ZXJ5dGhpbmcuIERlZXAgYnJlYXRoLiBZb3UgYXBwcm9hY2ggYSBzdGF0aW9uIHdvcmtlci4iLHdobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AiLGtyOiLrrLTsiqgg7J287J207IS47JqUPyIsZW46IldoYXQgaXMgdGhlIG1hdHRlcj8iLGNoOltbIuyggCDsooAg64+E7JmA7KO87IS47JqUISDsp4DtlZjssqDsl5DshJwg7KeA6rCR7J2EIOyeg+yWtOuyhOuguOyWtOyalC4iLCJQbGVhc2UgaGVscCBtZSEgSSBsb3N0IG15IHdhbGxldCBvbiB0aGUgc3Vid2F5LiIsMV0sWyLslYTsnbTsiqQg7JWE66mU66as7Lm064W4IOyjvOyEuOyalC4iLCJBbiBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsMF0sWyLrgrTrhYTsl5DripQg6rytIDHrk7Eg7ZWgIOqxsOyYiOyalC4iLCJOZXh0IHllYXIgSSB3aWxsIHdpbiBmaXJzdCBwbGFjZS4iLDBdXX0sCiB7Ymc6ImNpdHkiLHNjOiLwn5ej77iP8J+SqPCfmLUiLG5hcjoiSGUgcmF0dGxlcyBvZmYgaW5zdHJ1Y3Rpb25zIGF0IG5hdGl2ZSBzcGVlZC4gWW91IGNhdGNoIG1heWJlIHRocmVlIHdvcmRzLiBEbyBub3QgcGFuaWMg4oCUIHlvdSBrbm93IHRoZSByZXNjdWUgcGhyYXNlLiIsd2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCIsa3I6IuycoOyLpOusvOyEvO2EsOqwgOyggOyqveyXkOyeiOuKlOuNsOyngOq4iOydgOKApiIsZW46IihWZXJ5IGZhc3QpIFRoZSBsb3N0LWFuZC1mb3VuZCBpcyBvdmVyIHRoZXJlIGJ1dCByaWdodCBub3figKYiLGNoOltbIuyjhOyGoe2VmOyngOunjCwg7LKc7LKc7Z6IIOunkO2VtCDso7zshLjsmpQuIO2VnOq1reyWtOulvCDsobDquIgg7ZWgIOyImCDsnojslrTsmpQuIiwiU29ycnksIGJ1dCBwbGVhc2Ugc3BlYWsgc2xvd2x5LiBJIHNwZWFrIGEgbGl0dGxlIEtvcmVhbi4iLDFdLFsi64yA67CVISDsp4Tsp5zsmpQ/IiwiTm8gd2F5ISBSZWFsbHk/IiwwXSxbIuyEpO2DlSDrubwg7KO87IS47JqULiIsIk5vIHN1Z2FyLCBwbGVhc2UuIiwwXV19LAoge2JnOiJjaXR5IixzYzoi8J+QovCfmYLwn5OdIixuYXI6IkhlIHNtaWxlcywgc2xvd3Mgd2F5IGRvd24sIGFuZCB3cml0ZXMgdGhlIGxvc3QtYW5kLWZvdW5kIG51bWJlciBvbiBhIHNsaXAgb2YgcGFwZXIuIFRoaXMgdGltZSwgZXZlcnkgd29yZCBsYW5kcy4iLHdobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AiLGtyOiLsnKDsi6TrrLzshLzthLDsl5Ag7KCE7ZmU7ZW0IOuztOyEuOyalC4g66qHIO2YuOyEoOyXkOyEnCDsnoPslrTrsoTroLjslrTsmpQ/IixlbjoiQ2FsbCB0aGUgbG9zdC1hbmQtZm91bmQgY2VudGVyLiBPbiB3aGljaCBsaW5lIGRpZCB5b3UgbG9zZSBpdD8iLGNoOltbIjLtmLjshKDsnbTsl5DsmpQuIDMw67aEIOyghOyXkOyalC4g7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEiLCJMaW5lIDIsIGFib3V0IDMwIG1pbnV0ZXMgYWdvLiBUaGFuayB5b3Ugc28gbXVjaCEiLDFdLFsi66ek7Jq0IOq1reyImCDso7zshLjsmpQuIiwiU3BpY3kgbm9vZGxlcywgcGxlYXNlLiIsMF0sWyLsgqzsp4Qg7KKAIOywjeyWtCDso7zshLjsmpQuIiwiUGxlYXNlIHRha2UgYSBwaG90byBmb3IgbWUuIiwwXV19LAoge2JnOiJkYXduIixzYzoi8J+Rm+KcqPCfmYwiLG5hcjoiVHdlbnR5IG1pbnV0ZXMgbGF0ZXIsIHRoZSBwaG9uZSBjYWxsOiBGT1VORC4gQ2FzaCB1bnRvdWNoZWQg4oCUIHNvbWVvbmUgdHVybmVkIGl0IGluIHdpdGhpbiBtaW51dGVzLiBLb3JlYSwgeW91IGJlYXV0eS4iLHdobzoi8J+TniDsnKDsi6TrrLzshLzthLAiLGtyOiLsp4DqsJEg7LC+7JWY7Iq164uI64ukISDsi6DrtoTspp0g6rCA7KeA6rOgIOyYpOyEuOyalC4iLGVuOiJXZSBmb3VuZCB5b3VyIHdhbGxldCEgQnJpbmcgeW91ciBJRCB0byBwaWNrIGl0IHVwLiIsY2g6W1si7KCV66eQ7JqUPyDqsJDsgqztlanri4jri6QhIOyngOq4iCDrsJTroZwg6rCI6rKM7JqUISIsIlJlYWxseT8gVGhhbmsgeW91ISBJIHdpbGwgY29tZSByaWdodCBub3chIiwxXSxbIuyViCDrp7Xqsowg7ZW0IOyjvOyEuOyalC4iLCJOb3Qgc3BpY3ksIHBsZWFzZS4iLDBdLFsi7KO866eQ7JeQIOuztO2GtSDrrZAg7ZW07JqUPyIsIldoYXQgZG8geW91IHVzdWFsbHkgZG8gb24gd2Vla2VuZHM/IiwwXV19XX0KfTsKTEVTU09OUy5mb3JFYWNoKEwgPT4gTC5zdG9yeSA9IFNUT1JJRVNbTC5uXSk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFRBTEtTIOKAlCBzcG9rZW4gY29udmVyc2F0aW9uIHBlciBxdWVzdCAoYWxsIG9yaWdpbmFsKS4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpjb25zdCBUQUxLUyA9IHsKMTp7d2hvOiLwn5mCIO2VmOuCmCAoeW91ciBuZWlnaGJvcikiLCB0OiJNZWV0aW5nIHlvdXIgbmV3IG5laWdoYm9yIiwgdHVybnM6Wwoge3E6IuyViOuFle2VmOyEuOyalCEg7LKY7J2MIOu1meuKlCDrtoTsnbTrhKTsmpQuIixxRW46IkhlbGxvISBJIGhhdmUgbm90IHNlZW4geW91IGJlZm9yZS4iLHRhc2s6IlNheSBoZWxsbyBhbmQgdGhhdCB5b3UgYXJlIGdsYWQgdG8gbWVldCBoZXIuIixhOiLslYjrhZXtlZjshLjsmpQhIOunjOuCmOyEnCDrsJjqsJHsirXri4jri6QuIixhRW46IkhlbGxvISBHbGFkIHRvIG1lZXQgeW91LiIsYWx0Olsi7JWI64WV7ZWY7IS47JqULCDrsJjqsJHsirXri4jri6QuIl19LAoge3E6IuydtOumhOydtCDrrZDsmIjsmpQ/IixxRW46IldoYXQgaXMgeW91ciBuYW1lPyIsdGFzazoiU2F5ICdJIGFtIOKApicg4oCUIHVzZSB5b3VyIG93biBuYW1lISIsYToi7KCA64qUIO2GsOydtOyXkOyalC4iLGFFbjoiSSBhbSBUb20uICh1c2UgWU9VUiBuYW1lKSIsYWx0Olsi7KCcIOydtOumhOydgCDthrDsnbTsl5DsmpQuIl19LAoge3E6IuyWtOuKkCDrgpjrnbzsl5DshJwg7JmU7Ja07JqUPyIscUVuOiJXaGljaCBjb3VudHJ5IGFyZSB5b3UgZnJvbT8iLHRhc2s6IlNheSB3aGljaCBjb3VudHJ5IHlvdSBjYW1lIGZyb20uIixhOiLsupDrgpjri6Tsl5DshJwg7JmU7Ja07JqULiIsYUVuOiJJIGNhbWUgZnJvbSBDYW5hZGEuICh1c2UgWU9VUiBjb3VudHJ5KSIsYWx0Olsi7KCA64qUIOy6kOuCmOuLpCDsgqzrnozsnbTsl5DsmpQuIiwi67Kg7Yq464Ko7JeQ7IScIOyZlOyWtOyalC4iXX0sCiB7cToi7Jqw7JmALCDrsJjqsIDsm4zsmpQhIO2VnOq1reydgCDsspjsnYzsnbTsl5DsmpQ/IixxRW46IldvdywgbmljZSEgSXMgdGhpcyB5b3VyIGZpcnN0IHRpbWUgaW4gS29yZWE/Iix0YXNrOiJTYXkgeWVzLCBhbmQgYXNrIGhlciB0byB0YWtlIGNhcmUgb2YgeW91LiIsYToi64SkLCDsspjsnYzsnbTsl5DsmpQuIOyemCDrtoDtg4Hrk5zrpr3ri4jri6QhIixhRW46IlllcywgaXQgaXMgbXkgZmlyc3QgdGltZS4gUGxlYXNlIHRha2UgY2FyZSBvZiBtZSEiLGFsdDpbIuuEpCwg7J6YIOu2gO2DgeuTnOumveuLiOuLpC4iXX0sCiB7cToi7ZWE7JqU7ZWcIOqxsCDsnojsnLzrqbQg66eQ7ZW07JqULiDqt7jrn7wg65iQIOu0kOyalCEiLHFFbjoiVGVsbCBtZSBpZiB5b3UgbmVlZCBhbnl0aGluZy4gU2VlIHlvdSBhcm91bmQhIix0YXNrOiJUaGFuayBoZXIgYW5kIHNheSBzZWUgeW91IGFnYWluLiIsYToi6rCQ7IKs7ZWp64uI64ukLiDrmJAg66eM64KY7JqUISIsYUVuOiJUaGFuayB5b3UuIFNlZSB5b3UgYWdhaW4hIixhbHQ6WyLqsJDsgqztlanri4jri6QuIOyViOuFle2eiCDqsIDshLjsmpQhIl19XX0sCjI6e3dobzoi8J+nkeKAjfCfjbMg67CU66as7Iqk7YOAIChiYXJpc3RhKSIsIHQ6Ik9yZGVyaW5nIHlvdXIgbW9ybmluZyBjb2ZmZWUiLCB0dXJuczpbCiB7cToi7Ja07IScIOyYpOyEuOyalCEg7KO866y47ZWY7Iuc6rKg7Ja07JqUPyIscUVuOiJXZWxjb21lISBXb3VsZCB5b3UgbGlrZSB0byBvcmRlcj8iLHRhc2s6Ik9yZGVyIG9uZSBpY2VkIGFtZXJpY2Fuby4iLGE6IuyVhOydtOyKpCDslYTrqZTrpqzsubTrhbgg7ZWcIOyelCDso7zshLjsmpQuIixhRW46Ik9uZSBpY2VkIGFtZXJpY2FubywgcGxlYXNlLiIsYWx0Olsi7JWE7J207IqkIOyVhOuplOumrOy5tOuFuCDso7zshLjsmpQuIl19LAoge3E6IuyCrOydtOymiOuKlCDslrTrlrvqsowg65Oc66a06rmM7JqUPyIscUVuOiJXaGF0IHNpemUgd291bGQgeW91IGxpa2U/Iix0YXNrOiJTYXkgeW91IHdpbGwgdGFrZSB0aGUgbGFyZ2Ugc2l6ZS4iLGE6Iu2BsCDsgqzsnbTspojroZwg7ZWg6rKM7JqULiIsYUVuOiJJIHdpbGwgdGFrZSB0aGUgbGFyZ2Ugc2l6ZS4iLGFsdDpbIu2BsCDqsbDroZwg7KO87IS47JqULiJdfSwKIHtxOiLri6Trpbgg6rG0IO2VhOyalCDsl4bsnLzshLjsmpQ/IixxRW46IkFueXRoaW5nIGVsc2U/Iix0YXNrOiJPcmRlciBvbmUgY2hlZXNlY2FrZSB0b28uIixhOiLsuZjspogg7LyA7J207YGs64+EIO2VmOuCmCDso7zshLjsmpQuIixhRW46Ik9uZSBjaGVlc2VjYWtlIHRvbywgcGxlYXNlLiIsYWx0Olsi7LyA7J207YGsIO2VmOuCmCDso7zshLjsmpQuIl19LAoge3E6IuuTnOyLnOqzoCDqsIDshLjsmpQsIOyVhOuLiOuptCDtj6zsnqXsnbTshLjsmpQ/IixxRW46IkZvciBoZXJlIG9yIHRvIGdvPyIsdGFzazoiU2F5IHRvIGdvLCBwbGVhc2UuIixhOiLtj6zsnqXtlbQg7KO87IS47JqULiIsYUVuOiJUbyBnbywgcGxlYXNlLiIsYWx0Olsi7Y+s7J6l7J207JqULiJdfSwKIHtxOiLrp4zsspwg7JuQ7J6F64uI64ukLiIscUVuOiJUaGF0IGlzIDExLDAwMCB3b24uIix0YXNrOiJTYXkgeW91IHdpbGwgcGF5IGJ5IGNhcmQuIixhOiLsubTrk5zroZwg7ZWg6rKM7JqULiIsYUVuOiJJIHdpbGwgcGF5IGJ5IGNhcmQuIixhbHQ6WyLsubTrk5zroZwg6rOE7IKw7ZWg6rKM7JqULiJdfV19LAozOnt3aG86IvCfmYsg7IKs7J6l64uYIChyZXN0YXVyYW50IG93bmVyKSIsIHQ6IkRpbm5lciBhdCBhIGxvY2FsIHJlc3RhdXJhbnQiLCB0dXJuczpbCiB7cToi7Ja07IScIOyYpOyEuOyalCEg66qHIOu2hOydtOyEuOyalD8iLHFFbjoiV2VsY29tZSEgSG93IG1hbnkgcGVvcGxlPyIsdGFzazoiU2F5IHR3byBwZW9wbGUuIixhOiLrkZAg66qF7J207JeQ7JqULiIsYUVuOiJUd28gcGVvcGxlLiIsYWx0Olsi65GQIOuqheydtOyalC4iXX0sCiB7cToi66mU64m0IOyXrOq4sCDsnojslrTsmpQuIOutkCDrk5zrprTquYzsmpQ/IixxRW46IkhlcmUgaXMgdGhlIG1lbnUuIFdoYXQgY2FuIEkgZ2V0IHlvdT8iLHRhc2s6IkFzayBoZXIgdG8gcmVjb21tZW5kIHNvbWV0aGluZy4iLGE6Iuy2lOyynO2VtCDso7zshLjsmpQuIOutkOqwgCDsoJzsnbwg66eb7J6I7Ja07JqUPyIsYUVuOiJQbGVhc2UgcmVjb21tZW5kIHNvbWV0aGluZy4gV2hhdCBpcyB0aGUgYmVzdD8iLGFsdDpbIuy2lOyynO2VtCDso7zshLjsmpQuIl19LAoge3E6IuunpOyatCDqta3siJjqsIAg7KCc7J28IOyduOq4sCDsnojslrTsmpQhIixxRW46IlRoZSBzcGljeSBub29kbGVzIGFyZSB0aGUgbW9zdCBwb3B1bGFyISIsdGFzazoiQXNrIGlmIGl0IGlzIHZlcnkgc3BpY3kuIixhOiLrp47snbQg66ek7JuM7JqUPyIsYUVuOiJJcyBpdCB2ZXJ5IHNwaWN5PyIsYWx0Olsi6re46rGwIOunpOybjOyalD8iXX0sCiB7cToi7KGw6riIIOunpOybjOyalC4g642cIOunteqyjCDtlbQg65Oc66a06rmM7JqUPyIscUVuOiJJdCBpcyBhIGxpdHRsZSBzcGljeS4gU2hhbGwgSSBtYWtlIGl0IG1pbGRlcj8iLHRhc2s6IlNheSB5ZXMgcGxlYXNlLCBhbmQgYXNrIGZvciB3YXRlciB0b28uIixhOiLrhKQsIOq3uOumrOqzoCDrrLwg7KKAIOyjvOyEuOyalC4iLGFFbjoiWWVzLCBhbmQgc29tZSB3YXRlciBwbGVhc2UuIixhbHQ6WyLrhKQsIOusvOuPhCDso7zshLjsmpQuIl19LAoge3E6Iuunm+yeiOqyjCDrk5zshajslrTsmpQ/IixxRW46IkRpZCB5b3UgZW5qb3kgdGhlIG1lYWw/Iix0YXNrOiJTYXkgaXQgd2FzIHJlYWxseSBkZWxpY2lvdXMgYW5kIGFzayBmb3IgdGhlIGJpbGwuIixhOiLsoJXrp5Ag66eb7J6I7JeI7Ja07JqUISDqs4TsgrDshJwg7KO87IS47JqULiIsYUVuOiJJdCB3YXMgcmVhbGx5IGRlbGljaW91cyEgVGhlIGJpbGwsIHBsZWFzZS4iLGFsdDpbIuunm+yeiOyXiOyWtOyalC4g6rOE7IKw7ZWg6rKM7JqULiJdfV19LAo0Ont3aG86IvCfmrYg7ZaJ7J24IChwYXNzZXJieSkiLCB0OiJGaW5kaW5nIHRoZSBib29rc2hvcCIsIHR1cm5zOlsKIHtxOiLrhKQ/IOustOyKqCDsnbzsnbTshLjsmpQ/IixxRW46Illlcz8gV2hhdCBpcyBpdD8iLHRhc2s6IkFzayB3aGVyZSBIYW5iaXQgQm9va3Nob3AgaXMuIixhOiLtlZzruZsg7ISc7KCQ7J20IOyWtOuUlOyYiOyalD8iLGFFbjoiV2hlcmUgaXMgSGFuYml0IEJvb2tzaG9wPyIsYWx0Olsi7ISc7KCQ7J20IOyWtOuUlOyXkCDsnojslrTsmpQ/Il19LAoge3E6IuydtCDquLjroZwg7K2JIOqwgOyEuOyalC4gNeu2hOyvpCDqsbjroKTsmpQuIixxRW46IkdvIHN0cmFpZ2h0IGFsb25nIHRoaXMgcm9hZC4gSXQgdGFrZXMgYWJvdXQgNSBtaW51dGVzLiIsdGFzazoiQXNrIGlmIGl0IGlzIGNsb3NlIHRvIGhlcmUuIixhOiLsl6zquLDshJwg6rCA6rmM7JuM7JqUPyIsYUVuOiJJcyBpdCBjbG9zZSB0byBoZXJlPyIsYWx0Olsi6rCA6rmM7JuM7JqUPyJdfSwKIHtxOiLrhKQsIOqwgOq5jOybjOyalC4g7IKs6rGw66as7JeQ7IScIOyZvOyqveycvOuhnCDrj4TshLjsmpQuIixxRW46IlllcywgaXQgaXMgY2xvc2UuIFR1cm4gbGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uLiIsdGFzazoiQ29uZmlybTogbGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uPyIsYToi7IKs6rGw66as7JeQ7IScIOyZvOyqveydtOyalD8iLGFFbjoiTGVmdCBhdCB0aGUgaW50ZXJzZWN0aW9uPyIsYWx0Olsi7Jm87Kq97Jy866GcIOqwgOyalD8iXX0sCiB7cToi66ee7JWE7JqULiDsnYDtlokg7JiG7JeQIOyeiOyWtOyalC4iLHFFbjoiUmlnaHQuIEl0IGlzIG5leHQgdG8gdGhlIGJhbmsuIix0YXNrOiJTYXkgYWgsIG5leHQgdG8gdGhlIGJhbmsg4oCUIGdvdCBpdC4iLGE6IuyVhCwg7J2A7ZaJIOyYhuydtOyalC4g7JWM6rKg7Ja07JqUISIsYUVuOiJBaCwgbmV4dCB0byB0aGUgYmFuay4gR290IGl0ISIsYWx0Olsi64SkLCDslYzqsqDslrTsmpQuIl19LAoge3E6Iuq4iOuwqSDssL7snYQg6rGw7JiI7JqUISIscUVuOiJZb3Ugd2lsbCBmaW5kIGl0IGluIG5vIHRpbWUhIix0YXNrOiJUaGFuayB0aGVtIGFuZCB3aXNoIHRoZW0gYSBnb29kIGRheS4iLGE6IuqwkOyCrO2VqeuLiOuLpCEg7KKL7J2AIO2VmOujqCDrkJjshLjsmpQhIixhRW46IlRoYW5rIHlvdSEgSGF2ZSBhIGdvb2QgZGF5ISIsYWx0Olsi7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEiXX1dfSwKNTp7d2hvOiLwn6eR4oCN4pyI77iPIOyXreustOybkCAoc3RhdGlvbiBhdHRlbmRhbnQpIiwgdDoiR2V0dGluZyB0byB0aGUgY29uY2VydCIsIHR1cm5zOlsKIHtxOiLrhKQsIOutmCDrj4TsmYDrk5zrprTquYzsmpQ/IixxRW46IlllcywgaG93IGNhbiBJIGhlbHAgeW91PyIsdGFzazoiQXNrIGhvdyB0byBnZXQgdG8gT2x5bXBpYyBQYXJrLiIsYToi7Jis66a87ZS9IOqzteybkOq5jOyngCDslrTrlrvqsowg6rCA7JqUPyIsYUVuOiJIb3cgZG8gSSBnZXQgdG8gT2x5bXBpYyBQYXJrPyIsYWx0Olsi7Jis66a87ZS9IOqzteybkOyXkCDslrTrlrvqsowg6rCA7JqUPyJdfSwKIHtxOiIy7Zi47ISg7J2EIO2DgOqzoCDsnqDsi6Tsl63snLzroZwg6rCA7IS47JqULiIscUVuOiJUYWtlIGxpbmUgMiB0byBKYW1zaWwgU3RhdGlvbi4iLHRhc2s6IkFzayB3aGVyZSB5b3Ugc2hvdWxkIHRyYW5zZmVyLiIsYToi7Ja065SU7JeQ7IScIOqwiOyVhO2DgOyVvCDtlbTsmpQ/IixhRW46IldoZXJlIHNob3VsZCBJIHRyYW5zZmVyPyIsYWx0Olsi7Ja065SU7IScIOqwiOyVhO2DgOyalD8iXX0sCiB7cToi7J6g7Iuk7Jet7JeQ7IScIDjtmLjshKDsnLzroZwg6rCI7JWE7YOA7IS47JqULiIscUVuOiJUcmFuc2ZlciB0byBsaW5lIDggYXQgSmFtc2lsLiIsdGFzazoiQXNrIGhvdyBsb25nIGl0IHRha2VzLiIsYToi7Ja866eI64KYIOqxuOugpOyalD8iLGFFbjoiSG93IGxvbmcgZG9lcyBpdCB0YWtlPyIsYWx0Olsi7Iuc6rCE7J20IOyWvOuniOuCmCDqsbjroKTsmpQ/Il19LAoge3E6IjQw67aE7K+kIOqxuOugpOyalC4iLHFFbjoiQWJvdXQgNDAgbWludXRlcy4iLHRhc2s6IkFzayB3aGVyZSB5b3UgZ2V0IG9mZi4iLGE6IuyWtOuKkCDsl63sl5DshJwg64K066Ck7JqUPyIsYUVuOiJXaGljaCBzdGF0aW9uIGRvIEkgZ2V0IG9mZiBhdD8iLGFsdDpbIuyWtOuUlOyXkOyEnCDrgrTroKTsmpQ/Il19LAoge3E6Iuuqvey0jO2GoOyEseyXreyXkOyEnCDrgrTrpqzshLjsmpQuIixxRW46IkdldCBvZmYgYXQgTW9uZ2Nob250b3Nlb25nIFN0YXRpb24uIix0YXNrOiJUaGFuayBoaW0gYW5kIHNheSBnb3QgaXQuIixhOiLrhKQsIOyVjOqyoOyWtOyalC4g6rCQ7IKs7ZWp64uI64ukISIsYUVuOiJHb3QgaXQuIFRoYW5rIHlvdSEiLGFsdDpbIuqwkOyCrO2VqeuLiOuLpCEiXX1dfSwKNjp7d2hvOiLwn6eTIOyCrOyepeuLmCAobWFya2V0IHZlbmRvcikiLCB0OiJCdXlpbmcgdGhlIHBlcmZlY3QgZ2lmdCIsIHR1cm5zOlsKIHtxOiLslrTshJwg7Jik7IS47JqUISDrrZAg7LC+7Jy87IS47JqUPyIscUVuOiJXZWxjb21lISBXaGF0IGFyZSB5b3UgbG9va2luZyBmb3I/Iix0YXNrOiJTYXkgeW91IGFyZSBsb29raW5nIGZvciBhIGdpZnQgZm9yIGEgZnJpZW5kLiIsYToi7Lmc6rWsIOyEoOusvOydhCDssL7qs6Ag7J6I7Ja07JqULiIsYUVuOiJJIGFtIGxvb2tpbmcgZm9yIGEgZ2lmdCBmb3IgYSBmcmllbmQuIixhbHQ6WyLshKDrrLzsnYQg7LC+6rOgIOyeiOyWtOyalC4iXX0sCiB7cToi7J20IOyKpOy5tO2UhCDslrTrlYzsmpQ/IOyCvOunjCDsmKTsspwg7JuQ7J207JeQ7JqULiIscUVuOiJIb3cgYWJvdXQgdGhpcyBzY2FyZj8gSXQgaXMgMzUsMDAwIHdvbi4iLHRhc2s6IlNheSBpdCBpcyB0b28gZXhwZW5zaXZlIOKAlCBhc2sgZm9yIGEgZGlzY291bnQuIixhOiLrhIjrrLQg67mE7Iu47JqULiDquY7slYQg7KO87IS47JqUISIsYUVuOiJUb28gZXhwZW5zaXZlLiBQbGVhc2UgZ2l2ZSBtZSBhIGRpc2NvdW50ISIsYWx0Olsi7KGw6riI66eMIOq5juyVhCDso7zshLjsmpQuIl19LAoge3E6Iuq3uOufvCDsnbTrp4wg7YyU7LKcIOybkOyXkCDrk5zrprTqsozsmpQuIixxRW46IlRoZW4gSSB3aWxsIGdpdmUgaXQgdG8geW91IGZvciAyOCwwMDAuIix0YXNrOiJBc2sgaWYgdGhlcmUgYXJlIG90aGVyIGNvbG9ycy4iLGE6IuuLpOuluCDsg4nquZTrj4Qg7J6I7Ja07JqUPyIsYUVuOiJEbyB5b3UgaGF2ZSBvdGhlciBjb2xvcnM/IixhbHQ6WyLtjIzrnoDsg4kg7J6I7Ja07JqUPyJdfSwKIHtxOiLtjIzrnoDsg4nrj4Qg7J6I7Ja07JqULiDsmIjsgZjso6A/IixxRW46IlRoZXJlIGlzIGEgYmx1ZSBvbmUgdG9vLiBQcmV0dHksIHJpZ2h0PyIsdGFzazoiU2F5IHlvdSB3aWxsIHRha2UgdGhpcyBvbmUg4oCUIGFzayBpZiB0aGV5IGNhbiBnaWZ0LXdyYXAuIixhOiLsnbTqsbAg7KO87IS47JqULiDshKDrrLwg7Y+s7J6lIOuPvOyalD8iLGFFbjoiSSB3aWxsIHRha2UgdGhpcyBvbmUuIENhbiB5b3UgZ2lmdC13cmFwIGl0PyIsYWx0Olsi7J206rGw66GcIO2VoOqyjOyalC4g7Y+s7J6lIOuPvOyalD8iXX0sCiB7cToi6re465+87JqUISDsmIjsgZjqsowg7Y+s7J6l7ZW0IOuTnOumtOqyjOyalC4iLHFFbjoiT2YgY291cnNlISBJIHdpbGwgd3JhcCBpdCBiZWF1dGlmdWxseS4iLHRhc2s6IlRoYW5rIGhlciBhbmQgYXNrIGlmIHRoZXkgdGFrZSBjYXJkcy4iLGE6IuqwkOyCrO2VqeuLiOuLpCEg7Lm065OcIOuPvOyalD8iLGFFbjoiVGhhbmsgeW91ISBEbyB5b3UgdGFrZSBjYXJkcz8iLGFsdDpbIuy5tOuTnOuhnCDqs4TsgrDtlaAg7IiYIOyeiOyWtOyalD8iXX1dfSwKNzp7d2hvOiLwn5mCIOyngOyImCAoaGlraW5nIGNsdWIgbWVtYmVyKSIsIHQ6IlNtYWxsIHRhbGsgb24gdGhlIHRyYWlsIiwgdHVybnM6Wwoge3E6IuyYpOuKmCDrgqDslKgg7KeE7KecIOyii+uEpOyalCEiLHFFbjoiVGhlIHdlYXRoZXIgaXMgcmVhbGx5IG5pY2UgdG9kYXkhIix0YXNrOiJBZ3JlZSDigJQgc2F5IHRoZSB3ZWF0aGVyIGlzIHJlYWxseSBuaWNlLiIsYToi64SkLCDrgqDslKjqsIAg7KCV66eQIOyii+yVhOyalCEiLGFFbjoiWWVzLCB0aGUgd2VhdGhlciBpcyByZWFsbHkgbmljZSEiLGFsdDpbIuunnuyVhOyalCwg7KeE7KecIOyii+uEpOyalC4iXX0sCiB7cToi7Leo66+46rCAIOutkOyYiOyalD8iLHFFbjoiV2hhdCBhcmUgeW91ciBob2JiaWVzPyIsdGFzazoiU2F5IHlvdSBsaWtlIGNvb2tpbmcuIixhOiLsoIDripQg7JqU66as7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQuIixhRW46IkkgbGlrZSBjb29raW5nLiIsYWx0Olsi7JqU66as66W8IOyii+yVhO2VtOyalC4iXX0sCiB7cToi7Jqw7JmAISDrrLTsiqgg7JqU66as66W8IOyemO2VtOyalD8iLHFFbjoiV293ISBXaGF0IGRvIHlvdSBjb29rIHdlbGw/Iix0YXNrOiJTYXkgeW91IGNvb2sgS29yZWFuIGZvb2Qgb2Z0ZW4gdGhlc2UgZGF5cy4iLGE6IuyalOymmCDtlZzqta0g7J2M7Iud7J2EIOyekOyjvCDtlbTsmpQuIixhRW46IlRoZXNlIGRheXMgSSBvZnRlbiBjb29rIEtvcmVhbiBmb29kLiIsYWx0Olsi7ZWc6rWtIOydjOyLneydhCDsnpDso7wg66eM65Ok7Ja07JqULiJdfSwKIHtxOiLrjIDrsJUhIOyggOuPhCDtlZzqta0g7J2M7IudIOyZhOyghCDsoovslYTtlbTsmpQuIixxRW46Ik5vIHdheSEgSSB0b3RhbGx5IGxvdmUgS29yZWFuIGZvb2QgdG9vLiIsdGFzazoiSW52aXRlIGhlcjogc2hhbGwgd2UgZWF0IHRvZ2V0aGVyIHNvbWV0aW1lPyIsYToi64uk7J2M7JeQIOqwmeydtCDrqLnsnLzrn6wg6rCI656Y7JqUPyIsYUVuOiJTaGFsbCB3ZSBnbyBlYXQgdG9nZXRoZXIgc29tZXRpbWU/IixhbHQ6WyLqsJnsnbQg66i57Jy865+sIOqwgOyalCEiXX0sCiB7cToi7KKL7JWE7JqUISDso7zrp5DsnYAg7Ja065WM7JqUPyIscUVuOiJTdXJlISBIb3cgYWJvdXQgdGhlIHdlZWtlbmQ/Iix0YXNrOiJTYXkgdGhlIHdlZWtlbmQgaXMgZ29vZCDigJQgbGV0IHVzIG1lZXQgU2F0dXJkYXkuIixhOiLso7zrp5Ag7KKL7JWE7JqUISDthqDsmpTsnbzsl5Ag66eM64KY7JqULiIsYUVuOiJUaGUgd2Vla2VuZCB3b3JrcyEgTGV0IHVzIG1lZXQgU2F0dXJkYXkuIixhbHQ6WyLthqDsmpTsnbzsl5Ag66eM64KY6riw66GcIO2VtOyalC4iXX1dfSwKODp7d2hvOiLwn5OxIOyngOyImCAob24gdGhlIHBob25lKSIsIHQ6IlJ1bm5pbmcgbGF0ZSDigJQgdGhlIHBob25lIGNhbGwiLCB0dXJuczpbCiB7cToi7Jes67O07IS47JqUISDsp4DquIgg7Ja065SU7JiI7JqUPyIscUVuOiJIZWxsbyEgV2hlcmUgYXJlIHlvdSBub3c/Iix0YXNrOiJTYXkgeW91IGFyZSBvbiB0aGUgYnVzLCBvbiB5b3VyIHdheS4iLGE6IuuyhOyKpOyXkOyEnCDqsIDqs6Ag7J6I7Ja07JqUISIsYUVuOiJJIGFtIG9uIHRoZSBidXMsIG9uIG15IHdheSEiLGFsdDpbIuyngOq4iCDqsIDqs6Ag7J6I7Ja07JqULiJdfSwKIHtxOiLrqocg67aE7K+kIOqxuOugpOyalD8iLHFFbjoiQWJvdXQgaG93IG1hbnkgbWludXRlcyB3aWxsIGl0IHRha2U/Iix0YXNrOiJTYXkgc29ycnksIHlvdSB3aWxsIGJlIGFib3V0IDEwIG1pbnV0ZXMgbGF0ZS4iLGE6IuuvuOyViO2VtOyalCwgMTDrtoTsr6Qg64qm7Ja07JqULiIsYUVuOiJTb3JyeSwgSSB3aWxsIGJlIGFib3V0IDEwIG1pbnV0ZXMgbGF0ZS4iLGFsdDpbIuyhsOq4iCDriqbslrTsmpQuIOuvuOyViO2VtOyalC4iXX0sCiB7cToi6rSc7LCu7JWE7JqUISDslrTrlJTsl5DshJwg66eM64Kg6rmM7JqUPyIscUVuOiJObyBwcm9ibGVtISBXaGVyZSBzaGFsbCB3ZSBtZWV0PyIsdGFzazoiU2F5OiB3YWl0IGluIGZyb250IG9mIHRoZSBjYWbDqSwgcGxlYXNlLiIsYToi7Lm07Y6YIOyVnuyXkOyEnCDquLDri6TroKQg7KO87IS47JqULiIsYUVuOiJQbGVhc2Ugd2FpdCBpbiBmcm9udCBvZiB0aGUgY2Fmw6kuIixhbHQ6WyLsubTtjpgg7JWe7JeQ7IScIOunjOuCmOyalC4iXX0sCiB7cToi64SkISDrsLDthLDrpqzripQg6rSc7LCu7JWE7JqUPyIscUVuOiJPa2F5ISBJcyB5b3VyIGJhdHRlcnkgaG9sZGluZyB1cD8iLHRhc2s6IlNheSB5b3VyIGJhdHRlcnkgaXMgYWxtb3N0IGRlYWQsIHNvIHlvdSB3aWxsIGhhbmcgdXAuIixhOiLrsLDthLDrpqzqsIAg7JeG7Ja07IScIOuBiuydhOqyjOyalCEiLGFFbjoiTXkgYmF0dGVyeSBpcyBkeWluZywgc28gSSB3aWxsIGhhbmcgdXAhIixhbHQ6WyLrsLDthLDrpqzqsIAg7JeG7Ja07JqULiDsnbTrlLDqsIAg67SQ7JqUISJdfSwKIHtxOiLslYzqsqDslrTsmpQsIOyhsOyLrO2eiCDsmYDsmpQhIixxRW46IkdvdCBpdCwgY29tZSBzYWZlbHkhIix0YXNrOiJTYXkgeW91IGhhdmUgYWxtb3N0IGFycml2ZWQg4oCUIHNlZSB5b3Ugc29vbiEiLGE6IuqxsOydmCDrj4TssKntlojslrTsmpQuIOydtOuUsOqwgCDrtJDsmpQhIixhRW46IkkgaGF2ZSBhbG1vc3QgYXJyaXZlZC4gU2VlIHlvdSBzb29uISIsYWx0Olsi6riI67CpIOqwgOyalCEiXX1dfSwKOTp7d2hvOiLwn5mCIOyngOyImCAoeW91ciBmcmllbmQpIiwgdDoiQ2hlZXJpbmcgdXAgYSBmcmllbmQiLCB0dXJuczpbCiB7cToi7JWE4oCmIOyalOumrCDrjIDtmozsl5DshJwgMuuTsSDtlojslrTsmpQuIixxRW46IkFo4oCmIEkgZ290IHNlY29uZCBwbGFjZSBpbiB0aGUgY29va2luZyBjb250ZXN0LiIsdGFzazoiU2F5IHNlY29uZCBwbGFjZSBpcyBhbWF6aW5nIOKAlCB3ZWxsIGRvbmUhIixhOiIy65Ox64+EIOuMgOuLqO2VtOyalCEg7KCV66eQIOyemO2WiOyWtOyalCEiLGFFbjoiU2Vjb25kIHBsYWNlIGlzIGFtYXppbmchIFlvdSBkaWQgcmVhbGx5IHdlbGwhIixhbHQ6WyLsmYAsIOyemO2WiOyWtOyalCEiXX0sCiB7cToi6rOg66eI7JuM7JqULiDqt7jrnpjrj4Qg64SI66y0IOyVhOyJrOybjOyalC4iLHFFbjoiVGhhbmtzLiBTdGlsbCwgaXQgaXMgc3VjaCBhIHBpdHkuIix0YXNrOiJUZWxsIGhlciBub3QgdG8gd29ycnkg4oCUIG5leHQgdGltZSBzaGUgd2lsbCB3aW4uIixhOiLqsbHsoJXtlZjsp4Ag66eI7IS47JqULiDri6TsnYzsl5DripQg6rytIDHrk7Eg7ZWgIOqxsOyYiOyalCEiLGFFbjoiRG8gbm90IHdvcnJ5LiBOZXh0IHRpbWUgeW91IHdpbGwgZGVmaW5pdGVseSB3aW4hIixhbHQ6WyLri6TsnYzsl5Ag7J6YIOuQoCDqsbDsmIjsmpQuIl19LAoge3E6Iu2VmO2VmCwg6riw67aE7J20IOyigCDrgpjslYTsoYzslrTsmpQuIixxRW46IkhhaGEsIEkgZmVlbCBhIGJpdCBiZXR0ZXIuIix0YXNrOiJBc2sgaWYgc2hlIGlzIGh1bmdyeSDigJQgc3VnZ2VzdCBlYXRpbmcgdG9nZXRoZXIuIixhOiLrsLDqs6DtlITso6A/IOqwmeydtCDrsKUg66i57Jy865+sIOqwgOyalCEiLGFFbjoiWW91IGFyZSBodW5ncnksIHJpZ2h0PyBMZXQgdXMgZ28gZWF0IHRvZ2V0aGVyISIsYWx0Olsi6rCZ7J20IOuoueycvOufrCDqsIjrnpjsmpQ/Il19LAoge3E6Iuyii+yVhOyalCEg662QIOuoueydhOq5jOyalD8iLHFFbjoiU3VyZSEgV2hhdCBzaGFsbCB3ZSBlYXQ/Iix0YXNrOiJTdWdnZXN0IHRoZSBub29kbGVzIOKAlCBzYXkgdGhleSBhcmUgcmVhbGx5IGRlbGljaW91cy4iLGE6Iuq1reyImCDslrTrlYzsmpQ/IOygleunkCDrp5vsnojslrTsmpQhIixhRW46IkhvdyBhYm91dCBub29kbGVzPyBUaGV5IGFyZSByZWFsbHkgZGVsaWNpb3VzISIsYWx0Olsi6rWt7IiYIOuoueycvOufrCDqsIDsmpQuIl19LAoge3E6IuyZhOyghCDsoovslYTsmpQuIOuLpOydjCDrjIDtmozrj4Qg64KY6rCIIOqxsOyYiOyalCEiLHFFbjoiUGVyZmVjdC4gSSB3aWxsIGVudGVyIHRoZSBuZXh0IGNvbnRlc3QgdG9vISIsdGFzazoiQ2hlZXIgaGVyIG9uIOKAlCBmaWdodGluZyEgWW91IHdpbGwgYmUgY2hlZXJpbmcgZm9yIGhlci4iLGE6Iu2ZlOydtO2MhSEg7KCc6rCAIOydkeybkO2VoOqyjOyalCEiLGFFbjoiRmlnaHRpbmchIEkgd2lsbCBjaGVlciBmb3IgeW91ISIsYWx0Olsi7ZmU7J207YyFISJdfV19LAoxMDp7d2hvOiLimpXvuI8g7JW97IKsIChwaGFybWFjaXN0KSIsIHQ6IkF0IHRoZSBwaGFybWFjeSIsIHR1cm5zOlsKIHtxOiLslrTshJwg7Jik7IS47JqULiDslrTrlJTqsIAg67aI7Y647ZWY7IS47JqUPyIscUVuOiJXZWxjb21lLiBXaGF0IHNlZW1zIHRvIGJlIHRoZSBwcm9ibGVtPyIsdGFzazoiU2F5IHlvdXIgdGhyb2F0IGh1cnRzIGFuZCB5b3UgaGF2ZSBhIGZldmVyLiIsYToi66qp7J20IOyVhO2UhOqzoCDsl7TsnbQg64KY7JqULiIsYUVuOiJNeSB0aHJvYXQgaHVydHMgYW5kIEkgaGF2ZSBhIGZldmVyLiIsYWx0Olsi66qp7J20IOyVhO2MjOyalC4g7Je064+EIOyeiOyWtOyalC4iXX0sCiB7cToi7Ja47KCc67aA7YSwIOyVhO2MoOyWtOyalD8iLHFFbjoiU2luY2Ugd2hlbiBoYXZlIHlvdSBiZWVuIHNpY2s/Iix0YXNrOiJTYXkgc2luY2UgeWVzdGVyZGF5LiIsYToi7Ja07KCc67aA7YSw7JqULiIsYUVuOiJTaW5jZSB5ZXN0ZXJkYXkuIixhbHQ6WyLslrTsoJzrtoDthLAg7JWE7Yyg7Ja07JqULiJdfSwKIHtxOiLqsJDquLDrhKTsmpQuIOydtCDslb3snbQg7J6YIOuTpOyWtOyalC4iLHFFbjoiSXQgaXMgYSBjb2xkLiBUaGlzIG1lZGljaW5lIHdvcmtzIHdlbGwuIix0YXNrOiJBc2sgaG93IG1hbnkgdGltZXMgYSBkYXkgdG8gdGFrZSBpdC4iLGE6Iu2VmOujqOyXkCDrqocg67KIIOuoueyWtOyVvCDtlbTsmpQ/IixhRW46IkhvdyBtYW55IHRpbWVzIGEgZGF5IHNob3VsZCBJIHRha2UgaXQ/IixhbHQ6WyLrqocg67KIIOuoueyWtOyalD8iXX0sCiB7cToi7ZWY66Oo7JeQIOyEuCDrsogsIOyLneyCrCDtm4Tsl5Ag65Oc7IS47JqULiIscUVuOiJUaHJlZSB0aW1lcyBhIGRheSwgYWZ0ZXIgbWVhbHMuIix0YXNrOiJTYXkgeW91IGhhdmUgYSBwZWFudXQgYWxsZXJneSDigJQgaXMgaXQgb2theT8iLGE6IuyggOuKlCDrlYXsvakg7JWM66CI66W06riw6rCAIOyeiOyWtOyalC4g6rSc7LCu7JWE7JqUPyIsYUVuOiJJIGhhdmUgYSBwZWFudXQgYWxsZXJneS4gSXMgaXQgb2theT8iLGFsdDpbIuyVjOugiOultOq4sOqwgCDsnojslrTsmpQuIOq0nOywruyVhOyalD8iXX0sCiB7cToi64SkLCDqtJzssK7slYTsmpQuIO2RuSDsiazshLjsmpQhIixxRW46IlllcywgaXQgaXMgZmluZS4gUmVzdCB3ZWxsISIsdGFzazoiVGhhbmsgdGhlbSBhbmQgc2F5IHlvdSB3aWxsIHJlc3Qgd2VsbC4iLGE6IuqwkOyCrO2VqeuLiOuLpC4g7ZG5IOyJtOqyjOyalCEiLGFFbjoiVGhhbmsgeW91LiBJIHdpbGwgcmVzdCB3ZWxsISIsYWx0Olsi64SkLCDqsJDsgqztlanri4jri6QuIl19XX0sCjExOnt3aG86IvCfmYIg7IKs7J6l64uYIChndWVzdGhvdXNlIG93bmVyKSIsIHQ6IkNoZWNraW5nIGluIGJ5IHRoZSBzZWEiLCB0dXJuczpbCiB7cToi7Ja07IScIOyYpOyEuOyalCEg7JiI7JW97ZWY7IWo7Ja07JqUPyIscUVuOiJXZWxjb21lISBEbyB5b3UgaGF2ZSBhIHJlc2VydmF0aW9uPyIsdGFzazoiU2F5IHllcywgeW91IHJlc2VydmVkIG9ubGluZS4iLGE6IuuEpCwg7Jio65287J247Jy866GcIOyYiOyVve2WiOyWtOyalC4iLGFFbjoiWWVzLCBJIHJlc2VydmVkIG9ubGluZS4iLGFsdDpbIuyYiOyVve2WiOyWtOyalC4iXX0sCiB7cToi64SkLCDtmZXsnbjrkJDslrTsmpQuIOuwqeydgCAyMDPtmLjsmIjsmpQuIixxRW46IkNvbmZpcm1lZC4gWW91ciByb29tIGlzIDIwMy4iLHRhc2s6IkFzayB3aGF0IHRoZSB3aWZpIHBhc3N3b3JkIGlzLiIsYToi7JmA7J207YyM7J20IOu5hOuwgOuyiO2YuOqwgCDrrZDsmIjsmpQ/IixhRW46IldoYXQgaXMgdGhlIHdpZmkgcGFzc3dvcmQ/IixhbHQ6WyLsmYDsnbTtjIzsnbQg67mE67CA67KI7Zi4IOyigCDslYzroKQg7KO87IS47JqULiJdfSwKIHtxOiLruYTrsIDrsojtmLjripQg66y47JeQIOu2meyWtCDsnojslrTsmpQuIixxRW46IlRoZSBwYXNzd29yZCBpcyBwb3N0ZWQgb24gdGhlIGRvb3IuIix0YXNrOiJBc2sgd2hhdCB0aW1lIGJyZWFrZmFzdCBzdGFydHMuIixhOiLsobDsi53snYAg66qHIOyLnOyXkCDsi5zsnpHtlbTsmpQ/IixhRW46IldoYXQgdGltZSBkb2VzIGJyZWFrZmFzdCBzdGFydD8iLGFsdDpbIuyVhOy5qOydgCDrqocg7Iuc7JiI7JqUPyJdfSwKIHtxOiLslYTsuaggOOyLnOu2gO2EsCAxMOyLnOq5jOyngOyYiOyalC4iLHFFbjoiRnJvbSA4IHRvIDEwIGluIHRoZSBtb3JuaW5nLiIsdGFzazoiQXNrIGlmIHRoZXJlIGFyZSBmYW1vdXMgc2lnaHRzIG5lYXJieS4iLGE6Iuq3vOyymOyXkCDsnKDrqoXtlZwg6rSA6rSR7KeAIOyeiOyWtOyalD8iLGFFbjoiQXJlIHRoZXJlIGZhbW91cyBzaWdodHMgbmVhcmJ5PyIsYWx0Olsi6re87LKY7JeQIOutkOqwgCDsnKDrqoXtlbTsmpQ/Il19LAoge3E6IuuwlOuLpCDsgrDssYXquLjsnbQg7KCV66eQIOyVhOumhOuLpOybjOyalCEiLHFFbjoiVGhlIHNlYXNpZGUgd2Fsa2luZyBwYXRoIGlzIHJlYWxseSBiZWF1dGlmdWwhIix0YXNrOiJTYXkgdGhlIHNjZW5lcnkgaXMgYW1hemluZyDigJQgdGhhbmsgaGVyLiIsYToi6rK97LmY6rCAIOygleunkCDsoovrhKTsmpQhIOqwkOyCrO2VqeuLiOuLpCEiLGFFbjoiVGhlIHNjZW5lcnkgaXMgYW1hemluZyEgVGhhbmsgeW91ISIsYWx0Olsi7JmALCDsoovrhKTsmpQuIOqwkOyCrO2VqeuLiOuLpCEiXX1dfSwKMTI6e3dobzoi8J+nkeKAjeKciO+4jyDsl63rrLTsm5AgKHN0YXRpb24gYXR0ZW5kYW50KSIsIHQ6IlRoZSBsb3N0IHdhbGxldCIsIHR1cm5zOlsKIHtxOiLrrLTsiqgg7J287J207IS47JqUPyIscUVuOiJXaGF0IGlzIHRoZSBtYXR0ZXI/Iix0YXNrOiJBc2sgZm9yIGhlbHAg4oCUIHlvdSBsb3N0IHlvdXIgd2FsbGV0LiIsYToi64+E7JmA7KO87IS47JqUISDsp4DqsJHsnYQg7J6D7Ja067KE66C47Ja07JqULiIsYUVuOiJQbGVhc2UgaGVscCBtZSEgSSBsb3N0IG15IHdhbGxldC4iLGFsdDpbIuyngOqwkeydhCDsnoPslrTrsoTroLjslrTsmpQuIl19LAoge3E6IuyVhOydtOqzoCEg7Ja065SU7JeQ7IScIOyeg+yWtOuyhOuguOyWtOyalD8iLHFFbjoiT2ggbm8hIFdoZXJlIGRpZCB5b3UgbG9zZSBpdD8iLHRhc2s6IlNheSBvbiB0aGUgc3Vid2F5LCBvbiBsaW5lIDIuIixhOiLsp4DtlZjssqAgMu2YuOyEoOyXkOyEnCDsnoPslrTrsoTroLjslrTsmpQuIixhRW46IkkgbG9zdCBpdCBvbiBzdWJ3YXkgbGluZSAyLiIsYWx0OlsiMu2YuOyEoOyXkOyEnOyalC4iXX0sCiB7cToi7Jyg7Iuk66y87IS87YSw7JeQ7KCE7ZmU7ZWY66m065CY64qU642w7KeA6riI67CU66Gc4oCmIixxRW46Iih2ZXJ5IGZhc3QpIFlvdSBjYW4gY2FsbCB0aGUgbG9zdC1hbmQtZm91bmQgYW5kIHJpZ2h0IG5vd+KApiIsdGFzazoiQXNrIHRoZW0gdG8gc3BlYWsgc2xvd2x5LCBwbGVhc2UuIixhOiLso4TshqHtlZjsp4Drp4wsIOyynOyynO2eiCDrp5DtlbQg7KO87IS47JqULiIsYUVuOiJTb3JyeSwgYnV0IHBsZWFzZSBzcGVhayBzbG93bHkuIixhbHQ6WyLsspzsspztnogg66eQ7ZW0IOyjvOyEuOyalC4iXX0sCiB7cToi7JWELCDrhKQhIOycoOyLpOusvOyEvO2EsOyXkCDsoITtmZTtlbQg67O07IS47JqULiIscUVuOiJBaCwgc3VyZSEgVHJ5IGNhbGxpbmcgdGhlIGxvc3QtYW5kLWZvdW5kIGNlbnRlci4iLHRhc2s6IlNheSB5b3UgdW5kZXJzdGFuZCDigJQgYXNrIHRoZW0gdG8gc2F5IHRoZSBudW1iZXIgYWdhaW4uIixhOiLslYzqsqDslrTsmpQuIOuyiO2YuOulvCDri6Tsi5wg7ZWc67KIIOunkO2VtCDso7zshLjsmpQuIixhRW46IlVuZGVyc3Rvb2QuIFBsZWFzZSBzYXkgdGhlIG51bWJlciBvbmUgbW9yZSB0aW1lLiIsYWx0Olsi64uk7IucIO2VnOuyiCDrp5DtlbQg7KO87IS47JqULiJdfSwKIHtxOiIwMi02MTEwLTExMjLsmIjsmpQuIOq8rSDssL7snYQg6rGw7JiI7JqUISIscUVuOiJJdCBpcyAwMi02MTEwLTExMjIuIFlvdSB3aWxsIHN1cmVseSBmaW5kIGl0ISIsdGFzazoiVGhhbmsgdGhlbSBzaW5jZXJlbHkgZm9yIHRoZSBoZWxwLiIsYToi7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEg7YGwIOuPhOybgOydtCDrkJDslrTsmpQhIixhRW46IlRoYW5rIHlvdSBzbyBtdWNoISBZb3Ugd2VyZSBhIGJpZyBoZWxwISIsYWx0Olsi7KCV66eQIOqwkOyCrO2VqeuLiOuLpCEiXX1dfQp9OwoKLyogPT09PT09PT09PT09PT09IFNUQVRFID09PT09PT09PT09PT09PSAqLwpjb25zdCBTQVZFX0tFWSA9ICJ0b21zS29yZWFuUXVlc3RWMSI7CmxldCBzYXZlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTQVZFX0tFWSkgfHwgIm51bGwiKSB8fCB7IHhwOjAsIGxldmVsOjEsIGJlc3RDb21ibzowLCBsZXNzb25zOnt9IH07CmZ1bmN0aW9uIGxzdGF0ZShuKSB7CiAgaWYgKCFzYXZlLmxlc3NvbnNbbl0pIHNhdmUubGVzc29uc1tuXSA9IHsga25vd246W10sIHNwb2tlbjpbXSwgc3RhcnM6e2xlYXJuOmZhbHNlLCBib3NzOmZhbHNlLCBzcGVhazpmYWxzZSwgc3Rvcnk6ZmFsc2UsIHRhbGs6ZmFsc2V9IH07CiAgcmV0dXJuIHNhdmUubGVzc29uc1tuXTsKfQpsZXQgY3VyID0gbnVsbDsgICAgICAvLyBjdXJyZW50IGxlc3NvbiBvYmplY3QKbGV0IGxlYXJuSWR4ID0gMCwgc3BlYWtJZHggPSAwOwpjb25zdCBSQU5LUyA9IFsiSGFuZ2V1bCBIYXRjaGxpbmciLCJLaW1jaGkgQ2FkZXQiLCJTZW91bCBTY2hvbGFyIiwiSGFuYm9rIEhlcm8iLCJCaWJpbWJhcCBCb3NzIiwiSy1Qb3AgUHJvZGlneSIsIlRPUElLIFRpdGFuIiwiSy1EcmFtYSBMZWdlbmQiXTsKZnVuY3Rpb24geHBGb3JMZXZlbChsdikgeyByZXR1cm4gbHYgKiAxMDA7IH0KZnVuY3Rpb24gcGVyc2lzdCgpIHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU0FWRV9LRVksIEpTT04uc3RyaW5naWZ5KHNhdmUpKTsgfQoKZnVuY3Rpb24gcmVuZGVySHVkKCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodWRMZXZlbCIpLnRleHRDb250ZW50ID0gc2F2ZS5sZXZlbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHVkUmFuayIpLnRleHRDb250ZW50ID0gUkFOS1NbTWF0aC5taW4oc2F2ZS5sZXZlbCAtIDEsIFJBTktTLmxlbmd0aCAtIDEpXTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHVkWHAiKS50ZXh0Q29udGVudCA9IHNhdmUueHA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh1ZE5leHQiKS50ZXh0Q29udGVudCA9IHhwRm9yTGV2ZWwoc2F2ZS5sZXZlbCkgLSBzYXZlLnhwOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cEZpbGwiKS5zdHlsZS53aWR0aCA9IE1hdGgubWluKDEwMCwgc2F2ZS54cCAvIHhwRm9yTGV2ZWwoc2F2ZS5sZXZlbCkgKiAxMDApICsgIiUiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJodWRTdHJlYWsiKS50ZXh0Q29udGVudCA9IHNhdmUuc3RyZWFrID8gc2F2ZS5zdHJlYWsuY291bnQgOiAwOwogIGNvbnN0IHdvcmRzID0gT2JqZWN0LnZhbHVlcyhzYXZlLmxlc3NvbnMpLnJlZHVjZSgoYSwgbCkgPT4gYSArIChsLmtub3duID8gbC5rbm93bi5sZW5ndGggOiAwKSwgMCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh1ZFdvcmRzIikudGV4dENvbnRlbnQgPSB3b3JkczsKICAvLyBmaXJzdCBzZXNzaW9ucyBvbmx5OiBvbmUgcGxhaW4gbGluZSBvbiB3aGF0IHRoZSBudW1iZXJzIG1lYW47IGRpc21pc3NpYmxlLCBhbmQgZ29uZSBieSBpdHNlbGYgYWZ0ZXIgOCB3b3JkcwogIGNvbnN0IGhpbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHVkSGludCIpOwogIGlmIChoaW50KSB7CiAgICBsZXQgc2VlbiA9IGZhbHNlOyB0cnkgeyBzZWVuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImtxSHVkSGludCIpID09PSAiMSI7IH0gY2F0Y2ggKGUpIHt9CiAgICBjb25zdCBzaG93SGludCA9ICFzZWVuICYmIHdvcmRzIDwgODsKICAgIGlmIChzaG93SGludCAmJiAhaGludC5pbm5lckhUTUwpIGhpbnQuaW5uZXJIVE1MID0gYDxzcGFuPuKaoSA8Yj5YUDwvYj4gZ3Jvd3Mgd2l0aCBldmVyeSB3b3JkIHlvdSBsZWFybiBhbmQgZXZlcnkgc2VudGVuY2UgeW91IHNheSBvdXQgbG91ZC4g8J+UpSBUaGUgPGI+c3RyZWFrPC9iPiBjb3VudHMgdGhlIGRheXMgeW91IHByYWN0aXNlZCDigJQgb25lIHdvcmQgYSBkYXkga2VlcHMgaXQuPC9zcGFuPjxidXR0b24gb25jbGljaz0idHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdrcUh1ZEhpbnQnLCcxJyl9Y2F0Y2goZSl7fTt0aGlzLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT0nbm9uZSciIGFyaWEtbGFiZWw9IkRpc21pc3MiPuKclTwvYnV0dG9uPmA7CiAgICBoaW50LnN0eWxlLmRpc3BsYXkgPSBzaG93SGludCA/ICIiIDogIm5vbmUiOwogIH0KfQpmdW5jdGlvbiBnYWluWHAobikgewogIG4gKz0gc3RyZWFrVGljaygpOyAvLyBmaXJzdCBhY3Rpb24gb2YgdGhlIGRheSBleHRlbmRzIHRoZSBzdHJlYWsgKCtib251cykKICBzYXZlLnhwICs9IG47CiAgd2hpbGUgKHNhdmUueHAgPj0geHBGb3JMZXZlbChzYXZlLmxldmVsKSkgeyBzYXZlLnhwIC09IHhwRm9yTGV2ZWwoc2F2ZS5sZXZlbCk7IHNhdmUubGV2ZWwrKzsgbGV2ZWxVcEZ4KCk7IH0KICBwZXJzaXN0KCk7IHJlbmRlckh1ZCgpOwogIGlmICghaW5BY2gpIHsgaW5BY2ggPSB0cnVlOyB0cnkgeyBjaGVja0FjaCgpOyB9IGZpbmFsbHkgeyBpbkFjaCA9IGZhbHNlOyB9IH0KfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBNT1RJVkFUSU9OIExBWUVSIOKAlCBkYWlseSBzdHJlYWssIGRhaWx5IGdvYWxzLCBhY2hpZXZlbWVudHMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiB0b2RheVN0cihvZmZzZXREYXlzID0gMCkgewogIGNvbnN0IGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgb2Zmc2V0RGF5cyAqIDg2NDAwMDAwKTsKICByZXR1cm4gZC5nZXRGdWxsWWVhcigpICsgIi0iICsgU3RyaW5nKGQuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICIwIikgKyAiLSIgKyBTdHJpbmcoZC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICIwIik7Cn0KZnVuY3Rpb24gc3RyZWFrVGljaygpIHsKICBpZiAoIXNhdmUuc3RyZWFrKSBzYXZlLnN0cmVhayA9IHsgY291bnQ6IDAsIGxhc3Q6ICIiLCBiZXN0OiAwIH07CiAgY29uc3QgdCA9IHRvZGF5U3RyKCk7CiAgaWYgKHNhdmUuc3RyZWFrLmxhc3QgPT09IHQpIHJldHVybiAwOwogIHNhdmUuc3RyZWFrLmNvdW50ID0gc2F2ZS5zdHJlYWsubGFzdCA9PT0gdG9kYXlTdHIoLTEpID8gc2F2ZS5zdHJlYWsuY291bnQgKyAxIDogMTsKICBzYXZlLnN0cmVhay5sYXN0ID0gdDsKICBzYXZlLnN0cmVhay5iZXN0ID0gTWF0aC5tYXgoc2F2ZS5zdHJlYWsuYmVzdCwgc2F2ZS5zdHJlYWsuY291bnQpOwogIGNvbnN0IGJvbnVzID0gNSAqIE1hdGgubWluKHNhdmUuc3RyZWFrLmNvdW50LCA1KTsgLy8gZGF5IDE6ICs1IOKApiBkYXkgNSs6ICsyNQogIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBiLmNsYXNzTmFtZSA9ICJsZXZlbHVwLWJhbm5lciI7CiAgYi50ZXh0Q29udGVudCA9ICLwn5SlIERheSAiICsgc2F2ZS5zdHJlYWsuY291bnQgKyAiIHN0cmVhayEgKyIgKyBib251cyArICIgWFAiOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7IHNldFRpbWVvdXQoKCkgPT4gYi5yZW1vdmUoKSwgMjEwMCk7CiAgc2Z4LndpbigpOwogIHJldHVybiBib251czsKfQovKiAtLS0gZGFpbHkgZ29hbHMgLS0tICovCmZ1bmN0aW9uIGRhaWx5KCkgewogIGNvbnN0IHQgPSB0b2RheVN0cigpOwogIGlmICghc2F2ZS5kYWlseSB8fCBzYXZlLmRhaWx5LmRhdGUgIT09IHQpIHNhdmUuZGFpbHkgPSB7IGRhdGU6IHQsIHdvcmRzOiAwLCBwcm9uOiAwLCBjb252bzogMCwgY2xhaW1lZDogZmFsc2UgfTsKICByZXR1cm4gc2F2ZS5kYWlseTsKfQpmdW5jdGlvbiBkYWlseUJ1bXAoaykgewogIGNvbnN0IGQgPSBkYWlseSgpOwogIGRba10rKzsKICBwZXJzaXN0KCk7CiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXAiKS5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpKSByZW5kZXJEYWlseSgpOwp9CmZ1bmN0aW9uIGRhaWx5Q2xhaW0oKSB7CiAgY29uc3QgZCA9IGRhaWx5KCk7CiAgaWYgKGQuY2xhaW1lZCB8fCAhKGQud29yZHMgPj0gNSAmJiBkLnByb24gPj0gMyAmJiBkLmNvbnZvID49IDEpKSByZXR1cm47CiAgZC5jbGFpbWVkID0gdHJ1ZTsgcGVyc2lzdCgpOwogIGdhaW5YcCgzMCk7IGNvbmZldHRpKCk7IHNmeC53aW4oKTsKICByZW5kZXJEYWlseSgpOwp9CmZ1bmN0aW9uIHJlbmRlckRhaWx5KCkgewogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkYWlseUJveCIpOwogIGlmICghYm94KSByZXR1cm47CiAgY29uc3QgZCA9IGRhaWx5KCk7CiAgY29uc3Qgc3QgPSBzYXZlLnN0cmVhayB8fCB7IGNvdW50OiAwLCBiZXN0OiAwIH07CiAgY29uc3QgZ29hbHMgPSBbCiAgICB7IGxhYmVsOiAiTGVhcm4gNSBuZXcgd29yZHMiLCBjdXI6IE1hdGgubWluKGQud29yZHMsIDUpLCBtYXg6IDUgfSwKICAgIHsgbGFiZWw6ICIzIGdvb2QgcHJvbnVuY2lhdGlvbnMg8J+OpCIsIGN1cjogTWF0aC5taW4oZC5wcm9uLCAzKSwgbWF4OiAzIH0sCiAgICB7IGxhYmVsOiAiRmluaXNoIDEgc3Rvcnkgb3IgY29udmVyc2F0aW9uIiwgY3VyOiBNYXRoLm1pbihkLmNvbnZvLCAxKSwgbWF4OiAxIH0sCiAgXTsKICBjb25zdCBhbGxEb25lID0gZ29hbHMuZXZlcnkoZyA9PiBnLmN1ciA+PSBnLm1heCk7CiAgY29uc3QgdG90VyA9IExFU1NPTlMucmVkdWNlKChhLCBMKSA9PiBhICsgTC53b3Jkcy5sZW5ndGgsIDApOwogIGNvbnN0IHN0YXJzRWFybmVkID0gT2JqZWN0LmVudHJpZXMoc2F2ZS5sZXNzb25zKS5maWx0ZXIoKFtrXSkgPT4gayAhPT0gIlIiKQogICAgLnJlZHVjZSgoYSwgWywgbF0pID0+IGEgKyBPYmplY3QudmFsdWVzKGwuc3RhcnMgfHwge30pLmZpbHRlcihCb29sZWFuKS5sZW5ndGgsIDApOwogIHNhdmUuYWNoID0gc2F2ZS5hY2ggfHwgW107CiAgY29uc3QgYWNoRW1vamlzID0gQUNILmZpbHRlcihhID0+IHNhdmUuYWNoLmluY2x1ZGVzKGEuaWQpKS5tYXAoYSA9PiBgPHNwYW4gdGl0bGU9IiR7YS50fSI+JHthLmV9PC9zcGFuPmApLmpvaW4oIiAiKTsKICBib3guaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImRhaWx5Ij4KICAgIDxoMz48c3Bhbj7wn46vIFRvZGF5J3MgZ29hbHM8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmVha2xibCI+8J+UpSAke3N0LmNvdW50fS1kYXkgc3RyZWFrIMK3IGJlc3QgJHtzdC5iZXN0fTwvc3Bhbj48L2gzPgogICAgJHtnb2Fscy5tYXAoZyA9PiBgPGRpdiBjbGFzcz0iZ29hbCAke2cuY3VyID49IGcubWF4ID8gImRvbmUiIDogIiJ9Ij4KICAgICAgPHNwYW4+JHtnLmN1ciA+PSBnLm1heCA/ICLinIUiIDogIuKsnCJ9PC9zcGFuPjxzcGFuIGNsYXNzPSJnbGFiZWwiPiR7Zy5sYWJlbH08L3NwYW4+CiAgICAgIDxkaXYgY2xhc3M9ImJhciI+PGkgc3R5bGU9IndpZHRoOiR7Zy5jdXIgLyBnLm1heCAqIDEwMH0lIj48L2k+PC9kaXY+PHNwYW4+JHtnLmN1cn0vJHtnLm1heH08L3NwYW4+PC9kaXY+YCkuam9pbigiIil9CiAgICA8YnV0dG9uIGNsYXNzPSJidG4gY2xhaW1idG4iICR7ZC5jbGFpbWVkIHx8ICFhbGxEb25lID8gJ2Rpc2FibGVkIHN0eWxlPSJvcGFjaXR5Oi41NSInIDogIiJ9IG9uY2xpY2s9ImRhaWx5Q2xhaW0oKSI+CiAgICAgICR7ZC5jbGFpbWVkID8gIuKchSBDbGFpbWVkIOKAlCBjb21lIGJhY2sgdG9tb3Jyb3cgZm9yIGRheSAiICsgKHN0LmNvdW50ICsgMSkgKyAiISIgOiBhbGxEb25lID8gIvCfjoEgQ2xhaW0gKzMwIFhQIiA6ICLwn46BICszMCBYUCB3aGVuIGFsbCB0aHJlZSBhcmUgZG9uZSJ9PC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJhY2hyb3ciPjxzcGFuIGNsYXNzPSJhY2hjb3VudCI+8J+PhSAke3NhdmUuYWNoLmxlbmd0aH0vJHtBQ0gubGVuZ3RofTwvc3Bhbj4ke2FjaEVtb2ppc308L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByb2dsaW5lIj7wn5OaICR7dG90YWxMZWFybmVkKCl9LyR7dG90V30gd29yZHMgwrcg4q2QICR7c3RhcnNFYXJuZWR9LyR7TEVTU09OUy5sZW5ndGggKiA1fSBzdGFycyDCtyDwn46WICR7dG90YWxQcm9uKCl9IHByb25vdW5jZWQ8L2Rpdj4KICA8L2Rpdj5gOwp9Ci8qIC0tLSBhY2hpZXZlbWVudHMgLS0tICovCmNvbnN0IHRvdGFsTGVhcm5lZCA9ICgpID0+IE9iamVjdC52YWx1ZXMoc2F2ZS5sZXNzb25zKS5yZWR1Y2UoKGEsIGwpID0+IGEgKyAobC5rbm93biA/IGwua25vd24ubGVuZ3RoIDogMCksIDApOwpjb25zdCB0b3RhbFByb24gPSAoKSA9PiBPYmplY3QudmFsdWVzKHNhdmUubGVzc29ucykucmVkdWNlKChhLCBsKSA9PiBhICsgKGwucHJvbiA/IGwucHJvbi5sZW5ndGggOiAwKSwgMCk7CmNvbnN0IGFueVN0YXIgPSBrID0+IE9iamVjdC5lbnRyaWVzKHNhdmUubGVzc29ucykuc29tZSgoW2tleSwgbF0pID0+IGtleSAhPT0gIlIiICYmIGwuc3RhcnMgJiYgbC5zdGFyc1trXSk7CmNvbnN0IEFDSCA9IFsKICB7IGlkOiAidzEiLCAgIGU6ICLwn5CjIiwgdDogIkZpcnN0IHdvcmQgbGVhcm5lZCIsICAgICAgICAgICAgY29uZDogKCkgPT4gdG90YWxMZWFybmVkKCkgPj0gMSB9LAogIHsgaWQ6ICJ3MjUiLCAgZTogIvCfjLEiLCB0OiAiMjUgd29yZHMgbGVhcm5lZCIsICAgICAgICAgICAgICBjb25kOiAoKSA9PiB0b3RhbExlYXJuZWQoKSA+PSAyNSB9LAogIHsgaWQ6ICJ3NTAiLCAgZTogIvCfk5oiLCB0OiAiNTAgd29yZHMgbGVhcm5lZCIsICAgICAgICAgICAgICBjb25kOiAoKSA9PiB0b3RhbExlYXJuZWQoKSA+PSA1MCB9LAogIHsgaWQ6ICJ3MTAwIiwgZTogIvCfk5YiLCB0OiAiMTAwIHdvcmRzIGxlYXJuZWQiLCAgICAgICAgICAgICBjb25kOiAoKSA9PiB0b3RhbExlYXJuZWQoKSA+PSAxMDAgfSwKICB7IGlkOiAidzIwMCIsIGU6ICLwn4+GIiwgdDogIjIwMCB3b3JkcyBsZWFybmVkIiwgICAgICAgICAgICAgY29uZDogKCkgPT4gdG90YWxMZWFybmVkKCkgPj0gMjAwIH0sCiAgeyBpZDogInAxMCIsICBlOiAi8J+OliIsIHQ6ICIxMCB3b3JkcyBwcm9ub3VuY2VkIHJpZ2h0IiwgICAgIGNvbmQ6ICgpID0+IHRvdGFsUHJvbigpID49IDEwIH0sCiAgeyBpZDogInA1MCIsICBlOiAi8J+OmSIsIHQ6ICI1MCB3b3JkcyBwcm9ub3VuY2VkIHJpZ2h0IiwgICAgIGNvbmQ6ICgpID0+IHRvdGFsUHJvbigpID49IDUwIH0sCiAgeyBpZDogImMxIiwgICBlOiAi8J+SrCIsIHQ6ICJGaXJzdCBjb252ZXJzYXRpb24gZmluaXNoZWQiLCAgIGNvbmQ6ICgpID0+IGFueVN0YXIoInRhbGsiKSB9LAogIHsgaWQ6ICJiMSIsICAgZTogIuKalO+4jyIsIHQ6ICJGaXJzdCBib3NzIGRlZmVhdGVkIiwgICAgICAgICAgIGNvbmQ6ICgpID0+IGFueVN0YXIoImJvc3MiKSB9LAogIHsgaWQ6ICJxNSIsICAgZTogIvCfjJ8iLCB0OiAiQSBxdWVzdCBmdWxseSBzdGFycmVkIiwgICAgICAgICBjb25kOiAoKSA9PiBPYmplY3QuZW50cmllcyhzYXZlLmxlc3NvbnMpLnNvbWUoKFtrLCBsXSkgPT4gayAhPT0gIlIiICYmIGwuc3RhcnMgJiYgbC5zdGFycy5sZWFybiAmJiBsLnN0YXJzLnN0b3J5ICYmIGwuc3RhcnMudGFsayAmJiBsLnN0YXJzLnNwZWFrICYmIGwuc3RhcnMuYm9zcykgfSwKICB7IGlkOiAiczMiLCAgIGU6ICLwn5SlIiwgdDogIjMtZGF5IHN0cmVhayIsICAgICAgICAgICAgICAgICAgY29uZDogKCkgPT4gKHNhdmUuc3RyZWFrID8gc2F2ZS5zdHJlYWsuYmVzdCA6IDApID49IDMgfSwKICB7IGlkOiAiczciLCAgIGU6ICLwn4yLIiwgdDogIjctZGF5IHN0cmVhayIsICAgICAgICAgICAgICAgICAgY29uZDogKCkgPT4gKHNhdmUuc3RyZWFrID8gc2F2ZS5zdHJlYWsuYmVzdCA6IDApID49IDcgfSwKXTsKbGV0IGluQWNoID0gZmFsc2U7CmZ1bmN0aW9uIGNoZWNrQWNoKCkgewogIHNhdmUuYWNoID0gc2F2ZS5hY2ggfHwgW107CiAgZm9yIChjb25zdCBhIG9mIEFDSCkgewogICAgaWYgKCFzYXZlLmFjaC5pbmNsdWRlcyhhLmlkKSAmJiBhLmNvbmQoKSkgewogICAgICBzYXZlLmFjaC5wdXNoKGEuaWQpOyBwZXJzaXN0KCk7CiAgICAgIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgYi5jbGFzc05hbWUgPSAibGV2ZWx1cC1iYW5uZXIiOwogICAgICBiLnRleHRDb250ZW50ID0gIvCfj4UgIiArIGEuZSArICIgIiArIGEudCArICIhICsxNSBYUCI7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYik7IHNldFRpbWVvdXQoKCkgPT4gYi5yZW1vdmUoKSwgMjEwMCk7CiAgICAgIGNvbmZldHRpKCk7IHNmeC53aW4oKTsKICAgICAgZ2FpblhwKDE1KTsgLy8gaW5BY2ggZ3VhcmQgcHJldmVudHMgcmUtZW50cnkKICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXAiKS5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpKSByZW5kZXJEYWlseSgpOwogICAgfQogIH0KfQoKLyogPT09PT09PT09PT09PT09IFNPVU5EICYgRlggPT09PT09PT09PT09PT09ICovCmxldCBhdWRpb0N0eDsKZnVuY3Rpb24gYmVlcChmcmVxLCBkdXIsIHR5cGUgPSAic2luZSIsIHZvbCA9IDAuMTUpIHsKICB0cnkgewogICAgYXVkaW9DdHggPSBhdWRpb0N0eCB8fCBuZXcgKHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkoKTsKICAgIGNvbnN0IG8gPSBhdWRpb0N0eC5jcmVhdGVPc2NpbGxhdG9yKCksIGcgPSBhdWRpb0N0eC5jcmVhdGVHYWluKCk7CiAgICBvLnR5cGUgPSB0eXBlOyBvLmZyZXF1ZW5jeS52YWx1ZSA9IGZyZXE7CiAgICBnLmdhaW4uc2V0VmFsdWVBdFRpbWUodm9sLCBhdWRpb0N0eC5jdXJyZW50VGltZSk7CiAgICBnLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMSwgYXVkaW9DdHguY3VycmVudFRpbWUgKyBkdXIpOwogICAgby5jb25uZWN0KGcpOyBnLmNvbm5lY3QoYXVkaW9DdHguZGVzdGluYXRpb24pOwogICAgby5zdGFydCgpOyBvLnN0b3AoYXVkaW9DdHguY3VycmVudFRpbWUgKyBkdXIpOwogIH0gY2F0Y2goZSkge30KfQpjb25zdCBzZnggPSB7CiAgZ29vZCgpIHsgYmVlcCg2NjAsLjEyKTsgc2V0VGltZW91dCgoKT0+YmVlcCg4ODAsLjE1KSw5MCk7IH0sCiAgYmFkKCkgeyBiZWVwKDE4MCwuMjUsInNhd3Rvb3RoIiwuMSk7IH0sCiAgd2luKCkgeyBbNTIzLDY1OSw3ODQsMTA0N10uZm9yRWFjaCgoZixpKT0+c2V0VGltZW91dCgoKT0+YmVlcChmLC4yKSxpKjEzMCkpOyB9LAogIGhpdCgpIHsgYmVlcCgxMjAsLjE1LCJzcXVhcmUiLC4xMik7IGJlZXAoNDAwLC4wOCwic2F3dG9vdGgiLC4wOCk7IH0KfTsKZnVuY3Rpb24gZmxvYXRGeCh0ZXh0LCBjb2xvciwgeCwgeSkgewogIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgZWwuY2xhc3NOYW1lID0gImZ4LWZsb2F0IjsgZWwudGV4dENvbnRlbnQgPSB0ZXh0OyBlbC5zdHlsZS5jb2xvciA9IGNvbG9yOwogIGVsLnN0eWxlLmxlZnQgPSAoeCA/PyB3aW5kb3cuaW5uZXJXaWR0aC8yIC0gMjApICsgInB4IjsKICBlbC5zdHlsZS50b3AgPSAoeSA/PyB3aW5kb3cuaW5uZXJIZWlnaHQvMikgKyAicHgiOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpOyBzZXRUaW1lb3V0KCgpPT5lbC5yZW1vdmUoKSwgMTAwMCk7Cn0KZnVuY3Rpb24gbGV2ZWxVcEZ4KCkgewogIGNvbnN0IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBiLmNsYXNzTmFtZSA9ICJsZXZlbHVwLWJhbm5lciI7IGIudGV4dENvbnRlbnQgPSAi4qyG77iPIExFVkVMIFVQISBMdiAiICsgc2F2ZS5sZXZlbDsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGIpOyBzZXRUaW1lb3V0KCgpPT5iLnJlbW92ZSgpLCAyMTAwKTsKICBjb25mZXR0aSgpOyBzZngud2luKCk7Cn0KZnVuY3Rpb24gY29uZmV0dGkoKSB7CiAgY29uc3QgY29sb3JzID0gWyIjQzY4RjNFIiwiIzUwM0FBOCIsIiNCMDdEMjgiLCIjMkY3RDRGIl07CiAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgaSsrKSB7CiAgICBjb25zdCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjLmNsYXNzTmFtZSA9ICJjb25mZXR0aSI7CiAgICBjLnN0eWxlLmxlZnQgPSBNYXRoLnJhbmRvbSgpKjEwMCArICJ2dyI7IGMuc3R5bGUudG9wID0gIi0xMHB4IjsKICAgIGMuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG9yc1tpICUgNF07CiAgICBjLnN0eWxlLmFuaW1hdGlvbkR1cmF0aW9uID0gKDAuOSArIE1hdGgucmFuZG9tKCkqMS40KSArICJzIjsKICAgIGMuc3R5bGUuYm9yZGVyUmFkaXVzID0gTWF0aC5yYW5kb20oKSA+IC41ID8gIjUwJSIgOiAiMnB4IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyk7IHNldFRpbWVvdXQoKCk9PmMucmVtb3ZlKCksIDI1MDApOwogIH0KfQoKLyogPT09PT09PT09PT09PT09IFRUUyAoc3BlYWtpbmcgdm9pY2UpID09PT09PT09PT09PT09PSAqLwpsZXQga29Wb2ljZSA9IG51bGw7CmZ1bmN0aW9uIHBpY2tWb2ljZSgpIHsKICBjb25zdCB2cyA9IHNwZWVjaFN5bnRoZXNpcy5nZXRWb2ljZXMoKS5maWx0ZXIodiA9PiB2LmxhbmcgJiYgdi5sYW5nLnN0YXJ0c1dpdGgoImtvIikpOwogIGNvbnN0IHdhbnQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgia3FWb2ljZU5hbWUiKTsKICBrb1ZvaWNlID0gKHdhbnQgJiYgdnMuZmluZCh2ID0+IHYubmFtZSA9PT0gd2FudCkpIHx8IHZzLmZpbmQodiA9PiAvWXVuYXxTb3JhfEdvb2dsZS9pLnRlc3Qodi5uYW1lKSkgfHwgdnNbMF0gfHwgbnVsbDsKfQppZiAoInNwZWVjaFN5bnRoZXNpcyIgaW4gd2luZG93KSB7CiAgcGlja1ZvaWNlKCk7CiAgc3BlZWNoU3ludGhlc2lzLm9udm9pY2VzY2hhbmdlZCA9IHBpY2tWb2ljZTsKfQpsZXQgc2F5VG9rZW4gPSAwLCBzYXlLaWNrID0gbnVsbCwgdHRzV2FybmVkID0gZmFsc2U7CmZ1bmN0aW9uIGtxVHRzV2FybigpIHsKICBpZiAodHRzV2FybmVkKSByZXR1cm47CiAgdHRzV2FybmVkID0gdHJ1ZTsKICBjb25zdCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgYi5jbGFzc05hbWUgPSAibGV2ZWx1cC1iYW5uZXIiOwogIGIuc3R5bGUuY3NzVGV4dCA9ICJiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzU1NSwjMzMzKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNHB4O3doaXRlLXNwYWNlOm5vcm1hbDttYXgtd2lkdGg6MzQwcHg7YW5pbWF0aW9uOmJhbm5lciA1cyBlYXNlIGZvcndhcmRzOyI7CiAgYi50ZXh0Q29udGVudCA9ICLwn5SHIFRoaXMgYnJvd3NlcidzIHNwZWVjaCBlbmdpbmUgaXMgc3R1Y2suIFJlc3RhcnRpbmcgdGhlIGJyb3dzZXIgdXN1YWxseSBicmluZ3MgdGhlIHZvaWNlIGJhY2suIjsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGIpOwogIHNldFRpbWVvdXQoKCkgPT4gYi5yZW1vdmUoKSwgNTEwMCk7Cn0KLyogdm9pY2Ugc3BlZWQ6IGxlYXJuZXItY29udHJvbGxlZCwgcGVyc2lzdHMgYWNyb3NzIHZpc2l0cyAoc2hhcmVkIGxvY2FsU3RvcmFnZSBrZXkpICovCmNvbnN0IEtRX0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8IChuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICJNYWNJbnRlbCIgJiYgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMSk7CmNvbnN0IFNQRF9TVEVQUyA9IFtbInNsb3ciLCAwLjcsICLwn5CiIFNsb3ciXSwgWyJub3JtYWwiLCAwLjg1LCAi4pa2IE5vcm1hbCJdLCBbImZhc3QiLCAxLCAi8J+QhyBGYXN0Il1dOwpmdW5jdGlvbiB2b2ljZVNwZCgpIHsgY29uc3QgayA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJrcVZvaWNlU3BkIik7IHJldHVybiBTUERfU1RFUFMuZmluZCh4ID0+IHhbMF0gPT09IGspIHx8IFNQRF9TVEVQU1sxXTsgfQpmdW5jdGlvbiByZW5kZXJTcGQoKSB7IGNvbnN0IGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BkQnRuIik7IGlmIChiKSBiLnRleHRDb250ZW50ID0gIvCfjpkgVm9pY2UgwrcgIiArIHZvaWNlU3BkKClbMl0gKyAiIHNwZWVkIjsgfQpmdW5jdGlvbiBzZXRTcGQoaykgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgia3FWb2ljZVNwZCIsIGspOyByZW5kZXJTcGQoKTsgb3BlblZvaWNlU2V0KCk7IHNheSgi7JWI64WV7ZWY7IS47JqULiDrsJjqsJHsirXri4jri6QuIik7IH0KZnVuY3Rpb24gc2V0Vm9pY2UobmFtZSkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgia3FWb2ljZU5hbWUiLCBuYW1lKTsgcGlja1ZvaWNlKCk7IG9wZW5Wb2ljZVNldCgpOyBzYXkoIuyViOuFle2VmOyEuOyalC4g66eM64KY7IScIOuwmOqwkeyKteuLiOuLpC4iKTsgfQpmdW5jdGlvbiBvcGVuVm9pY2VTZXQoKSB7CiAgY29uc3Qgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxVm9pY2VXcmFwIik7IGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKICBjb25zdCB2cyA9ICgic3BlZWNoU3ludGhlc2lzIiBpbiB3aW5kb3cpID8gc3BlZWNoU3ludGhlc2lzLmdldFZvaWNlcygpLmZpbHRlcih2ID0+IHYubGFuZyAmJiB2Lmxhbmcuc3RhcnRzV2l0aCgia28iKSkgOiBbXTsKICBjb25zdCBjdXIgPSBrb1ZvaWNlID8ga29Wb2ljZS5uYW1lIDogIiI7CiAgY29uc3Qgc3BkID0gdm9pY2VTcGQoKVswXTsKICBjb25zdCB3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgdy5pZCA9ICJrcVZvaWNlV3JhcCI7CiAgdy5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDojMDAwMDAwNzA7ei1pbmRleDo5OTk5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjE2cHg7IjsKICB3LmlubmVySFRNTCA9IGA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnZhcigtLWNhcmQpO2JvcmRlci1yYWRpdXM6MTZweDttYXgtd2lkdGg6NDIwcHg7d2lkdGg6MTAwJTttYXgtaGVpZ2h0Ojgwdmg7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE4cHg7Ym94LXNoYWRvdzowIDEwcHggNDBweCByZ2JhKDAsMCwwLC4xMCk7Ij4KICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTdweDttYXJnaW4tYm90dG9tOjEycHg7Y29sb3I6dmFyKC0tdGV4dCk7Ij7wn46ZIFZvaWNlIHNldHRpbmdzPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLWJvdHRvbTo2cHg7Ij5TcGVha2luZyBzcGVlZDwvZGl2PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxNnB4OyI+JHtTUERfU1RFUFMubWFwKHMgPT4KICAgICAgYDxidXR0b24gb25jbGljaz0ic2V0U3BkKCcke3NbMF19JykiIHN0eWxlPSJmbGV4OjE7cGFkZGluZzo5cHggNHB4O2JvcmRlci1yYWRpdXM6MTBweDtib3JkZXI6MS41cHggc29saWQgdmFyKC0tYWNjZW50KTtiYWNrZ3JvdW5kOiR7c1swXSA9PT0gc3BkID8gInZhcigtLWFjY2VudCkiIDogInRyYW5zcGFyZW50In07Y29sb3I6JHtzWzBdID09PSBzcGQgPyAiI2ZmZiIgOiAidmFyKC0tYWNjZW50KSJ9O2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxM3B4OyI+JHtzWzJdfTwvYnV0dG9uPmApLmpvaW4oIiIpfTwvZGl2PgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206NnB4OyI+S29yZWFuIHZvaWNlcyBvbiB0aGlzIGRldmljZSDigJQgdGFwIG9uZSB0byBoZWFyIGl0PC9kaXY+CiAgICAke3ZzLmxlbmd0aCA/IHZzLm1hcCh2ID0+CiAgICAgIGA8YnV0dG9uIG9uY2xpY2s9InNldFZvaWNlKCcke3YubmFtZS5yZXBsYWNlKC8nL2csICJcXCciKX0nKSIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLWJvdHRvbTo2cHg7cGFkZGluZzo5cHggMTJweDtib3JkZXItcmFkaXVzOjEwcHg7Ym9yZGVyOjEuNXB4IHNvbGlkICR7di5uYW1lID09PSBjdXIgPyAidmFyKC0tYWNjZW50KSIgOiAidmFyKC0tY2FyZDIpIn07YmFja2dyb3VuZDoke3YubmFtZSA9PT0gY3VyID8gInZhcigtLWNhcmQyKSIgOiAidHJhbnNwYXJlbnQifTtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLXRleHQpOyI+JHt2Lm5hbWUgPT09IGN1ciA/ICLinIUiIDogIvCflIgifSAke3YubmFtZX08L2J1dHRvbj5gKS5qb2luKCIiKQogICAgICA6IGA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLWJvdHRvbTo2cHg7Ij5ObyBLb3JlYW4gdm9pY2UgZm91bmQgb24gdGhpcyBkZXZpY2UgeWV0LjwvZGl2PmB9CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLXRvcDoxMHB4O2xpbmUtaGVpZ2h0OjEuNTU7Ij4ke3dpbmRvdy5LUV9BUFAKICAgICAgPyBgTW9zdCBkZXZpY2VzIGNvbWUgd2l0aCBvbmUgS29yZWFuIHZvaWNlLCB1c3VhbGx5IGEgd29tYW4ncy4gVG8gYWRkIGEgbWFuJ3Mgdm9pY2U6IFNldHRpbmdzIOKGkiBBY2Nlc3NpYmlsaXR5IOKGkiBTcG9rZW4gQ29udGVudCDihpIgVm9pY2VzIOKGkiBLb3JlYW4g4oaSIGRvd25sb2FkIDxiPk1pbnN1PC9iPiwgdGhlbiByZW9wZW4gdGhlIGFwcCBhbmQgaXQgYXBwZWFycyBpbiB0aGlzIGxpc3QuYAogICAgICA6IGBNb3N0IGRldmljZXMgY29tZSB3aXRoIG9uZSBLb3JlYW4gdm9pY2UsIHVzdWFsbHkgYSB3b21hbidzLiBUbyBhZGQgYSBtYW4ncyB2b2ljZTogPGI+aVBob25lIC8gaVBhZCAvIE1hYzwvYj4g4oCUIFNldHRpbmdzIOKGkiBBY2Nlc3NpYmlsaXR5IOKGkiBTcG9rZW4gQ29udGVudCDihpIgVm9pY2VzIOKGkiBLb3JlYW4g4oaSIGRvd25sb2FkIDxiPk1pbnN1PC9iPiwgdGhlbiByZXN0YXJ0IHRoZSBicm93c2VyIGFuZCBpdCBhcHBlYXJzIGluIHRoaXMgbGlzdC4gPGI+V2luZG93czwvYj4g4oCUIHRoZSBFZGdlIGJyb3dzZXIgaW5jbHVkZXMgSW5Kb29uLCBhIEtvcmVhbiBtYW4ncyB2b2ljZS4gPGI+QW5kcm9pZDwvYj4g4oCUIFNldHRpbmdzIOKGkiBUZXh0LXRvLXNwZWVjaCBvdXRwdXQg4oaSIGluc3RhbGwgS29yZWFuIHZvaWNlIGRhdGEuYH08L2Rpdj4KICAgIDxidXR0b24gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2txVm9pY2VXcmFwJykucmVtb3ZlKCkiIHN0eWxlPSJtYXJnaW4tdG9wOjE0cHg7d2lkdGg6MTAwJTtwYWRkaW5nOjExcHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlcjowO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjgwMDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxNXB4OyI+RG9uZTwvYnV0dG9uPgogIDwvZGl2PmA7CiAgdy5vbmNsaWNrID0gZSA9PiB7IGlmIChlLnRhcmdldCA9PT0gdykgdy5yZW1vdmUoKTsgfTsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHcpOwp9CmZ1bmN0aW9uIHNheSh0ZXh0LCByYXRlID0gMC45LCBvbmVuZCkgewogIGlmICghKCJzcGVlY2hTeW50aGVzaXMiIGluIHdpbmRvdykpIHsgaWYgKG9uZW5kKSBzZXRUaW1lb3V0KG9uZW5kLCA2MDApOyByZXR1cm47IH0KICBjb25zdCBteSA9ICsrc2F5VG9rZW47CiAgdHJ5IHsgc3BlZWNoU3ludGhlc2lzLmNhbmNlbCgpOyB9IGNhdGNoIChlKSB7fQogIGxldCBlbmRlZCA9IGZhbHNlLCBzdGFydGVkID0gZmFsc2U7CiAgY29uc3QgZmluaXNoID0gKCkgPT4geyBpZiAoZW5kZWQpIHJldHVybjsgZW5kZWQgPSB0cnVlOyBjbGVhckludGVydmFsKHNheUtpY2spOyBpZiAob25lbmQpIG9uZW5kKCk7IH07CiAgY29uc3QgbWsgPSAoKSA9PiB7CiAgICBjb25zdCB1ID0gbmV3IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSh0ZXh0KTsKICAgIHUubGFuZyA9ICJrby1LUiI7IGlmIChrb1ZvaWNlKSB1LnZvaWNlID0ga29Wb2ljZTsKICAgIC8vIGxlYXJuZXIgc3BlZWQgc2V0dGluZyBzY2FsZXMgZXZlcnkgdXR0ZXJhbmNlOyBpT1Mgdm9pY2VzIHJ1biBob3QsIHNvIGRhbXAgdGhlbSBmdXJ0aGVyCiAgICB1LnJhdGUgPSBNYXRoLm1heCgwLjM1LCByYXRlICogdm9pY2VTcGQoKVsxXSAqIChLUV9JT1MgPyAwLjg1IDogMSkpOwogICAgdS5vbnN0YXJ0ID0gKCkgPT4geyBzdGFydGVkID0gdHJ1ZTsgfTsKICAgIHUub25lbmQgPSBmaW5pc2g7CiAgICB1Lm9uZXJyb3IgPSBmaW5pc2g7IC8vIG5ldmVyIGxlYXZlIHN0b3J5L3NraXAgZmxvd3MgaGFuZ2luZyBvbiBhIGRlYWQgdXR0ZXJhbmNlCiAgICB3aW5kb3cuX19rcVUgPSB1OyAgIC8vIGd1YXJkIGFnYWluc3QgQ2hyb21lIGdhcmJhZ2UtY29sbGVjdGluZyBhIG1pZC1zcGVlY2ggdXR0ZXJhbmNlCiAgICByZXR1cm4gdTsKICB9OwogIC8vIENocm9tZSBxdWlyayAxOiBzcGVhaygpIGluIHRoZSBzYW1lIHRpY2sgYXMgY2FuY2VsKCkgaXMgc2lsZW50bHkgZHJvcHBlZCDigJQgZGVsYXkgaXQKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGlmIChteSAhPT0gc2F5VG9rZW4pIHsgZmluaXNoKCk7IHJldHVybjsgfSAvLyBhIG5ld2VyIHNheSgpIHN1cGVyc2VkZWQgdGhpcyBvbmUKICAgIHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5zcGVhayhtaygpKTsgfSBjYXRjaCAoZSkgeyBmaW5pc2goKTsgcmV0dXJuOyB9CiAgICAvLyBDaHJvbWUgcXVpcmsgMiAodGhlIGJpZyBvbmUpOiB0aGUgZW5naW5lIGNhbiBoYW5nIHdpdGggc3BlYWtpbmc9dHJ1ZSBidXQgbmV2ZXIKICAgIC8vIGFjdHVhbGx5IHN0YXJ0LiBUaGUgcGF1c2XihpJyZXN1bWUgImRhbmNlIiB1bi13ZWRnZXMgaXQg4oCUIG1lYXN1cmVkIG9uIHJlYWwgQ2hyb21lLgogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGlmIChzdGFydGVkIHx8IGVuZGVkIHx8IG15ICE9PSBzYXlUb2tlbikgcmV0dXJuOwogICAgICB0cnkgeyBzcGVlY2hTeW50aGVzaXMucGF1c2UoKTsgfSBjYXRjaCAoZSkge30KICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5yZXN1bWUoKTsgfSBjYXRjaCAoZSkge30gfSwgMTIwKTsKICAgIH0sIDMwMCk7CiAgICAvLyBzdGlsbCBkZWFkIOKGkiBoYXJkIHJldHJ5IG9uY2U6IGNhbmNlbCwgZnJlc2ggdXR0ZXJhbmNlLCBzcGVhaytkYW5jZQogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGlmIChzdGFydGVkIHx8IGVuZGVkIHx8IG15ICE9PSBzYXlUb2tlbikgcmV0dXJuOwogICAgICB0cnkgeyBzcGVlY2hTeW50aGVzaXMuY2FuY2VsKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGlmIChzdGFydGVkIHx8IGVuZGVkIHx8IG15ICE9PSBzYXlUb2tlbikgcmV0dXJuOwogICAgICAgIHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5zcGVhayhtaygpKTsgc3BlZWNoU3ludGhlc2lzLnBhdXNlKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5yZXN1bWUoKTsgfSBjYXRjaCAoZSkge30gfSwgMTIwKTsKICAgICAgfSwgMTYwKTsKICAgIH0sIDE1MDApOwogICAgLy8gdHJ1bHkgdW5yZWNvdmVyYWJsZSDihpIgcmVzb2x2ZSB0aGUgZmxvdyBhbmQgdGVsbCB0aGUgdXNlciBob25lc3RseQogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGlmIChzdGFydGVkIHx8IGVuZGVkIHx8IG15ICE9PSBzYXlUb2tlbikgcmV0dXJuOwogICAgICBrcVR0c1dhcm4oKTsKICAgICAgZmluaXNoKCk7CiAgICB9LCAzMjAwKTsKICB9LCA1MCk7CiAgLy8gQ2hyb21lIHF1aXJrIDM6IGxvbmcgdXR0ZXJhbmNlcyBzdGFsbCB1bmxlc3MgdGhlIGVuZ2luZSBnZXRzIHBlcmlvZGljIHJlc3VtZSgpIHBpbmdzCiAgY2xlYXJJbnRlcnZhbChzYXlLaWNrKTsKICBzYXlLaWNrID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgaWYgKCFzcGVlY2hTeW50aGVzaXMuc3BlYWtpbmcgJiYgIXNwZWVjaFN5bnRoZXNpcy5wZW5kaW5nKSBjbGVhckludGVydmFsKHNheUtpY2spOwogICAgZWxzZSB7IHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5yZXN1bWUoKTsgfSBjYXRjaCAoZSkge30gfQogIH0sIDMwMDApOwp9Ci8vIENocm9tZSBxdWlyayAzOiB0aGUgZW5naW5lIGNhbiB3ZWRnZSBpbiBhIHBhdXNlZCBzdGF0ZSBhZnRlciBjYW5jZWwoKSDigJQKLy8gYW55IHVzZXIgdGFwIHF1aWV0bHkgdW53ZWRnZXMgaXQgc28gdGhlIG5leHQg8J+UiiBhbHdheXMgd29ya3MKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLCAoKSA9PiB7IHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5yZXN1bWUoKTsgfSBjYXRjaCAoZSkge30gfSwgeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH0pOwoKLyogPT09PT09PT09PT09PT09IE5BViA9PT09PT09PT09PT09PT0gKi8KbGV0IGFjdGl2ZVRpbWVyID0gbnVsbDsKZnVuY3Rpb24gc2hvdyhpZCkgewogIGNvbnN0IHByZXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuc2NyZWVuLmFjdGl2ZSIpOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5zY3JlZW4iKS5mb3JFYWNoKHMgPT4gcy5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUiKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTGlzdC5hZGQoImFjdGl2ZSIpOwogIGlmIChwcmV2ICYmIHByZXYuaWQgPT09IGlkKSByZXR1cm47IC8vIHJlLXJlbmRlciBvZiB0aGUgY3VycmVudCBzY3JlZW46IHN0YXkgd2hlcmUgdGhlIGxlYXJuZXIgaXMKICAvLyBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgZ2FtZSwgbm90IHRoZSB0b3Agb2YgdGhlIHBhZ2UgaXQgaXMgZW1iZWRkZWQgaW4KICBjb25zdCBhcHAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgia3EtYXBwIik7CiAgd2luZG93LnNjcm9sbFRvKDAsIGFwcCA/IE1hdGgubWF4KDAsIGFwcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQgLSA4KSA6IDApOwp9CmZ1bmN0aW9uIGdvTWFwKCkgeyBjbGVhckludGVydmFsKGFjdGl2ZVRpbWVyKTsgYWN0aXZlVGltZXIgPSBudWxsOyBoYXJkU3RvcEF1ZGlvKCk7IHJlbmRlck1hcCgpOyByZW5kZXJIdWQoKTsgc2hvdygibWFwIik7IH0KZnVuY3Rpb24gYmFja1RvTGVzc29uKCkgeyBjbGVhckludGVydmFsKGFjdGl2ZVRpbWVyKTsgYWN0aXZlVGltZXIgPSBudWxsOyBvcGVuTGVzc29uKGN1ci5uLCBjdXJyZW50VGFiKTsgfQpmdW5jdGlvbiBzaHVmZmxlKGEpIHsgYT1bLi4uYV07IGZvciAobGV0IGk9YS5sZW5ndGgtMTtpPjA7aS0tKXtjb25zdCBqPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooaSsxKSk7W2FbaV0sYVtqXV09W2Fbal0sYVtpXV07fSByZXR1cm4gYTsgfQoKLyogPT09PT09PT09PT09PT09IE1BUCA9PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gc3RhcnNPZihuKSB7CiAgY29uc3QgcyA9IGxzdGF0ZShuKS5zdGFyczsKICByZXR1cm4gKHMubGVhcm4/IuKtkCI6IuKYhiIpICsgKHMuc3Rvcnk/IuKtkCI6IuKYhiIpICsgKHMudGFsaz8i4q2QIjoi4piGIikgKyAocy5zcGVhaz8i4q2QIjoi4piGIikgKyAocy5ib3NzPyLirZAiOiLimIYiKTsKfQpmdW5jdGlvbiByZW5kZXJNYXAoKSB7CiAgY29uc3QgZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXBHcmlkIik7CiAgZy5pbm5lckhUTUwgPSAiIjsKICBMRVNTT05TLmZvckVhY2goTCA9PiB7CiAgICBjb25zdCBzdCA9IGxzdGF0ZShMLm4pOwogICAgY29uc3QgcGN0ID0gTWF0aC5yb3VuZChzdC5rbm93bi5sZW5ndGggLyBMLndvcmRzLmxlbmd0aCAqIDEwMCk7CiAgICBjb25zdCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkLmNsYXNzTmFtZSA9ICJsY2FyZCI7CiAgICBkLmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJsbnVtIj5RVUVTVCAke1N0cmluZyhMLm4pLnBhZFN0YXJ0KDIsIjAiKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibGVtb2ppIj4ke0wuZW1vaml9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImxrciI+JHtMLmtyfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsZW4iPiR7TC5lbn0gwrcgJHtMLnZpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsc3RhcnMiPiR7c3RhcnNPZihMLm4pfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJscHJvZyI+PGkgc3R5bGU9IndpZHRoOiR7cGN0fSUiPjwvaT48L2Rpdj5gOwogICAgZC5vbmNsaWNrID0gKCkgPT4gb3Blbkxlc3NvbihMLm4pOwogICAgZy5hcHBlbmRDaGlsZChkKTsKICB9KTsKICAvLyBQcmVtaXVtIGNhcmQgKHB1YmxpYyBidWlsZCBvbmx5IOKAlCBQUkVNSVVNX1VSTCBpcyBzZXQgYnkgdGhlIHB1Ymxpc2ggcGlwZWxpbmUpCiAgaWYgKHR5cGVvZiBQUkVNSVVNX1VSTCAhPT0gInVuZGVmaW5lZCIgJiYgUFJFTUlVTV9VUkwpIHsKICAgIGNvbnN0IHBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBwbS5jbGFzc05hbWUgPSAibGNhcmQiOwogICAgcG0uc3R5bGUuZ3JpZENvbHVtbiA9ICIxIC8gLTEiOwogICAgcG0uc3R5bGUuYm9yZGVyID0gIjJweCBzb2xpZCAjQjA3RDI4YWEiOwogICAgcG0uaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImxudW0iIHN0eWxlPSJjb2xvcjp2YXIoLS1nb2xkKSI+R08gRlVSVEhFUjwvZGl2PgogICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4OyI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVtb2ppIiBzdHlsZT0ibWFyZ2luOjA7Ij7wn4+U77iPPC9kaXY+CiAgICAgICAgPGRpdj48ZGl2IGNsYXNzPSJsa3IiPlRoZSAzMC1EYXkgU3BlYWtpbmcgUGF0aDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImxlbiI+QSBndWlkZWQgZGFpbHkgcGxhbiBhbmQgYW4gdW5saW1pdGVkIEFJIHNwZWFraW5nIHBhcnRuZXIgdGhhdCBjb3JyZWN0cyBldmVyeSBzZW50ZW5jZS4gU2VlIHdoYXQgaXQgaXMg4oaSPC9kaXY+PC9kaXY+CiAgICAgIDwvZGl2PmA7CiAgICBwbS5vbmNsaWNrID0gKCkgPT4geyB3aW5kb3cub3BlbihQUkVNSVVNX1VSTCwgIl9ibGFuayIpOyB9OwogICAgZy5wcmVwZW5kKHBtKTsgLy8gcHJlcGVuZGVkIGJlZm9yZSBSZXZpZXcvRnJlZS1UYWxrIHByZXBlbmRzIOKGkiBsYW5kcyB0aGlyZCBvbiB0aGUgbWFwCiAgfQogIC8vIFJldmlldyB3b3Jrb3V0IGNhcmQg4oCUIHJhbmRvbSBjb252ZXJzYXRpb24gYWNyb3NzIHN0YXJyZWQgbGVzc29ucwogIGNvbnN0IHN0YXJyZWQgPSBMRVNTT05TLmZpbHRlcihMID0+IGxzdGF0ZShMLm4pLnN0YXJzLnRhbGspLmxlbmd0aDsKICBjb25zdCBydiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIHJ2LmNsYXNzTmFtZSA9ICJsY2FyZCI7CiAgcnYuc3R5bGUuZ3JpZENvbHVtbiA9ICIxIC8gLTEiOwogIHJ2LnN0eWxlLmJvcmRlciA9ICIycHggZGFzaGVkICNCMDdEMjg2NiI7CiAgcnYuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImxudW0iPlJFVklFVyBXT1JLT1VUPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4OyI+CiAgICAgIDxkaXYgY2xhc3M9ImxlbW9qaSIgc3R5bGU9Im1hcmdpbjowOyI+8J+OsjwvZGl2PgogICAgICA8ZGl2PjxkaXYgY2xhc3M9ImxrciI+UmFuZG9tIENvbnZlcnNhdGlvbjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsZW4iPiR7c3RhcnJlZAogICAgICAgID8gYE1peGVzIHF1ZXN0aW9ucyBmcm9tIHlvdXIgJHtzdGFycmVkfSDirZAgY29udmVyc2F0aW9uJHtzdGFycmVkID4gMSA/ICJzIiA6ICIifSDigJQgYW5zd2VyIGJ5IHZvaWNlIWAKICAgICAgICA6ICJObyBUYWxrIOKtkCB5ZXQg4oCUIG1peGVzIEFMTCBsZXNzb25zIGZvciBub3cuIEZpbmlzaCBsZXNzb24gdGFsa3MgdG8gZm9jdXMgdGhlIG1peCEifTwvZGl2PjwvZGl2PgogICAgPC9kaXY+YDsKICBydi5vbmNsaWNrID0gb3BlblJldmlldzsKICBnLnByZXBlbmQocnYpOwogIC8vIEZyZWUgVGFsayBjYXJkCiAgY29uc3QgZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBmdC5jbGFzc05hbWUgPSAibGNhcmQiOwogIGZ0LnN0eWxlLmdyaWRDb2x1bW4gPSAiMSAvIC0xIjsKICBmdC5zdHlsZS5ib3JkZXIgPSAiMnB4IGRhc2hlZCAjNTAzQUE4NjYiOwogIGZ0LmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJsbnVtIj5GUkVFIFRBTEs8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7Ij4KICAgICAgPGRpdiBjbGFzcz0ibGVtb2ppIiBzdHlsZT0ibWFyZ2luOjA7Ij7wn46ZPC9kaXY+CiAgICAgIDxkaXY+PGRpdiBjbGFzcz0ibGtyIj5TcGVhayBhYm91dCBhbnl0aGluZzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJsZW4iPk9wZW4gY29udmVyc2F0aW9uIOKAlCB5b3UgdGFsaywgdGhlIGdhbWUgbGlzdGVucyBhbmQgYW5zd2Vycy4gT3B0aW9uYWwgQ2xhdWRlIEFJIG1vZGUgZm9yIHVubGltaXRlZCB0b3BpY3MuPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj5gOwogIGZ0Lm9uY2xpY2sgPSBvcGVuRnJlZTsKICBnLnByZXBlbmQoZnQpOwogIHJlbmRlckRhaWx5KCk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgRlJFRSBUQUxLIOKAlCBvcGVuIHZvaWNlIGNvbnZlcnNhdGlvbi4KICAgRW5naW5lIDEgKGJ1aWx0LWluLCBmcmVlKTogdG9waWMtYXdhcmUgS29yZWFuIGNoYXRib3QgdXNpbmcgdGV4dGJvb2sgdGhlbWVzLgogICBFbmdpbmUgMiAob3B0aW9uYWwpOiBDbGF1ZGUgQVBJIHdpdGggdGhlIHVzZXIncyBvd24ga2V5IChzdG9yZWQgbG9jYWxseSkuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KY29uc3QgRlRfVE9QSUNTID0gewogIHdlYXRoZXI6IHsgbWF0Y2g6IC/rgqDslKh867mE6rCAfOu5hCDsmYB864iI7J20fOuNpXzstpTsm4x87LaU7Jq0fOunkXztnZDrpqx867CU656MLywgbmFtZTogIuuCoOyUqCIsCiAgICBxOiBbWyLsmKTripgg64Kg7JSo6rCAIOyWtOuVjOyalD8iLCJIb3cgaXMgdGhlIHdlYXRoZXIgdG9kYXk/Il0sWyLslrTrlqQg64Kg7JSo66W8IOyii+yVhO2VtOyalD8iLCJXaGF0IHdlYXRoZXIgZG8geW91IGxpa2U/Il0sWyLruYTqsIAg7JisIOuVjCDrs7TthrUg662QIO2VtOyalD8iLCJXaGF0IGRvIHlvdSB1c3VhbGx5IGRvIHdoZW4gaXQgcmFpbnM/Il1dIH0sCiAgZm9vZDogeyBtYXRjaDogL+uouXzsnYzsi51867ClfOunm+yeiHzrp5vsl4Z87JqU66asfOuwsOqzoHzquYDsuZh867aI6rOg6riwfOudvOuptC8sIG5hbWU6ICLsnYzsi50iLAogICAgcTogW1si66y07IqoIOydjOyLneydhCDsoJzsnbwg7KKL7JWE7ZW07JqUPyIsIldoYXQgZm9vZCBkbyB5b3UgbGlrZSBtb3N0PyJdLFsi7ZWc6rWtIOydjOyLnSDspJHsl5DshJwg662Q6rCAIOygnOydvCDrp5vsnojslrTsmpQ/IiwiV2hpY2ggS29yZWFuIGZvb2QgaXMgdGhlIHRhc3RpZXN0PyJdLFsi7JqU66as66W8IOyekOyjvCDtlbTsmpQ/IiwiRG8geW91IGNvb2sgb2Z0ZW4/Il0sWyLsmKTripgg662QIOuoueyXiOyWtOyalD8iLCJXaGF0IGRpZCB5b3UgZWF0IHRvZGF5PyJdXSB9LAogIGZhbWlseTogeyBtYXRjaDogL+qwgOyhsXzsl4Trp4h87JWE67mgfOyWtOuouOuLiHzslYTrsoTsp4B864+Z7IOdfOuIhOuCmHzslrjri4h87ZiVfOyYpOu5oHzslYTrgrR864Ko7Y64fOu2gOuqqC8sIG5hbWU6ICLqsIDsobEiLAogICAgcTogW1si6rCA7KGx7J20IOuqhyDrqoXsnbTsl5DsmpQ/IiwiSG93IG1hbnkgcGVvcGxlIGFyZSBpbiB5b3VyIGZhbWlseT8iXSxbIuqwgOyhse2VmOqzoCDrrZAg7ZWY64qUIOqyg+ydhCDsoovslYTtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgbGlrZSB0byBkbyB3aXRoIHlvdXIgZmFtaWx5PyJdLFsi6rCA7KGxIOykkeyXkOyEnCDriITqtazrpbwg7KCc7J28IOuLruyVmOyWtOyalD8iLCJXaG8gaW4geW91ciBmYW1pbHkgZG8geW91IHJlc2VtYmxlIG1vc3Q/Il1dIH0sCiAgdHJhdmVsOiB7IG1hdGNoOiAv7Jes7ZaJfOygnOyjvHzrsJTri6R87IKwfOq0gOq0kXzruYTtlonquLB87Zi47YWUfO2ctOqwgHzrsKntlZkvLCBuYW1lOiAi7Jes7ZaJIiwKICAgIHE6IFtbIuyWtOuUlOuhnCDsl6ztlokg6rCA6rOgIOyLtuyWtOyalD8iLCJXaGVyZSBkbyB5b3Ugd2FudCB0byB0cmF2ZWw/Il0sWyLsoJzso7zrj4Tsl5Ag6rCAIOuzuCDsoIHsnbQg7J6I7Ja07JqUPyIsIkhhdmUgeW91IGJlZW4gdG8gSmVqdSBJc2xhbmQ/Il0sWyLsl6ztlontlaAg65WMIOutkCDtlZjripQg6rKD7J2EIOyii+yVhO2VtOyalD8iLCJXaGF0IGRvIHlvdSBsaWtlIGRvaW5nIHdoZW4geW91IHRyYXZlbD8iXV0gfSwKICBtb3ZpZXM6IHsgbWF0Y2g6IC/smIHtmZR865Oc652866eIfOuwsOyasHzrs7Tri6TqsIB87J6s66+47J6IfOustOyEnHzsiqztlIR87L2U66+465SULywgbmFtZTogIuyYge2ZlCIsCiAgICBxOiBbWyLrrLTsiqgg7JiB7ZmU66W8IOyii+yVhO2VtOyalD8iLCJXaGF0IG1vdmllcyBkbyB5b3UgbGlrZT8iXSxbIuy1nOq3vOyXkCDrrZAg67Sk7Ja07JqUPyIsIldoYXQgZGlkIHlvdSB3YXRjaCByZWNlbnRseT8iXSxbIuyii+yVhO2VmOuKlCDrsLDsmrDqsIAg7J6I7Ja07JqUPyIsIkRvIHlvdSBoYXZlIGEgZmF2b3JpdGUgYWN0b3I/Il1dIH0sCiAgc3R1ZHk6IHsgbWF0Y2g6IC/qs7XrtoB87ZWc6rWt7Ja0fOyLnO2XmHzthqDtlL1864uo7Ja0fOuwsOyasHztlZnqtZB87IiY7JeFfOyxhS8sIG5hbWU6ICLqs7XrtoAiLAogICAgcTogW1si7ZWc6rWt7Ja066W8IOyZnCDqs7XrtoDtlbTsmpQ/IiwiV2h5IGRvIHlvdSBzdHVkeSBLb3JlYW4/Il0sWyLtlZzqta3slrQg6rO167aA7ZWcIOyngCDslrzrp4jrgpgg65CQ7Ja07JqUPyIsIkhvdyBsb25nIGhhdmUgeW91IHN0dWRpZWQgS29yZWFuPyJdLFsi662Q6rCAIOygnOydvCDslrTroKTsm4zsmpQ/IiwiV2hhdCBpcyB0aGUgbW9zdCBkaWZmaWN1bHQgcGFydD8iXV0gfSwKICB3b3JrOiB7IG1hdGNoOiAv7J28fO2ajOyCrHzrsJTsgZh87KeB7J6lfOy2nOq3vHzsgqzsnqV87JuU6riJfOy3qOyngS8sIG5hbWU6ICLsnbwiLAogICAgcTogW1si66y07IqoIOydvOydhCDtlbTsmpQ/IiwiV2hhdCB3b3JrIGRvIHlvdSBkbz8iXSxbIuyalOymmCDrp47snbQg67CU67mg7JqUPyIsIkFyZSB5b3UgdmVyeSBidXN5IHRoZXNlIGRheXM/Il0sWyLslrTrlqQg7KeB7JeF7J2EIOqwluqzoCDsi7bslrTsmpQ/IiwiV2hhdCBqb2IgZG8geW91IHdhbnQgdG8gaGF2ZT8iXV0gfSwKICB3ZWVrZW5kOiB7IG1hdGNoOiAv7KO866eQfO2GoOyalOydvHzsnbzsmpTsnbx87JW97IaNfOy5nOq1rHzrp4zrgph87ImsLywgbmFtZTogIuyjvOunkCIsCiAgICBxOiBbWyLso7zrp5Dsl5Ag67O07Ya1IOutkCDtlbTsmpQ/IiwiV2hhdCBkbyB5b3UgdXN1YWxseSBkbyBvbiB3ZWVrZW5kcz8iXSxbIuydtOuyiCDso7zrp5Dsl5Ag7JW97IaN7J20IOyeiOyWtOyalD8iLCJEbyB5b3UgaGF2ZSBwbGFucyB0aGlzIHdlZWtlbmQ/Il0sWyLso7zrp5Dsl5Ag7Ja065SU7JeQIOqwgOqzoCDsi7bslrTsmpQ/IiwiV2hlcmUgZG8geW91IHdhbnQgdG8gZ28gdGhpcyB3ZWVrZW5kPyJdXSB9LAogIGhvbWU6IHsgbWF0Y2g6IC/sp5F87IK0fOybkOujuHzquLDsiJnsgqx87JuU7IS4fOydtOyCrHzrj5nrhKR86rOg7ZalLywgbmFtZTogIuynkSIsCiAgICBxOiBbWyLslrTrlJTsl5Ag7IK07JWE7JqUPyIsIldoZXJlIGRvIHlvdSBsaXZlPyJdLFsi6rOg7Zal7J20IOyWtOuUlOyYiOyalD8iLCJXaGVyZSBpcyB5b3VyIGhvbWV0b3duPyJdLFsi6rOg7Zal7J20IOq3uOumrOybjOyalD8iLCJEbyB5b3UgbWlzcyB5b3VyIGhvbWV0b3duPyJdXSB9LAogIGhvYmJ5OiB7IG1hdGNoOiAv7Leo66+4fOyatOuPmXzsnYzslYV864W4656YfOqyjOyehHzssYV864+F7IScfOq3uOumvHzsgqzsp4QvLCBuYW1lOiAi7Leo66+4IiwKICAgIHE6IFtbIuy3qOuvuOqwgCDrrZDsmIjsmpQ/IiwiV2hhdCBpcyB5b3VyIGhvYmJ5PyJdLFsi7Jq064+Z7J2EIOyekOyjvCDtlbTsmpQ/IiwiRG8geW91IGV4ZXJjaXNlIG9mdGVuPyJdLFsi66y07IqoIOydjOyVheydhCDsoovslYTtlbTsmpQ/IiwiV2hhdCBtdXNpYyBkbyB5b3UgbGlrZT8iXV0gfSwKICBrb3JlYTogeyBtYXRjaDogL+2VnOq1rXzshJzsmrh867aA7IKwfOy8gOydtO2MnXztlZzquIB86rmA7LmYfOusuO2ZlC8sIG5hbWU6ICLtlZzqta0iLAogICAgcTogW1si7ZWc6rWt7JeQ7IScIOyWtOuUlOyXkCDqsIAg67O06rOgIOyLtuyWtOyalD8iLCJXaGVyZSBpbiBLb3JlYSBkbyB5b3Ugd2FudCB0byB2aXNpdD8iXSxbIu2VnOq1rSDrrLjtmZQg7KSR7JeQ7IScIOutkOqwgCDsoJzsnbwg7J6s66+47J6I7Ja07JqUPyIsIldoYXQgcGFydCBvZiBLb3JlYW4gY3VsdHVyZSBpcyBtb3N0IGludGVyZXN0aW5nPyJdLFsi7LyA7J207Yyd7J2EIOyii+yVhO2VtOyalD8iLCJEbyB5b3UgbGlrZSBLLXBvcD8iXV0gfSwKICBmZWVsaW5nczogeyBtYXRjaDogL+q4sOu2hHztlLzqs6R87ZaJ67O1fOyKrO2NvHzsoovslYTsmpR87Z6Y65OkfOyKpO2KuOugiOyKpHzsobjroKQvLCBuYW1lOiAi6riw67aEIiwKICAgIHE6IFtbIuyYpOuKmCDquLDrtoTsnbQg7Ja065WM7JqUPyIsIkhvdyBkbyB5b3UgZmVlbCB0b2RheT8iXSxbIu2UvOqzpO2VoCDrlYwg662QIO2VtOyalD8iLCJXaGF0IGRvIHlvdSBkbyB3aGVuIHlvdSBhcmUgdGlyZWQ/Il0sWyLrrZAg7ZWgIOuVjCDsoJzsnbwg7ZaJ67O17ZW07JqUPyIsIldoZW4gYXJlIHlvdSBoYXBwaWVzdD8iXV0gfQp9Owpjb25zdCBGVF9SRUFDVCA9IFtbIuyVhCwg6re4656Y7JqUPyIsIk9oLCByZWFsbHk/Il0sWyLsnqzrr7jsnojrhKTsmpQhIiwiVGhhdCBpcyBpbnRlcmVzdGluZyEiXSxbIuyZgCwg7KKL64Sk7JqUISIsIldvdywgbmljZSEiXSxbIuq3uOugh+q1sOyalC4iLCJJIHNlZS4iXSxbIuygleunkOyalD8iLCJSZWFsbHk/Il0sWyLtlZjtlZgsIOyii+yVhOyalCEiLCJIYWhhLCBncmVhdCEiXV07CmNvbnN0IEZUX1NFTEYgPSBbCiAgLy8gU29tZWJvZHkgc2F5aW5nIHRoZXkgYXJlIGxvc3QgZ2V0cyBoZWxwLCBub3QgYW5vdGhlciBxdWVzdGlvbi4gVGhpcyBzaXRzCiAgLy8gZmlyc3Qgb24gcHVycG9zZTogdGhlIHNjcmlwdCB1c2VkIHRvIGFuc3dlciAiSSBkbyBub3QgdW5kZXJzdGFuZCIgd2l0aCBhCiAgLy8gZnJlc2ggS29yZWFuIHF1ZXN0aW9uLCB3aGljaCBpcyB0aGUgb25lIHJlcGx5IHRoYXQgbWFrZXMgYSBiZWdpbm5lciBxdWl0LgogIFsv7J207ZW06rCAP1xzKuyViHzrqqjrpbTqsqB866qw65287JqUfOustOyKqCDrp5B8662Q65286rOgfOyWtOugpOybjHzsnpgg66q7IOyVjOyVhHxpIGRvID9uW28nXXQgdW5kZXJzdGFuZHxkb24ndCB1bmRlcnN0YW5kfHdoYXRcP3xubyBpZGVhfHRvbyBoYXJkL2ksCiAgICBbIuq0nOywruyVhOyalCEg7Ja066C17KeAIOyViuyVhOyalC4g6re464OlICfrhKQnIOuYkOuKlCAn7JWE64uI7JqUJ+udvOqzoCDrp5DtlbTrj4Qg64+87JqULiIsCiAgICAgIlRoYXQgaXMgZmluZSDigJQgdGhpcyBpcyBub3QgYSB0ZXN0LiBZb3UgY2FuIGFuc3dlciB3aXRoIGp1c3Qg64SkICh5ZXMpIG9yIOyVhOuLiOyalCAobm8pLiBUYXAg8J+XoyBJbiBFbmdsaXNoIHRvIGhlYXIgdGhpbmdzIGluIEVuZ2xpc2gsIG9yIPCfhpggU3R1Y2s/IGZvciBhIGxpbmUgeW91IGNhbiBjb3B5LiJdXSwKICBbL+ydtOumhOydtCDrrZB87J2066aE7J2ALywgWyLsoJwg7J2066aE7J2AIO2VnOq1rSDtgJjsiqTtirjsmIjsmpQhIiwiTXkgbmFtZSBpcyBLb3JlYW4gUXVlc3QhIl1dLAogIFsv66qHIOyCtHzrgpjsnbTqsIAvLCBbIuyggOuKlCDtlZwg7IK07J207JeQ7JqULiDslYTquLAg6rKM7J6E7J207JeQ7JqUISDtlZjtlZguIiwiSSBhbSBvbmUgeWVhciBvbGQuIEEgYmFieSBnYW1lISBIYWhhLiJdXSwKICBbL+yWtOuUlOyXkCDsgrR87Ja065SUIOyCtHzslrTrlJTsl5Ag7J6ILywgWyLsoIDripQg7Lu07ZOo7YSwIOyViOyXkCDsgrTslYTsmpQhIiwiSSBsaXZlIGluc2lkZSB0aGUgY29tcHV0ZXIhIl1dLAogIFsv662QIO2VtOyalHzrrZAg7ZWY6rOgLywgWyLsoIDripQg7KeA6riIIOuLueyLoO2VmOqzoCDsnbTslbzquLDtlbTsmpQuIOyerOuvuOyeiOyWtOyalCEiLCJJIGFtIHRhbGtpbmcgd2l0aCB5b3UgcmlnaHQgbm93LiBJdCBpcyBmdW4hIl1dLAogIFsv7KKL7JWE7ZW07JqUXD987KKL7JWE7ZWY7IS47JqUXD8vLCBbIuuEpCwg7KCV66eQIOyii+yVhO2VtOyalCEg64u57Iug7J2A7JqUPyIsIlllcywgSSByZWFsbHkgbGlrZSBpdCEgSG93IGFib3V0IHlvdT8iXV0KXTsKbGV0IEYgPSB7IGxvZzogW10sIHRvcGljOiBudWxsLCBxaToge30sIHVzZWQ6IFtdLCBoaXN0OiBbXSwgYXV0bzogZmFsc2UsIGJ1c3k6IGZhbHNlIH07CmZ1bmN0aW9uIG9wZW5GcmVlKCkgewogIEYgPSB7IGxvZzogW10sIHRvcGljOiBudWxsLCBxaToge30sIHVzZWQ6IFtdLCBoaXN0OiBbXSwgYXV0bzogRi5hdXRvLCBidXN5OiBmYWxzZSB9OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdENoYXQiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRTdGF0dXMiKS50ZXh0Q29udGVudCA9ICIiOwogIHJlbmRlckZ0RW5naW5lKCk7CiAgc2hvdygiZnJlZSIpOwogIGZ0Qm90KCLslYjrhZXtlZjshLjsmpQhIOyggOuKlCDtlZzqta3slrQg7Lmc6rWs7JiI7JqULiDsmKTripgg662QIO2VmOqzoCDsi7bslrTsmpQ/IOyVhOustOqxsOuCmCDsnbTslbzquLDtlbTsmpQhIiwgIkhlbGxvISBJIGFtIHlvdXIgS29yZWFuIGZyaWVuZC4gV2hhdCBkbyB5b3Ugd2FudCB0byBkbyB0b2RheT8gTGV0IHVzIHRhbGsgYWJvdXQgYW55dGhpbmchIik7CiAgY29uc3QgaW5wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0VGV4dCIpOwogIGlucC5vbmtleWRvd24gPSBlID0+IHsgaWYgKGUua2V5ID09PSAiRW50ZXIiKSBmdFNlbmRUZXh0KCk7IH07Cn0KZnVuY3Rpb24gZnRCdWJibGUod2hvLCBrciwgZW4sIGV4dHJhKSB7CiAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGQuY2xhc3NOYW1lID0gIm1zZyAiICsgd2hvOwogIGlmICh3aG8gPT09ICJucGMiKSB7CiAgICBkLmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJ3aG8iPiR7ZnRBcGlLZXkoKSA/ICLinKgg7ZWc6rWt7Ja0IOy5nOq1rCIgOiAi8J+kliDtlZzqta3slrQg7Lmc6rWsIn08L2Rpdj4ke2tyfSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tYWNjZW50Mik7Zm9udC1zaXplOjEycHgiPvCflIo8L3NwYW4+YCArIChlbiA/IGA8ZGl2IGNsYXNzPSJtZW4iPiR7ZW59PC9kaXY+YCA6ICIiKTsKICAgIGQub25jbGljayA9ICgpID0+IHNheShrcik7CiAgfSBlbHNlIHsKICAgIGQuaW5uZXJIVE1MID0ga3IgKyAoZXh0cmEgPyBgPGRpdiBjbGFzcz0ic2NvcmUiPiR7ZXh0cmF9PC9kaXY+YCA6ICIiKTsKICAgIGQub25jbGljayA9ICgpID0+IHNheShrcik7CiAgfQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdENoYXQiKS5hcHBlbmRDaGlsZChkKTsKICBkLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogIm5lYXJlc3QiIH0pOwp9CmZ1bmN0aW9uIGZ0Qm90KGtyLCBlbiwgZml4KSB7CiAgRi5sb2cucHVzaCh7IHdobzogIm5wYyIsIGtyLCBlbiB9KTsKICBGLmhpc3QucHVzaCh7IHJvbGU6ICJhc3Npc3RhbnQiLCBjb250ZW50OiBrciB9KTsKICBmdEJ1YmJsZSgibnBjIiwga3IsIGVuKTsKICBpZiAoZml4KSB7CiAgICBjb25zdCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkLmNsYXNzTmFtZSA9ICJmaXhsaW5lIjsKICAgIGQuaW5uZXJIVE1MID0gYPCfkqEgJHtmaXh9YDsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdENoYXQiKS5hcHBlbmRDaGlsZChkKTsKICB9CiAgc2F5KGtyLCAwLjkyLCAoKSA9PiB7IGlmIChGLmF1dG8pIHNldFRpbWVvdXQoZnRMaXN0ZW4sIDMwMCk7IH0pOwp9CmFzeW5jIGZ1bmN0aW9uIGZ0VXNlcih0ZXh0KSB7CiAgaWYgKCF0ZXh0IHx8IEYuYnVzeSkgcmV0dXJuOwogIEYuYnVzeSA9IHRydWU7CiAgRi5oaXN0LnB1c2goeyByb2xlOiAidXNlciIsIGNvbnRlbnQ6IHRleHQgfSk7CiAgZnRCdWJibGUoIm1lIiwgdGV4dCk7CiAgZ2FpblhwKDMpOyBmbG9hdEZ4KCIrMyBYUCIsICIjMkY3RDRGIik7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikudGV4dENvbnRlbnQgPSAi4oCmIjsKICB0cnkgewogICAgY29uc3QgciA9IGZ0QXBpS2V5KCkgPyBhd2FpdCBmdENsYXVkZVJlcGx5KHRleHQpIDogZnRCdWlsdGluUmVwbHkodGV4dCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnRTdGF0dXMiKS50ZXh0Q29udGVudCA9ICIiOwogICAgZnRCb3Qoci5rciwgci5lbiwgci5maXgpOwogICAgaWYgKCFmdEFwaUtleSgpICYmIGFpT3B0SW4oKSkgewogICAgICBGLmJjb3VudCA9IChGLmJjb3VudCB8fCAwKSArIDE7CiAgICAgIGlmIChGLmJjb3VudCA9PT0gNCkgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikuaW5uZXJIVE1MID0KICAgICAgICAgIGDwn5KhIFRpcDogSSBhbSBhIHNpbXBsZSBwcmFjdGljZSBwYXJ0bmVyLiBGb3IgYSB0cnVseSBodW1hbi1saWtlIGNoYXQgb24gYW55IHRvcGljLCB0YXAgPGI+8J+kliBCdWlsdC1pbjwvYj4gYWJvdmUgYW5kIGNvbm5lY3QgQ2xhdWRlIEFJLmA7CiAgICAgIH0sIDEyMDApOwogICAgfQogIH0gY2F0Y2ggKGUpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpLnRleHRDb250ZW50ID0gIuKaoO+4jyBBSSBlcnJvciAoIiArIChlLm1lc3NhZ2UgfHwgZSkudG9TdHJpbmcoKS5zbGljZSgwLCA2MCkgKyAiKSDigJQgdXNpbmcgYnVpbHQtaW4gYnJhaW4uIjsKICAgIGNvbnN0IHIgPSBmdEJ1aWx0aW5SZXBseSh0ZXh0KTsKICAgIGZ0Qm90KHIua3IsIHIuZW4pOwogIH0KICBGLmJ1c3kgPSBmYWxzZTsKfQovKiAtLS0gRW5naW5lIDE6IGJ1aWx0LWluIGJyYWluIC0tLSAqLwovKiBDb250ZXh0IGhlbHBlcnM6IGVjaG8gd2hhdCB0aGUgc3BlYWtlciBhY3R1YWxseSBzYWlkLCB3aXRoIHRoZSByaWdodCBwYXJ0aWNsZSAqLwpmdW5jdGlvbiBoYXNCYXRjaGltKGNoKSB7IGNvbnN0IGQgPSBkZWNKYW1vKGNoKTsgcmV0dXJuICEhZCAmJiBkLmYgPiAwOyB9CmZ1bmN0aW9uIGtvRWNobyh4KSB7IGNvbnN0IGxhc3QgPSB4W3gubGVuZ3RoIC0gMV07IHJldHVybiB4ICsgKGhhc0JhdGNoaW0obGFzdCkgPyAi7J207JqUIiA6ICLsmpQiKTsgfSAvLyDrsqDtirjrgqjihpLrsqDtirjrgqjsnbTsmpQ/LCDsu6TtlLzihpLsu6TtlLzsmpQ/CmZ1bmN0aW9uIGNsZWFuU2FpZCh4KSB7CiAgcmV0dXJuICh4IHx8ICIiKS5yZXBsYWNlKC9eKD86KD867KCA64qUfOuCmOuKlHzsoIDrj4R864KY64+EfOq3uOumrOqzoHzqt7jrnpjshJx86re8642wfOq3uOufsOuNsHzsnbTrsojsl5B87Jqw66asfOygnHzslYR87J2MfOyWtOygnHzsmKTriph864K07J28fOyVhOq5jHzrsKnquIh87KeA6riIKVxzKykrLywgIiIpLnRyaW0oKTsKfQovKiBVbmRlcnN0YW5kaW5nIHJ1bGVzIOKAlCByZWFjdCB0byB0aGUgQ09OVEVOVCBvZiB0aGUgc2VudGVuY2UsIG5vdCBqdXN0IGl0cyB0b3BpYy4KICAgRWFjaCByZXR1cm5zIHtrcixlbn0gZWNob2luZyB0aGUgdGhpbmcgdGhlIHNwZWFrZXIgbWVudGlvbmVkLiAqLwpjb25zdCBGVF9SVUxFUyA9IFsKICAvLyBBIG9uZS13b3JkIGFuc3dlciBpcyBzdGlsbCBhbiBhbnN3ZXIuIFJlYWN0aW5nIHRvIHRoZSBhY3R1YWwgd29yZCBhbmQKICAvLyBzdGF5aW5nIG9uIHRoZSBzYW1lIHN1YmplY3QgaXMgd2hhdCBhIGxpc3RlbmVyIGRvZXMuIFRoZSBzY3JpcHQgdXNlZCB0bwogIC8vIGZpbmQgbm8gbWF0Y2gsIHNheSAiVGhhdCBpcyBpbnRlcmVzdGluZyEiLCBhbmQganVtcCB0byBhIFJBTkRPTSBuZXcgdG9waWMKICAvLyAtLSB3aGljaCBpcyB3aGF0IG1ha2VzIGl0IGZlZWwgbGlrZSBub2JvZHkgaXMgdGhlcmUuCiAgeyByZTogL15ccyoo64SkfOyYiHzsnZF87KKL7JWE7JqUfOyii+yVhHzqtJzssK7slYTsmpR866ee7JWE7JqUfOq3uOuemOyalHzslYTri4jsmpR87JWE64uI7JeQ7JqUfOyVhOuHqHzslYTri4h87Iur7Ja07JqUfOuzhOuhnOyalClccypbLiFdP1xzKiQvLAogICAgZ2VuOiAobSwgdikgPT4gewogICAgICBjb25zdCB5ZXMgPSAv64SkfOyYiHzsnZF87KKL7JWEfOq0nOywrnzrp57slYR86re4656YLy50ZXN0KG1bMV0pOwogICAgICBjb25zdCBLID0geWVzID8gWyLsoovslYTsmpQhIOyggOuPhCDqt7jrnpjsmpQuIiwgIuq3uOugh+q1sOyalCwg7KKL64Sk7JqUISJdCiAgICAgICAgICAgICAgICAgICAgOiBbIuyVhCwg6re4656Y7JqUPyDslYzqsqDslrTsmpQuIiwgIuq3uOugh+q1sOyalC4g6rSc7LCu7JWE7JqUISJdOwogICAgICBjb25zdCBFID0geWVzID8gWyJHb29kISBNZSB0b28uIiwgIkkgc2VlLCB0aGF0IGlzIG5pY2UhIl0KICAgICAgICAgICAgICAgICAgICA6IFsiT2ggcmVhbGx5PyBJIHVuZGVyc3RhbmQuIiwgIkkgc2VlLiBUaGF0IGlzIGZpbmUhIl07CiAgICAgIGNvbnN0IGkgPSB2ICUgMjsKICAgICAgY29uc3QgcSA9IEYudG9waWMgPyBmdFBpY2tRKEYudG9waWMsICIiKSA6IG51bGw7CiAgICAgIHJldHVybiBxID8geyBrcjogYCR7S1tpXX0gJHtxWzBdfWAsIGVuOiBgJHtFW2ldfSAke3FbMV19YCB9CiAgICAgICAgICAgICAgIDogeyBrcjogYCR7S1tpXX0g642UIOydtOyVvOq4sO2VtCDso7zshLjsmpQuYCwgZW46IGAke0VbaV19IFRlbGwgbWUgbW9yZS5gIH07CiAgICB9IH0sCiAgLy8gIuyggOuKlCDthrDsnbTsl5DsmpQiIGluIHRoZSBmaXJzdCBicmVhdGggaXMgYWxtb3N0IGFsd2F5cyBhIG5hbWUuIExpbWl0ZWQgdG8gdGhlCiAgLy8gb3BlbmluZyB0dXJucyBzbyAi7KCA64qUIO2VmeyDneydtOyXkOyalCIgbGF0ZXIgZG9lcyBub3QgZ2V0IGdyZWV0ZWQgYXMgTXIgU3R1ZGVudC4KICB7IHJlOiAvKD867KCA64qUfOygnCDsnbTrpoTsnYB864KY64qUKVxzKihb6rCALe2eo2EtekEtWl17MSwxMH0pXHMqKD867J207JeQ7JqUfOyYiOyalHzsnoXri4jri6R87J2065286rOgIO2VtOyalHzrnbzqs6Ag7ZW07JqUKS8sCiAgICBnZW46IChtLCB2KSA9PiB7CiAgICAgIGlmIChGLmxvZy5sZW5ndGggPiAzKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3QgeCA9IGNsZWFuU2FpZChtWzFdKTsKICAgICAgaWYgKCF4IHx8IC/tlZnsg5187ISg7IOd64uYfOyCrOuejHztlZzqta3snbh866+46rWt7J24fOy5nOq1rHzrgqjsnpB87Jes7J6QLy50ZXN0KHgpKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3QgSyA9IFtgJHt4fSDslKgsIOuwmOqwgOybjOyalCEg7KCA64qUIO2VnOq1reyWtCDsuZzqtazsmIjsmpQuIOyYpOuKmCDrrZAg7ZaI7Ja07JqUP2AsCiAgICAgICAgICAgICAgICAgYOyViOuFle2VmOyEuOyalCwgJHt4fSDslKghIOunjOuCmOyEnCDrsJjqsIDsm4zsmpQuIOyWtOuUlOyXkCDsgrTslYTsmpQ/YF07CiAgICAgIGNvbnN0IEUgPSBbYE5pY2UgdG8gbWVldCB5b3UsICR7eH0hIEkgYW0geW91ciBLb3JlYW4gZnJpZW5kLiBXaGF0IGRpZCB5b3UgZG8gdG9kYXk/YCwKICAgICAgICAgICAgICAgICBgSGVsbG8sICR7eH0hIEdvb2QgdG8gbWVldCB5b3UuIFdoZXJlIGRvIHlvdSBsaXZlP2BdOwogICAgICByZXR1cm4geyBrcjogS1t2ICUgMl0sIGVuOiBFW3YgJSAyXSB9OyB9IH0sCiAgeyByZTogLyhb6rCALe2eo2EtekEtWiBdezEsMTR9PykoPzrsl5B87Jy866GcfOuhnCk/XHMqKD867Jes7ZaJXHMqKT8oPzrqvK1ccyopP+qwgOqzoCDsi7Z8KFvqsIAt7Z6jYS16QS1aIF17MSwxNH0/KSg/OuyXkHzsnLzroZx866GcKVxzKuqwgCDrs7Tqs6Ag7Iu2LywKICAgIGdlbjogKG0sIHYpID0+IHsgY29uc3QgeCA9IGNsZWFuU2FpZChtWzFdIHx8IG1bMl0pOyBpZiAoIXgpIHJldHVybiBudWxsOwogICAgICBjb25zdCBLID0gW2Ake2tvRWNobyh4KX0/IOyii+qyoOuEpOyalCEgJHt4feyXkOyEnCDrrZAg7ZWY6rOgIOyLtuyWtOyalD9gLCBg7JmALCAke3h9ISDslrjsoJwg6rCA6rOgIOyLtuyWtOyalD9gLCBgJHtrb0VjaG8oeCl9PyDsoIDrj4Qg6rCAIOuztOqzoCDsi7bslrTsmpQhIOuIhOq1rO2VmOqzoCDqsJnsnbQg6rCIIOqxsOyYiOyalD9gXTsKICAgICAgY29uc3QgRSA9IFtgJHt4fT8gU291bmRzIHdvbmRlcmZ1bCEgV2hhdCBkbyB5b3Ugd2FudCB0byBkbyBpbiAke3h9P2AsIGBXb3csICR7eH0hIFdoZW4gZG8geW91IHdhbnQgdG8gZ28/YCwgYCR7eH0/IEkgd2FudCB0byB2aXNpdCB0b28hIFdobyB3aWxsIHlvdSBnbyB3aXRoP2BdOwogICAgICByZXR1cm4geyBrcjogS1t2ICUgM10sIGVuOiBFW3YgJSAzXSB9OyB9IH0sCiAgeyByZTogLyhb6rCALe2eo2EtekEtWiBdezEsMTR9PykoPzrsnYR866W8KT9ccyrrqLnqs6Ag7Iu2LywKICAgIGdlbjogbSA9PiB7IGNvbnN0IHggPSBjbGVhblNhaWQobVsxXSk7IGlmICgheCkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiB7IGtyOiBgJHtrb0VjaG8oeCl9PyDrp5vsnojqsqDrhKTsmpQhIOyekOyjvCDrqLnslrTsmpQ/YCwgZW46IGAke3h9PyBTb3VuZHMgZGVsaWNpb3VzISBEbyB5b3UgZWF0IGl0IG9mdGVuP2AgfTsgfSB9LAogIHsgcmU6IC8oW+qwgC3tnqNhLXpBLVogXXsxLDE0fT8pKD867J2EfOulvHzsnbR86rCAKT9ccyooPzrsoJXrp5Bccyp87KeE7KecXHMqfOuEiOustFxzKnzrp47snbRccyopPyg/Ouyii+yVhO2VtHzsoovslYTsmpR87IKs656R7ZW0KS8sCiAgICBnZW46IChtLCB2KSA9PiB7IGNvbnN0IHggPSBjbGVhblNhaWQobVsxXSk7IGlmICgheCkgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IEsgPSBbYOyggOuPhCAke3h9IOyii+yVhO2VtOyalCEg7JmcIOyii+yVhO2VtOyalD9gLCBgJHtrb0VjaG8oeCl9PyDrqYvsp4DrhKTsmpQhIOyWuOygnOu2gO2EsCDsoovslYTtlojslrTsmpQ/YF07CiAgICAgIGNvbnN0IEUgPSBbYEkgbGlrZSAke3h9IHRvbyEgV2h5IGRvIHlvdSBsaWtlIGl0P2AsIGAke3h9PyBOaWNlISBTaW5jZSB3aGVuIGhhdmUgeW91IGxpa2VkIGl0P2BdOwogICAgICByZXR1cm4geyBrcjogS1t2ICUgMl0sIGVuOiBFW3YgJSAyXSB9OyB9IH0sCiAgeyByZTogLyhb6rCALe2eo2EtekEtWiBdezEsMTR9PykoPzrsnYR866W8fOydtHzqsIApP1xzKig/OuuzhOuhnHzsi6vslrR87JWIIOyii+yVhCkvLAogICAgZ2VuOiBtID0+IHsgY29uc3QgeCA9IGNsZWFuU2FpZChtWzFdKTsKICAgICAgcmV0dXJuIHsga3I6IHggPyBg7JWELCAke3h964qUIOuzhOuhnOyYiOyalD8g6re465+8IOutkOqwgCDrjZQg7KKL7JWE7JqUP2AgOiAi7JWELCDrs4TroZzsmIjsmpQ/IOq3uOufvCDrrZDqsIAg642UIOyii+yVhOyalD8iLCBlbjogIk9oLCBub3QgYSBmYW4/IFRoZW4gd2hhdCBkbyB5b3UgbGlrZSBiZXR0ZXI/IiB9OyB9IH0sCiAgeyByZTogLyhb6rCALe2eo2EtekEtWiBdezEsMTR9PykoPzrsnYR866W8fOyXkCk/XHMqKD8667Sk7Ja0fOuoueyXiOyWtHzqsJTslrR87IOA7Ja0fOunjOuCrOyWtHztlojslrR86rCU64ukIOyZlCkvLAogICAgZ2VuOiBtID0+IHsgY29uc3QgeCA9IGNsZWFuU2FpZChtWzFdKTsgaWYgKCF4KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIHsga3I6IGDsmKQsICR7eH0hIOyWtOuVoOyWtOyalD8g7KKL7JWY7Ja07JqUP2AsIGVuOiBgT2gsICR7eH0hIEhvdyB3YXMgaXQ/IFdhcyBpdCBnb29kP2AgfTsgfSB9LAogIHsgcmU6IC/slrTroKTsm4x87Z6Y65Ok7Ja0fO2emOuTpOyXiC8sCiAgICBnZW46ICgpID0+ICh7IGtyOiAi6rSc7LCu7JWE7JqULCDsspzsspztnogg7ZWY66m0IOuPvOyalCEg662Q6rCAIOygnOydvCDslrTroKTsm4zsmpQ/IiwgZW46ICJJdCBpcyBva2F5IOKAlCBzbG93IGFuZCBzdGVhZHkhIFdoYXQgaXMgdGhlIGhhcmRlc3QgcGFydD8iIH0pIH0sCiAgeyByZTogL+2UvOqzpO2VtHzsobjroKQvLAogICAgZ2VuOiAoKSA9PiAoeyBrcjogIuyVhOydtOqzoCwg7ZS86rOk7ZWY6rWw7JqULiDsmKTripjsnYAg7ZG5IOyJrOyEuOyalCEg67O07Ya1IOuqhyDsi5zsl5Ag7J6Q7JqUPyIsIGVuOiAiT2ggbm8sIHlvdSBhcmUgdGlyZWQuIFJlc3Qgd2VsbCB0b2RheSEgV2hhdCB0aW1lIGRvIHlvdSB1c3VhbGx5IHNsZWVwPyIgfSkgfSwKICB7IHJlOiAv7Ja065WM7JqUXD8/XHMqJHzslrTrlrvqsowg7IOd6rCBLywKICAgIGdlbjogKCkgPT4gKHsga3I6ICLsnYwsIOyggOuKlCDsoJXrp5Ag7KKL64uk6rOgIOyDneqwge2VtOyalCEg6re465+w642wIOyZnCDrrLzslrTrtJDsmpQ/IOq2geq4iO2VtOyalCEiLCBlbjogIkhtbSwgSSB0aGluayBpdCBpcyByZWFsbHkgZ29vZCEgQnV0IHdoeSBkbyB5b3UgYXNrPyBJIGFtIGN1cmlvdXMhIiB9KSB9LApdOwpmdW5jdGlvbiBmdFBpY2tRKGtleSwgdXNlclRleHQpIHsKICBjb25zdCB0ID0gRlRfVE9QSUNTW2tleV07CiAgbGV0IGkgPSBGLnFpW2tleV0gfHwgMDsKICB3aGlsZSAoaSA8IHQucS5sZW5ndGgpIHsKICAgIGNvbnN0IHEgPSB0LnFbaV07IGkrKzsKICAgIEYucWlba2V5XSA9IGk7CiAgICBpZiAodXNlclRleHQgJiYgc2hhcmVzV29yZChxWzBdLCB1c2VyVGV4dCkpIGNvbnRpbnVlOyAvLyBkbyBub3QgYXNrIHdoYXQgdGhleSBqdXN0IHRvbGQgdXMKICAgIHJldHVybiBxOwogIH0KICByZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBzaGFyZXNXb3JkKHF1ZXN0aW9uLCB0ZXh0KSB7CiAgY29uc3Qgd29yZHMgPSAodGV4dCB8fCAiIikuc3BsaXQoL1xzKy8pCiAgICAubWFwKHcgPT4gdy5yZXBsYWNlKC8o7J2EfOulvHzsnbR86rCAfOydgHzripR87JeQfOyXkOyEnHzsnLzroZx866GcfOuPhHzrp4x87JqUfOyYiOyalHzsnbTsl5DsmpQpJC8sICIiKSkKICAgIC5maWx0ZXIodyA9PiB3Lmxlbmd0aCA+PSAyKTsKICByZXR1cm4gd29yZHMuc29tZSh3ID0+IHF1ZXN0aW9uLmluY2x1ZGVzKHcpKTsKfQpmdW5jdGlvbiBmdEJ1aWx0aW5SZXBseSh0ZXh0KSB7CiAgLy8gcGVyc29uYWwgcXVlc3Rpb25zIHRvIHRoZSBib3QKICBmb3IgKGNvbnN0IFtyZSwgYW5zXSBvZiBGVF9TRUxGKSBpZiAocmUudGVzdCh0ZXh0KSkgcmV0dXJuIHsga3I6IGFuc1swXSwgZW46IGFuc1sxXSB9OwogIC8vIGdvb2RieWUKICBpZiAoL+yViOuFle2eiHzsnpgg6rCAfOyemOqwgHzrgZ186re466eMLy50ZXN0KHRleHQpKSByZXR1cm4geyBrcjogIuyYpOuKmCDsnbTslbzquLAg7KCV66eQIOyerOuvuOyeiOyXiOyWtOyalCEg65iQIOydtOyVvOq4sO2VtOyalC4g7JWI64WV7Z6IIOqwgOyEuOyalCEiLCBlbjogIlRvZGF5J3MgdGFsayB3YXMgcmVhbGx5IGZ1biEgTGV0IHVzIHRhbGsgYWdhaW4uIEdvb2RieWUhIiB9OwogIC8vIDEpIHVuZGVyc3RhbmQgdGhlIHNlbnRlbmNlIGl0c2VsZiBhbmQgYnVpbGQgb24gaXQKICBGLnJ1bGVWID0gKEYucnVsZVYgfHwgMCkgKyAxOwogIGZvciAoY29uc3QgcnVsZSBvZiBGVF9SVUxFUykgewogICAgY29uc3QgbSA9IHRleHQubWF0Y2gocnVsZS5yZSk7CiAgICBpZiAobSkgewogICAgICBjb25zdCByID0gcnVsZS5nZW4obSwgRi5ydWxlVik7CiAgICAgIGlmIChyKSB7CiAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKEZUX1RPUElDUykpIGlmIChGVF9UT1BJQ1Nba10ubWF0Y2gudGVzdCh0ZXh0KSkgeyBGLnRvcGljID0gazsgYnJlYWs7IH0KICAgICAgICByZXR1cm4gcjsKICAgICAgfQogICAgfQogIH0KICBjb25zdCByZWFjdCA9IEZUX1JFQUNUW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIEZUX1JFQUNULmxlbmd0aCldOwogIC8vIDIpIGRpZCB0aGV5IG1lbnRpb24gYSBuZXcgdG9waWM/CiAgbGV0IG5ld1RvcGljID0gbnVsbDsKICBmb3IgKGNvbnN0IGsgb2Ygc2h1ZmZsZShPYmplY3Qua2V5cyhGVF9UT1BJQ1MpKSkgewogICAgaWYgKGsgIT09IEYudG9waWMgJiYgRlRfVE9QSUNTW2tdLm1hdGNoLnRlc3QodGV4dCkgJiYgKEYucWlba10gfHwgMCkgPCBGVF9UT1BJQ1Nba10ucS5sZW5ndGgpIHsgbmV3VG9waWMgPSBrOyBicmVhazsgfQogIH0KICBpZiAobmV3VG9waWMpIHsKICAgIEYudG9waWMgPSBuZXdUb3BpYzsKICAgIGNvbnN0IHEgPSBmdFBpY2tRKG5ld1RvcGljLCB0ZXh0KTsKICAgIGlmIChxKSByZXR1cm4geyBrcjogYCR7cmVhY3RbMF19ICR7cVswXX1gLCBlbjogYCR7cmVhY3RbMV19ICR7cVsxXX1gIH07CiAgfQogIC8vIDMpIGNvbnRpbnVlIGN1cnJlbnQgdG9waWMKICBpZiAoRi50b3BpYykgewogICAgY29uc3QgcSA9IGZ0UGlja1EoRi50b3BpYywgdGV4dCk7CiAgICBpZiAocSkgcmV0dXJuIHsga3I6IGAke3JlYWN0WzBdfSDqt7jrn7wsICR7cVswXX1gLCBlbjogYCR7cmVhY3RbMV19IFRoZW4sICR7cVsxXX1gIH07CiAgfQogIC8vIDQpIGZyZXNoIHRvcGljCiAgY29uc3QgZnJlc2ggPSBPYmplY3Qua2V5cyhGVF9UT1BJQ1MpLmZpbHRlcihrID0+IChGLnFpW2tdIHx8IDApIDwgRlRfVE9QSUNTW2tdLnEubGVuZ3RoKTsKICBpZiAoIWZyZXNoLmxlbmd0aCkgcmV0dXJuIHsga3I6ICLsmrDsmYAsIOyasOumrCDsoJXrp5Ag66eO7J20IOydtOyVvOq4sO2WiOuEpOyalCEg7Jik64qYIOy1nOqzoOyYiOyalCEiLCBlbjogIldvdywgd2UgdGFsa2VkIHNvIG11Y2ghIFlvdSBkaWQgZ3JlYXQgdG9kYXkhIiB9OwogIEYudG9waWMgPSBmcmVzaFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBmcmVzaC5sZW5ndGgpXTsKICBjb25zdCBxID0gZnRQaWNrUShGLnRvcGljLCB0ZXh0KTsKICByZXR1cm4gcSA/IHsga3I6IGAke3JlYWN0WzBdfSAke3FbMF19YCwgZW46IGAke3JlYWN0WzFdfSAke3FbMV19YCB9CiAgICAgICAgICAgOiB7IGtyOiAi7J6s66+47J6I64Sk7JqUISDrjZQg7J207JW86riw7ZW0IOyjvOyEuOyalC4iLCBlbjogIkludGVyZXN0aW5nISBUZWxsIG1lIG1vcmUuIiB9Owp9CmZ1bmN0aW9uIGZ0TnVkZ2UoKSB7CiAgaWYgKEYuYnVzeSkgcmV0dXJuOwogIGNvbnN0IHIgPSAoKCkgPT4geyBGLnRvcGljID0gbnVsbDsgcmV0dXJuIGZ0QnVpbHRpblJlcGx5KCIiKTsgfSkoKTsKICBmdEJvdChyLmtyLCByLmVuKTsKfQovKiAtLS0gRW5naW5lIDI6IENsYXVkZSBBUEkgKHVzZXIncyBvd24ga2V5LCBzdG9yZWQgb25seSBpbiB0aGlzIGJyb3dzZXIpIC0tLSAqLwpjb25zdCBBSV9PUEVOID0gZmFsc2U7IC8vIHB1YmxpYyBidWlsZCBzZXRzIHRoaXMgZmFsc2U6IEFJIG1vZGUgaGlkZGVuIHVubGVzcyBVUkwgZW5kcyB3aXRoICNhaQpjb25zdCBQUkVNSVVNX1VSTCA9ICJodHRwczovL3RvbXBoYW0uY2Evc3BlYWtpbmctcGF0aC1jb3Vyc2UvIjsgLy8gcHVibGljIGJ1aWxkIHNldHMgdGhlIHByZW1pdW0gc2FsZXMgcGFnZSBVUkw7IGVtcHR5ID0gbm8gcHJlbWl1bSBjYXJkCmZ1bmN0aW9uIGZ0QXBpS2V5KCkgeyByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImtxQXBpS2V5IikgfHwgIiI7IH0KZnVuY3Rpb24gYWlPcHRJbigpIHsgcmV0dXJuIEFJX09QRU4gfHwgISFmdEFwaUtleSgpIHx8IGxvY2F0aW9uLmhhc2guaW5jbHVkZXMoImFpIik7IH0KZnVuY3Rpb24gcmVuZGVyRnRFbmdpbmUoKSB7CiAgY29uc3QgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdEVuZ2luZSIpOwogIGlmICghYWlPcHRJbigpKSB7IGIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgcmV0dXJuOyB9CiAgYi5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgYi50ZXh0Q29udGVudCA9IGZ0QXBpS2V5KCkgPyAi4pyoIENsYXVkZSBBSSIgOiAi8J+kliBCdWlsdC1pbiI7Cn0KZnVuY3Rpb24gZnRFbmdpbmVUYXAoKSB7CiAgaWYgKGZ0QXBpS2V5KCkpIHsKICAgIGlmIChjb25maXJtKCJDbGF1ZGUgQUkgbW9kZSBpcyBPTiAoeW91ciBBUEkga2V5IGlzIHN0b3JlZCBvbmx5IGluIHRoaXMgYnJvd3NlcikuIFJlbW92ZSB0aGUga2V5IGFuZCBzd2l0Y2ggYmFjayB0byB0aGUgYnVpbHQtaW4gcGFydG5lcj8iKSkgewogICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgia3FBcGlLZXkiKTsKICAgIH0KICB9IGVsc2UgewogICAgY29uc3QgayA9IHByb21wdCgiUGFzdGUgeW91ciBBbnRocm9waWMgQVBJIGtleSAoc2stYW50LeKApikgZm9yIG9wZW4tdG9waWMgQUkgY29udmVyc2F0aW9uLlxuXG5JdCBpcyBzYXZlZCBPTkxZIGluIHRoaXMgYnJvd3NlciAobG9jYWxTdG9yYWdlKSBhbmQgc2VudCBvbmx5IHRvIGFwaS5hbnRocm9waWMuY29tLiBBUEkgdXNhZ2UgaXMgYmlsbGVkIHRvIHlvdXIga2V5LlxuTGVhdmUgZW1wdHkgdG8ga2VlcCB0aGUgZnJlZSBidWlsdC1pbiBwYXJ0bmVyLiIpOwogICAgaWYgKGsgJiYgay50cmltKCkuc3RhcnRzV2l0aCgic2stYW50IikpIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJrcUFwaUtleSIsIGsudHJpbSgpKTsKICAgIGVsc2UgaWYgKGspIGFsZXJ0KCJUaGF0IGRvZXMgbm90IGxvb2sgbGlrZSBhbiBBbnRocm9waWMga2V5IChzay1hbnQt4oCmKS4gTm90IHNhdmVkLiIpOwogIH0KICByZW5kZXJGdEVuZ2luZSgpOwp9CmFzeW5jIGZ1bmN0aW9uIGZ0Q2xhdWRlUmVwbHkodGV4dCkgewogIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCJodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzIiwgewogICAgbWV0aG9kOiAiUE9TVCIsCiAgICBoZWFkZXJzOiB7CiAgICAgICJjb250ZW50LXR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICJ4LWFwaS1rZXkiOiBmdEFwaUtleSgpLAogICAgICAiYW50aHJvcGljLXZlcnNpb24iOiAiMjAyMy0wNi0wMSIsCiAgICAgICJhbnRocm9waWMtZGFuZ2Vyb3VzLWRpcmVjdC1icm93c2VyLWFjY2VzcyI6ICJ0cnVlIgogICAgfSwKICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgbW9kZWw6ICJjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxIiwKICAgICAgbWF4X3Rva2VuczogMzAwLAogICAgICBzeXN0ZW06ICJZb3UgYXJlIO2VnOq1reyWtCDsuZzqtawsIGEgd2FybSBLb3JlYW4gY29udmVyc2F0aW9uIHBhcnRuZXIgZm9yIGEgYmVnaW5uZXIgbGVhcm5lciAoYXJvdW5kIFRPUElLIDEgbGV2ZWwpLiBSZXBseSBpbiBzaW1wbGUgcG9saXRlIEtvcmVhbiAo7ZW07JqU7LK0KSwgMS0yIHNob3J0IHNlbnRlbmNlcywgdGhlbiBhc2sgT05FIHNpbXBsZSBmb2xsb3ctdXAgcXVlc3Rpb24uIEFueSB0b3BpYyBpcyBmaW5lLiBJZiB0aGUgdXNlcidzIEtvcmVhbiBoYXMgYSBjbGVhciBtaXN0YWtlLCBhZGQgYSBnZW50bGUgZml4LiBSZXNwb25kIHdpdGggT05MWSB0aGlzIEpTT046IHtcImtyXCI6XCJ5b3VyIEtvcmVhbiByZXBseVwiLFwiZW5cIjpcIkVuZ2xpc2ggdHJhbnNsYXRpb25cIixcImZpeFwiOm51bGwgb3IgXCJ3aGF0IHRoZXkgc2FpZCDihpIgbW9yZSBuYXR1cmFsIHZlcnNpb24gKHNob3J0IHJlYXNvbilcIn0iLAogICAgICBtZXNzYWdlczogRi5oaXN0LnNsaWNlKC0xMikKICAgIH0pCiAgfSk7CiAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcigiQVBJICIgKyByZXMuc3RhdHVzKTsKICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTsKICBjb25zdCByYXcgPSBkYXRhLmNvbnRlbnRbMF0udGV4dDsKICBjb25zdCBtID0gcmF3Lm1hdGNoKC9ce1tcc1xTXSpcfS8pOwogIGNvbnN0IGogPSBKU09OLnBhcnNlKG0gPyBtWzBdIDogcmF3KTsKICByZXR1cm4geyBrcjogai5rciwgZW46IGouZW4sIGZpeDogai5maXggfTsKfQovKiAtLS0gVm9pY2UgbG9vcCAtLS0gKi8KZnVuY3Rpb24gZnRMaXN0ZW4oKSB7CiAgaWYgKCFTUiB8fCBzckJsb2NrZWQgfHwgcmVjb2duaXppbmcgfHwgRi5idXN5IHx8IGRvY3VtZW50LmhpZGRlbikgcmV0dXJuOwogIGNvbnN0IG1pYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdE1pYyIpOwogIGNvbnN0IHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFN0YXR1cyIpOwogIHJlY29nbml6aW5nID0gdHJ1ZTsKICBtaWMuY2xhc3NMaXN0LmFkZCgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLij7kiOwogIC8vIEEgYmVnaW5uZXIgcGF1c2VzIG1pZC1zZW50ZW5jZSB0byB0aGluay4gQ3V0dGluZyB0aGVtIG9mZiB0aGVyZSBpcyB0aGUgZmFzdGVzdAogIC8vIHdheSB0byBtYWtlIHNvbWVvbmUgZmVlbCBzdHVwaWQsIHNvIHdhaXRpbmcgZm9yIHRoZSB0YXAgaXMgdGhlIGRlZmF1bHQuCiAgdmFyIGhvbGQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgia3FNaWNIb2xkIikgIT09ICIwIjsKICBzdGF0dXMudGV4dENvbnRlbnQgPSBob2xkCiAgICA/ICLwn46ZIFNwZWFrIOKAlCB0YWtlIHlvdXIgdGltZS4gVGFwIOKPuSB3aGVuIHlvdSBhcmUgZG9uZS4iCiAgICA6ICLwn46ZIFNwZWFrIOKAlCBJIHdpbGwgYW5zd2VyIHdoZW4geW91IHBhdXNlIChvciB0YXAg4o+5KS4iOwogIGNvbnN0IHJlYyA9IG5ldyBTUigpOwogIGFjdGl2ZVJlYyA9IHJlYzsKICByZWMubGFuZyA9ICJrby1LUiI7IHJlYy5tYXhBbHRlcm5hdGl2ZXMgPSAxOwogIHJlYy5vbmVycm9yID0gZXYgPT4gewogICAgcmVjLmVyckNvZGUgPSBldi5lcnJvcjsKICAgIGlmIChldi5lcnJvciA9PT0gIm5vdC1hbGxvd2VkIikgeyBzdGF0dXMuaW5uZXJIVE1MID0gbWljSGVscEh0bWwoKTsgRi5hdXRvID0gZmFsc2U7IGZ0VG9nZ2xlQXV0byh0cnVlKTsgfQogIH07CiAgc3RhcnRMaXN0ZW5pbmcocmVjLCB7CiAgICBpZGxlTXM6IGhvbGQgPyAwIDogMjgwMCwgY2FwTXM6IGhvbGQgPyAxODAwMDAgOiA2MDAwMCwKICAgIG9uTGl2ZTogdCA9PiB7IGlmICh0KSBzdGF0dXMudGV4dENvbnRlbnQgPSAi8J+OpyDigJzigKYiICsgdC5zbGljZSgtNzApICsgIuKAnSDigJQgdGFwIOKPuSB3aGVuIGRvbmUiOyB9LAogICAgb25GaW5pc2g6IHRleHQgPT4gewogICAgICByZWNvZ25pemluZyA9IGZhbHNlOyBpZiAoYWN0aXZlUmVjID09PSByZWMpIGFjdGl2ZVJlYyA9IG51bGw7CiAgICAgIG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbWljLnRleHRDb250ZW50ID0gIvCfjqQiOwogICAgICBpZiAodGV4dCkgeyBzdGF0dXMudGV4dENvbnRlbnQgPSAiIjsgZnRVc2VyKHRleHQpOyB9CiAgICAgIGVsc2UgaWYgKHJlYy5lcnJDb2RlID09PSAibm90LWFsbG93ZWQiKSB7IC8qIG1pYyBoZWxwIGFscmVhZHkgc2hvd24gYnkgb25lcnJvciAqLyB9CiAgICAgIGVsc2UgaWYgKHJlYy5lcnJDb2RlICYmIHJlYy5lcnJDb2RlICE9PSAibm8tc3BlZWNoIiAmJiByZWMuZXJyQ29kZSAhPT0gImFib3J0ZWQiKQogICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICJNaWMgaXNzdWUgKCIgKyByZWMuZXJyQ29kZSArICIpIOKAlCB5b3UgY2FuIGFsc28gdHlwZSBiZWxvdy4iOwogICAgICBlbHNlIHN0YXR1cy50ZXh0Q29udGVudCA9ICJJIGRpZCBub3QgaGVhciBhbnl0aGluZyDigJQgdGFwIPCfjqQgdG8gdHJ5IGFnYWluLiI7CiAgICB9CiAgfSk7Cn0KYXN5bmMgZnVuY3Rpb24gZnRNaWNUYXAoKSB7CiAgLy8gc2Vjb25kIHRhcCA9ICJJIGZpbmlzaGVkIHNwZWFraW5nIiDihpIgc3RvcCBjYXB0dXJlLCB0cmFuc2NyaWJlIGltbWVkaWF0ZWx5CiAgaWYgKHJlY29nbml6aW5nICYmIGFjdGl2ZVJlYykgeyBmb3JjZUVuZExpc3RlbihhY3RpdmVSZWMpOyByZXR1cm47IH0KICBpZiAoIVNSIHx8IHNyQmxvY2tlZCkgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikuaW5uZXJIVE1MID0gIjxzcGFuIGNsYXNzPSdoZWFyZCc+Vm9pY2UgaW5wdXQgaXMgbm90IGF2YWlsYWJsZSBoZXJlLiBZb3UgY2FuIHR5cGUgeW91ciBLb3JlYW4gYmVsb3cgaW5zdGVhZCE8L3NwYW4+IjsKICAgIHJldHVybjsKICB9CiAgaWYgKCEoU1IgJiYgU1IubmF0aXZlKSAmJiAhKGF3YWl0IGVuc3VyZU1pYygpKSkgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0U3RhdHVzIikuaW5uZXJIVE1MID0gbWljSGVscEh0bWwoKTsKICAgIHJldHVybjsKICB9CiAgZnRMaXN0ZW4oKTsKfQpmdW5jdGlvbiBmdFRvZ2dsZUF1dG8oc2lsZW50KSB7CiAgaWYgKCFzaWxlbnQpIEYuYXV0byA9ICFGLmF1dG87CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZ0QXV0byIpLnRleHRDb250ZW50ID0gIvCflIEgQXV0bzogIiArIChGLmF1dG8gPyAib24iIDogIm9mZiIpOwogIGlmIChGLmF1dG8gJiYgIXNpbGVudCkgZnRNaWNUYXAoKTsKfQpmdW5jdGlvbiBmdFNlbmRUZXh0KCkgewogIGNvbnN0IGlucCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdFRleHQiKTsKICBjb25zdCB0ID0gaW5wLnZhbHVlLnRyaW0oKTsKICBpZiAoIXQpIHJldHVybjsKICBpbnAudmFsdWUgPSAiIjsKICBmdFVzZXIodCk7Cn0KZnVuY3Rpb24gb3BlblJldmlldygpIHsKICBjb25zdCBzcmMgPSBMRVNTT05TLmZpbHRlcihMID0+IGxzdGF0ZShMLm4pLnN0YXJzLnRhbGspOwogIGNvbnN0IHBvb2xMID0gc3JjLmxlbmd0aCA/IHNyYyA6IExFU1NPTlM7CiAgY29uc3QgdHVybnMgPSBzaHVmZmxlKHBvb2xMLmZsYXRNYXAoTCA9PiBUQUxLU1tMLm5dLnR1cm5zLm1hcCh0ID0+ICh7IC4uLnQsIG5wY1dobzogVEFMS1NbTC5uXS53aG8gfSkpKSkuc2xpY2UoMCwgOCk7CiAgVEFMS1MuUiA9IHsgd2hvOiAi8J+OsiBNaXhlZCBwYXJ0bmVycyIsIHQ6ICJSZXZpZXcgd29ya291dCDigJQgIiArIHBvb2xMLmxlbmd0aCArICIgbGVzc29ucyBpbiB0aGUgbWl4IiwgdHVybnMgfTsKICBkZWxldGUgVEsuUjsKICBjdXIgPSB7IG46ICJSIiwga3I6ICLrs7XsirUiLCBlbjogIlJldmlldyIsIHZpOiAiw5RuIHThuq1wIiwgZW1vamk6ICLwn46yIiwgd29yZHM6IHBvb2xMLmZsYXRNYXAoTCA9PiBMLndvcmRzKSwgZ3JhbW1hcjogW10gfTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibFRpdGxlIikudGV4dENvbnRlbnQgPSAi8J+OsiDrs7XsirUg4oCUIFJhbmRvbSBDb252ZXJzYXRpb24iOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3ViIikudGV4dENvbnRlbnQgPSAoc3JjLmxlbmd0aCA/ICJGcm9tIHlvdXIg4q2QIGNvbnZlcnNhdGlvbnMiIDogIkZyb20gYWxsIGxlc3NvbnMiKSArICIgwrcgIiArIHR1cm5zLmxlbmd0aCArICIgc3VycHJpc2UgcXVlc3Rpb25zIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibFN0YXJzIikudGV4dENvbnRlbnQgPSAi8J+OsiI7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnRhYiIpLmZvckVhY2goZWwgPT4gZWwuc3R5bGUuZGlzcGxheSA9IGVsLmRhdGFzZXQudGFiID09PSAidGFsayIgPyAiIiA6ICJub25lIik7CiAgc2V0VGFiKCJ0YWxrIik7CiAgc2hvdygibGVzc29uIik7Cn0KCi8qID09PT09PT09PT09PT09PSBMRVNTT04gPT09PT09PT09PT09PT09ICovCmxldCBjdXJyZW50VGFiID0gImxlYXJuIjsKZnVuY3Rpb24gb3Blbkxlc3NvbihuLCB0YWIgPSAibGVhcm4iKSB7CiAgY3VyID0gTEVTU09OUy5maW5kKEwgPT4gTC5uID09PSBuKTsKICBsZWFybklkeCA9IDA7IHNwZWFrSWR4ID0gMDsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIudGFiIikuZm9yRWFjaChlbCA9PiBlbC5zdHlsZS5kaXNwbGF5ID0gIiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsVGl0bGUiKS50ZXh0Q29udGVudCA9IGAke2N1ci5lbW9qaX0gJHtjdXIua3J9IOKAlCAke2N1ci5lbn1gOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3ViIikudGV4dENvbnRlbnQgPSBgUXVlc3QgJHtjdXIubn0gwrcgJHtjdXIudml9IMK3ICR7Y3VyLndvcmRzLmxlbmd0aH0gd29yZHMgwrcgJHtjdXIuZ3JhbW1hci5sZW5ndGh9IHBhdHRlcm5zYDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibFN0YXJzIikudGV4dENvbnRlbnQgPSBzdGFyc09mKG4pOwogIHJlbmRlckdyYW1tYXIoKTsKICBzZXRUYWIodGFiKTsKICBzaG93KCJsZXNzb24iKTsKfQpmdW5jdGlvbiBzZXRUYWIodCkgewogIGN1cnJlbnRUYWIgPSB0OwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi50YWIiKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC50b2dnbGUoIm9uIiwgZWwuZGF0YXNldC50YWIgPT09IHQpKTsKICBbImxlYXJuIiwic3RvcnkiLCJ0YWxrIiwiZ3JhbW1hciIsInNwZWFrIiwicGxheSJdLmZvckVhY2goeCA9PiB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFiLSIgKyB4KS5zdHlsZS5kaXNwbGF5ID0geCA9PT0gdCA/ICIiIDogIm5vbmUiOwogIH0pOwogIGlmICh0ID09PSAibGVhcm4iKSByZW5kZXJMZWFybigpOwogIGlmICh0ID09PSAic3RvcnkiKSB7IHN0b3J5SWR4ID0gMDsgcmVuZGVyU3RvcnkoKTsgfQogIGlmICh0ID09PSAidGFsayIpIHJlbmRlclRhbGsoKTsKICBpZiAodCA9PT0gInNwZWFrIikgcmVuZGVyU3BlYWsoKTsKfQoKLyogLS0tIFN0b3J5IHRhYiAtLS0gKi8KbGV0IHN0b3J5SWR4ID0gMDsKZnVuY3Rpb24gc2VnbWVudEVtb2ppKHMpIHsKICBpZiAodHlwZW9mIEludGwgIT09ICJ1bmRlZmluZWQiICYmIEludGwuU2VnbWVudGVyKSB7CiAgICByZXR1cm4gWy4uLm5ldyBJbnRsLlNlZ21lbnRlcigiZW4iLCB7Z3JhbnVsYXJpdHk6ImdyYXBoZW1lIn0pLnNlZ21lbnQocyldLm1hcCh4ID0+IHguc2VnbWVudCk7CiAgfQogIHJldHVybiBbLi4uc107IC8vIGZhbGxiYWNrOiBtYXkgc3BsaXQgWldKIGVtb2ppIG9uIHZlcnkgb2xkIGJyb3dzZXJzCn0KZnVuY3Rpb24gcmVuZGVyU3RvcnkoKSB7CiAgY29uc3Qgc3QgPSBjdXIuc3RvcnksIHN0ZXAgPSBzdC5zdGVwc1tzdG9yeUlkeF07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0VGl0bGUiKS50ZXh0Q29udGVudCA9IHN0LnQ7CiAgY29uc3Qgc3RhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RTdGFnZSIpOwogIHN0YWdlLmNsYXNzTmFtZSA9ICJzdGFnZSBiZy0iICsgc3RlcC5iZyArIChzdGVwLmZ4ID8gIiBmeC0iICsgc3RlcC5meCA6ICIiKTsKICBzdGFnZS5pbm5lckhUTUwgPSBzZWdtZW50RW1vamkoc3RlcC5zYykubWFwKGUgPT4gYDxzcGFuIGNsYXNzPSJhY3RvciI+JHtlfTwvc3Bhbj5gKS5qb2luKCIiKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3ROYXIiKS50ZXh0Q29udGVudCA9IHN0ZXAubmFyOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFdobyIpLnRleHRDb250ZW50ID0gc3RlcC53aG87CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0S3IiKS50ZXh0Q29udGVudCA9IHN0ZXAua3IgKyAiIPCflIoiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdEVuIikudGV4dENvbnRlbnQgPSBzdGVwLmVuOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdFByb21wdCIpLnRleHRDb250ZW50ID0gIldoYXQgZG8geW91IHNheT8iOwogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdENob2ljZXMiKTsKICBib3guaW5uZXJIVE1MID0gIiI7CiAgc2h1ZmZsZShzdGVwLmNoKS5mb3JFYWNoKGMgPT4gewogICAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYi5jbGFzc05hbWUgPSAiYW5zIjsKICAgIGIuaW5uZXJIVE1MID0gYDxkaXY+JHtjWzBdfTwvZGl2PjxkaXYgY2xhc3M9ImFlbiI+JHtjWzFdfTwvZGl2PmA7CiAgICBiLm9uY2xpY2sgPSBldiA9PiBzdG9yeUNob2ljZShiLCBjLCBldik7CiAgICBib3guYXBwZW5kQ2hpbGQoYik7CiAgfSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0RG90cyIpLnRleHRDb250ZW50ID0KICAgIHN0LnN0ZXBzLm1hcCgoXywgaSkgPT4gaSA8IHN0b3J5SWR4ID8gIuKXjyIgOiBpID09PSBzdG9yeUlkeCA/ICLil4kiIDogIuKXiyIpLmpvaW4oIiAiKTsKICBzYXkoc3RlcC5rci5yZXBsYWNlKC9cKC4qP1wpL2csICIiKSk7Cn0KZnVuY3Rpb24gc2F5U3RvcnkoKSB7IHNheShjdXIuc3Rvcnkuc3RlcHNbc3RvcnlJZHhdLmtyLnJlcGxhY2UoL1woLio/XCkvZywgIiIpKTsgfQpmdW5jdGlvbiBzdG9yeUNob2ljZShidG4sIGMsIGV2KSB7CiAgaWYgKGNbMl0pIHsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNzdENob2ljZXMgLmFucyIpLmZvckVhY2goYiA9PiBiLm9uY2xpY2sgPSBudWxsKTsKICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCJjb3JyZWN0Iik7CiAgICBzZnguZ29vZCgpOwogICAgZ2FpblhwKDQpOyBmbG9hdEZ4KCIrNCBYUCIsICIjMkY3RDRGIiwgZXYuY2xpZW50WCwgZXYuY2xpZW50WSk7CiAgICBzdG9yeUlkeCsrOwogICAgLy8gc3BlYWsgdGhlIGNob3NlbiBzZW50ZW5jZSBpbiBmdWxsLCBUSEVOIGFkdmFuY2UgKGZhbGxiYWNrIHRpbWVyIGlmIFRUUyBpcyBzaWxlbnQpCiAgICBsZXQgYWR2YW5jZWQgPSBmYWxzZTsKICAgIGNvbnN0IGFkdmFuY2UgPSAoKSA9PiB7CiAgICAgIGlmIChhZHZhbmNlZCkgcmV0dXJuOwogICAgICBhZHZhbmNlZCA9IHRydWU7CiAgICAgIHN0b3J5QWR2YW5jZSgpOwogICAgfTsKICAgIHNheShjWzBdLCAwLjksICgpID0+IHNldFRpbWVvdXQoYWR2YW5jZSwgMjUwKSk7CiAgICBzZXRUaW1lb3V0KGFkdmFuY2UsIE1hdGgubWF4KDM1MDAsIGNbMF0ubGVuZ3RoICogMjIwKSk7CiAgfSBlbHNlIHsKICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCJ3cm9uZyIpOyBzZnguYmFkKCk7CiAgICBmbG9hdEZ4KCLwn5isIOKApmF3a3dhcmQgc2lsZW5jZeKApiIsICIjQjA3RDI4IiwgZXYuY2xpZW50WCwgZXYuY2xpZW50WSAtIDMwKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gYnRuLmNsYXNzTGlzdC5yZW1vdmUoIndyb25nIiksIDYwMCk7CiAgfQp9CmZ1bmN0aW9uIHN0b3J5QWR2YW5jZSgpIHsKICBpZiAoc3RvcnlJZHggPj0gY3VyLnN0b3J5LnN0ZXBzLmxlbmd0aCkgewogICAgY29uc3QgbHMgPSBsc3RhdGUoY3VyLm4pOwogICAgY29uc3QgZmlyc3QgPSAhbHMuc3RhcnMuc3Rvcnk7CiAgICBscy5zdGFycy5zdG9yeSA9IHRydWU7IHBlcnNpc3QoKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2YoY3VyLm4pOwogICAgZ2FpblhwKDE1KTsgY29uZmV0dGkoKTsgc2Z4LndpbigpOwogICAgZGFpbHlCdW1wKCJjb252byIpOwogICAgY29uc3Qgc3RhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RTdGFnZSIpOwogICAgc3RhZ2UuY2xhc3NOYW1lID0gInN0YWdlIGJnLWZlc3RpdmUiOwogICAgc3RhZ2UuaW5uZXJIVE1MID0gIjxzcGFuIGNsYXNzPSdhY3Rvcic+8J+OiTwvc3Bhbj48c3BhbiBjbGFzcz0nYWN0b3InPvCfj4Y8L3NwYW4+PHNwYW4gY2xhc3M9J2FjdG9yJz7wn46KPC9zcGFuPiI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3ROYXIiKS50ZXh0Q29udGVudCA9ICJTY2VuYXJpbyBjb21wbGV0ZSEgWW91IHN1cnZpdmVkIHRoZSBzaXR1YXRpb24gaW4gS29yZWFuLiArMTUgWFAiICsgKGZpcnN0ID8gIiBhbmQgYSDirZAgU3Rvcnkgc3RhciEiIDogIiIpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0V2hvIikudGV4dENvbnRlbnQgPSAi8J+OrSBUaGUgRW5kIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdEtyIikudGV4dENvbnRlbnQgPSAi7KCV66eQIOyemO2WiOyWtOyalCEiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0RW4iKS50ZXh0Q29udGVudCA9ICJZb3UgZGlkIHJlYWxseSB3ZWxsISI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RQcm9tcHQiKS50ZXh0Q29udGVudCA9ICIiOwogICAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0Q2hvaWNlcyIpOwogICAgYm94LmlubmVySFRNTCA9ICIiOwogICAgY29uc3QgYWdhaW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIGFnYWluLmNsYXNzTmFtZSA9ICJidG4iOyBhZ2Fpbi50ZXh0Q29udGVudCA9ICJSZXBsYXkgc3Rvcnkg8J+UgSI7CiAgICBhZ2Fpbi5vbmNsaWNrID0gKCkgPT4geyBzdG9yeUlkeCA9IDA7IHJlbmRlclN0b3J5KCk7IH07CiAgICBib3guYXBwZW5kQ2hpbGQoYWdhaW4pOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0RG90cyIpLnRleHRDb250ZW50ID0gY3VyLnN0b3J5LnN0ZXBzLm1hcCgoKSA9PiAi4pePIikuam9pbigiICIpOwogICAgc2F5KCLsoJXrp5Ag7J6Y7ZaI7Ja07JqUISIpOwogIH0gZWxzZSB7CiAgICByZW5kZXJTdG9yeSgpOwogIH0KfQoKLyogLS0tIExlYXJuIHRhYiAtLS0gKi8KZnVuY3Rpb24gcmVuZGVyTGVhcm4oKSB7CiAgY29uc3QgdyA9IGN1ci53b3Jkc1tsZWFybklkeF07CiAgY29uc3Qgc3QgPSBsc3RhdGUoY3VyLm4pOwogIGNvbnN0IGtub3duID0gc3Qua25vd24uaW5jbHVkZXMod1swXSk7CiAgY29uc3Qgc2FpZCA9IChzdC5wcm9uIHx8IFtdKS5pbmNsdWRlcyh3WzBdKTsKICAvLyB0aGUg4oaQIOKGkiBhcnJvd3MgYXBwZWFyIGFmdGVyIHRoZSBmaXJzdCAiR290IGl0Ijogb25lIGRlY2lzaW9uIHBlciBjYXJkIGZvciBhIGZpcnN0LXRpbWVyCiAgY29uc3QgZmlyc3RDYXJkID0gIU9iamVjdC52YWx1ZXMoc2F2ZS5sZXNzb25zKS5zb21lKGwgPT4gbC5rbm93biAmJiBsLmtub3duLmxlbmd0aCk7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3RhYi1sZWFybiAubGVhcm4tbmF2IC5idG4uZ2hvc3QiKS5mb3JFYWNoKGIgPT4gYi5zdHlsZS5kaXNwbGF5ID0gZmlyc3RDYXJkID8gIm5vbmUiIDogIiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3Y2FyZCIpLmlubmVySFRNTCA9IGAKICAgIDxkaXYgY2xhc3M9IndlbW9qaSI+JHt3WzRdfTwvZGl2PgogICAgPGRpdiBjbGFzcz0id2tyIiBvbmNsaWNrPSJzYXkoJyR7d1swXS5yZXBsYWNlKC8nL2csIlxcJyIpfScpIj4ke3dbMF19PHNwYW4gaWQ9IndCYWRnZSI+JHtzYWlkID8gIiDwn46WIiA6ICIifTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4O2NvbG9yOnZhcigtLWFjY2VudDIpIj7wn5SKPC9zcGFuPjwvZGl2PgogICAgPGRpdiBjbGFzcz0id3JvIj4ke3dbMV19PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ3bWVhbiI+JHt3WzJdfTwvZGl2PgogICAgPGRpdiBjbGFzcz0id3ZpIj7wn5KhICR7d1szXX08L2Rpdj4KICAgIDxkaXYgY2xhc3M9IndleCIgb25jbGljaz0ic2F5KCcke3dbNV0ucmVwbGFjZSgvJy9nLCJcXCciKX0nKSI+CiAgICAgICR7d1s1XX0gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWFjY2VudDIpO2ZvbnQtc2l6ZToxMnB4Ij7wn5SKPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJleGVuIj4ke3dbNl19PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNheXJvdyI+CiAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBzYXlidG4iIGlkPSJ3TWljIiBvbmNsaWNrPSJ3b3JkTWljVGFwKCkiPvCfjqQgU2F5IGl0PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBvbmNsaWNrPSJzYXkoJyR7d1swXS5yZXBsYWNlKC8nL2csIlxcJyIpfScsMC41NSkiPvCfkKIgU2xvdzwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzcmVzdWx0IiBpZD0id1Byb25SZXMiIHN0eWxlPSJtaW4taGVpZ2h0OjA7Zm9udC1zaXplOjEzLjVweDsiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ic3BrLWRpZmYiIGlkPSJ3UHJvbkRpZmYiIHN0eWxlPSJmb250LXNpemU6MjJweDsiPjwvZGl2PmA7CiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtub3dCdG4iKTsKICBidG4udGV4dENvbnRlbnQgPSBrbm93biA/ICLinJMgTGVhcm5lZCEiIDogIuKckyBHb3QgaXQgwrcgKzMgWFAiOwogIGJ0bi5zdHlsZS5vcGFjaXR5ID0ga25vd24gPyAuNTUgOiAxOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZWFybkNvdW50IikudGV4dENvbnRlbnQgPQogICAgYCR7bGVhcm5JZHggKyAxfSAvICR7Y3VyLndvcmRzLmxlbmd0aH0gwrcgbGVhcm5lZCAke3N0Lmtub3duLmxlbmd0aH0vJHtjdXIud29yZHMubGVuZ3RofWA7CiAgc2F5KHdbMF0pOwp9CmZ1bmN0aW9uIGxlYXJuTW92ZShkKSB7CiAgbGVhcm5JZHggPSAobGVhcm5JZHggKyBkICsgY3VyLndvcmRzLmxlbmd0aCkgJSBjdXIud29yZHMubGVuZ3RoOwogIHJlbmRlckxlYXJuKCk7Cn0KZnVuY3Rpb24gbGVhcm5Lbm93KCkgewogIGNvbnN0IHcgPSBjdXIud29yZHNbbGVhcm5JZHhdOwogIGNvbnN0IHN0ID0gbHN0YXRlKGN1ci5uKTsKICBpZiAoIXN0Lmtub3duLmluY2x1ZGVzKHdbMF0pKSB7CiAgICBzdC5rbm93bi5wdXNoKHdbMF0pOwogICAgZ2FpblhwKDMpOyBzZnguZ29vZCgpOyBmbG9hdEZ4KCIrMyBYUCIsICIjMkY3RDRGIik7CiAgICBkYWlseUJ1bXAoIndvcmRzIik7CiAgICAvLyBtaWxlc3RvbmUgcmV3YXJkOiBldmVyeSAxMHRoIHdvcmQgbGVhcm5lZCBhY3Jvc3MgYWxsIGxlc3NvbnMKICAgIGNvbnN0IHRvdGFsID0gT2JqZWN0LnZhbHVlcyhzYXZlLmxlc3NvbnMpLnJlZHVjZSgoYSwgbCkgPT4gYSArIChsLmtub3duID8gbC5rbm93bi5sZW5ndGggOiAwKSwgMCk7CiAgICBpZiAodG90YWwgPiAwICYmIHRvdGFsICUgMTAgPT09IDApIHsKICAgICAgZ2FpblhwKDEwKTsgY29uZmV0dGkoKTsgc2Z4LndpbigpOwogICAgICBmbG9hdEZ4KCLwn5OaICIgKyB0b3RhbCArICIgd29yZHMhICsxMCBib251cyIsICIjQjA3RDI4IiwgbnVsbCwgd2luZG93LmlubmVySGVpZ2h0IC8gMiAtIDYwKTsKICAgIH0KICAgIGlmIChzdC5rbm93bi5sZW5ndGggPT09IGN1ci53b3Jkcy5sZW5ndGggJiYgIXN0LnN0YXJzLmxlYXJuKSB7CiAgICAgIHN0LnN0YXJzLmxlYXJuID0gdHJ1ZTsgcGVyc2lzdCgpOyBjb25mZXR0aSgpOyBzZngud2luKCk7CiAgICAgIGZsb2F0RngoIuKtkCBWb2NhYnVsYXJ5IHN0YXIhIiwgIiNCMDdEMjgiKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxTdGFycyIpLnRleHRDb250ZW50ID0gc3RhcnNPZihjdXIubik7CiAgICB9CiAgICBwZXJzaXN0KCk7CiAgfQogIGxlYXJuTW92ZSgxKTsKfQoKLyogLS0tIEdyYW1tYXIgdGFiIC0tLSAqLwpmdW5jdGlvbiByZW5kZXJHcmFtbWFyKCkgewogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWItZ3JhbW1hciIpOwogIGJveC5pbm5lckhUTUwgPSAiIjsKICBjdXIuZ3JhbW1hci5mb3JFYWNoKGcgPT4gewogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZC5jbGFzc05hbWUgPSAiZ2NhcmQiOwogICAgZC5pbm5lckhUTUwgPSBgCiAgICAgIDxkaXYgY2xhc3M9ImdwYXQiPiR7Z1swXX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ21lYW4iPiR7Z1sxXX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ3ZpIj7wn5ejIFdoZW4gdG8gdXNlOiAke2dbMl19PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Imdub3RlIj7wn5KhICR7Z1szXX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ2V4IiBvbmNsaWNrPSJzYXkoJyR7Z1s0XS5yZXBsYWNlKC8nL2csIlxcJyIpfScpIj48ZGl2IGNsYXNzPSJrIj4ke2dbNF19IDxzcGFuIGNsYXNzPSJzcGsiPvCflIo8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZSI+JHtnWzVdfTwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJnZXgiIG9uY2xpY2s9InNheSgnJHtnWzZdLnJlcGxhY2UoLycvZywiXFwnIil9JykiPjxkaXYgY2xhc3M9ImsiPiR7Z1s2XX0gPHNwYW4gY2xhc3M9InNwayI+8J+Uijwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJlIj4ke2dbN119PC9kaXY+PC9kaXY+YDsKICAgIGJveC5hcHBlbmRDaGlsZChkKTsKICB9KTsKfQoKLyogLS0tIFNwZWFrIHRhYiAtLS0gKi8KZnVuY3Rpb24gc3BlYWtTZW50ZW5jZXMoKSB7CiAgcmV0dXJuIGN1ci53b3Jkcy5maWx0ZXIodyA9PiB3WzVdLnNwbGl0KCIgIikubGVuZ3RoID49IDIpLnNsaWNlKDAsIDgpLm1hcCh3ID0+IFt3WzVdLCB3WzZdXSk7Cn0KZnVuY3Rpb24gcmVuZGVyU3BlYWsoKSB7CiAgY29uc3Qgc3MgPSBzcGVha1NlbnRlbmNlcygpOwogIGNvbnN0IHMgPSBzc1tzcGVha0lkeCAlIHNzLmxlbmd0aF07CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0tyIikudGV4dENvbnRlbnQgPSBzWzBdOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzcGtFbiIpLnRleHRDb250ZW50ID0gc1sxXTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrUmVzdWx0IikuaW5uZXJIVE1MID0gIiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0RpZmYiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrRml4ZXMiKS5pbm5lckhUTUwgPSAiIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrUGxheWJhY2siKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGNvbnN0IG1pYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtaWNCdG4iKTsKICBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7IG1pYy5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsKICByZWNvcmRpbmcgPSBmYWxzZTsgc3RvcFJlY29yZGluZygpOwogIGNvbnN0IHN0ID0gbHN0YXRlKGN1ci5uKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BlYWtDb3VudCIpLnRleHRDb250ZW50ID0KICAgIGAkeyhzcGVha0lkeCAlIHNzLmxlbmd0aCkgKyAxfSAvICR7c3MubGVuZ3RofSDCtyBzcG9rZW4gJHtzdC5zcG9rZW4ubGVuZ3RofS81IGZvciDirZBgOwp9CmZ1bmN0aW9uIHNheUN1cihyYXRlID0gMC45KSB7IHNheShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrS3IiKS50ZXh0Q29udGVudCwgcmF0ZSk7IH0KZnVuY3Rpb24gc3BlYWtNb3ZlKGQpIHsKICBjb25zdCBzcyA9IHNwZWFrU2VudGVuY2VzKCk7CiAgc3BlYWtJZHggPSAoc3BlYWtJZHggKyBkICsgc3MubGVuZ3RoKSAlIHNzLmxlbmd0aDsKICByZW5kZXJTcGVhaygpOwp9Ci8qIC0tLSBUYWxrIHRhYjogc3Bva2VuIGNvbnZlcnNhdGlvbiB3aXRoIHRoZSBnYW1lIC0tLSAqLwpsZXQgVEsgPSB7fTsgICAgICAgIC8vIHBlci1sZXNzb24gaW4tc2Vzc2lvbiBjb252ZXJzYXRpb24gc3RhdGUKbGV0IGVhck1vZGUgPSBmYWxzZTsKZnVuY3Rpb24gdGFsa1N0YXRlKCkgewogIGlmICghVEtbY3VyLm5dKSBUS1tjdXIubl0gPSB7IGk6IDAsIGxvZzogW10sIGRvbmU6IGZhbHNlLCBoaW50VXNlZDogZmFsc2UgfTsKICByZXR1cm4gVEtbY3VyLm5dOwp9CmZ1bmN0aW9uIHRhbGsoKSB7IHJldHVybiBUQUxLU1tjdXIubl07IH0KZnVuY3Rpb24gcmVuZGVyVGFsaygpIHsKICBjb25zdCBUID0gdGFsaygpLCBzdCA9IHRhbGtTdGF0ZSgpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1RpdGxlIikudGV4dENvbnRlbnQgPSAi8J+SrCAiICsgVC50OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1Jlc3VsdCIpLmlubmVySFRNTCA9ICIiOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgcmVidWlsZENoYXQoKTsKICBpZiAoc3QubG9nLmxlbmd0aCA9PT0gMCAmJiAhc3QuZG9uZSkgbnBjVHVybih0cnVlKTsKICBlbHNlIGlmICghc3QuZG9uZSkgc2hvd1Rhc2soKTsKICBlbHNlIHNob3dUYXNrKCk7IC8vIGRvbmU6IHRhc2sgYm94IHNob3dzIGNvbXBsZXRpb24gbm90ZSBmcm9tIGxvZwp9CmZ1bmN0aW9uIHJlYnVpbGRDaGF0KCkgewogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0NoYXQiKTsKICBib3guaW5uZXJIVE1MID0gIiI7CiAgdGFsa1N0YXRlKCkubG9nLmZvckVhY2gobSA9PiBib3guYXBwZW5kQ2hpbGQobWFrZUJ1YmJsZShtKSkpOwogIHNjcm9sbENoYXQoKTsKfQpmdW5jdGlvbiBtYWtlQnViYmxlKG0pIHsKICBjb25zdCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgZC5jbGFzc05hbWUgPSAibXNnICIgKyBtLndobzsKICBpZiAobS53aG8gPT09ICJucGMiKSB7CiAgICBjb25zdCBtYXNrZWQgPSBlYXJNb2RlICYmICFtLnJldmVhbGVkOwogICAgZC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0id2hvIj4ke20ubnBjV2hvIHx8IHRhbGsoKS53aG99PC9kaXY+YCArCiAgICAgIChtYXNrZWQgPyBgPHNwYW4gY2xhc3M9Im1hc2tlZCI+8J+OpyB0YXAgdG8gcmV2ZWFsPC9zcGFuPmAKICAgICAgICAgICAgICA6IGAke20ua3J9IDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1hY2NlbnQyKTtmb250LXNpemU6MTJweCI+8J+Uijwvc3Bhbj48ZGl2IGNsYXNzPSJtZW4iPiR7bS5lbn08L2Rpdj5gKTsKICAgIGQub25jbGljayA9ICgpID0+IHsgbS5yZXZlYWxlZCA9IHRydWU7IHJlYnVpbGRDaGF0KCk7IHNheShtLmtyKTsgfTsKICB9IGVsc2UgaWYgKG0ud2hvID09PSAibWUiKSB7CiAgICBkLmlubmVySFRNTCA9IGAke20ua3J9JHttLnNjb3JlID8gYDxkaXYgY2xhc3M9InNjb3JlIj4ke20uc2NvcmV9PC9kaXY+YCA6ICIifWA7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiBzYXkobS5rcik7CiAgfSBlbHNlIHsKICAgIGQudGV4dENvbnRlbnQgPSBtLmtyOwogIH0KICByZXR1cm4gZDsKfQpmdW5jdGlvbiBzY3JvbGxDaGF0KCkgewogIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0NoYXQiKTsKICBpZiAoYm94Lmxhc3RDaGlsZCkgYm94Lmxhc3RDaGlsZC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAic21vb3RoIiwgYmxvY2s6ICJuZWFyZXN0IiB9KTsKfQpmdW5jdGlvbiBucGNUdXJuKGZpcnN0KSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKSwgVCA9IHRhbGsoKTsKICBjb25zdCB0dXJuID0gVC50dXJuc1tzdC5pXTsKICBjb25zdCB0eXBpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICB0eXBpbmcuY2xhc3NOYW1lID0gIm1zZyBucGMgdHlwaW5nIjsKICB0eXBpbmcuaW5uZXJIVE1MID0gIjxzcGFuPuKXjzwvc3Bhbj48c3Bhbj7il488L3NwYW4+PHNwYW4+4pePPC9zcGFuPiI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrQ2hhdCIpLmFwcGVuZENoaWxkKHR5cGluZyk7CiAgc2Nyb2xsQ2hhdCgpOwogIHNldFRpbWVvdXQoKCkgPT4gewogICAgdHlwaW5nLnJlbW92ZSgpOwogICAgc3QubG9nLnB1c2goeyB3aG86ICJucGMiLCBrcjogdHVybi5xLCBlbjogdHVybi5xRW4sIG5wY1dobzogdHVybi5ucGNXaG8gfSk7CiAgICByZWJ1aWxkQ2hhdCgpOwogICAgc2F5KHR1cm4ucSk7CiAgICBzaG93VGFzaygpOwogIH0sIGZpcnN0ID8gNTAwIDogMTAwMCk7Cn0KZnVuY3Rpb24gc2hvd1Rhc2soKSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKSwgVCA9IHRhbGsoKTsKICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtUYXNrIik7CiAgaWYgKHN0LmRvbmUpIHsKICAgIGJveC5pbm5lckhUTUwgPSAi8J+PgSBDb252ZXJzYXRpb24gY29tcGxldGUhIFJlcGxheSBpdCB3aXRoIOKGuiwgb3IgdHJ5IPCfjqcgTGlzdGVuaW5nIG1vZGUgZm9yIGV4dHJhIGVhciB0cmFpbmluZy4iICsKICAgICAgJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTJweDt0ZXh0LWFsaWduOmNlbnRlcjsiPjxidXR0b24gY2xhc3M9ImJ0biIgc3R5bGU9InBhZGRpbmc6MTFweCAyNnB4O2ZvbnQtc2l6ZToxNXB4OyIgb25jbGljaz0iKHdpbmRvdy5rcUFmdGVyVGFsaz93aW5kb3cua3FBZnRlclRhbGsoKTpiYWNrVG9MZXNzb24oKSkiPk5leHQg4oaSPC9idXR0b24+PC9kaXY+JzsKICAgIGNvbnN0IGN0cmxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3RhYi10YWxrIC50ay1jb250cm9scyIpOwogICAgaWYgKGN0cmxzKSBjdHJscy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgcmV0dXJuOwogIH0KICBjb25zdCBjdHJscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN0YWItdGFsayAudGstY29udHJvbHMiKTsKICBpZiAoY3RybHMpIGN0cmxzLnN0eWxlLmRpc3BsYXkgPSAiIjsKICBjb25zdCB0dXJuID0gVC50dXJuc1tzdC5pXTsKICBib3guaW5uZXJIVE1MID0gYPCfjq8gPGI+WW91ciB0dXJuICgke3N0LmkgKyAxfS8ke1QudHVybnMubGVuZ3RofSk6PC9iPiAke3R1cm4udGFza308ZGl2IGlkPSJ0a0hpbnRCb3giPjwvZGl2PmA7CiAgc3QuaGludFVzZWQgPSBmYWxzZTsKICBjb25zdCB0ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0RpZmYiKSwgdGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtGaXhlcyIpOwogIGlmICh0ZCkgdGQuaW5uZXJIVE1MID0gIiI7CiAgaWYgKHRmKSB0Zi5pbm5lckhUTUwgPSAiIjsKfQpmdW5jdGlvbiB0a0hpbnQoKSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKTsKICBpZiAoc3QuZG9uZSkgcmV0dXJuOwogIGNvbnN0IHR1cm4gPSB0YWxrKCkudHVybnNbc3QuaV07CiAgc3QuaGludFVzZWQgPSB0cnVlOwogIGNvbnN0IGhiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrSGludEJveCIpOwogIGlmIChoYikgaGIuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImhpbnRsaW5lIj7wn5KhICR7dHVybi5hfSA8c3BhbiBjbGFzcz0ic25kYnRuIiBzdHlsZT0icGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMnB4OyIgb25jbGljaz0ic2F5KCcke3R1cm4uYS5yZXBsYWNlKC8nL2csIlxcJyIpfScsMC43KSI+8J+Qojwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjEycHg7Ij4ke3R1cm4uYUVufTwvZGl2PmA7Cn0KZnVuY3Rpb24gdGtTa2lwKCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCk7CiAgaWYgKHN0LmRvbmUpIHJldHVybjsKICBjb25zdCB0dXJuID0gdGFsaygpLnR1cm5zW3N0LmldOwogIHN0LmxvZy5wdXNoKHsgd2hvOiAibWUiLCBrcjogdHVybi5hLCBzY29yZTogIuKPrSBza2lwcGVkIOKAlCByZXBlYXQgaXQgYWZ0ZXIgdGhlIHZvaWNlISIgfSk7CiAgcmVidWlsZENoYXQoKTsKICBsZXQgYWR2YW5jZWQgPSBmYWxzZTsKICBjb25zdCBnbyA9ICgpID0+IHsgaWYgKGFkdmFuY2VkKSByZXR1cm47IGFkdmFuY2VkID0gdHJ1ZTsgdGtOZXh0KCk7IH07CiAgc2F5KHR1cm4uYSwgMC44LCAoKSA9PiBzZXRUaW1lb3V0KGdvLCAyMDApKTsKICBzZXRUaW1lb3V0KGdvLCBNYXRoLm1heCgzNTAwLCB0dXJuLmEubGVuZ3RoICogMjIwKSk7Cn0KZnVuY3Rpb24gdGtOZXh0KCkgewogIGNvbnN0IHN0ID0gdGFsa1N0YXRlKCksIFQgPSB0YWxrKCk7CiAgaWYgKHN0LmkgKyAxID49IFQudHVybnMubGVuZ3RoKSB7CiAgICBzdC5kb25lID0gdHJ1ZTsKICAgIHN0LmxvZy5wdXNoKHsgd2hvOiAibnBjIiwga3I6ICLsmKTripgg64yA7ZmUIOygleunkCDsoovslZjslrTsmpQhIOuLpOydjOyXkCDrmJAg7J207JW86riw7ZW07JqUISDwn46JIiwgZW46ICJUb2RheSdzIGNvbnZlcnNhdGlvbiB3YXMgZ3JlYXQhIExldCdzIHRhbGsgYWdhaW4gbmV4dCB0aW1lISIsIHJldmVhbGVkOiB0cnVlIH0pOwogICAgcmVidWlsZENoYXQoKTsKICAgIHNheSgi7Jik64qYIOuMgO2ZlCDsoJXrp5Ag7KKL7JWY7Ja07JqUISDri6TsnYzsl5Ag65iQIOydtOyVvOq4sO2VtOyalCEiKTsKICAgIGdhaW5YcCgyMCk7IGNvbmZldHRpKCk7IHNmeC53aW4oKTsKICAgIGRhaWx5QnVtcCgiY29udm8iKTsKICAgIGlmIChjdXIubiA9PT0gIlIiKSB7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1Jlc3VsdCIpLmlubmVySFRNTCA9CiAgICAgICAgYPCfj4YgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdvbGQpIj5SZXZpZXcgd29ya291dCBjb21wbGV0ZSEgKzIwIFhQIOKAlCB0YXAg4oa6IGZvciBhIGZyZXNoIHJhbmRvbSBtaXguPC9zcGFuPmA7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBscyA9IGxzdGF0ZShjdXIubik7CiAgICAgIGNvbnN0IGZpcnN0V2luID0gIWxzLnN0YXJzLnRhbGs7CiAgICAgIGxzLnN0YXJzLnRhbGsgPSB0cnVlOyBwZXJzaXN0KCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsU3RhcnMiKS50ZXh0Q29udGVudCA9IHN0YXJzT2YoY3VyLm4pOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPQogICAgICAgIGDwn4+GIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1nb2xkKSI+Q29udmVyc2F0aW9uIGNvbXBsZXRlISArMjAgWFAke2ZpcnN0V2luID8gIiBhbmQgYSDirZAgVGFsayBzdGFyISIgOiAiIn08L3NwYW4+YDsKICAgIH0KICAgIHNob3dUYXNrKCk7CiAgfSBlbHNlIHsKICAgIHN0LmkrKzsKICAgIG5wY1R1cm4oZmFsc2UpOwogIH0KfQpmdW5jdGlvbiB0a0dyYWRlKG9rKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrU2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICBjb25zdCBzdCA9IHRhbGtTdGF0ZSgpOwogIGNvbnN0IHR1cm4gPSB0YWxrKCkudHVybnNbc3QuaV07CiAgaWYgKG9rKSB7CiAgICBzdC5sb2cucHVzaCh7IHdobzogIm1lIiwga3I6IHR1cm4uYSwgc2NvcmU6ICLwn46ZIHNlbGYtY2hlY2tlZCDinJMiIH0pOwogICAgcmVidWlsZENoYXQoKTsKICAgIGdhaW5YcChzdC5oaW50VXNlZCA/IDQgOiA4KTsKICAgIGZsb2F0RngoIisiICsgKHN0LmhpbnRVc2VkID8gNCA6IDgpICsgIiBYUCIsICIjMkY3RDRGIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPSAiIjsKICAgIHNldFRpbWVvdXQodGtOZXh0LCA2MDApOwogIH0gZWxzZSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtSZXN1bHQiKS5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5MaXN0ZW4g8J+QoiB3aXRoIHRoZSBoaW50LCB0aGVuIHRyeSBvbmNlIG1vcmUhPC9zcGFuPmA7CiAgICB0a0hpbnQoKTsKICB9Cn0KYXN5bmMgZnVuY3Rpb24gdGtNaWNUYXAoKSB7CiAgY29uc3Qgc3QgPSB0YWxrU3RhdGUoKTsKICBpZiAoc3QuZG9uZSkgcmV0dXJuOwogIGNvbnN0IHR1cm4gPSB0YWxrKCkudHVybnNbc3QuaV07CiAgY29uc3QgcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrUmVzdWx0Iik7CiAgY29uc3QgbWljID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrTWljIik7CiAgaWYgKFNSICYmICFzckJsb2NrZWQpIHsKICAgIGlmIChyZWNvZ25pemluZyAmJiBhY3RpdmVSZWMpIHsgZm9yY2VFbmRMaXN0ZW4oYWN0aXZlUmVjKTsgcmV0dXJuOyB9IC8vIHRhcCDij7kgPSBkb25lIHNwZWFraW5nCiAgICBpZiAocmVjb2duaXppbmcpIHJldHVybjsKICAgIGlmICh0YWxrQ29hY2godGtNaWNUYXApKSByZXR1cm47CiAgICBpZiAoIShTUiAmJiBTUi5uYXRpdmUpICYmICEoYXdhaXQgZW5zdXJlTWljKCkpKSB7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtTZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gImZsZXgiOwogICAgICB0a0hpbnQoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmVjb2duaXppbmcgPSB0cnVlOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrU2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGNvbnN0IHJlYyA9IG5ldyBTUigpOwogICAgYWN0aXZlUmVjID0gcmVjOwogICAgcmVjLmxhbmcgPSAia28tS1IiOyByZWMubWF4QWx0ZXJuYXRpdmVzID0gNTsKICAgIG1pYy50ZXh0Q29udGVudCA9ICLij7MiOwogICAgcmVzLnRleHRDb250ZW50ID0gIuKPsyBPcGVuaW5nIHRoZSBtaWPigKYiOwogICAgcmVjLmhpbnRzID0gW3R1cm4uYV0uY29uY2F0KHR1cm4uYWx0IHx8IFtdKTsgICAvLyB0aGUgYW5zd2VyIHdlIGV4cGVjdCAtLSB0aGUgcmVjb2duaXplciBsZWFucyB0b3dhcmQgaXQKICAgIHJlYy5vbmVycm9yID0gZXYgPT4gewogICAgICByZWMuZXJyQ29kZSA9IGV2LmVycm9yOwogICAgICAvLyBtaWMgaXRzZWxmIGlzIGZpbmUgKHByZWZsaWdodCBwYXNzZWQpIGJ1dCB0aGUgcmVjb2duaXRpb24gc2VydmljZSBpcyBibG9ja2VkCiAgICAgIC8vIGluIHRoaXMgYnJvd3NlciDihpIgcGVybWFuZW50bHkgc3dpdGNoIHRvIHJlY29yZCAmIHNlbGYtY2hlY2sgbW9kZQogICAgICBpZiAoZXYuZXJyb3IgPT09ICJub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJzZXJ2aWNlLW5vdC1hbGxvd2VkIiB8fCBldi5lcnJvciA9PT0gIm5ldHdvcmsiKSBzckJsb2NrZWQgPSB0cnVlOwogICAgfTsKICAgIHN0YXJ0TGlzdGVuaW5nKHJlYywgewogICAgICBpZGxlTXM6IDIyMDAsIGNhcE1zOiAzMDAwMCwKICAgICAgb25SZWFkeTogKCkgPT4geyBtaWMuY2xhc3NMaXN0LmFkZCgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLij7kiOyByZXMudGV4dENvbnRlbnQgPSAi8J+UtCBTcGVhayB5b3VyIGFuc3dlciDigJQgaXQgY2hlY2tzIHdoZW4geW91IHBhdXNlLiI7IG1pY1NoZWV0U2hvdyh7IHRhcmdldDogdHVybi50YXNrLCBzbWFsbDogdHJ1ZSwgaGludDogIlNheSB5b3VyIGFuc3dlciBvdXQgbG91ZCIgfSk7IHRyeSB7IGJlZXAoOTkwLCAuMDcpOyB9IGNhdGNoIChlKSB7fSB9LAogICAgICBvbkxpdmU6IHQgPT4geyBtaWNTaGVldExpdmUodCk7IGlmICh0KSByZXMudGV4dENvbnRlbnQgPSAi8J+OpyDigJzigKYiICsgdC5zbGljZSgtNTApICsgIuKAnSI7IH0sCiAgICAgIG9uRmluaXNoOiAodGV4dCwgYWx0cykgPT4gewogICAgICAgIHJlY29nbml6aW5nID0gZmFsc2U7IGlmIChhY3RpdmVSZWMgPT09IHJlYykgYWN0aXZlUmVjID0gbnVsbDsKICAgICAgICBtaWMuY2xhc3NMaXN0LnJlbW92ZSgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLwn46kIjsKICAgICAgICBpZiAoIXRleHQpIHsKICAgICAgICAgIGlmIChzckJsb2NrZWQpIHsKICAgICAgICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPlZvaWNlIHJlY29nbml0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBicm93c2VyIOKAlCBzd2l0Y2hpbmcgdG8g8J+OmSByZWNvcmQgJmFtcDsgc2VsZi1jaGVjayBtb2RlLiBUYXAgdGhlIG1pYyBhZ2FpbiE8L3NwYW4+YDsKICAgICAgICAgIH0gZWxzZSBpZiAoIXJlYy5lcnJDb2RlIHx8IHJlYy5lcnJDb2RlID09PSAibm8tc3BlZWNoIiB8fCByZWMuZXJyQ29kZSA9PT0gImFib3J0ZWQiKSB7CiAgICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5JIGRpZCBub3QgaGVhciBhbnl0aGluZyDigJQgdGFwIHRoZSBtaWMgYW5kIHRyeSBhZ2Fpbi48L3NwYW4+YDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5TcGVlY2ggY2hlY2sgZmFpbGVkICgke3JlYy5lcnJDb2RlfSkuIFVzZSDwn5KhIGhpbnQsIHNheSBpdCBhbG91ZCwgdGhlbiBncmFkZSB5b3Vyc2VsZjo8L3NwYW4+YDsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrU2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgICAgICAgdGtIaW50KCk7CiAgICAgICAgICB9CiAgICAgICAgICBtaWNTaGVldFJlc3VsdCh7IG9rOiBmYWxzZSwgcGN0OiAwLCB0aXRsZTogIkkgZGlkIG5vdCBjYXRjaCB0aGF0Iiwgc3ViOiAiU2F5IHlvdXIgYW5zd2VyIGEgbGl0dGxlIGxvdWRlciwgY2xvc2VyIHRvIHRoZSBwaG9uZS4g8J+SoSBIaW50IHNob3dzIHRoZSBzZW50ZW5jZS4iLCByZXRyeTogKCkgPT4gdGtNaWNUYXAoKSwgYnV0dG9uczogW3sgbGFiZWw6ICLwn5KhIEhpbnQiLCBmbjogKCkgPT4gdGtIaW50KCkgfV0gfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRhcmdldHMgPSBbdHVybi5hLCAuLi4odHVybi5hbHQgfHwgW10pXTsKICAgICAgICBsZXQgYmVzdCA9IHsgcGN0OiAtMSwgaGVhcmQ6ICIiLCB0YXJnZXQ6IHR1cm4uYSwgZGlmZkh0bWw6ICIiLCBmaXhlc0h0bWw6ICIiIH07CiAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKHQgPT4gewogICAgICAgICAgYWx0cy5mb3JFYWNoKGEgPT4gewogICAgICAgICAgICBjb25zdCBmYiA9IHByb25GZWVkYmFjayh0LCBhKTsKICAgICAgICAgICAgaWYgKGZiLnBjdCA+IGJlc3QucGN0KSBiZXN0ID0geyAuLi5mYiwgaGVhcmQ6IGEudHJpbSgpLCB0YXJnZXQ6IHQgfTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIG1pY1NoZWV0UmVzdWx0KHsgb2s6IGJlc3QucGN0ID49IDYwLCBwY3Q6IGJlc3QucGN0LCBoZWFyZDogYmVzdC5oZWFyZCwgdGl0bGU6IGJlc3QucGN0ID49IDYwID8gYCR7YmVzdC5wY3R9JSDigJQgZ290IGl0YCA6IGAke2Jlc3QucGN0fSUg4oCUIG5vdCBxdWl0ZWAsCiAgICAgICAgICBzdWI6IGJlc3QucGN0ID49IDYwID8gIllvdXIgcGFydG5lciBoZWFyZCB5b3UuIiA6ICJDb21wYXJlIHdpdGggdGhlIHNlbnRlbmNlIGJlbG93IHRoZSBjaGF0LCB0aGVuIHRyeSBvbmNlIG1vcmUuIiwgcmV0cnk6ICgpID0+IHRrTWljVGFwKCksIGJ1dHRvbnM6IGJlc3QucGN0ID49IDYwID8gW10gOiBbeyBsYWJlbDogIvCfkqEgSGludCIsIGZuOiAoKSA9PiB0a0hpbnQoKSB9XSB9KTsKICAgICAgICBjb25zdCBkaWZmQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrRGlmZiIpOwogICAgICAgIGNvbnN0IGZpeEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a0ZpeGVzIik7CiAgICAgICAgaWYgKGJlc3QucGN0ID49IDYwKSB7CiAgICAgICAgICBzdC5sb2cucHVzaCh7IHdobzogIm1lIiwga3I6IGJlc3QuaGVhcmQsIHNjb3JlOiBg4pyTICR7YmVzdC5wY3R9JSBtYXRjaGAgfSk7CiAgICAgICAgICByZWJ1aWxkQ2hhdCgpOwogICAgICAgICAgc2Z4Lmdvb2QoKTsKICAgICAgICAgIGRhaWx5QnVtcCgicHJvbiIpOwogICAgICAgICAgZ2FpblhwKHN0LmhpbnRVc2VkID8gNCA6IDgpOwogICAgICAgICAgZmxvYXRGeCgiKyIgKyAoc3QuaGludFVzZWQgPyA0IDogOCkgKyAiIFhQIiwgIiMyRjdENEYiKTsKICAgICAgICAgIGlmIChiZXN0LnBjdCA+PSA5MCkgewogICAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4ke2Jlc3QucGN0fSUg4oCUIHBlcmZlY3QgcmVwbHkhPC9zcGFuPmA7CiAgICAgICAgICAgIGRpZmZCb3guaW5uZXJIVE1MID0gIiI7IGZpeEJveC5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBg4pyFIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1ncmVlbikiPiR7YmVzdC5wY3R9JSDigJQgdW5kZXJzdG9vZCEgUG9saXNoIGZvciBuZXh0IHRpbWU6PC9zcGFuPmA7CiAgICAgICAgICAgIGRpZmZCb3guaW5uZXJIVE1MID0gYmVzdC5kaWZmSHRtbDsKICAgICAgICAgICAgZml4Qm94LmlubmVySFRNTCA9IGJlc3QuZml4ZXNIdG1sOwogICAgICAgICAgfQogICAgICAgICAgc2V0VGltZW91dCh0a05leHQsIGJlc3QucGN0ID49IDkwID8gOTAwIDogMjYwMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNmeC5iYWQoKTsKICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBg8J+ZiSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ29sZCkiPiR7YmVzdC5wY3R9JSDigJQgbm90IHF1aXRlLiBIZXJlIGlzIHdoYXQgdG8gZml4LCB0aGVuIHRhcCDwn46kIGFuZCB0cnkgYWdhaW46PC9zcGFuPjxkaXYgY2xhc3M9ImhlYXJkIj5IZWFyZDog4oCcJHtiZXN0LmhlYXJkfeKAnTwvZGl2PmA7CiAgICAgICAgICBkaWZmQm94LmlubmVySFRNTCA9IGJlc3QuZGlmZkh0bWw7CiAgICAgICAgICBmaXhCb3guaW5uZXJIVE1MID0gYmVzdC5maXhlc0h0bWw7CiAgICAgICAgICB0a0hpbnQoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0gZWxzZSB7CiAgICAvLyBObyByZWNvZ25pdGlvbiBzZXJ2aWNlIChvbGRlciBpUGhvbmVzLCBhcHAgcHJldmlld3MpOiByZWNvcmQgd2l0aCBhdXRvLXN0b3AsCiAgICAvLyB0aGVuIGNvbXBhcmUgeW91ciB2b2ljZSB0byB0aGUgaGludCBhbmQgc2VsZi1ncmFkZS4KICAgIGlmIChyZWNvcmRpbmcpIHsgLy8gbWFudWFsIHN0b3Agc3RpbGwgcG9zc2libGUKICAgICAgcmVjb3JkaW5nID0gZmFsc2U7IHN0b3BSZWNvcmRpbmcoKTsKICAgICAgbWljLmNsYXNzTGlzdC5yZW1vdmUoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG9rID0gYXdhaXQgc3RhcnRSZWNvcmRpbmcodHJ1ZSwgKCkgPT4gewogICAgICByZWNvcmRpbmcgPSBmYWxzZTsKICAgICAgbWljLmNsYXNzTGlzdC5yZW1vdmUoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBgPGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBvbmNsaWNrPSJwbGF5TXlSZWMoKSIgc3R5bGU9Im1hcmdpbjowIDZweCAwIDA7Ij7ilrbvuI8gTXkgYW5zd2VyPC9idXR0b24+PHNwYW4gY2xhc3M9ImhlYXJkIj5Db21wYXJlIHdpdGggdGhlIPCfkqEgaGludCwgdGhlbiBncmFkZSB5b3Vyc2VsZjo8L3NwYW4+YDsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRrU2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgdGtIaW50KCk7CiAgICB9KTsKICAgIGlmICghb2spIHsKICAgICAgcmVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0a1NlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICAgIHRrSGludCgpOwogICAgICByZXR1cm47CiAgICB9CiAgICByZWNvcmRpbmcgPSB0cnVlOyBtaWMuY2xhc3NMaXN0LmFkZCgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLij7kiOwogICAgcmVzLnRleHRDb250ZW50ID0gIvCflLQgUmVjb3JkaW5n4oCmIHNwZWFrIHlvdXIgYW5zd2VyLCB0aGVuIHBhdXNlIOKAlCBpdCBzdG9wcyBieSBpdHNlbGYuIjsKICB9Cn0KZnVuY3Rpb24gdG9nZ2xlRWFyKCkgewogIGVhck1vZGUgPSAhZWFyTW9kZTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGtFYXIiKS50ZXh0Q29udGVudCA9IGVhck1vZGUgPyAi8J+RgCBTaG93IHRleHQiIDogIvCfjqcgTGlzdGVuaW5nIG1vZGUiOwogIHJlYnVpbGRDaGF0KCk7Cn0KZnVuY3Rpb24gdGtSZXN0YXJ0KCkgewogIGlmIChjdXIubiA9PT0gIlIiKSB7IG9wZW5SZXZpZXcoKTsgcmV0dXJuOyB9IC8vIGZyZXNoIHJhbmRvbSBtaXgKICBkZWxldGUgVEtbY3VyLm5dOwogIHJlbmRlclRhbGsoKTsKfQoKLyogLS0tIFByb251bmNpYXRpb24gY29hY2ggLS0tICovCi8vIEtRU1I6IG5hdGl2ZS1hcHAgc2hpbSBzbG90IOKAlCB0aGUgaU9TIGFwcCBpbmplY3RzIGEgcmVjb2duaXplciB3aXRoIHRoZSBzYW1lIGludGVyZmFjZQpjb25zdCBTUiA9IHdpbmRvdy5LUVNSIHx8IHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fCB3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb247CmxldCByZWNvZ25pemluZyA9IGZhbHNlLCBtZWRpYVJlYyA9IG51bGwsIHJlY0NodW5rcyA9IFtdLCBteVJlY1VybCA9IG51bGwsIHJlY29yZGluZyA9IGZhbHNlOwpsZXQgbWljUGVybSA9IG51bGwsIHNyQmxvY2tlZCA9IGZhbHNlLCB2YWRDYW5jZWwgPSBudWxsLCBhY3RpdmVSZWMgPSBudWxsOwoKLyogUmVsZWFzZSB0aGUgbWljcm9waG9uZSBDT01QTEVURUxZIOKAlCBjYWxsZWQgd2hlbiBsZWF2aW5nIHRoZSBwYWdlL3NjcmVlbiBzbyB0aGUKICAgT1MgbWljIGluZGljYXRvciBuZXZlciBsaW5nZXJzIGFmdGVyIHRoZSBicm93c2VyIGlzIGNsb3NlZCBvciBiYWNrZ3JvdW5kZWQuICovCmxldCBtaWNTdHJlYW0gPSBudWxsLCBsaXN0ZW5UaW1lb3V0ID0gbnVsbDsKZnVuY3Rpb24ga2lsbE1pY1N0cmVhbSgpIHsKICB0cnkgeyBpZiAobWljU3RyZWFtKSBtaWNTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0ID0+IHQuc3RvcCgpKTsgfSBjYXRjaCAoZSkge30KICBtaWNTdHJlYW0gPSBudWxsOwp9CmZ1bmN0aW9uIGFybUxpc3RlbihyZWMsIG1zID0gMTUwMDApIHsKICBjbGVhclRpbWVvdXQobGlzdGVuVGltZW91dCk7CiAgLy8gaGFyZCBjYXA6IG5ldmVyIGhvbGQgdGhlIG1pYyBsb25nZXIgdGhhbiB0aGlzIHdpdGhvdXQgZmluaXNoaW5nIChpT1MgcmFyZWx5IGF1dG8tZW5kcykKICBsaXN0ZW5UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7IGlmIChhY3RpdmVSZWMgPT09IHJlYykgZm9yY2VFbmRMaXN0ZW4ocmVjKTsgfSwgbXMpOwp9Ci8qIGlPUyBXZWJLaXQgc29tZXRpbWVzIGlnbm9yZXMgc3RvcCgpIGFuZCBuZXZlciBmaXJlcyBvbmVuZCDigJQgZXNjYWxhdGU6CiAgIHN0b3Ag4oaSIGFib3J0ICgwLjhzKSDihpIgZm9yY2UgdGhlIGZpbmlzaCBoYW5kbGVyIG91cnNlbHZlcyAoMS42cykgc28gdGhlCiAgIOKPuSBidXR0b24gQUxXQVlTIHJlc29sdmVzIGludG8gYSByZXN1bHQgb3IgYSBjbGVhciAiZGlkIG5vdCBoZWFyIiBtZXNzYWdlLiAqLwpmdW5jdGlvbiBmb3JjZUVuZExpc3RlbihyZWMpIHsKICBtaWNDaGVja2luZ1VJKCk7CiAgdHJ5IHsgcmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30KICAvLyB0aGUgbmF0aXZlIGlPUyByZWNvZ25pemVyIChLUVNSKSByZXR1cm5zIGl0cyBmaW5hbCB0cmFuc2NyaXB0IG9ubHkgd2hlbiBzdG9wKCkKICAvLyByZXNvbHZlcywgd2hpY2ggY2FuIHRha2UgMS0zIHMgZm9yIHNob3J0IGF1ZGlvIC0tIGdpdmUgaXQgcm9vbSBiZWZvcmUgZXNjYWxhdGluZywKICAvLyBvdGhlcndpc2UgdGhlIGxlYXJuZXIncyB3b3JkcyBhcmUgdGhyb3duIGF3YXkgcmlnaHQgYWZ0ZXIgdGhleSB0YXBwZWQgc3RvcAogIGNvbnN0IG5hdGl2ZSA9ICEhKFNSICYmIFNSLm5hdGl2ZSk7CiAgc2V0VGltZW91dCgoKSA9PiB7IGlmIChhY3RpdmVSZWMgPT09IHJlYykgeyB0cnkgeyByZWMuYWJvcnQoKTsgfSBjYXRjaCAoZSkge30gfSB9LCBuYXRpdmUgPyAzMjAwIDogODAwKTsKICBzZXRUaW1lb3V0KCgpID0+IHsgaWYgKGFjdGl2ZVJlYyA9PT0gcmVjICYmIHJlYy5vbmVuZCkgeyB0cnkgeyByZWMub25lbmQoKTsgfSBjYXRjaCAoZSkge30gfSB9LCBuYXRpdmUgPyA0NTAwIDogMTYwMCk7Cn0KLyogdGhlIG1vbWVudCBzdG9wIGlzIHRhcHBlZCwgZXZlcnkgbWljIGNvbnRyb2wgc2F5cyBzbyAtLSBzaWxlbmNlIGFmdGVyIGEgdGFwIHJlYWRzIGFzICJicm9rZW4iICovCmZ1bmN0aW9uIG1pY0NoZWNraW5nVUkoKSB7CiAgdHJ5IHsgbWljU2hlZXRDaGVja2luZygpOyB9IGNhdGNoIChlKSB7fQogIGNvbnN0IHdtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndNaWMiKTsKICBpZiAod20gJiYgd20uY2xhc3NMaXN0LmNvbnRhaW5zKCJzdG9wbW9kZSIpKSB7IHdtLnRleHRDb250ZW50ID0gIuKPsyBDaGVja2luZ+KApiI7IHdtLmNsYXNzTGlzdC5yZW1vdmUoInN0b3Btb2RlIik7IHdtLmNsYXNzTGlzdC5hZGQoImNoZWNraW5nIik7IH0KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWljLmxpc3RlbmluZyIpLmZvckVhY2gobSA9PiB7IG0udGV4dENvbnRlbnQgPSAi4o+zIjsgfSk7CiAgY29uc3QgciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3UHJvblJlcyIpOwogIGlmIChyICYmIHIuY2xhc3NMaXN0LmNvbnRhaW5zKCJtaWNDb2FjaCIpKSByLmlubmVySFRNTCA9ICLij7MgQ2hlY2tpbmcgeW91ciBwcm9udW5jaWF0aW9u4oCmPHNtYWxsPm9uZSBzZWNvbmQ8L3NtYWxsPiI7Cn0KLyogQ29udGludW91cyBsaXN0ZW5pbmcgc2Vzc2lvbjogY29sbGVjdHMgRVZFUlkgc2VudGVuY2UgKGZpbmFsIHNlZ21lbnRzICsgdGhlCiAgIHRyYWlsaW5nIG5vdC15ZXQtZmluYWwgdGV4dCkgdW50aWwgdGhlIHNwZWFrZXIgcGF1c2VzIGZvciBpZGxlTXMsIHRhcHMg4o+5LAogICBvciBjYXBNcyBwYXNzZXMuIEZpeGVzIG9uZS1zaG90IHJlY29nbml0aW9uIG9ubHkga2VlcGluZyB0aGUgZmlyc3Qgc2VudGVuY2UuICovCi8qIC0tLS0gdGhlIG1pY3JvcGhvbmUgbGV2ZWwgbWV0ZXI6IG9uZSBzbGltIGJhciwgc2hvd24gbmV4dCB0byB3aGljaGV2ZXIgbWljIGlzIGxpdmUgLS0tLSAqLwovKiAtLS0tIHRoZSBsaXN0ZW5pbmcgc2hlZXQ6IHRoZSB3b3JkLCB3aGF0IHRoZSBtaWMgaGVhcnMsIHRoZW4gdGhlIHZlcmRpY3QgLS0gYWxsIGluIG9uZSBwbGFjZSwgbm8gdGFwIC0tLS0gKi8KbGV0IG1pY1NoZWV0VGltZXIgPSAwOwpmdW5jdGlvbiBtaWNTaGVldFNob3cobykgewogIG1pY1NoZWV0SGlkZSgpOwogIGNvbnN0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICBzLmlkID0gImtxTWljU2hlZXQiOwogIHMuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImtxbXMiPgogICAgPGRpdiBjbGFzcz0ia3Ftcy10YWciIGlkPSJrcU1zVGFnIj7wn5S0IExpc3RlbmluZzwvZGl2PgogICAgPGRpdiBjbGFzcz0ia3Ftcy10YXJnZXQke28uc21hbGwgPyAiIHNtYWxsIiA6ICIifSIgaWQ9ImtxTXNUYXJnZXQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ia3Ftcy1oaW50IiBpZD0ia3FNc0hpbnQiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ibWljTWV0ZXIiIGlkPSJrcU1pY01ldGVyIj48aT48L2k+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJrcW1zLWhlYXJkIiBpZD0ia3FNc0hlYXJkIj7igKY8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImtxbXMtZm9vdCIgaWQ9ImtxTXNGb290Ij48c3Bhbj5JdCBzdG9wcyBieSBpdHNlbGYgd2hlbiB5b3UgcGF1c2U8L3NwYW4+PGJ1dHRvbiBjbGFzcz0ia3Ftcy1zdG9wIiBpZD0ia3FNc1N0b3AiPlN0b3Agbm93PC9idXR0b24+PC9kaXY+CiAgPC9kaXY+YDsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOwogIHMucXVlcnlTZWxlY3RvcigiI2txTXNUYXJnZXQiKS50ZXh0Q29udGVudCA9IG8udGFyZ2V0IHx8ICIiOwogIHMucXVlcnlTZWxlY3RvcigiI2txTXNIaW50IikudGV4dENvbnRlbnQgPSBvLmhpbnQgfHwgIiI7CiAgY29uc3Qgc3RvcCA9ICgpID0+IHsgdHJ5IHsgaWYgKGFjdGl2ZVJlYykgZm9yY2VFbmRMaXN0ZW4oYWN0aXZlUmVjKTsgfSBjYXRjaCAoZSkge30gfTsKICBzLnF1ZXJ5U2VsZWN0b3IoIiNrcU1zU3RvcCIpLm9uY2xpY2sgPSBzdG9wOwogIHMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBlID0+IHsgaWYgKGUudGFyZ2V0ID09PSBzKSBzdG9wKCk7IH0pOyAgIC8vIHRhcHBpbmcgb3V0c2lkZSA9IHN0b3Agbm93CiAgcmV0dXJuIHM7Cn0KZnVuY3Rpb24gbWljU2hlZXRMaXZlKHQpIHsKICBjb25zdCBoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxTXNIZWFyZCIpOyBpZiAoIWgpIHJldHVybjsKICBpZiAoIXQpIHJldHVybjsKICBoLnRleHRDb250ZW50ID0gdC5zbGljZSgtNjApOyBoLmNsYXNzTGlzdC5hZGQoIm9uIik7CiAgY29uc3QgdGFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxTXNUYWciKTsgaWYgKHRhZykgdGFnLnRleHRDb250ZW50ID0gIvCfjqcgSGVhcmluZyB5b3UiOwp9CmZ1bmN0aW9uIG1pY1NoZWV0Q2hlY2tpbmcoKSB7CiAgY29uc3QgdGFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxTXNUYWciKTsgaWYgKHRhZykgdGFnLnRleHRDb250ZW50ID0gIuKPsyBDaGVja2luZyI7CiAgY29uc3QgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJrcU1zRm9vdCIpOyBpZiAoZikgZi5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Cn0KLyogciA9IHsgb2ssIHBjdCwgdGl0bGUsIHN1YiwgaGVhcmQsIGRpZmZIdG1sLCB0YXJnZXQsIHJldHJ5LCBidXR0b25zOlt7bGFiZWwsIGNscywgZm59XSB9ICovCmZ1bmN0aW9uIG1pY1NoZWV0UmVzdWx0KHIpIHsKICBjb25zdCBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxTWljU2hlZXQiKTsgaWYgKCFzKSByZXR1cm47CiAgY2xlYXJUaW1lb3V0KG1pY1NoZWV0VGltZXIpOwogIGNvbnN0IGVtID0gci5vayA/ICLinIUiIDogKHIucGN0ID49IDUwID8gIvCfn6EiIDogIvCfmYkiKTsKICBjb25zdCBib3ggPSBzLnF1ZXJ5U2VsZWN0b3IoIi5rcW1zIik7CiAgYm94LmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJrcW1zLXJlcy1lbW9qaSI+JHtlbX08L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImtxbXMtcmVzLXRpdGxlIiBpZD0ia3FNc1RpdGxlIj48L2Rpdj4KICAgICR7ci5oZWFyZCA/IGA8ZGl2IGNsYXNzPSJrcW1zLXJlcy1oZWFyZCIgaWQ9ImtxTXNSaCI+PC9kaXY+YCA6ICIifQogICAgJHtyLmRpZmZIdG1sID8gYDxkaXYgY2xhc3M9ImtxbXMtcmVzLWRpZmYiPiR7ci5kaWZmSHRtbH08L2Rpdj5gIDogIiJ9CiAgICA8ZGl2IGNsYXNzPSJrcW1zLXJlcy1zdWIiIGlkPSJrcU1zU3ViIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImtxbXMtYnRucyIgaWQ9ImtxTXNCdG5zIj48L2Rpdj5gOwogIGJveC5xdWVyeVNlbGVjdG9yKCIja3FNc1RpdGxlIikudGV4dENvbnRlbnQgPSByLnRpdGxlIHx8ICIiOwogIGJveC5xdWVyeVNlbGVjdG9yKCIja3FNc1RpdGxlIikuc3R5bGUuY29sb3IgPSByLm9rID8gInZhcigtLWdyZWVuKSIgOiAoci5wY3QgPj0gNTAgPyAidmFyKC0tZ29sZCkiIDogInZhcigtLXJlZCkiKTsKICBpZiAoci5oZWFyZCkgYm94LnF1ZXJ5U2VsZWN0b3IoIiNrcU1zUmgiKS50ZXh0Q29udGVudCA9ICLigJwiICsgci5oZWFyZCArICLigJ0iOwogIGJveC5xdWVyeVNlbGVjdG9yKCIja3FNc1N1YiIpLmlubmVySFRNTCA9IHIuc3ViIHx8ICIiOwogIGNvbnN0IGJ0ID0gYm94LnF1ZXJ5U2VsZWN0b3IoIiNrcU1zQnRucyIpOwogIGNvbnN0IGFkZCA9IChsYWJlbCwgZm4sIHByaW1hcnkpID0+IHsgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOyBiLmNsYXNzTmFtZSA9IHByaW1hcnkgPyAiYnRuIiA6ICJzbmRidG4iOyBiLnRleHRDb250ZW50ID0gbGFiZWw7IGIub25jbGljayA9ICgpID0+IHsgbWljU2hlZXRIaWRlKCk7IHRyeSB7IGZuICYmIGZuKCk7IH0gY2F0Y2ggKGUpIHt9IH07IGJ0LmFwcGVuZENoaWxkKGIpOyB9OwogIGlmIChyLm9rKSB7CiAgICBhZGQoIk5leHQg4oaSIiwgbnVsbCwgdHJ1ZSk7CiAgICBtaWNTaGVldFRpbWVyID0gc2V0VGltZW91dChtaWNTaGVldEhpZGUsIDIyMDApOyAgICAvLyBhIHBhc3MgY2xvc2VzIGJ5IGl0c2VsZjsgbm90aGluZyB0byBkZWNpZGUKICB9IGVsc2UgewogICAgKHIuYnV0dG9ucyB8fCBbXSkuZm9yRWFjaChiID0+IGFkZChiLmxhYmVsLCBiLmZuLCBiLnByaW1hcnkpKTsKICAgIGlmIChyLnJldHJ5KSBhZGQoIvCfjqQgVHJ5IGFnYWluIiwgci5yZXRyeSwgdHJ1ZSk7CiAgICBhZGQoIkNsb3NlIiwgbnVsbCwgZmFsc2UpOwogIH0KfQpmdW5jdGlvbiBtaWNTaGVldEhpZGUoKSB7IGNsZWFyVGltZW91dChtaWNTaGVldFRpbWVyKTsgY29uc3QgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJrcU1pY1NoZWV0Iik7IGlmIChzKSBzLnJlbW92ZSgpOyB9CmZ1bmN0aW9uIG1pY01ldGVyU2hvdyhhZnRlckVsKSB7CiAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNrcU1pY1NoZWV0ICNrcU1pY01ldGVyIikpIHJldHVybjsgICAvLyB0aGUgc2hlZXQgY2FycmllcyBpdHMgb3duIG1ldGVyCiAgbWljTWV0ZXJIaWRlKCk7CiAgaWYgKCFhZnRlckVsKSByZXR1cm47CiAgY29uc3QgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIG0uY2xhc3NOYW1lID0gIm1pY01ldGVyIjsgbS5pZCA9ICJrcU1pY01ldGVyIjsgbS5pbm5lckhUTUwgPSAiPGk+PC9pPiI7CiAgYWZ0ZXJFbC5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyZW5kIiwgbSk7Cn0KZnVuY3Rpb24gbWljTWV0ZXJTZXQodikgeyBjb25zdCBpID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2txTWljTWV0ZXIgaSIpOyBpZiAoaSkgaS5zdHlsZS53aWR0aCA9IE1hdGgucm91bmQoTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdikpICogMTAwKSArICIlIjsgfQpmdW5jdGlvbiBtaWNNZXRlckhpZGUoKSB7IGNvbnN0IG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgia3FNaWNNZXRlciIpOyBpZiAobSkgbS5yZW1vdmUoKTsgfQovKiB3ZWIgZmFsbGJhY2sgZm9yIHRoZSBtZXRlcjogcmVhZCB0aGUgbGV2ZWwgb2ZmIHRoZSByZWNvcmRpbmcgc3RyZWFtIHRoZSB3ZWIgYnVpbGQgYWxyZWFkeSBvcGVucyAqLwpmdW5jdGlvbiBsZXZlbE1ldGVyRnJvbShzdHJlYW0sIGNiKSB7CiAgbGV0IGN0eCA9IG51bGwsIHJhZiA9IDA7CiAgdHJ5IHsKICAgIGN0eCA9IG5ldyAod2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgY29uc3Qgc3JjID0gY3R4LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSksIGFuID0gY3R4LmNyZWF0ZUFuYWx5c2VyKCk7CiAgICBhbi5mZnRTaXplID0gNTEyOyBzcmMuY29ubmVjdChhbik7CiAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShhbi5mZnRTaXplKTsKICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7CiAgICAgIGFuLmdldEJ5dGVUaW1lRG9tYWluRGF0YShidWYpOwogICAgICBsZXQgcyA9IDA7IGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7IGNvbnN0IGQgPSAoYnVmW2ldIC0gMTI4KSAvIDEyODsgcyArPSBkICogZDsgfQogICAgICBjb25zdCBkYiA9IDIwICogTWF0aC5sb2cxMChNYXRoLm1heChNYXRoLnNxcnQocyAvIGJ1Zi5sZW5ndGgpLCAxZS00KSk7CiAgICAgIGNiKE1hdGgubWluKDEsIE1hdGgubWF4KDAsIChkYiArIDU1KSAvIDQ1KSkpOwogICAgICByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7CiAgICB9OwogICAgdGljaygpOwogIH0gY2F0Y2ggKGUpIHt9CiAgcmV0dXJuICgpID0+IHsgdHJ5IHsgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTsgfSBjYXRjaCAoZSkge30gdHJ5IHsgaWYgKGN0eCkgY3R4LmNsb3NlKCk7IH0gY2F0Y2ggKGUpIHt9IH07Cn0KZnVuY3Rpb24gc3RhcnRMaXN0ZW5pbmcocmVjLCB7IGlkbGVNcywgY2FwTXMsIG9uTGl2ZSwgb25GaW5pc2gsIG9uUmVhZHksIG9uTGV2ZWwgfSkgewogIHJlYy5jb250aW51b3VzID0gdHJ1ZTsKICByZWMuaW50ZXJpbVJlc3VsdHMgPSB0cnVlOwogIC8vIHRoZSBuYXRpdmUgcmVjb2duaXplciBzdG9wcyBvbiBpdHMgb3duIGFib3V0IGEgc2Vjb25kIGFmdGVyIHRoZSBsZWFybmVyIGdvZXMgcXVpZXQ7CiAgLy8gMCBtZWFucyAibmV2ZXIgb24gaXRzIG93biIgKHRoZSBsZWFybmVyIHRhcHMpLCBlLmcuIG9wZW4gY29udmVyc2F0aW9uCiAgcmVjLnNpbGVuY2VNcyA9IGlkbGVNcyA/IE1hdGgubWF4KDkwMCwgTWF0aC5taW4oMTQwMCwgaWRsZU1zIC0gNDAwKSkgOiAwOwogIGxldCBtZXRlclN0b3AgPSBudWxsOwogIHJlYy5vbmxldmVsID0gdiA9PiB7IG1pY01ldGVyU2V0KHYpOyBpZiAob25MZXZlbCkgb25MZXZlbCh2KTsgfTsKICBpZiAoIShTUiAmJiBTUi5uYXRpdmUpICYmIHR5cGVvZiBtaWNTdHJlYW0gIT09ICJ1bmRlZmluZWQiICYmIG1pY1N0cmVhbSkgbWV0ZXJTdG9wID0gbGV2ZWxNZXRlckZyb20obWljU3RyZWFtLCByZWMub25sZXZlbCk7CiAgbGV0IGZpbmFscyA9IFtdLCBpbnRlcmltID0gIiIsIHNlZ0FsdHMgPSBudWxsLCBzZWdDb3VudCA9IDA7CiAgbGV0IGxhc3RBY3Rpdml0eSA9IERhdGUubm93KCksIGdvdFNwZWVjaCA9IGZhbHNlLCBmaW5pc2hlZCA9IGZhbHNlOwogIHJlYy5vbnJlc3VsdCA9IGUgPT4gewogICAgaW50ZXJpbSA9ICIiOwogICAgZm9yIChsZXQgaSA9IGUucmVzdWx0SW5kZXg7IGkgPCBlLnJlc3VsdHMubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3Qgc2VnID0gZS5yZXN1bHRzW2ldOwogICAgICBpZiAoc2VnLmlzRmluYWwpIHsKICAgICAgICBmaW5hbHMucHVzaChzZWdbMF0udHJhbnNjcmlwdC50cmltKCkpOwogICAgICAgIHNlZ0NvdW50Kys7CiAgICAgICAgLy8ga2VlcCByZWNvZ25pemVyIGFsdGVybmF0aXZlcyBvbmx5IGluIHRoZSBzaW1wbGUgb25lLXNlbnRlbmNlIGNhc2UKICAgICAgICBzZWdBbHRzID0gc2VnQ291bnQgPT09IDEgPyBbLi4uc2VnXS5tYXAociA9PiByLnRyYW5zY3JpcHQpIDogbnVsbDsKICAgICAgfSBlbHNlIGludGVyaW0gKz0gc2VnWzBdLnRyYW5zY3JpcHQ7CiAgICB9CiAgICBnb3RTcGVlY2ggPSB0cnVlOyBsYXN0QWN0aXZpdHkgPSBEYXRlLm5vdygpOwogICAgaWYgKG9uTGl2ZSkgb25MaXZlKChmaW5hbHMuam9pbigiICIpICsgIiAiICsgaW50ZXJpbSkudHJpbSgpKTsKICB9OwogIGNvbnN0IGlkbGUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBpZiAoZmluaXNoZWQgfHwgYWN0aXZlUmVjICE9PSByZWMpIHsgY2xlYXJJbnRlcnZhbChpZGxlKTsgcmV0dXJuOyB9CiAgICAvLyBpZGxlTXMgb2YgMCBtZWFucyAibmV2ZXIgc3RvcCBvbiB5b3VyIG93biIgLS0gdGhlIGxlYXJuZXIgdGFwcyB0byBmaW5pc2gKICAgIGlmIChpZGxlTXMgJiYgZ290U3BlZWNoICYmIERhdGUubm93KCkgLSBsYXN0QWN0aXZpdHkgPiBpZGxlTXMpIHsgdHJ5IHsgcmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30gfQogIH0sIDMwMCk7CiAgcmVjLm9uZW5kID0gKCkgPT4gewogICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICBmaW5pc2hlZCA9IHRydWU7CiAgICBjbGVhckludGVydmFsKGlkbGUpOwogICAgaWYgKG1ldGVyU3RvcCkgeyB0cnkgeyBtZXRlclN0b3AoKTsgfSBjYXRjaCAoZSkge30gfQogICAgbWljTWV0ZXJIaWRlKCk7CiAgICBjb25zdCB0ZXh0ID0gKGZpbmFscy5qb2luKCIgIikgKyAiICIgKyBpbnRlcmltKS50cmltKCk7CiAgICBjb25zdCBhbHRzID0gKHNlZ0NvdW50ID09PSAxICYmICFpbnRlcmltLnRyaW0oKSAmJiBzZWdBbHRzKSA/IHNlZ0FsdHMgOiAodGV4dCA/IFt0ZXh0XSA6IFtdKTsKICAgIG9uRmluaXNoKHRleHQsIGFsdHMpOwogIH07CiAgLy8gInJlYWR5IiA9IHRoZSBtaWNyb3Bob25lIGlzIGFjdHVhbGx5IG9wZW4uIENhbGxlcnMgdHVybiB0aGVpciBVSSByZWQgSEVSRSwgbm90IG9uIHRoZSB0YXAsCiAgLy8gc28gbm9ib2R5IHN0YXJ0cyB0YWxraW5nIGludG8gYSBtaWMgdGhhdCBpcyBzdGlsbCBvcGVuaW5nIC0tIHRoZSBmaXJzdCBzeWxsYWJsZSB3YXMgYmVpbmcgbG9zdC4KICBjb25zdCBwcmV2U3RhcnQgPSByZWMub25zdGFydDsKICByZWMub25zdGFydCA9ICgpID0+IHsKICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuOwogICAgYXJtTGlzdGVuKHJlYywgY2FwTXMpOyAgICAgICAgICAgIC8vIHRoZSBsaXN0ZW5pbmcgYnVkZ2V0IHN0YXJ0cyB3aGVuIHRoZSBtaWMgaXMgb3Blbiwgbm90IGF0IHRoZSB0YXAKICAgIGlmIChwcmV2U3RhcnQpIHsgdHJ5IHsgcHJldlN0YXJ0KCk7IH0gY2F0Y2ggKGUpIHt9IH0KICAgIGlmIChvblJlYWR5KSB7IHRyeSB7IG9uUmVhZHkoKTsgfSBjYXRjaCAoZSkge30gfQogIH07CiAgLy8gYmVmb3JlIHRoZSBtaWMgaXMgb3BlbiBvbmx5IGEgbG9uZyBzYWZldHkgY2FwIHJ1bnM6IG9uIGZpcnN0IHVzZSB0aGUgdHdvIHBlcm1pc3Npb24KICAvLyBkaWFsb2dzIGNhbiB0YWtlIGxvbmdlciB0aGFuIHRoZSB3aG9sZSBsaXN0ZW5pbmcgYnVkZ2V0LCBhbmQgdXNlZCB0byBlbmQgdGhlIGF0dGVtcHQKICBhcm1MaXN0ZW4ocmVjLCBNYXRoLm1heChjYXBNcyB8fCAwLCA0NTAwMCkpOwogIHJlYy5zdGFydCgpOwp9CmZ1bmN0aW9uIGhhcmRTdG9wQXVkaW8oKSB7CiAgY2xlYXJUaW1lb3V0KGxpc3RlblRpbWVvdXQpOwogIHRyeSB7CiAgICBpZiAoYWN0aXZlUmVjKSB7CiAgICAgIGFjdGl2ZVJlYy5vbnJlc3VsdCA9IG51bGw7IGFjdGl2ZVJlYy5vbmVycm9yID0gbnVsbDsgYWN0aXZlUmVjLm9uZW5kID0gbnVsbDsKICAgICAgdHJ5IHsgYWN0aXZlUmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30KICAgICAgdHJ5IHsgYWN0aXZlUmVjLmFib3J0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgfSBjYXRjaCAoZSkge30KICBhY3RpdmVSZWMgPSBudWxsOyByZWNvZ25pemluZyA9IGZhbHNlOwogIHN0b3BSZWNvcmRpbmcoKTsgcmVjb3JkaW5nID0gZmFsc2U7CiAga2lsbE1pY1N0cmVhbSgpOwogIHRyeSB7IHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKTsgfSBjYXRjaCAoZSkge30KICB0cnkgeyBGLmF1dG8gPSBmYWxzZTsgfSBjYXRjaCAoZSkge30KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWljIikuZm9yRWFjaChtID0+IHsgbS5jbGFzc0xpc3QucmVtb3ZlKCJsaXN0ZW5pbmciKTsgbS50ZXh0Q29udGVudCA9ICLwn46kIjsgfSk7CiAgY29uc3Qgd20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid01pYyIpOyBpZiAod20pIHsgd20udGV4dENvbnRlbnQgPSAi8J+OpCBTYXkgaXQiOyB3bS5jbGFzc0xpc3QucmVtb3ZlKCJzdG9wbW9kZSIpOyB9CiAgdHJ5IHsgbWljU2hlZXRIaWRlKCk7IH0gY2F0Y2ggKGUpIHt9CiAgdHJ5IHsgbGVhcm5OYXZMb2NrKGZhbHNlKTsgfSBjYXRjaCAoZSkge30KICBjb25zdCBmYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmdEF1dG8iKTsgaWYgKGZhKSBmYS50ZXh0Q29udGVudCA9ICLwn5SBIEF1dG86IG9mZiI7Cn0KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsICgpID0+IHsgaWYgKGRvY3VtZW50LmhpZGRlbikgaGFyZFN0b3BBdWRpbygpOyB9KTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIiwgaGFyZFN0b3BBdWRpbyk7CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLCBoYXJkU3RvcEF1ZGlvKTsKCi8qIEFzayBmb3IgdGhlIG1pYyB0aHJvdWdoIGdldFVzZXJNZWRpYSBmaXJzdCDigJQgdGhpcyByZWxpYWJseSBzaG93cyB0aGUgYnJvd3NlcidzCiAgIHBlcm1pc3Npb24gcHJvbXB0LiBTcGVlY2hSZWNvZ25pdGlvbiBhbG9uZSBjYW4gZmFpbCB3aXRoICJub3QtYWxsb3dlZCIgd2l0aG91dCBhc2tpbmcuICovCmFzeW5jIGZ1bmN0aW9uIGVuc3VyZU1pYygpIHsKICBpZiAobWljUGVybSA9PT0gImdyYW50ZWQiKSByZXR1cm4gdHJ1ZTsKICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKSB7IG1pY1Blcm0gPSAiZGVuaWVkIjsgcmV0dXJuIGZhbHNlOyB9CiAgdHJ5IHsKICAgIGNvbnN0IHMgPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pOwogICAgcy5nZXRUcmFja3MoKS5mb3JFYWNoKHQgPT4gdC5zdG9wKCkpOwogICAgbWljUGVybSA9ICJncmFudGVkIjsgcmV0dXJuIHRydWU7CiAgfSBjYXRjaCAoZSkgeyBtaWNQZXJtID0gImRlbmllZCI7IHJldHVybiBmYWxzZTsgfQp9CmZ1bmN0aW9uIG1pY0hlbHBIdG1sKCkgewogIHJldHVybiBgPHNwYW4gY2xhc3M9ImhlYXJkIj7wn46Z77iPIFRoZSBtaWNyb3Bob25lIGlzIGJsb2NrZWQgaGVyZS48YnI+CiAg4oCiIENsaWNrIHRoZSDwn5SSIC8gbWljIGljb24gaW4gdGhlIGFkZHJlc3MgYmFyIOKGkiA8Yj5BbGxvdyBtaWNyb3Bob25lPC9iPiwgdGhlbiByZWxvYWQuPGJyPgogIOKAoiBWaWV3aW5nIHRoaXMgaW5zaWRlIGFuIGFwcCBwcmV2aWV3PyA8YSBocmVmPSIjIiBvbmNsaWNrPSJ3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLCdfYmxhbmsnKTtyZXR1cm4gZmFsc2UiIHN0eWxlPSJjb2xvcjp2YXIoLS1hY2NlbnQyKSI+T3BlbiBpbiB5b3VyIGJyb3dzZXI8L2E+IOKAlCB2b2ljZSB3b3JrcyBiZXN0IGluIENocm9tZS48L3NwYW4+YDsKfQovKiBWb2ljZS1hY3Rpdml0eSBkZXRlY3Rpb246IGF1dG8tc3RvcCByZWNvcmRpbmcgfjEuNHMgYWZ0ZXIgeW91IHN0b3Agc3BlYWtpbmcgKi8KZnVuY3Rpb24gYXR0YWNoVkFEKHN0cmVhbSwgb25TaWxlbmNlKSB7CiAgbGV0IGN0eDsKICB0cnkgeyBjdHggPSBuZXcgKHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkoKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQogIGNvbnN0IGFuID0gY3R4LmNyZWF0ZUFuYWx5c2VyKCk7IGFuLmZmdFNpemUgPSA1MTI7CiAgY3R4LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSkuY29ubmVjdChhbik7CiAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KGFuLmZyZXF1ZW5jeUJpbkNvdW50KTsKICBsZXQgc3Bva2UgPSBmYWxzZSwgcXVpZXRTaW5jZSA9IDAsIHN0b3BwZWQgPSBmYWxzZTsKICBmdW5jdGlvbiBsb29wKHRzKSB7CiAgICBpZiAoc3RvcHBlZCkgcmV0dXJuOwogICAgYW4uZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKGRhdGEpOwogICAgbGV0IHN1bSA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsgY29uc3QgdiA9IChkYXRhW2ldIC0gMTI4KSAvIDEyODsgc3VtICs9IHYgKiB2OyB9CiAgICBjb25zdCBybXMgPSBNYXRoLnNxcnQoc3VtIC8gZGF0YS5sZW5ndGgpOwogICAgaWYgKHJtcyA+IDAuMDQ1KSB7IHNwb2tlID0gdHJ1ZTsgcXVpZXRTaW5jZSA9IDA7IH0KICAgIGVsc2UgaWYgKHNwb2tlKSB7CiAgICAgIGlmICghcXVpZXRTaW5jZSkgcXVpZXRTaW5jZSA9IHRzOwogICAgICBlbHNlIGlmICh0cyAtIHF1aWV0U2luY2UgPiAxNDAwKSB7IHN0b3BwZWQgPSB0cnVlOyB0cnkgeyBjdHguY2xvc2UoKTsgfSBjYXRjaCAoZSkge30gb25TaWxlbmNlKCk7IHJldHVybjsgfQogICAgfQogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApOwogIH0KICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7CiAgcmV0dXJuICgpID0+IHsgc3RvcHBlZCA9IHRydWU7IHRyeSB7IGN0eC5jbG9zZSgpOyB9IGNhdGNoIChlKSB7fSB9Owp9Cgphc3luYyBmdW5jdGlvbiBzdGFydFJlY29yZGluZyhhdXRvU3RvcCA9IGZhbHNlLCBvbkF1dG9TdG9wID0gbnVsbCkgewogIGxldCBzdHJlYW07CiAgdHJ5IHsKICAgIHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7CiAgICBtaWNQZXJtID0gImdyYW50ZWQiOwogIH0gY2F0Y2ggKGUpIHsgbWljUGVybSA9ICJkZW5pZWQiOyByZXR1cm4gZmFsc2U7IH0KICBtaWNTdHJlYW0gPSBzdHJlYW07IC8vIGtlZXAgYSBoYW5kbGUgc28gaGFyZFN0b3BBdWRpbyBjYW4gZm9yY2UtcmVsZWFzZSB0aGUgbWljCiAgdHJ5IHsKICAgIG1lZGlhUmVjID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtKTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBlLmcuIGlPUyBTYWZhcmkgd2l0aG91dCBNZWRpYVJlY29yZGVyIOKAlCByZWxlYXNlIHRoZSBtaWMgd2UganVzdCBvcGVuZWQsIG5ldmVyIGxlYWsgaXQKICAgIGtpbGxNaWNTdHJlYW0oKTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmVjQ2h1bmtzID0gW107CiAgbWVkaWFSZWMub25kYXRhYXZhaWxhYmxlID0gZSA9PiB7IGlmIChlLmRhdGEuc2l6ZSkgcmVjQ2h1bmtzLnB1c2goZS5kYXRhKTsgfTsKICBtZWRpYVJlYy5vbnN0b3AgPSAoKSA9PiB7CiAgICB0cnkgewogICAgICBpZiAobXlSZWNVcmwpIFVSTC5yZXZva2VPYmplY3RVUkwobXlSZWNVcmwpOwogICAgICBteVJlY1VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IocmVjQ2h1bmtzLCB7IHR5cGU6IG1lZGlhUmVjLm1pbWVUeXBlIHx8ICJhdWRpby93ZWJtIiB9KSk7CiAgICAgIGNvbnN0IHBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa1BsYXliYWNrIik7IGlmIChwYikgcGIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICB9IGNhdGNoIChlKSB7fQogICAga2lsbE1pY1N0cmVhbSgpOwogICAgaWYgKHZhZENhbmNlbCkgeyB2YWRDYW5jZWwoKTsgdmFkQ2FuY2VsID0gbnVsbDsgfQogIH07CiAgbWVkaWFSZWMuc3RhcnQoKTsKICBpZiAoYXV0b1N0b3AgJiYgb25BdXRvU3RvcCkgdmFkQ2FuY2VsID0gYXR0YWNoVkFEKHN0cmVhbSwgKCkgPT4geyBzdG9wUmVjb3JkaW5nKCk7IHNldFRpbWVvdXQob25BdXRvU3RvcCwgMzUwKTsgfSk7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gc3RvcFJlY29yZGluZygpIHsKICB0cnkgeyBpZiAobWVkaWFSZWMgJiYgbWVkaWFSZWMuc3RhdGUgIT09ICJpbmFjdGl2ZSIpIG1lZGlhUmVjLnN0b3AoKTsgfSBjYXRjaCAoZSkge30KfQpmdW5jdGlvbiBwbGF5TXlSZWMoKSB7CiAgaWYgKCFteVJlY1VybCkgcmV0dXJuOwogIHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKTsKICBuZXcgQXVkaW8obXlSZWNVcmwpLnBsYXkoKTsKfQoKLyogLS0tIFdvcmQgcHJvbnVuY2lhdGlvbiBjaGVjayBvbiB0aGUgTGVhcm4gY2FyZDogc2F5IHRoZSB3b3JkLCBnZXQgYSB2ZXJkaWN0IC0tLSAqLwpmdW5jdGlvbiBsZWFybk5hdkxvY2sob24pIHsKICAvLyB3aGlsZSB0aGUgbWljIGlzIGxpdmUsIGZyZWV6ZSB0aGUgYmlnIG5hdiBidXR0b25zIHNvIGEgc3RyYXkgdGFwCiAgLy8gY2Fubm90IGhpdCAiTGVhcm5lZCEiIGluc3RlYWQgb2Ygc3RvcAogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5sZWFybi1uYXYgLmJ0biIpLmZvckVhY2goYiA9PiB7CiAgICBiLmRpc2FibGVkID0gb247CiAgICBiLnN0eWxlLm9wYWNpdHkgPSBvbiA/ICIuMzUiIDogIiI7CiAgICBiLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBvbiA/ICJub25lIiA6ICIiOwogIH0pOwp9Ci8qIEZpcnN0IG1pYyB1c2UgZXZlcjogYSBvbmUtdGltZSBjYXJkIHRoYXQgc2F5cyBob3cgaXQgd29ya3MsIGluIGJpZyB0eXBlLiBBIGZpcnN0LXRpbWUKICAgbGVhcm5lciB3aG8gdGFwcyDwn46kLCBzYXlzIHRoZSB3b3JkIG9uY2UsIGFuZCBzZWVzIG5vdGhpbmcgaGFwcGVuIGFzc3VtZXMgdGhlIGFwcCBpcwogICBicm9rZW4gLS0gdGhlIHRocmVlLXRpbWVzIHJ1bGUgYW5kIHRoZSBzdG9wIHRhcCBoYXZlIHRvIGJlIHNhaWQgQkVGT1JFIHRoZSBmaXJzdCB0cnkuICovCmZ1bmN0aW9uIGNvYWNoQ2FyZChrZXksIHRpdGxlLCBzdGVwcywgbm90ZSwgY3RhLCBvbkdvKSB7CiAgbGV0IHNlZW4gPSBmYWxzZTsgdHJ5IHsgc2VlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPT09ICIxIjsgfSBjYXRjaCAoZSkge30KICBpZiAoc2VlbikgcmV0dXJuIGZhbHNlOwogIGNvbnN0IG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJrcU1pY0NvYWNoV3JhcCIpOyBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CiAgY29uc3QgdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIHcuaWQgPSAia3FNaWNDb2FjaFdyYXAiOwogIHcuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9ImtxTWljQ29hY2giPgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjM0cHg7Ij7wn46kPC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJmb250LWZhbWlseTpHZW9yZ2lhLHNlcmlmO2ZvbnQtc2l6ZToyMXB4O2ZvbnQtd2VpZ2h0OjgwMDttYXJnaW4tdG9wOjZweDsiPiR7dGl0bGV9PC9kaXY+CiAgICA8b2w+JHtzdGVwcy5tYXAocyA9PiAiPGxpPiIgKyBzICsgIjwvbGk+Iikuam9pbigiIil9PC9vbD4KICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLW11dGVkKTtsaW5lLWhlaWdodDoxLjU7Ij4ke25vdGV9PC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJidG4iIGlkPSJrcU1pY0NvYWNoR28iIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbi10b3A6MTRweDtwYWRkaW5nOjE0cHg7Zm9udC1zaXplOjE2cHg7Ij4ke2N0YX08L2J1dHRvbj4KICA8L2Rpdj5gOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImtxTWljQ29hY2hHbyIpLm9uY2xpY2sgPSAoKSA9PiB7IHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgIjEiKTsgfSBjYXRjaCAoZSkge30gdy5yZW1vdmUoKTsgb25HbygpOyB9OwogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIG1pY0NvYWNoKG9uR28sIHNhbXBsZSkgewogIGNvbnN0IHMgPSBzYW1wbGUgfHwgIuKApiI7CiAgcmV0dXJuIGNvYWNoQ2FyZCgia3FNaWNDb2FjaGVkIiwgIkhvdyB0aGUgbWljIHdvcmtzIiwgWwogICAgIjxiPlRhcCDwn46kIFNheSBpdC48L2I+IEEgcGFuZWwgb3BlbnMgdGhlIG1vbWVudCB0aGUgbWljIGlzIHJlYWR5IOKAlCB5b3Ugd2lsbCBoZWFyIGEgYmVlcC4iLAogICAgYDxiPlNheSBpdCBvdXQgbG91ZC48L2I+IFNob3J0IHdvcmRzIGFyZSBoYXJkIGZvciBhbnkgbWljIOKAlCBzYXkgdGhlbSA8Yj50aHJlZSB0aW1lczwvYj46ICR7c30sICR7c30sICR7c30uYCwKICAgICI8Yj5QYXVzZSB3aGVuIHlvdSBhcmUgZG9uZS48L2I+IEl0IHN0b3BzIGJ5IGl0c2VsZiBhbmQgc2hvd3MgeW91IHRoZSByZXN1bHQuIE5vdGhpbmcgdG8gdGFwLiIKICBdLCAiWW91IHdpbGwgc2VlIHRoZSB3b3JkcyBhcHBlYXIgYXMgaXQgaGVhcnMgdGhlbS4gV3JvbmcgaXMgZmluZSDigJQgdGhhdCBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgdGhlIG1pYy4iLCAiR290IGl0IOKAlCBsZXQgbWUgdHJ5Iiwgb25Hbyk7Cn0KZnVuY3Rpb24gdGFsa0NvYWNoKG9uR28pIHsKICByZXR1cm4gY29hY2hDYXJkKCJrcVRhbGtDb2FjaGVkIiwgIkhvdyBUYWxrIHdvcmtzIiwgWwogICAgIjxiPlJlYWQgdGhlIGxpbmUgdW5kZXIgdGhlIGNoYXQ8L2I+IOKAlCBpdCB0ZWxscyB5b3Ugd2hhdCB0byBzYXkuIiwKICAgICI8Yj5UYXAgdGhlIHJvdW5kIPCfjqQ8L2I+IGFuZCBzYXkgeW91ciBhbnN3ZXIgb3V0IGxvdWQuIEEgcGFuZWwgc2hvd3Mgd2hhdCBpdCBoZWFyczsgaXQgY2hlY2tzIHdoZW4geW91IHBhdXNlLiIsCiAgICAiPGI+U3R1Y2s/PC9iPiDwn5KhIEhpbnQgc2hvd3MgdGhlIHNlbnRlbmNlLiDij60gU2tpcCBtb3ZlcyBvbi4gTm9ib2R5IGlzIGdyYWRpbmcgeW91IGJ1dCB5b3UuIgogIF0sICJBbnN3ZXJzIGRvIG5vdCBoYXZlIHRvIG1hdGNoIHdvcmQgZm9yIHdvcmQg4oCUIGNsb3NlIGNvdW50cywgYW5kIHdoZW4gaXQgZG9lcyBub3QsIHlvdSBhcmUgc2hvd24gd2hhdCB0byBmaXguIiwgIkdvdCBpdCDigJQgbGV0IG1lIHRhbGsiLCBvbkdvKTsKfQpsZXQgd1NlbnRNb2RlID0gZmFsc2U7ICAgLy8gc2V0IGJ5ICJzYXkgdGhlIHNlbnRlbmNlIGluc3RlYWQiIGZvciB0aGUgbmV4dCBhdHRlbXB0IG9ubHkKYXN5bmMgZnVuY3Rpb24gd29yZE1pY1RhcCgpIHsKICBjb25zdCB3ID0gY3VyLndvcmRzW2xlYXJuSWR4XTsKICBjb25zdCB0YXJnZXQgPSB3WzBdLnJlcGxhY2UoL1woLio/XCkvZywgIiIpLnRyaW0oKTsKICAvLyByZWNvZ25pemVycyBzdHJ1Z2dsZSB3aXRoIGlzb2xhdGVkIHNob3J0IHN5bGxhYmxlcyDigJQgYXNrIGZvciByZXBlYXRzIGFuZAogIC8vIGFsc28gYWNjZXB0IHRoZSBleGFtcGxlIHNlbnRlbmNlIGFzIGEgdmFsaWQgd2F5IHRvIHByb3ZlIHRoZSB3b3JkCiAgY29uc3Qgc2hvcnRXb3JkID0gY2xlYW5Lcih0YXJnZXQpLmxlbmd0aCA8PSAyOwogIGNvbnN0IHJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3UHJvblJlcyIpOwogIGNvbnN0IGRpZmYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid1Byb25EaWZmIik7CiAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndNaWMiKTsKICBjb25zdCBmaW5pc2hVSSA9ICgpID0+IHsgYnRuLnRleHRDb250ZW50ID0gIvCfjqQgU2F5IGl0IjsgYnRuLmNsYXNzTGlzdC5yZW1vdmUoInN0b3Btb2RlIiwgImNoZWNraW5nIik7IHJlcy5jbGFzc0xpc3QucmVtb3ZlKCJtaWNDb2FjaCIpOyBsZWFybk5hdkxvY2soZmFsc2UpOyB9OwogIGlmIChTUiAmJiAhc3JCbG9ja2VkKSB7CiAgICBpZiAocmVjb2duaXppbmcgJiYgYWN0aXZlUmVjKSB7IGZvcmNlRW5kTGlzdGVuKGFjdGl2ZVJlYyk7IHJldHVybjsgfQogICAgaWYgKG1pY0NvYWNoKHdvcmRNaWNUYXAsIHRhcmdldCkpIHJldHVybjsKICAgIGlmICghKFNSICYmIFNSLm5hdGl2ZSkgJiYgIShhd2FpdCBlbnN1cmVNaWMoKSkpIHsgcmVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7IHJldHVybjsgfQogICAgY29uc3Qgc2VudE1vZGUgPSB3U2VudE1vZGUgJiYgISF3WzVdOyB3U2VudE1vZGUgPSBmYWxzZTsKICAgIHJlY29nbml6aW5nID0gdHJ1ZTsKICAgIGJ0bi50ZXh0Q29udGVudCA9ICLij7MgT3BlbmluZyB0aGUgbWlj4oCmIjsKICAgIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJzdG9wbW9kZSIpOwogICAgbGVhcm5OYXZMb2NrKHRydWUpOwogICAgZGlmZi5pbm5lckhUTUwgPSAiIjsKICAgIHJlcy5jbGFzc0xpc3QuYWRkKCJtaWNDb2FjaCIpOwogICAgY29uc3Qgc3RvcEhpbnQgPSAoU1IgJiYgU1IubmF0aXZlKSA/ICJpdCBzdG9wcyBieSBpdHNlbGYgd2hlbiB5b3UgcGF1c2Ugwrcgb3IgdGFwIOKPuSIgOiAidGhlbiB0YXAg4o+5IjsKICAgIGNvbnN0IHByb21wdEh0bWwgPSBzZW50TW9kZQogICAgICA/IGDwn5S0IFNheSB0aGUgc2VudGVuY2U6PGJyPiR7d1s1XX08c21hbGw+JHtzdG9wSGludH08L3NtYWxsPmAKICAgICAgOiBzaG9ydFdvcmQKICAgICAgICA/IGDwn5S0IFNheSBpdCA8dT50aHJlZSB0aW1lczwvdT46PGJyPiR7dGFyZ2V0fSDCtyAke3RhcmdldH0gwrcgJHt0YXJnZXR9PHNtYWxsPiR7c3RvcEhpbnR9PC9zbWFsbD5gCiAgICAgICAgOiBg8J+UtCBTYXk6ICR7dGFyZ2V0fTxzbWFsbD4ke3N0b3BIaW50fTwvc21hbGw+YDsKICAgIHJlcy5pbm5lckhUTUwgPSBg4o+zIE9uZSBtb21lbnTigKY8c21hbGw+dGhlIG1pYyBpcyBvcGVuaW5nPC9zbWFsbD5gOwogICAgLy8gaW4gdGhlIGFwcCB0aGUgbmF0aXZlIHJlY29nbml6ZXIgb3ducyB0aGUgbWljcm9waG9uZTsgYSBzZWNvbmQgY2FwdHVyZSBmb3IgcGxheWJhY2sgY29tcGV0ZXMgd2l0aCBpdAogICAgaWYgKCEoU1IgJiYgU1IubmF0aXZlKSkgYXdhaXQgc3RhcnRSZWNvcmRpbmcoKTsgLy8ga2VlcCB5b3VyIHZvaWNlIGZvciDilrbvuI8gcGxheWJhY2sgKHdlYiBvbmx5KQogICAgY29uc3QgcmVjID0gbmV3IFNSKCk7CiAgICBhY3RpdmVSZWMgPSByZWM7CiAgICByZWMubGFuZyA9ICJrby1LUiI7IHJlYy5tYXhBbHRlcm5hdGl2ZXMgPSA1OwogICAgcmVjLmhpbnRzID0gc2VudE1vZGUgJiYgd1s1XSA/IFt3WzVdLCB0YXJnZXRdIDogKHdbNV0gPyBbdGFyZ2V0LCB3WzVdXSA6IFt0YXJnZXRdKTsgICAvLyB3aGF0IHRvIGxpc3RlbiBmb3IKICAgIHJlYy5vbmVycm9yID0gZXYgPT4gewogICAgICByZWMuZXJyQ29kZSA9IGV2LmVycm9yOwogICAgICBpZiAoZXYuZXJyb3IgPT09ICJub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJzZXJ2aWNlLW5vdC1hbGxvd2VkIiB8fCBldi5lcnJvciA9PT0gIm5ldHdvcmsiKSBzckJsb2NrZWQgPSB0cnVlOwogICAgfTsKICAgIHN0YXJ0TGlzdGVuaW5nKHJlYywgewogICAgICBpZGxlTXM6IDE1MDAsIGNhcE1zOiBzaG9ydFdvcmQgPyAxMDAwMCA6IDgwMDAsCiAgICAgIG9uUmVhZHk6ICgpID0+IHsKICAgICAgICBidG4udGV4dENvbnRlbnQgPSAi8J+UtCBMaXN0ZW5pbmfigKYiOyBidG4uY2xhc3NMaXN0LmFkZCgic3RvcG1vZGUiKTsgcmVzLmlubmVySFRNTCA9IHByb21wdEh0bWw7CiAgICAgICAgbWljU2hlZXRTaG93KHsgdGFyZ2V0OiBzZW50TW9kZSA/IHdbNV0gOiB0YXJnZXQsIHNtYWxsOiBzZW50TW9kZSwgaGludDogc2VudE1vZGUgPyAiU2F5IHRoZSB3aG9sZSBzZW50ZW5jZSBvdXQgbG91ZCIgOiBzaG9ydFdvcmQgPyBgU2hvcnQgd29yZCDigJQgc2F5IGl0IHRocmVlIHRpbWVzOiAke3RhcmdldH0gwrcgJHt0YXJnZXR9IMK3ICR7dGFyZ2V0fWAgOiAiU2F5IGl0IG91dCBsb3VkLCBhdCBub3JtYWwgc3BlZWQiIH0pOwogICAgICAgIHRyeSB7IGJlZXAoOTkwLCAuMDcpOyB9IGNhdGNoIChlKSB7fQogICAgICB9LAogICAgICBvbkxpdmU6IHQgPT4geyBtaWNTaGVldExpdmUodCk7IGlmICh0ICYmIHJlcy5jbGFzc0xpc3QuY29udGFpbnMoIm1pY0NvYWNoIikpIHJlcy5pbm5lckhUTUwgPSBg8J+OpyBJIGhlYXI6IOKAnCR7dC5zbGljZSgtNDApfeKAnTxzbWFsbD5wYXVzZSB3aGVuIHlvdSBmaW5pc2g8L3NtYWxsPmA7IH0sCiAgICAgIG9uRmluaXNoOiAodGV4dCwgYWx0cykgPT4gewogICAgICAgIHJlY29nbml6aW5nID0gZmFsc2U7IGlmIChhY3RpdmVSZWMgPT09IHJlYykgYWN0aXZlUmVjID0gbnVsbDsKICAgICAgICBmaW5pc2hVSSgpOyBzdG9wUmVjb3JkaW5nKCk7CiAgICAgICAgaWYgKCF0ZXh0KSB7CiAgICAgICAgICBjb25zdCB0cnlCdG4gPSBgPGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBvbmNsaWNrPSJ3b3JkTWljVGFwKCkiPvCfjqQgVHJ5IGFnYWluPC9idXR0b24+YDsKICAgICAgICAgIGNvbnN0IHNlbnRCdG4gPSB3WzVdID8gYDxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0id1NlbnRNb2RlPXRydWU7d29yZE1pY1RhcCgpIj7wn5ejIFNheSB0aGUgc2VudGVuY2UgaW5zdGVhZDwvYnV0dG9uPmAgOiAiIjsKICAgICAgICAgIC8vIHRoZSBuYXRpdmUgcmVjb2duaXplciBzYXlzIFdIWSBpdCBlbmRlZDsgYW4gaG9uZXN0IG1lc3NhZ2UgYmVhdHMgYSBnZW5lcmljIG9uZQogICAgICAgICAgY29uc3Qgd2h5ID0gKFNSICYmIFNSLm5hdGl2ZSAmJiB3aW5kb3cuS1FfTUlDX0xBU1QgJiYgRGF0ZS5ub3coKSAtIHdpbmRvdy5LUV9NSUNfTEFTVC5hdCA8IDgwMDApID8gd2luZG93LktRX01JQ19MQVNULnJlYXNvbiA6ICIiOwogICAgICAgICAgY29uc3Qgd2h5TGluZSA9IC9eZXJyb3IvLnRlc3Qod2h5KSA/IGA8ZGl2IGNsYXNzPSJoZWFyZCI+VGhlIHNwZWVjaCBzZXJ2aWNlIHJldHVybmVkIGFuIGVycm9yICgke3doeS5yZXBsYWNlKCJlcnJvcjoiLCAiY29kZSAiKX0pIOKAlCB1c3VhbGx5IGEgbW9tZW50IG9mZmxpbmUuIFRyeSBhZ2Fpbi48L2Rpdj5gCiAgICAgICAgICAgIDogL15zdGFydDovLnRlc3Qod2h5KSA/IGA8ZGl2IGNsYXNzPSJoZWFyZCI+VGhlIG1pY3JvcGhvbmUgY291bGQgbm90IHN0YXJ0OiAke3doeS5zbGljZSg2KS5yZXBsYWNlKC88L2csICImbHQ7Iil9LiBJZiB0aGlzIGtlZXBzIGhhcHBlbmluZywgY2hlY2sgdGhpcyBhcHAgaW4gU2V0dGluZ3M6IE1pY3JvcGhvbmUgYW5kIFNwZWVjaCBSZWNvZ25pdGlvbiBtdXN0IGJvdGggYmUgYWxsb3dlZC48L2Rpdj5gCiAgICAgICAgICAgIDogd2h5ID09PSAic2lsZW5jZSIgPyBgPGRpdiBjbGFzcz0iaGVhcmQiPkkgaGVhcmQgc291bmQgYnV0IG5vIHdvcmRzIOKAlCBhIGxpdHRsZSBsb3VkZXIsIGFuZCBjbG9zZXIgdG8gdGhlIHBob25lLjwvZGl2PmAgOiAiIjsKICAgICAgICAgIG1pY1NoZWV0UmVzdWx0KHsgb2s6IGZhbHNlLCBwY3Q6IDAsIHRpdGxlOiAiSSBkaWQgbm90IGNhdGNoIGl0IiwKICAgICAgICAgICAgc3ViOiBzckJsb2NrZWQgPyAiVm9pY2UgY2hlY2sgaXMgbm90IGF2YWlsYWJsZSBoZXJlLiIgOiB3aHlMaW5lID8gd2h5TGluZS5yZXBsYWNlKC88W14+XSs+L2csICIiKSA6IHNob3J0V29yZCA/ICJPbmUgc3lsbGFibGUgaXMgaGFyZCBmb3IgYW55IG1pYy4gU2F5IGl0IHRocmVlIHRpbWVzIGluIGEgcm93LCBvciBzYXkgdGhlIHdob2xlIHNlbnRlbmNlLiIgOiAiQSBsaXR0bGUgbG91ZGVyLCBhbmQgY2xvc2VyIHRvIHRoZSBwaG9uZS4iLAogICAgICAgICAgICByZXRyeTogKCkgPT4gd29yZE1pY1RhcCgpLAogICAgICAgICAgICBidXR0b25zOiAoc2hvcnRXb3JkICYmIHdbNV0pID8gW3sgbGFiZWw6ICLwn5ejIFNheSB0aGUgc2VudGVuY2UgaW5zdGVhZCIsIGZuOiAoKSA9PiB7IHdTZW50TW9kZSA9IHRydWU7IHdvcmRNaWNUYXAoKTsgfSB9XSA6IFtdIH0pOwogICAgICAgICAgcmVzLmlubmVySFRNTCA9IHNyQmxvY2tlZAogICAgICAgICAgICA/IGA8c3BhbiBjbGFzcz0iaGVhcmQiPlZvaWNlIGNoZWNrIGlzIG5vdCBhdmFpbGFibGUgaGVyZSDigJQgbmV4dCB0YXAgcmVjb3JkcyB5b3UgZm9yIHNlbGYtY29tcGFyZS48L3NwYW4+YAogICAgICAgICAgICA6IHdoeUxpbmUgJiYgIXNob3J0V29yZCA/IGA8ZGl2IGNsYXNzPSJtaWNNaXNzIj7wn5mJIEkgZGlkIG5vdCBjYXRjaCDigJwke3RhcmdldH3igJ0uJHt3aHlMaW5lfTxkaXYgY2xhc3M9Im1pY1RyeSI+JHt0cnlCdG59PC9kaXY+PC9kaXY+YAogICAgICAgICAgICA6IHNob3J0V29yZAogICAgICAgICAgICAgID8gYDxkaXYgY2xhc3M9Im1pY01pc3MiPvCfmYkgSSBjb3VsZCBub3QgY2F0Y2ggaXQuIE9uZSBzeWxsYWJsZSBpcyBoYXJkIGZvciBhbnkgbWljIOKAlCBzYXkgaXQgPGI+dGhyZWUgdGltZXMgaW4gYSByb3c8L2I+LCBvciBzYXkgdGhlIHdob2xlIHNlbnRlbmNlLCB3aGljaCBtaWNzIGhlYXIgbXVjaCBiZXR0ZXIuPGRpdiBjbGFzcz0ibWljVHJ5Ij4ke3RyeUJ0bn0ke3NlbnRCdG59PC9kaXY+PC9kaXY+YAogICAgICAgICAgICAgIDogYDxkaXYgY2xhc3M9Im1pY01pc3MiPvCfmYkgSSBkaWQgbm90IGhlYXIgaXQg4oCUIHRhcCDwn46kIGFuZCBzYXkg4oCcJHt0YXJnZXR94oCdLjxkaXYgY2xhc3M9Im1pY1RyeSI+JHt0cnlCdG59PC9kaXY+PC9kaXY+YDsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gc2hvcnQgd29yZHMgYWxzbyBhY2NlcHQgdGhlIGV4YW1wbGUgc2VudGVuY2Ug4oCUIGNvbnRleHQgbWFrZXMgcmVjb2duaXRpb24gcmVsaWFibGUKICAgICAgICBjb25zdCB0YXJnZXRzID0gKHNob3J0V29yZCB8fCBzZW50TW9kZSkgJiYgd1s1XSA/IFt0YXJnZXQsIHdbNV1dIDogW3RhcmdldF07CiAgICAgICAgbGV0IGJlc3QgPSB7IHBjdDogLTEsIGhlYXJkOiAiIiwgdGd0OiB0YXJnZXQgfTsKICAgICAgICB0YXJnZXRzLmZvckVhY2godCA9PiBhbHRzLmZvckVhY2goYSA9PiB7IGNvbnN0IGZiID0gcHJvbkZlZWRiYWNrKHQsIGEpOyBpZiAoZmIucGN0ID4gYmVzdC5wY3QpIGJlc3QgPSB7IC4uLmZiLCBoZWFyZDogYS50cmltKCksIHRndDogdCB9OyB9KSk7CiAgICAgICAgY29uc3QgdmlhID0gYmVzdC50Z3QgIT09IHRhcmdldCA/IGAgPHNwYW4gY2xhc3M9ImhlYXJkIj4odmlhIHRoZSBleGFtcGxlIHNlbnRlbmNlKTwvc3Bhbj5gIDogIiI7CiAgICAgICAgLy8gbm90ZWJvb2sgaG9vazogdGhlIHByZW1pdW0gdHV0b3IgbGF5ZXIgcmVjb3JkcyB3aW5zIGFuZCBtaXNzZXMgKG5vLW9wIGluIHRoZSBmcmVlIGdhbWUpCiAgICAgICAgaWYgKHdpbmRvdy5rcU5vdGUpIHsgaWYgKGJlc3QucGN0ID49IDg1KSB3aW5kb3cua3FOb3RlKCJ3b3JkLW9rIiwgd1swXSk7IGVsc2Ugd2luZG93LmtxTm90ZSgid29yZCIsIHdbMF0sICJoZWFyZCAiICsgKGJlc3QuaGVhcmQgfHwgIm5vdGhpbmcgY2xlYXIiKSk7IH0KICAgICAgICBkaWZmLmlubmVySFRNTCA9IGJlc3QuZGlmZkh0bWw7CiAgICAgICAgbWljU2hlZXRSZXN1bHQoeyBvazogYmVzdC5wY3QgPj0gODUsIHBjdDogYmVzdC5wY3QsIGhlYXJkOiBiZXN0LmhlYXJkLCBkaWZmSHRtbDogYmVzdC5wY3QgPCA4NSA/IGJlc3QuZGlmZkh0bWwgOiAiIiwKICAgICAgICAgIHRpdGxlOiBiZXN0LnBjdCA+PSA4NSA/IGAke2Jlc3QucGN0fSUg4oCUIGNvcnJlY3QhYCA6IGJlc3QucGN0ID49IDUwID8gYCR7YmVzdC5wY3R9JSDigJQgY2xvc2VgIDogYCR7YmVzdC5wY3R9JSDigJQgbm90IHlldGAsCiAgICAgICAgICBzdWI6IGJlc3QucGN0ID49IDg1ID8gKGJlc3QudGd0ICE9PSB0YXJnZXQgPyAiSGVhcmQgdGhyb3VnaCB0aGUgZXhhbXBsZSBzZW50ZW5jZSDigJQgdGhhdCBjb3VudHMuIiA6ICJUaGF0IGlzIHRoZSB3b3JkLiIpIDogYmVzdC5wY3QgPj0gNTAgPyAiVGhlIHJlZCBzeWxsYWJsZXMgYXJlIHRoZSBvbmVzIHRvIGZpeC4gSGVhciBpdCBzbG93LCB0aGVuIHRyeSBhZ2Fpbi4iIDogIkxpc3RlbiB0byBpdCBzbG93IGZpcnN0LCB0aGVuIHRyeSBhZ2FpbiIgKyAoc2hvcnRXb3JkID8gIiwgb3Igc2F5IHRoZSBleGFtcGxlIHNlbnRlbmNlLiIgOiAiLiIpLAogICAgICAgICAgcmV0cnk6ICgpID0+IHdvcmRNaWNUYXAoKSwKICAgICAgICAgIGJ1dHRvbnM6IFt7IGxhYmVsOiAi8J+QoiBIZWFyIGl0IHNsb3ciLCBmbjogKCkgPT4geyBzYXkoYmVzdC50Z3QsIDAuNTUpOyBzZXRUaW1lb3V0KCgpID0+IHt9LCAwKTsgfSB9XSB9KTsKICAgICAgICBjb25zdCBtZSA9IG15UmVjVXJsID8gYCA8YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InBsYXlNeVJlYygpIiBzdHlsZT0icGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbjowOyI+4pa277iPIE1lPC9idXR0b24+YCA6ICIiOwogICAgICAgIGlmIChiZXN0LnBjdCA+PSA4NSkgewogICAgICAgICAgc2Z4Lmdvb2QoKTsKICAgICAgICAgIGxldCBib251cyA9ICIiOwogICAgICAgICAgY29uc3Qgc3QgPSBsc3RhdGUoY3VyLm4pOyBzdC5wcm9uID0gc3QucHJvbiB8fCBbXTsKICAgICAgICAgIGlmICghc3QucHJvbi5pbmNsdWRlcyh3WzBdKSkgeyBzdC5wcm9uLnB1c2god1swXSk7IHBlcnNpc3QoKTsgZ2FpblhwKDIpOyBib251cyA9ICIgKzIgWFAg8J+OliI7IH0KICAgICAgICAgIGNvbnN0IGJhZGdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndCYWRnZSIpOyBpZiAoYmFkZ2UpIGJhZGdlLnRleHRDb250ZW50ID0gIiDwn46WIjsKICAgICAgICAgIGRhaWx5QnVtcCgicHJvbiIpOwogICAgICAgICAgcmVzLmlubmVySFRNTCA9IGDinIUgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWdyZWVuKSI+JHtiZXN0LnBjdH0lIOKAlCBjb3JyZWN0IHByb251bmNpYXRpb24hJHtib251c308L3NwYW4+JHt2aWF9JHttZX1gOwogICAgICAgIH0gZWxzZSBpZiAoYmVzdC5wY3QgPj0gNTApIHsKICAgICAgICAgIHNmeC5iYWQoKTsKICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBg8J+foSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ29sZCkiPiR7YmVzdC5wY3R9JSDigJQgbmVlZHMgYSBsaXR0bGUgd29yay4gVGFwIHRoZSByZWQgc3lsbGFibGVzLCBsaXN0ZW4g8J+QoiwgYW5kIHRyeSBhZ2Fpbi48L3NwYW4+JHt2aWF9JHttZX08ZGl2IGNsYXNzPSJoZWFyZCI+SGVhcmQ6IOKAnCR7YmVzdC5oZWFyZH3igJ08L2Rpdj5gOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZnguYmFkKCk7CiAgICAgICAgICBjb25zdCBsb2MgPSAoU1IgJiYgU1IubmF0aXZlICYmIHdpbmRvdy5LUV9NSUNfTEFTVCAmJiB3aW5kb3cuS1FfTUlDX0xBU1QubG9jYWxlICYmICEvXmtvL2kudGVzdCh3aW5kb3cuS1FfTUlDX0xBU1QubG9jYWxlKSkgPyBgPGRpdiBjbGFzcz0iaGVhcmQiPuKaoO+4jyBUaGUgcmVjb2duaXplciByYW4gYXMgJHt3aW5kb3cuS1FfTUlDX0xBU1QubG9jYWxlfSwgbm90IEtvcmVhbiDigJQgS29yZWFuIGRpY3RhdGlvbiBtYXkgbm90IGJlIGluc3RhbGxlZCBvbiB0aGlzIGRldmljZS48L2Rpdj5gIDogIiI7CiAgICAgICAgICByZXMuaW5uZXJIVE1MID0gYPCfmYkgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiPiR7YmVzdC5wY3R9JSDigJQgbGlzdGVuIPCfkKIgc2xvdyBmaXJzdCwgdGhlbiB0cnkgYWdhaW4ke3Nob3J0V29yZCA/ICIsIG9yIHNheSB0aGUgZXhhbXBsZSBzZW50ZW5jZSIgOiAiIn0uPC9zcGFuPiR7bWV9PGRpdiBjbGFzcz0iaGVhcmQiPkhlYXJkOiDigJwke2Jlc3QuaGVhcmR94oCdPC9kaXY+JHtsb2N9YDsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0gZWxzZSB7CiAgICAvLyBubyByZWNvZ25pdGlvbiBzZXJ2aWNlOiByZWNvcmQg4oaUIGNvbXBhcmUg4oaUIHNlbGYtY2hlY2sKICAgIGlmIChyZWNvcmRpbmcpIHsgcmVjb3JkaW5nID0gZmFsc2U7IHN0b3BSZWNvcmRpbmcoKTsgZmluaXNoVUkoKTsgcmV0dXJuOyB9CiAgICBjb25zdCBvayA9IGF3YWl0IHN0YXJ0UmVjb3JkaW5nKHRydWUsICgpID0+IHsKICAgICAgcmVjb3JkaW5nID0gZmFsc2U7IGZpbmlzaFVJKCk7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBgPGJ1dHRvbiBjbGFzcz0ic25kYnRuIiBvbmNsaWNrPSJwbGF5TXlSZWMoKSIgc3R5bGU9Im1hcmdpbjowIDRweCAwIDA7Ij7ilrbvuI8gTXkgdm9pY2U8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJzbmRidG4iIG9uY2xpY2s9InNheSgnJHt0YXJnZXQucmVwbGFjZSgvJy9nLCAiXFwnIil9JywwLjcpIiBzdHlsZT0ibWFyZ2luOjAgNHB4IDAgMDsiPvCflIogV29yZDwvYnV0dG9uPjxidXR0b24gY2xhc3M9InNuZGJ0biIgb25jbGljaz0id29yZFNlbGZQYXNzKCkiIHN0eWxlPSJtYXJnaW46MDsiPvCfmI4gU291bmRlZCByaWdodDwvYnV0dG9uPmA7CiAgICB9KTsKICAgIGlmICghb2spIHsgcmVzLmlubmVySFRNTCA9IG1pY0hlbHBIdG1sKCk7IHJldHVybjsgfQogICAgcmVjb3JkaW5nID0gdHJ1ZTsKICAgIGJ0bi50ZXh0Q29udGVudCA9ICLij7kgVGFwIHdoZW4geW91IGZpbmlzaCI7CiAgICBidG4uY2xhc3NMaXN0LmFkZCgic3RvcG1vZGUiKTsKICAgIGxlYXJuTmF2TG9jayh0cnVlKTsKICAgIHJlcy50ZXh0Q29udGVudCA9ICLwn5S0IFNheSDigJwiICsgdGFyZ2V0ICsgIuKAnSDigJQgaXQgc3RvcHMgYnkgaXRzZWxmLiI7CiAgfQp9CmZ1bmN0aW9uIHdvcmRTZWxmUGFzcygpIHsKICBjb25zdCB3ID0gY3VyLndvcmRzW2xlYXJuSWR4XTsKICBjb25zdCBzdCA9IGxzdGF0ZShjdXIubik7IHN0LnByb24gPSBzdC5wcm9uIHx8IFtdOwogIGlmICghc3QucHJvbi5pbmNsdWRlcyh3WzBdKSkgeyBzdC5wcm9uLnB1c2god1swXSk7IHBlcnNpc3QoKTsgZ2FpblhwKDIpOyBmbG9hdEZ4KCIrMiBYUCIsICIjMkY3RDRGIik7IH0KICBjb25zdCBiYWRnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3QmFkZ2UiKTsgaWYgKGJhZGdlKSBiYWRnZS50ZXh0Q29udGVudCA9ICIg8J+OliI7CiAgZGFpbHlCdW1wKCJwcm9uIik7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndQcm9uUmVzIikuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj5NYXJrZWQgYXMgcHJvbm91bmNlZCEg8J+Oljwvc3Bhbj5gOwogIHNmeC5nb29kKCk7Cn0KCmFzeW5jIGZ1bmN0aW9uIG1pY1RhcCgpIHsKICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrS3IiKS50ZXh0Q29udGVudDsKICBjb25zdCByZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrUmVzdWx0Iik7CiAgY29uc3QgbWljID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1pY0J0biIpOwoKICBpZiAoU1IgJiYgIXNyQmxvY2tlZCkgewogICAgLy8gRnVsbCBjb2FjaDogcmVjb2duaXplIHNwZWVjaCArIHJlY29yZCBhdWRpbyBhdCB0aGUgc2FtZSB0aW1lCiAgICBpZiAocmVjb2duaXppbmcgJiYgYWN0aXZlUmVjKSB7IGZvcmNlRW5kTGlzdGVuKGFjdGl2ZVJlYyk7IHJldHVybjsgfSAvLyB0YXAg4o+5ID0gZG9uZQogICAgaWYgKHJlY29nbml6aW5nKSByZXR1cm47CiAgICBpZiAoIShTUiAmJiBTUi5uYXRpdmUpICYmICEoYXdhaXQgZW5zdXJlTWljKCkpKSB7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmVjb2duaXppbmcgPSB0cnVlOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0RpZmYiKS5pbm5lckhUTUwgPSAiIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgaWYgKCEoU1IgJiYgU1IubmF0aXZlKSkgYXdhaXQgc3RhcnRSZWNvcmRpbmcoKTsgLy8gYmVzdCBlZmZvcnQgKHdlYik7IGluIHRoZSBhcHAgdGhlIG5hdGl2ZSByZWNvZ25pemVyIG93bnMgdGhlIG1pYwogICAgY29uc3QgcmVjID0gbmV3IFNSKCk7CiAgICBhY3RpdmVSZWMgPSByZWM7CiAgICByZWMubGFuZyA9ICJrby1LUiI7IHJlYy5tYXhBbHRlcm5hdGl2ZXMgPSA1OwogICAgcmVjLmhpbnRzID0gW3RhcmdldF07CiAgICBtaWMudGV4dENvbnRlbnQgPSAi4o+zIjsKICAgIHJlcy50ZXh0Q29udGVudCA9ICLij7MgT3BlbmluZyB0aGUgbWlj4oCmIjsKICAgIHJlYy5vbmVycm9yID0gZXYgPT4gewogICAgICByZWMuZXJyQ29kZSA9IGV2LmVycm9yOwogICAgICBpZiAoZXYuZXJyb3IgPT09ICJub3QtYWxsb3dlZCIgfHwgZXYuZXJyb3IgPT09ICJzZXJ2aWNlLW5vdC1hbGxvd2VkIiB8fCBldi5lcnJvciA9PT0gIm5ldHdvcmsiKSBzckJsb2NrZWQgPSB0cnVlOwogICAgfTsKICAgIHN0YXJ0TGlzdGVuaW5nKHJlYywgewogICAgICBpZGxlTXM6IDIyMDAsIGNhcE1zOiAzMDAwMCwKICAgICAgb25SZWFkeTogKCkgPT4geyBtaWMuY2xhc3NMaXN0LmFkZCgibGlzdGVuaW5nIik7IG1pYy50ZXh0Q29udGVudCA9ICLij7kiOyByZXMudGV4dENvbnRlbnQgPSAi8J+UtCBSZWFkIHRoZSBzZW50ZW5jZSDigJQgaXQgY2hlY2tzIHdoZW4geW91IHBhdXNlLiI7IG1pY1NoZWV0U2hvdyh7IHRhcmdldCwgc21hbGw6IGNsZWFuS3IodGFyZ2V0KS5sZW5ndGggPiAxMCwgaGludDogIlJlYWQgaXQgb3V0IGxvdWQiIH0pOyB0cnkgeyBiZWVwKDk5MCwgLjA3KTsgfSBjYXRjaCAoZSkge30gfSwKICAgICAgb25MaXZlOiB0ID0+IHsgbWljU2hlZXRMaXZlKHQpOyBpZiAodCkgcmVzLnRleHRDb250ZW50ID0gIvCfjqcg4oCc4oCmIiArIHQuc2xpY2UoLTUwKSArICLigJ0iOyB9LAogICAgICBvbkZpbmlzaDogKHRleHQsIGFsdHMpID0+IHsKICAgICAgICByZWNvZ25pemluZyA9IGZhbHNlOyBpZiAoYWN0aXZlUmVjID09PSByZWMpIGFjdGl2ZVJlYyA9IG51bGw7CiAgICAgICAgbWljLmNsYXNzTGlzdC5yZW1vdmUoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7CiAgICAgICAgc3RvcFJlY29yZGluZygpOwogICAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgICBsZXQgYmVzdCA9IHsgcGN0OiAtMSwgaGVhcmQ6ICIiIH07CiAgICAgICAgICBhbHRzLmZvckVhY2goYSA9PiB7IGNvbnN0IGZiID0gcHJvbkZlZWRiYWNrKHRhcmdldCwgYSk7IGlmIChmYi5wY3QgPiBiZXN0LnBjdCkgYmVzdCA9IHsgLi4uZmIsIGhlYXJkOiBhLnRyaW0oKSB9OyB9KTsKICAgICAgICAgIG1pY1NoZWV0UmVzdWx0KHsgb2s6IGJlc3QucGN0ID49IDg1LCBwY3Q6IGJlc3QucGN0LCBoZWFyZDogYmVzdC5oZWFyZCwgZGlmZkh0bWw6IGJlc3QucGN0IDwgODUgPyBiZXN0LmRpZmZIdG1sIDogIiIsIHRpdGxlOiBiZXN0LnBjdCA+PSA4NSA/IGAke2Jlc3QucGN0fSUg4oCUIGNvcnJlY3QhYCA6IGJlc3QucGN0ID49IDUwID8gYCR7YmVzdC5wY3R9JSDigJQgY2xvc2VgIDogYCR7YmVzdC5wY3R9JSDigJQgbm90IHlldGAsIHN1YjogYmVzdC5wY3QgPj0gODUgPyAiIiA6ICJUaGUgcmVkIHN5bGxhYmxlcyBhcmUgdGhlIG9uZXMgdG8gZml4LiIsIHJldHJ5OiAoKSA9PiBtaWNUYXAoKSwgYnV0dG9uczogW3sgbGFiZWw6ICLwn5CiIEhlYXIgaXQgc2xvdyIsIGZuOiAoKSA9PiBzYXkodGFyZ2V0LCAwLjU1KSB9XSB9KTsKICAgICAgICAgIGFuYWx5emVQcm9uKHRhcmdldCwgYWx0cyk7IHJldHVybjsKICAgICAgICB9CiAgICAgICAgbWljU2hlZXRSZXN1bHQoeyBvazogZmFsc2UsIHBjdDogMCwgdGl0bGU6ICJJIGRpZCBub3QgY2F0Y2ggdGhhdCIsIHN1YjogIkEgbGl0dGxlIGxvdWRlciwgYW5kIGNsb3NlciB0byB0aGUgcGhvbmUuIiwgcmV0cnk6ICgpID0+IG1pY1RhcCgpIH0pOwogICAgICAgIGlmIChzckJsb2NrZWQpIHsKICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5Wb2ljZSByZWNvZ25pdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgYnJvd3NlciDigJQgc3dpdGNoaW5nIHRvIPCfjpkgcmVjb3JkICZhbXA7IGNvbXBhcmUgbW9kZS4gVGFwIHRoZSBtaWMgYWdhaW4hPC9zcGFuPmA7CiAgICAgICAgfSBlbHNlIGlmICghcmVjLmVyckNvZGUgfHwgcmVjLmVyckNvZGUgPT09ICJuby1zcGVlY2giIHx8IHJlYy5lcnJDb2RlID09PSAiYWJvcnRlZCIpIHsKICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5JIGRpZCBub3QgaGVhciBhbnl0aGluZyDigJQgdGFwIHRoZSBtaWMgYW5kIHRyeSBhZ2Fpbi48L3NwYW4+YDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0iaGVhcmQiPlNwZWVjaCBjaGVjayBmYWlsZWQgKCR7cmVjLmVyckNvZGV9KS4gUmVjb3JkLCBjb21wYXJlLCBhbmQgZ3JhZGUgeW91cnNlbGY6PC9zcGFuPmA7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0gZWxzZSB7CiAgICAvLyBObyByZWNvZ25pdGlvbiBzZXJ2aWNlOiByZWNvcmQgd2l0aCBhdXRvLXN0b3Ag4oaUIGNvbXBhcmUg4oaUIHNlbGYtZ3JhZGUKICAgIGlmIChyZWNvcmRpbmcpIHsgLy8gbWFudWFsIHN0b3Agc3RpbGwgcG9zc2libGUKICAgICAgcmVjb3JkaW5nID0gZmFsc2U7IHN0b3BSZWNvcmRpbmcoKTsKICAgICAgbWljLmNsYXNzTGlzdC5yZW1vdmUoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG9rID0gYXdhaXQgc3RhcnRSZWNvcmRpbmcodHJ1ZSwgKCkgPT4gewogICAgICByZWNvcmRpbmcgPSBmYWxzZTsKICAgICAgbWljLmNsYXNzTGlzdC5yZW1vdmUoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi8J+OpCI7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBgPHNwYW4gY2xhc3M9ImhlYXJkIj5Ob3cgY29tcGFyZTog4pa277iPIHlvdXIgdm9pY2UgdnMg8J+UiiBuYXRpdmUuIEhvdyBjbG9zZSB3ZXJlIHlvdT88L3NwYW4+YDsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlbGZHcmFkZSIpLnN0eWxlLmRpc3BsYXkgPSAiZmxleCI7CiAgICB9KTsKICAgIGlmICghb2spIHsKICAgICAgc2F5KHRhcmdldCk7CiAgICAgIHJlcy5pbm5lckhUTUwgPSBtaWNIZWxwSHRtbCgpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VsZkdyYWRlIikuc3R5bGUuZGlzcGxheSA9ICJmbGV4IjsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmVjb3JkaW5nID0gdHJ1ZTsgbWljLmNsYXNzTGlzdC5hZGQoImxpc3RlbmluZyIpOyBtaWMudGV4dENvbnRlbnQgPSAi4o+5IjsKICAgIHJlcy50ZXh0Q29udGVudCA9ICLwn5S0IFJlY29yZGluZ+KApiByZWFkIHRoZSBzZW50ZW5jZSwgdGhlbiBwYXVzZSDigJQgaXQgc3RvcHMgYnkgaXRzZWxmLiI7CiAgfQp9CgpmdW5jdGlvbiBjbGVhbktyKHMpIHsgcmV0dXJuIHMucmVwbGFjZSgvW1xzLiwhP+KApn5cLeKAk+KAlCInKClcL10vZywgIiIpOyB9Ci8qIExldmVuc2h0ZWluIGFsaWdubWVudCB3aXRoIGJhY2t0cmFjZTogZm9yIGVhY2ggdGFyZ2V0IHN5bGxhYmxlLCB3YXMgaXQgbWF0Y2hlZAogICBhbmQgV0hBVCB3YXMgaGVhcmQgaW5zdGVhZCAoc3Vic3RpdHV0aW9uKSBvciBub3RoaW5nIChza2lwcGVkKS4gKi8KZnVuY3Rpb24gYWxpZ25QYWlycyh0LCBoKSB7CiAgY29uc3QgbSA9IHQubGVuZ3RoLCBuID0gaC5sZW5ndGg7CiAgY29uc3QgZCA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG0gKyAxIH0sICgpID0+IEFycmF5KG4gKyAxKS5maWxsKDApKTsKICBmb3IgKGxldCBpID0gMDsgaSA8PSBtOyBpKyspIGRbaV1bMF0gPSBpOwogIGZvciAobGV0IGogPSAwOyBqIDw9IG47IGorKykgZFswXVtqXSA9IGo7CiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKQogICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKQogICAgICBkW2ldW2pdID0gTWF0aC5taW4oZFtpLTFdW2otMV0gKyAodFtpLTFdID09PSBoW2otMV0gPyAwIDogMSksIGRbaS0xXVtqXSArIDEsIGRbaV1bai0xXSArIDEpOwogIGNvbnN0IG91dCA9IEFycmF5KG0pLmZpbGwobnVsbCk7CiAgbGV0IGkgPSBtLCBqID0gbjsKICB3aGlsZSAoaSA+IDAgfHwgaiA+IDApIHsKICAgIGlmIChpID4gMCAmJiBqID4gMCAmJiBkW2ldW2pdID09PSBkW2ktMV1bai0xXSArICh0W2ktMV0gPT09IGhbai0xXSA/IDAgOiAxKSkgewogICAgICBvdXRbaS0xXSA9IHsgb2s6IHRbaS0xXSA9PT0gaFtqLTFdLCBoZWFyZDogaFtqLTFdIH07IGktLTsgai0tOwogICAgfSBlbHNlIGlmIChpID4gMCAmJiAoaiA9PT0gMCB8fCBkW2ldW2pdID09PSBkW2ktMV1bal0gKyAxKSkgewogICAgICBvdXRbaS0xXSA9IHsgb2s6IGZhbHNlLCBoZWFyZDogbnVsbCB9OyBpLS07CiAgICB9IGVsc2Ugai0tOwogIH0KICByZXR1cm4gb3V0Owp9CmZ1bmN0aW9uIHNjb3JlT2YocGFpcnMpIHsgcmV0dXJuIHBhaXJzLmZpbHRlcihwID0+IHAgJiYgcC5vaykubGVuZ3RoIC8gTWF0aC5tYXgoMSwgcGFpcnMubGVuZ3RoKTsgfQoKLyogLS0tIEhhbmd1bCBqYW1vIGRlY29tcG9zaXRpb246IGV4cGxhaW4gSE9XIGEgc3lsbGFibGUgd2FzIG1pc3Byb25vdW5jZWQgLS0tICovCmNvbnN0IEpBTU9fSSA9IFsuLi4i44Sx44Sy44S044S344S444S544WB44WC44WD44WF44WG44WH44WI44WJ44WK44WL44WM44WN44WOIl07CmNvbnN0IEpBTU9fTSA9IFsi44WPIiwi44WQIiwi44WRIiwi44WSIiwi44WTIiwi44WUIiwi44WVIiwi44WWIiwi44WXIiwi44WYIiwi44WZIiwi44WaIiwi44WbIiwi44WcIiwi44WdIiwi44WeIiwi44WfIiwi44WgIiwi44WhIiwi44WiIiwi44WjIl07CmNvbnN0IEpBTU9fRiA9IFsiIiwi44SxIiwi44SyIiwi44SzIiwi44S0Iiwi44S1Iiwi44S2Iiwi44S3Iiwi44S5Iiwi44S6Iiwi44S7Iiwi44S8Iiwi44S9Iiwi44S+Iiwi44S/Iiwi44WAIiwi44WBIiwi44WCIiwi44WEIiwi44WFIiwi44WGIiwi44WHIiwi44WIIiwi44WKIiwi44WLIiwi44WMIiwi44WNIiwi44WOIl07CmNvbnN0IFJPTSA9IHsi44SxIjoiZy9rIiwi44SyIjoia2siLCLjhLQiOiJuIiwi44S3IjoiZC90Iiwi44S4IjoidHQiLCLjhLkiOiJyL2wiLCLjhYEiOiJtIiwi44WCIjoiYi9wIiwi44WDIjoicHAiLCLjhYUiOiJzIiwi44WGIjoic3MiLCLjhYciOiJuZyIsIuOFiCI6ImoiLCLjhYkiOiJqaiIsIuOFiiI6ImNoIiwi44WLIjoiayIsIuOFjCI6InQiLCLjhY0iOiJwIiwi44WOIjoiaCIsCiAi44WPIjoiYSIsIuOFkCI6ImFlIiwi44WRIjoieWEiLCLjhZIiOiJ5YWUiLCLjhZMiOiJlbyIsIuOFlCI6ImUiLCLjhZUiOiJ5ZW8iLCLjhZYiOiJ5ZSIsIuOFlyI6Im8iLCLjhZgiOiJ3YSIsIuOFmSI6IndhZSIsIuOFmiI6Im9lIiwi44WbIjoieW8iLCLjhZwiOiJ1Iiwi44WdIjoid28iLCLjhZ4iOiJ3ZSIsIuOFnyI6IndpIiwi44WgIjoieXUiLCLjhaEiOiJldSIsIuOFoiI6InVpIiwi44WjIjoiaSIsCiAi44SzIjoia3MiLCLjhLUiOiJuaiIsIuOEtiI6Im5oIiwi44S6IjoibGciLCLjhLsiOiJsbSIsIuOEvCI6ImxiIiwi44S9IjoibHMiLCLjhL4iOiJsdCIsIuOEvyI6ImxwIiwi44WAIjoibGgiLCLjhYQiOiJwcyJ9OwpmdW5jdGlvbiBkZWNKYW1vKGNoKSB7CiAgY29uc3QgYyA9IGNoLmNoYXJDb2RlQXQoMCkgLSAweEFDMDA7CiAgaWYgKGMgPCAwIHx8IGMgPiAxMTE3MSkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHsgaTogTWF0aC5mbG9vcihjIC8gNTg4KSwgbTogTWF0aC5mbG9vcigoYyAlIDU4OCkgLyAyOCksIGY6IGMgJSAyOCB9Owp9CmZ1bmN0aW9uIGZpeFRpcCh0Q2gsIHApIHsKICBpZiAoIXAgfHwgcC5oZWFyZCA9PT0gbnVsbCkgcmV0dXJuICJ5b3Ugc2tpcHBlZCB0aGlzIHN5bGxhYmxlIOKAlCBzYXkgaXQgY2xlYXJseSI7CiAgY29uc3QgYSA9IGRlY0phbW8odENoKSwgYiA9IGRlY0phbW8ocC5oZWFyZCk7CiAgaWYgKCFhIHx8ICFiKSByZXR1cm4gYEkgaGVhcmQg4oCcJHtwLmhlYXJkfeKAnSDigJQgc2F5IOKAnCR7dENofeKAnWA7CiAgY29uc3QgdGlwcyA9IFtdOwogIGlmIChhLmkgIT09IGIuaSkgdGlwcy5wdXNoKGBzdGFydCB3aXRoIDxiPiR7SkFNT19JW2EuaV19PC9iPiAoJHtST01bSkFNT19JW2EuaV1dIHx8ICIifSkg4oCUIEkgaGVhcmQgJHtKQU1PX0lbYi5pXX0gKCR7Uk9NW0pBTU9fSVtiLmldXSB8fCAiIn0pYCk7CiAgaWYgKFZOT1JNW2EubV0gIT09IFZOT1JNW2IubV0pIHRpcHMucHVzaChgdGhlIHZvd2VsIGlzIDxiPiR7SkFNT19NW2EubV19PC9iPiAoJHtST01bSkFNT19NW2EubV1dfSkg4oCUIEkgaGVhcmQgJHtKQU1PX01bYi5tXX0gKCR7Uk9NW0pBTU9fTVtiLm1dXX0pYCk7CiAgaWYgKEZOT1JNW2EuZl0gIT09IEZOT1JNW2IuZl0pIHsKICAgIGlmIChhLmYgPT09IDApIHRpcHMucHVzaChgbm8gZmluYWwgc291bmQg4oCUIEkgaGVhcmQgYW4gZXh0cmEgPGI+JHtKQU1PX0ZbYi5mXX08L2I+YCk7CiAgICBlbHNlIGlmIChiLmYgPT09IDApIHRpcHMucHVzaChgZmluaXNoIHdpdGggdGhlIGZpbmFsIDxiPiR7SkFNT19GW2EuZl19PC9iPiAoJHtST01bSkFNT19GW2EuZl1dIHx8ICIifSkg4oCUIGl0IHdhcyBtaXNzaW5nYCk7CiAgICBlbHNlIHRpcHMucHVzaChgdGhlIGZpbmFsIGlzIDxiPiR7SkFNT19GW2EuZl19PC9iPiAoJHtST01bSkFNT19GW2EuZl1dIHx8ICIifSkg4oCUIEkgaGVhcmQgJHtKQU1PX0ZbYi5mXX0gKCR7Uk9NW0pBTU9fRltiLmZdXSB8fCAiIn0pYCk7CiAgfQogIHJldHVybiB0aXBzLmpvaW4oIjsgIikgfHwgYHNvdW5kcyByaWdodCDigJQgc2F5IGl0IGEgdG91Y2ggbW9yZSBjbGVhcmx5YDsKfQovKiBTb3VuZC1sZXZlbCBub3JtYWxpemF0aW9uOiBzeWxsYWJsZXMgdGhhdCBTT1VORCBpZGVudGljYWwgY291bnQgYXMgY29ycmVjdC4KICAgRmluYWwtY29uc29uYW50IG5ldXRyYWxpemF0aW9uICjsmIY97Je9IGJvdGggZW5kIGluIFtwXSk7IHZvd2VsIG1lcmdlcnMg44WQPeOFlCwg44WSPeOFliwg44WZPeOFmj3jhZ4uCiAgIFJlY29nbml6ZXJzIG9mdGVuIHBpY2sgYSBob21vcGhvbmUgc3BlbGxpbmcg4oCUIHRoZSBsZWFybmVyIHNob3VsZCBub3QgYmUgcHVuaXNoZWQgZm9yIHRoYXQuICovCmNvbnN0IEZOT1JNID0gWzAsMSwxLDEsMiwyLDIsMyw0LDEsNSw0LDQsNCw2LDQsNSw2LDYsMywzLDcsMywzLDEsMyw2LDNdOwpjb25zdCBWTk9STSA9IFswLDEsMiwzLDQsMSw2LDMsOCw5LDEwLDEwLDEyLDEzLDE0LDEwLDE2LDE3LDE4LDE5LDIwXTsKZnVuY3Rpb24gc3lsU2NvcmUodENoLCBwKSB7CiAgaWYgKCFwKSByZXR1cm4gMDsKICBpZiAocC5vaykgcmV0dXJuIDE7CiAgaWYgKHAuaGVhcmQgPT09IG51bGwpIHJldHVybiAwOwogIGNvbnN0IGEgPSBkZWNKYW1vKHRDaCksIGIgPSBkZWNKYW1vKHAuaGVhcmQpOwogIGlmICghYSB8fCAhYikgcmV0dXJuIDA7CiAgbGV0IHB0cyA9IDA7CiAgaWYgKGEuaSA9PT0gYi5pKSBwdHMrKzsKICBpZiAoVk5PUk1bYS5tXSA9PT0gVk5PUk1bYi5tXSkgcHRzKys7CiAgaWYgKEZOT1JNW2EuZl0gPT09IEZOT1JNW2IuZl0pIHB0cysrOwogIHJldHVybiBwdHMgLyAzOwp9Ci8qIEZ1bGwgZmVlZGJhY2s6IGNvbG9yZWQgc3lsbGFibGVzICsgY29uY3JldGUgZml4IGluc3RydWN0aW9ucyAqLwpmdW5jdGlvbiBwcm9uRmVlZGJhY2sodGFyZ2V0LCBoZWFyZFJhdykgewogIGNvbnN0IGN0ID0gY2xlYW5Lcih0YXJnZXQpOwogIGNvbnN0IHBhaXJzID0gYWxpZ25QYWlycyhjdCwgY2xlYW5LcihoZWFyZFJhdykpOwogIGNvbnN0IHNjb3JlcyA9IFsuLi5jdF0ubWFwKChjLCBpKSA9PiBzeWxTY29yZShjLCBwYWlyc1tpXSkpOwogIGxldCBrID0gMDsKICBjb25zdCBkaWZmSHRtbCA9IFsuLi50YXJnZXRdLm1hcChjID0+IHsKICAgIGlmIChjbGVhbktyKGMpID09PSAiIikgcmV0dXJuIGM7CiAgICBjb25zdCBnb29kID0gc2NvcmVzW2tdID09PSAxOyBrKys7CiAgICByZXR1cm4gYDxzcGFuIGNsYXNzPSIke2dvb2QgPyAic3lsLW9rIiA6ICJzeWwtYmFkIn0iIG9uY2xpY2s9InNheSgnJHtjfScsMC40NSkiPiR7Y308L3NwYW4+YDsKICB9KS5qb2luKCIiKTsKICBjb25zdCBmaXhlcyA9IFtdOwogIGxldCBrMiA9IDA7CiAgZm9yIChjb25zdCBjIG9mIGN0KSB7CiAgICBjb25zdCBwID0gcGFpcnNbazJdLCBzID0gc2NvcmVzW2syXTsgazIrKzsKICAgIGlmIChzIDwgMSAmJiBmaXhlcy5sZW5ndGggPCA0KQogICAgICBmaXhlcy5wdXNoKGA8ZGl2IGNsYXNzPSJmaXhsaW5lIiBvbmNsaWNrPSJzYXkoJyR7Y30nLDAuNCkiPjxiPiR7Y308L2I+IOKAlCAke2ZpeFRpcChjLCBwKX0gPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLWFjY2VudDIpO3doaXRlLXNwYWNlOm5vd3JhcDsiPvCflIogdGFwID0gc2xvdzwvc3Bhbj48L2Rpdj5gKTsKICB9CiAgY29uc3QgcGN0ID0gc2NvcmVzLmxlbmd0aCA/IE1hdGgucm91bmQoc2NvcmVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gc2NvcmVzLmxlbmd0aCAqIDEwMCkgOiAwOwogIHJldHVybiB7IHBjdCwgZGlmZkh0bWwsIGZpeGVzSHRtbDogZml4ZXMuam9pbigiIikgfTsKfQoKZnVuY3Rpb24gYW5hbHl6ZVByb24odGFyZ2V0LCBhbHRzKSB7CiAgbGV0IGJlc3QgPSB7IHBjdDogLTEsIGhlYXJkOiAiIiB9OwogIGFsdHMuZm9yRWFjaChhID0+IHsKICAgIGNvbnN0IGZiID0gcHJvbkZlZWRiYWNrKHRhcmdldCwgYSk7CiAgICBpZiAoZmIucGN0ID4gYmVzdC5wY3QpIGJlc3QgPSB7IC4uLmZiLCBoZWFyZDogYS50cmltKCkgfTsKICB9KTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3BrRGlmZiIpLmlubmVySFRNTCA9IGJlc3QuZGlmZkh0bWw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa0ZpeGVzIikuaW5uZXJIVE1MID0gYmVzdC5maXhlc0h0bWw7CiAgY29uc3QgcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwa1Jlc3VsdCIpOwogIGNvbnN0IGhlYXJkID0gYDxkaXYgY2xhc3M9ImhlYXJkIj5IZWFyZDog4oCcJHtiZXN0LmhlYXJkfeKAnTwvZGl2PmA7CiAgaWYgKGJlc3QucGN0ID49IDk1KSB7CiAgICByZXMuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4ke2Jlc3QucGN0fSUg4oCUIHBlcmZlY3QgcHJvbnVuY2lhdGlvbiE8L3NwYW4+JHtoZWFyZH1gOwogICAgc3BlYWtHcmFkZSh0cnVlLCB0cnVlKTsKICB9IGVsc2UgaWYgKGJlc3QucGN0ID49IDgwKSB7CiAgICByZXMuaW5uZXJIVE1MID0gYOKchSA8c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4ke2Jlc3QucGN0fSUg4oCUIGdyZWF0ISBTbWFsbCBwb2xpc2ggYmVsb3c6PC9zcGFuPiR7aGVhcmR9YDsKICAgIHNwZWFrR3JhZGUodHJ1ZSwgdHJ1ZSk7CiAgfSBlbHNlIGlmIChiZXN0LnBjdCA+PSA1MCkgewogICAgcmVzLmlubmVySFRNTCA9IGDwn5+hIDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1nb2xkKSI+JHtiZXN0LnBjdH0lIOKAlCBjbG9zZSEgRml4IHRoZSByZWQgc3lsbGFibGVzIGJlbG93LCB0aGVuIHRyeSBhZ2Fpbi48L3NwYW4+JHtoZWFyZH1gOwogICAgc2Z4LmJhZCgpOwogIH0gZWxzZSB7CiAgICByZXMuaW5uZXJIVE1MID0gYPCfmYkgPHNwYW4gc3R5bGU9ImNvbG9yOnZhcigtLXJlZCkiPiR7YmVzdC5wY3R9JSDigJQgbGlzdGVuIPCfkKIgc2xvdyBmaXJzdCwgdGhlbiByZXBlYXQgb25lIHdvcmQgYXQgYSB0aW1lLjwvc3Bhbj4ke2hlYXJkfWA7CiAgICBzZnguYmFkKCk7CiAgfQp9CmZ1bmN0aW9uIHNwZWFrR3JhZGUob2ssIHNpbGVudCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWxmR3JhZGUiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIGlmIChvaykgewogICAgY29uc3Qgc3QgPSBsc3RhdGUoY3VyLm4pOwogICAgY29uc3Qga2V5ID0gc3BlYWtJZHggJSBzcGVha1NlbnRlbmNlcygpLmxlbmd0aDsKICAgIGlmICghc3Quc3Bva2VuLmluY2x1ZGVzKGtleSkpIHN0LnNwb2tlbi5wdXNoKGtleSk7CiAgICBnYWluWHAoNSk7IGRhaWx5QnVtcCgicHJvbiIpOyBpZiAoIXNpbGVudCkgeyBzZnguZ29vZCgpOyBmbG9hdEZ4KCIrNSBYUCIsICIjMkY3RDRGIik7IH0KICAgIGlmIChzdC5zcG9rZW4ubGVuZ3RoID49IDUgJiYgIXN0LnN0YXJzLnNwZWFrKSB7CiAgICAgIHN0LnN0YXJzLnNwZWFrID0gdHJ1ZTsgY29uZmV0dGkoKTsgc2Z4LndpbigpOyBmbG9hdEZ4KCLirZAgU3BlYWtpbmcgc3RhciEiLCAiI0IwN0QyOCIpOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibFN0YXJzIikudGV4dENvbnRlbnQgPSBzdGFyc09mKGN1ci5uKTsKICAgIH0KICAgIHBlcnNpc3QoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gc3BlYWtNb3ZlKDEpLCAxODAwKTsgLy8gZ2l2ZSB0aW1lIHRvIHNlZSB0aGUgc2NvcmUvZGlmZiBiZWZvcmUgYWR2YW5jaW5nCiAgfSBlbHNlIHsKICAgIGdhaW5YcCgxKTsgZmxvYXRGeCgiKzEgWFAgZm9yIHRyeWluZyIsICIjNzU2NjREIik7CiAgfQp9CgovKiA9PT09PT09PT09PT09PT0gR0FNRSBIRUxQRVJTID09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBnYW1lUG9vbCgpIHsgcmV0dXJuIGN1ci53b3JkczsgfQpmdW5jdGlvbiBzaG93UmVzdWx0KHtlbW9qaSwgdGl0bGUsIHN1Yiwgc2NvcmUsIHhwLCBjb21ibywgcmVwbGF5fSkgewogIGNsZWFySW50ZXJ2YWwoYWN0aXZlVGltZXIpOyBhY3RpdmVUaW1lciA9IG51bGw7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc0Vtb2ppIikudGV4dENvbnRlbnQgPSBlbW9qaTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzVGl0bGUiKS50ZXh0Q29udGVudCA9IHRpdGxlOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNTdWIiKS50ZXh0Q29udGVudCA9IHN1YiB8fCAiIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzU2NvcmUiKS50ZXh0Q29udGVudCA9IHNjb3JlOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNYcCIpLnRleHRDb250ZW50ID0gIisiICsgeHA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc0NvbWJvIikudGV4dENvbnRlbnQgPSBjb21ibzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzUmVwbGF5Iikub25jbGljayA9IHJlcGxheTsKICBpZiAoY29tYm8gPiBzYXZlLmJlc3RDb21ibykgc2F2ZS5iZXN0Q29tYm8gPSBjb21ibzsKICBnYWluWHAoeHApOyBwZXJzaXN0KCk7IHJlbmRlckh1ZCgpOwogIC8vIHRoZSBsYXN0IGxpbmUgb2YgZXZlcnkgc2Vzc2lvbiBpcyB0b21vcnJvdzogdGhlIHN0cmVhayB5b3Ugbm93IGhvbGQsIGFuZCB3aGF0IGlzIGxlZnQgdG9kYXkKICBjb25zdCBybiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNOZXh0Iik7CiAgaWYgKHJuKSB7CiAgICBjb25zdCBzayA9IHNhdmUuc3RyZWFrIHx8IHsgY291bnQ6IDAgfSwgZCA9IGRhaWx5KCk7CiAgICBjb25zdCBsZWZ0ID0gW2Qud29yZHMgPCA1ID8gKDUgLSBkLndvcmRzKSArICIgd29yZHMiIDogbnVsbCwgZC5wcm9uIDwgMyA/ICgzIC0gZC5wcm9uKSArICIg8J+OpCIgOiBudWxsLCBkLmNvbnZvIDwgMSA/ICIxIHN0b3J5IG9yIHRhbGsiIDogbnVsbF0uZmlsdGVyKEJvb2xlYW4pOwogICAgcm4uaW5uZXJIVE1MID0gYPCflKUgJHtzay5jb3VudH0tZGF5IHN0cmVhayR7c2suY291bnQgPiAxID8gIiDigJQgdG9tb3Jyb3cgbWFrZXMgaXQgIiArIChzay5jb3VudCArIDEpIDogIiDigJQgY29tZSBiYWNrIHRvbW9ycm93IHRvIG1ha2UgaXQgMiJ9YAogICAgICArIChsZWZ0Lmxlbmd0aCA/IGA8YnI+8J+OryBUb2RheSdzIGdvYWxzOiAke2xlZnQuam9pbigiIMK3ICIpfSB0byBnb2AgOiBgPGJyPvCfjoEgQWxsIHRocmVlIGdvYWxzIGRvbmUg4oCUIGNsYWltICszMCBYUCBvbiB0aGUgaG9tZSBzY3JlZW5gKTsKICB9CiAgc2hvdygicmVzdWx0Iik7CiAgaWYgKHhwID4gMCkgeyBjb25mZXR0aSgpOyBzZngud2luKCk7IH0KfQoKLyogPT09PT09PT09PT09PT09IFNQRUVEIFFVSVogPT09PT09PT09PT09PT09ICovCmxldCBRID0ge307CmZ1bmN0aW9uIHN0YXJ0UXVpeigpIHsKICBRID0geyBzY29yZTowLCBjb21ibzowLCBtYXhDb21ibzowLCB0aW1lOjYwLCB4cDowIH07CiAgc2hvdygicXVpeiIpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6U2NvcmUiKS50ZXh0Q29udGVudCA9IDA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpDb21ibyIpLnRleHRDb250ZW50ID0gIiI7CiAgcXVpek5leHQoKTsgcXVpelRpY2soKTsKICBhY3RpdmVUaW1lciA9IHNldEludGVydmFsKHF1aXpUaWNrLCAxMDAwKTsKfQpmdW5jdGlvbiBxdWl6VGljaygpIHsKICBjb25zdCB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpUaW1lciIpOwogIHQudGV4dENvbnRlbnQgPSBRLnRpbWU7IHQuY2xhc3NMaXN0LnRvZ2dsZSgibG93IiwgUS50aW1lIDw9IDEwKTsKICBpZiAoUS50aW1lIDw9IDApIHsKICAgIHNob3dSZXN1bHQoeyBlbW9qaTogUS5zY29yZSA+PSAxMDAgPyAi8J+PhiIgOiAi8J+SqiIsIHRpdGxlOiAiVGltZSdzIHVwISIsCiAgICAgIHN1YjogIk1heCBjb21ibyDDlyIgKyBRLm1heENvbWJvLCBzY29yZTogUS5zY29yZSwgeHA6IFEueHAsIGNvbWJvOiBRLm1heENvbWJvLCByZXBsYXk6IHN0YXJ0UXVpeiB9KTsKICAgIHJldHVybjsKICB9CiAgUS50aW1lLS07Cn0KZnVuY3Rpb24gcXVpek5leHQoKSB7CiAgY29uc3QgY2FyZHMgPSBzaHVmZmxlKGdhbWVQb29sKCkpOwogIGNvbnN0IGNhcmQgPSBjYXJkc1swXTsKICBjb25zdCByZXZlcnNlID0gTWF0aC5yYW5kb20oKSA+IDAuNTsKICBRLmFuc3dlciA9IHJldmVyc2UgPyBjYXJkWzBdIDogY2FyZFsyXTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpekxhYmVsIikudGV4dENvbnRlbnQgPSByZXZlcnNlID8gIldoaWNoIGlzIEtvcmVhbiBmb3LigKYiIDogIldoYXQgZG9lcyB0aGlzIG1lYW4/IjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpeldvcmQiKS50ZXh0Q29udGVudCA9IChyZXZlcnNlID8gIiIgOiBjYXJkWzRdICsgIiAiKSArIChyZXZlcnNlID8gY2FyZFsyXSA6IGNhcmRbMF0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWl6SGludCIpLnRleHRDb250ZW50ID0gcmV2ZXJzZSA/ICIiIDogY2FyZFsxXTsKICBpZiAoIXJldmVyc2UpIHNheShjYXJkWzBdKTsKICBjb25zdCBvcHRpb25zID0gc2h1ZmZsZShjYXJkcy5zbGljZSgwLCA0KSk7CiAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpBbnN3ZXJzIik7CiAgYm94LmlubmVySFRNTCA9ICIiOwogIG9wdGlvbnMuZm9yRWFjaChvID0+IHsKICAgIGNvbnN0IGxhYmVsID0gcmV2ZXJzZSA/IG9bMF0gOiBvWzJdOwogICAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYi5jbGFzc05hbWUgPSAiYW5zIjsgYi50ZXh0Q29udGVudCA9IGxhYmVsOwogICAgYi5vbmNsaWNrID0gZXYgPT4gcXVpekFuc3dlcihiLCBsYWJlbCA9PT0gUS5hbnN3ZXIsIGV2KTsKICAgIGJveC5hcHBlbmRDaGlsZChiKTsKICB9KTsKfQpmdW5jdGlvbiBxdWl6QW5zd2VyKGJ0biwgb2ssIGV2KSB7CiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3F1aXpBbnN3ZXJzIC5hbnMiKS5mb3JFYWNoKGIgPT4gYi5vbmNsaWNrID0gbnVsbCk7CiAgaWYgKG9rKSB7CiAgICBidG4uY2xhc3NMaXN0LmFkZCgiY29ycmVjdCIpOwogICAgUS5jb21ibysrOyBRLm1heENvbWJvID0gTWF0aC5tYXgoUS5tYXhDb21ibywgUS5jb21ibyk7CiAgICBjb25zdCBtdWx0ID0gMSArIE1hdGguZmxvb3IoUS5jb21ibyAvIDMpOwogICAgY29uc3QgcHRzID0gMTAgKiBtdWx0OwogICAgUS5zY29yZSArPSBwdHM7IFEueHAgKz0gMiAqIG11bHQ7CiAgICBzZnguZ29vZCgpOwogICAgZmxvYXRGeCgiKyIgKyBwdHMgKyAobXVsdCA+IDEgPyAiIMOXIiArIG11bHQgOiAiIiksICIjMkY3RDRGIiwgZXYuY2xpZW50WCwgZXYuY2xpZW50WSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpelNjb3JlIikudGV4dENvbnRlbnQgPSBRLnNjb3JlOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1aXpDb21ibyIpLnRleHRDb250ZW50ID0gUS5jb21ibyA+PSAzID8gIvCflKXDlyIgKyBtdWx0IDogIiI7CiAgICBzZXRUaW1lb3V0KHF1aXpOZXh0LCAzNTApOwogIH0gZWxzZSB7CiAgICBidG4uY2xhc3NMaXN0LmFkZCgid3JvbmciKTsKICAgIFEuY29tYm8gPSAwOyBzZnguYmFkKCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVpekNvbWJvIikudGV4dENvbnRlbnQgPSAiIjsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNxdWl6QW5zd2VycyAuYW5zIikuZm9yRWFjaChiID0+IHsKICAgICAgaWYgKGIudGV4dENvbnRlbnQgPT09IFEuYW5zd2VyKSBiLmNsYXNzTGlzdC5hZGQoImNvcnJlY3QiKTsKICAgIH0pOwogICAgc2V0VGltZW91dChxdWl6TmV4dCwgOTAwKTsKICB9Cn0KCi8qID09PT09PT09PT09PT09PSBXT1JEIE1BVENIID09PT09PT09PT09PT09PSAqLwpsZXQgTSA9IHt9OwpmdW5jdGlvbiBzdGFydE1hdGNoKCkgewogIGNvbnN0IGNhcmRzID0gc2h1ZmZsZShnYW1lUG9vbCgpKS5zbGljZSgwLCA4KTsKICBNID0geyB0aW1lOjkwLCBsZWZ0OmNhcmRzLmxlbmd0aCwgc2VsOm51bGwsIHN0YXJ0OkRhdGUubm93KCksIHhwOjAgfTsKICBzaG93KCJtYXRjaCIpOwogIGNvbnN0IHRpbGVzID0gc2h1ZmZsZShbCiAgICAuLi5jYXJkcy5tYXAoYyA9PiAoe2lkOmNbMF0sIGxhYmVsOmNbMF0sIHNpZGU6ImtyIn0pKSwKICAgIC4uLmNhcmRzLm1hcChjID0+ICh7aWQ6Y1swXSwgbGFiZWw6Y1s0XSArICIgIiArIGNbMl0sIHNpZGU6ImVuIn0pKQogIF0pOwogIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWF0Y2hHcmlkIik7CiAgZ3JpZC5pbm5lckhUTUwgPSAiIjsKICB0aWxlcy5mb3JFYWNoKHQgPT4gewogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZC5jbGFzc05hbWUgPSAidGlsZSI7IGQudGV4dENvbnRlbnQgPSB0LmxhYmVsOwogICAgZC5kYXRhc2V0LmlkID0gdC5pZDsgZC5kYXRhc2V0LnNpZGUgPSB0LnNpZGU7CiAgICBkLm9uY2xpY2sgPSAoKSA9PiBtYXRjaFBpY2soZCk7CiAgICBncmlkLmFwcGVuZENoaWxkKGQpOwogIH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXRjaExlZnQiKS50ZXh0Q29udGVudCA9IE0ubGVmdDsKICBtYXRjaFRpY2soKTsKICBhY3RpdmVUaW1lciA9IHNldEludGVydmFsKG1hdGNoVGljaywgMTAwMCk7Cn0KZnVuY3Rpb24gbWF0Y2hUaWNrKCkgewogIGNvbnN0IHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWF0Y2hUaW1lciIpOwogIHQudGV4dENvbnRlbnQgPSBNLnRpbWU7IHQuY2xhc3NMaXN0LnRvZ2dsZSgibG93IiwgTS50aW1lIDw9IDE1KTsKICBpZiAoTS50aW1lIDw9IDApIHsKICAgIHNob3dSZXN1bHQoeyBlbW9qaToi4o+wIiwgdGl0bGU6Ik91dCBvZiB0aW1lISIsIHN1YjpNLmxlZnQgKyAiIHBhaXJzIGxlZnQg4oCUIHRyeSBhZ2FpbiEiLAogICAgICBzY29yZTooOCAtIE0ubGVmdCkgKyAiLzgiLCB4cDpNLnhwLCBjb21ibzowLCByZXBsYXk6c3RhcnRNYXRjaCB9KTsKICAgIHJldHVybjsKICB9CiAgTS50aW1lLS07Cn0KZnVuY3Rpb24gbWF0Y2hQaWNrKHRpbGUpIHsKICBpZiAodGlsZS5jbGFzc0xpc3QuY29udGFpbnMoImRvbmUiKSkgcmV0dXJuOwogIGlmIChNLnNlbCA9PT0gdGlsZSkgeyB0aWxlLmNsYXNzTGlzdC5yZW1vdmUoInNlbCIpOyBNLnNlbCA9IG51bGw7IHJldHVybjsgfQogIGlmICh0aWxlLmRhdGFzZXQuc2lkZSA9PT0gImtyIikgc2F5KHRpbGUuZGF0YXNldC5pZCwgMSk7CiAgaWYgKCFNLnNlbCkgeyBNLnNlbCA9IHRpbGU7IHRpbGUuY2xhc3NMaXN0LmFkZCgic2VsIik7IHJldHVybjsgfQogIGNvbnN0IGEgPSBNLnNlbCwgYiA9IHRpbGU7CiAgTS5zZWwgPSBudWxsOyBhLmNsYXNzTGlzdC5yZW1vdmUoInNlbCIpOwogIGlmIChhLmRhdGFzZXQuaWQgPT09IGIuZGF0YXNldC5pZCAmJiBhLmRhdGFzZXQuc2lkZSAhPT0gYi5kYXRhc2V0LnNpZGUpIHsKICAgIGEuY2xhc3NMaXN0LmFkZCgiZG9uZSIpOyBiLmNsYXNzTGlzdC5hZGQoImRvbmUiKTsKICAgIE0ubGVmdC0tOyBNLnhwICs9IDU7IHNmeC5nb29kKCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWF0Y2hMZWZ0IikudGV4dENvbnRlbnQgPSBNLmxlZnQ7CiAgICBpZiAoTS5sZWZ0ID09PSAwKSB7CiAgICAgIGNvbnN0IHNlY3MgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gTS5zdGFydCkgLyAxMDAwKTsKICAgICAgTS54cCArPSBNYXRoLmZsb29yKE1hdGgubWF4KDAsIDkwIC0gc2VjcykgLyAzKTsKICAgICAgc2hvd1Jlc3VsdCh7IGVtb2ppOiLwn6epIiwgdGl0bGU6IkFsbCBtYXRjaGVkIGluICIgKyBzZWNzICsgInMhIiwKICAgICAgICBzdWI6IlNwZWVkIGJvbnVzIGluY2x1ZGVkIiwgc2NvcmU6c2VjcyArICJzIiwgeHA6TS54cCwgY29tYm86MCwgcmVwbGF5OnN0YXJ0TWF0Y2ggfSk7CiAgICB9CiAgfSBlbHNlIHsKICAgIGEuY2xhc3NMaXN0LmFkZCgiYmFkIik7IGIuY2xhc3NMaXN0LmFkZCgiYmFkIik7IHNmeC5iYWQoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4geyBhLmNsYXNzTGlzdC5yZW1vdmUoImJhZCIpOyBiLmNsYXNzTGlzdC5yZW1vdmUoImJhZCIpOyB9LCA0MDApOwogIH0KfQoKLyogPT09PT09PT09PT09PT09IFNFTlRFTkNFIEJVSUxERVIgPT09PT09PT09PT09PT09ICovCmxldCBCID0ge307CmZ1bmN0aW9uIHN0YXJ0QnVpbGRlcigpIHsKICBjb25zdCB1c2FibGUgPSBnYW1lUG9vbCgpLmZpbHRlcihjID0+IGNbNV0uc3BsaXQoIiAiKS5sZW5ndGggPj0gMyk7CiAgQiA9IHsgcm91bmRzOiBzaHVmZmxlKHVzYWJsZSkuc2xpY2UoMCwgNSksIGk6MCwgc2NvcmU6MCwgeHA6MCwgdHJpZXM6MCB9OwogIGlmICghQi5yb3VuZHMubGVuZ3RoKSB7IGFsZXJ0KCJUaGlzIGxlc3NvbiBoYXMgbm8gbG9uZyBzZW50ZW5jZXMgeWV0IOKAlCB0cnkgYW5vdGhlciBtb2RlISIpOyByZXR1cm47IH0KICBzaG93KCJidWlsZGVyIik7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2NvcmUiKS50ZXh0Q29udGVudCA9IDA7CiAgYnVpbGRlclJvdW5kKCk7Cn0KZnVuY3Rpb24gYnVpbGRlclJvdW5kKCkgewogIGNvbnN0IGNhcmQgPSBCLnJvdW5kc1tCLmldOwogIEIud29yZHMgPSBjYXJkWzVdLnNwbGl0KCIgIik7CiAgQi5wbGFjZWQgPSBbXTsgQi50cmllcyA9IDA7IEIuc2VudGVuY2UgPSBjYXJkWzVdOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFByb2dyZXNzIikudGV4dENvbnRlbnQgPSAoQi5pICsgMSkgKyAiIC8gIiArIEIucm91bmRzLmxlbmd0aDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVpbGRFbiIpLnRleHRDb250ZW50ID0gY2FyZFs2XTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVpbGRTbG90IikuaW5uZXJIVE1MID0gIiI7CiAgY29uc3QgcG9vbEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidWlsZFBvb2wiKTsKICBwb29sQm94LmlubmVySFRNTCA9ICIiOwogIHNodWZmbGUoQi53b3Jkcy5tYXAoKHcsIGlkeCkgPT4gKHt3LCBpZHh9KSkpLmZvckVhY2goaXRlbSA9PiB7CiAgICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjaGlwLmNsYXNzTmFtZSA9ICJ3b3JkY2hpcCI7IGNoaXAudGV4dENvbnRlbnQgPSBpdGVtLnc7CiAgICBjaGlwLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIGlmIChjaGlwLmNsYXNzTGlzdC5jb250YWlucygicGxhY2VkIikpIHJldHVybjsKICAgICAgY2hpcC5jbGFzc0xpc3QuYWRkKCJwbGFjZWQiKTsKICAgICAgQi5wbGFjZWQucHVzaCh7IHc6IGl0ZW0udywgY2hpcCB9KTsKICAgICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBzLmNsYXNzTmFtZSA9ICJ3b3JkY2hpcCI7IHMudGV4dENvbnRlbnQgPSBpdGVtLnc7CiAgICAgIHMub25jbGljayA9ICgpID0+IHsgQi5wbGFjZWQgPSBCLnBsYWNlZC5maWx0ZXIocCA9PiBwLmNoaXAgIT09IGNoaXApOyBjaGlwLmNsYXNzTGlzdC5yZW1vdmUoInBsYWNlZCIpOyBzLnJlbW92ZSgpOyB9OwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnVpbGRTbG90IikuYXBwZW5kQ2hpbGQocyk7CiAgICB9OwogICAgcG9vbEJveC5hcHBlbmRDaGlsZChjaGlwKTsKICB9KTsKfQpmdW5jdGlvbiBidWlsZGVyUmVzZXQoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2xvdCIpLmlubmVySFRNTCA9ICIiOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNidWlsZFBvb2wgLndvcmRjaGlwIikuZm9yRWFjaChjID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgicGxhY2VkIikpOwogIEIucGxhY2VkID0gW107Cn0KZnVuY3Rpb24gYnVpbGRlckNoZWNrKCkgewogIGNvbnN0IGF0dGVtcHQgPSBCLnBsYWNlZC5tYXAocCA9PiBwLncpLmpvaW4oIiAiKTsKICBpZiAoYXR0ZW1wdCA9PT0gQi53b3Jkcy5qb2luKCIgIikpIHsKICAgIGNvbnN0IHB0cyA9IEIudHJpZXMgPT09IDAgPyAyMCA6IDEwOwogICAgQi5zY29yZSArPSBwdHM7IEIueHAgKz0gQi50cmllcyA9PT0gMCA/IDggOiA0OwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2NvcmUiKS50ZXh0Q29udGVudCA9IEIuc2NvcmU7CiAgICBzZnguZ29vZCgpOyBmbG9hdEZ4KCIrIiArIHB0cywgIiMyRjdENEYiKTsKICAgIHNheShCLnNlbnRlbmNlKTsKICAgIEIuaSsrOwogICAgaWYgKEIuaSA+PSBCLnJvdW5kcy5sZW5ndGgpIHsKICAgICAgc2hvd1Jlc3VsdCh7IGVtb2ppOiBCLnNjb3JlID09PSAxMDAgPyAi8J+SryIgOiAi8J+UqCIsCiAgICAgICAgdGl0bGU6IEIuc2NvcmUgPT09IDEwMCA/ICJQRVJGRUNUIHJ1biEiIDogIlNlbnRlbmNlcyBidWlsdCEiLAogICAgICAgIHN1YjogIlJlYWwgc2VudGVuY2VzIGZyb20gUXVlc3QgIiArIGN1ci5uLCBzY29yZTogQi5zY29yZSwgeHA6IEIueHAsIGNvbWJvOiAwLCByZXBsYXk6IHN0YXJ0QnVpbGRlciB9KTsKICAgIH0gZWxzZSBzZXRUaW1lb3V0KGJ1aWxkZXJSb3VuZCwgOTAwKTsKICB9IGVsc2UgewogICAgQi50cmllcysrOyBzZnguYmFkKCk7CiAgICBjb25zdCBzbG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1aWxkU2xvdCIpOwogICAgc2xvdC5zdHlsZS5hbmltYXRpb24gPSAic2hha2UgLjNzIjsKICAgIHNldFRpbWVvdXQoKCkgPT4gc2xvdC5zdHlsZS5hbmltYXRpb24gPSAiIiwgMzUwKTsKICAgIGlmIChCLnRyaWVzID49IDIpIGZsb2F0RngoIkhpbnQ6ICIgKyBCLndvcmRzWzBdICsgIiDigKYiLCAiI0IwN0QyOCIpOwogIH0KfQoKLyogPT09PT09PT09PT09PT09IEJPU1MgQkFUVExFID09PT09PT09PT09PT09PSAqLwpsZXQgWCA9IHt9OwpmdW5jdGlvbiBzdGFydEJvc3MoKSB7CiAgWCA9IHsgaHA6MTAwLCBoZWFydHM6MywgZG1nOjAsIHhwOjAsIGNvbWJvOjAsIG1heENvbWJvOjAgfTsKICBzaG93KCJib3NzIik7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NUaXRsZSIpLnRleHRDb250ZW50ID0gY3VyLmJvc3MgKyAiICIgKyBjdXIuYm9zc05hbWU7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NTcHJpdGUiKS50ZXh0Q29udGVudCA9IGN1ci5ib3NzOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzSHAiKS5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc0hlYXJ0cyIpLnRleHRDb250ZW50ID0gIuKdpO+4j+KdpO+4j+KdpO+4jyI7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NEbWciKS50ZXh0Q29udGVudCA9IDA7CiAgYm9zc05leHQoKTsKfQpmdW5jdGlvbiBib3NzTmV4dCgpIHsKICBjb25zdCBjYXJkcyA9IHNodWZmbGUoZ2FtZVBvb2woKSk7CiAgY29uc3QgY2FyZCA9IGNhcmRzWzBdOwogIGNvbnN0IG1vZGUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzKTsKICBsZXQgbGFiZWwsIHdvcmQsIGFuc3dlciwgb3B0czsKICBpZiAobW9kZSA9PT0gMCkgeyBsYWJlbCA9ICJUcmFuc2xhdGUgdG8gRW5nbGlzaCI7IHdvcmQgPSBjYXJkWzRdICsgIiAiICsgY2FyZFswXTsgYW5zd2VyID0gY2FyZFsyXTsgb3B0cyA9IGNhcmRzLnNsaWNlKDEsNCkubWFwKGMgPT4gY1syXSk7IHNheShjYXJkWzBdKTsgfQogIGVsc2UgaWYgKG1vZGUgPT09IDEpIHsgbGFiZWwgPSAiV2hpY2ggaXMgS29yZWFuIGZvcuKApiI7IHdvcmQgPSBjYXJkWzRdICsgIiAiICsgY2FyZFsyXTsgYW5zd2VyID0gY2FyZFswXTsgb3B0cyA9IGNhcmRzLnNsaWNlKDEsNCkubWFwKGMgPT4gY1swXSk7IH0KICBlbHNlIHsKICAgIGNvbnN0IGZpcnN0ID0gY2FyZFswXS5zcGxpdCgiICIpWzBdOwogICAgbGFiZWwgPSAiQ29tcGxldGU6ICIgKyBjYXJkWzZdOwogICAgd29yZCA9IGNhcmRbNV0ucmVwbGFjZShmaXJzdCwgIl9fX18iKTsKICAgIGFuc3dlciA9IGZpcnN0OyBvcHRzID0gY2FyZHMuc2xpY2UoMSw0KS5tYXAoYyA9PiBjWzBdLnNwbGl0KCIgIilbMF0pOwogIH0KICBYLmFuc3dlciA9IGFuc3dlcjsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc0xhYmVsIikudGV4dENvbnRlbnQgPSBsYWJlbDsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc1dvcmQiKS50ZXh0Q29udGVudCA9IHdvcmQ7CiAgY29uc3QgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NBbnN3ZXJzIik7CiAgYm94LmlubmVySFRNTCA9ICIiOwogIHNodWZmbGUoW2Fuc3dlciwgLi4ub3B0c10pLmZvckVhY2gobyA9PiB7CiAgICBjb25zdCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICBiLmNsYXNzTmFtZSA9ICJhbnMiOyBiLnRleHRDb250ZW50ID0gbzsKICAgIGIub25jbGljayA9IGV2ID0+IGJvc3NBbnN3ZXIoYiwgbyA9PT0gYW5zd2VyLCBldik7CiAgICBib3guYXBwZW5kQ2hpbGQoYik7CiAgfSk7Cn0KZnVuY3Rpb24gYm9zc0Fuc3dlcihidG4sIG9rLCBldikgewogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNib3NzQW5zd2VycyAuYW5zIikuZm9yRWFjaChiID0+IGIub25jbGljayA9IG51bGwpOwogIGNvbnN0IHNwcml0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzU3ByaXRlIik7CiAgaWYgKG9rKSB7CiAgICBYLmNvbWJvKys7IFgubWF4Q29tYm8gPSBNYXRoLm1heChYLm1heENvbWJvLCBYLmNvbWJvKTsKICAgIGNvbnN0IGRtZyA9IDEwICsgKFguY29tYm8gPj0gMyA/IDUgOiAwKTsKICAgIFguaHAgPSBNYXRoLm1heCgwLCBYLmhwIC0gZG1nKTsKICAgIFguZG1nICs9IGRtZzsgWC54cCArPSA0OwogICAgYnRuLmNsYXNzTGlzdC5hZGQoImNvcnJlY3QiKTsgc2Z4LmhpdCgpOwogICAgc3ByaXRlLmNsYXNzTGlzdC5hZGQoImhpdCIpOyBzZXRUaW1lb3V0KCgpID0+IHNwcml0ZS5jbGFzc0xpc3QucmVtb3ZlKCJoaXQiKSwgNDAwKTsKICAgIGZsb2F0RngoIi0iICsgZG1nICsgIiBIUCIsICIjQ0YyRTJFIiwgZXYuY2xpZW50WCwgZXYuY2xpZW50WSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9zc0hwIikuc3R5bGUud2lkdGggPSBYLmhwICsgIiUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJvc3NEbWciKS50ZXh0Q29udGVudCA9IFguZG1nOwogICAgaWYgKFguaHAgPD0gMCkgewogICAgICBzcHJpdGUudGV4dENvbnRlbnQgPSAi8J+SgCI7IFgueHAgKz0gMzA7CiAgICAgIGRhaWx5QnVtcCgiY29udm8iKTsKICAgICAgY29uc3Qgc3QgPSBsc3RhdGUoY3VyLm4pOwogICAgICBjb25zdCBmaXJzdFdpbiA9ICFzdC5zdGFycy5ib3NzOwogICAgICBzdC5zdGFycy5ib3NzID0gdHJ1ZTsgcGVyc2lzdCgpOwogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBzaG93UmVzdWx0KHsgZW1vamk6IuKalO+4jyIsIHRpdGxlOiBjdXIuYm9zc05hbWUgKyAiIGRlZmVhdGVkISIsCiAgICAgICAgICBzdWI6IGZpcnN0V2luID8gIuKtkCBCb3NzIHN0YXIgZWFybmVkISArMzAgWFAgYm9udXMiIDogIiszMCBYUCB2aWN0b3J5IGJvbnVzIiwKICAgICAgICAgIHNjb3JlOiBYLmRtZywgeHA6IFgueHAsIGNvbWJvOiBYLm1heENvbWJvLCByZXBsYXk6IHN0YXJ0Qm9zcyB9KTsKICAgICAgfSwgODAwKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0gZWxzZSB7CiAgICBYLmNvbWJvID0gMDsgWC5oZWFydHMtLTsKICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCJ3cm9uZyIpOyBzZnguYmFkKCk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjYm9zc0Fuc3dlcnMgLmFucyIpLmZvckVhY2goYiA9PiB7CiAgICAgIGlmIChiLnRleHRDb250ZW50ID09PSBYLmFuc3dlcikgYi5jbGFzc0xpc3QuYWRkKCJjb3JyZWN0Iik7CiAgICB9KTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3NzSGVhcnRzIikudGV4dENvbnRlbnQgPSAi4p2k77iPIi5yZXBlYXQoWC5oZWFydHMpICsgIvCflqQiLnJlcGVhdCgzIC0gWC5oZWFydHMpOwogICAgaWYgKFguaGVhcnRzIDw9IDApIHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgc2hvd1Jlc3VsdCh7IGVtb2ppOiLwn5i1IiwgdGl0bGU6IkRlZmVhdGVk4oCmIiwKICAgICAgICAgIHN1YjogY3VyLmJvc3NOYW1lICsgIiBoYWQgIiArIFguaHAgKyAiIEhQIGxlZnQuIFJldmlldyB0aGUgbGVzc29uIGFuZCByZXR1cm4hIiwKICAgICAgICAgIHNjb3JlOiBYLmRtZywgeHA6IE1hdGguZmxvb3IoWC54cCAvIDIpLCBjb21ibzogWC5tYXhDb21ibywgcmVwbGF5OiBzdGFydEJvc3MgfSk7CiAgICAgIH0sIDkwMCk7CiAgICAgIHJldHVybjsKICAgIH0KICB9CiAgc2V0VGltZW91dChib3NzTmV4dCwgb2sgPyA1MDAgOiAxMDAwKTsKfQoKcmVuZGVyTWFwKCk7IHJlbmRlckh1ZCgpOyByZW5kZXJTcGQoKTsKPC9zY3JpcHQ+CjwvZGl2Pg==
