#market-sectors {
  z-index: 0;
}
#market-sectors > .text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
}
#market-sectors > .text .heading-h3 {
  margin-top: 0;
  color: var(--secondary, #df3035);
  width: 100%;
  max-width: 800px;
}
#market-sectors article-list {
  --background-colour: #f4f4f4;
  position: relative;
  margin-top: var(--spacer1);
  grid-gap: 1px;
  grid-template-columns: repeat(var(--columns), 1fr);
  grid-auto-rows: minmax(300px, 1fr);
}
#market-sectors article-list::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  outline: 2px solid white;
  pointer-events: none;
}
#market-sectors article-list .article .container {
  position: relative;
  border-radius: initial;
  border: initial;
  outline: 1px dashed #dcdcdc;
  overflow: visible;
  background-color: white;
  transition: background-color var(--transition-duration, 0.2s) var(--transition-ease, cubic-bezier(0.42, 0, 0.58, 1)) var(--transition-delay, ), opacity var(--transition-duration, 0.2s) var(--transition-ease, cubic-bezier(0.42, 0, 0.58, 1)) var(--transition-delay, );
}
#market-sectors article-list .article .container > * {
  position: relative;
  z-index: 2;
}
#market-sectors article-list .article .container .subheading {
  font-weight: normal;
  margin-bottom: auto;
}
#market-sectors article-list .article .container .button {
  margin-top: var(--gap);
}
#market-sectors article-list .article .container .image {
  position: absolute;
  z-index: 1;
  left: 80%;
  top: 0;
  width: 120%;
  height: 100%;
  margin: 0;
  pointer-events: none;
  opacity: 0;
  transform: translateX(var(--image-transition-x));
  transition: opacity var(--transition-duration, 0.2s) var(--transition-ease, cubic-bezier(0.42, 0, 0.58, 1)) var(--transition-delay, ), transform var(--transition-duration, 0.2s) var(--transition-ease, cubic-bezier(0.42, 0, 0.58, 1)) var(--transition-delay, );
}
#market-sectors article-list .article .container .image::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-image: linear-gradient(var(--image-gradient-angle), var(--background-colour) 10%, transparent);
}
@media (hover: hover) {
  #market-sectors article-list .article:hover {
    z-index: 2;
  }
  #market-sectors article-list .article:hover .container {
    background-color: var(--background-colour);
  }
  #market-sectors article-list .article:hover .container .image {
    transform: translateX(0%);
    opacity: 1;
  }
}
@media (min-width: 1301px) {
  #market-sectors article-list {
    --columns: 4;
    --image-gradient-angle: 100deg;
    --image-transition-x: -5%;
  }
}
@media (min-width: 1301px) and (hover: hover) {
  #market-sectors article-list .article:hover + .article:not(:nth-child(4n+1)) .container {
    opacity: 0;
  }
}
@media (min-width: 1301px) {
  #market-sectors article-list .article:nth-child(4n) .container {
    --image-gradient-angle: 270deg;
    --image-transition-x: 5%;
  }
  #market-sectors article-list .article:nth-child(4n) .container .image {
    left: initial;
    right: 80%;
  }
}
@media (min-width: 900px) and (max-width: 1300px) {
  #market-sectors article-list {
    --columns: 3;
    --image-gradient-angle: 100deg;
    --image-transition-x: -5%;
  }
}
@media (min-width: 900px) and (max-width: 1300px) and (hover: hover) {
  #market-sectors article-list .article:hover + .article:not(:nth-child(3n+1)) .container {
    opacity: 0;
  }
}
@media (min-width: 900px) and (max-width: 1300px) {
  #market-sectors article-list .article:nth-child(3n) .container {
    --image-gradient-angle: 270deg;
    --image-transition-x: 5%;
  }
  #market-sectors article-list .article:nth-child(3n) .container .image {
    left: initial;
    right: 80%;
  }
}
@media (min-width: 740px) and (max-width: 900px) {
  #market-sectors article-list {
    --columns: 2;
    --image-gradient-angle: 100deg;
    --image-transition-x: -5%;
  }
}
@media (min-width: 740px) and (max-width: 900px) and (hover: hover) {
  #market-sectors article-list .article:hover + .article:not(:nth-child(2n+1)) .container {
    opacity: 0;
  }
}
@media (min-width: 740px) and (max-width: 900px) {
  #market-sectors article-list .article:nth-child(2n) .container {
    --image-gradient-angle: 270deg;
    --image-transition-x: 5%;
  }
  #market-sectors article-list .article:nth-child(2n) .container .image {
    left: initial;
    right: 80%;
  }
}
@media (max-width: 740px) {
  #market-sectors article-list {
    margin-top: var(--spacer0);
    display: flex;
    flex-direction: column;
    grid-gap: initial;
  }
  #market-sectors article-list .article + .article {
    border-top: 1px solid #dcdcdc;
  }
  #market-sectors article-list .article .container {
    padding: var(--spacer0) 0;
    outline: initial;
  }
  #market-sectors article-list .article .container .introduction {
    max-width: 500px;
  }
  #market-sectors article-list .article .container .image {
    display: none !important;
  }
  #market-sectors article-list .article .container:before {
    content: "";
    background-color: inherit;
    z-index: -1;
    position: absolute;
    top: 0;
    left: 50%;
    width: 100vw;
    height: 100%;
    transform: translateX(var(--translateX, -50%));
  }
}
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvbWFya2V0LXNlY3RvcnMuc2NzcyIsImNvbXBvbmVudHMvbWFya2V0LXNlY3RvcnMuY3NzIiwiX3ZhcmlhYmxlcy9jb2xvdXJzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvQGRvZ2dpc3R5bGUvc2Fzcy9saWJyYXJ5L3NyYy9jcmVhdGUvX3VuaXRzLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvQGRvZ2dpc3R5bGUvc2Fzcy9saWJyYXJ5L3NyYy9jb2xsZWN0aW9ucy9zdHlsaW5nL19wb3NpdGlvbi5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bkb2dnaXN0eWxlL3Nhc3MvbGlicmFyeS9zcmMvY29sbGVjdGlvbnMvc3R5bGluZy9faG92ZXIuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AZG9nZ2lzdHlsZS9zYXNzL2xpYnJhcnkvc3JjL2hlbHBlcnMvX2JyZWFrLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvQGRvZ2dpc3R5bGUvc2Fzcy9saWJyYXJ5L3NyYy9jb2xsZWN0aW9ucy9zdHlsaW5nL19iYWNrZ3JvdW5kLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBO0VBRUUsVUFBQTtBQ25CRjtBRHFCRTtFQUNFLGFBQUE7RUFDQSxzQkFBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7RUFDQSxrQkFBQTtBQ25CSjtBRG9CSTtFQUNFLGFBQUE7RUFDQSxnQ0VXTTtFRlZOLFdBQUE7RUFDQSxnQkFBQTtBQ2xCTjtBRHNCRTtFQUVFLDRCQUFBO0VBRUEsa0JBQUE7RUFDQSwwQkcrRE87RUg5RFAsYUFBQTtFQUNBLGtEQUFBO0VBQ0Esa0NBQUE7QUN0Qko7QUR3Qkk7RUFDRSxXQUFBO0VJekNMLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFSnVDSyx3QkFBQTtFQUNBLG9CQUFBO0FDbEJOO0FEc0JNO0VBQ0Usa0JBQUE7RUFDQSxzQkFBQTtFQUNBLGVBQUE7RUFDQSwyQkFBQTtFQUNBLGlCQUFBO0VBQ0EsdUJBQUE7RUFDQSx5UUFBQTtBQ3BCUjtBRHFCUTtFQUFNLGtCQUFBO0VBQW9CLFVBQUE7QUNqQmxDO0FEa0JRO0VBQWMsbUJBQUE7RUFBcUIsbUJBQUE7QUNkM0M7QURlUTtFQUFVLHNCR2RWO0FGRVI7QURhUTtFQUNFLGtCQUFBO0VBQ0EsVUFBQTtFQUNBLFNBQUE7RUFDQSxNQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxTQUFBO0VBQ0Esb0JBQUE7RUFDQSxVQUFBO0VBQ0EsZ0RBQUE7RUFDQSxrUUFBQTtBQ1hWO0FEWVU7RUFDRSxXQUFBO0VJeEVYLGtCQUFBO0VBQ0EsTUFBQTtFQUNBLE9BQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFSnNFVyx5R0FBQTtBQ05aO0FJdEVFO0VBQ0U7SUxpRkksVUFBQTtFQ1JOO0VEU007SUFDRSwwQ0FBQTtFQ1BSO0VEUVE7SUFDRSx5QkFBQTtJQUNBLFVBQUE7RUNOVjtBQUNGO0FLbEZFO0VOZ0NBO0lBbENBLFlBQUE7SUFDQSw4QkFBQTtJQUNBLHlCQUFBO0VDd0ZBO0FBQ0Y7QUl6RkU7RUxJSTtJQUF3RCxVQUFBO0VDeUY1RDtBQUNGO0FLOUZFO0VOTUU7SUFDRSw4QkFBQTtJQUNBLHdCQUFBO0VDMkZKO0VEMUZJO0lBQVMsYUFBQTtJQUFjLFVBQUE7RUM4RjNCO0FBQ0Y7QUs1RkU7RU5vQkE7SUFsQ0EsWUFBQTtJQUNBLDhCQUFBO0lBQ0EseUJBQUE7RUM4R0E7QUFDRjtBSS9HRTtFTElJO0lBQXdELFVBQUE7RUMrRzVEO0FBQ0Y7QUt4R0U7RU5ORTtJQUNFLDhCQUFBO0lBQ0Esd0JBQUE7RUNpSEo7RURoSEk7SUFBUyxhQUFBO0lBQWMsVUFBQTtFQ29IM0I7QUFDRjtBS2xIRTtFTm9CQTtJQWxDQSxZQUFBO0lBQ0EsOEJBQUE7SUFDQSx5QkFBQTtFQ29JQTtBQUNGO0FJcklFO0VMSUk7SUFBd0QsVUFBQTtFQ3FJNUQ7QUFDRjtBSzlIRTtFTk5FO0lBQ0UsOEJBQUE7SUFDQSx3QkFBQTtFQ3VJSjtFRHRJSTtJQUFTLGFBQUE7SUFBYyxVQUFBO0VDMEkzQjtBQUNGO0FLOUlFO0VOMEJBO0lBdUVJLDBCR0pLO0lIS0wsYUFBQTtJQUNBLHNCQUFBO0lBQ0EsaUJBQUE7RUNpREo7RUQ5Q007SUFBYSw2QkFBQTtFQ2lEbkI7RURoRE07SUFDRSx5QkFBQTtJQUNBLGdCQUFBO0VDa0RSO0VEakRRO0lBQWdCLGdCQUFBO0VDb0R4QjtFRG5EUTtJQUNFLHdCQUFBO0VDcURWO0VNdEtBO0lBQ0UsV0FBQTtJQUNGLHlCQUFBO0lBQ0EsV0FBQTtJSGFBLGtCQUFBO0lBU0UsTUFBQTtJQUNBLFNBQUE7SUFDQSxZQUFBO0lBQ0EsWUFBQTtJQUNBLDhDQUFBO0VIb0pGO0FBQ0YiLCJmaWxlIjoiY29tcG9uZW50cy9tYXJrZXQtc2VjdG9ycy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICdfbW9kdWxlcycgYXMgKjtcblxuQG1peGluIF9jb2x1bW4tc3R5bGluZygkY29sdW1uczo0KSB7XG4gIC0tY29sdW1ucyA6ICN7JGNvbHVtbnN9O1xuICAtLWltYWdlLWdyYWRpZW50LWFuZ2xlIDogMTAwZGVnO1xuICAtLWltYWdlLXRyYW5zaXRpb24teCAgIDogLTUlO1xuXG4gIC5hcnRpY2xlIHtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICArIC5hcnRpY2xlOm5vdCg6bnRoLWNoaWxkKCN7JGNvbHVtbnN9bisxKSkgLmNvbnRhaW5lciB7IG9wYWNpdHk6MDsgfVxuICAgIH1cbiAgICAmOm50aC1jaGlsZCgjeyRjb2x1bW5zfW4pIC5jb250YWluZXIge1xuICAgICAgLS1pbWFnZS1ncmFkaWVudC1hbmdsZSA6IDI3MGRlZztcbiAgICAgIC0taW1hZ2UtdHJhbnNpdGlvbi14ICAgOiA1JTtcbiAgICAgIC5pbWFnZSB7IGxlZnQ6aW5pdGlhbDsgcmlnaHQ6ODAlOyB9XG4gICAgfVxuICB9XG59XG5cbiNtYXJrZXQtc2VjdG9ycyB7XG5cbiAgei1pbmRleDowO1xuXG4gID4gLnRleHQge1xuICAgIGRpc3BsYXk6ZmxleDsgXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAuaGVhZGluZy1oMyB7IFxuICAgICAgbWFyZ2luLXRvcDowOyBcbiAgICAgIGNvbG9yOiRzZWNvbmRhcnk7IFxuICAgICAgd2lkdGg6MTAwJTsgXG4gICAgICBtYXgtd2lkdGg6ODAwcHg7IFxuICAgIH1cbiAgfVxuXG4gIGFydGljbGUtbGlzdCB7XG5cbiAgICAtLWJhY2tncm91bmQtY29sb3VyIDogI3skZ3JleTN9O1xuXG4gICAgcG9zaXRpb246cmVsYXRpdmU7IFxuICAgIG1hcmdpbi10b3A6JHNwYWNlcjsgXG4gICAgZ3JpZC1nYXA6MXB4O1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KHZhcigtLWNvbHVtbnMpLCAxZnIpO1xuICAgIGdyaWQtYXV0by1yb3dzOiBtaW5tYXgoMzAwcHgsIDFmcik7XG4gICAgXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDpcIlwiO1xuICAgICAgQGluY2x1ZGUgcG9zaXRpb24tZXhwYW5kZWQ7XG4gICAgICBvdXRsaW5lOjJweCBzb2xpZCB3aGl0ZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgICBcbiAgICAuYXJ0aWNsZSB7XG4gICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246cmVsYXRpdmU7IFxuICAgICAgICBib3JkZXItcmFkaXVzOmluaXRpYWw7XG4gICAgICAgIGJvcmRlcjppbml0aWFsO1xuICAgICAgICBvdXRsaW5lOjFweCBkYXNoZWQgJGdyZXk0O1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgJHRyYW5zaXRpb24sIG9wYWNpdHkgJHRyYW5zaXRpb247XG4gICAgICAgID4gKiB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDoyOyB9XG4gICAgICAgIC5zdWJoZWFkaW5nIHsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgbWFyZ2luLWJvdHRvbTphdXRvOyB9XG4gICAgICAgIC5idXR0b24geyBtYXJnaW4tdG9wOiRnYXA7fVxuICAgICAgICAuaW1hZ2Uge1xuICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlOyBcbiAgICAgICAgICB6LWluZGV4OjE7XG4gICAgICAgICAgbGVmdDo4MCU7XG4gICAgICAgICAgdG9wOjA7XG4gICAgICAgICAgd2lkdGg6MTIwJTsgXG4gICAgICAgICAgaGVpZ2h0OjEwMCU7IFxuICAgICAgICAgIG1hcmdpbjowOyBcbiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICBvcGFjaXR5OjA7IFxuICAgICAgICAgIHRyYW5zZm9ybSA6IHRyYW5zbGF0ZVgodmFyKC0taW1hZ2UtdHJhbnNpdGlvbi14KSk7XG4gICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAkdHJhbnNpdGlvbiwgdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6XCJcIjtcbiAgICAgICAgICAgIEBpbmNsdWRlIHBvc2l0aW9uLWV4cGFuZGVkO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLWltYWdlLWdyYWRpZW50LWFuZ2xlKSwgdmFyKC0tYmFja2dyb3VuZC1jb2xvdXIpIDEwJSwgdHJhbnNwYXJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICAgIHotaW5kZXg6MjtcbiAgICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1iYWNrZ3JvdW5kLWNvbG91cik7IFxuICAgICAgICAgIC5pbWFnZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm0gOiB0cmFuc2xhdGVYKDAlKTtcbiAgICAgICAgICAgIG9wYWNpdHk6MTsgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWstb3V0KDEzMDApIHtcbiAgICAgIEBpbmNsdWRlIF9jb2x1bW4tc3R5bGluZyg0KTtcbiAgICB9XG4gICAgQGluY2x1ZGUgYnJlYWstYmV0d2Vlbig5MDAsIDEzMDApIHtcbiAgICAgIEBpbmNsdWRlIF9jb2x1bW4tc3R5bGluZygzKTtcbiAgICB9XG4gICAgQGluY2x1ZGUgYnJlYWstYmV0d2Vlbig3NDAsIDkwMCkge1xuICAgICAgQGluY2x1ZGUgX2NvbHVtbi1zdHlsaW5nKDIpO1xuICAgIH1cbiAgICBAaW5jbHVkZSBicmVhay1pbig3NDApIHtcbiAgICAgIG1hcmdpbi10b3A6JHNwYWNlcjA7IFxuICAgICAgZGlzcGxheTpmbGV4OyBcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBncmlkLWdhcDppbml0aWFsOyBcbiAgICAgIC5hcnRpY2xlIHtcbiAgXG4gICAgICAgICsgLmFydGljbGUgeyBib3JkZXItdG9wOjFweCBzb2xpZCAkZ3JleTQ7IH1cbiAgICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgICAgcGFkZGluZzokc3BhY2VyMCAwOyBcbiAgICAgICAgICBvdXRsaW5lOmluaXRpYWw7XG4gICAgICAgICAgLmludHJvZHVjdGlvbiB7IG1heC13aWR0aDo1MDBweDsgfVxuICAgICAgICAgIC5pbWFnZSB7XG4gICAgICAgICAgICBkaXNwbGF5Om5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgQGluY2x1ZGUgYmFja2dyb3VuZC1ibG93b3V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiI21hcmtldC1zZWN0b3JzIHtcbiAgei1pbmRleDogMDtcbn1cbiNtYXJrZXQtc2VjdG9ycyA+IC50ZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiNtYXJrZXQtc2VjdG9ycyA+IC50ZXh0IC5oZWFkaW5nLWgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgY29sb3I6IHZhcigtLXNlY29uZGFyeSwgI2RmMzAzNSk7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDgwMHB4O1xufVxuI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCB7XG4gIC0tYmFja2dyb3VuZC1jb2xvdXI6ICNmNGY0ZjQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2VyMSk7XG4gIGdyaWQtZ2FwOiAxcHg7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KHZhcigtLWNvbHVtbnMpLCAxZnIpO1xuICBncmlkLWF1dG8tcm93czogbWlubWF4KDMwMHB4LCAxZnIpO1xufVxuI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdDo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHdoaXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbiNtYXJrZXQtc2VjdG9ycyBhcnRpY2xlLWxpc3QgLmFydGljbGUgLmNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYm9yZGVyLXJhZGl1czogaW5pdGlhbDtcbiAgYm9yZGVyOiBpbml0aWFsO1xuICBvdXRsaW5lOiAxcHggZGFzaGVkICNkY2RjZGM7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciB2YXIoLS10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjJzKSB2YXIoLS10cmFuc2l0aW9uLWVhc2UsIGN1YmljLWJlemllcigwLjQyLCAwLCAwLjU4LCAxKSkgdmFyKC0tdHJhbnNpdGlvbi1kZWxheSwgKSwgb3BhY2l0eSB2YXIoLS10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjJzKSB2YXIoLS10cmFuc2l0aW9uLWVhc2UsIGN1YmljLWJlemllcigwLjQyLCAwLCAwLjU4LCAxKSkgdmFyKC0tdHJhbnNpdGlvbi1kZWxheSwgKTtcbn1cbiNtYXJrZXQtc2VjdG9ycyBhcnRpY2xlLWxpc3QgLmFydGljbGUgLmNvbnRhaW5lciA+ICoge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG59XG4jbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IC5hcnRpY2xlIC5jb250YWluZXIgLnN1YmhlYWRpbmcge1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBtYXJnaW4tYm90dG9tOiBhdXRvO1xufVxuI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZSAuY29udGFpbmVyIC5idXR0b24ge1xuICBtYXJnaW4tdG9wOiB2YXIoLS1nYXApO1xufVxuI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZSAuY29udGFpbmVyIC5pbWFnZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgbGVmdDogODAlO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMjAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1pbWFnZS10cmFuc2l0aW9uLXgpKTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjJzKSB2YXIoLS10cmFuc2l0aW9uLWVhc2UsIGN1YmljLWJlemllcigwLjQyLCAwLCAwLjU4LCAxKSkgdmFyKC0tdHJhbnNpdGlvbi1kZWxheSwgKSwgdHJhbnNmb3JtIHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMnMpIHZhcigtLXRyYW5zaXRpb24tZWFzZSwgY3ViaWMtYmV6aWVyKDAuNDIsIDAsIDAuNTgsIDEpKSB2YXIoLS10cmFuc2l0aW9uLWRlbGF5LCApO1xufVxuI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZSAuY29udGFpbmVyIC5pbWFnZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLWltYWdlLWdyYWRpZW50LWFuZ2xlKSwgdmFyKC0tYmFja2dyb3VuZC1jb2xvdXIpIDEwJSwgdHJhbnNwYXJlbnQpO1xufVxuQG1lZGlhIChob3ZlcjogaG92ZXIpIHtcbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpob3ZlciB7XG4gICAgei1pbmRleDogMjtcbiAgfVxuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IC5hcnRpY2xlOmhvdmVyIC5jb250YWluZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJhY2tncm91bmQtY29sb3VyKTtcbiAgfVxuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IC5hcnRpY2xlOmhvdmVyIC5jb250YWluZXIgLmltYWdlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCUpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMzAxcHgpIHtcbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCB7XG4gICAgLS1jb2x1bW5zOiA0O1xuICAgIC0taW1hZ2UtZ3JhZGllbnQtYW5nbGU6IDEwMGRlZztcbiAgICAtLWltYWdlLXRyYW5zaXRpb24teDogLTUlO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTMwMXB4KSBhbmQgKGhvdmVyOiBob3Zlcikge1xuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IC5hcnRpY2xlOmhvdmVyICsgLmFydGljbGU6bm90KDpudGgtY2hpbGQoNG4rMSkpIC5jb250YWluZXIge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMzAxcHgpIHtcbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpudGgtY2hpbGQoNG4pIC5jb250YWluZXIge1xuICAgIC0taW1hZ2UtZ3JhZGllbnQtYW5nbGU6IDI3MGRlZztcbiAgICAtLWltYWdlLXRyYW5zaXRpb24teDogNSU7XG4gIH1cbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpudGgtY2hpbGQoNG4pIC5jb250YWluZXIgLmltYWdlIHtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICAgIHJpZ2h0OiA4MCU7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5MDBweCkgYW5kIChtYXgtd2lkdGg6IDEzMDBweCkge1xuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IHtcbiAgICAtLWNvbHVtbnM6IDM7XG4gICAgLS1pbWFnZS1ncmFkaWVudC1hbmdsZTogMTAwZGVnO1xuICAgIC0taW1hZ2UtdHJhbnNpdGlvbi14OiAtNSU7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA5MDBweCkgYW5kIChtYXgtd2lkdGg6IDEzMDBweCkgYW5kIChob3ZlcjogaG92ZXIpIHtcbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpob3ZlciArIC5hcnRpY2xlOm5vdCg6bnRoLWNoaWxkKDNuKzEpKSAuY29udGFpbmVyIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogOTAwcHgpIGFuZCAobWF4LXdpZHRoOiAxMzAwcHgpIHtcbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpudGgtY2hpbGQoM24pIC5jb250YWluZXIge1xuICAgIC0taW1hZ2UtZ3JhZGllbnQtYW5nbGU6IDI3MGRlZztcbiAgICAtLWltYWdlLXRyYW5zaXRpb24teDogNSU7XG4gIH1cbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpudGgtY2hpbGQoM24pIC5jb250YWluZXIgLmltYWdlIHtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICAgIHJpZ2h0OiA4MCU7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NDBweCkgYW5kIChtYXgtd2lkdGg6IDkwMHB4KSB7XG4gICNtYXJrZXQtc2VjdG9ycyBhcnRpY2xlLWxpc3Qge1xuICAgIC0tY29sdW1uczogMjtcbiAgICAtLWltYWdlLWdyYWRpZW50LWFuZ2xlOiAxMDBkZWc7XG4gICAgLS1pbWFnZS10cmFuc2l0aW9uLXg6IC01JTtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc0MHB4KSBhbmQgKG1heC13aWR0aDogOTAwcHgpIGFuZCAoaG92ZXI6IGhvdmVyKSB7XG4gICNtYXJrZXQtc2VjdG9ycyBhcnRpY2xlLWxpc3QgLmFydGljbGU6aG92ZXIgKyAuYXJ0aWNsZTpub3QoOm50aC1jaGlsZCgybisxKSkgLmNvbnRhaW5lciB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc0MHB4KSBhbmQgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpudGgtY2hpbGQoMm4pIC5jb250YWluZXIge1xuICAgIC0taW1hZ2UtZ3JhZGllbnQtYW5nbGU6IDI3MGRlZztcbiAgICAtLWltYWdlLXRyYW5zaXRpb24teDogNSU7XG4gIH1cbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZTpudGgtY2hpbGQoMm4pIC5jb250YWluZXIgLmltYWdlIHtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICAgIHJpZ2h0OiA4MCU7XG4gIH1cbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NDBweCkge1xuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IHtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZXIwKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ3JpZC1nYXA6IGluaXRpYWw7XG4gIH1cbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZSArIC5hcnRpY2xlIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RjZGNkYztcbiAgfVxuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IC5hcnRpY2xlIC5jb250YWluZXIge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlcjApIDA7XG4gICAgb3V0bGluZTogaW5pdGlhbDtcbiAgfVxuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IC5hcnRpY2xlIC5jb250YWluZXIgLmludHJvZHVjdGlvbiB7XG4gICAgbWF4LXdpZHRoOiA1MDBweDtcbiAgfVxuICAjbWFya2V0LXNlY3RvcnMgYXJ0aWNsZS1saXN0IC5hcnRpY2xlIC5jb250YWluZXIgLmltYWdlIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgI21hcmtldC1zZWN0b3JzIGFydGljbGUtbGlzdCAuYXJ0aWNsZSAuY29udGFpbmVyOmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgIHotaW5kZXg6IC0xO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLXRyYW5zbGF0ZVgsIC01MCUpKTtcbiAgfVxufSIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb2xvdXJzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vLy8gRXhwbGljaXQgQ29sb3VycyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8vIEV4cGxpY2l0IGNvbG91cnMgYXJlIGEgd2hhdCB0aGV5IGFyZS4gR3JlZW4gaXMgZ3JlZW4sIGJsdWUgaXMgYmx1ZS4uLiBubyBvYnNjdXJpdHkuXG4vLy8gV2Ugc3VmZml4IG51bWJlcnMgdG8gZGVmaW5lIHZhcmlhdGlvbnMgb2YgY29sb3VycyBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyIG9mIHNoYWRlLlxuLy8vIEV4YW1wbGU6IGdyZWVuMSwgZ3JlZW4yLCBncmVlbjMsIGdyZWVuNC4gVGhpcyBpcyBzbyB3ZSBjYW4gaW1taWRpYXRlbHkgc2VlIGhvd1xuLy8vIG1hbnkgb3B0aW9ucyB3ZSBoYXZlIGZvciBhIHNpbmdsZSBjb2xvdXIgYXQgYSBnbGFuY2UuIElmIHlvdSBzZWUgJGdyZWVuNCwgeW91IGtub3cgdGhpc1xuLy8vIHByb2plY3QgaXMgdXNpbmcgZm91ciB2YXJpYXRpb25zIG9mIGdyZWVuLiBUaGlzIGlzIGFsc28gb2Z0ZW4gdXNlZnVsIGJlY2F1c2UgbWFueSBkZXZlbG9wbWVudFxuLy8vIHRvb2xzIHdpbGwgYXV0by1zdWdnZXN0IGNvbG91cnMgd2l0aCBhY3R1YWwgZXhhbXBsZXMgb2YgdGhlIGNvbG91ci5cbi8vLyBUaGUgUGFsbGV0ZXMgbW9kdWxlIChhdCB0aGUgYm90dG9tIG9mIHRoaXMgZmlsZSkgd2lsbCBvdXRwdXQgc2hhZGVkIG5hbWVkIHZhcmlhdGlvbnMsXG4vLy8vIDxjb2xvdXI+LWRhcmsgYW5kIDxjb2xvdXI+LWxpZ2h0LiBJZiB5b3UgbmVlZCBhZGRpdGlvbmFsIHNoYWRlcyBwbGVhc2UgcmVmcmFpbSBmcm9tIGdvaW5nIGRvd25cbi8vLyB0aGUgJ2xpZ2h0ZXInLCAnbGlnaHRlc3QnLCAnZGFya2VyJywgJ2Rhcmtlc3QnIGNvbnZlbnRpb24uIFRoZXNlIGFyZSBub3QgcGFydGljdWFybHkgbGVnaWFibGVcbi8vLyBhbmQgdGhleSBhcmUgbGltaXRlZCBieSBob3cgY3JlYXRpdmUgKGNvbmZ1c2luZykgeW91ciB3b3JkaW5nIGNhbiBiZS5cbi8vLyBJdCBpcyBiZXR0ZXIgdG8gZGVmaW5lIGEgbmV3IGV4cGxjaXQgY29sb3VyIGVudGlyZWx5LlxuLy8vIEBzZWUgaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93aGF0LWRvLXlvdS1uYW1lLWNvbG9yLXZhcmlhYmxlcy9cblxuJGJsdWU6ICMxMzFmNmI7IC8vIFByaW1hcnlcbiRibHVlMjogIzI5MmI2ODsgLy8gTmFrZWQgTGlua1xuJGJsdWUzOiAjM2QzZjdmOyAvLyBMaWdudCBHcmFkaWVudFxuJGJsdWU0OiAjMTAxMjRkOyAvLyBEYXJrIEdyYWRpZW50XG4kYmx1ZTU6ICMwMDk1ZmY7IC8vIE5hdmlnYXRpb24gbGluayBob3ZlclxuLy8gJHJlZCAgICA6ICNFMDNBNDA7IC8vIFNlY29uZGFyeVxuJHJlZDogI2RmMzAzNTsgLy8gU2Vjb25kYXJ5IC0gVGhpcyBwYXNzZXMgdGhlIGNvbnRyYXN0IHJhdGlvIGFjY2Vzc2liaWxpdHkgdGVzdCBpbiBHb29nbGVzIExpZ2h0aG91c2VcbiRncmV5OiAjOTY5Njk1O1xuJGdyZXkyOiAjNmE2YTZhOyAvLyBGb250XG4kZ3JleTM6ICNmNGY0ZjQ7IC8vIExpZ2h0ZXIgR3JleSBCYWNrZ3JvdW5kXG4kZ3JleTQ6ICNkY2RjZGM7XG4kZ3JleTU6ICNiMWIxYjE7IC8vIFNwYWNlcnMgPGhyPlxuJGdyZXk2OiAjMzMzMjM2OyAvLyBOYXZpZ2F0aW9uIGxpbmsgaG92ZXJcbiRncmVlbjogIzUwYmMwODtcbiRncmVlbjI6ICM3NmJiMjg7IC8vIEVTRyBncmVlblxuJHllbGxvdzogI2Y2ZjRkYjsgLy8gRGlzY2xhaW1lciBCYWNrZ3JvdW5kXG4keWVsbG93MjogI2ZjYjAwMjtcbiRvcmFuZ2U6ICNmZjZhMDA7XG4kb3JhbmdlMjogI2RhOGIwZjtcbiRibGFjazogIzFlMWMxYztcblxuJG1hcms6ICRibHVlNTsgLy8gYmFja2dyb3VuZCBjb2xvdXIgZm9yIDxtYXJrPiB0YWdzXG5cbiRwcmltYXJ5OiB2YXIoLS1wcmltYXJ5LCAjeyRibHVlfSk7XG4kc2Vjb25kYXJ5OiB2YXIoLS1zZWNvbmRhcnksICN7JHJlZH0pO1xuXG4vLy8gUGFsZXR0ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8vIEJ5IGxvYWRpbmcgY29uZmlndXJhdGlvbnMgaW50byB0aGlzICdwYWxsZXRlJyBtb2R1bGUsIHdlIHdpbGwgYmUgYWJsZVxuLy8vIHRvIGRlY2xhcmUgdmFyaWFudHMgb2YgYSBmZXcgY29tbW9uIGNvbG91cnMuIFlvdSBjYW4gYWxzbyBhZGp1c3QgdGhlIGxpZ2h0bmVzc1xuLy8vIG9yIGRhcmtuZXNzIG9mIGVhY2ggdmFyaWFudCBieSBwYXNzaW5nIGluIHRoZSByZWxldmFudCBwcml2YXRlIHJ1bGVzLlxuLy8vIFBhbGV0dGUgd2lsbCBhbHNvIGV4cG9zZSBwb3B1bGFyIHNvY2lhbCBtZWRpYSBjb2xvdXJzIGFuZCB0aGUgWWVsbG8gYnJhbmQgY29sb3VyLlxuLy8vIEBzZWUgaHR0cHM6Ly9zYXNzLWxhbmcuY29tL2RvY3VtZW50YXRpb24vYXQtcnVsZXMvZm9yd2FyZCNjb25maWd1cmluZy1tb2R1bGVzXG4vLy8gQG91dHB1dCAkZ3JlZW4gOiAjMDI5MjlBOyAkZ3JlZW4tZGFyayA6ICMyNTY1Njk7ICRncmVlbi1saWdodDogIzA0YjljNDtcblxuQGZvcndhcmQgJ2NyZWF0ZS9wYWxldHRlJyB3aXRoIChcbiAgJGJsdWU6ICRibHVlLFxuICAkcmVkOiAkcmVkLFxuICAkZ3JleTogJGdyZXksXG4gICR5ZWxsb3c6ICR5ZWxsb3csXG4gICRvcmFuZ2U6ICRvcmFuZ2UsXG4gICRncmVlbjogJGdyZWVuLFxuICAkYmxhY2s6ICRibGFja1xuKTtcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBVbml0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQHVzZSBcInNhc3M6bWF0aFwiO1xuQHVzZSAnc2FzczpzdHJpbmcnO1xuQHVzZSAnc2FzczptZXRhJztcblxuLy8gVGhpcyB1bml0cyBjcmVhdG9yIHdpbGwgcmVuZGVyIHNpeCBwb3NpdGl2ZSBhbmQgc2l4IG5lZ2F0aXZlIHNhc3MgdmFyaWFibGVzIGZvciBcbi8vIGdhcHMsIHNwYWNlcnMsIGFuZCBndXR0ZXJzIHJlbGF0aXZlIHRvIHRoZSBiYXNldiB2YWx1ZXMgZGVmaW5lZCBiZWxvdy5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYXNlIFZhbHVlcyBcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vLyBAc2VlIGh0dHBzOi8vY29kZXBlbi5pby9tYXJrbm90dG9uL3Blbi9FeFBiTkdlXG5cbi8vIFRoZXNlIHRocmVlIHZhbHVlcyB3aWxsIGFjdCBhIGNvbnN0YW50IGJhc2VsaW5lIGZvciBhbGwgZm9sbG93aW5nIHVuaXQgZGVsY2FyYXRpb25zLlxuXG4vLyBHYXBzIG11c3QgdXNlIGFuIGFic29sdXRlIGFuZCBzdGF0aWMgJ3B4JyB1bml0LiBJdCBzaG91bGQgbm90IGJlIHJlbGF0aXZlIHRvIGFueVxuLy8gcGFyZW50IGNvbnRhaW5lciBhbmQgaXMgbm90IGludGVuZGVkIGZvciBmb250IHNpemVzLCBzbyB5b3Ugc2hvdWxkIG5vdCB1c2UgJ3JlbScgb3IgJ2VtJy4gXG4kZ2FwIDogMTZweCAhZGVmYXVsdDtcbiRiYXNlLWdhcCA6ICRnYXA7XG5cbi8vIFNwYWNlcnMgbXVzdCB1c2UgYSAndmgnIHVuaXQgc28gdGhleSBhcmUgcmVsYXRpdmUgdG8gdGhlIHVzZXJzIHZpZXdwb3J0IGhlaWdodC13aXNlLlxuLy8gVGhleSBzaG91bGQgcHJpbWFyaWx5IGJlIHVzZWQgZm9yIHRoZSB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zIG9uIGEgY29tcG9uZW50IGxldmVsLlxuJHNwYWNlciA6IDR2aCAhZGVmYXVsdDsgXG4kYmFzZS1zcGFjZXIgOiAkc3BhY2VyOyBcblxuLy8gR3V0dGVycyBtdXN0IHVzZSBhICd2dycgdW5pdCBzbyB0aGV5IGFyZSByZWxhdGl2ZSB0byB0aGUgdXNlcnMgdmlld3BvcnQgd2lkdGgtd2lzZS4gXG4vLyBUaGV5IHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCBmb3IgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgb3IgbWFyZ2luIG9uIGEgcGFyZW50IGxldmVsLlxuLy8gQXMgYSBzdWdnZXN0aW9uLCB0aGlzIGd1dHRlciBjb25zdGFudCBzaG91bGQgYmUgaGFsZiB0aGUgc2l6ZSBvZiB0aGUgc3BhY2VyIHZhbHVlLlxuJGd1dHRlciA6IDN2dyAhZGVmYXVsdDtcbiRiYXNlLWd1dHRlciA6ICRndXR0ZXI7IFxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQXNib2x1dGUgVW5pdHMgXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBHYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gR2FwcyBhcmUgYW4gYWJzb2x1dGUgdW5pdCAocHgpIGludGVuZGVkIHRvIGJlIHVzZWQgb24gaW5kaXZpZHVhbCBlbGVtZW50cyB3aXRoaW4gYSBjb21wb25lbnRlZC4gXG4vLyBUaGUgYWltIGlzIHRvIHJldGFpbiBjb25zaXN0YW50IHNwYWNpbmcgYW1vbmdzdCBibG9jaywgaW5saW5lLCB0YWJsZSBhbmQgZ3JvdXAgaHRtbCBlbGVtZW50cy5cblxuQGZ1bmN0aW9uIGdhcCgkYW1vdW50IDogMSkge1xuICBAaWYgKCAkYW1vdW50ID09IDEgKSB7IFxuICAgIEByZXR1cm4gdmFyKC0tZ2FwKTsgXG4gIH0gQGVsc2UgeyBcbiAgICBAcmV0dXJuIGNhbGModmFyKC0tZ2FwKSAqICN7JGFtb3VudH0pOyBcbiAgfVxufVxuXG4kZ2FwMCA6IGdhcCgwLjUpOyAkZ2FwMC0gOiBnYXAoLTAuNSk7XG4kZ2FwICA6IGdhcCgxKTsgICAkZ2FwLSAgOiBnYXAoLTEpO1xuJGdhcDIgOiBnYXAoMik7ICAgJGdhcDItIDogZ2FwKC0yKTtcbiRnYXAzIDogZ2FwKDMpOyAgICRnYXAzLSA6IGdhcCgtMyk7XG4kZ2FwNCA6IGdhcCg0KTsgICAkZ2FwNC0gOiBnYXAoLTQpO1xuJGdhcDUgOiBnYXAoNSk7ICAgJGdhcDUtIDogZ2FwKC01KTtcbiRnYXA2IDogZ2FwKDYpOyAgICRnYXA2LSA6IGdhcCgtNik7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSZWxhdGl2ZSBVbml0cyBcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkBmdW5jdGlvbiBfZHluYW1pYy11bml0KCRjdXN0b20tcHJvcGVydHksICRhbW91bnQsICRtaW4sICRtYXgsICR1c2UtbmVnYXRpdmUgOiBmYWxzZSwgJHVzZS1jbGFtcCA6IHRydWUpIHtcblxuICAvLyBDYWxjIE1ldGhvZFxuICAkcmVzdWx0IDogY2FsYygoI3skY3VzdG9tLXByb3BlcnR5fSAqICN7JGFtb3VudH0pICsgI3tpZigkbWluID09IDAsIDBweCwgJG1pbil9KTtcbiAgXG4gIC8vIENsYW1wIE1ldGhvZFxuICBAaWYgKCAkdXNlLWNsYW1wICkge1xuICAgIEBpZiAoICRhbW91bnQgPT0gMCApIHtcbiAgICAgICRyZXN1bHQgOiBjbGFtcCgje21hdGguZGl2KCRtaW4sIDIpfSwgI3skY3VzdG9tLXByb3BlcnR5fSAqIDAuNSwgI3skbWF4fSk7XG4gICAgfSBAZWxzZSBpZiAoICRhbW91bnQgPT0gMSApIHtcbiAgICAgICRyZXN1bHQgOiBjbGFtcCgjeyRtaW59LCAjeyRjdXN0b20tcHJvcGVydHl9LCAjeyRtYXh9KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRyZXN1bHQgOiBjbGFtcCgjeyRtaW59LCAjeyRjdXN0b20tcHJvcGVydHl9ICogI3skYW1vdW50fSwgI3skbWF4fSk7XG4gICAgfVxuICB9IFxuXG4gIEBpZiAoICR1c2UtbmVnYXRpdmUgKSB7XG4gICAgJHJlc3VsdCA6IGNhbGMoLTEgKiAjeyRyZXN1bHR9KTtcbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcblxufSBcblxuLy8gU3BhY2VycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwYWNlcnMgYXJlIGEgcmVsYXRpdmUgdmlld3BvcnQgaGVpZ2h0ICh2aCkgdW5pdCBpbnRlbmRlZCB0byBiZSB1c2VkIG9uIGEgY29tcG9uZW50ZWQgbGV2ZWwuXG4vLyBUaGUgYWltIGlzIHRvIHJldGFpbiBjb25zaXN0YW50IHRvcCBhbmQgYm90dG9tIHNwYWNpbmcgYW1vbmdzdCAnc2VjdGlvbicgYW5kICdjdXN0b20nIGVsZW1lbnRzLlxuLy8gU3BhY2VycyB3aWxsIGVxdWF0ZSB0byBzb21ldGhpbmcgbGlrZTogYCgkc3BhY2VyICogeCkgKyAkZ2FwYC4gXG4vLyBUaGUgJyRnYXAnIGlzIGFkZGVkIHNvIHRoYXQgdmggc3BhY2luZyB3aWxsIG5ldmVyIHNjYWxlIHRvbyBjbG9zZSB0byAwcHguIFxuXG5AZnVuY3Rpb24gc3BhY2VyKCRhbW91bnQgOiAxLCAkbWluIDogJGJhc2UtZ2FwLCAkbWF4IDogbnVsbCwgJHVzZS1uZWdhdGl2ZSA6IGZhbHNlLCAkdXNlLWNsYW1wIDogdHJ1ZSkge1xuICBAaWYgKCAkYW1vdW50ID09IDApIHsgJGFtb3VudCA6IDAuNTsgJG1pbiA6IG1hdGguZGl2KCRtaW4sIDIpOyB9XG4gIEBpZiAoIG1ldGEudHlwZS1vZigkbWF4KSA9PSAnbnVsbCcgKSB7IFxuICAgIEBpZiAoIG1ldGEudHlwZS1vZigkbWluKSA9PSAnc3RyaW5nJyBhbmQgc3RyaW5nLmluZGV4KCRtaW4sICd2YXInKSApIHtcbiAgICAgICRtYXggOiBjYWxjKCN7JG1pbn0gKiAjeyRhbW91bnQgKyAxfSk7IFxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1heCA6ICN7JG1pbiAqICgkYW1vdW50ICsgMSl9OyBcbiAgICB9XG4gIH1cbiAgQHJldHVybiBfZHluYW1pYy11bml0KHZhcigtLXNwYWNlciksICRhbW91bnQsICRtaW4sICRtYXgsICR1c2UtbmVnYXRpdmUsICR1c2UtY2xhbXApO1xufVxuXG4kc3BhY2VyMCA6IHZhcigtLXNwYWNlcjApOyAkc3BhY2VyMC0gOiB2YXIoLS1zcGFjZXIwLSk7XG4kc3BhY2VyICA6IHZhcigtLXNwYWNlcjEpOyAkc3BhY2VyLSAgOiB2YXIoLS1zcGFjZXIxLSk7XG4kc3BhY2VyMiA6IHZhcigtLXNwYWNlcjIpOyAkc3BhY2VyMi0gOiB2YXIoLS1zcGFjZXIyLSk7XG4kc3BhY2VyMyA6IHZhcigtLXNwYWNlcjMpOyAkc3BhY2VyMy0gOiB2YXIoLS1zcGFjZXIzLSk7XG4kc3BhY2VyNCA6IHZhcigtLXNwYWNlcjQpOyAkc3BhY2VyNC0gOiB2YXIoLS1zcGFjZXI0LSk7XG4kc3BhY2VyNSA6IHZhcigtLXNwYWNlcjUpOyAkc3BhY2VyNS0gOiB2YXIoLS1zcGFjZXI1LSk7XG4kc3BhY2VyNiA6IHZhcigtLXNwYWNlcjYpOyAkc3BhY2VyNi0gOiB2YXIoLS1zcGFjZXI2LSk7XG5cbi8vIEd1dHRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBHdXR0ZXJzIGFyZSBhIHJlbGF0aXZlIHZpZXdwb3J0IHdpZHRoICh2dykgdW5pdCBpbnRlbmRlZCB0byBiZSB1c2VkIG9uIGEgcGFyZW50IGxldmVsO1xuLy8gZm9yIGV4YW1wbGUsIGEgd3JhcHBlciBjb250YWluZXIgb3IgYm9keSB3aXRoIG5lc3RlZCBjb21wb25lbnRzLiBcbi8vIFRoZSBhaW0gaXMgdG8gcmV0YWluIGNvbnNpc3RhbnQgbGVmdCBhbmQgcmlnaHQgc3BhY2luZyBhbW9uZ3N0ICdzZWN0aW9uJyBhbmQgJ2N1c3RvbScgZWxlbWVudHMuXG4vLyBHdXR0ZXJzIHdpbGwgZXF1YXRlIHRvIHNvbWV0aGluZyBsaWtlOiBgKCRndXR0ZXIgKiB4KSArICRnYXBgLiBcbi8vIFRoZSAnJGdhcCcgaXMgYWRkZWQgc28gdGhhdCB2dyBzcGFjaW5nIHdpbGwgbmV2ZXIgc2NhbGUgdG9vIGNsb3NlIHRvIDBweC4gXG5cbkBmdW5jdGlvbiBndXR0ZXIoJGFtb3VudCA6IDEsICRtaW4gOiAkYmFzZS1nYXAsICRtYXggOiBudWxsLCAkdXNlLW5lZ2F0aXZlIDogZmFsc2UsICR1c2UtY2xhbXAgOiB0cnVlKSB7XG4gIEBpZiAoICRhbW91bnQgPT0gMCkgeyAkYW1vdW50IDogMC41OyAkbWluIDogbWF0aC5kaXYoJG1pbiwgMik7IH1cbiAgQGlmICggbWV0YS50eXBlLW9mKCRtYXgpID09ICdudWxsJyApIHsgXG4gICAgQGlmICggbWV0YS50eXBlLW9mKCRtaW4pID09ICdzdHJpbmcnIGFuZCBzdHJpbmcuaW5kZXgoJG1pbiwgJ3ZhcicpICkge1xuICAgICAgJG1heCA6IGNhbGMoI3skbWlufSAqICN7JGFtb3VudCArIDF9KTsgXG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWF4IDogI3skbWluICogKCRhbW91bnQgKyAxKX07IFxuICAgIH1cbiAgfVxuICBAcmV0dXJuIF9keW5hbWljLXVuaXQodmFyKC0tZ3V0dGVyKSwgJGFtb3VudCwgJG1pbiwgJG1heCwgJHVzZS1uZWdhdGl2ZSwgJHVzZS1jbGFtcCk7XG59XG5cbiRndXR0ZXIwIDogdmFyKC0tZ3V0dGVyMCk7ICRndXR0ZXIwLSA6IHZhcigtLWd1dHRlcjAtKTtcbiRndXR0ZXIgIDogdmFyKC0tZ3V0dGVyMSk7ICRndXR0ZXItICA6IHZhcigtLWd1dHRlcjEtKTtcbiRndXR0ZXIyIDogdmFyKC0tZ3V0dGVyMik7ICRndXR0ZXIyLSA6IHZhcigtLWd1dHRlcjItKTtcbiRndXR0ZXIzIDogdmFyKC0tZ3V0dGVyMyk7ICRndXR0ZXIzLSA6IHZhcigtLWd1dHRlcjMtKTtcbiRndXR0ZXI0IDogdmFyKC0tZ3V0dGVyNCk7ICRndXR0ZXI0LSA6IHZhcigtLWd1dHRlcjQtKTtcbiRndXR0ZXI1IDogdmFyKC0tZ3V0dGVyNSk7ICRndXR0ZXI1LSA6IHZhcigtLWd1dHRlcjUtKTtcbiRndXR0ZXI2IDogdmFyKC0tZ3V0dGVyNik7ICRndXR0ZXI2LSA6IHZhcigtLWd1dHRlcjYtKTtcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8gUG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwb3NpdGlvblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQHVzZSAnLi4vaGVscGVycy9icmVhayc7XG5cbkBtaXhpbiBleHBhbmRlZCB7XG5cdHBvc2l0aW9uOmFic29sdXRlOyBcblx0dG9wOjA7IFxuXHRsZWZ0OjA7IFxuXHR3aWR0aDoxMDAlO1xuXHRoZWlnaHQ6MTAwJTsgXG59XG5cbkBtaXhpbiBjZW50cmUge1xuICBwb3NpdGlvbjphYnNvbHV0ZTsgXG5cdHRvcDo1MCU7IFxuXHRsZWZ0OjUwJTtcbiAgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgXG59XG5cbkBtaXhpbiBibG93b3V0KCRob3Jpem9udGFsIDogdHJ1ZSwgJHZlcnRpY2FsIDogZmFsc2UpIHtcbiAgXG4gIHBvc2l0aW9uOmFic29sdXRlO1xuXG4gIEBpZiAkaG9yaXpvbnRhbCBhbmQgJHZlcnRpY2FsIHtcbiAgICB0b3AgICAgICAgOiA1MCU7IFxuICAgIGxlZnQgICAgICA6IDUwJTsgXG4gICAgd2lkdGggICAgIDogMTAwdnc7XG4gICAgaGVpZ2h0ICAgIDogMTAwdmg7IFxuICAgIHRyYW5zZm9ybSA6IHRyYW5zbGF0ZSh2YXIoLS10cmFuc2xhdGVYLCAtNTAlKSwgdmFyKC0tdHJhbnNsYXRlWSwgLTUwJSkpO1xuICB9IEBlbHNlIGlmICRob3Jpem9udGFsICB7XG4gICAgdG9wICAgICAgIDogMDsgXG4gICAgbGVmdCAgICAgIDogNTAlOyBcbiAgICB3aWR0aCAgICAgOiAxMDB2dztcbiAgICBoZWlnaHQgICAgOiAxMDAlOyBcbiAgICB0cmFuc2Zvcm0gOiB0cmFuc2xhdGVYKHZhcigtLXRyYW5zbGF0ZVgsIC01MCUpKTtcbiAgfSBAZWxzZSBpZiAkdmVydGljYWwgIHtcbiAgICB0b3AgICAgICAgOiA1MCU7IFxuICAgIGxlZnQgICAgICA6IDA7IFxuICAgIHdpZHRoICAgICA6IDEwMCU7XG4gICAgaGVpZ2h0ICAgIDogMTAwdmg7IFxuICAgIHRyYW5zZm9ybSA6IHRyYW5zbGF0ZVkodmFyKC0tdHJhbnNsYXRlWSwgLTUwJSkpO1xuICB9XG5cbn0iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vIEhvdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaG92ZXJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkBtaXhpbiBob3Zlcigkc2VsZWN0b3IgOiBudWxsKSB7XG4gIEBtZWRpYSAoIGhvdmVyIDogaG92ZXIgKSB7XG4gICAgJjpob3ZlciB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cblxuICBAaWYgJHNlbGVjdG9yIHtcbiAgICAmI3skc2VsZWN0b3J9IHsgXG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cblxufSIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8gQnJlYWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNicmVha1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQG1peGluIG91dCgkYnJlYWtwb2ludCkge1xuICBAbWVkaWEgKG1pbi13aWR0aDojeyRicmVha3BvaW50ICsgMX0pIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gaW4oJGJyZWFrcG9pbnQpIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6I3skYnJlYWtwb2ludH0pIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gYmV0d2VlbigkbWluLCAkbWF4KSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiN7JG1pbn0pIGFuZCAobWF4LXdpZHRoOiN7JG1heH0pIHtcbiAgICBAY29udGVudDtcbiAgfVxufSIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8gQmFja2dyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYmFja2dyb3VuZFxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuQHVzZSAncG9zaXRpb24nO1xuXG5AbWl4aW4gYmxvd291dCgkcHN1ZG8gOiBiZWZvcmUpIHtcbiAgJjojeyRwc3Vkb30ge1xuICAgIGNvbnRlbnQ6XCJcIjtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7IFxuXHRcdHotaW5kZXg6LTE7IFxuICAgIEBpbmNsdWRlIHBvc2l0aW9uLmJsb3dvdXQ7IFxuICAgIEBjb250ZW50O1xuICB9XG59Il19 */