hr {
  border: 1px dashed #ddd;
}
strong {
  font-weight: bold;
}
sup,
sub {
  font-size: 0.75em;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.2em;
}
small {
  font-size: 0.85em;
}
acronym,
abbr {
  border-bottom: 1px dotted;
}
ul,
ol,
dl {
  margin: 0 20px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-top: 0;
  margin-bottom: 0;
}
ul {
  list-style: disc;
}
ol {
  list-style: decimal;
}
dt {
  font-weight: bold;
}
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td {
  margin: 0;
  padding: 0;
  border: 0;
  outline: 0;
  font-weight: inherit;
  font-style: inherit;
  font-family: inherit;
  font-size: 100%;
  vertical-align: baseline;
}
body {
  line-height: 1;
  color: #000;
  background: #fff;
}
ol,
ul {
  list-style: none;
}
table {
  border-collapse: separate;
  border-spacing: 0;
  vertical-align: middle;
}
caption,
th,
td {
  text-align: left;
  font-weight: normal;
  vertical-align: middle;
}
a img {
  border: none;
}
html {
  font-size: 14px;
}
body {
  background-color: #fff;
  color: #222;
  font-family: -apple-system, BlinkMacSystemFont, Avenir, "Avenir Next", "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
  -webkit-font-smoothing: antialiased;
  line-height: 1.6rem;
}
a {
  position: relative;
  color: #222;
  text-decoration: none;
  -webkit-transition: color 0.2s ease;
  -moz-transition: color 0.2s ease;
  -ms-transition: color 0.2s ease;
  transition: color 0.2s ease;
}
a:hover {
  color: #db4d52;
}
#backToTop {
  position: fixed;
  z-index: 999;
  bottom: 2.285714285714286rem;
  left: 50%;
  margin-left: 52.285714285714285vw;
  background-color: #fff;
  width: 2.285714285714286rem;
  height: 2.285714285714286rem;
  -webkit-transition: all 0.2s ease-in-out;
  -moz-transition: all 0.2s ease-in-out;
  -ms-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-align: center;
  -moz-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  -webkit-box-pack: center;
  -moz-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  opacity: 0;
  cursor: pointer;
}
#backToTop.show {
  opacity: 1;
}
#backToTop:hover {
  -webkit-box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
  box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
}
#backToTop:hover .back-arrow-right {
  -webkit-transform: rotate(45deg) translate(-3px, 0px);
  -moz-transform: rotate(45deg) translate(-3px, 0px);
  -ms-transform: rotate(45deg) translate(-3px, 0px);
  transform: rotate(45deg) translate(-3px, 0px);
}
#backToTop:hover .back-arrow-left {
  -webkit-transform: rotate(-45deg) translate(3px, 0px);
  -moz-transform: rotate(-45deg) translate(3px, 0px);
  -ms-transform: rotate(-45deg) translate(3px, 0px);
  transform: rotate(-45deg) translate(3px, 0px);
}
#backToTop .back-arrow {
  background-color: #db4d52;
  width: 0.8rem;
  height: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -moz-transition: all 0.2s ease-in-out;
  -ms-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
}
#backToTop .back-arrow-right {
  -webkit-transform: rotate(30deg) translate(-2px, 0px);
  -moz-transform: rotate(30deg) translate(-2px, 0px);
  -ms-transform: rotate(30deg) translate(-2px, 0px);
  transform: rotate(30deg) translate(-2px, 0px);
}
#backToTop .back-arrow-left {
  -webkit-transform: rotate(-30deg) translate(2px, 0px);
  -moz-transform: rotate(-30deg) translate(2px, 0px);
  -ms-transform: rotate(-30deg) translate(2px, 0px);
  transform: rotate(-30deg) translate(2px, 0px);
}
.container {
  width: 92vw;
  max-width: 800px;
  margin: 0 auto;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
.container.home {
  padding: 0 10px;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-pack: distribute;
  -moz-box-pack: distribute;
  -ms-flex-pack: distribute;
  -webkit-justify-content: space-around;
  justify-content: space-around;
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 4.571428571428571rem;
}
@media screen and (max-width: 479px) {
  .container {
    width: 92%;
    padding: 0 0rem;
  }
}
.mag-date span.day {
  color: #f00;
}
.header {
  padding: 2.285714285714286rem 10px 2.285714285714286rem;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-pack: justify;
  -moz-box-pack: justify;
  -ms-flex-pack: justify;
  -webkit-justify-content: space-between;
  justify-content: space-between;
  -webkit-box-orient: vertical;
  -moz-box-orient: vertical;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-align: start;
  -moz-box-align: start;
  -ms-flex-align: start;
  -webkit-align-items: flex-start;
  align-items: flex-start;
  margin-bottom: 2.285714285714286rem;
  border-bottom: 1px dashed #ddd;
}
@media screen and (max-width: 479px) {
  .header {
    -webkit-box-orient: vertical;
    -moz-box-orient: vertical;
    -webkit-flex-direction: column;
    -ms-flex-direction: column;
    flex-direction: column;
    padding-bottom: 0;
    margin-bottom: 0;
  }
}
.header-left {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
}
.header-right {
  width: 100%;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  -webkit-box-pack: end;
  -moz-box-pack: end;
  -ms-flex-pack: end;
  -webkit-justify-content: flex-end;
  justify-content: flex-end;
  -webkit-box-align: end;
  -moz-box-align: end;
  -ms-flex-align: end;
  -webkit-align-items: flex-end;
  align-items: flex-end;
  -webkit-align-self: center;
  align-self: center;
  -ms-flex-item-align: center;
}
.header-rightul {
  display: inline-block;
}
@media screen and (max-width: 479px) {
  .header-right {
    padding: 1.2rem 0;
  }
}
.avatar {
  width: 4rem;
  height: 4rem;
  background-color: #fff;
  padding: 5px;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-align: center;
  -moz-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  -webkit-box-pack: center;
  -moz-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  overflow: hidden;
}
.avatar a {
  width: 100%;
  height: 100%;
  display: block;
}
.avatar img {
  width: 100%;
  height: 100%;
}
.author {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  margin-left: 1.142857142857143rem;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-orient: vertical;
  -moz-box-orient: vertical;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: justify;
  -moz-box-pack: justify;
  -ms-flex-pack: justify;
  -webkit-justify-content: space-between;
  justify-content: space-between;
  padding: 0.3rem 0;
}
.author-name {
  font-size: 2.285714285714286rem;
  font-weight: bold;
}
.about-me {
  color: #666;
}
.navigation:before,
.navigation:after {
  content: "";
  display: table;
}
.navigation:after {
  clear: both;
}
.navigation li {
  float: left;
  margin-left: 2rem;
}
.navigation li a {
  color: #999;
}
.navigation li a:after {
  display: none;
}
.navigation li a:hover {
  color: #db4d52;
}
footer {
  color: #999;
  font-size: 12px;
}
footer a {
  color: #222;
  font-weight: bold;
}
.rights {
  padding: 1.142857142857143rem 0;
}
.about-me-mask {
  position: fixed;
  background-color: rgba(255,255,255,0.48);
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  height: 100%;
  z-index: 1000;
  display: none;
}
.about-me-mask.open {
  display: block;
}
.about-me-wrap {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-orient: vertical;
  -moz-box-orient: vertical;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -moz-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  -webkit-box-align: center;
  -moz-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  width: 30rem;
  margin: 10rem auto;
  padding: 2.285714285714286rem 0;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 6px;
  -webkit-box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
  box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
}
@media screen and (max-width: 479px) {
  .about-me-wrap {
    width: auto;
    margin: 10rem 1rem;
  }
}
.about-me__header .avatar {
  border-radius: 50%;
  outline: 0;
  overflow: hidden;
  -webkit-box-shadow: 0 6px 10px rgba(0,0,0,0.07);
  box-shadow: 0 6px 10px rgba(0,0,0,0.07);
}
.socials {
  margin-top: 2rem;
}
.social-item {
  margin-bottom: 1rem;
}
@media screen and (max-width: 479px) {
  .social-item {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    width: 18rem;
  }
}
.social-item .label {
  width: 2rem;
  height: 2rem;
  display: inline-block;
  margin: 0 0.5rem;
  vertical-align: middle;
}
.social-item .label img {
  width: 100%;
  height: 100%;
}
.post {
  padding: 0;
}
.post .title {
  font-size: 2rem;
}
.post .content {
  margin: 1rem 0;
  padding: 1rem 1.142857142857143rem;
  border-top: 1px solid #eee;
  color: #222;
}
.post .content p {
  color: #222;
}
.post .tags {
  margin-top: 1rem;
}
.slide-hide {
  height: 0;
  -webkit-transition: all 1s ease-in-out;
  -moz-transition: all 1s ease-in-out;
  -ms-transition: all 1s ease-in-out;
  transition: all 1s ease-in-out;
}
.article {
  background-color: #fff;
  padding: 0 0 1.371428571428571rem;
  position: relative;
  margin-bottom: 2.285714285714286rem;
  margin-right: auto;
}
.article.mag-item {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-orient: horizontal;
  -moz-box-orient: horizontal;
  -webkit-flex-direction: row;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-pack: start;
  -moz-box-pack: start;
  -ms-flex-pack: start;
  -webkit-justify-content: flex-start;
  justify-content: flex-start;
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  gap: 20px;
  background: transparent;
}
.article.mag-item .mag-icon {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  overflow: hidden;
  background: #fff;
  position: relative;
  border: 5px solid #fff;
}
.article.mag-item .mag-icon img {
  width: 100%;
  position: absolute;
  border-radius: 50%;
  top: -50%;
  -webkit-transform: translateY(50%);
  -moz-transform: translateY(50%);
  -ms-transform: translateY(50%);
  transform: translateY(50%);
}
.article.mag-item .mag-content {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-orient: vertical;
  -moz-box-orient: vertical;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
  gap: 0px;
  -webkit-box-pack: distribute;
  -moz-box-pack: distribute;
  -ms-flex-pack: distribute;
  -webkit-justify-content: space-around;
  justify-content: space-around;
}
.article.mag-item .mag-content .mag-date {
  color: #666;
}
.article.mag-item .mag-content .mag-date span.day {
  color: #f00;
}
.home .article {
  -webkit-transition: all 0.6s ease;
  -moz-transition: all 0.6s ease;
  -ms-transition: all 0.6s ease;
  transition: all 0.6s ease;
  margin-bottom: 30px;
  padding: 8px;
  width: calc((100% - 30px) / 2);
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
@media (max-width: 767.9px) {
  .home .article {
    line-height: 2rem;
    width: calc((100% - 10px) / 1);
  }
}
@media (min-width: 768px) and (max-width: 991.98px) {
  .home .article {
    width: calc((100% - 10px) / 2);
  }
}
.home .article:hover {
  background: #feffef;
  -webkit-box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
  box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
}
.article.special {
  background: #fff9e8;
  -webkit-box-shadow: 0px 1px 3px #f6e8b7;
  box-shadow: 0px 1px 3px #f6e8b7;
}
.article img {
  max-width: 100%;
  display: block;
}
.article s,
.article strike,
.article del {
  color: #999;
}
.article u {
  text-decoration: none;
  position: relative;
}
.article u:after {
  position: absolute;
  content: ' ';
  bottom: 0;
  left: 0;
  width: 100%;
  height: 1px;
  background-color: #db4d52;
}
.article strong {
  font-weight: bold;
}
.article em,
.article cite {
  font-style: italic;
}
.article .checkbox-wrap {
  background-size: 80%;
  background-position: center;
  background-color: #fff;
  width: 1rem;
  height: 1rem;
  display: inline-block;
  padding: 1px;
  margin-right: 0.3rem;
  vertical-align: text-top;
  border-radius: 3px;
  border: 1px #d5bda0 solid;
}
.article .checkbox-wrap.checked {
  background-image: url("/images/check.svg");
  background-repeat: no-repeat;
}
.article .checkbox-wrap input {
  display: none;
}
.article .check-content.checked {
  text-decoration: line-through;
  color: #999;
}
.article #more {
  display: none;
}
.article dt {
  font-weight: bold;
}
.article ul {
  list-style: disc;
}
.article ol {
  list-style: decimal;
}
.article li {
  line-height: 2rem;
  margin-bottom: 1.142857142857143rem;
  margin-left: 1.142857142857143rem;
  padding-left: 0.2rem;
  color: #db4d52;
}
@media screen and (max-width: 479px) {
  .article li {
    font-size: 1.142857142857143rem;
  }
}
.article li .li-inner {
  color: #222;
}
.home .article li .li-inner {
  color: #999;
}
.article li .li-inner p {
  margin: 0;
}
.title {
  font-size: 18px;
  font-weight: bold;
  margin-bottom: 1.142857142857143rem;
  line-height: 1.6rem;
  padding: 1.142857142857143rem;
}
.home .title {
  display: block;
  font-size: 14px;
  background: transparent;
  padding: 0;
  margin-bottom: 0px;
}
@media screen and (max-width: 479px) {
  .post .title {
    line-height: 2.8rem;
    font-size: 1.6rem;
  }
}
.title:after {
  display: none;
}
.content p {
  line-height: 1.4rem;
  margin: 0rem 0;
  font-size: 1rem;
  color: #999;
}
@media screen and (max-width: 479px) {
  .content p {
    font-size: 1.142857142857143rem;
  }
}
.content h1,
.content h2,
.content h3,
.content h4,
.content h5,
.content h6 {
  font-weight: bold;
  line-height: 1.1rem;
  margin: 1.1rem 0;
}
.content h1 {
  font-size: 22px;
}
.content h2 {
  font-size: 20px;
}
.content h3 {
  font-size: 18px;
}
.content h4 {
  font-size: 16px;
}
.content h5 {
  font-size: 14px;
}
.content a {
  color: #db4d52;
}
.content a:before {
  content: '[';
  margin: 0 2px;
  color: #999;
}
.content a:after {
  content: ']';
  margin: 0 2px;
  color: #999;
}
.content a.headerlink:after,
.content a.fancybox:after,
.content a.headerlink:before,
.content a.fancybox:before {
  display: none;
}
.nav {
  margin-bottom: 4.571428571428571rem;
}
.nav li {
  position: relative;
  color: #999;
  margin-bottom: 1.142857142857143rem;
  line-height: 1.8rem;
}
.nav li a {
  color: #db4d52;
}
.nav li a:before {
  content: '[';
  margin: 0 2px;
  color: #999;
}
.nav li a:after {
  content: ']';
  margin: 0 2px;
  color: #999;
}
.nav li:before {
  content: ' ';
  display: inline-block;
  vertical-align: middle;
  left: -gutter-size;
  background-color: #db4d52;
  width: 4px;
  height: 4px;
  border-radius: 2px;
  margin-right: 1.142857142857143rem;
}
.excerpt {
  color: #222;
  margin: 1.142857142857143rem 0;
}
.price {
  color: #222;
  margin: 1.142857142857143rem 0;
  position: absolute;
  top: 0;
  right: 1rem;
  font-size: 1.2rem;
  font-weight: bold;
  color: #f85d03;
  -webkit-transition: all 0.6s ease;
  -moz-transition: all 0.6s ease;
  -ms-transition: all 0.6s ease;
  transition: all 0.6s ease;
}
.price:before {
  content: "￥";
  font-size: 0.6rem;
  font-weight: normal;
  color: #999;
}
.price.USD:before {
  content: "$";
  font-size: 0.6rem;
  font-weight: normal;
  color: #999;
}
.price.EURO:before {
  content: "€";
  font-size: 0.6rem;
  font-weight: normal;
  color: #999;
}
@media screen and (max-width: 479px) {
  .price {
    position: initial;
    padding: 0 1.371428571428571rem;
  }
}
.article-header {
  padding: 0 1.371428571428571rem;
}
.article-header .desc {
  color: #666;
}
.article-footer {
  margin-top: 1rem;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-pack: justify;
  -moz-box-pack: justify;
  -ms-flex-pack: justify;
  -webkit-justify-content: space-between;
  justify-content: space-between;
  padding: 0 1.371428571428571rem;
}
@media screen and (max-width: 479px) {
  .article-footer {
    -webkit-box-pack: start;
    -moz-box-pack: start;
    -ms-flex-pack: start;
    -webkit-justify-content: flex-start;
    justify-content: flex-start;
    -webkit-box-orient: vertical;
    -moz-box-orient: vertical;
    -webkit-flex-direction: column;
    -ms-flex-direction: column;
    flex-direction: column;
  }
}
.post .desc {
  margin-top: 1rem;
  padding: 0 1.142857142857143rem;
}
.post .registration {
  padding: 5px 1.142857142857143rem;
  background: #eee;
}
.date {
  color: #999;
  margin-bottom: 1.142857142857143rem;
}
.home .date {
  margin-bottom: 0;
}
.excerpt-link {
  font-size: 1rem;
}
.home .tags {
  margin-bottom: 0;
}
.post .tags {
  padding: 0 1.142857142857143rem;
}
.tag-link {
  background-color: #d5bda0;
  color: #fff;
  line-height: 22px;
  padding: 0 0.6rem;
  display: inline-block;
  border-radius: 12px;
  margin-right: 0.5rem;
  font-size: 12px;
}
.tag-link:last-child {
  margin-right: 0;
}
.tag-link:hover {
  color: #fff;
}
.tag-link:before {
  content: '#';
  color: #fff1d9;
  margin-right: 0.2rem;
}
.container.tag {
  padding: 1rem;
}
.container.tag .title {
  font-size: 2rem;
}
.container.tag .tags {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-orient: horizontal;
  -moz-box-orient: horizontal;
  -webkit-flex-direction: row;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-box-pack: justify;
  -moz-box-pack: justify;
  -ms-flex-pack: justify;
  -webkit-justify-content: space-between;
  justify-content: space-between;
  gap: 10px;
}
.container.tag .tags a.link {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 1 0 auto;
  -ms-flex: 1 0 auto;
  flex: 1 0 auto;
  min-width: 64px;
  background: #fff;
  border: none;
  -webkit-box-shadow: 0px 1px 3px rgba(50,50,50,0.02);
  box-shadow: 0px 1px 3px rgba(50,50,50,0.02);
  text-align: center;
  font-size: 16.8px;
  padding: 1rem 1.2rem;
}
.tag_title {
  font-size: 2rem;
}
.archives {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
.post-archive {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  margin: 1.142857142857143rem 0;
  -webkit-flex-basis: 50%;
  flex-basis: 50%;
}
@media screen and (max-width: 479px) {
  .post-archive {
    -webkit-flex-basis: 100%;
    flex-basis: 100%;
  }
}
@media screen and (min-width: 768px) {
  .post-archive:nth-child(2n + 1) {
    padding-right: 1rem;
  }
  .post-archive:nth-child(2n) {
    padding-left: 1rem;
  }
}
.post-archive__content {
  background-color: #fff;
  padding: 1.142857142857143rem;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  line-height: 1.6rem;
  -webkit-transition: all 0.6s ease;
  -moz-transition: all 0.6s ease;
  -ms-transition: all 0.6s ease;
  transition: all 0.6s ease;
}
.post-archive__content:hover {
  -webkit-box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
  box-shadow: 0px 10px 20px rgba(0,0,0,0.07);
}
.post-archive__month {
  color: #d5bda0;
  -webkit-flex-basis: 3rem;
  flex-basis: 3rem;
  -webkit-flex-shrink: 0;
  flex-shrink: 0;
}
.post-archive__body {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -ms-box-flex: 1;
  box-flex: 1;
  -webkit-flex-grow: 1;
  flex-grow: 1;
  overflow: hidden;
}
.post-archive__title {
  font-size: 1rem;
  font-weight: bold;
  margin-bottom: 0.2rem;
  display: block;
}
.post-archive__excerpt {
  color: #999;
  height: 3rem;
  overflow: hidden;
  position: relative;
}
.post-archive__excerpt-content {
  position: absolute;
  width: 100%;
}
.article pre,
.article .highlight {
  background: #fff;
  margin: 0 0 20px 0;
  padding: 12px 16px;
  border-radius: 6px;
  overflow: auto;
  font-size: 12px;
  color: #24292e;
  line-height: 1.8;
  border: 1px solid #e5e5e5;
}
@media screen and (max-width: 479px) {
  .article pre,
  .article .highlight {
    line-height: 1.6;
  }
}
.article .highlight .gutter pre,
.article .gist .gist-file .gist-data .line-numbers {
  color: #666;
}
.article code {
  color: #222;
  background-color: #fff;
  border: 1px #e6e6e6 solid;
  font-size: 12px;
}
.article blockquote {
  border-left: 3px solid #db4d52;
  padding: 16px 20px;
  margin: 10px 0;
  background: #fff;
  line-height: 1.8;
}
.article blockquote p {
  margin: 0;
}
.article table {
  width: 100%;
  border: 1px solid #ddd;
  border-collapse: collapse;
}
.article table th {
  background-color: rgba(229,229,229,0.28);
}
.article table th,
.article table td {
  border: 1px solid #ddd;
  padding: 0.75rem;
}
.article table p {
  margin: 0;
}
.article pre,
.article code {
  font-family: "fira mono", Consolas, Menlo, Consolas, monospace;
}
.article code {
  padding: 0.3em 0.5em;
  margin: 0 0.2em;
  border-radius: 2px;
}
.article pre code {
  background: none;
  text-shadow: none;
  padding: 0;
}
.article .highlight pre {
  border: none;
  margin: 0;
  padding: 0;
}
.article .highlight table {
  margin: 0;
  padding: 0;
  border: 0;
  width: auto;
}
.article .highlight td {
  border: none;
  padding: 0;
}
.article .highlight figcaption {
  font-size: 0.85em;
  color: #959da5;
  line-height: 1em;
  margin-bottom: 1em;
}
.article .highlight figcaption:before,
.article .highlight figcaption:after {
  content: "";
  display: table;
}
.article .highlight figcaption:after {
  clear: both;
}
.article .highlight figcaption a {
  float: right;
}
.article .highlight .gutter {
  display: none;
}
.article .highlight .gutter pre {
  text-align: right;
  padding-right: 20px;
}
.article .highlight .line {
  line-height: 1.8;
  font-size: 12px;
}
@media screen and (max-width: 479px) {
  .article .highlight .line {
    line-height: 1.6;
    font-size: 12px;
  }
}
.article .gist {
  margin: 20px 0;
  border-style: solid;
  border-color: $baseBorderColor;
  border-width: 1px 0;
  background: #fff;
  padding: 15px article-padding 15px 15px;
}
.article .gist .gist-file {
  border: none;
  font-family: $font-en;
  margin: 0;
}
.article .gist .gist-file .gist-data {
  background: none;
  border: none;
}
.article .gist .gist-file .gist-data .line-numbers {
  background: none;
  border: none;
  padding: 0 20px 0 0;
}
.article .gist .gist-file .gist-data .line-data {
  padding: 0 !important;
}
.article .gist .gist-file .highlight {
  margin: 0;
  padding: 0;
  border: none;
}
.article .gist .gist-file .gist-meta {
  background: #fff;
  color: #959da5;
  font: 13px $font-zh;
  text-shadow: 0 0;
  padding: 0;
  margin-top: 1em;
  margin-left: article-padding;
}
.article .gist .gist-file .gist-meta a {
  color: #db4d52;
  font-weight: normal;
}
.article .gist .gist-file .gist-meta a:hover {
  text-decoration: underline;
}
pre .comment {
  color: #959da5;
}
pre .variable,
pre .attribute,
pre .tag,
pre .regexp,
pre .ruby .constant,
pre .xml .tag .title,
pre .xml .pi,
pre .xml .doctype,
pre .html .doctype,
pre .css .id,
pre .css .class,
pre .css .pseudo {
  color: #d73a49;
}
pre .number,
pre .preprocessor,
pre .built_in,
pre .literal,
pre .params,
pre .constant {
  color: #e36209;
}
pre .ruby .class .title,
pre .css .rules .attribute {
  color: #009688;
}
pre .string {
  color: #539afc;
}
pre .value,
pre .inheritance,
pre .header,
pre .ruby .symbol,
pre .xml .cdata {
  color: #009688;
}
pre .title {
  font-size: 12px !important;
  margin: 0 !important;
}
pre .title,
pre .css .hexcolor {
  color: #70c0b1;
}
pre .function,
pre .python .decorator,
pre .python .title,
pre .ruby .function .title,
pre .ruby .title .keyword,
pre .perl .sub,
pre .javascript .title,
pre .coffeescript .title {
  color: #539afc;
}
pre .keyword,
pre .javascript .function {
  color: #009688;
}
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lcy9tYWdkYXkvc291cmNlL3N0eWxlcy9fZXh0ZW5kLnN0eWwiLCJub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvYm9yZGVyLnN0eWwiLCJub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvdmVuZG9yLnN0eWwiLCJub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvcmVzZXQuc3R5bCIsInRoZW1lcy9tYWdkYXkvc291cmNlL3N0eWxlcy9zaXRlLnN0eWwiLCJub2RlX21vZHVsZXMvc3R5bHVzL2xpYi9mdW5jdGlvbnMvaW5kZXguc3R5bCIsIm5vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9mbGV4LnN0eWwiLCJ0aGVtZXMvbWFnZGF5L3NvdXJjZS9zdHlsZXMvX3BhcnRpYWwvaGVhZGVyLnN0eWwiLCJub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvb3ZlcmZsb3cuc3R5bCIsIm5vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9jbGVhcmZpeC5zdHlsIiwidGhlbWVzL21hZ2RheS9zb3VyY2Uvc3R5bGVzL19wYXJ0aWFsL2Zvb3Rlci5zdHlsIiwidGhlbWVzL21hZ2RheS9zb3VyY2Uvc3R5bGVzL19wYXJ0aWFsL2Fib3V0bWUuc3R5bCIsIm5vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9ib3JkZXItcmFkaXVzLnN0eWwiLCJ0aGVtZXMvbWFnZGF5L3NvdXJjZS9zdHlsZXMvX3BhcnRpYWwvYXJ0aWNsZS5zdHlsIiwidGhlbWVzL21hZ2RheS9zb3VyY2Uvc3R5bGVzL19wYXJ0aWFsL3RhZy5zdHlsIiwidGhlbWVzL21hZ2RheS9zb3VyY2Uvc3R5bGVzL19wYXJ0aWFsL2FyY2hpdmUuc3R5bCIsInRoZW1lcy9tYWdkYXkvc291cmNlL3N0eWxlcy9fcGFydGlhbC9oaWdobGlnaHQuc3R5bCIsInRoZW1lcy9tYWdkYXkvc291cmNlL3N0eWxlcy9fcGFydGlhbC90aGVtZS5zdHlsIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNFO0VDUUUsUUFBUSxnQkFBUjs7QURORjtFQUNF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QUFDRjtFQUNFLFdBQVUsZ0JBQVY7RUFDQSxRQUFPLGFBQVA7O0FBQ0Y7QUFDQTtFQUNFLE9BQU8sUUFBUDs7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsT0FBTyxRQUFQOztBQUNGO0FBQ0E7RUFDRSxPQUFPLFFBQVAiLCJmaWxlIjoic2l0ZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJcbiAgaHJcbiAgICBib3JkZXI6IDFweCBkYXNoZWQgY29sb3ItYm9yZGVyXG4gIHN0cm9uZ1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG5cbiAgc3VwLCBzdWJcbiAgICBmb250LXNpemU6IDAuNzVlbVxuICAgIGxpbmUtaGVpZ2h0OiAwXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lXG4gIHN1cFxuICAgIHRvcDogLTAuNWVtXG4gIHN1YlxuICAgIGJvdHRvbTogLTAuMmVtXG4gIHNtYWxsXG4gICAgZm9udC1zaXplOiAwLjg1ZW1cbiAgYWNyb255bSwgYWJiclxuICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWRcbiAgdWwsIG9sLCBkbFxuICAgIG1hcmdpbjogMCAyMHB4XG4gIHVsLCBvbFxuICAgIHVsLCBvbFxuICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgbWFyZ2luLWJvdHRvbTogMFxuICB1bFxuICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgb2xcbiAgICBsaXN0LXN0eWxlOiBkZWNpbWFsXG4gIGR0XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQiLCIvKlxuICogYm9yZGVyOiA8Y29sb3I+XG4gKiBib3JkZXI6IC4uLlxuICovXG5cbmJvcmRlcihjb2xvciwgYXJncy4uLilcbiAgaWYgY29sb3IgaXMgYSAnY29sb3InXG4gICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IgYXJnc1xuICBlbHNlXG4gICAgYm9yZGVyOiBhcmd1bWVudHNcbiIsInVzZSgnLi4vbm9kZXMvdmVuZG9yLWhlbHBlcnMuanMnKVxuQGltcG9ydCAnY29uZmlnJ1xuXG4vKlxuICogQWxpYXMgXCJub3dyYXBcIiBhcyBcIm5vLXdyYXBcIi5cbiAqL1xuXG5uby13cmFwID0gdW5xdW90ZSgnbm93cmFwJylcblxuLypcbiAqIEhlbHBlciB0byBmaW5kIG91dCBpZiBhIGdpdmVuIHZhbHVlIGlzIGEgd2lkdGhcbiAqL1xuXG5pcy13aWR0aCh2YWwpXG4gIGlmIGF1dG8gPT0gdmFsXG4gICAgcmV0dXJuIHRydWVcbiAgZWxzZSBpZiB2YWwgJiYgJ3VuaXQnID09IHR5cGUodmFsKVxuICAgIC8vIFN0eWx1cyBkb2VzIG5vdCBzaG9ydCBjaXJjdWl0IHNvIHdlIG5lZWQgdG8gcGVyZm9ybSB0aGlzIGFzIGEgZGlzdGluY3RcbiAgICAvLyBvcGVyYXRpb24gdG8gcHJldmVudCBlcnJvcnNcbiAgICByZXR1cm4gJycgIT0gdW5pdCh2YWwpXG4gIHJldHVybiBmYWxzZVxuXG4vKlxuICogVmVuZG9yIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBwcm9wIC8gYXJndW1lbnRzLCBvcHRpb25hbGx5IHNwZWNpZnlpbmcgdGhlXG4gKiBvbmx5IHByZWZpeGVzIHRvIHV0aWxpemUsIG9yIHRob3NlIHdoaWNoIHNob3VsZCBiZSBpZ25vcmVkLlxuICovXG5cbnZlbmRvcihwcm9wLCBhcmdzLCBvbmx5ID0gbnVsbCwgaWdub3JlID0gbnVsbCwgdmVuZG9yLXByb3BlcnR5ID0gdHJ1ZSlcbiAgbmVlZF9ub3JtYWxpemUgPSAhdmVuZG9yLXByb3BlcnR5IG9yIHByb3AgaW4gKCd0cmFuc2l0aW9uJyAndHJhbnNpdGlvbi1wcm9wZXJ0eScgJ2JvcmRlci1pbWFnZScgJ2JvcmRlci1pbWFnZS1zbGljZScpXG4gIGZvciBwcmVmaXggaW4gdmVuZG9yLXByZWZpeGVzXG4gICAgdW5sZXNzIChvbmx5IGFuZCAhKHByZWZpeCBpbiBvbmx5KSkgb3IgKGlnbm9yZSBhbmQgcHJlZml4IGluIGlnbm9yZSlcbiAgICAgIGlmIG9mZmljaWFsID09IHByZWZpeFxuICAgICAgICBpZiBuZWVkX25vcm1hbGl6ZVxuICAgICAgICAgIHtwcm9wfTogbm9ybWFsaXplKHByb3AsKCclcycgJSBhcmdzKSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHtwcm9wfTogYXJnc1xuICAgICAgZWxzZVxuICAgICAgICBuZXdwcm9wID0gcHJvcFxuICAgICAgICBuZXdwcm9wID0gJy0nICsgcHJlZml4ICsgJy0nICsgcHJvcCBpZiB2ZW5kb3ItcHJvcGVydHlcblxuICAgICAgICBpZiBuZWVkX25vcm1hbGl6ZVxuICAgICAgICAgIHtuZXdwcm9wfTogbm9ybWFsaXplKHByb3AsKCclcycgJSBhcmdzKSxwcmVmaXgpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7bmV3cHJvcH06IGFyZ3Ncbi8qXG4gKiBWZW5kb3JpemUgdGhlIGdpdmVuIHZhbHVlLlxuICovXG5cbnZlbmRvci12YWx1ZShhcmcsIG9ubHkgPSBudWxsLCBpZ25vcmUgPSBudWxsKVxuICBwcm9wID0gY3VycmVudC1wcm9wZXJ0eVswXVxuICBmb3IgcHJlZml4IGluIHZlbmRvci1wcmVmaXhlc1xuICAgIHVubGVzcyAob25seSBhbmQgIShwcmVmaXggaW4gb25seSkpIG9yIChpZ25vcmUgYW5kIHByZWZpeCBpbiBpZ25vcmUpIG9yIG9mZmljaWFsID09IHByZWZpeFxuICAgICAgYWRkLXByb3BlcnR5KHByb3AsICctJXMtJXMnICUgKHByZWZpeCBhcmcpKVxuICBhcmdcblxuLypcbiAqIFZlbmRvciBcImJveC1zaGFkb3dcIiBzdXBwb3J0LlxuICovXG5cbmJveC1zaGFkb3coKVxuICB2ZW5kb3IoJ2JveC1zaGFkb3cnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcInVzZXItc2VsZWN0XCIgc3VwcG9ydC5cbiAqL1xuXG51c2VyLXNlbGVjdCgpXG4gIHZlbmRvcigndXNlci1zZWxlY3QnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tY291bnRcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1jb3VudCgpXG4gIHZlbmRvcignY29sdW1uLWNvdW50JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLWdhcFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWdhcCgpXG4gIHZlbmRvcignY29sdW1uLWdhcCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZSgpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZS1jb2xvclwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUtY29sb3IoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlLWNvbG9yJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGUtd2lkdGhcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlLXdpZHRoKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZS13aWR0aCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlLXN0eWxlXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZS1zdHlsZSgpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUtc3R5bGUnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4td2lkdGhcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi13aWR0aCgpXG4gIHZlbmRvcignY29sdW1uLXdpZHRoJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXNwYW5cIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1zcGFuKClcbiAgdmVuZG9yKCdjb2x1bW4tc3BhbicsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLWZpbGxcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1maWxsKClcbiAgdmVuZG9yKCdjb2x1bW4tZmlsbCcsIGFyZ3VtZW50cywgb25seTogbW96IG9mZmljaWFsKVxuXG4vKlxuICogTGVnYWN5IHN5bnRheCBzdXBwb3J0IGZvciBiYWNrZ3JvdW5kLWNsaXAgYW5kIGJhY2tncm91bmQtb3JpZ2luXG4gKi9cblxubGVnYWN5LWJnLXZhbHVlcyhwcm9wZXJ0eSwgYXJncylcbiAgbGVnYWN5X2FyZ3MgPSAoKVxuICBpbXBvcnRhbmNlID0gdW5xdW90ZSgnJylcbiAgZm9yIHN1YmFyZ3MgaW4gYXJnc1xuICAgIGZvciBhcmcgaW4gc3ViYXJnc1xuICAgICAgaWYgYXJnIGluIChib3JkZXItYm94IHBhZGRpbmctYm94IGNvbnRlbnQtYm94KVxuICAgICAgICBhcmcgPSB1bnF1b3RlKCdib3JkZXInKSAgaWYgYXJnID09IGJvcmRlci1ib3hcbiAgICAgICAgYXJnID0gdW5xdW90ZSgncGFkZGluZycpIGlmIGFyZyA9PSBwYWRkaW5nLWJveFxuICAgICAgICBhcmcgPSB1bnF1b3RlKCdjb250ZW50JykgaWYgYXJnID09IGNvbnRlbnQtYm94XG4gICAgICBpZiBhcmcgIT0gJyFpbXBvcnRhbnQnXG4gICAgICAgIHB1c2gobGVnYWN5X2FyZ3MsYXJnKVxuICAgICAgZWxzZVxuICAgICAgICBpbXBvcnRhbmNlID0gIWltcG9ydGFudFxuICB2ZW5kb3IocHJvcGVydHksIHVucXVvdGUoam9pbignLCAnLGxlZ2FjeV9hcmdzKSkgaW1wb3J0YW5jZSwgb25seTogbW96IHdlYmtpdClcblxuLypcbiAqIFZlbmRvciBcImJhY2tncm91bmQtY2xpcFwiIHN1cHBvcnQuXG4gKi9cblxuYmFja2dyb3VuZC1jbGlwKClcbiAgaWYgYXJndW1lbnRzWzBdID09IHRleHRcbiAgICB2ZW5kb3IoJ2JhY2tncm91bmQtY2xpcCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0KVxuICBlbHNlXG4gICAgbGVnYWN5LWJnLXZhbHVlcygnYmFja2dyb3VuZC1jbGlwJywgYXJndW1lbnRzKVxuICAgIGJhY2tncm91bmQtY2xpcDogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZ3JvdW5kLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cblxuYmFja2dyb3VuZC1vcmlnaW4oKVxuICBsZWdhY3ktYmctdmFsdWVzKCdiYWNrZ3JvdW5kLW9yaWdpbicsIGFyZ3VtZW50cylcbiAgYmFja2dyb3VuZC1vcmlnaW46IGFyZ3VtZW50c1xuXG4vKlxuICogVmVuZG9yIFwidHJhbnNmb3JtXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2Zvcm0oKVxuICB2ZW5kb3IoJ3RyYW5zZm9ybScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zZm9ybS1vcmlnaW5cIiBzdXBwb3J0LlxuICovXG50cmFuc2Zvcm0tb3JpZ2luKClcbiAgICB2ZW5kb3IoJ3RyYW5zZm9ybS1vcmlnaW4nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2Zvcm0tc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zZm9ybS1zdHlsZSgpXG4gIHZlbmRvcigndHJhbnNmb3JtLXN0eWxlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYm9yZGVyLWltYWdlXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3JkZXItaW1hZ2UoKVxuICB2ZW5kb3IoJ2JvcmRlci1pbWFnZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvblwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbigpXG4gIHZlbmRvcigndHJhbnNpdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tcHJvcGVydHlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tcHJvcGVydHkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tcHJvcGVydHknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2l0aW9uLWR1cmF0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tZGVsYXlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tZGVsYXkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZmFjZS12aXNpYmlsaXR5KClcbiAgdmVuZG9yKCdiYWNrZmFjZS12aXNpYmlsaXR5JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwicGVyc3BlY3RpdmVcIiBzdXBwb3J0LlxuICovXG5cbnBlcnNwZWN0aXZlKClcbiAgaWYgbWl4aW5cbiAgICB2ZW5kb3IoJ3BlcnNwZWN0aXZlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuICBlbHNlXG4gICAgJ3BlcnNwZWN0aXZlKCVzKScgJSBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcInBlcnNwZWN0aXZlLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cblxucGVyc3BlY3RpdmUtb3JpZ2luKClcbiAgdmVuZG9yKCdwZXJzcGVjdGl2ZS1vcmlnaW4nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBPcGFjaXR5IHdpdGggY29uZGl0aW9uYWwgSUUgc3VwcG9ydC5cbiAqL1xuXG5vcGFjaXR5KG4sIGFyZ3MuLi4pXG4gIG9wYWNpdHk6IG4gYXJnc1xuICBpZiBzdXBwb3J0LWZvci1pZVxuICAgIGlmIG4gPT0gaW5oZXJpdCBvciBuID09IGluaXRpYWxcbiAgICAgIC1tcy1maWx0ZXI6IG4gYXJnc1xuICAgICAgZmlsdGVyOiBuIGFyZ3NcbiAgICBlbHNlXG4gICAgICB2YWwgPSByb3VuZChuICogMTAwKVxuICAgICAgaWYgdmFsID09IDEwMFxuICAgICAgICAtbXMtZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgICAgZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgIGVsc2VcbiAgICAgICAgLW1zLWZpbHRlcjogJ1wicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JXMpXCInICUgdmFsIGFyZ3NcbiAgICAgICAgZmlsdGVyOiAnYWxwaGEob3BhY2l0eT0lcyknICUgdmFsIGFyZ3NcblxuLypcbiAqIFZlbmRvciBcInRleHQtc2l6ZS1hZGp1c3RcIlxuICovXG5cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBBbGlhcyB0aGUgXCJ3aGl0ZS1zcGFjZVwiIHByb3BlcnR5LlxuICovXG5cbndoaXRlc3BhY2UoKVxuICB3aGl0ZS1zcGFjZTogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtc2l6aW5nXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtc2l6aW5nKClcbiAgdmVuZG9yKCdib3gtc2l6aW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LW9yaWVudFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yaWVudCgpXG4gIHZlbmRvcignYm94LW9yaWVudCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1mbGV4LWdyb3VwXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtZmxleC1ncm91cCgpXG4gIHZlbmRvcignYm94LWZsZXgtZ3JvdXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtb3JkaW5hbC1ncm91cFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yZGluYWwtZ3JvdXAoKVxuICB2ZW5kb3IoJ2JveC1vcmRpbmFsLWdyb3VwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtYWxpZ25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1hbGlnbigpXG4gIHZlbmRvcignYm94LWFsaWduJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LXBhY2tcIiBzdXBwb3J0LlxuICovXG5cbmJveC1wYWNrKClcbiAgdmVuZG9yKCdib3gtcGFjaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1kaXJlY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1kaXJlY3Rpb24oKVxuICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uJywgYXJndW1lbnRzKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tbmFtZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLW5hbWUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1uYW1lJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZHVyYXRpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kdXJhdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1kZWxheVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWRlbGF5KClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZGlyZWN0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZGlyZWN0aW9uKClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGlyZWN0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLXBsYXktc3RhdGUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWZpbGwtbW9kZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWZpbGwtbW9kZScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImh5cGhlbnNcIiBzdXBwb3J0LlxuICovXG5cbmh5cGhlbnMoKVxuICB2ZW5kb3IoJ2h5cGhlbnMnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhcHBlYXJhbmNlXCIgc3VwcG9ydC5cbiAqL1xuXG5hcHBlYXJhbmNlKClcbiAgdmVuZG9yKCdhcHBlYXJhbmNlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidGFiLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbnRhYi1zaXplKClcbiAgdmVuZG9yKCd0YWItc2l6ZScsIGFyZ3VtZW50cywgb25seTogbW96IG8gb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJvdmVyZmxvdy1zY3JvbGxpbmdcIiBzdXBwb3J0LlxuICovXG5cbm92ZXJmbG93LXNjcm9sbGluZygpXG4gIHZlbmRvcignb3ZlcmZsb3ctc2Nyb2xsaW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0ZXh0LW92ZXJmbG93XCIgc3VwcG9ydCwgLCAtby0gZm9yIG9wZXJhIDkuKiAtIDEwLipcbiAqL1xuXG50ZXh0LW92ZXJmbG93KClcbiAgdmVuZG9yKCd0ZXh0LW92ZXJmbG93JywgYXJndW1lbnRzLCBvbmx5OiBvZmZpY2lhbCBvKVxuXG4vKlxuICogVmVuZG9yIFwidGV4dC1zaXplLWFkanVzdFwiIHN1cHBvcnQuXG4gKi9cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMsIG9ubHk6IG9mZmljaWFsIHdlYmtpdCBtcylcblxuLypcbiAqIFZlbmRvciBcImZvbnQtc21vb3RoaW5nXCIgc3VwcG9ydCwgd2Via2l0IG9ubHkuXG4gKi9cbmZvbnQtc21vb3RoaW5nKClcbiAgdmVuZG9yKCdmb250LXNtb290aGluZycsIGFyZ3VtZW50cywgb25seTogd2Via2l0KVxuXG5cbi8qKlxuICogVmVuZG9yIGlucHV0LXBsYWNlaG9sZGVyL3BsYWNlaG9sZGVyIHN1cHBvcnQuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgICAvLyBEZWZhdWx0IHN5bnRheFxuICogICAgYm9keVxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciAjMzMzLCBmb250LXdlaWdodCBub3JtYWwpXG4gKlxuICogICAgLy8gVGhlIGNvbW1hIGlzIGltcG9ydGFudFxuICogICAgLnBsYWNlaG9sZGVyLXJlZFxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciByZWQsKVxuICpcbiAqICAgIC8vIFdlIGNhbiBwYXNzIGEgZnVuY3Rpb25cbiAqICAgIGdyZWVuLXBsYWNlaG9sZGVyKClcbiAqICAgICAgY29sb3IgZ3JlZW5cbiAqICAgIC5wbGFjZWhvbGRlci1ncmVlblxuICogICAgICBwbGFjZWhvbGRlcihncmVlbi1wbGFjZWhvbGRlcilcbiAqXG4gKiAgICAvLyBXZSBjYW4gcGFzcyBhIGhhc2hcbiAqICAgIHRleHRhcmVhXG4gKiAgICAgIHBsYWNlaG9sZGVyKChmb250LXN0eWxlIGl0YWxpYykgKGZvbnQtd2VpZ2h0IGJvbGQpIChwYWRkaW5nICc0cHggMTBweCcpKVxuICovXG5wbGFjZWhvbGRlcigpXG4gIGZvciB2IGluICc6LXdlYmtpdC1pbnB1dCcgJy1tb3onICc6LW1veicgJy1tcy1pbnB1dCdcbiAgICAmOnt2fS1wbGFjZWhvbGRlclxuICAgICAgZm9yIHBhaXIgaW4gYXJndW1lbnRzXG4gICAgICAgIGlmIHR5cGVvZihwYWlyKSA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgcGFpcigpXG4gICAgICAgIGVsc2UgaWYgcGFpciBpcyBub3QgbnVsbCAmJiBwYWlyWzBdIGlzIG5vdCBudWxsXG4gICAgICAgICAge3BhaXJbMF19OiB0eXBlKHBhaXJbMV0pID09ICdzdHJpbmcnID8gcyhwYWlyWzFdKSA6IHBhaXJbMV1cbmlucHV0LXBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJcblxuLypcbiAqIFZlbmRvciBiYWNrZ3JvdW5kIHN1cHBvcnQgKGdyYWRpZW50cykuXG4gKi9cblxuYmFja2dyb3VuZCgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZCBhcmd1bWVudHNcblxuYmFja2dyb3VuZC1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZC1pbWFnZSBhcmd1bWVudHNcblxuY3Vyc29yKClcbiAgaWYgbWF0Y2goJy1ncmFkaWVudFxcKCcsICcnK2FyZ3VtZW50cylcbiAgICB2ZW5kb3IoJ2N1cnNvcicsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGN1cnNvciBhcmd1bWVudHNcblxubGlzdC1zdHlsZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZSBhcmd1bWVudHNcblxubGlzdC1zdHlsZS1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZS1pbWFnZSBhcmd1bWVudHNcbiIsIi8vIEJhc2VkIG9uIFtFcmljIE1leWVyJ3MgcmVzZXRdKGh0dHA6Ly9tZXllcndlYi5jb20vZXJpYy90aG91Z2h0cy8yMDA3LzA1LzAxL3Jlc2V0LXJlbG9hZGVkLylcblxuZ2xvYmFsLXJlc2V0KClcbiAgaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxuICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLCBibG9ja3F1b3RlLCBwcmUsXG4gIGEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSxcbiAgZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxuICBzbWFsbCwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0dCwgdmFyLFxuICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLFxuICBmaWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcbiAgdGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGRcbiAgICByZXNldC1ib3gtbW9kZWwoKVxuICAgIHJlc2V0LWZvbnQoKVxuICBib2R5XG4gICAgcmVzZXQtYm9keSgpXG4gIG9sLCB1bFxuICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgdGFibGVcbiAgICByZXNldC10YWJsZSgpXG4gIGNhcHRpb24sIHRoLCB0ZFxuICAgIHJlc2V0LXRhYmxlLWNlbGwoKVxuICBhIGltZ1xuICAgIGJvcmRlcjogbm9uZVxuXG5uZXN0ZWQtcmVzZXQoKVxuICBkaXYsIHNwYW4sIG9iamVjdCwgaWZyYW1lLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLFxuICBwcmUsIGEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGNvZGUsIGRlbCwgZGZuLCBlbSwgaW1nLFxuICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLCBmaWVsZHNldCwgZm9ybSwgbGFiZWwsXG4gIGxlZ2VuZCwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHJcbiAgICByZXNldC1ib3gtbW9kZWwoKVxuICAgIHJlc2V0LWZvbnQoKVxuICB0YWJsZVxuICAgIHJlc2V0LXRhYmxlKClcbiAgY2FwdGlvbiwgdGgsIHRkXG4gICAgcmVzZXQtdGFibGUtY2VsbCgpXG4gIGEgaW1nXG4gICAgYm9yZGVyOiBub25lXG5cbnJlc2V0LWJveC1tb2RlbCgpXG4gIG1hcmdpbjogMFxuICBwYWRkaW5nOiAwXG4gIGJvcmRlcjogMFxuICBvdXRsaW5lOiAwXG5cbnJlc2V0LWZvbnQoKVxuICBmb250LXdlaWdodDogaW5oZXJpdFxuICBmb250LXN0eWxlOiBpbmhlcml0XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0XG4gIGZvbnQtc2l6ZTogMTAwJVxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcblxucmVzZXQtYm9keSgpXG4gIGxpbmUtaGVpZ2h0OiAxXG4gIGNvbG9yOiBibGFja1xuICBiYWNrZ3JvdW5kOiB3aGl0ZVxuXG5yZXNldC10YWJsZSgpXG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGVcbiAgYm9yZGVyLXNwYWNpbmc6IDBcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZVxuXG5yZXNldC10YWJsZS1jZWxsKClcbiAgdGV4dC1hbGlnbjogbGVmdFxuICBmb250LXdlaWdodDogbm9ybWFsXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcblxucmVzZXQtaHRtbDUoKVxuICBhcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBmaWdjYXB0aW9uLFxuICBmaWd1cmUsIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdixcbiAgc2VjdGlvbiwgc3VtbWFyeSwgbWFpblxuICAgIHJlc2V0LWJveC1tb2RlbCgpXG4gICAgZGlzcGxheTogYmxvY2tcbiAgYXVkaW8sIGNhbnZhcywgdmlkZW9cbiAgICBkaXNwbGF5IGlubGluZS1ibG9ja1xuICAgICpkaXNwbGF5IGlubGluZVxuICAgICp6b29tIDFcbiAgYXVkaW86bm90KFtjb250cm9sc10pLFtoaWRkZW5dXG4gICAgZGlzcGxheSBub25lXG4iLCJAaW1wb3J0IFwibmliXCJcbkBpbXBvcnQgXCIuL192YXJpYWJsZXNcIlxuQGltcG9ydCBcIi4vX2V4dGVuZFwiXG5cbmdsb2JhbC1yZXNldCgpXG5cbmh0bWxcbiAgZm9udC1zaXplIGZvbnQtc2l6ZVxuXG5ib2R5XG4gIGJhY2tncm91bmQtY29sb3IgY29sb3ItYmFja2dyb3VuZFxuICBjb2xvciBjb2xvci10ZXh0XG4gIGZvbnQtZmFtaWx5IGZvbnQtc2Fuc1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nIGFudGlhbGlhc2VkXG4gIGxpbmUtaGVpZ2h0IGxpbmUtaGVpZ2h0XG5cbmFcbiAgcG9zaXRpb24gcmVsYXRpdmVcbiAgY29sb3IgY29sb3ItdGV4dFxuICB0ZXh0LWRlY29yYXRpb24gbm9uZVxuICB0cmFuc2l0aW9uIGNvbG9yIC4ycyBlYXNlXG5cbiAgJjpob3ZlclxuICAgIGNvbG9yIGNvbG9yLWxpbmtcblxuI2JhY2tUb1RvcFxuICBwb3NpdGlvbiBmaXhlZFxuICB6LWluZGV4IDk5OVxuICBib3R0b20gZ3V0dGVyLXNpemUgKiAyXG4gIGxlZnQgNTAlXG4gIG1hcmdpbi1sZWZ0IGNvbnRhaW5lci13aWR0aCAqIC41ICsgZ3V0dGVyLXNpemUgKiAyXG4gIGJhY2tncm91bmQtY29sb3IgY29sb3ItYXJ0aWNsZS1iYWNrZ3JvdW5kXG4gIHdpZHRoIGd1dHRlci1zaXplICogMlxuICBoZWlnaHQgZ3V0dGVyLXNpemUgKiAyXG4gIHRyYW5zaXRpb24gYWxsIC4ycyBlYXNlLWluLW91dFxuICBkaXNwbGF5IGZsZXhcbiAgYWxpZ24taXRlbXMgY2VudGVyXG4gIGp1c3RpZnktY29udGVudCBjZW50ZXJcbiAgb3BhY2l0eSAwXG4gIGN1cnNvciBwb2ludGVyXG5cbiAgJi5zaG93XG4gICAgb3BhY2l0eSAxXG5cbiAgJjpob3ZlclxuICAgIGJveC1zaGFkb3c6IDBweCAxMHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjA3KVxuXG4gICAgLmJhY2stYXJyb3ctcmlnaHRcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGUoLTNweCwgMHB4KTtcblxuICAgIC5iYWNrLWFycm93LWxlZnRcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgdHJhbnNsYXRlKDNweCwgLTBweCk7XG5cbiAgLmJhY2stYXJyb3dcbiAgICBiYWNrZ3JvdW5kLWNvbG9yIGNvbG9yLWxpbmtcbiAgICB3aWR0aCAuNyAqIGd1dHRlci1zaXplXG4gICAgaGVpZ2h0IDJweFxuICAgIHRyYW5zaXRpb24gYWxsIC4ycyBlYXNlLWluLW91dFxuXG4gIC5iYWNrLWFycm93LXJpZ2h0XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzBkZWcpIHRyYW5zbGF0ZSgtMnB4LCAwcHgpO1xuXG4gIC5iYWNrLWFycm93LWxlZnRcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMzBkZWcpIHRyYW5zbGF0ZSgycHgsIC0wcHgpO1xuXG5cbi5jb250YWluZXJcbiAgd2lkdGggY29udGFpbmVyLXdpZHRoKjAuOTJcbiAgbWF4LXdpZHRoIDgwMHB4XG4gIG1hcmdpbiAwIGF1dG9cbiAgYm94LXNpemluZyBib3JkZXItYm94XG5cbiAgJi5ob21lXG4gICAgcGFkZGluZyAwIDEwcHhcbiAgICBkaXNwbGF5IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50IHNwYWNlLWFyb3VuZFxuICAgIGZsZXgtd3JhcCB3cmFwXG4gICAgZ2FwIDEwcHhcbiAgICBtYXJnaW4tYm90dG9tIDQqZ3V0dGVyLXNpemVcbiAgQG1lZGlhIG1xLW1vYmlsZVxuICAgIHdpZHRoIDkyJVxuICAgIHBhZGRpbmcgMCAwcmVtXG5cbi5tYWctZGF0ZVxuICBzcGFuLmRheVxuICAgIGNvbG9yOnJlZFxuXG5AaW1wb3J0IFwiX3BhcnRpYWwvaGVhZGVyXCJcbkBpbXBvcnQgXCJfcGFydGlhbC9mb290ZXJcIlxuQGltcG9ydCBcIl9wYXJ0aWFsL2Fib3V0bWVcIlxuQGltcG9ydCBcIl9wYXJ0aWFsL2FydGljbGVcIlxuQGltcG9ydCBcIl9wYXJ0aWFsL3RhZ1wiXG5AaW1wb3J0IFwiX3BhcnRpYWwvYXJjaGl2ZVwiXG5AaW1wb3J0IFwiX3BhcnRpYWwvaGlnaGxpZ2h0XCJcbiIsImNhbGxlZC1mcm9tID0gKClcblxudmVuZG9ycyA9IG1veiB3ZWJraXQgbyBtcyBvZmZpY2lhbFxuXG4vLyBzdHJpbmdpZnkgdGhlIGdpdmVuIGFyZ1xuXG4tc3RyaW5nKGFyZylcbiAgdHlwZShhcmcpICsgJyAnICsgYXJnXG5cbi8vIHJlcXVpcmUgYSBjb2xvclxuXG5yZXF1aXJlLWNvbG9yKGNvbG9yKVxuICB1bmxlc3MgY29sb3IgaXMgYSAnY29sb3InXG4gICAgZXJyb3IoJ1JHQiBvciBIU0wgdmFsdWUgZXhwZWN0ZWQsIGdvdCBhICcgKyAtc3RyaW5nKGNvbG9yKSlcblxuLy8gcmVxdWlyZSBhIHVuaXRcblxucmVxdWlyZS11bml0KG4pXG4gIHVubGVzcyBuIGlzIGEgJ3VuaXQnXG4gICAgZXJyb3IoJ3VuaXQgZXhwZWN0ZWQsIGdvdCBhICcgKyAtc3RyaW5nKG4pKVxuXG4vLyByZXF1aXJlIGEgc3RyaW5nXG5cbnJlcXVpcmUtc3RyaW5nKHN0cilcbiAgdW5sZXNzIHN0ciBpcyBhICdzdHJpbmcnIG9yIHN0ciBpcyBhICdpZGVudCdcbiAgICBlcnJvcignc3RyaW5nIGV4cGVjdGVkLCBnb3QgYSAnICsgLXN0cmluZyhzdHIpKVxuXG4vLyBNYXRoIGZ1bmN0aW9uc1xuXG5hYnMobikgeyBtYXRoKG4sICdhYnMnKSB9XG5taW4oYSwgYikgeyBhIDwgYiA/IGEgOiBiIH1cbm1heChhLCBiKSB7IGEgPiBiID8gYSA6IGIgfVxuXG4vLyBUcmlnb25vbWV0cmljc1xuUEkgPSAtbWF0aC1wcm9wKCdQSScpXG5cbnJhZGlhbnMtdG8tZGVncmVlcyhhbmdsZSlcbiAgYW5nbGUgKiAoMTgwIC8gUEkpXG5cbmRlZ3JlZXMtdG8tcmFkaWFucyhhbmdsZSlcbiAgYW5nbGUgKiAoUEkgLyAxODApXG5cbnNpbihuKVxuICBuID0gdW5pdChuKSA9PSAnZGVnJyA/IGRlZ3JlZXMtdG8tcmFkaWFucyh1bml0KG4sICcnKSkgOiB1bml0KG4sICcnKVxuICByb3VuZChtYXRoKG4sICdzaW4nKSwgOSlcblxuY29zKG4pXG4gIG4gPSB1bml0KG4pID09ICdkZWcnID8gZGVncmVlcy10by1yYWRpYW5zKHVuaXQobiwgJycpKSA6IHVuaXQobiwgJycpXG4gIHJvdW5kKG1hdGgobiwgJ2NvcycpLCA5KVxuXG4vLyBSb3VuZGluZyBNYXRoIGZ1bmN0aW9uc1xuXG5jZWlsKG4sIHByZWNpc2lvbiA9IDApXG4gIG11bHRpcGxpZXIgPSAxMCAqKiBwcmVjaXNpb25cbiAgbWF0aChuICogbXVsdGlwbGllciwgJ2NlaWwnKSAvIG11bHRpcGxpZXJcblxuZmxvb3IobiwgcHJlY2lzaW9uID0gMClcbiAgbXVsdGlwbGllciA9IDEwICoqIHByZWNpc2lvblxuICBtYXRoKG4gKiBtdWx0aXBsaWVyLCAnZmxvb3InKSAvIG11bHRpcGxpZXJcblxucm91bmQobiwgcHJlY2lzaW9uID0gMClcbiAgbXVsdGlwbGllciA9IDEwICoqIHByZWNpc2lvblxuICBtYXRoKG4gKiBtdWx0aXBsaWVyLCAncm91bmQnKSAvIG11bHRpcGxpZXJcblxuLy8gcmV0dXJuIHRoZSBzdW0gb2YgdGhlIGdpdmVuIG51bWJlcnNcblxuc3VtKG51bXMpXG4gIHN1bSA9IDBcbiAgc3VtICs9IG4gZm9yIG4gaW4gbnVtc1xuXG4vLyByZXR1cm4gdGhlIGF2ZXJhZ2Ugb2YgdGhlIGdpdmVuIG51bWJlcnNcblxuYXZnKG51bXMpXG4gIHN1bShudW1zKSAvIGxlbmd0aChudW1zKVxuXG4vLyByZXR1cm4gYSB1bml0bGVzcyBudW1iZXIsIG9yIHBhc3MgdGhyb3VnaFxuXG5yZW1vdmUtdW5pdChuKVxuICBpZiB0eXBlb2YobikgaXMgXCJ1bml0XCJcbiAgICB1bml0KG4sIFwiXCIpXG4gIGVsc2VcbiAgICBuXG5cbi8vIGNvbnZlcnQgYSBwZXJjZW50IHRvIGEgZGVjaW1hbCwgb3IgcGFzcyB0aHJvdWdoXG5cbnBlcmNlbnQtdG8tZGVjaW1hbChuKVxuICBpZiB1bml0KG4pIGlzIFwiJVwiXG4gICAgcmVtb3ZlLXVuaXQobikgLyAxMDBcbiAgZWxzZVxuICAgIG5cblxuLy8gY2hlY2sgaWYgbiBpcyBhbiBvZGQgbnVtYmVyXG5cbm9kZChuKVxuICAxID09IG4gJSAyXG5cbi8vIGNoZWNrIGlmIG4gaXMgYW4gZXZlbiBudW1iZXJcblxuZXZlbihuKVxuICAwID09IG4gJSAyXG5cbi8vIGNoZWNrIGlmIGNvbG9yIGlzIGxpZ2h0XG5cbmxpZ2h0KGNvbG9yKVxuICBsaWdodG5lc3MoY29sb3IpID49IDUwJVxuXG4vLyBjaGVjayBpZiBjb2xvciBpcyBkYXJrXG5cbmRhcmsoY29sb3IpXG4gIGxpZ2h0bmVzcyhjb2xvcikgPCA1MCVcblxuLy8gZGVzYXR1cmF0ZSBjb2xvciBieSBhbW91bnRcblxuZGVzYXR1cmF0ZShjb2xvciwgYW1vdW50KVxuICBhZGp1c3QoY29sb3IsICdzYXR1cmF0aW9uJywgLSBhbW91bnQpXG5cbi8vIHNhdHVyYXRlIGNvbG9yIGJ5IGFtb3VudFxuXG5zYXR1cmF0ZShjb2xvciA9ICcnLCBhbW91bnQgPSAxMDAlKVxuICBpZiBjb2xvciBpcyBhICdjb2xvcidcbiAgICBhZGp1c3QoY29sb3IsICdzYXR1cmF0aW9uJywgYW1vdW50KVxuICBlbHNlXG4gICAgdW5xdW90ZSggXCJzYXR1cmF0ZShcIiArIGNvbG9yICsgXCIpXCIgKVxuXG4vLyBkYXJrZW4gYnkgdGhlIGdpdmVuIGFtb3VudFxuXG5kYXJrZW4oY29sb3IsIGFtb3VudClcbiAgYWRqdXN0KGNvbG9yLCAnbGlnaHRuZXNzJywgLSBhbW91bnQpXG5cbi8vIGxpZ2h0ZW4gYnkgdGhlIGdpdmVuIGFtb3VudFxuXG5saWdodGVuKGNvbG9yLCBhbW91bnQpXG4gIGFkanVzdChjb2xvciwgJ2xpZ2h0bmVzcycsIGFtb3VudClcblxuLy8gZGVjcmVhc2Ugb3BhY2l0eSBieSBhbW91bnRcblxuZmFkZS1vdXQoY29sb3IsIGFtb3VudClcbiAgY29sb3IgLSByZ2JhKGJsYWNrLCBwZXJjZW50LXRvLWRlY2ltYWwoYW1vdW50KSlcblxuLy8gaW5jcmVhc2Ugb3BhY2l0eSBieSBhbW91bnRcblxuZmFkZS1pbihjb2xvciwgYW1vdW50KVxuICBjb2xvciArIHJnYmEoYmxhY2ssIHBlcmNlbnQtdG8tZGVjaW1hbChhbW91bnQpKVxuXG4vLyBzcGluIGh1ZSBieSBhIGdpdmVuIGFtb3VudFxuXG5zcGluKGNvbG9yLCBhbW91bnQpXG4gIGNvbG9yICsgdW5pdChhbW91bnQsIGRlZylcblxuLy8gbWl4IHR3byBjb2xvcnMgYnkgYSBnaXZlbiBhbW91bnRcblxubWl4KGNvbG9yMSwgY29sb3IyLCB3ZWlnaHQgPSA1MCUpXG4gIHVubGVzcyB3ZWlnaHQgaW4gMC4uMTAwXG4gICAgZXJyb3IoXCJXZWlnaHQgbXVzdCBiZSBiZXR3ZWVuIDAlIGFuZCAxMDAlXCIpXG5cbiAgaWYgbGVuZ3RoKGNvbG9yMSkgPT0gMlxuICAgIHdlaWdodCA9IGNvbG9yMVswXVxuICAgIGNvbG9yMSA9IGNvbG9yMVsxXVxuXG4gIGVsc2UgaWYgbGVuZ3RoKGNvbG9yMikgPT0gMlxuICAgIHdlaWdodCA9IDEwMCAtIGNvbG9yMlswXVxuICAgIGNvbG9yMiA9IGNvbG9yMlsxXVxuXG4gIHJlcXVpcmUtY29sb3IoY29sb3IxKVxuICByZXF1aXJlLWNvbG9yKGNvbG9yMilcblxuICBwID0gdW5pdCh3ZWlnaHQgLyAxMDAsICcnKVxuICB3ID0gcCAqIDIgLSAxXG5cbiAgYSA9IGFscGhhKGNvbG9yMSkgLSBhbHBoYShjb2xvcjIpXG5cbiAgdzEgPSAoKCh3ICogYSA9PSAtMSkgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMlxuICB3MiA9IDEgLSB3MVxuXG4gIGNoYW5uZWxzID0gKHJlZChjb2xvcjEpIHJlZChjb2xvcjIpKSAoZ3JlZW4oY29sb3IxKSBncmVlbihjb2xvcjIpKSAoYmx1ZShjb2xvcjEpIGJsdWUoY29sb3IyKSlcbiAgcmdiID0gKClcblxuICBmb3IgcGFpciBpbiBjaGFubmVsc1xuICAgIHB1c2gocmdiLCBmbG9vcihwYWlyWzBdICogdzEgKyBwYWlyWzFdICogdzIpKVxuXG4gIGExID0gYWxwaGEoY29sb3IxKSAqIHBcbiAgYTIgPSBhbHBoYShjb2xvcjIpICogKDEgLSBwKVxuICBhbHBoYSA9IGExICsgYTJcblxuICByZ2JhKHJnYlswXSwgcmdiWzFdLCByZ2JbMl0sIGFscGhhKVxuXG4vLyBpbnZlcnQgY29sb3JzLCBsZWF2ZSBhbHBoYSBpbnRhY3RcblxuaW52ZXJ0KGNvbG9yID0gJycpXG4gIGlmIGNvbG9yIGlzIGEgJ2NvbG9yJ1xuICAgIHJnYmEoI2ZmZiAtIGNvbG9yLCBhbHBoYShjb2xvcikpXG4gIGVsc2VcbiAgICB1bnF1b3RlKCBcImludmVydChcIiArIGNvbG9yICsgXCIpXCIgKVxuXG4vLyBnaXZlIGNvbXBsZW1lbnQgb2YgdGhlIGdpdmVuIGNvbG9yXG5cbmNvbXBsZW1lbnQoIGNvbG9yIClcbiAgc3BpbiggY29sb3IsIDE4MCApXG5cbi8vIGdpdmUgZ3JheXNjYWxlIG9mIHRoZSBnaXZlbiBjb2xvclxuXG5ncmF5c2NhbGUoIGNvbG9yID0gJycgKVxuICBpZiBjb2xvciBpcyBhICdjb2xvcidcbiAgICBkZXNhdHVyYXRlKCBjb2xvciwgMTAwJSApXG4gIGVsc2VcbiAgICB1bnF1b3RlKCBcImdyYXlzY2FsZShcIiArIGNvbG9yICsgXCIpXCIgKVxuXG4vLyBtaXggdGhlIGdpdmVuIGNvbG9yIHdpdGggd2hpdGVcblxudGludCggY29sb3IsIHBlcmNlbnQgKVxuICBtaXgoIHdoaXRlLCBjb2xvciwgcGVyY2VudCApXG5cbi8vIG1peCB0aGUgZ2l2ZW4gY29sb3Igd2l0aCBibGFja1xuXG5zaGFkZSggY29sb3IsIHBlcmNlbnQgKVxuICBtaXgoIGJsYWNrLCBjb2xvciwgcGVyY2VudCApXG5cbi8vIHJldHVybiB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgZ2l2ZW4gZXhwclxuXG5sYXN0KGV4cHIpXG4gIGV4cHJbbGVuZ3RoKGV4cHIpIC0gMV1cblxuLy8gcmV0dXJuIGtleXMgaW4gdGhlIGdpdmVuIHBhaXJzIG9yIG9iamVjdFxuXG5rZXlzKHBhaXJzKVxuICByZXQgPSAoKVxuICBpZiB0eXBlKHBhaXJzKSA9PSAnb2JqZWN0J1xuICAgIGZvciBrZXkgaW4gcGFpcnNcbiAgICAgIHB1c2gocmV0LCBrZXkpXG4gIGVsc2VcbiAgICBmb3IgcGFpciBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIHBhaXJbMF0pO1xuICByZXRcblxuLy8gcmV0dXJuIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gcGFpcnMgb3Igb2JqZWN0XG5cbnZhbHVlcyhwYWlycylcbiAgcmV0ID0gKClcbiAgaWYgdHlwZShwYWlycykgPT0gJ29iamVjdCdcbiAgICBmb3Iga2V5LCB2YWwgaW4gcGFpcnNcbiAgICAgIHB1c2gocmV0LCB2YWwpXG4gIGVsc2VcbiAgICBmb3IgcGFpciBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIHBhaXJbMV0pO1xuICByZXRcblxuLy8gam9pbiB2YWx1ZXMgd2l0aCB0aGUgZ2l2ZW4gZGVsaW1pdGVyXG5cbmpvaW4oZGVsaW0sIHZhbHMuLi4pXG4gIGJ1ZiA9ICcnXG4gIHZhbHMgPSB2YWxzWzBdIGlmIGxlbmd0aCh2YWxzKSA9PSAxXG4gIGZvciB2YWwsIGkgaW4gdmFsc1xuICAgIGJ1ZiArPSBpID8gZGVsaW0gKyB2YWwgOiB2YWxcblxuLy8gYWRkIGEgQ1NTIHJ1bGUgdG8gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuLy8gLSBUaGlzIGRlZmluaXRpb24gYWxsb3dzIGFkZC1wcm9wZXJ0eSB0byBiZSB1c2VkIGFzIGEgbWl4aW5cbi8vIC0gSXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBpbnRlcnBvbGF0aW9uIGJ1dCBhbGxvd3MgdXNlcnNcbi8vICAgdG8gb3B0IGZvciBhIGZ1bmN0aW9uYWwgc3R5bGVcblxuYWRkLXByb3BlcnR5LWZ1bmN0aW9uID0gYWRkLXByb3BlcnR5XG5hZGQtcHJvcGVydHkobmFtZSwgZXhwcilcbiAgaWYgbWl4aW5cbiAgICB7bmFtZX0gZXhwclxuICBlbHNlXG4gICAgYWRkLXByb3BlcnR5LWZ1bmN0aW9uKG5hbWUsIGV4cHIpXG5cbnByZWZpeC1jbGFzc2VzKHByZWZpeClcbiAgLXByZWZpeC1jbGFzc2VzKHByZWZpeCwgYmxvY2spXG5cbi8vIENhY2hpbmcgbWl4aW4sIHVzZSBpbnNpZGUgeW91ciBmdW5jdGlvbnMgdG8gZW5hYmxlIGNhY2hpbmcgYnkgZXh0ZW5kaW5nLlxuXG4kc3R5bHVzX21peGluX2NhY2hlID0ge31cbmNhY2hlKClcbiAgJGtleSA9IChjdXJyZW50LW1lZGlhKCkgb3IgJ25vLW1lZGlhJykgKyAnX18nICsgY2FsbGVkLWZyb21bMF0gKyAnX18nICsgYXJndW1lbnRzXG4gIGlmICRrZXkgaW4gJHN0eWx1c19taXhpbl9jYWNoZVxuICAgIEBleHRlbmQge1wiJGNhY2hlX3BsYWNlaG9sZGVyX2Zvcl9cIiArICRzdHlsdXNfbWl4aW5fY2FjaGVbJGtleV19XG4gIGVsc2UgaWYgJ2NhY2hlJyBpbiBjYWxsZWQtZnJvbVxuICAgIHtibG9ja31cbiAgZWxzZVxuICAgICRpZCA9IGxlbmd0aCgkc3R5bHVzX21peGluX2NhY2hlKVxuXG4gICAgJixcbiAgICAvJGNhY2hlX3BsYWNlaG9sZGVyX2Zvcl97JGlkfVxuICAgICAgJHN0eWx1c19taXhpbl9jYWNoZVska2V5XSA9ICRpZFxuICAgICAge2Jsb2NrfVxuXG4vLyBQZXJjZW50YWdlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBudW1iZXIsIGUuZy4gXCIuNDVcIiwgaW50byBhIHBlcmNlbnRhZ2UsIGUuZy4gXCI0NSVcIlxuXG5wZXJjZW50YWdlKG51bSlcbiAgcmV0dXJuIHVuaXQobnVtICogMTAwLCAnJScpXG5cbi8vIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIGEgYHZhbHVlYCB3aXRoaW4gYSBgbGlzdGBcblxuaW5kZXgobGlzdCwgdmFsdWUpXG4gIGZvciB2YWwsIGkgaW4gbGlzdFxuICAgIHJldHVybiBpIGlmIHZhbCA9PSB2YWx1ZVxuIiwiLypcbiAqIFZlbmRvciBcImRpc3BsYXk6IGZsZXhcIiBzdXBwb3J0IHdpdGggZmFsbGJhY2sgdG8gb2Jzb2xldGUgdmVyc2lvbnMuXG4gKi9cblxuZmxleC12ZXJzaW9uID89IGJveCBmbGV4XG5cbi8vXG4vLyAxLiBEaXNwbGF5IHZhbHVlc1xuLy8gICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZsZXhib3gvI2ZsZXgtY29udGFpbmVyc1xuLy9cbmRpc3BsYXkodHlwZSwgYXJncy4uLilcbiAgaWYgZmxleCA9PSB0eXBlIHx8IGlubGluZS1mbGV4ID09IHR5cGVcbiAgICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgICBpZiBmbGV4ID09IHR5cGVcbiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3ggYXJnc1xuICAgICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoYm94IGFyZ3MsIG9ubHk6IG1veiB3ZWJraXQpXG4gICAgICBlbHNlXG4gICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveCBhcmdzXG4gICAgICAgIGRpc3BsYXk6IHZlbmRvci12YWx1ZShpbmxpbmUtYm94IGFyZ3MsIG9ubHk6IG1veiB3ZWJraXQpXG4gICAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICAgIGRpc3BsYXk6IHZlbmRvci12YWx1ZShhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbCkgLy8gb3ZlcndyaXRlcyBvbGQgd2Via2l0XG4gIGVsc2VcbiAgICBkaXNwbGF5OiBhcmd1bWVudHNcblxuLypcbiAqIE5ldyBzeW50YXggZm9yIGJyb3dzZXJzIGxpa2UgR29vZ2xlIENocm9tZS5cbiAqIFBsdXMgYSB0cmFuc2xhdGlvbiB0byB0aGUgb2xkIHN5bnRheCwgaWYgcG9zc2libGUuXG4gKi9cblxuXG4vL1xuLy8gNS4gT3JkZXJpbmcgYW5kIE9yaWVudGF0aW9uXG4vLyAgICAtIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZmxleGJveC8jb3JkZXJpbmctYW5kLW9yaWVudGF0aW9uXG4vL1xuLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGRpcmVjdGlvbilcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIGlmIHJvdy1yZXZlcnNlID09IGRpcmVjdGlvbiB8fCBjb2x1bW4tcmV2ZXJzZSA9PSBkaXJlY3Rpb25cbiAgICAgIHZlbmRvcignYm94LWRpcmVjdGlvbicsIHJldmVyc2UsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG5cbiAgICBpZiByb3cgPT0gZGlyZWN0aW9uIHx8IHJvdy1yZXZlcnNlID09IGRpcmVjdGlvblxuICAgICAgdmVuZG9yKCdib3gtb3JpZW50JywgaG9yaXpvbnRhbCwgaWdub3JlOiBtcyBvZmZpY2lhbClcbiAgICBlbHNlIGlmIGNvbHVtbiA9PSBkaXJlY3Rpb24gfHwgY29sdW1uLXJldmVyc2UgPT0gZGlyZWN0aW9uXG4gICAgICB2ZW5kb3IoJ2JveC1vcmllbnQnLCB2ZXJ0aWNhbCwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuLWZsZXgtb2Jzb2xldGUtd3JhcCh2YWx1ZSlcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIC8vIFdBUk46IHdyYXAtcmV2ZXJzZSBkb2VzIG5vdCBoYXZlIGEgYm94IGVxdWl2YWxlbnQuIFRoaXMgd2lsbCByZW5kZXIgaW4gZGlmZmVyZW50IG1hbm5lcnNcbiAgICAvLyAgICBvbiBib3ggdnMuIGZsZXggdmFsdWVzLlxuICAgIGlmICd3cmFwJyA9PSB2YWx1ZSB8fCB3cmFwLXJldmVyc2UgPT0gdmFsdWVcbiAgICAgIHZlbmRvcignYm94LWxpbmVzJywgbXVsdGlwbGUsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG4gICAgZWxzZSBpZiBub3dyYXAgPT0gdmFsdWVcbiAgICAgIHZlbmRvcignYm94LWxpbmVzJywgc2luZ2xlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG5mbGV4LWRpcmVjdGlvbihkaXJlY3Rpb24pXG4gIC8vIG9ic29sZXRlXG4gIC1mbGV4LW9ic29sZXRlLWRpcmVjdGlvbihkaXJlY3Rpb24pXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWRpcmVjdGlvbicsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1zIG9mZmljaWFsKVxuXG5mbGV4LXdyYXAodmFsdWUpXG4gIC8vIG9ic29sZXRlXG4gIC1mbGV4LW9ic29sZXRlLXdyYXAodmFsdWUpXG5cbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtd3JhcCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1zIG9mZmljaWFsKVxuXG5mbGV4LWZsb3coKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS1kaXJlY3Rpb24oYXJndW1lbnRzWzBdKVxuICAtZmxleC1vYnNvbGV0ZS1kaXJlY3Rpb24oYXJndW1lbnRzWzFdKVxuICAtZmxleC1vYnNvbGV0ZS13cmFwKGFyZ3VtZW50c1swXSlcbiAgLWZsZXgtb2Jzb2xldGUtd3JhcChhcmd1bWVudHNbMV0pXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWZsb3cnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuXG5vcmRlcigpXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2JveC1vcmRpbmFsLWdyb3VwJywgYXJndW1lbnRzLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1vcmRlcicsIGFyZ3VtZW50cywgb25seTogbXMpXG4gICAgdmVuZG9yKCdvcmRlcicsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5cbi8vXG4vLyA3LiBGbGV4aWJpbGl0eVxuLy8gICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZsZXhib3gvI2ZsZXhpYmlsaXR5XG4vL1xuZmxleC1ncm93KGdyb3d0aClcbiAgLy8gb2Jzb2xldGVcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignYm94LWZsZXgnLCBncm93dGgpXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWdyb3cnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuZmxleC1iYXNpcygpXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWJhc2lzJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmZsZXgtc2hyaW5rKClcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtc2hyaW5rJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmZsZXgoZ3Jvd3RoKVxuXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICBzaHJpbmsgPSAxXG5cbiAgICBpZiBub25lID09IGdyb3d0aCB8fCBpbml0aWFsID09IGdyb3d0aFxuICAgICAgLy8gV2VsbCBrbm93biB2YWx1ZXNcbiAgICAgIHNocmluayA9IDAgaWYgbm9uZSA9PSBncm93dGhcbiAgICAgIGdyb3d0aCA9IDBcbiAgICBlbHNlIGlmIGlzLXdpZHRoKGdyb3d0aCkgPT0gdHJ1ZVxuICAgICAgLy8gQmFzaXMgaXMgZGVmaW5lZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyXG4gICAgICBncm93dGggPSBhcmd1bWVudHNbMV0gfHwgMFxuICAgICAgc2hyaW5rID0gYXJndW1lbnRzWzJdIGlmIDMgPD0gbGVuZ3RoKGFyZ3VtZW50cylcbiAgICBlbHNlIGlmIGFyZ3VtZW50c1sxXSAmJiBpcy13aWR0aChhcmd1bWVudHNbMV0pID09IGZhbHNlXG4gICAgICAvLyBHcm93dGggaXMgZmlyc3QgYW5kIHNocmluayBpcyBzZWNvbmRcbiAgICAgIHNocmluayA9IGFyZ3VtZW50c1sxXVxuXG4gICAgLy8gU2luY2Ugd2UgY2FuJ3QgbWFrZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBncm93aW5nIGFuZCBzaHJpbmtpbmcgaW4gdGhlIGJveCBtb2RlbCwgdGFrZVxuICAgIC8vIHRoZSBvbmUgdGhhdCBwcm92aWRlcyB0aGUgbW9zdCBmbGV4aWJpbGl0eS5cbiAgICB2ZW5kb3IoJ2JveC1mbGV4JywgbWF4KGdyb3d0aCwgc2hyaW5rKSwgaWdub3JlOiBtcylcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuXG4vLyBjb252ZXJ0cyB0aGUganVzdGlmaWNhdGlvbiBhbGlnbm1lbnRcbi1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pXG4gIGlmIGZsZXgtc3RhcnQgPT0gYWxpZ25cbiAgICByZXR1cm4gc3RhcnRcbiAgZWxzZSBpZiBmbGV4LWVuZCA9PSBhbGlnblxuICAgIHJldHVybiBlbmRcbiAgZWxzZSBpZiBzcGFjZS1hcm91bmQgPT0gYWxpZ25cbiAgICByZXR1cm4gZGlzdHJpYnV0ZVxuICBlbHNlIGlmIHNwYWNlLWJldHdlZW4gPT0gYWxpZ25cbiAgICByZXR1cm4ganVzdGlmeVxuICBlbHNlXG4gICAgcmV0dXJuIGFsaWduXG5cbi8vXG4vLyA4LiBBbGlnbm1lbnRcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNhbGlnbm1lbnRcbi8vXG5qdXN0aWZ5LWNvbnRlbnQoYWxpZ24pXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2JveC1wYWNrJywgLWNvbnZlcnQtanVzdGlmeShhbGlnbiksIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXBhY2snLCAtY29udmVydC1qdXN0aWZ5KGFsaWduKSwgb25seTogbXMpXG4gICAgdmVuZG9yKCdqdXN0aWZ5LWNvbnRlbnQnLCBhbGlnbiwgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5hbGlnbi1jb250ZW50KGFsaWduKVxuICAvLyBXQVJOOiBPYnNvbGV0ZSBzcGVjIGRvZXMgbm90IGFsbG93IGZvciBhZGp1c3RtZW50IGhlcmVcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtbGluZS1wYWNrJywgLWNvbnZlcnQtanVzdGlmeShhbGlnbiksIG9ubHk6IG1zKVxuICAgIHZlbmRvcignYWxpZ24tY29udGVudCcsIGFsaWduLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8vIGNvbnZlcnRzIGFsaWdubWVudCBmcm9tICdmbGV4JyB0byBub3JtYWwgdmFsdWVcbi1jb252ZXJ0LWFsaWdubWVudChhbGlnbilcbiAgaWYgZmxleC1zdGFydCA9PSBhbGlnblxuICAgIHJldHVybiBzdGFydFxuICBlbHNlIGlmIGZsZXgtZW5kID09IGFsaWduXG4gICAgcmV0dXJuIGVuZFxuICBlbHNlXG4gICAgcmV0dXJuIGFsaWduXG5cbmFsaWduLWl0ZW1zKGFsaWduKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtYWxpZ24nLCAtY29udmVydC1hbGlnbm1lbnQoYWxpZ24pLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1hbGlnbicsIC1jb252ZXJ0LWFsaWdubWVudChhbGlnbiksIG9ubHk6IG1zKVxuICAgIHZlbmRvcignYWxpZ24taXRlbXMnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuYWxpZ24tc2VsZihhbGlnbilcbiAgLy8gV0FSTjogT2Jzb2xldGUgc3BlYyBkb2VzIG5vdCBhbGxvdyBmb3Igb3ZlcnJpZGluZyBhbGlnbm1lbnQgb24gaW5kaXZpZHVhbCBpdGVtcy5cbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2FsaWduLXNlbGYnLCBhbGlnbiwgb25seTogd2Via2l0IG9mZmljaWFsKVxuICAgIHZlbmRvcignZmxleC1pdGVtLWFsaWduJywgLWNvbnZlcnQtYWxpZ25tZW50KGFsaWduKSwgb25seTogbXMpXG4iLCJhdmF0YXItc2l6ZSA9IDRyZW1cblxuLmhlYWRlciB7XG4gIHBhZGRpbmcgMiAqIGd1dHRlci1zaXplIDEwcHggMiAqIGd1dHRlci1zaXplXG4gIGRpc3BsYXkgZmxleFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgZmxleC1kaXJlY3Rpb24gY29sdW1uXG4gIGFsaWduLWl0ZW1zIGZsZXgtc3RhcnRcbiAgbWFyZ2luLWJvdHRvbSAyICogZ3V0dGVyLXNpemVcbiAgYm9yZGVyLWJvdHRvbSAxcHggZGFzaGVkICNkZGRcbiAgQG1lZGlhIG1xLW1vYmlsZXtcbiAgICBmbGV4LWRpcmVjdGlvbiBjb2x1bW5cbiAgICBwYWRkaW5nLWJvdHRvbSAwXG4gICAgbWFyZ2luLWJvdHRvbSAwXG4gIH1cbn1cblxuLmhlYWRlci1sZWZ0IHtcbiAgZGlzcGxheTogZmxleFxuICBmbGV4OiAxXG59XG4uaGVhZGVyLXJpZ2h0IHtcbiAgd2lkdGg6MTAwJTtcbiAgZGlzcGxheTogZmxleFxuICBmbGV4OiAxXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmRcbiAgYWxpZ24taXRlbXMgZmxleC1lbmRcbiAgYWxpZ24tc2VsZjogY2VudGVyXG5cbiAgJnVse1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICB9XG5cbiAgQG1lZGlhIG1xLW1vYmlsZXtcbiAgICBwYWRkaW5nOiAxLjJyZW0gMFxuICB9XG59XG5cbi5hdmF0YXIge1xuICB3aWR0aDogYXZhdGFyLXNpemVcbiAgaGVpZ2h0OiBhdmF0YXItc2l6ZVxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmXG4gIHBhZGRpbmc6IDVweFxuICBkaXNwbGF5OiBmbGV4XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXJcbiAgb3ZlcmZsb3c6IGhpZGRlblxuICBhIHtcbiAgICB3aWR0aDogMTAwJVxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gIH1cbiAgaW1nIHtcbiAgICB3aWR0aDogMTAwJVxuICAgIGhlaWdodDogMTAwJVxuICB9XG59XG5cbi5hdXRob3Ige1xuICBmbGV4IDFcbiAgbWFyZ2luLWxlZnQgZ3V0dGVyLXNpemVcbiAgZGlzcGxheSBmbGV4XG4gIGZsZXgtZGlyZWN0aW9uIGNvbHVtblxuICBqdXN0aWZ5LWNvbnRlbnQgc3BhY2UtYmV0d2VlblxuICBwYWRkaW5nIC4zcmVtIDBcbn1cblxuLmF1dGhvci1uYW1lIHtcbiAgZm9udC1zaXplOiAyICogZ3V0dGVyLXNpemVcbiAgZm9udC13ZWlnaHQ6Ym9sZDtcbn1cblxuLmFib3V0LW1lIHtcbiAgY29sb3I6ICM2NjY2NjZcbn1cblxuLm5hdmlnYXRpb24ge1xuICBjbGVhcmZpeCgpXG5cbiAgbGkge1xuICAgIGZsb2F0IGxlZnRcbiAgICBtYXJnaW4tbGVmdCAycmVtXG5cbiAgICBhIHtcbiAgICAgIGNvbG9yIGNvbG9yLWdyZXlcblxuICAgICAgJjphZnRlciB7XG4gICAgICAgIGRpc3BsYXkgbm9uZVxuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3IgY29sb3ItbGlua1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLypcbiAqIE92ZXJmbG93IHV0aWxpdHkuIE1hcHMgdG8gcmVndWxhciBvdmVyZmxvdywgYW5kIGFkZHMgYW4gZWxsaXBzaXMgdmFsdWUuXG4gKlxuICogU3lub3BzaXM6XG4gKlxuICogICBvdmVyZmxvdzogPHR5cGU+XG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIG92ZXJmbG93OiBhdXRvXG4gKiAgICAgb3ZlcmZsb3c6IGhpZGRlblxuICogICAgIG92ZXJmbG93OiBlbGxpcHNpc1xuICpcbiAqL1xuXG5vdmVyZmxvdygpXG4gIGlmIGFyZ3VtZW50c1swXSA9PSBlbGxpcHNpc1xuICAgIGVsbGlwc2lzKClcbiAgZWxzZVxuICAgIG92ZXJmbG93OiBhcmd1bWVudHNcbiIsIi8qXG4gKiBUaGUgTWFnbmlmaWNlbnQgTWljcm8gQ2xlYXJmaXhcbiAqXG4gKiBVc2VmdWwgZm9yIGNsZWFyaW5nIGZsb2F0cyB3aXRob3V0IHN0cnVjdHVyYWwgbWFya3VwLlxuICogUHJldmVudHMgbWFyZ2luLWNvbGxhcHNpbmcgb24gY2hpbGQgZWxlbWVudHMgaW4gbW9zdCBjYXNlcy5cbiAqXG4gKiBLbm93biBpc3N1ZXM6XG4gKlxuICogMS4gRm9yIElFIDYvNyB3aGVuIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgbGVmdC1mbG9hdGVkXG4gKiAgICBjaGlsZHJlbiB0aGUgYm90dG9tIG1hcmdpbiBvbiBjaGlsZCBlbGVtZW50cyB3aWxsIGJlIGNvbGxhcHNlZC5cbiAqXG4gKiAyLiBGb3IgRmlyZWZveCB2ZXJzaW9ucyBwcmlvciB0byAzLjUgd2hlbiBhcHBsaWVkIHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50XG4gKiAgICBvZiBib2R5LCBhbmQgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBub24temVybyBwYWRkaW5nLCBleHRyYSBzcGFjZSB3aWxsXG4gKiAgICBhcHBlYXIgYmV0d2VlbiB0aGUgYm9keSBhbmQgdGhlIGZpcnN0IGNoaWxkLlxuICpcbiAqIFNlZSBodHRwOi8vbmljb2xhc2dhbGxhZ2hlci5jb20vbWljcm8tY2xlYXJmaXgtaGFjay9cbiAqIGFuZCBodHRwOi8vai5tcC9iZXN0Y2xlYXJmaXhcbiAqXG4gKi9cblxuY2xlYXJmaXgoKVxuICAmOmJlZm9yZVxuICAmOmFmdGVyXG4gICAgY29udGVudDogXCJcIlxuICAgIGRpc3BsYXk6IHRhYmxlXG4gICY6YWZ0ZXJcbiAgICBjbGVhcjogYm90aFxuICB6b29tOiAxIGlmIHN1cHBvcnQtZm9yLWllXG4iLCJmb290ZXJcbiAgY29sb3IgY29sb3ItZ3JleVxuICBmb250LXNpemUgMTJweFxuXG4gIGFcbiAgICBjb2xvciBjb2xvci10ZXh0XG4gICAgZm9udC13ZWlnaHQgYm9sZFxuXG4ucmlnaHRzXG4gIHBhZGRpbmcgZ3V0dGVyLXNpemUgMFxuIiwiLmFib3V0LW1lLW1hc2tcbiAgcG9zaXRpb24gZml4ZWRcbiAgYmFja2dyb3VuZC1jb2xvciByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDgpXG4gIHRvcCAwXG4gIHJpZ2h0IDBcbiAgYm90dG9tIDBcbiAgbGVmdCAwXG4gIGhlaWdodCAxMDAlXG4gIHotaW5kZXggMTAwMFxuXG4gIGRpc3BsYXkgbm9uZVxuXG4gICYub3BlblxuICAgIGRpc3BsYXkgYmxvY2tcblxuLmFib3V0LW1lLXdyYXBcbiAgZGlzcGxheSBmbGV4XG4gIGZsZXgtZGlyZWN0aW9uIGNvbHVtblxuICBqdXN0aWZ5LWNvbnRlbnQgY2VudGVyXG4gIGFsaWduLWl0ZW1zIGNlbnRlclxuICB3aWR0aCAzMHJlbVxuICBtYXJnaW4gMTByZW0gYXV0b1xuICBwYWRkaW5nIGd1dHRlci1zaXplICogMiAwXG4gIGJveC1zaXppbmcgYm9yZGVyLWJveFxuICBiYWNrZ3JvdW5kLWNvbG9yIGNvbG9yLWFydGljbGUtYmFja2dyb3VuZFxuICBib3JkZXIgMXB4IHNvbGlkIGxpZ2h0ZW4oY29sb3ItZ3JleSwgNTAlKVxuICBib3JkZXItcmFkaXVzIDZweFxuICBib3gtc2hhZG93OiAwcHggMTBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNylcblxuICBAbWVkaWEgbXEtbW9iaWxlXG4gICAgd2lkdGggYXV0b1xuICAgIG1hcmdpbiAxMHJlbSAxcmVtXG5cbi5hYm91dC1tZV9faGVhZGVyXG4gIC5hdmF0YXJcbiAgICBib3JkZXItcmFkaXVzIDUwJVxuICAgIG91dGxpbmUgMFxuICAgIG92ZXJmbG93IGhpZGRlblxuICAgIGJveC1zaGFkb3cgMCA2cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMDcpXG5cbi5zb2NpYWxzXG4gIG1hcmdpbi10b3AgMnJlbVxuXG4uc29jaWFsLWl0ZW1cbiAgbWFyZ2luLWJvdHRvbSAxcmVtXG5cbiAgQG1lZGlhIG1xLW1vYmlsZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aWR0aDogMThyZW07XG5cbiAgLmxhYmVsXG4gICAgd2lkdGggMnJlbVxuICAgIGhlaWdodCAycmVtXG4gICAgZGlzcGxheSBpbmxpbmUtYmxvY2tcbiAgICBtYXJnaW4gMCAuNXJlbVxuICAgIHZlcnRpY2FsLWFsaWduIG1pZGRsZVxuICAgIGltZ1xuICAgICAgd2lkdGggMTAwJVxuICAgICAgaGVpZ2h0IDEwMCVcbiIsIi8qXG4gKiBIZWxwZXIgZm9yIGJvcmRlci1yYWRpdXMoKS5cbiAqL1xuXG4tYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG4gIGlmIGxlbmd0aChwb3MpID09IDNcbiAgICAvLyBib3JkZXItcmFkaXVzOiA8dG9wIHwgYm90dG9tPiA8bGVmdCB8IHJpZ2h0PiA8bj5cbiAgICB5ID0gcG9zWzBdXG4gICAgeCA9IHBvc1sxXVxuICAgIC8vIFdlIGRvbid0IHVzZSB2ZW5kb3IgZm9yIGJvZGVyLXJhZGl1cyBhbnltb3JlXG4gICAgLy8gdmVuZG9yKCdib3JkZXItcmFkaXVzLSVzJXMnICUgcG9zLCBwb3NbMl0sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB7J2JvcmRlci0lcy0lcy1yYWRpdXMnICUgcG9zfTogcG9zWzJdIGltcG9ydGFuY2VcbiAgZWxzZSBpZiBwb3NbMF0gaW4gKHRvcCBib3R0b20pXG4gICAgLy8gYm9yZGVyLXJhZGl1czogPHRvcCB8IGJvdHRvbT4gPG4+XG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zWzBdIGxlZnQgcG9zWzFdLCBpbXBvcnRhbmNlKVxuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvc1swXSByaWdodCBwb3NbMV0sIGltcG9ydGFuY2UpXG4gIGVsc2UgaWYgcG9zWzBdIGluIChsZWZ0IHJpZ2h0KVxuICAgIC8vIGJvcmRlci1yYWRpdXM6IDxsZWZ0IHwgcmlnaHQ+IDxuPlxuICAgIHVuc2hpZnQocG9zLCB0b3ApO1xuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcbiAgICBwb3NbMF0gPSBib3R0b21cbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG5cbi8qXG4gKiBib3JkZXItcmFkaXVzIHN1cHBvcnRpbmcgYXVnbWVudGVkIGJlaGF2aW9yLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIGJvcmRlci1yYWRpdXM6IDJweCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCA1cHggYm90dG9tIDEwcHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IGxlZnQgNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgbGVmdCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCBsZWZ0IDEwcHggYm90dG9tIHJpZ2h0IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIGxlZnQgMTBweCwgYm90dG9tIHJpZ2h0IDVweFxuICpcbiAqL1xuXG5ib3JkZXItcmFkaXVzKClcbiAgcG9zID0gKClcbiAgYXVnbWVudGVkID0gZmFsc2VcbiAgaW1wb3J0YW5jZSA9IGFyZ3VtZW50c1tsZW5ndGgoYXJndW1lbnRzKSAtIDFdID09ICFpbXBvcnRhbnQgPyAhaW1wb3J0YW50IDogdW5xdW90ZSgnJylcblxuICBmb3IgYXJncyBpbiBhcmd1bWVudHNcbiAgICBmb3IgYXJnIGluIGFyZ3NcbiAgICAgIGlmIGFyZyBpcyBhICdpZGVudCdcbiAgICAgICAgYXBwZW5kKHBvcywgYXJnKVxuICAgICAgICBhdWdtZW50ZWQgPSB0cnVlXG4gICAgICBlbHNlXG4gICAgICAgIGFwcGVuZChwb3MsIGFyZylcbiAgICAgICAgaWYgYXVnbWVudGVkXG4gICAgICAgICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuICAgICAgICAgIHBvcyA9ICgpXG4gIGJvcmRlci1yYWRpdXMgcG9zIHVubGVzcyBhdWdtZW50ZWRcbiIsIi5wb3N0XG4gIHBhZGRpbmcgMFxuXG4gIC50aXRsZVxuICAgIGZvbnQtc2l6ZSAycmVtXG4gIFxuICAuY29udGVudFxuICAgIG1hcmdpbiAxcmVtIDBcbiAgICBwYWRkaW5nIDFyZW0gMSpndXR0ZXItc2l6ZVxuICAgIGJvcmRlci10b3AgMXB4IHNvbGlkICNlZWVcbiAgICBjb2xvciAjMjIyMjIyXG4gICAgcFxuICAgICAgY29sb3IgIzIyMjIyMlxuICBcbiAgLnRhZ3NcbiAgICBtYXJnaW4tdG9wIDFyZW1cbiAgXG5cbi5zbGlkZS1oaWRlXG4gIGhlaWdodCAwXG4gIHRyYW5zaXRpb24gYWxsIDFzIGVhc2UtaW4tb3V0XG5cbi5hcnRpY2xlXG4gIGJhY2tncm91bmQtY29sb3IgY29sb3ItYXJ0aWNsZS1iYWNrZ3JvdW5kXG4gIHBhZGRpbmcgMCAwIDEuMiAqIGd1dHRlci1zaXplXG4gIHBvc2l0aW9uIHJlbGF0aXZlXG4gIG1hcmdpbi1ib3R0b20gZ3V0dGVyLXNpemUgKiAyXG4gIG1hcmdpbi1yaWdodCBhdXRvXG4gIFxuICAmLm1hZy1pdGVtXG4gICAgZGlzcGxheSBmbGV4XG4gICAgZmxleC1kaXJlY3Rpb24gcm93XG4gICAganVzdGlmeS1jb250ZW50IGZsZXgtc3RhcnRcbiAgICBmbGV4LXdyYXAgd3JhcFxuICAgIGdhcCAyMHB4XG4gICAgYmFja2dyb3VuZCB0cmFuc3BhcmVudFxuXG4gICAgLm1hZy1pY29ue1xuICAgICAgd2lkdGggNjRweFxuICAgICAgaGVpZ2h0IDY0cHhcbiAgICAgIGJvcmRlci1yYWRpdXMgNTAlXG4gICAgICBvdmVyZmxvdyBoaWRkZW5cbiAgICAgIGJhY2tncm91bmQgI2ZmZlxuICAgICAgcG9zaXRpb24gcmVsYXRpdmVcbiAgICAgIGJvcmRlciA1cHggc29saWQgI2ZmZmZmZlxuXG4gICAgICBpbWd7XG4gICAgICAgIHdpZHRoIDEwMCVcbiAgICAgICAgcG9zaXRpb24gYWJzb2x1dGVcbiAgICAgICAgYm9yZGVyLXJhZGl1cyA1MCVcbiAgICAgICAgdG9wIC01MCVcbiAgICAgICAgdHJhbnNmb3JtIHRyYW5zbGF0ZVkoNTAlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC5tYWctY29udGVudFxuICAgICAgZGlzcGxheSBmbGV4XG4gICAgICBmbGV4LWRpcmVjdGlvbiBjb2x1bW5cbiAgICAgIGdhcCAwcHhcbiAgICAgIGp1c3RpZnktY29udGVudCBzcGFjZS1hcm91bmRcblxuICAgICAgLm1hZy1kYXRlXG4gICAgICAgIGNvbG9yICM2NjZcbiAgICAgICAgc3Bhbi5kYXlcbiAgICAgICAgICBjb2xvciByZWRcbiAgXG5cbiAgLmhvbWUgJiB7XG4gICAgdHJhbnNpdGlvbiBhbGwgLjZzIGVhc2VcbiAgICBtYXJnaW4tYm90dG9tIDMwcHhcbiAgICBwYWRkaW5nIDhweFxuICAgIHdpZHRoIGNhbGMoKDEwMCUgLSAzMHB4KSAvIDIpXG4gICAgYm94LXNpemluZyBib3JkZXItYm94XG4gICAgXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45cHgpIHtcbiAgICAgIGxpbmUtaGVpZ2h0IDJyZW1cbiAgICAgIHdpZHRoIGNhbGMoKDEwMCUgLSAxMHB4KSAvIDEpXG4gICAgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MS45OHB4KSB7XG4gICAgICB3aWR0aCBjYWxjKCgxMDAlIC0gMTBweCkgLyAyKVxuICAgIH1cbiAgICBcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQgI2ZlZmZlZlxuICAgICAgYm94LXNoYWRvdyAwcHggMTBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNylcbiAgICB9XG4gIH1cblxuICAmLnNwZWNpYWwge1xuICAgIGJhY2tncm91bmQgI2ZmZjllOFxuICAgIGJveC1zaGFkb3cgMHB4IDFweCAzcHggI2Y2ZThiN1xuICB9XG5cbiAgaW1nIHtcbiAgICBtYXgtd2lkdGggMTAwJVxuICAgIGRpc3BsYXkgYmxvY2tcbiAgfVxuXG4gIHMsIHN0cmlrZSwgZGVsIHtcbiAgICBjb2xvciBjb2xvci1ncmV5XG4gIH1cblxuICB1IHtcbiAgICB0ZXh0LWRlY29yYXRpb24gbm9uZVxuICAgIHBvc2l0aW9uIHJlbGF0aXZlXG5cbiAgICAmOmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uIGFic29sdXRlXG4gICAgICBjb250ZW50ICcgJ1xuICAgICAgYm90dG9tIDBcbiAgICAgIGxlZnQgMFxuICAgICAgd2lkdGggMTAwJVxuICAgICAgaGVpZ2h0IDFweFxuICAgICAgYmFja2dyb3VuZC1jb2xvciBjb2xvci1saW5rXG4gICAgfVxuICB9XG5cbiAgc3Ryb25nIHtcbiAgICBmb250LXdlaWdodCBib2xkXG4gIH1cblxuICBlbSwgY2l0ZSB7XG4gICAgZm9udC1zdHlsZSBpdGFsaWNcbiAgfVxuXG4gIC5jaGVja2JveC13cmFwIHtcbiAgICBiYWNrZ3JvdW5kLXNpemUgODAlXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbiBjZW50ZXJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yICNmZmZcbiAgICB3aWR0aCAxcmVtXG4gICAgaGVpZ2h0IDFyZW1cbiAgICBkaXNwbGF5IGlubGluZS1ibG9ja1xuICAgIHBhZGRpbmcgMXB4XG4gICAgbWFyZ2luLXJpZ2h0IC4zcmVtXG4gICAgdmVydGljYWwtYWxpZ24gdGV4dC10b3BcbiAgICBib3JkZXItcmFkaXVzIDNweFxuICAgIGJvcmRlciAxcHggY29sb3ItdGFnIHNvbGlkXG5cbiAgICAmLmNoZWNrZWQge1xuICAgICAgYmFja2dyb3VuZC1pbWFnZSB1cmwoJy9pbWFnZXMvY2hlY2suc3ZnJylcbiAgICAgIGJhY2tncm91bmQtcmVwZWF0IG5vLXJlcGVhdFxuICAgIH1cblxuICAgIGlucHV0IHtcbiAgICAgIGRpc3BsYXkgbm9uZVxuICAgIH1cbiAgfVxuXG4gIC5jaGVjay1jb250ZW50LmNoZWNrZWQge1xuICAgIHRleHQtZGVjb3JhdGlvbiBsaW5lLXRocm91Z2hcbiAgICBjb2xvciBjb2xvci1ncmV5XG4gIH1cblxuICAjbW9yZSB7XG4gICAgZGlzcGxheSBub25lXG4gIH1cblxuICBkdCB7XG4gICAgZm9udC13ZWlnaHQgYm9sZFxuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGUgZGlzY1xuICB9XG5cbiAgb2wge1xuICAgIGxpc3Qtc3R5bGUgZGVjaW1hbFxuICB9XG5cbiAgbGkge1xuICAgIGxpbmUtaGVpZ2h0IDJyZW1cbiAgICBtYXJnaW4tYm90dG9tIGd1dHRlci1zaXplXG4gICAgbWFyZ2luLWxlZnQgZ3V0dGVyLXNpemVcbiAgICBwYWRkaW5nLWxlZnQgLjJyZW1cbiAgICBjb2xvciBjb2xvci1saW5rXG5cbiAgICBAbWVkaWEgbXEtbW9iaWxlIHtcbiAgICAgIGZvbnQtc2l6ZSBndXR0ZXItc2l6ZVxuICAgIH1cblxuICAgIC5saS1pbm5lciB7XG4gICAgICBjb2xvciBjb2xvci10ZXh0XG5cbiAgICAgIC5ob21lICYge1xuICAgICAgICBjb2xvciBjb2xvci1ncmV5XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW4gMFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbi50aXRsZVxuICBmb250LXNpemUgdGl0bGUtc2l6ZVxuICBmb250LXdlaWdodCBib2xkXG4gIG1hcmdpbi1ib3R0b20gZ3V0dGVyLXNpemVcbiAgbGluZS1oZWlnaHQgbGluZS1oZWlnaHRcbiAgcGFkZGluZyAxKmd1dHRlci1zaXplXG5cbiAgLmhvbWUgJlxuICAgIGRpc3BsYXkgYmxvY2tcbiAgICBmb250LXNpemUgZm9udC1zaXplXG4gICAgYmFja2dyb3VuZCB0cmFuc3BhcmVudFxuICAgIHBhZGRpbmcgMFxuICAgIG1hcmdpbi1ib3R0b20gMHB4XG4gICAgXG4gIC5wb3N0ICZcbiAgICBAbWVkaWEgbXEtbW9iaWxlXG4gICAgICBsaW5lLWhlaWdodCAyLjhyZW1cbiAgICAgIGZvbnQtc2l6ZSAxLjZyZW1cblxuICAmOmFmdGVyXG4gICAgZGlzcGxheSBub25lXG5cbi5jb250ZW50XG4gIHBcbiAgICBsaW5lLWhlaWdodCAxLjRyZW1cbiAgICBtYXJnaW4gMHJlbSAwXG4gICAgZm9udC1zaXplIDFyZW1cbiAgICBjb2xvciAjOTk5XG4gICAgQG1lZGlhIG1xLW1vYmlsZVxuICAgICAgZm9udC1zaXplIGd1dHRlci1zaXplXG5cblxuXG4gIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDZcbiAgICBmb250LXdlaWdodCBib2xkXG4gICAgbGluZS1oZWlnaHQgbGluZS1oZWlnaHQtdGl0bGVcbiAgICBtYXJnaW4gbGluZS1oZWlnaHQtdGl0bGUgMFxuXG4gIGgxXG4gICAgZm9udC1zaXplIDIycHhcblxuICBoMlxuICAgIGZvbnQtc2l6ZSAyMHB4XG5cbiAgaDNcbiAgICBmb250LXNpemUgMThweFxuXG4gIGg0XG4gICAgZm9udC1zaXplIDE2cHhcblxuICBoNVxuICAgIGZvbnQtc2l6ZSAxNHB4XG5cbiAgYVxuICAgIGNvbG9yIGNvbG9yLWxpbmtcbiAgICAmOmJlZm9yZVxuICAgICAgY29udGVudCAnWydcbiAgICAgIG1hcmdpbiAwIDJweFxuICAgICAgY29sb3IgY29sb3ItZ3JleVxuXG4gICAgJjphZnRlclxuICAgICAgY29udGVudCAnXSdcbiAgICAgIG1hcmdpbiAwIDJweFxuICAgICAgY29sb3IgY29sb3ItZ3JleVxuXG4gICAgJi5oZWFkZXJsaW5rLCAmLmZhbmN5Ym94XG4gICAgICAmOmFmdGVyLCAmOmJlZm9yZVxuICAgICAgICBkaXNwbGF5IG5vbmVcblxuXG4ubmF2XG4gIG1hcmdpbi1ib3R0b20gZ3V0dGVyLXNpemUgKiA0XG5cbiAgbGlcbiAgICBwb3NpdGlvbiByZWxhdGl2ZVxuICAgIGNvbG9yIGNvbG9yLWdyZXlcbiAgICBtYXJnaW4tYm90dG9tIGd1dHRlci1zaXplXG4gICAgbGluZS1oZWlnaHQgMS44cmVtXG5cbiAgICBhXG4gICAgICBjb2xvciBjb2xvci1saW5rXG4gICAgICAmOmJlZm9yZVxuICAgICAgICBjb250ZW50ICdbJ1xuICAgICAgICBtYXJnaW4gMCAycHhcbiAgICAgICAgY29sb3IgY29sb3ItZ3JleVxuXG4gICAgICAmOmFmdGVyXG4gICAgICAgIGNvbnRlbnQgJ10nXG4gICAgICAgIG1hcmdpbiAwIDJweFxuICAgICAgICBjb2xvciBjb2xvci1ncmV5XG5cbiAgICAmOmJlZm9yZVxuICAgICAgY29udGVudCAnICdcbiAgICAgIGRpc3BsYXkgaW5saW5lLWJsb2NrXG4gICAgICB2ZXJ0aWNhbC1hbGlnbiBtaWRkbGVcbiAgICAgIGxlZnQgLWd1dHRlci1zaXplXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIGNvbG9yLWxpbmtcbiAgICAgIHdpZHRoIDRweFxuICAgICAgaGVpZ2h0IDRweFxuICAgICAgYm9yZGVyLXJhZGl1cyAycHhcbiAgICAgIG1hcmdpbi1yaWdodCBndXR0ZXItc2l6ZVxuXG5cbi5leGNlcnB0XG4gIGNvbG9yIGNvbG9yLXRleHRcbiAgbWFyZ2luIGd1dHRlci1zaXplIDBcblxuLnByaWNlXG4gIGNvbG9yIGNvbG9yLXRleHRcbiAgbWFyZ2luIGd1dHRlci1zaXplIDBcbiAgcG9zaXRpb24gYWJzb2x1dGVcbiAgdG9wIDBcbiAgcmlnaHQgMXJlbVxuICBmb250LXNpemUgMS4ycmVtXG4gIGZvbnQtd2VpZ2h0IGJvbGRcbiAgY29sb3IgI2Y4NWQwM1xuICB0cmFuc2l0aW9uIGFsbCAuNnMgZWFzZVxuXG4gICY6YmVmb3Jle1xuICAgIGNvbnRlbnQgXCLvv6VcIlxuICAgIGZvbnQtc2l6ZSAwLjZyZW1cbiAgICBmb250LXdlaWdodCBub3JtYWxcbiAgICBjb2xvciAjOTk5XG4gIH1cbiAgJi5VU0Q6YmVmb3Jle1xuICAgIGNvbnRlbnQgXCIkXCJcbiAgICBmb250LXNpemUgMC42cmVtXG4gICAgZm9udC13ZWlnaHQgbm9ybWFsXG4gICAgY29sb3IgIzk5OVxuICB9XG5cbiAgJi5FVVJPOmJlZm9yZXtcbiAgICBjb250ZW50IFwi4oKsXCJcbiAgICBmb250LXNpemUgMC42cmVtXG4gICAgZm9udC13ZWlnaHQgbm9ybWFsXG4gICAgY29sb3IgIzk5OVxuICB9XG5cbiAgQG1lZGlhIG1xLW1vYmlsZSB7XG4gICAgcG9zaXRpb24gaW5pdGlhbFxuICAgIHBhZGRpbmcgMCAxLjIgKiBndXR0ZXItc2l6ZVxuICB9XG5cbi5hcnRpY2xlLWhlYWRlclxuICBwYWRkaW5nIDAgMS4yICogZ3V0dGVyLXNpemVcbiAgLmRlc2NcbiAgICBjb2xvciAjNjY2XG5cbi5hcnRpY2xlLWZvb3RlclxuICBtYXJnaW4tdG9wIDFyZW1cbiAgZGlzcGxheSBmbGV4XG4gIGp1c3RpZnktY29udGVudCBzcGFjZS1iZXR3ZWVuXG4gIHBhZGRpbmcgMCAxLjIgKiBndXR0ZXItc2l6ZVxuICBAbWVkaWEgbXEtbW9iaWxlIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQgZmxleC1zdGFydFxuICAgIGZsZXgtZGlyZWN0aW9uIGNvbHVtblxuICB9XG5cbi5kZXNjXG4gIC5wb3N0ICZcbiAgICBtYXJnaW4tdG9wIDFyZW1cbiAgICBwYWRkaW5nIDAgMSpndXR0ZXItc2l6ZVxuXG4ucmVnaXN0cmF0aW9uXG4gIC5wb3N0ICZcbiAgICBwYWRkaW5nIDVweCAxKmd1dHRlci1zaXplXG4gICAgYmFja2dyb3VuZCAjZWVlXG5cbi5kYXRlXG4gIGNvbG9yIGNvbG9yLWdyZXlcbiAgbWFyZ2luLWJvdHRvbSBndXR0ZXItc2l6ZVxuXG4gIC5ob21lICZcbiAgICBtYXJnaW4tYm90dG9tIDBcblxuLmV4Y2VycHQtbGlua1xuICBmb250LXNpemUgMXJlbVxuXG4udGFnc1xuICAuaG9tZSAmXG4gICAgbWFyZ2luLWJvdHRvbSAwXG4gIC5wb3N0ICZcbiAgICBwYWRkaW5nIDAgMSpndXR0ZXItc2l6ZVxuXG4udGFnLWxpbmtcbiAgYmFja2dyb3VuZC1jb2xvciBjb2xvci10YWdcbiAgY29sb3IgI2ZmZlxuICBsaW5lLWhlaWdodCAyMnB4XG4gIHBhZGRpbmcgMCAuNnJlbVxuICBkaXNwbGF5IGlubGluZS1ibG9ja1xuICBib3JkZXItcmFkaXVzIDEycHhcbiAgbWFyZ2luLXJpZ2h0IC41cmVtXG4gIGZvbnQtc2l6ZSAxMnB4XG5cbiAgJjpsYXN0LWNoaWxkXG4gICAgbWFyZ2luLXJpZ2h0IDBcblxuICAmOmhvdmVyXG4gICAgY29sb3IgI2ZmZlxuXG4gICY6YmVmb3JlXG4gICAgY29udGVudCAnIydcbiAgICBjb2xvciAjZmZmMWQ5XG4gICAgbWFyZ2luLXJpZ2h0IC4ycmVtXG4iLCIuY29udGFpbmVyLnRhZ1xuICBwYWRkaW5nOiAxcmVtXG5cbiAgLnRpdGxlXG4gICAgZm9udC1zaXplOiAycmVtXG4gIFxuICAudGFnc1xuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93XG4gICAgZmxleC13cmFwOiB3cmFwXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgZ2FwOiAxMHB4XG4gICAgYS5saW5rIHtcbiAgICAgIGZsZXg6IDEgMCBhdXRvXG4gICAgICBtaW4td2lkdGg6IDY0cHhcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZcbiAgICAgIGJvcmRlcjogbm9uZVxuICAgICAgYm94LXNoYWRvdzogMHB4IDFweCAzcHggcmdiYSg1MCw1MCw1MCwwLjAyKVxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICBmb250LXNpemU6IDEuMiAqIGZvbnQtc2l6ZVxuICAgICAgcGFkZGluZzogMXJlbSAxLjJyZW1cbiAgICB9XG5cblxuLnRhZ190aXRsZVxuICBmb250LXNpemU6IDJyZW0iLCIuYXJjaGl2ZXNcbiAgZGlzcGxheSBmbGV4XG4gIGZsZXgtd3JhcCB3cmFwXG5cbi5wb3N0LWFyY2hpdmVcbiAgYm94LXNpemluZyBib3JkZXItYm94XG4gIG1hcmdpbiBndXR0ZXItc2l6ZSAwXG4gIGZsZXgtYmFzaXMgNTAlXG5cbiAgQG1lZGlhIG1xLW1vYmlsZVxuICAgIGZsZXgtYmFzaXMgMTAwJVxuXG4gIEBtZWRpYSBtcS1ub3JtYWxcbiAgICAmOm50aC1jaGlsZCgybiArIDEpXG4gICAgICBwYWRkaW5nLXJpZ2h0IDFyZW1cblxuICAgICY6bnRoLWNoaWxkKDJuKVxuICAgICAgcGFkZGluZy1sZWZ0IDFyZW1cblxuLnBvc3QtYXJjaGl2ZV9fY29udGVudFxuICBiYWNrZ3JvdW5kLWNvbG9yIGNvbG9yLWFydGljbGUtYmFja2dyb3VuZFxuICBwYWRkaW5nIGd1dHRlci1zaXplXG4gIGRpc3BsYXkgZmxleFxuICBsaW5lLWhlaWdodCBsaW5lLWhlaWdodFxuICB0cmFuc2l0aW9uIGFsbCAuNnMgZWFzZVxuXG4gICY6aG92ZXJcbiAgICBib3gtc2hhZG93OiAwcHggMTBweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4wNylcblxuLnBvc3QtYXJjaGl2ZV9fbW9udGhcbiAgY29sb3IgY29sb3ItdGFnXG4gIGZsZXgtYmFzaXMgM3JlbVxuICBmbGV4LXNocmluayAwXG5cbi5wb3N0LWFyY2hpdmVfX2JvZHlcbiAgZmxleC1ncm93IDFcbiAgb3ZlcmZsb3cgaGlkZGVuXG5cbi5wb3N0LWFyY2hpdmVfX3RpdGxlXG4gIGZvbnQtc2l6ZSAxcmVtXG4gIGZvbnQtd2VpZ2h0IGJvbGRcbiAgbWFyZ2luLWJvdHRvbSAuMnJlbVxuICBkaXNwbGF5IGJsb2NrXG5cbi5wb3N0LWFyY2hpdmVfX2V4Y2VycHRcbiAgY29sb3IgY29sb3ItZ3JleVxuICBoZWlnaHQgM3JlbVxuICBvdmVyZmxvdyBoaWRkZW5cbiAgcG9zaXRpb24gcmVsYXRpdmVcblxuLnBvc3QtYXJjaGl2ZV9fZXhjZXJwdC1jb250ZW50XG4gIHBvc2l0aW9uIGFic29sdXRlXG4gIHdpZHRoIDEwMCVcbiIsIkByZXF1aXJlIFwidGhlbWVcIlxuXG4kYXJ0aWNsZVBhZGRpbmcgPSAkY29udGVudC1kZXNrdG9wLXBhZGRpbmdcbiRiYXNlLWxpbmUtaGVpZ2h0ID0gMS44XG4kbWItbGluZS1oZWlnaHQgPSAxLjZcblxuJGNvZGUtYmxvY2tcbiAgYmFja2dyb3VuZDogaGlnaGxpZ2h0LWJhY2tncm91bmRcbiAgbWFyZ2luOiAwIDAgMjBweCAwXG4gIHBhZGRpbmc6IDEycHggMTZweFxuICBib3JkZXItcmFkaXVzOiA2cHhcbiAgb3ZlcmZsb3c6IGF1dG9cbiAgZm9udC1zaXplIDEycHhcbiAgY29sb3I6IGhpZ2hsaWdodC1mb3JlZ3JvdW5kXG4gIGxpbmUtaGVpZ2h0OiAkYmFzZS1saW5lLWhlaWdodFxuICBib3JkZXIgMXB4IHNvbGlkIGhpZ2hsaWdodC1ib3JkZXItY29sb3JcblxuICBAbWVkaWEgbXEtbW9iaWxlXG4gICAgbGluZS1oZWlnaHQgJG1iLWxpbmUtaGVpZ2h0XG5cbiRsaW5lLW51bWJlcnNcbiAgY29sb3I6ICM2NjZcblxuJGxpbmUtY29kZS10aGVtZVxuICBjb2xvcjogY29sb3ItdGV4dFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gIGJvcmRlcjogMXB4IGRhcmtlbihjb2xvci1iYWNrZ3JvdW5kLCAxMCUpIHNvbGlkXG4gIGZvbnQtc2l6ZTogMTJweFxuXG5cbi5hcnRpY2xlXG4gIGJsb2NrcXVvdGVcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIGNvbG9yLWxpbms7XG4gICAgcGFkZGluZzogMTZweCAyMHB4O1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIGJhY2tncm91bmQ6IGNvbG9yLWJhY2tncm91bmQ7XG4gICAgbGluZS1oZWlnaHQ6ICRiYXNlLWxpbmUtaGVpZ2h0XG5cbiAgICBwXG4gICAgICBtYXJnaW46IDA7XG5cbiAgdGFibGVcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBoaWdobGlnaHQtdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cbiAgICB0aFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjksIDIyOSwgMjI5LCAwLjI4KTtcblxuICAgIHRoLCB0ZFxuICAgICAgYm9yZGVyOiAxcHggc29saWQgaGlnaGxpZ2h0LXRhYmxlLWJvcmRlci1jb2xvcjtcbiAgICAgIHBhZGRpbmc6IC43NXJlbTtcblxuICAgIHBcbiAgICAgIG1hcmdpbiAwXG4gIHByZSwgY29kZVxuICAgIGZvbnQtZmFtaWx5OiBmb250LW1vbm9cbiAgY29kZVxuICAgIHBhZGRpbmc6IDAuM2VtIC41ZW07XG4gICAgbWFyZ2luOiAwIDAuMmVtO1xuICAgIEBleHRlbmQgJGxpbmUtY29kZS10aGVtZVxuICAgIGJvcmRlci1yYWRpdXM6IDJweFxuICBwcmVcbiAgICBAZXh0ZW5kICRjb2RlLWJsb2NrXG4gICAgY29kZVxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgdGV4dC1zaGFkb3c6IG5vbmVcbiAgICAgIHBhZGRpbmc6IDBcbiAgLmhpZ2hsaWdodFxuICAgIEBleHRlbmQgJGNvZGUtYmxvY2tcbiAgICBwcmVcbiAgICAgIGJvcmRlcjogbm9uZVxuICAgICAgbWFyZ2luOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgdGFibGVcbiAgICAgIG1hcmdpbjogMFxuICAgICAgcGFkZGluZzogMFxuICAgICAgYm9yZGVyOiAwXG4gICAgICB3aWR0aDogYXV0b1xuICAgIHRkXG4gICAgICBib3JkZXI6IG5vbmVcbiAgICAgIHBhZGRpbmc6IDBcbiAgICBmaWdjYXB0aW9uXG4gICAgICBjbGVhcmZpeCgpXG4gICAgICBmb250LXNpemU6IDAuODVlbVxuICAgICAgY29sb3I6IGhpZ2hsaWdodC1jb21tZW50XG4gICAgICBsaW5lLWhlaWdodDogMWVtXG4gICAgICBtYXJnaW4tYm90dG9tOiAxZW1cbiAgICAgIGFcbiAgICAgICAgZmxvYXQ6IHJpZ2h0XG4gICAgLmd1dHRlciB7XG4gICAgICBkaXNwbGF5IG5vbmVcbiAgICB9XG4gICAgLmd1dHRlciBwcmVcbiAgICAgIEBleHRlbmQgJGxpbmUtbnVtYmVyc1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDIwcHhcbiAgICAubGluZVxuICAgICAgbGluZS1oZWlnaHQ6ICRiYXNlLWxpbmUtaGVpZ2h0XG4gICAgICBmb250LXNpemUgMTJweFxuXG4gICAgICBAbWVkaWEgbXEtbW9iaWxlXG4gICAgICAgIGxpbmUtaGVpZ2h0ICRtYi1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemUgMTJweFxuICAuZ2lzdFxuICAgIG1hcmdpbjogMjBweCAwIC8vMCAkYXJ0aWNsZVBhZGRpbmcgKiAtMVxuICAgIGJvcmRlci1zdHlsZTogc29saWRcbiAgICBib3JkZXItY29sb3I6ICRiYXNlQm9yZGVyQ29sb3JcbiAgICBib3JkZXItd2lkdGg6IDFweCAwXG4gICAgYmFja2dyb3VuZDogaGlnaGxpZ2h0LWJhY2tncm91bmRcbiAgICBwYWRkaW5nOiAxNXB4IGFydGljbGUtcGFkZGluZyAxNXB4IDE1cHhcbiAgICAuZ2lzdC1maWxlXG4gICAgICBib3JkZXI6IG5vbmVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1lblxuICAgICAgbWFyZ2luOiAwXG4gICAgICAuZ2lzdC1kYXRhXG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgICAgYm9yZGVyOiBub25lXG4gICAgICAgIC5saW5lLW51bWJlcnNcbiAgICAgICAgICBAZXh0ZW5kICRsaW5lLW51bWJlcnNcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgICAgYm9yZGVyOiBub25lXG4gICAgICAgICAgcGFkZGluZzogMCAyMHB4IDAgMFxuICAgICAgICAubGluZS1kYXRhXG4gICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50XG4gICAgICAuaGlnaGxpZ2h0XG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIGJvcmRlcjogbm9uZVxuICAgICAgLmdpc3QtbWV0YVxuICAgICAgICBiYWNrZ3JvdW5kOiBoaWdobGlnaHQtYmFja2dyb3VuZFxuICAgICAgICBjb2xvcjogaGlnaGxpZ2h0LWNvbW1lbnRcbiAgICAgICAgZm9udDogMTNweCAkZm9udC16aFxuICAgICAgICB0ZXh0LXNoYWRvdzogMCAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgbWFyZ2luLXRvcDogMWVtXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhcnRpY2xlLXBhZGRpbmdcbiAgICAgICAgYVxuICAgICAgICAgIGNvbG9yOiBjb2xvci1saW5rXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgICAgICY6aG92ZXJcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG5cbnByZVxuICAuY29tbWVudFxuICAgIGNvbG9yOiBoaWdobGlnaHQtY29tbWVudFxuICAudmFyaWFibGVcbiAgLmF0dHJpYnV0ZVxuICAudGFnXG4gIC5yZWdleHBcbiAgLnJ1YnkgLmNvbnN0YW50XG4gIC54bWwgLnRhZyAudGl0bGVcbiAgLnhtbCAucGlcbiAgLnhtbCAuZG9jdHlwZVxuICAuaHRtbCAuZG9jdHlwZVxuICAuY3NzIC5pZFxuICAuY3NzIC5jbGFzc1xuICAuY3NzIC5wc2V1ZG9cbiAgICBjb2xvcjogaGlnaGxpZ2h0LXJlZFxuICAubnVtYmVyXG4gIC5wcmVwcm9jZXNzb3JcbiAgLmJ1aWx0X2luXG4gIC5saXRlcmFsXG4gIC5wYXJhbXNcbiAgLmNvbnN0YW50XG4gICAgY29sb3I6IGhpZ2hsaWdodC1vcmFuZ2VcbiAgLnJ1YnkgLmNsYXNzIC50aXRsZVxuICAuY3NzIC5ydWxlcyAuYXR0cmlidXRlXG4gICAgY29sb3I6IGhpZ2hsaWdodC1ncmVlblxuICAuc3RyaW5nXG4gICAgY29sb3I6IGhpZ2hsaWdodC1ibHVlXG4gIC52YWx1ZVxuICAuaW5oZXJpdGFuY2VcbiAgLmhlYWRlclxuICAucnVieSAuc3ltYm9sXG4gIC54bWwgLmNkYXRhXG4gICAgY29sb3I6IGhpZ2hsaWdodC1ncmVlblxuICAudGl0bGVcbiAgICBmb250LXNpemUgMTJweCFpbXBvcnRhbnRcbiAgICBtYXJnaW4gMCFpbXBvcnRhbnRcbiAgLnRpdGxlXG4gIC5jc3MgLmhleGNvbG9yXG4gICAgY29sb3I6IGhpZ2hsaWdodC1hcXVhXG4gIC5mdW5jdGlvblxuICAucHl0aG9uIC5kZWNvcmF0b3JcbiAgLnB5dGhvbiAudGl0bGVcbiAgLnJ1YnkgLmZ1bmN0aW9uIC50aXRsZVxuICAucnVieSAudGl0bGUgLmtleXdvcmRcbiAgLnBlcmwgLnN1YlxuICAuamF2YXNjcmlwdCAudGl0bGVcbiAgLmNvZmZlZXNjcmlwdCAudGl0bGVcbiAgICBjb2xvcjogaGlnaGxpZ2h0LWJsdWVcbiAgLmtleXdvcmRcbiAgLmphdmFzY3JpcHQgLmZ1bmN0aW9uXG4gICAgY29sb3I6IGhpZ2hsaWdodC1ncmVlblxuIiwiJHRoZW1lX2NvbmZpZyA9IGhleG8tY29uZmlnKFwiaGlnaGxpZ2h0X3RoZW1lXCIpXG5cbmlmICR0aGVtZV9jb25maWcgPT0gXCJhdG9tIGRhcmtcIlxuXG4gIGhpZ2hsaWdodC1iYWNrZ3JvdW5kICAgPSAjMUQyNTJDXG4gIGhpZ2hsaWdodC1ib3JkZXItY29sb3IgPSAjMUQyNTJDXG4gIGhpZ2hsaWdodC10YWJsZS1ib3JkZXItY29sb3IgPSAjZGRkZGRkXG4gIGhpZ2hsaWdodC1jdXJyZW50LWxpbmUgPSAjMmEyYTJhXG4gIGhpZ2hsaWdodC1zZWxlY3Rpb24gICAgPSBkYXJrZW4oIzMzM0Y0QSwgMyUpXG4gIGhpZ2hsaWdodC1mb3JlZ3JvdW5kICAgPSAjQjdDNUQzXG4gIGhpZ2hsaWdodC1jb21tZW50ICAgICAgPSAjNDE1MDVFXG4gIGhpZ2hsaWdodC1yZWQgICAgICAgICAgPSAjRDk1NDY4XG4gIGhpZ2hsaWdodC1vcmFuZ2UgICAgICAgPSAjRDk4RTQ4XG4gIGhpZ2hsaWdodC15ZWxsb3cgICAgICAgPSAjRUJCRjgzXG4gIGhpZ2hsaWdodC1ncmVlbiAgICAgICAgPSAjMDA4Qjk0XG4gIGhpZ2hsaWdodC1hcXVhICAgICAgICAgPSAjNzBjMGIxXG4gIGhpZ2hsaWdodC1ibHVlICAgICAgICAgPSAjNTM5QUZDXG4gIGhpZ2hsaWdodC1wdXJwbGUgICAgICAgPSAjQjYyRDY1XG5cbmlmICR0aGVtZV9jb25maWcgPT0gXCJhdG9tIGxpZ2h0XCJcblxuICAgIGhpZ2hsaWdodC1iYWNrZ3JvdW5kICAgPSAjZmZmZmZmXG4gICAgaGlnaGxpZ2h0LWJvcmRlci1jb2xvciA9ICNlNWU1ZTVcbiAgICBoaWdobGlnaHQtdGFibGUtYm9yZGVyLWNvbG9yID0gI2RkZGRkZFxuICAgIGhpZ2hsaWdodC1jdXJyZW50LWxpbmUgPSAjMmEyYTJhXG4gICAgaGlnaGxpZ2h0LXNlbGVjdGlvbiAgICA9ICNjOGM4ZmFcbiAgICBoaWdobGlnaHQtZm9yZWdyb3VuZCAgID0gIzI0MjkyZVxuICAgIGhpZ2hsaWdodC1jb21tZW50ICAgICAgPSAjOTU5ZGE1XG4gICAgaGlnaGxpZ2h0LXJlZCAgICAgICAgICA9ICNkNzNhNDlcbiAgICBoaWdobGlnaHQtb3JhbmdlICAgICAgID0gI2UzNjIwOVxuICAgIGhpZ2hsaWdodC15ZWxsb3cgICAgICAgPSAjZjljNTEzXG4gICAgaGlnaGxpZ2h0LWdyZWVuICAgICAgICA9ICMwMDk2ODhcbiAgICBoaWdobGlnaHQtYXF1YSAgICAgICAgID0gIzcwYzBiMVxuICAgIGhpZ2hsaWdodC1ibHVlICAgICAgICAgPSAjNTM5QUZDXG4gICAgaGlnaGxpZ2h0LXB1cnBsZSAgICAgICA9ICNCNjJENjVcbiJdfQ== */